Files
nvfp4_gguf_quant/llama.cpp/tools/ui/tests/unit/model-sidecar-grammar.test.ts
T

129 lines
3.8 KiB
TypeScript

import { ModelAuxSidecar, ModelDraftSidecar, SidecarForm } from '$lib/enums';
import { HuggingFaceService } from '$lib/services/huggingface.service';
import { ModelsService } from '$lib/services/models.service';
import { sidecarFromTag } from '$lib/utils';
import { describe, expect, it } from 'vitest';
const { buildDownloadTag } = ModelsService;
const { extractQuantMeta } = HuggingFaceService;
// the sidecar filename grammar mirrors the server (common/download.cpp):
// the token must be lowercase, and it can sit at the start, between name
// segments, or at the end of the file name
describe('extractQuantMeta', () => {
it('parses the prefix form', () => {
expect(extractQuantMeta('mtp-Model-Q4_0.gguf')).toStrictEqual({
quant: 'Q4_0',
shared: false,
sidecar: ModelDraftSidecar.MTP,
sidecarForm: SidecarForm.PREFIX
});
});
it('parses the infix form', () => {
expect(extractQuantMeta('Model-mtp-Q4_0.gguf')).toStrictEqual({
quant: 'Q4_0',
shared: false,
sidecar: ModelDraftSidecar.MTP,
sidecarForm: SidecarForm.INFIX
});
});
it('parses the suffix form', () => {
expect(extractQuantMeta('gemma-4-E2B-it-BF16-mtp.gguf')).toStrictEqual({
quant: 'BF16',
shared: false,
sidecar: ModelDraftSidecar.MTP,
sidecarForm: SidecarForm.SUFFIX
});
});
it('parses an uppercase infix token', () => {
expect(extractQuantMeta('gemma-4-31B-it-MTP-BF16.gguf')).toStrictEqual({
quant: 'BF16',
shared: false,
sidecar: ModelDraftSidecar.MTP,
sidecarForm: SidecarForm.INFIX
});
});
it('parses an uppercase trailing token', () => {
expect(extractQuantMeta('gemma-4-E2B-it-BF16-MTP.gguf')).toStrictEqual({
quant: 'BF16',
shared: false,
sidecar: ModelDraftSidecar.MTP,
sidecarForm: SidecarForm.SUFFIX
});
});
it('parses a short-form sidecar with a bare quant', () => {
expect(extractQuantMeta('mmproj-F16.gguf')).toStrictEqual({
quant: 'F16',
shared: false,
sidecar: ModelAuxSidecar.MMPROJ,
sidecarForm: SidecarForm.PREFIX
});
});
it('parses a bare sidecar file', () => {
expect(extractQuantMeta('imatrix.gguf')).toStrictEqual({
quant: null,
shared: false,
sidecar: ModelAuxSidecar.IMATRIX,
sidecarForm: SidecarForm.PREFIX
});
});
it('parses a standalone sidecar with a draft tail', () => {
expect(extractQuantMeta('Model-mtp-draft.gguf')).toStrictEqual({
quant: null,
shared: false,
sidecar: ModelDraftSidecar.MTP,
sidecarForm: SidecarForm.SUFFIX
});
});
it('parses a nested sidecar path by its file name', () => {
expect(extractQuantMeta('MTP/mtp-Model-Q4_0.gguf')).toStrictEqual({
quant: 'Q4_0',
shared: false,
sidecar: ModelDraftSidecar.MTP,
sidecarForm: SidecarForm.PREFIX
});
});
it('returns null for non-weight files', () => {
expect(extractQuantMeta('README.md')).toBeNull();
});
});
describe('buildDownloadTag', () => {
it('appends the quantization', () => {
expect(buildDownloadTag('org/repo', 'Q4_0', null)).toBe('org/repo:Q4_0');
});
it('appends the quantization and sidecar', () => {
expect(buildDownloadTag('org/repo', 'Q4_0', ModelDraftSidecar.MTP)).toBe('org/repo:Q4_0-mtp');
});
it('uses the sidecar alone when there is no quant', () => {
expect(buildDownloadTag('org/repo', null, ModelAuxSidecar.MMPROJ)).toBe('org/repo:mmproj');
});
it('returns the repo id untouched without a tag', () => {
expect(buildDownloadTag('org/repo', null, null)).toBe('org/repo');
});
});
describe('sidecarFromTag', () => {
it('reads the token after the last dash', () => {
expect(sidecarFromTag('Q4_0-mtp')).toBe(ModelDraftSidecar.MTP);
expect(sidecarFromTag('mmproj')).toBe(ModelAuxSidecar.MMPROJ);
});
it('returns null for quant-only and unrelated tags', () => {
expect(sidecarFromTag('Q4_K_XL')).toBeNull();
expect(sidecarFromTag('UD-Q4_K_XL')).toBeNull();
});
});