From 8b73cd45c059ffaf7f6d2959ce77300b0ca9dbf6 Mon Sep 17 00:00:00 2001 From: Kumar Abhirup <0xkumareth@gmail.com> Date: Fri, 20 Mar 2026 13:13:40 -0700 Subject: [PATCH] feat(gateway): default to Claude Opus 4.6 as recommended model (#112) Align extension fallback list with CLI so empty model selection resolves to Claude Opus 4.6 instead of GPT-5.4. --- extensions/dench-ai-gateway/models.ts | 54 +++++++++++++++------------ 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/extensions/dench-ai-gateway/models.ts b/extensions/dench-ai-gateway/models.ts index c8ad4b3bd42..02e087ef9d5 100644 --- a/extensions/dench-ai-gateway/models.ts +++ b/extensions/dench-ai-gateway/models.ts @@ -118,30 +118,9 @@ export function buildDenchGatewayCatalogUrl(gatewayUrl: string | undefined): str return `${normalizeDenchGatewayUrl(gatewayUrl)}/v1/public/models`; } +export const RECOMMENDED_DENCH_CLOUD_MODEL_ID = "claude-opus-4.6"; + export const FALLBACK_DENCH_CLOUD_MODELS: DenchCloudCatalogModel[] = [ - { - id: "gpt-5.4", - stableId: "gpt-5.4", - displayName: "GPT-5.4", - provider: "openai", - transportProvider: "openai", - api: "openai-completions", - input: ["text", "image"], - reasoning: false, - contextWindow: 128000, - maxTokens: 128000, - supportsStreaming: true, - supportsImages: true, - supportsResponses: true, - supportsReasoning: false, - cost: { - input: markupCost(2.5), - output: markupCost(15), - cacheRead: 0, - cacheWrite: 0, - marginPercent: DEFAULT_DENCH_CLOUD_MARGIN_PERCENT, - }, - }, { id: "claude-opus-4.6", stableId: "anthropic.claude-opus-4-6-v1", @@ -165,6 +144,29 @@ export const FALLBACK_DENCH_CLOUD_MODELS: DenchCloudCatalogModel[] = [ marginPercent: DEFAULT_DENCH_CLOUD_MARGIN_PERCENT, }, }, + { + id: "gpt-5.4", + stableId: "gpt-5.4", + displayName: "GPT-5.4", + provider: "openai", + transportProvider: "openai", + api: "openai-completions", + input: ["text", "image"], + reasoning: false, + contextWindow: 128000, + maxTokens: 128000, + supportsStreaming: true, + supportsImages: true, + supportsResponses: true, + supportsReasoning: false, + cost: { + input: markupCost(2.5), + output: markupCost(15), + cacheRead: 0, + cacheWrite: 0, + marginPercent: DEFAULT_DENCH_CLOUD_MARGIN_PERCENT, + }, + }, { id: "claude-sonnet-4.6", stableId: "anthropic.claude-sonnet-4-6-v1", @@ -306,7 +308,10 @@ export function resolveDenchCloudModel( ): DenchCloudCatalogModel | undefined { const normalized = requestedId?.trim(); if (!normalized) { - return models[0]; + return ( + models.find((model) => model.id === RECOMMENDED_DENCH_CLOUD_MODEL_ID) || + models[0] + ); } return models.find((model) => model.id === normalized || model.stableId === normalized); @@ -315,5 +320,6 @@ export function resolveDenchCloudModel( export function formatDenchCloudModelHint(model: DenchCloudCatalogModel): string { const parts: string[] = [model.provider]; if (model.reasoning) parts.push("reasoning"); + if (model.id === RECOMMENDED_DENCH_CLOUD_MODEL_ID) parts.push("recommended"); return parts.join(" ยท "); }