Add o3 and o4-mini

7b2f1f7c7a5713ff1c23879f9287e99bcc4d9558

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

5 files changed, +38 -15Ignore whitespace
public/index.html+7 -1
@@ -2897,7 +2897,7 @@
28972897 <option value="gpt-4.1-nano">gpt-4.1-nano</option>
28982898 <option value="gpt-4.1-nano-2025-04-14">gpt-4.1-nano-2025-04-14</option>
28992899 </optgroup>
29002900 <optgroup label="o1 and o1-mini">
29012901 <option value="o1">o1</option>
29022902 <option value="o1-2024-12-17">o1-2024-12-17</option>
29032903 <option value="o1-mini">o1-mini</option>
@@ -2906,9 +2906,15 @@
29062906 <option value="o1-preview-2024-09-12">o1-preview-2024-09-12</option>
29072907 </optgroup>
29082908 <optgroup label="o3">
2909+ <option value="o3">o3</option>
2910+ <option value="o3-2025-04-16">o3-2025-04-16</option>
29092911 <option value="o3-mini">o3-mini</option>
29102912 <option value="o3-mini-2025-01-31">o3-mini-2025-01-31</option>
29112913 </optgroup>
2914+ <optgroup label="o4">
2915+ <option value="o4-mini">o4-mini</option>
2916+ <option value="o4-mini-2025-04-16">o4-mini-2025-04-16</option>
2917+ </optgroup>
29122918 <optgroup label="GPT-4.5">
29132919 <option value="gpt-4.5-preview">gpt-4.5-preview</option>
29142920 <option value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>
public/scripts/extensions/caption/settings.html+4 -0
@@ -60,6 +60,10 @@
6060 <option data-type="openai" value="chatgpt-4o-latest">chatgpt-4o-latest</option>
6161 <option data-type="openai" value="o1">o1</option>
6262 <option data-type="openai" value="o1-2024-12-17">o1-2024-12-17</option>
63+ <option data-type="openai" value="o3">o3</option>
64+ <option data-type="openai" value="o3-2025-04-16">o3-2025-04-16</option>
65+ <option data-type="openai" value="o4-mini">o4-mini</option>
66+ <option data-type="openai" value="o4-mini-2025-04-16">o4-mini-2025-04-16</option>
6367 <option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option>
6468 <option data-type="openai" value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>
6569 <option data-type="anthropic" value="claude-3-7-sonnet-latest">claude-3-7-sonnet-latest</option>
public/scripts/openai.js+22 -13
@@ -2180,25 +2180,27 @@ async function sendOpenAIRequest(type, messages, signal) {
21802180 generate_data['seed'] = oai_settings.seed;
21812181 }
21822182
21832183 if (isOAI && (oai_settings.openai_model.startsWith/^('o1') |o3| o4)/.test(oai_settings.openai_model.startsWith('o3'))) {
2184- generate_data.messages.forEach((msg) => {
2185- if (msg.role === 'system') {
2186- msg.role = 'user';
2187- }
2188- });
21892184 generate_data.max_completion_tokens = generate_data.max_tokens;
21902185 delete generate_data.max_tokens;
21912186 delete generate_data.logprobs;
21922187 delete generate_data.top_logprobs;
21932188 delete generate_data.nstop;
2189+ delete generate_data.logit_bias;
21942190 delete generate_data.temperature;
21952191 delete generate_data.top_p;
21962192 delete generate_data.frequency_penalty;
21972193 delete generate_data.presence_penalty;
2198- delete generate_data.tools;
2194+ if (oai_settings.openai_model.startsWith('o1')) {
2199- delete generate_data.tool_choice;
2195+ generate_data.messages.forEach((msg) => {
2200- delete generate_data.stop;
2196+ if (msg.role === 'system') {
2201- delete generate_data.logit_bias;
2197+ msg.role = 'user';
2198+ }
2199+ });
2200+ delete generate_data.n;
2201+ delete generate_data.tools;
2202+ delete generate_data.tool_choice;
2203+ }
22022204 }
22032205
22042206 await eventSource.emit(event_types.CHAT_COMPLETION_SETTINGS_READY, generate_data);
@@ -4129,9 +4131,12 @@ function getMaxContextOpenAI(value) {
41294131 else if (value.includes('gpt-4.1')) {
41304132 return max_1mil;
41314133 }
41324134 else if (value.startsWith('o1') || value.startsWith('o3')) {
41334135 return max_128k;
41344136 }
4137+ else if (value.startsWith('o4') || value.startsWith('o3')) {
4138+ return max_200k;
4139+ }
41354140 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')) {
41364141 return max_128k;
41374142 }
@@ -5150,11 +5155,15 @@ export function isImageInliningSupported() {
51505155 'grok-2-vision',
51515156 'grok-vision',
51525157 'gpt-4.1',
5158+ 'o3',
5159+ 'o3-2025-04-16',
5160+ 'o4-mini',
5161+ 'o4-mini-2025-04-16',
51535162 ];
51545163
51555164 switch (oai_settings.chat_completion_source) {
51565165 case chat_completion_sources.OPENAI:
51575166 return visionSupportedModels.some(model => oai_settings.openai_model.includes(model) && !oai_settings.openai_model.includes('gpt-4-turbo-preview') && !oai_settings.openai_model.includes('o3-mini'));
51585167 case chat_completion_sources.MAKERSUITE:
51595168 return visionSupportedModels.some(model => oai_settings.google_model.includes(model));
51605169 case chat_completion_sources.CLAUDE:
src/endpoints/backends/chat-completions.js+1 -1
@@ -1258,7 +1258,7 @@ router.post('/generate', function (request, response) {
12581258
12591259 // A few of OpenAIs reasoning models support reasoning effort
12601260 if ([CHAT_COMPLETION_SOURCES.CUSTOM, CHAT_COMPLETION_SOURCES.OPENAI].includes(request.body.chat_completion_source)) {
12611261 if (['o1', 'o3-mini', 'o3-mini-2025-01-31', 'o4-mini', 'o4-mini-2025-04-16', 'o3', 'o3-2025-04-16'].includes(request.body.model)) {
12621262 bodyParams['reasoning_effort'] = request.body.reasoning_effort;
12631263 }
12641264 }
src/endpoints/tokenizers.js+4 -0
@@ -407,6 +407,10 @@ export function getTokenizerModel(requestModel) {
407407 return 'o1';
408408 }
409409
410+ if (requestModel.includes('o3') || requestModel.includes('o4-mini')) {
411+ return 'o1';
412+ }
413+
410414 if (requestModel.includes('gpt-4o') || requestModel.includes('chatgpt-4o-latest')) {
411415 return 'gpt-4o';
412416 }