import type { AdapterModel } from "@paperclipai/adapter-utils"; /** Anthropic direct API model IDs — used when Bedrock is not active. */ const DIRECT_MODELS: AdapterModel[] = [ { id: "claude-opus-4-6", label: "Claude Opus 4.6" }, { id: "claude-sonnet-4-6", label: "Claude Sonnet 4.6" }, { id: "claude-haiku-4-6", label: "Claude Haiku 4.6" }, { id: "claude-sonnet-4-5-20250929", label: "Claude Sonnet 4.5" }, { id: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5" }, ]; /** AWS Bedrock model IDs — region-qualified identifiers required by the Bedrock API. */ const BEDROCK_MODELS: AdapterModel[] = [ { id: "us.anthropic.claude-opus-4-6-v1", label: "Bedrock Opus 4.6" }, { id: "us.anthropic.claude-sonnet-4-5-20250929-v2:0", label: "Bedrock Sonnet 4.5" }, { id: "us.anthropic.claude-haiku-4-5-20251001-v1:0", label: "Bedrock Haiku 4.5" }, ]; function isBedrockEnv(): boolean { return ( process.env.CLAUDE_CODE_USE_BEDROCK === "1" || process.env.CLAUDE_CODE_USE_BEDROCK === "true" || (typeof process.env.ANTHROPIC_BEDROCK_BASE_URL === "string" && process.env.ANTHROPIC_BEDROCK_BASE_URL.trim().length > 0) ); } /** * Return the model list appropriate for the current auth mode. * When Bedrock env vars are detected, returns Bedrock-native model IDs; * otherwise returns standard Anthropic API model IDs. */ export async function listClaudeModels(): Promise { return isBedrockEnv() ? BEDROCK_MODELS : DIRECT_MODELS; } /** Check whether a model ID is a Bedrock-native identifier (not an Anthropic API short name). */ export function isBedrockModelId(model: string): boolean { return model.startsWith("us.anthropic.") || model.startsWith("arn:aws:bedrock:"); }