mirror of
				https://github.com/SillyTavern/SillyTavern.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	Add fallback option for OpenRouter
This commit is contained in:
		| @@ -1972,6 +1972,17 @@ | |||||||
|                                     <option data-i18n="Connect to the API">-- Connect to the API --</option> |                                     <option data-i18n="Connect to the API">-- Connect to the API --</option> | ||||||
|                                 </select> |                                 </select> | ||||||
|                             </div> |                             </div> | ||||||
|  |                             <div class="marginTopBot5"> | ||||||
|  |                                 <label for="openrouter_use_fallback" class="checkbox_label"> | ||||||
|  |                                     <input id="openrouter_use_fallback" type="checkbox" /> | ||||||
|  |                                     <span data-i18n="Allow fallback routes">Allow fallback routes</span> | ||||||
|  |                                 </label> | ||||||
|  |                                 <div class="toggle-description justifyLeft"> | ||||||
|  |                                     <span data-i18n="Allow fallback routes Description"> | ||||||
|  |                                         Automatically chooses an alternative model if the chosen model can't serve your request. | ||||||
|  |                                     </span> | ||||||
|  |                                 </div> | ||||||
|  |                             </div> | ||||||
|                             <h4 data-i18n="OpenRouter API Key">OpenRouter API Key</h4> |                             <h4 data-i18n="OpenRouter API Key">OpenRouter API Key</h4> | ||||||
|                             <div> |                             <div> | ||||||
|                                 <small> |                                 <small> | ||||||
|   | |||||||
| @@ -174,6 +174,7 @@ const default_settings = { | |||||||
|     ai21_model: 'j2-ultra', |     ai21_model: 'j2-ultra', | ||||||
|     windowai_model: '', |     windowai_model: '', | ||||||
|     openrouter_model: openrouter_website_model, |     openrouter_model: openrouter_website_model, | ||||||
|  |     openrouter_use_fallback: true, | ||||||
|     jailbreak_system: false, |     jailbreak_system: false, | ||||||
|     reverse_proxy: '', |     reverse_proxy: '', | ||||||
|     legacy_streaming: false, |     legacy_streaming: false, | ||||||
| @@ -217,6 +218,7 @@ const oai_settings = { | |||||||
|     ai21_model: 'j2-ultra', |     ai21_model: 'j2-ultra', | ||||||
|     windowai_model: '', |     windowai_model: '', | ||||||
|     openrouter_model: openrouter_website_model, |     openrouter_model: openrouter_website_model, | ||||||
|  |     openrouter_use_fallback: true, | ||||||
|     jailbreak_system: false, |     jailbreak_system: false, | ||||||
|     reverse_proxy: '', |     reverse_proxy: '', | ||||||
|     legacy_streaming: false, |     legacy_streaming: false, | ||||||
| @@ -1158,6 +1160,7 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) { | |||||||
|     if (isOpenRouter) { |     if (isOpenRouter) { | ||||||
|         generate_data['use_openrouter'] = true; |         generate_data['use_openrouter'] = true; | ||||||
|         generate_data['top_k'] = Number(oai_settings.top_k_openai); |         generate_data['top_k'] = Number(oai_settings.top_k_openai); | ||||||
|  |         generate_data['use_fallback'] = oai_settings.openrouter_use_fallback; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (isScale) { |     if (isScale) { | ||||||
| @@ -1842,6 +1845,7 @@ function loadOpenAISettings(data, settings) { | |||||||
|     oai_settings.claude_model = settings.claude_model ?? default_settings.claude_model; |     oai_settings.claude_model = settings.claude_model ?? default_settings.claude_model; | ||||||
|     oai_settings.windowai_model = settings.windowai_model ?? default_settings.windowai_model; |     oai_settings.windowai_model = settings.windowai_model ?? default_settings.windowai_model; | ||||||
|     oai_settings.openrouter_model = settings.openrouter_model ?? default_settings.openrouter_model; |     oai_settings.openrouter_model = settings.openrouter_model ?? default_settings.openrouter_model; | ||||||
|  |     oai_settings.openrouter_use_fallback = settings.openrouter_use_fallback ?? default_settings.openrouter_use_fallback; | ||||||
|     oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model; |     oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model; | ||||||
|     oai_settings.chat_completion_source = settings.chat_completion_source ?? default_settings.chat_completion_source; |     oai_settings.chat_completion_source = settings.chat_completion_source ?? default_settings.chat_completion_source; | ||||||
|     oai_settings.api_url_scale = settings.api_url_scale ?? default_settings.api_url_scale; |     oai_settings.api_url_scale = settings.api_url_scale ?? default_settings.api_url_scale; | ||||||
| @@ -1891,6 +1895,7 @@ function loadOpenAISettings(data, settings) { | |||||||
|     $('#use_ai21_tokenizer').prop('checked', oai_settings.use_ai21_tokenizer); |     $('#use_ai21_tokenizer').prop('checked', oai_settings.use_ai21_tokenizer); | ||||||
|     $('#exclude_assistant').prop('checked', oai_settings.exclude_assistant); |     $('#exclude_assistant').prop('checked', oai_settings.exclude_assistant); | ||||||
|     $('#scale-alt').prop('checked', oai_settings.use_alt_scale); |     $('#scale-alt').prop('checked', oai_settings.use_alt_scale); | ||||||
|  |     $('#openrouter_use_fallback').prop('checked', oai_settings.openrouter_use_fallback); | ||||||
|     if (settings.impersonation_prompt !== undefined) oai_settings.impersonation_prompt = settings.impersonation_prompt; |     if (settings.impersonation_prompt !== undefined) oai_settings.impersonation_prompt = settings.impersonation_prompt; | ||||||
|  |  | ||||||
|     $('#impersonation_prompt_textarea').val(oai_settings.impersonation_prompt); |     $('#impersonation_prompt_textarea').val(oai_settings.impersonation_prompt); | ||||||
| @@ -2055,6 +2060,7 @@ async function saveOpenAIPreset(name, settings, triggerUi = true) { | |||||||
|         claude_model: settings.claude_model, |         claude_model: settings.claude_model, | ||||||
|         windowai_model: settings.windowai_model, |         windowai_model: settings.windowai_model, | ||||||
|         openrouter_model: settings.openrouter_model, |         openrouter_model: settings.openrouter_model, | ||||||
|  |         openrouter_use_fallback: settings.openrouter_use_fallback, | ||||||
|         ai21_model: settings.ai21_model, |         ai21_model: settings.ai21_model, | ||||||
|         temperature: settings.temp_openai, |         temperature: settings.temp_openai, | ||||||
|         frequency_penalty: settings.freq_pen_openai, |         frequency_penalty: settings.freq_pen_openai, | ||||||
| @@ -2413,6 +2419,7 @@ function onSettingsPresetChange() { | |||||||
|         claude_model: ['#model_claude_select', 'claude_model', false], |         claude_model: ['#model_claude_select', 'claude_model', false], | ||||||
|         windowai_model: ['#model_windowai_select', 'windowai_model', false], |         windowai_model: ['#model_windowai_select', 'windowai_model', false], | ||||||
|         openrouter_model: ['#model_openrouter_select', 'openrouter_model', false], |         openrouter_model: ['#model_openrouter_select', 'openrouter_model', false], | ||||||
|  |         openrouter_use_fallback: ['#openrouter_use_fallback', 'openrouter_use_fallback', true], | ||||||
|         ai21_model: ['#model_ai21_select', 'ai21_model', false], |         ai21_model: ['#model_ai21_select', 'ai21_model', false], | ||||||
|         openai_max_context: ['#openai_max_context', 'openai_max_context', false], |         openai_max_context: ['#openai_max_context', 'openai_max_context', false], | ||||||
|         openai_max_tokens: ['#openai_max_tokens', 'openai_max_tokens', false], |         openai_max_tokens: ['#openai_max_tokens', 'openai_max_tokens', false], | ||||||
| @@ -3125,6 +3132,11 @@ $(document).ready(async function () { | |||||||
|         saveSettingsDebounced(); |         saveSettingsDebounced(); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  |     $('#openrouter_use_fallback').on('input', function () { | ||||||
|  |         oai_settings.openrouter_use_fallback = !!$(this).prop('checked'); | ||||||
|  |         saveSettingsDebounced(); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|     $("#api_button_openai").on("click", onConnectButtonClick); |     $("#api_button_openai").on("click", onConnectButtonClick); | ||||||
|     $("#openai_reverse_proxy").on("input", onReverseProxyInput); |     $("#openai_reverse_proxy").on("input", onReverseProxyInput); | ||||||
|     $("#model_openai_select").on("change", onModelChange); |     $("#model_openai_select").on("change", onModelChange); | ||||||
|   | |||||||
| @@ -3478,6 +3478,10 @@ app.post("/generate_openai", jsonParser, function (request, response_generate_op | |||||||
|         // OpenRouter needs to pass the referer: https://openrouter.ai/docs |         // OpenRouter needs to pass the referer: https://openrouter.ai/docs | ||||||
|         headers = { 'HTTP-Referer': request.headers.referer }; |         headers = { 'HTTP-Referer': request.headers.referer }; | ||||||
|         bodyParams = { 'transforms': ["middle-out"] }; |         bodyParams = { 'transforms': ["middle-out"] }; | ||||||
|  |  | ||||||
|  |         if (request.body.use_fallback) { | ||||||
|  |             bodyParams['route'] = 'fallback'; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (!api_key_openai && !request.body.reverse_proxy) { |     if (!api_key_openai && !request.body.reverse_proxy) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user