81
*/
82
export function tryParseClaudeModelId(modelId: string): ParsedClaudeModelId | undefined {
84
>
if (cache.has(cacheKey)) {
85
return cache.get(cacheKey);
86
}
88
>
const result = doParse(cacheKey);
89
>
cache.set(cacheKey, result);
90
>
return result;
91
>
}
92
93
const DATE_SUFFIX_RE = /^(?<base>.*)-(?<date>\d{8})$/;
94
95
>
function doParse(lower: string): ParsedClaudeModelId | undefined {
claudeModelId.ts
96
>
let dateSuffix = '';
97
>
let base = lower;
98
>
99
>
const dateMatch = DATE_SUFFIX_RE.exec(lower);
100
>
if (dateMatch?.groups) {
101
base = dateMatch.groups.base;
102
dateSuffix = dateMatch.groups.date;
103
}
105
>
// Pattern 1: claude-{name}-{major}-{minor}[-{mod}] (e.g. claude-opus-4-5, claude-opus-4-6-1m)
106
>
const p1 = base.match(/^claude-(?<name>\w+)-(?<major>\d+)-(?<minor>\d+)(?:-(?<mod>.+))?$/);
107
>
if (p1?.groups) {
108
return makeResult(p1.groups.name, p1.groups.major, p1.groups.minor, joinModifiers(p1.groups.mod, dateSuffix));
109
}