@@ -29,6 +29,16 @@ import {
2929 convertOpenAIToolChoiceToAnthropic ,
3030} from "../../core/prompts/tools/native-tools/converters"
3131
32+ // Pre-sorted list of known Anthropic model IDs (lowercased) by length (descending) for case-insensitive substring matching.
33+ const ANTHROPIC_MODEL_IDS_SORTED_LOWER = ( Object . keys ( anthropicModels ) as AnthropicModelId [ ] )
34+ . map ( ( id ) => id . toLowerCase ( ) )
35+ . sort ( ( a , b ) => b . length - a . length ) as string [ ]
36+
37+ // Original-case mapping: lowercase key → original AnthropicModelId for lookup.
38+ const ANTHROPIC_MODEL_ID_LOWER_TO_ORIGINAL = Object . fromEntries (
39+ ( Object . keys ( anthropicModels ) as AnthropicModelId [ ] ) . map ( ( id ) => [ id . toLowerCase ( ) , id ] ) ,
40+ )
41+
3242export class AnthropicHandler extends BaseProvider implements SingleCompletionHandler {
3343 private options : ApiHandlerOptions
3444 private client : Anthropic
@@ -355,11 +365,15 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa
355365
356366 // Guesses capabilities for an unrecognized model ID via known-family substring match.
357367 private guessModelInfoFromId ( modelId : string ) : ModelInfo {
358- const matchedId = ( Object . keys ( anthropicModels ) as AnthropicModelId [ ] )
359- . sort ( ( a , b ) => b . length - a . length )
360- . find ( ( knownId ) => modelId . includes ( knownId ) )
368+ const lowerModelId = modelId . toLowerCase ( )
369+ const matchedLower = ANTHROPIC_MODEL_IDS_SORTED_LOWER . find ( ( knownId ) => lowerModelId . includes ( knownId ) )
370+
371+ if ( ! matchedLower ) {
372+ return anthropicModels [ anthropicDefaultModelId ]
373+ }
361374
362- return matchedId ? anthropicModels [ matchedId ] : anthropicModels [ anthropicDefaultModelId ]
375+ const originalId = ANTHROPIC_MODEL_ID_LOWER_TO_ORIGINAL [ matchedLower ] as AnthropicModelId
376+ return anthropicModels [ originalId ]
363377 }
364378
365379 getModel ( ) {
0 commit comments