feat(vertexai): add `gemini-3.1-*` and `claude-*-4.6` (#198)

Ivan De Marino created

Adds the following models to the Vertex AI provider config:
- `gemini-3.1-pro-preview`
- `gemini-3.1-pro-preview-customtools`
- `claude-sonnet-4-6`
- `claude-sonnet-4-5-20250929`
- `claude-opus-4-6`
- `claude-opus-4-5-20251101` (renamed)
- `claude-haiku-4-5-20251001` (renamed)

The definition is essentially cut&pasted from the sibling `gemini.json` and `anthropic.json`.

This was tested in local setup against a working VertexAI setup.

Change summary

internal/providers/configs/vertexai.json | 111 +++++++++++++++++++------
1 file changed, 85 insertions(+), 26 deletions(-)

Detailed changes

internal/providers/configs/vertexai.json 🔗

@@ -4,32 +4,63 @@
   "type": "google-vertex",
   "api_key": "",
   "api_endpoint": "",
-  "default_large_model_id": "gemini-2.5-pro",
-  "default_small_model_id": "gemini-2.5-flash",
+  "default_large_model_id": "gemini-3.1-pro-preview",
+  "default_small_model_id": "gemini-3-flash-preview",
   "models": [
+    {
+      "id": "gemini-3.1-pro-preview",
+      "name": "Gemini 3.1 Pro (Regular)",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 12,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.2,
+      "context_window": 1048576,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "reasoning_levels": ["low", "medium", "high"],
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "gemini-3.1-pro-preview-customtools",
+      "name": "Gemini 3.1 Pro (Optimized for Coding Agents)",
+      "cost_per_1m_in": 2,
+      "cost_per_1m_out": 12,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.2,
+      "context_window": 1048576,
+      "default_max_tokens": 64000,
+      "can_reason": true,
+      "reasoning_levels": ["low", "medium", "high"],
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
     {
       "id": "gemini-3-pro-preview",
-      "name": "Gemini 3 Pro (Preview)",
+      "name": "Gemini 3 Pro",
       "cost_per_1m_in": 2,
       "cost_per_1m_out": 12,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0.2,
       "context_window": 1048576,
-      "default_max_tokens": 65536,
+      "default_max_tokens": 64000,
       "can_reason": true,
-      "has_reasoning_efforts": false,
+      "reasoning_levels": ["low", "high"],
+      "default_reasoning_efforts": "high",
       "supports_attachments": true
     },
     {
       "id": "gemini-3-flash-preview",
-      "name": "Gemini 3 Flash (Preview)",
+      "name": "Gemini 3 Flash",
       "cost_per_1m_in": 0.5,
       "cost_per_1m_out": 3,
       "cost_per_1m_in_cached": 0,
       "cost_per_1m_out_cached": 0.05,
       "context_window": 1048576,
-      "default_max_tokens": 65536,
+      "default_max_tokens": 50000,
       "can_reason": true,
+      "reasoning_levels": ["minimal", "low", "medium", "high"],
+      "default_reasoning_efforts": "minimal",
       "supports_attachments": true
     },
     {
@@ -37,8 +68,8 @@
       "name": "Gemini 2.5 Pro",
       "cost_per_1m_in": 1.25,
       "cost_per_1m_out": 10,
-      "cost_per_1m_in_cached": 1.625,
-      "cost_per_1m_out_cached": 0.31,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.125,
       "context_window": 1048576,
       "default_max_tokens": 50000,
       "can_reason": true,
@@ -49,27 +80,67 @@
       "name": "Gemini 2.5 Flash",
       "cost_per_1m_in": 0.3,
       "cost_per_1m_out": 2.5,
-      "cost_per_1m_in_cached": 0.3833,
-      "cost_per_1m_out_cached": 0.075,
+      "cost_per_1m_in_cached": 0,
+      "cost_per_1m_out_cached": 0.03,
       "context_window": 1048576,
       "default_max_tokens": 50000,
       "can_reason": true,
       "supports_attachments": true
     },
     {
-      "id": "claude-opus-4-5@20251101",
+      "id": "claude-sonnet-4-6",
+      "name": "Claude Sonnet 4.6",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "reasoning_levels": ["low", "medium", "high", "max"],
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-sonnet-4-5-20250929",
+      "name": "Claude Sonnet 4.5",
+      "cost_per_1m_in": 3,
+      "cost_per_1m_out": 15,
+      "cost_per_1m_in_cached": 3.75,
+      "cost_per_1m_out_cached": 0.3,
+      "context_window": 200000,
+      "default_max_tokens": 50000,
+      "can_reason": true,
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-opus-4-6",
+      "name": "Claude Opus 4.6",
+      "cost_per_1m_in": 5,
+      "cost_per_1m_out": 25,
+      "cost_per_1m_in_cached": 6.25,
+      "cost_per_1m_out_cached": 0.50,
+      "context_window": 200000,
+      "default_max_tokens": 126000,
+      "can_reason": true,
+      "reasoning_levels": ["low", "medium", "high", "max"],
+      "default_reasoning_efforts": "medium",
+      "supports_attachments": true
+    },
+    {
+      "id": "claude-opus-4-5-20251101",
       "name": "Claude Opus 4.5",
       "cost_per_1m_in": 5,
       "cost_per_1m_out": 25,
       "cost_per_1m_in_cached": 6.25,
       "cost_per_1m_out_cached": 0.50,
       "context_window": 200000,
-      "default_max_tokens": 64000,
+      "default_max_tokens": 50000,
       "can_reason": true,
       "supports_attachments": true
     },
     {
-      "id": "claude-haiku-4-5@20251001",
+      "id": "claude-haiku-4-5-20251001",
       "name": "Claude 4.5 Haiku",
       "cost_per_1m_in": 1,
       "cost_per_1m_out": 5,
@@ -80,18 +151,6 @@
       "can_reason": true,
       "has_reasoning_efforts": false,
       "supports_attachments": true
-    },
-    {
-      "id": "claude-sonnet-4-5@20250929",
-      "name": "Claude Sonnet 4.5",
-      "cost_per_1m_in": 3,
-      "cost_per_1m_out": 15,
-      "cost_per_1m_in_cached": 3.75,
-      "cost_per_1m_out_cached": 0.3,
-      "context_window": 200000,
-      "default_max_tokens": 50000,
-      "can_reason": true,
-      "supports_attachments": true
     }
   ]
 }