Add gemini-3.1-pro-preview to Google AI Studio and Vertex model lists with thinking support (#5188)

a923b0eefecfb0515a8c71855c6d7bbe39767483

Spicy Marinara <mgrabower97@gmail.com>

Signed
4 files changed, +10 -4Ignore whitespace
public/index.html+6 -0
@@ -3260,6 +3260,9 @@
3260 <div>3260 <div>
3261 <h4 data-i18n="Google Model">Google Model</h4>3261 <h4 data-i18n="Google Model">Google Model</h4>
3262 <select id="model_google_select">3262 <select id="model_google_select">
3263 <optgroup label="Gemini 3.1">
3264 <option value="gemini-3.1-pro-preview">gemini-3.1-pro-preview</option>
3265 </optgroup>
3263 <optgroup label="Gemini 3.0">3266 <optgroup label="Gemini 3.0">
3264 <option value="gemini-3-pro-preview">gemini-3-pro-preview</option>3267 <option value="gemini-3-pro-preview">gemini-3-pro-preview</option>
3265 <option value="gemini-3-pro-image-preview">gemini-3-pro-image-preview</option>3268 <option value="gemini-3-pro-image-preview">gemini-3-pro-image-preview</option>
@@ -3433,6 +3436,9 @@
3433 <h4 data-i18n="Google Model">Google Model</h4>3436 <h4 data-i18n="Google Model">Google Model</h4>
3434 <select id="model_vertexai_select">3437 <select id="model_vertexai_select">
3435 <!-- data-mode="full" is for models that require a service account -->3438 <!-- data-mode="full" is for models that require a service account -->
3439 <optgroup label="Gemini 3.1">
3440 <option value="gemini-3.1-pro-preview">gemini-3.1-pro-preview</option>
3441 </optgroup>
3436 <optgroup label="Gemini 3.0">3442 <optgroup label="Gemini 3.0">
3437 <option value="gemini-3-pro-preview">gemini-3-pro-preview</option>3443 <option value="gemini-3-pro-preview">gemini-3-pro-preview</option>
3438 <option value="gemini-3-pro-image-preview">gemini-3-pro-image-preview</option>3444 <option value="gemini-3-pro-image-preview">gemini-3-pro-image-preview</option>
public/scripts/openai.js+1 -1
@@ -5209,7 +5209,7 @@ async function onModelChange() {
5209 $('#openai_max_context').attr('max', max_32k);5209 $('#openai_max_context').attr('max', max_32k);
5210 } else if (value.includes('gemini-3-pro-image')) {5210 } else if (value.includes('gemini-3-pro-image')) {
5211 $('#openai_max_context').attr('max', max_64k);5211 $('#openai_max_context').attr('max', max_64k);
5212 } else if (/gemini-3-(pro|flash)/.test(value) || /gemini-2.5-(pro|flash)/.test(value) || /gemini-2.0-(pro|flash)/.test(value)) {5212 } else if (/gemini-3[.\d]*-(pro|flash)/.test(value) || /gemini-2.5-(pro|flash)/.test(value) || /gemini-2.0-(pro|flash)/.test(value)) {
5213 $('#openai_max_context').attr('max', max_1mil);5213 $('#openai_max_context').attr('max', max_1mil);
5214 } else if (value.includes('gemini-exp') || value.includes('learnlm-2.0-flash') || value.includes('gemini-robotics')) {5214 } else if (value.includes('gemini-exp') || value.includes('learnlm-2.0-flash') || value.includes('gemini-robotics')) {
5215 $('#openai_max_context').attr('max', max_1mil);5215 $('#openai_max_context').attr('max', max_1mil);
src/endpoints/backends/chat-completions.js+1 -1
@@ -460,7 +460,7 @@ async function sendMakerSuiteRequest(request, response) {
460 'gemini-3-pro-image-preview',460 'gemini-3-pro-image-preview',
461 ];461 ];
462462
463 const isThinkingConfigModel = m => (/^gemini-2.5-(flash|pro)/.test(m) && !/-image(-preview)?$/.test(m)) || (/^gemini-3-(flash|pro)/.test(m));463 const isThinkingConfigModel = m => (/^gemini-2.5-(flash|pro)/.test(m) && !/-image(-preview)?$/.test(m)) || (/^gemini-3[.\d]*-(flash|pro)/.test(m));
464 const isImageSizeModel = m => /^gemini-3/.test(m);464 const isImageSizeModel = m => /^gemini-3/.test(m);
465465
466 const noSearchModels = [466 const noSearchModels = [
src/prompt-converters.js+2 -2
@@ -1270,11 +1270,11 @@ export function calculateGoogleBudgetTokens(maxTokens, reasoningEffort, model) {
1270 return null;1270 return null;
1271 }1271 }
12721272
1273 if (/gemini-3-pro/.test(model)) {1273 if (/gemini-3[.\d]*-pro/.test(model)) {
1274 return getGemini3ProBudget();1274 return getGemini3ProBudget();
1275 }1275 }
12761276
1277 if (/gemini-3-flash/.test(model)) {1277 if (/gemini-3[.\d]*-flash/.test(model)) {
1278 return getGemini3FlashBudget();1278 return getGemini3FlashBudget();
1279 }1279 }
12801280