diff --git a/aiserver.py b/aiserver.py index e8322f4a..aaacce0d 100644 --- a/aiserver.py +++ b/aiserver.py @@ -1181,6 +1181,7 @@ def get_model_info(model, directory=""): default_url = None models_on_url = False multi_online_models = False + show_online_model_select=False gpu_count = torch.cuda.device_count() gpu_names = [] for i in range(gpu_count): @@ -1189,6 +1190,7 @@ def get_model_info(model, directory=""): url = True elif model == 'CLUSTER': models_on_url = True + show_online_model_select=True url = True key = True default_url = 'https://koboldai.net' @@ -1206,6 +1208,7 @@ def get_model_info(model, directory=""): default_url = js['oaiurl'] get_cluster_models({'model': model, 'key': key_value, 'url': default_url}) elif model in [x[1] for x in model_menu['apilist']]: + show_online_model_select=True if path.exists("settings/{}.v2_settings".format(model)): with open("settings/{}.v2_settings".format(model), "r") as file: # Check if API key exists @@ -1254,7 +1257,7 @@ def get_model_info(model, directory=""): 'gpu':gpu, 'layer_count':layer_count, 'breakmodel':breakmodel, 'multi_online_models': multi_online_models, 'default_url': default_url, 'disk_break_value': disk_blocks, 'disk_break': utils.HAS_ACCELERATE, 'break_values': break_values, 'gpu_count': gpu_count, - 'url': url, 'gpu_names': gpu_names, 'models_on_url': models_on_url}, broadcast=False, room="UI_2") + 'url': url, 'gpu_names': gpu_names, 'models_on_url': models_on_url, 'show_online_model_select': show_online_model_select}, broadcast=False, room="UI_2") @@ -1927,6 +1930,7 @@ def load_model(use_gpu=True, gpu_layers=None, disk_layers=None, initial_load=Fal if not utils.HAS_ACCELERATE: disk_layers = None koboldai_vars.reset_model() + koboldai_vars.cluster_requested_models = online_model koboldai_vars.noai = False if not use_breakmodel_args: set_aibusy(True) @@ -1990,7 +1994,7 @@ def load_model(use_gpu=True, gpu_layers=None, disk_layers=None, initial_load=Fal koboldai_vars.configname = f"{koboldai_vars.model}_{online_model.replace('/', '_')}" if path.exists(get_config_filename()): changed=False - with open("settings/{}.v2_settings".format(koboldai_vars.model), "r") as file: + with open(get_config_filename(), "r") as file: # Check if API key exists js = json.load(file) if 'online_model' in js: diff --git a/koboldai_settings.py b/koboldai_settings.py index b22f372b..30a1b74b 100644 --- a/koboldai_settings.py +++ b/koboldai_settings.py @@ -439,7 +439,7 @@ class model_settings(settings): self.selected_preset = "" self.uid_presets = [] self.default_preset = {} - cluster_requested_models = [] # The models which we allow to generate during cluster mode + self.cluster_requested_models = [] # The models which we allow to generate during cluster mode #dummy class to eat the tqdm output diff --git a/static/koboldai.css b/static/koboldai.css index d46c81d6..1e6ac338 100644 --- a/static/koboldai.css +++ b/static/koboldai.css @@ -2290,6 +2290,7 @@ h2 .material-icons-outlined { } } -.horde_trigger[model_model="ReadOnly"] { +.horde_trigger[model_model="ReadOnly"], +.horde_trigger[model_model="CLUSTER"] { display: none; } \ No newline at end of file diff --git a/static/koboldai.js b/static/koboldai.js index f70b5d89..15f838a3 100644 --- a/static/koboldai.js +++ b/static/koboldai.js @@ -1062,6 +1062,7 @@ function show_model_menu(data) { document.getElementById("modelurl").classList.add("hidden"); document.getElementById("use_gpu_div").classList.add("hidden"); document.getElementById("modellayers").classList.add("hidden"); + document.getElementById("oaimodel").classList.add("hidden"); var model_layer_bars = document.getElementById('model_layer_bars'); while (model_layer_bars.firstChild) { model_layer_bars.removeChild(model_layer_bars.firstChild); @@ -1169,15 +1170,27 @@ function selected_model_info(data) { document.getElementById("modelurl").classList.add("hidden"); } + //default URL loading + if (data.default_url != null) { + document.getElementById("modelurl").value = data.default_url; + } + //change model loading on url if needed if (data.models_on_url) { - document.getElementById("modelurl").onchange = function () {socket.emit('get_cluster_models', {'key': document.getElementById("modelkey").value, 'url': this.value});}; - document.getElementById("modelkey").onchange = function () {socket.emit('get_cluster_models', {'key': this.value, 'url': document.getElementById("modelurl").value});}; + document.getElementById("modelurl").onchange = function () {socket.emit('get_cluster_models', {'model': document.getElementById('btn_loadmodelaccept').getAttribute('selected_model'), 'key': document.getElementById("modelkey").value, 'url': this.value});}; + document.getElementById("modelkey").onchange = function () {socket.emit('get_cluster_models', {'model': document.getElementById('btn_loadmodelaccept').getAttribute('selected_model'), 'key': this.value, 'url': document.getElementById("modelurl").value});}; } else { document.getElementById("modelkey").ochange = function () {socket.emit('OAI_Key_Update', {'model': document.getElementById('btn_loadmodelaccept').getAttribute('selected_model'), 'key': this.value});}; document.getElementById("modelurl").ochange = null; } + //show model select for APIs + if (data.show_online_model_select) { + document.getElementById("oaimodel").classList.remove("hidden"); + } else { + document.getElementById("oaimodel").classList.add("hidden"); + } + //Multiple Model Select? if (data.multi_online_models) { document.getElementById("oaimodel").setAttribute("multiple", ""); @@ -1372,10 +1385,20 @@ function load_model() { var path = ""; } + let selected_models = []; + for (item of document.getElementById("oaimodel").selectedOptions) { + selected_models.push(item.value); + } + if (selected_models == []) { + selected_models = ""; + } else if (selected_models.length == 1) { + selected_models = selected_models[0]; + } + message = {'model': model, 'path': path, 'use_gpu': document.getElementById("use_gpu").checked, 'key': document.getElementById('modelkey').value, 'gpu_layers': gpu_layers.join(), 'disk_layers': disk_layers, 'url': document.getElementById("modelurl").value, - 'online_model': document.getElementById("oaimodel").value}; + 'online_model': selected_models}; socket.emit("load_model", message); document.getElementById("loadmodelcontainer").classList.add("hidden"); }