- Bump Codex provider defaults from gpt-5.4 to gpt-5.5 across all ModelConfigs - Update codexplan alias to resolve to gpt-5.5 - Add gpt-5.5 and gpt-5.5-mini to model picker with reasoning effort mappings - Add context window and max output token specs for gpt-5.5 family - Add gpt-5.5 entries to COPILOT_MODELS registry - Keep official OpenAI API preset at gpt-5.4 (API availability pending) - Update codexShim tests to expect gpt-5.5 from codexplan alias Co-authored-by: OpenClaude <openclaude@gitlawb.com>
206 lines
7.2 KiB
TypeScript
206 lines
7.2 KiB
TypeScript
import type { ModelName } from './model.js'
|
|
import type { APIProvider } from './providers.js'
|
|
|
|
export type ModelConfig = Record<APIProvider, ModelName>
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// OpenAI-compatible model mappings
|
|
// Maps Claude model tiers to sensible defaults for popular providers.
|
|
// Override with OPENAI_MODEL, ANTHROPIC_MODEL, or settings.model
|
|
// ---------------------------------------------------------------------------
|
|
export const OPENAI_MODEL_DEFAULTS = {
|
|
opus: 'gpt-4o', // best reasoning
|
|
sonnet: 'gpt-4o-mini', // balanced
|
|
haiku: 'gpt-4o-mini', // fast & cheap
|
|
} as const
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Gemini model mappings
|
|
// Maps Claude model tiers to Google Gemini equivalents.
|
|
// Override with GEMINI_MODEL env var.
|
|
// ---------------------------------------------------------------------------
|
|
export const GEMINI_MODEL_DEFAULTS = {
|
|
opus: 'gemini-2.5-pro', // most capable
|
|
sonnet: 'gemini-2.0-flash', // balanced
|
|
haiku: 'gemini-2.0-flash-lite', // fast & cheap
|
|
} as const
|
|
|
|
// @[MODEL LAUNCH]: Add a new CLAUDE_*_CONFIG constant here. Double check the correct model strings
|
|
// here since the pattern may change.
|
|
|
|
export const CLAUDE_3_7_SONNET_CONFIG = {
|
|
firstParty: 'claude-3-7-sonnet-20250219',
|
|
bedrock: 'us.anthropic.claude-3-7-sonnet-20250219-v1:0',
|
|
vertex: 'claude-3-7-sonnet@20250219',
|
|
foundry: 'claude-3-7-sonnet',
|
|
openai: 'gpt-4o-mini',
|
|
gemini: 'gemini-2.0-flash',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_3_5_V2_SONNET_CONFIG = {
|
|
firstParty: 'claude-3-5-sonnet-20241022',
|
|
bedrock: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
|
|
vertex: 'claude-3-5-sonnet-v2@20241022',
|
|
foundry: 'claude-3-5-sonnet',
|
|
openai: 'gpt-4o-mini',
|
|
gemini: 'gemini-2.0-flash',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_3_5_HAIKU_CONFIG = {
|
|
firstParty: 'claude-3-5-haiku-20241022',
|
|
bedrock: 'us.anthropic.claude-3-5-haiku-20241022-v1:0',
|
|
vertex: 'claude-3-5-haiku@20241022',
|
|
foundry: 'claude-3-5-haiku',
|
|
openai: 'gpt-4o-mini',
|
|
gemini: 'gemini-2.0-flash-lite',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_HAIKU_4_5_CONFIG = {
|
|
firstParty: 'claude-haiku-4-5-20251001',
|
|
bedrock: 'us.anthropic.claude-haiku-4-5-20251001-v1:0',
|
|
vertex: 'claude-haiku-4-5@20251001',
|
|
foundry: 'claude-haiku-4-5',
|
|
openai: 'gpt-4o-mini',
|
|
gemini: 'gemini-2.0-flash-lite',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_SONNET_4_CONFIG = {
|
|
firstParty: 'claude-sonnet-4-20250514',
|
|
bedrock: 'us.anthropic.claude-sonnet-4-20250514-v1:0',
|
|
vertex: 'claude-sonnet-4@20250514',
|
|
foundry: 'claude-sonnet-4',
|
|
openai: 'gpt-4o-mini',
|
|
gemini: 'gemini-2.0-flash',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_SONNET_4_5_CONFIG = {
|
|
firstParty: 'claude-sonnet-4-5-20250929',
|
|
bedrock: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
vertex: 'claude-sonnet-4-5@20250929',
|
|
foundry: 'claude-sonnet-4-5',
|
|
openai: 'gpt-4o',
|
|
gemini: 'gemini-2.0-flash',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_OPUS_4_CONFIG = {
|
|
firstParty: 'claude-opus-4-20250514',
|
|
bedrock: 'us.anthropic.claude-opus-4-20250514-v1:0',
|
|
vertex: 'claude-opus-4@20250514',
|
|
foundry: 'claude-opus-4',
|
|
openai: 'gpt-4o',
|
|
gemini: 'gemini-2.5-pro',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_OPUS_4_1_CONFIG = {
|
|
firstParty: 'claude-opus-4-1-20250805',
|
|
bedrock: 'us.anthropic.claude-opus-4-1-20250805-v1:0',
|
|
vertex: 'claude-opus-4-1@20250805',
|
|
foundry: 'claude-opus-4-1',
|
|
openai: 'gpt-4o',
|
|
gemini: 'gemini-2.5-pro',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_OPUS_4_5_CONFIG = {
|
|
firstParty: 'claude-opus-4-5-20251101',
|
|
bedrock: 'us.anthropic.claude-opus-4-5-20251101-v1:0',
|
|
vertex: 'claude-opus-4-5@20251101',
|
|
foundry: 'claude-opus-4-5',
|
|
openai: 'gpt-4o',
|
|
gemini: 'gemini-2.5-pro',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_OPUS_4_6_CONFIG = {
|
|
firstParty: 'claude-opus-4-6',
|
|
bedrock: 'us.anthropic.claude-opus-4-6-v1',
|
|
vertex: 'claude-opus-4-6',
|
|
foundry: 'claude-opus-4-6',
|
|
openai: 'gpt-4o',
|
|
gemini: 'gemini-2.5-pro',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
export const CLAUDE_SONNET_4_6_CONFIG = {
|
|
firstParty: 'claude-sonnet-4-6',
|
|
bedrock: 'us.anthropic.claude-sonnet-4-6',
|
|
vertex: 'claude-sonnet-4-6',
|
|
foundry: 'claude-sonnet-4-6',
|
|
openai: 'gpt-4o',
|
|
gemini: 'gemini-2.0-flash',
|
|
github: 'github:copilot',
|
|
codex: 'gpt-5.5',
|
|
'nvidia-nim': 'nvidia/llama-3.1-nemotron-70b-instruct',
|
|
minimax: 'MiniMax-M2.5',
|
|
} as const satisfies ModelConfig
|
|
|
|
// @[MODEL LAUNCH]: Register the new config here.
|
|
export const ALL_MODEL_CONFIGS = {
|
|
haiku35: CLAUDE_3_5_HAIKU_CONFIG,
|
|
haiku45: CLAUDE_HAIKU_4_5_CONFIG,
|
|
sonnet35: CLAUDE_3_5_V2_SONNET_CONFIG,
|
|
sonnet37: CLAUDE_3_7_SONNET_CONFIG,
|
|
sonnet40: CLAUDE_SONNET_4_CONFIG,
|
|
sonnet45: CLAUDE_SONNET_4_5_CONFIG,
|
|
sonnet46: CLAUDE_SONNET_4_6_CONFIG,
|
|
opus40: CLAUDE_OPUS_4_CONFIG,
|
|
opus41: CLAUDE_OPUS_4_1_CONFIG,
|
|
opus45: CLAUDE_OPUS_4_5_CONFIG,
|
|
opus46: CLAUDE_OPUS_4_6_CONFIG,
|
|
} as const satisfies Record<string, ModelConfig>
|
|
|
|
export type ModelKey = keyof typeof ALL_MODEL_CONFIGS
|
|
|
|
/** Union of all canonical first-party model IDs, e.g. 'claude-opus-4-6' | 'claude-sonnet-4-5-20250929' | … */
|
|
export type CanonicalModelId =
|
|
(typeof ALL_MODEL_CONFIGS)[ModelKey]['firstParty']
|
|
|
|
/** Runtime list of canonical model IDs — used by comprehensiveness tests. */
|
|
export const CANONICAL_MODEL_IDS = Object.values(ALL_MODEL_CONFIGS).map(
|
|
c => c.firstParty,
|
|
) as [CanonicalModelId, ...CanonicalModelId[]]
|
|
|
|
/** Map canonical ID → internal short key. Used to apply settings-based modelOverrides. */
|
|
export const CANONICAL_ID_TO_KEY: Record<CanonicalModelId, ModelKey> =
|
|
Object.fromEntries(
|
|
(Object.entries(ALL_MODEL_CONFIGS) as [ModelKey, ModelConfig][]).map(
|
|
([key, cfg]) => [cfg.firstParty, key],
|
|
),
|
|
) as Record<CanonicalModelId, ModelKey> |