source dump of claude code
at main 50 lines 1.5 kB view raw
1import memoize from 'lodash-es/memoize.js' 2import { getAPIProvider } from './providers.js' 3 4export type ModelCapabilityOverride = 5 | 'effort' 6 | 'max_effort' 7 | 'thinking' 8 | 'adaptive_thinking' 9 | 'interleaved_thinking' 10 11const TIERS = [ 12 { 13 modelEnvVar: 'ANTHROPIC_DEFAULT_OPUS_MODEL', 14 capabilitiesEnvVar: 'ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES', 15 }, 16 { 17 modelEnvVar: 'ANTHROPIC_DEFAULT_SONNET_MODEL', 18 capabilitiesEnvVar: 'ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES', 19 }, 20 { 21 modelEnvVar: 'ANTHROPIC_DEFAULT_HAIKU_MODEL', 22 capabilitiesEnvVar: 'ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES', 23 }, 24] as const 25 26/** 27 * Check whether a 3p model capability override is set for a model that matches one of 28 * the pinned ANTHROPIC_DEFAULT_*_MODEL env vars. 29 */ 30export const get3PModelCapabilityOverride = memoize( 31 (model: string, capability: ModelCapabilityOverride): boolean | undefined => { 32 if (getAPIProvider() === 'firstParty') { 33 return undefined 34 } 35 const m = model.toLowerCase() 36 for (const tier of TIERS) { 37 const pinned = process.env[tier.modelEnvVar] 38 const capabilities = process.env[tier.capabilitiesEnvVar] 39 if (!pinned || capabilities === undefined) continue 40 if (m !== pinned.toLowerCase()) continue 41 return capabilities 42 .toLowerCase() 43 .split(',') 44 .map(s => s.trim()) 45 .includes(capability) 46 } 47 return undefined 48 }, 49 (model, capability) => `${model.toLowerCase()}:${capability}`, 50)