Add reasoning_effort for OpenAI models

3f9af45493091974bced97cd6c74b4f9e92ce580

Wolfsblvt <wolfsblvt@gmail.com>

3 files changed, +37 -0Showing whitespace changes
public/index.html+12 -0
@@ -1995,6 +1995,18 @@
19951995 </span>
19961996 </div>
19971997 </div>
1998+ <div class="flex-container flexFlowColumn wide100p textAlignCenter marginTop10" data-source="openai">
1999+ <div class="flex-container oneline-dropdown" title="Constrains effort on reasoning for reasoning models.&#10;Currently supported values are low, medium, and high.&#10;Reducing reasoning effort can result in faster responses and fewer tokens used on reasoning in a response.">
2000+ <label for="openai_reasoning_effort" data-i18n="Reasoning Effort">
2001+ Reasoning Effort
2002+ </label>
2003+ <select id="openai_reasoning_effort">
2004+ <option data-i18n="openai_reasoning_effort_low" value="low">Low</option>
2005+ <option data-i18n="openai_reasoning_effort_medium" value="medium">Medium</option>
2006+ <option data-i18n="openai_reasoning_effort_high" value="high">High</option>
2007+ </select>
2008+ </div>
2009+ </div>
19982010 <div class="range-block" data-source="claude">
19992011 <div class="wide100p">
20002012 <div class="flex-container alignItemsCenter">
public/scripts/openai.js+13 -0
@@ -299,6 +299,7 @@ const default_settings = {
299299 continue_postfix: continue_postfix_types.SPACE,
300300 custom_prompt_post_processing: custom_prompt_post_processing_types.NONE,
301301 show_thoughts: true,
302+ reasoning_effort: 'medium',
302303 seed: -1,
303304 n: 1,
304305};
@@ -378,6 +379,7 @@ const oai_settings = {
378379 continue_postfix: continue_postfix_types.SPACE,
379380 custom_prompt_post_processing: custom_prompt_post_processing_types.NONE,
380381 show_thoughts: true,
382+ reasoning_effort: 'medium',
381383 seed: -1,
382384 n: 1,
383385};
@@ -1912,6 +1914,7 @@ async function sendOpenAIRequest(type, messages, signal) {
19121914 'char_name': name2,
19131915 'group_names': getGroupNames(),
19141916 'include_reasoning': Boolean(oai_settings.show_thoughts),
1917+ 'reasoning_effort': String(oai_settings.reasoning_effort),
19151918 };
19161919
19171920 // Empty array will produce a validation error
@@ -3122,6 +3125,7 @@ function loadOpenAISettings(data, settings) {
31223125 oai_settings.inline_image_quality = settings.inline_image_quality ?? default_settings.inline_image_quality;
31233126 oai_settings.bypass_status_check = settings.bypass_status_check ?? default_settings.bypass_status_check;
31243127 oai_settings.show_thoughts = settings.show_thoughts ?? default_settings.show_thoughts;
3128+ oai_settings.reasoning_effort = settings.reasoning_effort ?? default_settings.reasoning_effort;
31253129 oai_settings.seed = settings.seed ?? default_settings.seed;
31263130 oai_settings.n = settings.n ?? default_settings.n;
31273131
@@ -3251,6 +3255,9 @@ function loadOpenAISettings(data, settings) {
32513255 $('#n_openai').val(oai_settings.n);
32523256 $('#openai_show_thoughts').prop('checked', oai_settings.show_thoughts);
32533257
3258+ $('#openai_reasoning_effort').val(oai_settings.reasoning_effort);
3259+ $(`#openai_reasoning_effort option[value="${oai_settings.reasoning_effort}"]`).prop('selected', true);
3260+
32543261 if (settings.reverse_proxy !== undefined) oai_settings.reverse_proxy = settings.reverse_proxy;
32553262 $('#openai_reverse_proxy').val(oai_settings.reverse_proxy);
32563263
@@ -3969,6 +3976,7 @@ function onSettingsPresetChange() {
39693976 continue_postfix: ['#continue_postfix', 'continue_postfix', false],
39703977 function_calling: ['#openai_function_calling', 'function_calling', true],
39713978 show_thoughts: ['#openai_show_thoughts', 'show_thoughts', true],
3979+ reasoning_effort: ['#openai_reasoning_effort', 'reasoning_effort', false],
39723980 seed: ['#seed_openai', 'seed', false],
39733981 n: ['#n_openai', 'n', false],
39743982 };
@@ -5510,6 +5518,11 @@ export function initOpenAI() {
55105518 saveSettingsDebounced();
55115519 });
55125520
5521+ $('#openai_reasoning_effort').on('input', function () {
5522+ oai_settings.reasoning_effort = String($(this).val());
5523+ saveSettingsDebounced();
5524+ });
5525+
55135526 if (!CSS.supports('field-sizing', 'content')) {
55145527 $(document).on('input', '#openai_settings .autoSetHeight', function () {
55155528 resetScrollHeight($(this));
public/style.css+12 -0
@@ -5914,3 +5914,15 @@ body:not(.movingUI) .drawer-content.maximized {
59145914.mes_text div[data-type="assistant_note"]:has(.assistant_note_export)>div:not(.assistant_note_export) {
59155915 flex: 1;
59165916}
5917+
5918+.oneline-dropdown label {
5919+ margin-top: 3px;
5920+ margin-bottom: 5px;
5921+ flex-grow: 1;
5922+ text-align: left;
5923+}
5924+
5925+.oneline-dropdown select {
5926+ min-width: fit-content;
5927+ width: 40%;
5928+}