Add gemini-3.1-pro-preview model (#49622) (cherry-pick to preview) (#49635)

zed-zippy[bot] and Richard Feldman created

Cherry-pick of #49622 to preview

----
Closes AI-48

Release Notes:

- Added support for Gemini 3.1 Pro

Co-authored-by: Richard Feldman <richard@zed.dev>

Change summary

crates/google_ai/src/google_ai.rs | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)

Detailed changes

crates/google_ai/src/google_ai.rs 🔗

@@ -514,6 +514,8 @@ pub enum Model {
     Gemini3Pro,
     #[serde(rename = "gemini-3-flash-preview")]
     Gemini3Flash,
+    #[serde(rename = "gemini-3.1-pro-preview")]
+    Gemini31Pro,
     #[serde(rename = "custom")]
     Custom {
         name: String,
@@ -537,6 +539,7 @@ impl Model {
             Self::Gemini25Pro => "gemini-2.5-pro",
             Self::Gemini3Pro => "gemini-3-pro-preview",
             Self::Gemini3Flash => "gemini-3-flash-preview",
+            Self::Gemini31Pro => "gemini-3.1-pro-preview",
             Self::Custom { name, .. } => name,
         }
     }
@@ -547,6 +550,7 @@ impl Model {
             Self::Gemini25Pro => "gemini-2.5-pro",
             Self::Gemini3Pro => "gemini-3-pro-preview",
             Self::Gemini3Flash => "gemini-3-flash-preview",
+            Self::Gemini31Pro => "gemini-3.1-pro-preview",
             Self::Custom { name, .. } => name,
         }
     }
@@ -558,6 +562,7 @@ impl Model {
             Self::Gemini25Pro => "Gemini 2.5 Pro",
             Self::Gemini3Pro => "Gemini 3 Pro",
             Self::Gemini3Flash => "Gemini 3 Flash",
+            Self::Gemini31Pro => "Gemini 3.1 Pro",
             Self::Custom {
                 name, display_name, ..
             } => display_name.as_ref().unwrap_or(name),
@@ -570,7 +575,8 @@ impl Model {
             | Self::Gemini25Flash
             | Self::Gemini25Pro
             | Self::Gemini3Pro
-            | Self::Gemini3Flash => 1_048_576,
+            | Self::Gemini3Flash
+            | Self::Gemini31Pro => 1_048_576,
             Self::Custom { max_tokens, .. } => *max_tokens,
         }
     }
@@ -581,7 +587,8 @@ impl Model {
             | Model::Gemini25Flash
             | Model::Gemini25Pro
             | Model::Gemini3Pro
-            | Model::Gemini3Flash => Some(65_536),
+            | Model::Gemini3Flash
+            | Model::Gemini31Pro => Some(65_536),
             Model::Custom { .. } => None,
         }
     }
@@ -607,6 +614,9 @@ impl Model {
                 }
             }
             Self::Gemini3Flash => GoogleModelMode::Default,
+            Self::Gemini31Pro => GoogleModelMode::Thinking {
+                budget_tokens: None,
+            },
             Self::Custom { mode, .. } => *mode,
         }
     }