diff --git a/packages/pi-ai/src/models.generated.ts b/packages/pi-ai/src/models.generated.ts index 63cf92d3d..02fd5c121 100644 --- a/packages/pi-ai/src/models.generated.ts +++ b/packages/pi-ai/src/models.generated.ts @@ -1724,6 +1724,23 @@ export const MODELS = { contextWindow: 200000, maxTokens: 128000, } satisfies Model<"anthropic-messages">, + "claude-opus-4-6[1m]": { + id: "claude-opus-4-6[1m]", + name: "Claude Opus 4.6 (1M)", + api: "anthropic-messages", + provider: "anthropic", + baseUrl: "https://api.anthropic.com", + reasoning: true, + input: ["text", "image"], + cost: { + input: 5, + output: 25, + cacheRead: 0.5, + cacheWrite: 6.25, + }, + contextWindow: 1000000, + maxTokens: 128000, + } satisfies Model<"anthropic-messages">, "claude-sonnet-4-0": { id: "claude-sonnet-4-0", name: "Claude Sonnet 4 (latest)", diff --git a/packages/pi-coding-agent/src/core/model-resolver.ts b/packages/pi-coding-agent/src/core/model-resolver.ts index e05cb9429..a09ff85cd 100644 --- a/packages/pi-coding-agent/src/core/model-resolver.ts +++ b/packages/pi-coding-agent/src/core/model-resolver.ts @@ -214,6 +214,18 @@ export async function resolveModelScope(patterns: string[], modelRegistry: Model const scopedModels: ScopedModel[] = []; for (const pattern of patterns) { + // Try exact match first (handles model IDs containing glob chars like [1m]) + const exactResult = parseModelPattern(pattern, availableModels); + if (exactResult.model) { + if (exactResult.warning) { + console.warn(chalk.yellow(`Warning: ${exactResult.warning}`)); + } + if (!scopedModels.find((sm) => modelsAreEqual(sm.model, exactResult.model!))) { + scopedModels.push({ model: exactResult.model, thinkingLevel: exactResult.thinkingLevel }); + } + continue; + } + // Check if pattern contains glob characters if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) { // Extract optional thinking level suffix (e.g., "provider/*:high")