Refactor loadOpenAISettings (#4815) * Refactor loadOpenAISettings * Fix migration logic * Show external category on load * Restore jamba migration * Refactor saveOpenAIPreset to use dynamic settings mapping

999ab489729e67888896460b0033f908129f42e0

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

Signed
1 files changed, +72 -358Showing whitespace changes
public/scripts/openai.js+72 -358
@@ -3655,267 +3655,85 @@ export class ChatCompletion {
3655 }3655 }
3656}3656}
36573657
3658/**
3659 * Load OpenAI settings from backend data
3660 * @param {any} data Settings data from backend
3661 * @param {ChatCompletionSettings} settings Saved settings from backend
3662 */
3658function loadOpenAISettings(data, settings) {3663function loadOpenAISettings(data, settings) {
3659 openai_setting_names = data.openai_setting_names;3664 openai_setting_names = data.openai_setting_names;
3660 openai_settings = data.openai_settings;3665 openai_settings = data.openai_settings;
3661 openai_settings.forEach(function (item, i, arr) {3666 openai_settings.forEach(function (item, i) {
3662 openai_settings[i] = JSON.parse(item);3667 openai_settings[i] = JSON.parse(item);
3663 });3668 });
36643669
3665 $('#settings_preset_openai').empty();3670 $('#settings_preset_openai').empty();
3666 let arr_holder = {};3671 const settingNames = {};
3667 openai_setting_names.forEach(function (item, i, arr) {3672 openai_setting_names.forEach(function (item, i) {
3668 arr_holder[item] = i;3673 settingNames[item] = i;
3669 $('#settings_preset_openai').append(`<option value=${i}>${item}</option>`);3674 const option = document.createElement('option');
36703675 option.value = i;
3671 });3676 option.text = item;
3672 openai_setting_names = arr_holder;3677 $('#settings_preset_openai').append(option);
36733678
3674 oai_settings.preset_settings_openai = settings.preset_settings_openai;3679 });
3675 $(`#settings_preset_openai option[value=${openai_setting_names[oai_settings.preset_settings_openai]}]`).prop('selected', true);3680 openai_setting_names = settingNames;
3676
3677 oai_settings.temp_openai = settings.temp_openai ?? default_settings.temp_openai;
3678 oai_settings.freq_pen_openai = settings.freq_pen_openai ?? default_settings.freq_pen_openai;
3679 oai_settings.pres_pen_openai = settings.pres_pen_openai ?? default_settings.pres_pen_openai;
3680 oai_settings.top_p_openai = settings.top_p_openai ?? default_settings.top_p_openai;
3681 oai_settings.top_k_openai = settings.top_k_openai ?? default_settings.top_k_openai;
3682 oai_settings.top_a_openai = settings.top_a_openai ?? default_settings.top_a_openai;
3683 oai_settings.min_p_openai = settings.min_p_openai ?? default_settings.min_p_openai;
3684 oai_settings.repetition_penalty_openai = settings.repetition_penalty_openai ?? default_settings.repetition_penalty_openai;
3685 oai_settings.stream_openai = settings.stream_openai ?? default_settings.stream_openai;
3686 oai_settings.openai_max_context = settings.openai_max_context ?? default_settings.openai_max_context;
3687 oai_settings.openai_max_tokens = settings.openai_max_tokens ?? default_settings.openai_max_tokens;
3688 oai_settings.bias_preset_selected = settings.bias_preset_selected ?? default_settings.bias_preset_selected;
3689 oai_settings.bias_presets = settings.bias_presets ?? default_settings.bias_presets;
3690 oai_settings.max_context_unlocked = settings.max_context_unlocked ?? default_settings.max_context_unlocked;
3691 oai_settings.send_if_empty = settings.send_if_empty ?? default_settings.send_if_empty;
3692 oai_settings.wi_format = settings.wi_format ?? default_settings.wi_format;
3693 oai_settings.scenario_format = settings.scenario_format ?? default_settings.scenario_format;
3694 oai_settings.personality_format = settings.personality_format ?? default_settings.personality_format;
3695 oai_settings.group_nudge_prompt = settings.group_nudge_prompt ?? default_settings.group_nudge_prompt;
3696 oai_settings.claude_model = settings.claude_model ?? default_settings.claude_model;
3697 oai_settings.openrouter_model = settings.openrouter_model ?? default_settings.openrouter_model;
3698 oai_settings.openrouter_group_models = settings.openrouter_group_models ?? default_settings.openrouter_group_models;
3699 oai_settings.openrouter_sort_models = settings.openrouter_sort_models ?? default_settings.openrouter_sort_models;
3700 oai_settings.openrouter_use_fallback = settings.openrouter_use_fallback ?? default_settings.openrouter_use_fallback;
3701 oai_settings.openrouter_allow_fallbacks = settings.openrouter_allow_fallbacks ?? default_settings.openrouter_allow_fallbacks;
3702 oai_settings.openrouter_middleout = settings.openrouter_middleout ?? default_settings.openrouter_middleout;
3703 oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model;
3704 oai_settings.mistralai_model = settings.mistralai_model ?? default_settings.mistralai_model;
3705 oai_settings.cohere_model = settings.cohere_model ?? default_settings.cohere_model;
3706 oai_settings.perplexity_model = settings.perplexity_model ?? default_settings.perplexity_model;
3707 oai_settings.groq_model = settings.groq_model ?? default_settings.groq_model;
3708 oai_settings.siliconflow_model = settings.siliconflow_model ?? default_settings.siliconflow_model;
3709 oai_settings.electronhub_model = settings.electronhub_model ?? default_settings.electronhub_model;
3710 oai_settings.electronhub_sort_models = settings.electronhub_sort_models ?? default_settings.electronhub_sort_models;
3711 oai_settings.electronhub_group_models = settings.electronhub_group_models ?? default_settings.electronhub_group_models;
3712 oai_settings.nanogpt_model = settings.nanogpt_model ?? default_settings.nanogpt_model;
3713 oai_settings.deepseek_model = settings.deepseek_model ?? default_settings.deepseek_model;
3714 oai_settings.aimlapi_model = settings.aimlapi_model ?? default_settings.aimlapi_model;
3715 oai_settings.xai_model = settings.xai_model ?? default_settings.xai_model;
3716 oai_settings.pollinations_model = settings.pollinations_model ?? default_settings.pollinations_model;
3717 oai_settings.cometapi_model = settings.cometapi_model ?? default_settings.cometapi_model;
3718 oai_settings.moonshot_model = settings.moonshot_model ?? default_settings.moonshot_model;
3719 oai_settings.fireworks_model = settings.fireworks_model ?? default_settings.fireworks_model;
3720 oai_settings.zai_model = settings.zai_model ?? default_settings.zai_model;
3721 oai_settings.zai_endpoint = settings.zai_endpoint ?? default_settings.zai_endpoint;
3722 oai_settings.custom_model = settings.custom_model ?? default_settings.custom_model;
3723 oai_settings.custom_url = settings.custom_url ?? default_settings.custom_url;
3724 oai_settings.custom_include_body = settings.custom_include_body ?? default_settings.custom_include_body;
3725 oai_settings.custom_exclude_body = settings.custom_exclude_body ?? default_settings.custom_exclude_body;
3726 oai_settings.custom_include_headers = settings.custom_include_headers ?? default_settings.custom_include_headers;
3727 oai_settings.custom_prompt_post_processing = settings.custom_prompt_post_processing ?? default_settings.custom_prompt_post_processing;
3728 oai_settings.google_model = settings.google_model ?? default_settings.google_model;
3729 oai_settings.azure_base_url = settings.azure_base_url ?? default_settings.azure_base_url;
3730 oai_settings.azure_deployment_name = settings.azure_deployment_name ?? default_settings.azure_deployment_name;
3731 oai_settings.azure_api_version = settings.azure_api_version ?? default_settings.azure_api_version;
3732 oai_settings.azure_openai_model = settings.azure_openai_model ?? default_settings.azure_openai_model;
3733 oai_settings.vertexai_model = settings.vertexai_model ?? default_settings.vertexai_model;
3734 oai_settings.chat_completion_source = settings.chat_completion_source ?? default_settings.chat_completion_source;
3735 oai_settings.show_external_models = settings.show_external_models ?? default_settings.show_external_models;
3736 oai_settings.proxy_password = settings.proxy_password ?? default_settings.proxy_password;
3737 oai_settings.assistant_prefill = settings.assistant_prefill ?? default_settings.assistant_prefill;
3738 oai_settings.assistant_impersonation = settings.assistant_impersonation ?? default_settings.assistant_impersonation;
3739 oai_settings.image_inlining = settings.image_inlining ?? default_settings.image_inlining;
3740 oai_settings.inline_image_quality = settings.inline_image_quality ?? default_settings.inline_image_quality;
3741 oai_settings.video_inlining = settings.video_inlining ?? default_settings.video_inlining;
3742 oai_settings.audio_inlining = settings.audio_inlining ?? default_settings.audio_inlining;
3743 oai_settings.bypass_status_check = settings.bypass_status_check ?? default_settings.bypass_status_check;
3744 oai_settings.vertexai_express_project_id = settings.vertexai_express_project_id ?? default_settings.vertexai_express_project_id;
3745 oai_settings.show_thoughts = settings.show_thoughts ?? default_settings.show_thoughts;
3746 oai_settings.reasoning_effort = settings.reasoning_effort ?? default_settings.reasoning_effort;
3747 oai_settings.enable_web_search = settings.enable_web_search ?? default_settings.enable_web_search;
3748 oai_settings.request_images = settings.request_images ?? default_settings.request_images;
3749 oai_settings.seed = settings.seed ?? default_settings.seed;
3750 oai_settings.n = settings.n ?? default_settings.n;
3751
3752 oai_settings.prompts = settings.prompts ?? default_settings.prompts;
3753 oai_settings.prompt_order = settings.prompt_order ?? default_settings.prompt_order;
3754
3755 oai_settings.new_chat_prompt = settings.new_chat_prompt ?? default_settings.new_chat_prompt;
3756 oai_settings.new_group_chat_prompt = settings.new_group_chat_prompt ?? default_settings.new_group_chat_prompt;
3757 oai_settings.new_example_chat_prompt = settings.new_example_chat_prompt ?? default_settings.new_example_chat_prompt;
3758 oai_settings.continue_nudge_prompt = settings.continue_nudge_prompt ?? default_settings.continue_nudge_prompt;
3759 oai_settings.squash_system_messages = settings.squash_system_messages ?? default_settings.squash_system_messages;
3760 oai_settings.continue_prefill = settings.continue_prefill ?? default_settings.continue_prefill;
3761 oai_settings.names_behavior = settings.names_behavior ?? default_settings.names_behavior;
3762 oai_settings.continue_postfix = settings.continue_postfix ?? default_settings.continue_postfix;
3763 oai_settings.function_calling = settings.function_calling ?? default_settings.function_calling;
3764 oai_settings.openrouter_providers = settings.openrouter_providers ?? default_settings.openrouter_providers;
3765 oai_settings.bind_preset_to_connection = settings.bind_preset_to_connection ?? default_settings.bind_preset_to_connection;
3766 oai_settings.extensions = settings.extensions ?? default_settings.extensions;
3767
3768 // Migrate from old settings
3769 if (settings.names_in_completion === true) {
3770 oai_settings.names_behavior = character_names_behavior.COMPLETION;
3771 }
37723681
3773 if (oai_settings.ai21_model.startsWith('j2-')) {3682 const migrateMap = [
3774 oai_settings.ai21_model = 'jamba-large';3683 { oldKey: 'names_in_completion', oldValue: true, newKey: 'names_behavior', newValue: character_names_behavior.COMPLETION },
3684 { oldKey: 'chat_completion_source', oldValue: 'palm', newKey: 'chat_completion_source', newValue: chat_completion_sources.MAKERSUITE },
3685 { oldKey: 'custom_prompt_post_processing', oldValue: custom_prompt_post_processing_types.CLAUDE, newKey: 'custom_prompt_post_processing', newValue: custom_prompt_post_processing_types.MERGE },
3686 { oldKey: 'ai21_model', oldValue: /^j2-/, newKey: 'ai21_model', newValue: 'jamba-large' },
3687 ];
3688
3689 for (const migration of migrateMap) {
3690 if (Object.hasOwn(settings, migration.oldKey)) {
3691 const shouldMigrate = migration.oldValue instanceof RegExp
3692 ? migration.oldValue.test(settings[migration.oldKey])
3693 : settings[migration.oldKey] === migration.oldValue;
3694 if (shouldMigrate) {
3695 settings[migration.newKey] = migration.newValue;
3696 }
3697 }
3775 }3698 }
37763699
3777 if (settings.wrap_in_quotes !== undefined) oai_settings.wrap_in_quotes = !!settings.wrap_in_quotes;3700 for (const key of Object.keys(default_settings)) {
3778 if (settings.openai_model !== undefined) oai_settings.openai_model = settings.openai_model;3701 oai_settings[key] = settings[key] ?? default_settings[key];
3779 if (settings.claude_use_sysprompt !== undefined) oai_settings.claude_use_sysprompt = !!settings.claude_use_sysprompt;3702 const settingToUpdate = Object.values(settingsToUpdate).find(([_, k]) => k === key);
3780 if (settings.use_makersuite_sysprompt !== undefined) oai_settings.use_makersuite_sysprompt = !!settings.use_makersuite_sysprompt;3703 if (settingToUpdate) {
3781 if (settings.vertexai_auth_mode !== undefined) oai_settings.vertexai_auth_mode = settings.vertexai_auth_mode;3704 const [selector] = settingToUpdate;
3782 if (settings.vertexai_region !== undefined) oai_settings.vertexai_region = settings.vertexai_region;3705 const $element = $(selector);
3783 if (settings.vertexai_express_project_id !== undefined) oai_settings.vertexai_express_project_id = settings.vertexai_express_project_id;
3784 $('#stream_toggle').prop('checked', oai_settings.stream_openai);
3785 $('#openai_proxy_password').val(oai_settings.proxy_password);
3786 $('#claude_assistant_prefill').val(oai_settings.assistant_prefill);
3787 $('#claude_assistant_impersonation').val(oai_settings.assistant_impersonation);
3788 $('#openai_image_inlining').prop('checked', oai_settings.image_inlining);
3789 $('#openai_bypass_status_check').prop('checked', oai_settings.bypass_status_check);
37903706
3791 $('#openai_inline_image_quality').val(oai_settings.inline_image_quality);3707 if ($element.length === 0) {
3792 $(`#openai_inline_image_quality option[value="${oai_settings.inline_image_quality}"]`).prop('selected', true);3708 continue;
3709 }
37933710
3794 $('#openai_video_inlining').prop('checked', oai_settings.video_inlining);3711 if ($element.is('input[type="checkbox"]')) {
3795 $('#openai_audio_inlining').prop('checked', oai_settings.audio_inlining);3712 $element.prop('checked', oai_settings[key]);
3713 } else if ($element.is('select')) {
3714 $element.val(oai_settings[key]);
3715 $element.find(`option[value="${CSS.escape(oai_settings[key])}"]`).prop('selected', true);
3716 } else {
3717 $element.val(oai_settings[key]);
3718 if ($element.is('input[type="range"]')) {
3719 const id = $element.attr('id');
3720 const $counter = $(`input[type="number"][data-for="${id}"]`);
3721 if ($counter.length > 0) {
3722 $counter.val(Number(oai_settings[key]));
3723 }
3724 }
3725 }
3726 }
3727 }
37963728
3797 $('#model_openai_select').val(oai_settings.openai_model);3729 $(`#settings_preset_openai option[value="${openai_setting_names[oai_settings.preset_settings_openai]}"]`).prop('selected', true);
3798 $(`#model_openai_select option[value="${oai_settings.openai_model}"`).prop('selected', true);3730 $('#bind_preset_to_connection').prop('checked', oai_settings.bind_preset_to_connection);
3799 $('#model_claude_select').val(oai_settings.claude_model);
3800 $(`#model_claude_select option[value="${oai_settings.claude_model}"`).prop('selected', true);
3801 $('#model_google_select').val(oai_settings.google_model);
3802 $(`#model_google_select option[value="${oai_settings.google_model}"`).prop('selected', true);
3803 $('#model_vertexai_select').val(oai_settings.vertexai_model);
3804 $(`#model_vertexai_select option[value="${oai_settings.vertexai_model}"`).prop('selected', true);
3805 $('#model_ai21_select').val(oai_settings.ai21_model);
3806 $(`#model_ai21_select option[value="${oai_settings.ai21_model}"`).prop('selected', true);
3807 $('#model_mistralai_select').val(oai_settings.mistralai_model);
3808 $(`#model_mistralai_select option[value="${oai_settings.mistralai_model}"`).prop('selected', true);
3809 $('#model_cohere_select').val(oai_settings.cohere_model);
3810 $(`#model_cohere_select option[value="${oai_settings.cohere_model}"`).prop('selected', true);
3811 $('#model_perplexity_select').val(oai_settings.perplexity_model);
3812 $(`#model_perplexity_select option[value="${oai_settings.perplexity_model}"`).prop('selected', true);
3813 $('#model_groq_select').val(oai_settings.groq_model);
3814 $(`#model_groq_select option[value="${oai_settings.groq_model}"`).prop('selected', true);
3815 $('#model_siliconflow_select').val(oai_settings.siliconflow_model);
3816 $(`#model_siliconflow_select option[value="${oai_settings.siliconflow_model}"`).prop('selected', true);
3817 $('#model_electronhub_select').val(oai_settings.electronhub_model);
3818 $(`#model_electronhub_select option[value="${oai_settings.electronhub_model}"`).prop('selected', true);
3819 $('#model_nanogpt_select').val(oai_settings.nanogpt_model);
3820 $(`#model_nanogpt_select option[value="${oai_settings.nanogpt_model}"`).prop('selected', true);
3821 $('#model_deepseek_select').val(oai_settings.deepseek_model);
3822 $(`#model_deepseek_select option[value="${oai_settings.deepseek_model}"`).prop('selected', true);
3823 $('#model_aimlapi_select').val(oai_settings.aimlapi_model);
3824 $(`#model_aimlapi_select option[value="${oai_settings.aimlapi_model}"`).prop('selected', true);
3825 $('#model_xai_select').val(oai_settings.xai_model);
3826 $(`#model_xai_select option[value="${oai_settings.xai_model}"`).prop('selected', true);
3827 $('#model_pollinations_select').val(oai_settings.pollinations_model);
3828 $(`#model_pollinations_select option[value="${oai_settings.pollinations_model}"`).prop('selected', true);
3829 $('#model_moonshot_select').val(oai_settings.moonshot_model);
3830 $(`#model_moonshot_select option[value="${oai_settings.moonshot_model}"`).prop('selected', true);
3831 $('#model_zai_select').val(oai_settings.zai_model);
3832 $(`#model_zai_select option[value="${oai_settings.zai_model}"`).prop('selected', true);
3833 $('#zai_endpoint').val(oai_settings.zai_endpoint);
3834 $(`#zai_endpoint option[value="${oai_settings.zai_endpoint}"`).prop('selected', true);
3835 $('#custom_model_id').val(oai_settings.custom_model);
3836 $('#custom_api_url_text').val(oai_settings.custom_url);
3837 $('#azure_base_url').val(oai_settings.azure_base_url);
3838 $('#azure_deployment_name').val(oai_settings.azure_deployment_name);
3839 $('#azure_api_version').val(oai_settings.azure_api_version);
3840 $('#azure_openai_model').val(oai_settings.azure_openai_model);
3841
3842 $('#openai_max_context').val(oai_settings.openai_max_context);
3843 $('#openai_max_context_counter').val(`${oai_settings.openai_max_context}`);
3844 $('#model_openrouter_select').val(oai_settings.openrouter_model);
3845 $('#openrouter_sort_models').val(oai_settings.openrouter_sort_models);
3846
3847 $('#openai_max_tokens').val(oai_settings.openai_max_tokens);
3848
3849 $('#wrap_in_quotes').prop('checked', oai_settings.wrap_in_quotes);
3850 $('#openai_show_external_models').prop('checked', oai_settings.show_external_models);
3851 $('#openai_external_category').toggle(oai_settings.show_external_models);3731 $('#openai_external_category').toggle(oai_settings.show_external_models);
3852 $('#claude_use_sysprompt').prop('checked', oai_settings.claude_use_sysprompt);3732 $('.reverse_proxy_warning').toggle(oai_settings.reverse_proxy !== '');
3853 $('#use_makersuite_sysprompt').prop('checked', oai_settings.use_makersuite_sysprompt);3733
3854 $('#vertexai_auth_mode').val(oai_settings.vertexai_auth_mode);
3855 $('#vertexai_region').val(oai_settings.vertexai_region);
3856 $('#vertexai_express_project_id').val(oai_settings.vertexai_express_project_id);
3857 // Don't display Service Account JSON in textarea - it's stored in backend secrets3734 // Don't display Service Account JSON in textarea - it's stored in backend secrets
3858 $('#vertexai_service_account_json').val('');3735 $('#vertexai_service_account_json').val('');
3859 updateVertexAIServiceAccountStatus();3736 updateVertexAIServiceAccountStatus();
3860 $('#openrouter_use_fallback').prop('checked', oai_settings.openrouter_use_fallback);
3861 $('#openrouter_group_models').prop('checked', oai_settings.openrouter_group_models);
3862 $('#openrouter_allow_fallbacks').prop('checked', oai_settings.openrouter_allow_fallbacks);
3863 $('#openrouter_providers_chat').val(oai_settings.openrouter_providers).trigger('change');
3864 $('#openrouter_middleout').val(oai_settings.openrouter_middleout);
3865 $('#electronhub_sort_models').val(oai_settings.electronhub_sort_models);
3866 $('#electronhub_group_models').prop('checked', oai_settings.electronhub_group_models);
3867 $('#squash_system_messages').prop('checked', oai_settings.squash_system_messages);
3868 $('#continue_prefill').prop('checked', oai_settings.continue_prefill);
3869 $('#openai_function_calling').prop('checked', oai_settings.function_calling);
3870 if (settings.impersonation_prompt !== undefined) oai_settings.impersonation_prompt = settings.impersonation_prompt;
3871
3872 $('#impersonation_prompt_textarea').val(oai_settings.impersonation_prompt);
3873
3874 $('#newchat_prompt_textarea').val(oai_settings.new_chat_prompt);
3875 $('#newgroupchat_prompt_textarea').val(oai_settings.new_group_chat_prompt);
3876 $('#newexamplechat_prompt_textarea').val(oai_settings.new_example_chat_prompt);
3877 $('#continue_nudge_prompt_textarea').val(oai_settings.continue_nudge_prompt);
3878
3879 $('#wi_format_textarea').val(oai_settings.wi_format);
3880 $('#scenario_format_textarea').val(oai_settings.scenario_format);
3881 $('#personality_format_textarea').val(oai_settings.personality_format);
3882 $('#group_nudge_prompt_textarea').val(oai_settings.group_nudge_prompt);
3883 $('#send_if_empty_textarea').val(oai_settings.send_if_empty);
3884
3885 $('#temp_openai').val(oai_settings.temp_openai);
3886 $('#temp_counter_openai').val(Number(oai_settings.temp_openai).toFixed(2));
3887
3888 $('#freq_pen_openai').val(oai_settings.freq_pen_openai);
3889 $('#freq_pen_counter_openai').val(Number(oai_settings.freq_pen_openai).toFixed(2));
3890
3891 $('#pres_pen_openai').val(oai_settings.pres_pen_openai);
3892 $('#pres_pen_counter_openai').val(Number(oai_settings.pres_pen_openai).toFixed(2));
3893
3894 $('#top_p_openai').val(oai_settings.top_p_openai);
3895 $('#top_p_counter_openai').val(Number(oai_settings.top_p_openai).toFixed(2));
3896
3897 $('#top_k_openai').val(oai_settings.top_k_openai);
3898 $('#top_k_counter_openai').val(Number(oai_settings.top_k_openai).toFixed(0));
3899 $('#top_a_openai').val(oai_settings.top_a_openai);
3900 $('#top_a_counter_openai').val(Number(oai_settings.top_a_openai));
3901 $('#min_p_openai').val(oai_settings.min_p_openai);
3902 $('#min_p_counter_openai').val(Number(oai_settings.min_p_openai));
3903 $('#repetition_penalty_openai').val(oai_settings.repetition_penalty_openai);
3904 $('#repetition_penalty_counter_openai').val(Number(oai_settings.repetition_penalty_openai));
3905 $('#seed_openai').val(oai_settings.seed);
3906 $('#n_openai').val(oai_settings.n);
3907 $('#openai_show_thoughts').prop('checked', oai_settings.show_thoughts);
3908 $('#openai_enable_web_search').prop('checked', oai_settings.enable_web_search);
3909 $('#openai_request_images').prop('checked', oai_settings.request_images);
3910 $('#bind_preset_to_connection').prop('checked', oai_settings.bind_preset_to_connection);
3911
3912 $('#openai_reasoning_effort').val(oai_settings.reasoning_effort);
3913 $(`#openai_reasoning_effort option[value="${oai_settings.reasoning_effort}"]`).prop('selected', true);
3914
3915 if (settings.reverse_proxy !== undefined) oai_settings.reverse_proxy = settings.reverse_proxy;
3916 $('#openai_reverse_proxy').val(oai_settings.reverse_proxy);
3917
3918 $('.reverse_proxy_warning').toggle(oai_settings.reverse_proxy !== '');
39193737
3920 $('#openai_logit_bias_preset').empty();3738 $('#openai_logit_bias_preset').empty();
3921 for (const preset of Object.keys(oai_settings.bias_presets)) {3739 for (const preset of Object.keys(oai_settings.bias_presets)) {
@@ -3935,22 +3753,11 @@ function loadOpenAISettings(data, settings) {
3935 }3753 }
3936 $('#openai_logit_bias_preset').trigger('change');3754 $('#openai_logit_bias_preset').trigger('change');
39373755
3938 // Upgrade Palm to Makersuite
3939 if (oai_settings.chat_completion_source === 'palm') {
3940 oai_settings.chat_completion_source = chat_completion_sources.MAKERSUITE;
3941 }
3942
3943 setNamesBehaviorControls();3756 setNamesBehaviorControls();
3944 setContinuePostfixControls();3757 setContinuePostfixControls();
39453758
3946 if (oai_settings.custom_prompt_post_processing === custom_prompt_post_processing_types.CLAUDE) {3759 $('#openrouter_providers_chat').trigger('change');
3947 oai_settings.custom_prompt_post_processing = custom_prompt_post_processing_types.MERGE;3760 $('#chat_completion_source').trigger('change');
3948 }
3949
3950 $('#chat_completion_source').val(oai_settings.chat_completion_source).trigger('change');
3951 $('#oai_max_context_unlocked').prop('checked', oai_settings.max_context_unlocked);
3952 $('#custom_prompt_post_processing').val(oai_settings.custom_prompt_post_processing);
3953 $(`#custom_prompt_post_processing option[value="${oai_settings.custom_prompt_post_processing}"]`).prop('selected', true);
3954}3761}
39553762
3956function setNamesBehaviorControls() {3763function setNamesBehaviorControls() {
@@ -4101,109 +3908,16 @@ async function getStatusOpen() {
4101/**3908/**
4102 * Persist a settings preset with the given name3909 * Persist a settings preset with the given name
4103 *3910 *
4104 * @param name - Name of the preset3911 * @param {string} name - Name of the preset
4105 * @param settings The OpenAi settings object3912 * @param {ChatCompletionSettings} settings The settings object
4106 * @param triggerUi Whether the change event of preset UI element should be emitted3913 * @param {boolean} triggerUi Whether the change event of preset UI element should be emitted
4107 * @returns {Promise<void>}3914 * @returns {Promise<void>}
4108 */3915 */
4109async function saveOpenAIPreset(name, settings, triggerUi = true) {3916async function saveOpenAIPreset(name, settings, triggerUi = true) {
4110 const presetBody = {3917 const presetBody = {};
4111 chat_completion_source: settings.chat_completion_source,3918 for (const [presetKey, [, settingsKey]] of Object.entries(settingsToUpdate)) {
4112 openai_model: settings.openai_model,3919 presetBody[presetKey] = settings[settingsKey];
4113 claude_model: settings.claude_model,3920 }
4114 openrouter_model: settings.openrouter_model,
4115 openrouter_use_fallback: settings.openrouter_use_fallback,
4116 openrouter_group_models: settings.openrouter_group_models,
4117 openrouter_sort_models: settings.openrouter_sort_models,
4118 openrouter_providers: settings.openrouter_providers,
4119 openrouter_allow_fallbacks: settings.openrouter_allow_fallbacks,
4120 openrouter_middleout: settings.openrouter_middleout,
4121 ai21_model: settings.ai21_model,
4122 mistralai_model: settings.mistralai_model,
4123 cohere_model: settings.cohere_model,
4124 perplexity_model: settings.perplexity_model,
4125 groq_model: settings.groq_model,
4126 siliconflow_model: settings.siliconflow_model,
4127 xai_model: settings.xai_model,
4128 pollinations_model: settings.pollinations_model,
4129 aimlapi_model: settings.aimlapi_model,
4130 electronhub_model: settings.electronhub_model,
4131 electronhub_sort_models: settings.electronhub_sort_models,
4132 electronhub_group_models: settings.electronhub_group_models,
4133 moonshot_model: settings.moonshot_model,
4134 fireworks_model: settings.fireworks_model,
4135 cometapi_model: settings.cometapi_model,
4136 zai_model: settings.zai_model,
4137 zai_endpoint: settings.zai_endpoint,
4138 custom_model: settings.custom_model,
4139 custom_url: settings.custom_url,
4140 custom_include_body: settings.custom_include_body,
4141 custom_exclude_body: settings.custom_exclude_body,
4142 custom_include_headers: settings.custom_include_headers,
4143 custom_prompt_post_processing: settings.custom_prompt_post_processing,
4144 google_model: settings.google_model,
4145 vertexai_model: settings.vertexai_model,
4146 nanogpt_model: settings.nanogpt_model,
4147 deepseek_model: settings.deepseek_model,
4148 azure_base_url: settings.azure_base_url,
4149 azure_deployment_name: settings.azure_deployment_name,
4150 azure_api_version: settings.azure_api_version,
4151 azure_openai_model: settings.azure_openai_model,
4152 temperature: settings.temp_openai,
4153 frequency_penalty: settings.freq_pen_openai,
4154 presence_penalty: settings.pres_pen_openai,
4155 top_p: settings.top_p_openai,
4156 top_k: settings.top_k_openai,
4157 top_a: settings.top_a_openai,
4158 min_p: settings.min_p_openai,
4159 repetition_penalty: settings.repetition_penalty_openai,
4160 openai_max_context: settings.openai_max_context,
4161 openai_max_tokens: settings.openai_max_tokens,
4162 wrap_in_quotes: settings.wrap_in_quotes,
4163 names_behavior: settings.names_behavior,
4164 send_if_empty: settings.send_if_empty,
4165 jailbreak_prompt: settings.jailbreak_prompt,
4166 impersonation_prompt: settings.impersonation_prompt,
4167 new_chat_prompt: settings.new_chat_prompt,
4168 new_group_chat_prompt: settings.new_group_chat_prompt,
4169 new_example_chat_prompt: settings.new_example_chat_prompt,
4170 continue_nudge_prompt: settings.continue_nudge_prompt,
4171 bias_preset_selected: settings.bias_preset_selected,
4172 reverse_proxy: settings.reverse_proxy,
4173 proxy_password: settings.proxy_password,
4174 max_context_unlocked: settings.max_context_unlocked,
4175 wi_format: settings.wi_format,
4176 scenario_format: settings.scenario_format,
4177 personality_format: settings.personality_format,
4178 group_nudge_prompt: settings.group_nudge_prompt,
4179 stream_openai: settings.stream_openai,
4180 prompts: settings.prompts,
4181 prompt_order: settings.prompt_order,
4182 show_external_models: settings.show_external_models,
4183 assistant_prefill: settings.assistant_prefill,
4184 assistant_impersonation: settings.assistant_impersonation,
4185 claude_use_sysprompt: settings.claude_use_sysprompt,
4186 use_makersuite_sysprompt: settings.use_makersuite_sysprompt,
4187 vertexai_auth_mode: settings.vertexai_auth_mode,
4188 vertexai_region: settings.vertexai_region,
4189 vertexai_express_project_id: settings.vertexai_express_project_id,
4190 squash_system_messages: settings.squash_system_messages,
4191 image_inlining: settings.image_inlining,
4192 inline_image_quality: settings.inline_image_quality,
4193 video_inlining: settings.video_inlining,
4194 audio_inlining: settings.audio_inlining,
4195 bypass_status_check: settings.bypass_status_check,
4196 continue_prefill: settings.continue_prefill,
4197 continue_postfix: settings.continue_postfix,
4198 function_calling: settings.function_calling,
4199 show_thoughts: settings.show_thoughts,
4200 reasoning_effort: settings.reasoning_effort,
4201 enable_web_search: settings.enable_web_search,
4202 request_images: settings.request_images,
4203 seed: settings.seed,
4204 n: settings.n,
4205 extensions: settings.extensions,
4206 };
42073921
4208 const savePresetSettings = await fetch('/api/presets/save', {3922 const savePresetSettings = await fetch('/api/presets/save', {
4209 method: 'POST',3923 method: 'POST',
@@ -6171,7 +5885,7 @@ function updateFeatureSupportFlags() {
6171 for (const [key, value] of Object.entries(featureFlags)) {5885 for (const [key, value] of Object.entries(featureFlags)) {
6172 const element = document.getElementById(key);5886 const element = document.getElementById(key);
6173 if (element) {5887 if (element) {
6174 element.dataset.ccToggle = String(value);5888 element.dataset.ccToggle = String(value ?? false);
6175 }5889 }
6176 }5890 }
6177}5891}