diff --git a/tools/ui/src/lib/constants/model-id.ts b/tools/ui/src/lib/constants/model-id.ts index ab7932240e..4108a21321 100644 --- a/tools/ui/src/lib/constants/model-id.ts +++ b/tools/ui/src/lib/constants/model-id.ts @@ -24,8 +24,10 @@ export const MODEL_CUSTOM_QUANTIZATION_PREFIX_RE = /^UD$/i; /** * Matches a parameter-count segment, e.g. `7B`, `1.5b`, `120M`. + * The optional leading `E` covers effective-parameter sizes, e.g. Gemma's + * `E2B`/`E4B` (MatFormer models sized by resident params). */ -export const MODEL_PARAMS_RE = /^\d+(\.\d+)?[BbMmKkTt]$/; +export const MODEL_PARAMS_RE = /^[Ee]?\d+(\.\d+)?[BbMmKkTt]$/; /** * Matches an activated-parameter-count segment, e.g. `A10B`, `a2.4b`. diff --git a/tools/ui/tests/unit/model-id-parser.test.ts b/tools/ui/tests/unit/model-id-parser.test.ts index 3c2937d356..3439d956eb 100644 --- a/tools/ui/tests/unit/model-id-parser.test.ts +++ b/tools/ui/tests/unit/model-id-parser.test.ts @@ -36,6 +36,11 @@ describe('parseModelId', () => { expect(parseModelId('model-100b:q4_k_m')).toMatchObject({ params: '100B' }); }); + it('extracts effective parameters correctly', () => { + expect(parseModelId('model-E4B-BF16')).toMatchObject({ params: 'E4B' }); + expect(parseModelId('model-e2b:q4_k_m')).toMatchObject({ params: 'E2B' }); + }); + it('extracts activated parameters correctly', () => { expect(parseModelId('model-100B-A10B-BF16')).toMatchObject({ activatedParams: 'A10B' }); expect(parseModelId('model-100B-A10B:Q4_K_M')).toMatchObject({ activatedParams: 'A10B' });