diff --git a/src/shared/utils/modelParser.ts b/src/shared/utils/modelParser.ts index 8d9fbf37..edb58940 100644 --- a/src/shared/utils/modelParser.ts +++ b/src/shared/utils/modelParser.ts @@ -28,6 +28,7 @@ const KNOWN_FAMILIES: KnownModelFamily[] = ['sonnet', 'opus', 'haiku']; * * Supported formats: * - New format: claude-{family}-{major}-{minor}-{date} (e.g., "claude-sonnet-4-5-20250929") + * - New format short: claude-{family}-{major} (e.g., "claude-sonnet-5") * - Old format: claude-{major}-{family}-{date} (e.g., "claude-3-opus-20240229") * - Old format with minor: claude-{major}-{minor}-{family}-{date} (e.g., "claude-3-5-sonnet-20241022") */ @@ -87,12 +88,9 @@ export function parseModelString(model: string | undefined): ModelInfo | null { // Determine format based on family position if (familyIndex === 1) { - // New format: claude-{family}-{major}-{minor}-{date} + // New format: claude-{family}-{major}[-{minor}][-{date}] // e.g., claude-sonnet-4-5-20250929 -> ["claude", "sonnet", "4", "5", "20250929"] - if (parts.length < 4) { - return null; - } - + // e.g., claude-sonnet-5 -> ["claude", "sonnet", "5"] majorVersion = parseInt(parts[2], 10); if (isNaN(majorVersion)) { return null; diff --git a/test/shared/utils/modelParser.test.ts b/test/shared/utils/modelParser.test.ts index fae2532c..427a5d14 100644 --- a/test/shared/utils/modelParser.test.ts +++ b/test/shared/utils/modelParser.test.ts @@ -102,6 +102,20 @@ describe('modelParser', () => { }); }); + it('should parse short format without minor or date: claude-sonnet-5', () => { + const result = parseModelString('claude-sonnet-5'); + expect(result).toEqual({ + name: 'sonnet5', + family: 'sonnet', + majorVersion: 5, + minorVersion: null, + }); + }); + + it('should return null for invalid short format with non-numeric version', () => { + expect(parseModelString('claude-sonnet-x')).toBeNull(); + }); + it('should return null for invalid format with only two parts', () => { expect(parseModelString('claude-sonnet')).toBeNull(); });