Add o3 and o4-mini
| @@ -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> |
| @@ -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> |
| @@ -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 | } |
| 2182 | 2182 | ||
| 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 | } |
| 2203 | 2205 | ||
| 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 | ]; |
| 5154 | 5163 | ||
| 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: |
| @@ -1258,7 +1258,7 @@ router.post('/generate', function (request, response) { | |||
| 1258 | 1258 | ||
| 1259 | // A few of OpenAIs reasoning models support reasoning effort | 1259 | // 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 | } |
| @@ -407,6 +407,10 @@ export function getTokenizerModel(requestModel) { | |||
| 407 | return 'o1'; | 407 | return 'o1'; |
| 408 | } | 408 | } |
| 409 | 409 | ||
| 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 | } |