diff --git a/public/script.js b/public/script.js index b86a2205c..e6aada176 100644 --- a/public/script.js +++ b/public/script.js @@ -3075,7 +3075,7 @@ export function isStreamingEnabled() { (main_api == 'openai' && oai_settings.stream_openai && !noStreamSources.includes(oai_settings.chat_completion_source) && - !(oai_settings.chat_completion_source == chat_completion_sources.OPENAI && oai_settings.openai_model.startsWith('o1-')) && + !(oai_settings.chat_completion_source == chat_completion_sources.OPENAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))) && !(oai_settings.chat_completion_source == chat_completion_sources.MAKERSUITE && oai_settings.google_model.includes('bison'))) || (main_api == 'kobold' && kai_settings.streaming_kobold && kai_flags.can_use_streaming) || (main_api == 'novel' && nai_settings.streaming_novel) diff --git a/public/scripts/openai.js b/public/scripts/openai.js index f1fed2799..2357e780f 100644 --- a/public/scripts/openai.js +++ b/public/scripts/openai.js @@ -1869,7 +1869,7 @@ async function sendOpenAIRequest(type, messages, signal) { const isQuiet = type === 'quiet'; const isImpersonate = type === 'impersonate'; const isContinue = type === 'continue'; - const stream = oai_settings.stream_openai && !isQuiet && !isScale && !(isGoogle && oai_settings.google_model.includes('bison')) && !(isOAI && oai_settings.openai_model.startsWith('o1-')); + const stream = oai_settings.stream_openai && !isQuiet && !isScale && !(isGoogle && oai_settings.google_model.includes('bison')) && !(isOAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))); const useLogprobs = !!power_user.request_token_probabilities; const canMultiSwipe = oai_settings.n > 1 && !isContinue && !isImpersonate && !isQuiet && (isOAI || isCustom); @@ -2050,7 +2050,7 @@ async function sendOpenAIRequest(type, messages, signal) { await ToolManager.registerFunctionToolsOpenAI(generate_data); } - if (isOAI && oai_settings.openai_model.startsWith('o1-')) { + if (isOAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))) { generate_data.messages.forEach((msg) => { if (msg.role === 'system') { msg.role = 'user'; @@ -4027,7 +4027,7 @@ function getMaxContextOpenAI(value) { if (oai_settings.max_context_unlocked) { return unlocked_max; } - else if (value.startsWith('o1-')) { + else if (value.startsWith('o1') || value.startsWith('o3')) { return max_128k; } else if (value.includes('chatgpt-4o-latest') || value.includes('gpt-4-turbo') || value.includes('gpt-4o') || value.includes('gpt-4-1106') || value.includes('gpt-4-0125') || value.includes('gpt-4-vision')) { diff --git a/src/endpoints/backends/chat-completions.js b/src/endpoints/backends/chat-completions.js index c3aee45bb..5c9f878e5 100644 --- a/src/endpoints/backends/chat-completions.js +++ b/src/endpoints/backends/chat-completions.js @@ -1107,10 +1107,6 @@ router.post('/generate', jsonParser, function (request, response) { ...bodyParams, }; - if (request.body.chat_completion_source === CHAT_COMPLETION_SOURCES.OPENAI && String(requestBody.model).startsWith('o3')) { - delete requestBody.max_tokens; - } - if (request.body.chat_completion_source === CHAT_COMPLETION_SOURCES.CUSTOM) { excludeKeysByYaml(requestBody, request.body.custom_exclude_body); } diff --git a/src/endpoints/tokenizers.js b/src/endpoints/tokenizers.js index 5f693b751..bb7358f91 100644 --- a/src/endpoints/tokenizers.js +++ b/src/endpoints/tokenizers.js @@ -398,7 +398,7 @@ function getWebTokenizersChunks(tokenizer, ids) { * @returns {string} Tokenizer model to use */ export function getTokenizerModel(requestModel) { - if (requestModel.includes('o1-preview') || requestModel.includes('o1-mini')) { + if (requestModel.includes('o1-preview') || requestModel.includes('o1-mini') || requestModel.includes('o3-mini')) { return 'gpt-4o'; }