Commit 828b5f1c3132

Vincent Demeester <vincent@sbr.pm>
2026-02-23 14:33:36
feat(pi): added Claude Sonnet 4.6 on Vertex AI
Added Sonnet 4.6 model definition to vertex-claude extension and switched default, fast-work modes, subagents, and pir script from Sonnet 4.5 to 4.6. Updated display name mappings and quota tracking in UI extensions. Fixed a pre-existing type error for image media_type.
1 parent 05d5057
dots/pi/agent/agents/oracle.md
@@ -2,7 +2,7 @@
 name: oracle
 description: Deep analysis, debugging, and architecture decisions
 tools: read, grep, find, ls, bash
-model: claude-sonnet-4-5
+model: claude-sonnet-4-6
 ---
 
 You are a deep analysis specialist. You investigate complex problems, debug tricky issues, and provide architecture guidance.
dots/pi/agent/agents/planner.md
@@ -2,7 +2,7 @@
 name: planner
 description: Creates implementation plans from context and requirements
 tools: read, grep, find, ls
-model: claude-sonnet-4-5
+model: claude-sonnet-4-6
 ---
 
 You are a planning specialist. You receive context (from a scout) and requirements, then produce a clear implementation plan.
dots/pi/agent/agents/reviewer.md
@@ -2,7 +2,7 @@
 name: reviewer
 description: Code review specialist for quality and security analysis
 tools: read, grep, find, ls, bash
-model: claude-sonnet-4-5
+model: claude-sonnet-4-6
 ---
 
 You are a senior code reviewer. Analyze code for quality, security, and maintainability.
dots/pi/agent/agents/worker.md
@@ -1,7 +1,7 @@
 ---
 name: worker
 description: General-purpose subagent with full capabilities, isolated context
-model: claude-sonnet-4-5
+model: claude-sonnet-4-6
 ---
 
 You are a worker agent with full capabilities. You operate in an isolated context window to handle delegated tasks without polluting the main conversation.
dots/pi/agent/extensions/vertex-claude/index.ts
@@ -90,6 +90,15 @@ const VERTEX_CLAUDE_MODELS = [
 		contextWindow: 200000,
 		maxTokens: 32000,
 	},
+	{
+		id: "claude-sonnet-4-6",
+		name: "Claude Sonnet 4.6 (Vertex)",
+		reasoning: true,
+		input: ["text", "image"] as ("text" | "image")[],
+		cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
+		contextWindow: 200000,
+		maxTokens: 64000,
+	},
 	{
 		id: "claude-sonnet-4-5@20250929",
 		name: "Claude Sonnet 4.5 (Vertex)",
@@ -222,7 +231,7 @@ export function convertMessages(messages: Message[], model: Model<Api>): any[] {
 						? { type: "text" as const, text: sanitizeSurrogates(item.text) }
 						: {
 								type: "image" as const,
-								source: { type: "base64" as const, media_type: item.mimeType, data: item.data },
+								source: { type: "base64" as const, media_type: item.mimeType as "image/jpeg" | "image/png" | "image/gif" | "image/webp", data: item.data },
 							},
 				);
 				// Filter out images if model doesn't support them
dots/pi/agent/extensions/vertex-claude/README.md
@@ -46,6 +46,7 @@ piv() {
 | `claude-opus-4-5@20251101` | 200K | 32K |
 | `claude-opus-4-1@20250805` | 200K | 32K |
 | `claude-opus-4@20250514` | 200K | 32K |
+| `claude-sonnet-4-6` | 200K | 64K |
 | `claude-sonnet-4-5@20250929` | 200K | 64K |
 | `claude-sonnet-4@20250514` | 200K | 64K |
 | `claude-3-7-sonnet@20250219` | 200K | 64K |
dots/pi/agent/extensions/custom-footer.ts
@@ -124,6 +124,7 @@ function getShortModelName(modelId: string): string {
 	const baseId = modelId.split("@")[0];
 	
 	const shortNames: Record<string, string> = {
+		"claude-sonnet-4-6": "sonnet-4.6",
 		"claude-sonnet-4-5": "sonnet-4.5",
 		"claude-sonnet-4-5-20250514": "sonnet-4.5",
 		"claude-sonnet-4": "sonnet-4",
dots/pi/agent/extensions/terminal-status.ts
@@ -79,6 +79,7 @@ function getGitBranch(): string {
 function getShortModelName(modelId: string): string {
   // Map common model names to short versions
   const shortNames: Record<string, string> = {
+    "claude-sonnet-4-6": "sonnet",
     "claude-sonnet-4-5-20250514": "sonnet",
     "claude-sonnet-4-20250514": "sonnet",
     "claude-3-5-sonnet-20241022": "sonnet",
dots/pi/agent/extensions/usage-bar.ts
@@ -566,6 +566,8 @@ async function fetchAntigravityUsage(modelRegistry: any): Promise<UsageSnapshot>
 		const windows: RateWindow[] = [];
 
 		const claudeOrGptOss = getQuotaInfo([
+			"claude-sonnet-4-6",
+			"claude-sonnet-4-6-thinking",
 			"claude-sonnet-4-5",
 			"claude-sonnet-4-5-thinking",
 			"claude-opus-4-5-thinking",
dots/pi/agent/modes.json
@@ -4,12 +4,12 @@
   "modes": {
     "default": {
       "provider": "google-vertex-claude",
-      "modelId": "claude-sonnet-4-5@20250929",
+      "modelId": "claude-sonnet-4-6",
       "thinkingLevel": "minimal"
     },
     "fast-work": {
       "provider": "google-vertex-claude",
-      "modelId": "claude-sonnet-4-5@20250929",
+      "modelId": "claude-sonnet-4-6",
       "thinkingLevel": "off",
       "color": "#2e8b57"
     },
pkgs/my/scripts/bin/pir
@@ -1,10 +1,10 @@
 #!/usr/bin/env bash
 # Pi coding agent with Vertex AI Claude provider
 # Usage: pir [args...]
-# Uses google-vertex-claude provider with claude-sonnet-4-5
+# Uses google-vertex-claude provider with claude-sonnet-4-6
 
 export GOOGLE_CLOUD_PROJECT=itpc-gcp-pnd-pe-eng-claude
 export GOOGLE_CLOUD_LOCATION=us-east5
 export GEMINI_API_KEY=$(passage show redhat/google/osp/vdeemest-api-key)
 
-exec pi --provider google-vertex-claude --model claude-sonnet-4-5@20250929 "$@"
+exec pi --provider google-vertex-claude --model claude-sonnet-4-6 "$@"