Featherless: Fix /model command
| @@ -266,8 +266,7 @@ export async function loadAphroditeModels(data) { | |||
| 266 | } | 266 | } |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | // Page -1 will be initialized from a selected model. | 269 | let featherlessCurrentPage = 1; |
| 270 | let currentPage = -1; | ||
| 271 | export async function loadFeatherlessModels(data) { | 270 | export async function loadFeatherlessModels(data) { |
| 272 | const searchBar = document.getElementById('model_search_bar'); | 271 | const searchBar = document.getElementById('model_search_bar'); |
| 273 | const modelCardBlock = document.getElementById('model_card_block'); | 272 | const modelCardBlock = document.getElementById('model_card_block'); |
| @@ -298,11 +297,11 @@ export async function loadFeatherlessModels(data) { | |||
| 298 | 297 | ||
| 299 | // Initialize pagination with the full set of models | 298 | // Initialize pagination with the full set of models |
| 300 | const selectedModelPage = (data.findIndex(x => x.id === textgen_settings.featherless_model) / perPage) + 1; | 299 | const selectedModelPage = (data.findIndex(x => x.id === textgen_settings.featherless_model) / perPage) + 1; |
| 301 | currentPage = currentPage === -1 && selectedModelPage > 0 ? selectedModelPage : 1; | 300 | featherlessCurrentPage = selectedModelPage > 0 ? selectedModelPage : 1; |
| 302 | setupPagination(originalModels, perPage); | 301 | setupPagination(originalModels, perPage); |
| 303 | 302 | ||
| 304 | // Function to set up pagination (also used for filtered results) | 303 | // Function to set up pagination (also used for filtered results) |
| 305 | function setupPagination(models, perPage, pageNumber = currentPage) { | 304 | function setupPagination(models, perPage, pageNumber = featherlessCurrentPage) { |
| 306 | paginationContainer.pagination({ | 305 | paginationContainer.pagination({ |
| 307 | dataSource: models, | 306 | dataSource: models, |
| 308 | pageSize: perPage, | 307 | pageSize: perPage, |
| @@ -368,16 +367,22 @@ export async function loadFeatherlessModels(data) { | |||
| 368 | }); | 367 | }); |
| 369 | 368 | ||
| 370 | // Update the current page value whenever the page changes | 369 | // Update the current page value whenever the page changes |
| 371 | currentPage = pagination.pageNumber; | 370 | featherlessCurrentPage = pagination.pageNumber; |
| 372 | }, | 371 | }, |
| 373 | afterSizeSelectorChange: function (e) { | 372 | afterSizeSelectorChange: function (e) { |
| 374 | const newPerPage = e.target.value; | 373 | const newPerPage = e.target.value; |
| 375 | localStorage.setItem('Models_PerPage', newPerPage); | 374 | localStorage.setItem('Models_PerPage', newPerPage); |
| 376 | setupPagination(models, Number(newPerPage), currentPage); // Use the stored current page number | 375 | setupPagination(models, Number(newPerPage), featherlessCurrentPage); // Use the stored current page number |
| 377 | }, | 376 | }, |
| 378 | }); | 377 | }); |
| 379 | } | 378 | } |
| 380 | 379 | ||
| 380 | // Unset previously added listeners | ||
| 381 | $(searchBar).off('input'); | ||
| 382 | $(sortOrderSelect).off('change'); | ||
| 383 | $(classSelect).off('change'); | ||
| 384 | $(categoriesSelect).off('change'); | ||
| 385 | |||
| 381 | // Add event listener for input on the search bar | 386 | // Add event listener for input on the search bar |
| 382 | searchBar.addEventListener('input', function () { | 387 | searchBar.addEventListener('input', function () { |
| 383 | applyFiltersAndSort(); | 388 | applyFiltersAndSort(); |
| @@ -463,7 +468,7 @@ export async function loadFeatherlessModels(data) { | |||
| 463 | filteredModels.sort((a, b) => b.updated_at.localeCompare(a.updated_at)); | 468 | filteredModels.sort((a, b) => b.updated_at.localeCompare(a.updated_at)); |
| 464 | } | 469 | } |
| 465 | 470 | ||
| 466 | setupPagination(filteredModels, Number(localStorage.getItem(storageKey)) || perPage, currentPage); | 471 | setupPagination(filteredModels, Number(localStorage.getItem(storageKey)) || perPage, featherlessCurrentPage); |
| 467 | } | 472 | } |
| 468 | 473 | ||
| 469 | // Required to keep the /model command function | 474 | // Required to keep the /model command function |
| @@ -497,7 +502,7 @@ function onFeatherlessModelSelect(modelId) { | |||
| 497 | setGenerationParamsFromPreset({ max_length: model.context_length }); | 502 | setGenerationParamsFromPreset({ max_length: model.context_length }); |
| 498 | } | 503 | } |
| 499 | 504 | ||
| 500 | let isGridView = false; // Default state set to grid view | 505 | let featherlessIsGridView = false; // Default state set to grid view |
| 501 | 506 | ||
| 502 | // Ensure the correct initial view is applied when the page loads | 507 | // Ensure the correct initial view is applied when the page loads |
| 503 | document.addEventListener('DOMContentLoaded', function () { | 508 | document.addEventListener('DOMContentLoaded', function () { |
| @@ -507,7 +512,7 @@ document.addEventListener('DOMContentLoaded', function () { | |||
| 507 | const toggleButton = document.getElementById('model_grid_toggle'); | 512 | const toggleButton = document.getElementById('model_grid_toggle'); |
| 508 | toggleButton.addEventListener('click', function () { | 513 | toggleButton.addEventListener('click', function () { |
| 509 | // Toggle between grid and list view | 514 | // Toggle between grid and list view |
| 510 | if (isGridView) { | 515 | if (featherlessIsGridView) { |
| 511 | modelCardBlock.classList.remove('grid-view'); | 516 | modelCardBlock.classList.remove('grid-view'); |
| 512 | modelCardBlock.classList.add('list-view'); | 517 | modelCardBlock.classList.add('list-view'); |
| 513 | this.title = 'Toggle to grid view'; | 518 | this.title = 'Toggle to grid view'; |
| @@ -517,7 +522,7 @@ document.addEventListener('DOMContentLoaded', function () { | |||
| 517 | this.title = 'Toggle to list view'; | 522 | this.title = 'Toggle to list view'; |
| 518 | } | 523 | } |
| 519 | 524 | ||
| 520 | isGridView = !isGridView; | 525 | featherlessIsGridView = !featherlessIsGridView; |
| 521 | }); | 526 | }); |
| 522 | }); | 527 | }); |
| 523 | function onMancerModelSelect() { | 528 | function onMancerModelSelect() { |
| @@ -881,6 +886,7 @@ export function initTextGenModels() { | |||
| 881 | $('#aphrodite_model').on('change', onAphroditeModelSelect); | 886 | $('#aphrodite_model').on('change', onAphroditeModelSelect); |
| 882 | $('#tabby_download_model').on('click', downloadTabbyModel); | 887 | $('#tabby_download_model').on('click', downloadTabbyModel); |
| 883 | $('#tabby_model').on('change', onTabbyModelSelect); | 888 | $('#tabby_model').on('change', onTabbyModelSelect); |
| 889 | $('#featherless_model').on('change', () => onFeatherlessModelSelect(String($('#featherless_model').val()))); | ||
| 884 | 890 | ||
| 885 | const providersSelect = $('.openrouter_providers'); | 891 | const providersSelect = $('.openrouter_providers'); |
| 886 | for (const provider of OPENROUTER_PROVIDERS) { | 892 | for (const provider of OPENROUTER_PROVIDERS) { |