Add gpt-5.3-chat-latest model support (#5241) * Add gpt-5.3-chat-latest model support - Add to OpenAI model dropdown (index.html) - Add to captioning multimodal model list (caption/settings.html) - Add to OPENAI_REASONING_EFFORT_MODELS (constants.js) - Add OPENAI_FIXED_REASONING_EFFORT map to clamp effort to 'medium' (the only value this model accepts) - Apply fixed effort override in both Azure and general OpenAI request paths (chat-completions.js) - Update frontend gpt-5.x regex for parameter handling (openai.js) * Update public/scripts/openai.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

f20aed95d09d51a53867ce696d691fbb2e3b98d8

Spicy Marinara <mgrabower97@gmail.com>

Signed
5 files changed, +17 -3Ignore whitespace
public/index.html+3 -0
@@ -3028,6 +3028,9 @@
30283028 <div>
30293029 <h4 data-i18n="OpenAI Model">OpenAI Model</h4>
30303030 <select id="model_openai_select">
3031+ <optgroup label="GPT-5.3">
3032+ <option value="gpt-5.3-chat-latest">gpt-5.3-chat-latest</option>
3033+ </optgroup>
30313034 <optgroup label="GPT-5.2">
30323035 <option value="gpt-5.2">gpt-5.2</option>
30333036 <option value="gpt-5.2-2025-12-11">gpt-5.2-2025-12-11</option>
public/scripts/extensions/caption/settings.html+1 -0
@@ -53,6 +53,7 @@
5353 <option data-type="cohere" value="c4ai-aya-vision-8b">c4ai-aya-vision-8b</option>
5454 <option data-type="cohere" value="c4ai-aya-vision-32b">c4ai-aya-vision-32b</option>
5555 <option data-type="cohere" value="command-a-vision-07-2025">command-a-vision-07-2025</option>
56+ <option data-type="openai" value="gpt-5.3-chat-latest">gpt-5.3-chat-latest</option>
5657 <option data-type="openai" value="gpt-5.2">gpt-5.2</option>
5758 <option data-type="openai" value="gpt-5.2-2025-12-11">gpt-5.2-2025-12-11</option>
5859 <option data-type="openai" value="gpt-5.2-chat-latest">gpt-5.2-chat-latest</option>
public/scripts/openai.js+1 -1
@@ -2859,7 +2859,7 @@ export async function createGenerationParameters(settings, model, type, messages
28592859 if (/gpt-5-chat-latest/.test(model)) {
28602860 delete generate_data.tools;
28612861 delete generate_data.tool_choice;
28622862 } else if (/gpt-5\.(1|2|3)/.test(model) && !/chat-latest/.test(model)) {
28632863 delete generate_data.frequency_penalty;
28642864 delete generate_data.presence_penalty;
28652865 delete generate_data.logit_bias;
src/constants.js+9 -0
@@ -476,12 +476,21 @@ export const OPENAI_REASONING_EFFORT_MODELS = [
476476 'gpt-5.2',
477477 'gpt-5.2-2025-12-11',
478478 'gpt-5.2-chat-latest',
479+ 'gpt-5.3-chat-latest',
479480];
480481
481482export const OPENAI_REASONING_EFFORT_MAP = {
482483 min: 'minimal',
483484};
484485
486+/**
487+ * Models that only accept a single fixed reasoning effort value.
488+ * @type {Record<string, string>}
489+ */
490+export const OPENAI_FIXED_REASONING_EFFORT = {
491+ 'gpt-5.3-chat-latest': 'medium',
492+};
493+
485494export const NANOGPT_REASONING_EFFORT_MAP = {
486495 min: 'none',
487496 low: 'minimal',
src/endpoints/backends/chat-completions.js+3 -2
@@ -11,6 +11,7 @@ import {
1111 CHAT_COMPLETION_SOURCES,
1212 GEMINI_SAFETY,
1313 NANOGPT_REASONING_EFFORT_MAP,
14+ OPENAI_FIXED_REASONING_EFFORT,
1415 OPENAI_REASONING_EFFORT_MAP,
1516 OPENAI_REASONING_EFFORT_MODELS,
1617 OPENAI_VERBOSITY_MODELS,
@@ -1597,7 +1598,7 @@ async function sendAzureOpenAIRequest(request, response) {
15971598
15981599 // Do not send reasoning effort to models which do not support it
15991600 apiRequestBody['reasoning_effort'] = OPENAI_REASONING_EFFORT_MODELS.includes(request.body.model)
16001601 ? OPENAI_FIXED_REASONING_EFFORT[request.body.model] ?? OPENAI_REASONING_EFFORT_MAP[request.body.reasoning_effort] ?? request.body.reasoning_effort
16011602 : undefined;
16021603
16031604 const controller = new AbortController();
@@ -2326,7 +2327,7 @@ router.post('/generate', async function (request, response) {
23262327 // A few of OpenAIs reasoning models support reasoning effort
23272328 if (request.body.reasoning_effort && [CHAT_COMPLETION_SOURCES.CUSTOM, CHAT_COMPLETION_SOURCES.OPENAI].includes(request.body.chat_completion_source)) {
23282329 if (OPENAI_REASONING_EFFORT_MODELS.includes(request.body.model)) {
23292330 bodyParams['reasoning_effort'] = OPENAI_FIXED_REASONING_EFFORT[request.body.model] ?? OPENAI_REASONING_EFFORT_MAP[request.body.reasoning_effort] ?? request.body.reasoning_effort;
23302331 }
23312332 }
23322333