Initialize page on load

151a77cd366844b1ea36ba30d94079cf038e6c4c

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +22 -30Showing whitespace changes
public/scripts/textgen-models.js+21 -30
@@ -266,8 +266,8 @@ export async function loadAphroditeModels(data) {
266266 }
267267}
268268
269-let selectedModelId = null;
269+// Page -1 will be initialized from a selected model.
270270let currentPage = -1;
271271export async function loadFeatherlessModels(data) {
272272 const searchBar = document.getElementById('model_search_bar');
273273 const modelCardBlock = document.getElementById('model_card_block');
@@ -297,6 +297,8 @@ export async function loadFeatherlessModels(data) {
297297 const perPage = Number(localStorage.getItem(storageKey)) || 10;
298298
299299 // Initialize pagination with the full set of models
300+ const selectedModelPage = (data.findIndex(x => x.id === textgen_settings.featherless_model) / perPage) + 1;
301+ currentPage = currentPage === -1 && selectedModelPage > 0 ? selectedModelPage : 1;
300302 setupPagination(originalModels, perPage);
301303
302304 // Function to set up pagination (also used for filtered results)
@@ -354,7 +356,7 @@ export async function loadFeatherlessModels(data) {
354356
355357 modelCardBlock.appendChild(card);
356358
357359 if (model.id === selectedModelIdtextgen_settings.featherless_model) {
358360 card.classList.add('selected');
359361 }
360362
@@ -376,8 +378,6 @@ export async function loadFeatherlessModels(data) {
376378 });
377379 }
378380
379-
380-
381381 // Add event listener for input on the search bar
382382 searchBar.addEventListener('input', function () {
383383 applyFiltersAndSort();
@@ -411,6 +411,12 @@ export async function loadFeatherlessModels(data) {
411411
412412 // Function to apply sorting and filtering based on user input
413413 async function applyFiltersAndSort() {
414+ if (!(searchBar instanceof HTMLInputElement) ||
415+ !(sortOrderSelect instanceof HTMLSelectElement) ||
416+ !(classSelect instanceof HTMLSelectElement) ||
417+ !(categoriesSelect instanceof HTMLSelectElement)) {
418+ return;
419+ }
414420 const searchQuery = searchBar.value.toLowerCase();
415421 const selectedSortOrder = sortOrderSelect.value;
416422 const selectedClass = classSelect.value;
@@ -460,7 +466,15 @@ export async function loadFeatherlessModels(data) {
460466 setupPagination(filteredModels, Number(localStorage.getItem(storageKey)) || perPage, currentPage);
461467 }
462468
463-
469+ // Required to keep the /model command function
470+ $('#featherless_model').empty();
471+ for (const model of data) {
472+ const option = document.createElement('option');
473+ option.value = model.id;
474+ option.text = model.id;
475+ option.selected = model.id === textgen_settings.featherless_model;
476+ $('#featherless_model').append(option);
477+ }
464478}
465479
466480async function fetchFeatherlessStats() {
@@ -476,10 +490,9 @@ async function fetchFeatherlessNew() {
476490}
477491
478492function onFeatherlessModelSelect(modelId) {
479-
480493 const model = featherlessModels.find(x => x.id === modelId);
481- selectedModelId = modelId;
482494 textgen_settings.featherless_model = modelId;
495+ $('#featherless_model').val(modelId);
483496 $('#api_button_textgenerationwebui').trigger('click');
484497 setGenerationParamsFromPreset({ max_length: model.context_length });
485498}
@@ -679,20 +692,6 @@ function getAphroditeModelTemplate(option) {
679692 `));
680693}
681694
682-function getFeatherlessModelTemplate(option) {
683- const model = featherlessModels.find(x => x.id === option?.element?.value);
684-
685- if (!option.id || !model) {
686- return option.text;
687- }
688-
689- return $((`
690- <div class="flex-container flexFlowColumn">
691- <div><strong>${DOMPurify.sanitize(model.name)}</strong> | <span>${model.context_length || '???'} tokens</span></div>
692- </div>
693- `));
694-}
695-
696695async function downloadOllamaModel() {
697696 try {
698697 const serverUrl = textgen_settings.server_urls[textgen_types.OLLAMA];
@@ -880,7 +879,6 @@ export function initTextGenModels() {
880879 $('#ollama_download_model').on('click', downloadOllamaModel);
881880 $('#vllm_model').on('change', onVllmModelSelect);
882881 $('#aphrodite_model').on('change', onAphroditeModelSelect);
883- $('#featherless_model').on('change', onFeatherlessModelSelect);
884882 $('#tabby_download_model').on('click', downloadTabbyModel);
885883 $('#tabby_model').on('change', onTabbyModelSelect);
886884
@@ -955,13 +953,6 @@ export function initTextGenModels() {
955953 width: '100%',
956954 templateResult: getAphroditeModelTemplate,
957955 });
958- $('#featherless_model').select2({
959- placeholder: 'Select a model',
960- searchInputPlaceholder: 'Search models...',
961- searchInputCssClass: 'text_pole',
962- width: '100%',
963- templateResult: getFeatherlessModelTemplate,
964- });
965956 providersSelect.select2({
966957 sorter: data => data.sort((a, b) => a.text.localeCompare(b.text)),
967958 placeholder: 'Select providers. No selection = all providers.',
public/scripts/textgen-settings.js+1 -0
@@ -186,6 +186,7 @@ const settings = {
186186 openrouter_allow_fallbacks: true,
187187 xtc_threshold: 0.1,
188188 xtc_probability: 0,
189+ featherless_model: '',
189190};
190191
191192export let textgenerationwebui_banned_in_macros = [];