File size: 5,573 Bytes
ae31beb c009dd5 ae31beb c009dd5 ae31beb c009dd5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
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",
default_model: "model",
});
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 = `
<div class="row mt-2 no-gutters">
<div class="col-auto">
<button class="btn px-0 remove-endpoint-and-key-button">
<i class="fa fa-circle-minus"></i>
</button>
</div>
<div class="col pl-0">
<input class="form-control endpoint-input" rows="1"
placeholder="Input Endpoint URL"
></input>
</div>
<div class="col pl-0">
<input class="form-control api-key-input" rows="1"
placeholder="Input API Key, then click √"
></input>
</div>
<div class="col-auto px-0">
<button class="btn endpoint-submit-button">
<i class="fa fa-check"></i>
</button>
</div>
</div>
`;
return endpoint_and_api_key_item_html;
}
add_endpoint_and_api_key_item() {
let endpoint_and_api_key_items = $("#endpoint-and-api-key-items");
endpoint_and_api_key_items.prepend(
this.get_endpoint_and_api_key_item_html()
);
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 local_default_model = endpoint_storage.db.default_model;
if (
local_default_model &&
available_models.includes(local_default_model)
) {
default_model = local_default_model;
} else if (available_models) {
default_model = available_models[0];
endpoint_storage.db.default_model = 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();
|