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 @@
32603260 <div>
32613261 <h4 data-i18n="Google Model">Google Model</h4>
32623262 <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>
32633266 <optgroup label="Gemini 3.0">
32643267 <option value="gemini-3-pro-preview">gemini-3-pro-preview</option>
32653268 <option value="gemini-3-pro-image-preview">gemini-3-pro-image-preview</option>
@@ -3433,6 +3436,9 @@
34333436 <h4 data-i18n="Google Model">Google Model</h4>
34343437 <select id="model_vertexai_select">
34353438 <!-- 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>
34363442 <optgroup label="Gemini 3.0">
34373443 <option value="gemini-3-pro-preview">gemini-3-pro-preview</option>
34383444 <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() {
52095209 $('#openai_max_context').attr('max', max_32k);
52105210 } else if (value.includes('gemini-3-pro-image')) {
52115211 $('#openai_max_context').attr('max', max_64k);
52125212 } else if (/gemini-3[.\d]*-(pro|flash)/.test(value) || /gemini-2.5-(pro|flash)/.test(value) || /gemini-2.0-(pro|flash)/.test(value)) {
52135213 $('#openai_max_context').attr('max', max_1mil);
52145214 } else if (value.includes('gemini-exp') || value.includes('learnlm-2.0-flash') || value.includes('gemini-robotics')) {
52155215 $('#openai_max_context').attr('max', max_1mil);
src/endpoints/backends/chat-completions.js+1 -1
@@ -460,7 +460,7 @@ async function sendMakerSuiteRequest(request, response) {
460460 'gemini-3-pro-image-preview',
461461 ];
462462
463463 const isThinkingConfigModel = m => (/^gemini-2.5-(flash|pro)/.test(m) && !/-image(-preview)?$/.test(m)) || (/^gemini-3[.\d]*-(flash|pro)/.test(m));
464464 const isImageSizeModel = m => /^gemini-3/.test(m);
465465
466466 const noSearchModels = [
src/prompt-converters.js+2 -2
@@ -1270,11 +1270,11 @@ export function calculateGoogleBudgetTokens(maxTokens, reasoningEffort, model) {
12701270 return null;
12711271 }
12721272
12731273 if (/gemini-3[.\d]*-pro/.test(model)) {
12741274 return getGemini3ProBudget();
12751275 }
12761276
12771277 if (/gemini-3[.\d]*-flash/.test(model)) {
12781278 return getGemini3FlashBudget();
12791279 }
12801280