Expose "Allow fallback providers" for OpenRouter

5f2a73ac9fce25752d5dbec3b237cc96a7fdf5e6

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

6 files changed, +33 -16Ignore whitespace
public/index.html+15 -14
@@ -2091,6 +2091,10 @@
20912091 <h4 data-i18n="Model Providers">Model Providers</h4>
20922092 <select id="openrouter_providers_text" class="openrouter_providers" multiple>
20932093 </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>
20942098 </div>
20952099 </div>
20962100 <div data-tg-type="infermaticai" class="flex-container flexFlowColumn">
@@ -2668,11 +2672,10 @@
26682672 <option data-i18n="-- Connect to the API --">-- Connect to the API --</option>
26692673 </select>
26702674 </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.">
26722676 <h4input data-i18nid="Modelopenrouter_use_fallback" Providerstype=">Modelcheckbox" Providers</h4>
2673- <select id="openrouter_providers_chat" class="openrouter_providers" multiple>
2677+ <span data-i18n="Allow fallback models">Allow fallback models</span>
26742678 </selectlabel>
2675- </div>
26762679 <div class="marginTopBot5">
26772680 <div class="inline-drawer wide100p">
26782681 <div class="inline-drawer-toggle inline-drawer-header">
@@ -2703,16 +2706,14 @@
27032706 </div>
27042707 </div>
27052708 </div>
27062709 <div class="marginTopBot5">
2707- <label for="openrouter_use_fallback" class="checkbox_label">
2710+ <h4 data-i18n="Model Providers">Model Providers</h4>
27082711 <inputselect id="openrouter_use_fallbackopenrouter_providers_chat" typeclass="checkboxopenrouter_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>
27102716 </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>
27162717 </div>
27172718 <div class="marginTopBot5">
27182719 <label for="openrouter_force_instruct" class="checkbox_label">
public/scripts/openai.js+12 -0
@@ -278,6 +278,7 @@ const default_settings = {
278278 openrouter_group_models: false,
279279 openrouter_sort_models: 'alphabetically',
280280 openrouter_providers: [],
281+ openrouter_allow_fallbacks: true,
281282 jailbreak_system: false,
282283 reverse_proxy: '',
283284 chat_completion_source: chat_completion_sources.OPENAI,
@@ -357,6 +358,7 @@ const oai_settings = {
357358 openrouter_group_models: false,
358359 openrouter_sort_models: 'alphabetically',
359360 openrouter_providers: [],
361+ openrouter_allow_fallbacks: true,
360362 jailbreak_system: false,
361363 reverse_proxy: '',
362364 chat_completion_source: chat_completion_sources.OPENAI,
@@ -1881,6 +1883,7 @@ async function sendOpenAIRequest(type, messages, signal) {
18811883 generate_data['top_a'] = Number(oai_settings.top_a_openai);
18821884 generate_data['use_fallback'] = oai_settings.openrouter_use_fallback;
18831885 generate_data['provider'] = oai_settings.openrouter_providers;
1886+ generate_data['allow_fallbacks'] = oai_settings.openrouter_allow_fallbacks;
18841887
18851888 if (isTextCompletion) {
18861889 generate_data['stop'] = getStoppingStrings(isImpersonate, isContinue);
@@ -3001,6 +3004,7 @@ function loadOpenAISettings(data, settings) {
30013004 oai_settings.openrouter_sort_models = settings.openrouter_sort_models ?? default_settings.openrouter_sort_models;
30023005 oai_settings.openrouter_use_fallback = settings.openrouter_use_fallback ?? default_settings.openrouter_use_fallback;
30033006 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;
30043008 oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model;
30053009 oai_settings.mistralai_model = settings.mistralai_model ?? default_settings.mistralai_model;
30063010 oai_settings.cohere_model = settings.cohere_model ?? default_settings.cohere_model;
@@ -3105,6 +3109,7 @@ function loadOpenAISettings(data, settings) {
31053109 $('#openrouter_use_fallback').prop('checked', oai_settings.openrouter_use_fallback);
31063110 $('#openrouter_force_instruct').prop('checked', oai_settings.openrouter_force_instruct);
31073111 $('#openrouter_group_models').prop('checked', oai_settings.openrouter_group_models);
3112+ $('#openrouter_allow_fallbacks').prop('checked', oai_settings.openrouter_allow_fallbacks);
31083113 $('#openrouter_providers_chat').val(oai_settings.openrouter_providers).trigger('change');
31093114 $('#squash_system_messages').prop('checked', oai_settings.squash_system_messages);
31103115 $('#continue_prefill').prop('checked', oai_settings.continue_prefill);
@@ -3334,6 +3339,7 @@ async function saveOpenAIPreset(name, settings, triggerUi = true) {
33343339 openrouter_group_models: settings.openrouter_group_models,
33353340 openrouter_sort_models: settings.openrouter_sort_models,
33363341 openrouter_providers: settings.openrouter_providers,
3342+ openrouter_allow_fallbacks: settings.openrouter_allow_fallbacks,
33373343 ai21_model: settings.ai21_model,
33383344 mistralai_model: settings.mistralai_model,
33393345 cohere_model: settings.cohere_model,
@@ -3770,6 +3776,7 @@ function onSettingsPresetChange() {
37703776 openrouter_group_models: ['#openrouter_group_models', 'openrouter_group_models', false],
37713777 openrouter_sort_models: ['#openrouter_sort_models', 'openrouter_sort_models', false],
37723778 openrouter_providers: ['#openrouter_providers_chat', 'openrouter_providers', false],
3779+ openrouter_allow_fallbacks: ['#openrouter_allow_fallbacks', 'openrouter_allow_fallbacks', true],
37733780 ai21_model: ['#model_ai21_select', 'ai21_model', false],
37743781 mistralai_model: ['#model_mistralai_select', 'mistralai_model', false],
37753782 cohere_model: ['#model_cohere_select', 'cohere_model', false],
@@ -5102,6 +5109,11 @@ $(document).ready(async function () {
51025109 saveSettingsDebounced();
51035110 });
51045111
5112+ $('#openrouter_allow_fallbacks').on('input', function () {
5113+ oai_settings.openrouter_allow_fallbacks = !!$(this).prop('checked');
5114+ saveSettingsDebounced();
5115+ });
5116+
51055117 $('#squash_system_messages').on('input', function () {
51065118 oai_settings.squash_system_messages = !!$(this).prop('checked');
51075119 saveSettingsDebounced();
public/scripts/preset-manager.js+1 -0
@@ -332,6 +332,7 @@ class PresetManager {
332332 'featherless_model',
333333 'max_tokens_second',
334334 'openrouter_providers',
335+ 'openrouter_allow_fallbacks',
335336 ];
336337 const settings = Object.assign({}, getSettingsByApiId(this.apiId));
337338
public/scripts/textgen-settings.js+3 -0
@@ -187,6 +187,7 @@ const settings = {
187187 server_urls: {},
188188 custom_model: '',
189189 bypass_status_check: false,
190+ openrouter_allow_fallbacks: true,
190191};
191192
192193export let textgenerationwebui_banned_in_macros = [];
@@ -261,6 +262,7 @@ export const setting_names = [
261262 'logit_bias',
262263 'custom_model',
263264 'bypass_status_check',
265+ 'openrouter_allow_fallbacks',
264266];
265267
266268const DYNATEMP_BLOCK = document.getElementById('dynatemp_block_ooba');
@@ -1172,6 +1174,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate,
11721174
11731175 if (settings.type === OPENROUTER) {
11741176 params.provider = settings.openrouter_providers;
1177+ params.allow_fallbacks = settings.openrouter_allow_fallbacks;
11751178 }
11761179
11771180 if (settings.type === KOBOLDCPP) {
src/endpoints/backends/chat-completions.js+1 -1
@@ -879,7 +879,7 @@ router.post('/generate', jsonParser, function (request, response) {
879879
880880 if (Array.isArray(request.body.provider) && request.body.provider.length > 0) {
881881 bodyParams['provider'] = {
882882 allow_fallbacks: request.body.allow_fallbacks ?? true,
883883 order: request.body.provider ?? [],
884884 };
885885 }
src/endpoints/backends/text-completions.js+1 -1
@@ -309,7 +309,7 @@ router.post('/generate', jsonParser, async function (request, response) {
309309 if (request.body.api_type === TEXTGEN_TYPES.OPENROUTER) {
310310 if (Array.isArray(request.body.provider) && request.body.provider.length > 0) {
311311 request.body.provider = {
312312 allow_fallbacks: request.body.allow_fallbacks ?? true,
313313 order: request.body.provider,
314314 };
315315 } else {