refactor(agents): dedupe anthropic 4.6 forward-compat resolver

This commit is contained in:
Peter Steinberger
2026-02-19 00:06:26 +00:00
parent 8b17a369e9
commit cb9e098554

View File

@@ -104,11 +104,17 @@ function resolveOpenAICodexGpt53FallbackModel(
} as Model<Api>); } as Model<Api>);
} }
function resolveAnthropicOpus46ForwardCompatModel( function resolveAnthropic46ForwardCompatModel(params: {
provider: string, provider: string;
modelId: string, modelId: string;
modelRegistry: ModelRegistry, modelRegistry: ModelRegistry;
): Model<Api> | undefined { dashModelId: string;
dotModelId: string;
dashTemplateId: string;
dotTemplateId: string;
fallbackTemplateIds: readonly string[];
}): Model<Api> | undefined {
const { provider, modelId, modelRegistry, dashModelId, dotModelId } = params;
const normalizedProvider = normalizeProviderId(provider); const normalizedProvider = normalizeProviderId(provider);
if (normalizedProvider !== "anthropic") { if (normalizedProvider !== "anthropic") {
return undefined; return undefined;
@@ -116,23 +122,23 @@ function resolveAnthropicOpus46ForwardCompatModel(
const trimmedModelId = modelId.trim(); const trimmedModelId = modelId.trim();
const lower = trimmedModelId.toLowerCase(); const lower = trimmedModelId.toLowerCase();
const isOpus46 = const is46Model =
lower === ANTHROPIC_OPUS_46_MODEL_ID || lower === dashModelId ||
lower === ANTHROPIC_OPUS_46_DOT_MODEL_ID || lower === dotModelId ||
lower.startsWith(`${ANTHROPIC_OPUS_46_MODEL_ID}-`) || lower.startsWith(`${dashModelId}-`) ||
lower.startsWith(`${ANTHROPIC_OPUS_46_DOT_MODEL_ID}-`); lower.startsWith(`${dotModelId}-`);
if (!isOpus46) { if (!is46Model) {
return undefined; return undefined;
} }
const templateIds: string[] = []; const templateIds: string[] = [];
if (lower.startsWith(ANTHROPIC_OPUS_46_MODEL_ID)) { if (lower.startsWith(dashModelId)) {
templateIds.push(lower.replace(ANTHROPIC_OPUS_46_MODEL_ID, "claude-opus-4-5")); templateIds.push(lower.replace(dashModelId, params.dashTemplateId));
} }
if (lower.startsWith(ANTHROPIC_OPUS_46_DOT_MODEL_ID)) { if (lower.startsWith(dotModelId)) {
templateIds.push(lower.replace(ANTHROPIC_OPUS_46_DOT_MODEL_ID, "claude-opus-4.5")); templateIds.push(lower.replace(dotModelId, params.dotTemplateId));
} }
templateIds.push(...ANTHROPIC_OPUS_TEMPLATE_MODEL_IDS); templateIds.push(...params.fallbackTemplateIds);
return cloneFirstTemplateModel({ return cloneFirstTemplateModel({
normalizedProvider, normalizedProvider,
@@ -142,41 +148,37 @@ function resolveAnthropicOpus46ForwardCompatModel(
}); });
} }
function resolveAnthropicOpus46ForwardCompatModel(
provider: string,
modelId: string,
modelRegistry: ModelRegistry,
): Model<Api> | undefined {
return resolveAnthropic46ForwardCompatModel({
provider,
modelId,
modelRegistry,
dashModelId: ANTHROPIC_OPUS_46_MODEL_ID,
dotModelId: ANTHROPIC_OPUS_46_DOT_MODEL_ID,
dashTemplateId: "claude-opus-4-5",
dotTemplateId: "claude-opus-4.5",
fallbackTemplateIds: ANTHROPIC_OPUS_TEMPLATE_MODEL_IDS,
});
}
function resolveAnthropicSonnet46ForwardCompatModel( function resolveAnthropicSonnet46ForwardCompatModel(
provider: string, provider: string,
modelId: string, modelId: string,
modelRegistry: ModelRegistry, modelRegistry: ModelRegistry,
): Model<Api> | undefined { ): Model<Api> | undefined {
const normalizedProvider = normalizeProviderId(provider); return resolveAnthropic46ForwardCompatModel({
if (normalizedProvider !== "anthropic") { provider,
return undefined; modelId,
}
const trimmedModelId = modelId.trim();
const lower = trimmedModelId.toLowerCase();
const isSonnet46 =
lower === ANTHROPIC_SONNET_46_MODEL_ID ||
lower === ANTHROPIC_SONNET_46_DOT_MODEL_ID ||
lower.startsWith(`${ANTHROPIC_SONNET_46_MODEL_ID}-`) ||
lower.startsWith(`${ANTHROPIC_SONNET_46_DOT_MODEL_ID}-`);
if (!isSonnet46) {
return undefined;
}
const templateIds: string[] = [];
if (lower.startsWith(ANTHROPIC_SONNET_46_MODEL_ID)) {
templateIds.push(lower.replace(ANTHROPIC_SONNET_46_MODEL_ID, "claude-sonnet-4-5"));
}
if (lower.startsWith(ANTHROPIC_SONNET_46_DOT_MODEL_ID)) {
templateIds.push(lower.replace(ANTHROPIC_SONNET_46_DOT_MODEL_ID, "claude-sonnet-4.5"));
}
templateIds.push(...ANTHROPIC_SONNET_TEMPLATE_MODEL_IDS);
return cloneFirstTemplateModel({
normalizedProvider,
trimmedModelId,
templateIds,
modelRegistry, modelRegistry,
dashModelId: ANTHROPIC_SONNET_46_MODEL_ID,
dotModelId: ANTHROPIC_SONNET_46_DOT_MODEL_ID,
dashTemplateId: "claude-sonnet-4-5",
dotTemplateId: "claude-sonnet-4.5",
fallbackTemplateIds: ANTHROPIC_SONNET_TEMPLATE_MODEL_IDS,
}); });
} }