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 @@
2897 <option value="gpt-4.1-nano">gpt-4.1-nano</option>2897 <option value="gpt-4.1-nano">gpt-4.1-nano</option>
2898 <option value="gpt-4.1-nano-2025-04-14">gpt-4.1-nano-2025-04-14</option>2898 <option value="gpt-4.1-nano-2025-04-14">gpt-4.1-nano-2025-04-14</option>
2899 </optgroup>2899 </optgroup>
2900 <optgroup label="o1 and o1-mini">2900 <optgroup label="o1">
2901 <option value="o1">o1</option>2901 <option value="o1">o1</option>
2902 <option value="o1-2024-12-17">o1-2024-12-17</option>2902 <option value="o1-2024-12-17">o1-2024-12-17</option>
2903 <option value="o1-mini">o1-mini</option>2903 <option value="o1-mini">o1-mini</option>
@@ -2906,9 +2906,15 @@
2906 <option value="o1-preview-2024-09-12">o1-preview-2024-09-12</option>2906 <option value="o1-preview-2024-09-12">o1-preview-2024-09-12</option>
2907 </optgroup>2907 </optgroup>
2908 <optgroup label="o3">2908 <optgroup label="o3">
2909 <option value="o3">o3</option>
2910 <option value="o3-2025-04-16">o3-2025-04-16</option>
2909 <option value="o3-mini">o3-mini</option>2911 <option value="o3-mini">o3-mini</option>
2910 <option value="o3-mini-2025-01-31">o3-mini-2025-01-31</option>2912 <option value="o3-mini-2025-01-31">o3-mini-2025-01-31</option>
2911 </optgroup>2913 </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>
2912 <optgroup label="GPT-4.5">2918 <optgroup label="GPT-4.5">
2913 <option value="gpt-4.5-preview">gpt-4.5-preview</option>2919 <option value="gpt-4.5-preview">gpt-4.5-preview</option>
2914 <option value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>2920 <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 @@
60 <option data-type="openai" value="chatgpt-4o-latest">chatgpt-4o-latest</option>60 <option data-type="openai" value="chatgpt-4o-latest">chatgpt-4o-latest</option>
61 <option data-type="openai" value="o1">o1</option>61 <option data-type="openai" value="o1">o1</option>
62 <option data-type="openai" value="o1-2024-12-17">o1-2024-12-17</option>62 <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>
63 <option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option>67 <option data-type="openai" value="gpt-4.5-preview">gpt-4.5-preview</option>
64 <option data-type="openai" value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>68 <option data-type="openai" value="gpt-4.5-preview-2025-02-27">gpt-4.5-preview-2025-02-27</option>
65 <option data-type="anthropic" value="claude-3-7-sonnet-latest">claude-3-7-sonnet-latest</option>69 <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) {
2180 generate_data['seed'] = oai_settings.seed;2180 generate_data['seed'] = oai_settings.seed;
2181 }2181 }
21822182
2183 if (isOAI && (oai_settings.openai_model.startsWith('o1') || oai_settings.openai_model.startsWith('o3'))) {2183 if (isOAI && /^(o1|o3|o4)/.test(oai_settings.openai_model)) {
2184 generate_data.messages.forEach((msg) => {
2185 if (msg.role === 'system') {
2186 msg.role = 'user';
2187 }
2188 });
2189 generate_data.max_completion_tokens = generate_data.max_tokens;2184 generate_data.max_completion_tokens = generate_data.max_tokens;
2190 delete generate_data.max_tokens;2185 delete generate_data.max_tokens;
2191 delete generate_data.logprobs;2186 delete generate_data.logprobs;
2192 delete generate_data.top_logprobs;2187 delete generate_data.top_logprobs;
2193 delete generate_data.n;2188 delete generate_data.stop;
2189 delete generate_data.logit_bias;
2194 delete generate_data.temperature;2190 delete generate_data.temperature;
2195 delete generate_data.top_p;2191 delete generate_data.top_p;
2196 delete generate_data.frequency_penalty;2192 delete generate_data.frequency_penalty;
2197 delete generate_data.presence_penalty;2193 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 }
2202 }2204 }
22032205
2204 await eventSource.emit(event_types.CHAT_COMPLETION_SETTINGS_READY, generate_data);2206 await eventSource.emit(event_types.CHAT_COMPLETION_SETTINGS_READY, generate_data);
@@ -4129,9 +4131,12 @@ function getMaxContextOpenAI(value) {
4129 else if (value.includes('gpt-4.1')) {4131 else if (value.includes('gpt-4.1')) {
4130 return max_1mil;4132 return max_1mil;
4131 }4133 }
4132 else if (value.startsWith('o1') || value.startsWith('o3')) {4134 else if (value.startsWith('o1')) {
4133 return max_128k;4135 return max_128k;
4134 }4136 }
4137 else if (value.startsWith('o4') || value.startsWith('o3')) {
4138 return max_200k;
4139 }
4135 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')) {4140 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')) {
4136 return max_128k;4141 return max_128k;
4137 }4142 }
@@ -5150,11 +5155,15 @@ export function isImageInliningSupported() {
5150 'grok-2-vision',5155 'grok-2-vision',
5151 'grok-vision',5156 'grok-vision',
5152 'gpt-4.1',5157 'gpt-4.1',
5158 'o3',
5159 'o3-2025-04-16',
5160 'o4-mini',
5161 'o4-mini-2025-04-16',
5153 ];5162 ];
51545163
5155 switch (oai_settings.chat_completion_source) {5164 switch (oai_settings.chat_completion_source) {
5156 case chat_completion_sources.OPENAI:5165 case chat_completion_sources.OPENAI:
5157 return visionSupportedModels.some(model => oai_settings.openai_model.includes(model) && !oai_settings.openai_model.includes('gpt-4-turbo-preview'));5166 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'));
5158 case chat_completion_sources.MAKERSUITE:5167 case chat_completion_sources.MAKERSUITE:
5159 return visionSupportedModels.some(model => oai_settings.google_model.includes(model));5168 return visionSupportedModels.some(model => oai_settings.google_model.includes(model));
5160 case chat_completion_sources.CLAUDE:5169 case chat_completion_sources.CLAUDE:
src/endpoints/backends/chat-completions.js+1 -1
@@ -1258,7 +1258,7 @@ router.post('/generate', function (request, response) {
12581258
1259 // A few of OpenAIs reasoning models support reasoning effort1259 // A few of OpenAIs reasoning models support reasoning effort
1260 if ([CHAT_COMPLETION_SOURCES.CUSTOM, CHAT_COMPLETION_SOURCES.OPENAI].includes(request.body.chat_completion_source)) {1260 if ([CHAT_COMPLETION_SOURCES.CUSTOM, CHAT_COMPLETION_SOURCES.OPENAI].includes(request.body.chat_completion_source)) {
1261 if (['o1', 'o3-mini', 'o3-mini-2025-01-31'].includes(request.body.model)) {1261 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)) {
1262 bodyParams['reasoning_effort'] = request.body.reasoning_effort;1262 bodyParams['reasoning_effort'] = request.body.reasoning_effort;
1263 }1263 }
1264 }1264 }
src/endpoints/tokenizers.js+4 -0
@@ -407,6 +407,10 @@ export function getTokenizerModel(requestModel) {
407 return 'o1';407 return 'o1';
408 }408 }
409409
410 if (requestModel.includes('o3') || requestModel.includes('o4-mini')) {
411 return 'o1';
412 }
413
410 if (requestModel.includes('gpt-4o') || requestModel.includes('chatgpt-4o-latest')) {414 if (requestModel.includes('gpt-4o') || requestModel.includes('chatgpt-4o-latest')) {
411 return 'gpt-4o';415 return 'gpt-4o';
412 }416 }