- Copy @ant/model-provider package (Gemini/Grok/OpenAI converters) - Add sideQueryViaGemini adapter for third-party provider routing - Update prompts/claude/messages to clarify SearchExtraTools/ExecuteExtraTool - Fix paste detection threshold for non-bracketed-paste terminals - Strengthen Plan mode: mandatory FileRead, Explore agent guidance, exit attachment - Add missing packages/tsconfig.json Upstream commits:7b52054f,e33b17bd,a05242ce,b67e9f9dBuild: 562 files, bun test: 3328 pass / 4 fail (pre-existing)
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
/**
|
|
* Default mapping from Anthropic model names to OpenAI model names.
|
|
* Used only when ANTHROPIC_DEFAULT_*_MODEL env vars are not set.
|
|
*/
|
|
const DEFAULT_MODEL_MAP: Record<string, string> = {
|
|
'claude-sonnet-4-20250514': 'gpt-4o',
|
|
'claude-sonnet-4-5-20250929': 'gpt-4o',
|
|
'claude-sonnet-4-6': 'gpt-4o',
|
|
'claude-opus-4-20250514': 'o3',
|
|
'claude-opus-4-1-20250805': 'o3',
|
|
'claude-opus-4-5-20251101': 'o3',
|
|
'claude-opus-4-6': 'o3',
|
|
'claude-haiku-4-5-20251001': 'gpt-4o-mini',
|
|
'claude-3-5-haiku-20241022': 'gpt-4o-mini',
|
|
'claude-3-7-sonnet-20250219': 'gpt-4o',
|
|
'claude-3-5-sonnet-20241022': 'gpt-4o',
|
|
}
|
|
|
|
function getModelFamily(model: string): 'haiku' | 'sonnet' | 'opus' | null {
|
|
if (/haiku/i.test(model)) return 'haiku'
|
|
if (/opus/i.test(model)) return 'opus'
|
|
if (/sonnet/i.test(model)) return 'sonnet'
|
|
return null
|
|
}
|
|
|
|
/**
|
|
* Resolve the OpenAI model name for a given Anthropic model.
|
|
*
|
|
* Priority:
|
|
* 1. OPENAI_MODEL env var (override all)
|
|
* 2. OPENAI_DEFAULT_{FAMILY}_MODEL env var (e.g. OPENAI_DEFAULT_SONNET_MODEL)
|
|
* 3. ANTHROPIC_DEFAULT_{FAMILY}_MODEL env var (backward compatibility)
|
|
* 4. DEFAULT_MODEL_MAP lookup
|
|
* 5. Pass through original model name
|
|
*/
|
|
export function resolveOpenAIModel(anthropicModel: string): string {
|
|
if (process.env.OPENAI_MODEL) {
|
|
return process.env.OPENAI_MODEL
|
|
}
|
|
|
|
const cleanModel = anthropicModel.replace(/\[1m\]$/, '')
|
|
|
|
const family = getModelFamily(cleanModel)
|
|
if (family) {
|
|
const openaiEnvVar = `OPENAI_DEFAULT_${family.toUpperCase()}_MODEL`
|
|
const openaiOverride = process.env[openaiEnvVar]
|
|
if (openaiOverride) return openaiOverride
|
|
|
|
const anthropicEnvVar = `ANTHROPIC_DEFAULT_${family.toUpperCase()}_MODEL`
|
|
const anthropicOverride = process.env[anthropicEnvVar]
|
|
if (anthropicOverride) return anthropicOverride
|
|
}
|
|
|
|
return DEFAULT_MODEL_MAP[cleanModel] ?? cleanModel
|
|
}
|