Skip to content
Source
Sign inSign up

model.test.ts

64 lines2.6 KB

1import { expect, it } from "vite-plus/test";
2​
3import catalog from "./catalog.json" with { type: "json" };
4import {
5 DEFAULT_SPEECH_MODEL_ID,
6 effectiveSpeechLanguage,
7 getSpeechModel,
8 SPEECH_MODELS,
9} from "./model.ts";
10​
11it("offers the full eligible catalog through one canonical registry", () => {
12 const ids = new Set(SPEECH_MODELS.map((model) => model.id));
13 expect(ids).toEqual(new Set(catalog.models.map((model) => model.id)));
14 expect(ids.size).toBe(SPEECH_MODELS.length);
15 expect(new Set(SPEECH_MODELS.map((model) => model.filename)).size).toBe(SPEECH_MODELS.length);
16 expect(getSpeechModel(DEFAULT_SPEECH_MODEL_ID)).toBeDefined();
17 for (const id of ["parakeet-ultra", "orukeet", "granite-speech-5.0-470m-turboctc"]) {
18 expect(getSpeechModel(`handy-computer/${id}-gguf`)).toBeDefined();
19 }
20 for (const id of [
21 "canary-1b",
22 "granite-speech-5.0-470m-turboctc-nc",
23 "lang-id-voxlingua107-ecapa",
24 "silero-vad-v6.2",
25 "diar_streaming_sortformer_4spk-v2.1",
26 ]) {
27 expect(getSpeechModel(`handy-computer/${id}-gguf`)).toBeUndefined();
28 }
29});
30​
31it("uses refreshed default files and preserves forced language choices", () => {
32 expect(getSpeechModel("handy-computer/canary-180m-flash-gguf")).toMatchObject({
33 revision: "46b86384d1db59108d6e060a0fc00924cb58499f",
34 size: 218447648,
35 sha256: "f942ab746040b531a29ab78ca3afc8dc9564efd8e4c942b5541e53644be9c408",
36 });
37 expect(getSpeechModel("handy-computer/canary-1b-v2-gguf")?.filename).toBe(
38 "canary-1b-v2-Q8_0.gguf",
39 );
40 expect(getSpeechModel("handy-computer/canary-qwen-2.5b-gguf")?.filename).toBe(
41 "canary-qwen-2.5b-Q8_0.gguf",
42 );
43 expect(getSpeechModel("handy-computer/canary-1b-flash-gguf")?.filename).toBe(
44 "canary-1b-flash-Q8_0.gguf",
45 );
46 expect(
47 getSpeechModel("handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf"),
48 ).toMatchObject({
49 revision: "d9ed2931bc10058f79809bd88139a27c2ef09a53",
50 size: 873443456,
51 sha256: "cf83cedc6777d2528a4d2a8a4bf476174ef7e5c65b86bc6c955f4cc9f5951ac5",
52 });
53 expect(getSpeechModel("handy-computer/granite-speech-5.0-470m-turboctc-gguf")).toMatchObject({
54 languages: ["en"],
55 supportsStreaming: false,
56 supportsLanguageDetection: false,
57 supportsTranslation: false,
58 });
59 const nemotron = getSpeechModel("handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf")!;
60 expect(effectiveSpeechLanguage(nemotron, "fr")).toBe("fr");
61 expect(effectiveSpeechLanguage(nemotron, "en")).toBe("en");
62 expect(effectiveSpeechLanguage(nemotron, "auto")).toBe("auto");
63 expect(nemotron.languages.filter((language) => language === "fr")).toHaveLength(1);
64});