Expose "Allow fallback providers" for OpenRouter
| @@ -2091,6 +2091,10 @@ | |||
| 2091 | <h4 data-i18n="Model Providers">Model Providers</h4> | 2091 | <h4 data-i18n="Model Providers">Model Providers</h4> |
| 2092 | <select id="openrouter_providers_text" class="openrouter_providers" multiple> | 2092 | <select id="openrouter_providers_text" class="openrouter_providers" multiple> |
| 2093 | </select> | 2093 | </select> |
| 2094 | <label class="checkbox_label" for="openrouter_allow_fallbacks_textgenerationwebui" title="Automatically chooses an alternative provider if chosen providers can't serve your request."> | ||
| 2095 | <input id="openrouter_allow_fallbacks_textgenerationwebui" type="checkbox" /> | ||
| 2096 | <span data-i18n="Allow fallback providers">Allow fallback providers</span> | ||
| 2097 | </label> | ||
| 2094 | </div> | 2098 | </div> |
| 2095 | </div> | 2099 | </div> |
| 2096 | <div data-tg-type="infermaticai" class="flex-container flexFlowColumn"> | 2100 | <div data-tg-type="infermaticai" class="flex-container flexFlowColumn"> |
| @@ -2668,11 +2672,10 @@ | |||
| 2668 | <option data-i18n="-- Connect to the API --">-- Connect to the API --</option> | 2672 | <option data-i18n="-- Connect to the API --">-- Connect to the API --</option> |
| 2669 | </select> | 2673 | </select> |
| 2670 | </div> | 2674 | </div> |
| 2671 | <div> | 2675 | <label for="openrouter_use_fallback" class="checkbox_label marginTopBot5" data-i18n="[title]Allow fallback routes Description" title="Automatically chooses an alternative model if the chosen model can't serve your request."> |
| 2672 | <h4 data-i18n="Model Providers">Model Providers</h4> | 2676 | <input id="openrouter_use_fallback" type="checkbox" /> |
| 2673 | <select id="openrouter_providers_chat" class="openrouter_providers" multiple> | 2677 | <span data-i18n="Allow fallback models">Allow fallback models</span> |
| 2674 | </select> | 2678 | </label> |
| 2675 | </div> | ||
| 2676 | <div class="marginTopBot5"> | 2679 | <div class="marginTopBot5"> |
| 2677 | <div class="inline-drawer wide100p"> | 2680 | <div class="inline-drawer wide100p"> |
| 2678 | <div class="inline-drawer-toggle inline-drawer-header"> | 2681 | <div class="inline-drawer-toggle inline-drawer-header"> |
| @@ -2703,16 +2706,14 @@ | |||
| 2703 | </div> | 2706 | </div> |
| 2704 | </div> | 2707 | </div> |
| 2705 | </div> | 2708 | </div> |
| 2706 | <div class="marginTopBot5"> | 2709 | <div> |
| 2707 | <label for="openrouter_use_fallback" class="checkbox_label"> | 2710 | <h4 data-i18n="Model Providers">Model Providers</h4> |
| 2708 | <input id="openrouter_use_fallback" type="checkbox" /> | 2711 | <select id="openrouter_providers_chat" class="openrouter_providers" multiple> |
| 2709 | <span data-i18n="Allow fallback routes">Allow fallback routes</span> | 2712 | </select> |
| 2713 | <label class="checkbox_label marginTopBot5" for="openrouter_allow_fallbacks" title="Automatically chooses an alternative provider if chosen providers can't serve your request."> | ||
| 2714 | <input id="openrouter_allow_fallbacks" type="checkbox" /> | ||
| 2715 | <span data-i18n="Allow fallback providers">Allow fallback providers</span> | ||
| 2710 | </label> | 2716 | </label> |
| 2711 | <div class="toggle-description justifyLeft wide100p"> | ||
| 2712 | <span data-i18n="Allow fallback routes Description"> | ||
| 2713 | Automatically chooses an alternative model if the chosen model can't serve your request. | ||
| 2714 | </span> | ||
| 2715 | </div> | ||
| 2716 | </div> | 2717 | </div> |
| 2717 | <div class="marginTopBot5"> | 2718 | <div class="marginTopBot5"> |
| 2718 | <label for="openrouter_force_instruct" class="checkbox_label"> | 2719 | <label for="openrouter_force_instruct" class="checkbox_label"> |
| @@ -278,6 +278,7 @@ const default_settings = { | |||
| 278 | openrouter_group_models: false, | 278 | openrouter_group_models: false, |
| 279 | openrouter_sort_models: 'alphabetically', | 279 | openrouter_sort_models: 'alphabetically', |
| 280 | openrouter_providers: [], | 280 | openrouter_providers: [], |
| 281 | openrouter_allow_fallbacks: true, | ||
| 281 | jailbreak_system: false, | 282 | jailbreak_system: false, |
| 282 | reverse_proxy: '', | 283 | reverse_proxy: '', |
| 283 | chat_completion_source: chat_completion_sources.OPENAI, | 284 | chat_completion_source: chat_completion_sources.OPENAI, |
| @@ -357,6 +358,7 @@ const oai_settings = { | |||
| 357 | openrouter_group_models: false, | 358 | openrouter_group_models: false, |
| 358 | openrouter_sort_models: 'alphabetically', | 359 | openrouter_sort_models: 'alphabetically', |
| 359 | openrouter_providers: [], | 360 | openrouter_providers: [], |
| 361 | openrouter_allow_fallbacks: true, | ||
| 360 | jailbreak_system: false, | 362 | jailbreak_system: false, |
| 361 | reverse_proxy: '', | 363 | reverse_proxy: '', |
| 362 | chat_completion_source: chat_completion_sources.OPENAI, | 364 | chat_completion_source: chat_completion_sources.OPENAI, |
| @@ -1881,6 +1883,7 @@ async function sendOpenAIRequest(type, messages, signal) { | |||
| 1881 | generate_data['top_a'] = Number(oai_settings.top_a_openai); | 1883 | generate_data['top_a'] = Number(oai_settings.top_a_openai); |
| 1882 | generate_data['use_fallback'] = oai_settings.openrouter_use_fallback; | 1884 | generate_data['use_fallback'] = oai_settings.openrouter_use_fallback; |
| 1883 | generate_data['provider'] = oai_settings.openrouter_providers; | 1885 | generate_data['provider'] = oai_settings.openrouter_providers; |
| 1886 | generate_data['allow_fallbacks'] = oai_settings.openrouter_allow_fallbacks; | ||
| 1884 | 1887 | ||
| 1885 | if (isTextCompletion) { | 1888 | if (isTextCompletion) { |
| 1886 | generate_data['stop'] = getStoppingStrings(isImpersonate, isContinue); | 1889 | generate_data['stop'] = getStoppingStrings(isImpersonate, isContinue); |
| @@ -3001,6 +3004,7 @@ function loadOpenAISettings(data, settings) { | |||
| 3001 | oai_settings.openrouter_sort_models = settings.openrouter_sort_models ?? default_settings.openrouter_sort_models; | 3004 | oai_settings.openrouter_sort_models = settings.openrouter_sort_models ?? default_settings.openrouter_sort_models; |
| 3002 | oai_settings.openrouter_use_fallback = settings.openrouter_use_fallback ?? default_settings.openrouter_use_fallback; | 3005 | oai_settings.openrouter_use_fallback = settings.openrouter_use_fallback ?? default_settings.openrouter_use_fallback; |
| 3003 | oai_settings.openrouter_force_instruct = settings.openrouter_force_instruct ?? default_settings.openrouter_force_instruct; | 3006 | oai_settings.openrouter_force_instruct = settings.openrouter_force_instruct ?? default_settings.openrouter_force_instruct; |
| 3007 | oai_settings.openrouter_allow_fallbacks = settings.openrouter_allow_fallbacks ?? default_settings.openrouter_allow_fallbacks; | ||
| 3004 | oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model; | 3008 | oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model; |
| 3005 | oai_settings.mistralai_model = settings.mistralai_model ?? default_settings.mistralai_model; | 3009 | oai_settings.mistralai_model = settings.mistralai_model ?? default_settings.mistralai_model; |
| 3006 | oai_settings.cohere_model = settings.cohere_model ?? default_settings.cohere_model; | 3010 | oai_settings.cohere_model = settings.cohere_model ?? default_settings.cohere_model; |
| @@ -3105,6 +3109,7 @@ function loadOpenAISettings(data, settings) { | |||
| 3105 | $('#openrouter_use_fallback').prop('checked', oai_settings.openrouter_use_fallback); | 3109 | $('#openrouter_use_fallback').prop('checked', oai_settings.openrouter_use_fallback); |
| 3106 | $('#openrouter_force_instruct').prop('checked', oai_settings.openrouter_force_instruct); | 3110 | $('#openrouter_force_instruct').prop('checked', oai_settings.openrouter_force_instruct); |
| 3107 | $('#openrouter_group_models').prop('checked', oai_settings.openrouter_group_models); | 3111 | $('#openrouter_group_models').prop('checked', oai_settings.openrouter_group_models); |
| 3112 | $('#openrouter_allow_fallbacks').prop('checked', oai_settings.openrouter_allow_fallbacks); | ||
| 3108 | $('#openrouter_providers_chat').val(oai_settings.openrouter_providers).trigger('change'); | 3113 | $('#openrouter_providers_chat').val(oai_settings.openrouter_providers).trigger('change'); |
| 3109 | $('#squash_system_messages').prop('checked', oai_settings.squash_system_messages); | 3114 | $('#squash_system_messages').prop('checked', oai_settings.squash_system_messages); |
| 3110 | $('#continue_prefill').prop('checked', oai_settings.continue_prefill); | 3115 | $('#continue_prefill').prop('checked', oai_settings.continue_prefill); |
| @@ -3334,6 +3339,7 @@ async function saveOpenAIPreset(name, settings, triggerUi = true) { | |||
| 3334 | openrouter_group_models: settings.openrouter_group_models, | 3339 | openrouter_group_models: settings.openrouter_group_models, |
| 3335 | openrouter_sort_models: settings.openrouter_sort_models, | 3340 | openrouter_sort_models: settings.openrouter_sort_models, |
| 3336 | openrouter_providers: settings.openrouter_providers, | 3341 | openrouter_providers: settings.openrouter_providers, |
| 3342 | openrouter_allow_fallbacks: settings.openrouter_allow_fallbacks, | ||
| 3337 | ai21_model: settings.ai21_model, | 3343 | ai21_model: settings.ai21_model, |
| 3338 | mistralai_model: settings.mistralai_model, | 3344 | mistralai_model: settings.mistralai_model, |
| 3339 | cohere_model: settings.cohere_model, | 3345 | cohere_model: settings.cohere_model, |
| @@ -3770,6 +3776,7 @@ function onSettingsPresetChange() { | |||
| 3770 | openrouter_group_models: ['#openrouter_group_models', 'openrouter_group_models', false], | 3776 | openrouter_group_models: ['#openrouter_group_models', 'openrouter_group_models', false], |
| 3771 | openrouter_sort_models: ['#openrouter_sort_models', 'openrouter_sort_models', false], | 3777 | openrouter_sort_models: ['#openrouter_sort_models', 'openrouter_sort_models', false], |
| 3772 | openrouter_providers: ['#openrouter_providers_chat', 'openrouter_providers', false], | 3778 | openrouter_providers: ['#openrouter_providers_chat', 'openrouter_providers', false], |
| 3779 | openrouter_allow_fallbacks: ['#openrouter_allow_fallbacks', 'openrouter_allow_fallbacks', true], | ||
| 3773 | ai21_model: ['#model_ai21_select', 'ai21_model', false], | 3780 | ai21_model: ['#model_ai21_select', 'ai21_model', false], |
| 3774 | mistralai_model: ['#model_mistralai_select', 'mistralai_model', false], | 3781 | mistralai_model: ['#model_mistralai_select', 'mistralai_model', false], |
| 3775 | cohere_model: ['#model_cohere_select', 'cohere_model', false], | 3782 | cohere_model: ['#model_cohere_select', 'cohere_model', false], |
| @@ -5102,6 +5109,11 @@ $(document).ready(async function () { | |||
| 5102 | saveSettingsDebounced(); | 5109 | saveSettingsDebounced(); |
| 5103 | }); | 5110 | }); |
| 5104 | 5111 | ||
| 5112 | $('#openrouter_allow_fallbacks').on('input', function () { | ||
| 5113 | oai_settings.openrouter_allow_fallbacks = !!$(this).prop('checked'); | ||
| 5114 | saveSettingsDebounced(); | ||
| 5115 | }); | ||
| 5116 | |||
| 5105 | $('#squash_system_messages').on('input', function () { | 5117 | $('#squash_system_messages').on('input', function () { |
| 5106 | oai_settings.squash_system_messages = !!$(this).prop('checked'); | 5118 | oai_settings.squash_system_messages = !!$(this).prop('checked'); |
| 5107 | saveSettingsDebounced(); | 5119 | saveSettingsDebounced(); |
| @@ -332,6 +332,7 @@ class PresetManager { | |||
| 332 | 'featherless_model', | 332 | 'featherless_model', |
| 333 | 'max_tokens_second', | 333 | 'max_tokens_second', |
| 334 | 'openrouter_providers', | 334 | 'openrouter_providers', |
| 335 | 'openrouter_allow_fallbacks', | ||
| 335 | ]; | 336 | ]; |
| 336 | const settings = Object.assign({}, getSettingsByApiId(this.apiId)); | 337 | const settings = Object.assign({}, getSettingsByApiId(this.apiId)); |
| 337 | 338 | ||
| @@ -187,6 +187,7 @@ const settings = { | |||
| 187 | server_urls: {}, | 187 | server_urls: {}, |
| 188 | custom_model: '', | 188 | custom_model: '', |
| 189 | bypass_status_check: false, | 189 | bypass_status_check: false, |
| 190 | openrouter_allow_fallbacks: true, | ||
| 190 | }; | 191 | }; |
| 191 | 192 | ||
| 192 | export let textgenerationwebui_banned_in_macros = []; | 193 | export let textgenerationwebui_banned_in_macros = []; |
| @@ -261,6 +262,7 @@ export const setting_names = [ | |||
| 261 | 'logit_bias', | 262 | 'logit_bias', |
| 262 | 'custom_model', | 263 | 'custom_model', |
| 263 | 'bypass_status_check', | 264 | 'bypass_status_check', |
| 265 | 'openrouter_allow_fallbacks', | ||
| 264 | ]; | 266 | ]; |
| 265 | 267 | ||
| 266 | const DYNATEMP_BLOCK = document.getElementById('dynatemp_block_ooba'); | 268 | const DYNATEMP_BLOCK = document.getElementById('dynatemp_block_ooba'); |
| @@ -1172,6 +1174,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate, | |||
| 1172 | 1174 | ||
| 1173 | if (settings.type === OPENROUTER) { | 1175 | if (settings.type === OPENROUTER) { |
| 1174 | params.provider = settings.openrouter_providers; | 1176 | params.provider = settings.openrouter_providers; |
| 1177 | params.allow_fallbacks = settings.openrouter_allow_fallbacks; | ||
| 1175 | } | 1178 | } |
| 1176 | 1179 | ||
| 1177 | if (settings.type === KOBOLDCPP) { | 1180 | if (settings.type === KOBOLDCPP) { |
| @@ -879,7 +879,7 @@ router.post('/generate', jsonParser, function (request, response) { | |||
| 879 | 879 | ||
| 880 | if (Array.isArray(request.body.provider) && request.body.provider.length > 0) { | 880 | if (Array.isArray(request.body.provider) && request.body.provider.length > 0) { |
| 881 | bodyParams['provider'] = { | 881 | bodyParams['provider'] = { |
| 882 | allow_fallbacks: true, | 882 | allow_fallbacks: request.body.allow_fallbacks ?? true, |
| 883 | order: request.body.provider ?? [], | 883 | order: request.body.provider ?? [], |
| 884 | }; | 884 | }; |
| 885 | } | 885 | } |
| @@ -309,7 +309,7 @@ router.post('/generate', jsonParser, async function (request, response) { | |||
| 309 | if (request.body.api_type === TEXTGEN_TYPES.OPENROUTER) { | 309 | if (request.body.api_type === TEXTGEN_TYPES.OPENROUTER) { |
| 310 | if (Array.isArray(request.body.provider) && request.body.provider.length > 0) { | 310 | if (Array.isArray(request.body.provider) && request.body.provider.length > 0) { |
| 311 | request.body.provider = { | 311 | request.body.provider = { |
| 312 | allow_fallbacks: true, | 312 | allow_fallbacks: request.body.allow_fallbacks ?? true, |
| 313 | order: request.body.provider, | 313 | order: request.body.provider, |
| 314 | }; | 314 | }; |
| 315 | } else { | 315 | } else { |