import { available_models, AvailableModelsRequester, } from "../networks/llm_requester.js"; class EndpointStorageItem {} class EndpointStorage { constructor() { this.init_database(); this.render_endpoint_and_api_key_items(); this.fill_available_models_select(); } init_database() { this.db = new Dexie("endpoints"); this.db.version(1).stores({ endpoints: "index, endpoint, api_key", data: "", }); this.db.endpoints.count((count) => { console.log(`${count} endpoints loaded.`); }); } clear_database() { this.db.endpoints.clear(); console.log("endpoints cleared."); } get_endpoint_and_api_key_item_html() { let endpoint_and_api_key_item_html = `
`; return endpoint_and_api_key_item_html; } add_endpoint_and_api_key_item() { let endpoint_and_api_key_items = $("#endpoint-and-api-key-items"); let endpoint_and_api_key_item = $( this.get_endpoint_and_api_key_item_html() ); endpoint_and_api_key_items.prepend(endpoint_and_api_key_item); this.bind_endpoint_and_api_key_buttons(); } create_endpoint_and_api_key_items() { let endpoint_and_api_key_items = $("#endpoint-and-api-key-items"); let endpoints = this.db.endpoints; endpoint_and_api_key_items.empty(); endpoints.each((row) => { let endpoint_and_api_key_item_html = this.get_endpoint_and_api_key_item_html(); let endpoint_and_api_key_item = $(endpoint_and_api_key_item_html); let endpoint_input = endpoint_and_api_key_item.find(".endpoint-input"); endpoint_input.val(row.endpoint); let api_key_input = endpoint_and_api_key_item.find(".api-key-input"); api_key_input.val(row.api_key); endpoint_and_api_key_items.prepend(endpoint_and_api_key_item); }); } bind_endpoint_and_api_key_buttons() { let endpoint_submit_buttons = $(".endpoint-submit-button"); let self = this; endpoint_submit_buttons.click(function () { let endpoint_input = $(this) .parent() .parent() .find(".endpoint-input"); let endpoint_input_value = endpoint_input.val().trim(); let api_key_input = $(this) .parent() .parent() .find(".api-key-input"); let api_key_input_value = api_key_input.val().trim(); if (endpoint_input_value === "") { console.log("Endpoint is empty."); return; } else { self.db.endpoints.put({ index: endpoint_input_value, endpoint: endpoint_input_value, api_key: api_key_input_value, }); console.log(`new_endpoint: ${endpoint_input_value}`); } }); } fill_available_models_select() { var select = $("#available-models-select"); select.empty(); // for loop the endpoints in endpoint_storage.db.endpoints this.db.endpoints.toArray().then(async (entries) => { for (const entry of entries) { let endpoint = entry.endpoint; console.log("fetch available models for endpoint:", endpoint); let available_models_requester = new AvailableModelsRequester( endpoint ); await available_models_requester.get(); } available_models.forEach((value, index) => { const option = new Option(value, value); select.append(option); }); // set default model let default_model = ""; let db_default_model = ""; this.db.data.get("default_model").then((value) => { db_default_model = value; console.log("db_default_model:", db_default_model); if ( db_default_model && available_models.includes(db_default_model) ) { default_model = db_default_model; } else if (available_models) { default_model = available_models[0]; this.db.data.put({ key: "default_model", value: default_model, }); } else { default_model = ""; } select.val(default_model); console.log(`default_model: ${select.val()}`); }); }); } render_endpoint_and_api_key_items() { this.create_endpoint_and_api_key_items(); this.bind_endpoint_and_api_key_buttons(); } } export let endpoint_storage = new EndpointStorage();