@qvac/sdk 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +267 -63
- package/README.md +2 -0
- package/dist/client/api/diffusion.d.ts +32 -0
- package/dist/client/api/diffusion.js +103 -0
- package/dist/client/api/embed.d.ts +9 -3
- package/dist/client/api/embed.js +4 -1
- package/dist/client/api/finetune.d.ts +69 -0
- package/dist/client/api/finetune.js +139 -0
- package/dist/client/api/get-model-info.d.ts +1 -1
- package/dist/client/api/index.d.ts +4 -0
- package/dist/client/api/index.js +4 -0
- package/dist/client/api/rag.d.ts +1 -1
- package/dist/client/api/rag.js +1 -1
- package/dist/client/api/resume.d.ts +14 -0
- package/dist/client/api/resume.js +20 -0
- package/dist/client/api/suspend.d.ts +13 -0
- package/dist/client/api/suspend.js +19 -0
- package/dist/client/api/transcribe.d.ts +25 -17
- package/dist/client/api/transcribe.js +115 -35
- package/dist/client/rpc/bare-client.d.ts +5 -1
- package/dist/client/rpc/bare-client.js +70 -57
- package/dist/client/rpc/expo-rpc-client.d.ts +4 -0
- package/dist/client/rpc/expo-rpc-client.js +8 -0
- package/dist/client/rpc/node-rpc-client.d.ts +4 -0
- package/dist/client/rpc/node-rpc-client.js +8 -0
- package/dist/client/rpc/rpc-client.d.ts +13 -0
- package/dist/client/rpc/rpc-client.js +131 -1
- package/dist/examples/delegated-inference/composite.d.ts +2 -0
- package/dist/examples/delegated-inference/composite.js +99 -0
- package/dist/examples/diffusion-flux2-klein.d.ts +2 -0
- package/dist/examples/diffusion-flux2-klein.js +46 -0
- package/dist/examples/diffusion-simple.d.ts +2 -0
- package/dist/examples/diffusion-simple.js +17 -0
- package/dist/examples/diffusion-txt2img.d.ts +2 -0
- package/dist/examples/diffusion-txt2img.js +40 -0
- package/dist/examples/embed-p2p.js +2 -2
- package/dist/examples/finetune/llamacpp-finetune.d.ts +2 -0
- package/dist/examples/finetune/llamacpp-finetune.js +78 -0
- package/dist/examples/logging-streaming.js +1 -1
- package/dist/examples/mcp-websearch.js +2 -0
- package/dist/examples/ocr-fasttext.js +11 -0
- package/dist/examples/profiling/per-call.js +3 -3
- package/dist/examples/rag/rag-chromadb.js +2 -2
- package/dist/examples/rag/rag-hyperdb/pipeline.js +1 -1
- package/dist/examples/rag/rag-lancedb.js +2 -2
- package/dist/examples/rag/rag-sqlite.js +2 -2
- package/dist/examples/suspend-resume.d.ts +2 -0
- package/dist/examples/suspend-resume.js +52 -0
- package/dist/examples/transcription/parakeet-ctc-filesystem.js +3 -5
- package/dist/examples/transcription/parakeet-microphone-record.js +42 -33
- package/dist/examples/transcription/parakeet-sortformer.js +13 -3
- package/dist/examples/transcription/parakeet-tdt-filesystem.js +5 -7
- package/dist/examples/transcription/whispercpp-filesystem-streaming.d.ts +2 -0
- package/dist/examples/transcription/whispercpp-filesystem-streaming.js +99 -0
- package/dist/examples/transcription/whispercpp-microphone-record.js +78 -299
- package/dist/examples/transcription/whispercpp-prompt.js +11 -0
- package/dist/examples/translation/translation-llm.js +2 -2
- package/dist/examples/tts/supertonic-multilingual.d.ts +2 -0
- package/dist/examples/tts/supertonic-multilingual.js +56 -0
- package/dist/examples/tts/supertonic.js +12 -7
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/logging/utils.js +1 -1
- package/dist/models/registry/models.d.ts +15176 -4264
- package/dist/models/registry/models.js +18657 -7404
- package/dist/models/update-models/codegen.js +2 -2
- package/dist/models/update-models/naming.js +26 -0
- package/dist/pear/pre.js +2 -0
- package/dist/polyfills/bare-globals.d.ts +2 -0
- package/dist/polyfills/bare-globals.js +4 -0
- package/dist/polyfills/bare-globals.noop.d.ts +2 -0
- package/dist/polyfills/bare-globals.noop.js +1 -0
- package/dist/profiling/exporters.js +16 -11
- package/dist/profiling/model-execution.d.ts +16 -0
- package/dist/profiling/model-execution.js +33 -0
- package/dist/schemas/common.d.ts +967 -198
- package/dist/schemas/common.js +16 -1
- package/dist/schemas/completion-stream.d.ts +14 -6
- package/dist/schemas/completion-stream.js +4 -3
- package/dist/schemas/download-asset.d.ts +7 -3
- package/dist/schemas/embed.d.ts +19 -0
- package/dist/schemas/embed.js +7 -0
- package/dist/schemas/engine-addon-map.js +4 -1
- package/dist/schemas/finetune.d.ts +620 -0
- package/dist/schemas/finetune.js +161 -0
- package/dist/schemas/get-model-info.d.ts +2 -0
- package/dist/schemas/get-model-info.js +1 -0
- package/dist/schemas/index.d.ts +5 -1
- package/dist/schemas/index.js +5 -1
- package/dist/schemas/llamacpp-config.d.ts +26 -6
- package/dist/schemas/llamacpp-config.js +12 -0
- package/dist/schemas/load-model.d.ts +4005 -1400
- package/dist/schemas/load-model.js +34 -1
- package/dist/schemas/model-src-utils.d.ts +10 -2
- package/dist/schemas/model-types.d.ts +19 -1
- package/dist/schemas/model-types.js +11 -0
- package/dist/schemas/ocr.d.ts +2 -0
- package/dist/schemas/plugin.d.ts +24 -3
- package/dist/schemas/plugin.js +14 -0
- package/dist/schemas/profiling.d.ts +4 -0
- package/dist/schemas/profiling.js +4 -0
- package/dist/schemas/registry.d.ts +18 -0
- package/dist/schemas/registry.js +2 -0
- package/dist/schemas/reload-config.d.ts +9 -1
- package/dist/schemas/resume.d.ts +10 -0
- package/dist/schemas/resume.js +7 -0
- package/dist/schemas/sdcpp-config.d.ts +327 -0
- package/dist/schemas/sdcpp-config.js +102 -0
- package/dist/schemas/sdk-config.d.ts +1225 -235
- package/dist/schemas/sdk-config.js +4 -0
- package/dist/schemas/sdk-errors-server.d.ts +2 -0
- package/dist/schemas/sdk-errors-server.js +12 -0
- package/dist/schemas/suspend.d.ts +10 -0
- package/dist/schemas/suspend.js +7 -0
- package/dist/schemas/text-to-speech.d.ts +187 -10
- package/dist/schemas/text-to-speech.js +12 -4
- package/dist/schemas/transcription-config.d.ts +16 -56
- package/dist/schemas/transcription-config.js +0 -2
- package/dist/schemas/transcription.d.ts +66 -6
- package/dist/schemas/transcription.js +29 -7
- package/dist/schemas/translate.d.ts +14 -4
- package/dist/schemas/translate.js +10 -2
- package/dist/schemas/translation-config.d.ts +30 -10
- package/dist/server/bare/delegate-rpc-client.js +3 -3
- package/dist/server/bare/hyperswarm.js +15 -3
- package/dist/server/bare/ops/embed.d.ts +8 -4
- package/dist/server/bare/ops/embed.js +15 -4
- package/dist/server/bare/ops/transcribe.d.ts +6 -2
- package/dist/server/bare/ops/transcribe.js +53 -1
- package/dist/server/bare/ops/translate.d.ts +4 -1
- package/dist/server/bare/ops/translate.js +28 -65
- package/dist/server/bare/ops/unload-model.js +2 -0
- package/dist/server/bare/plugins/index.d.ts +1 -0
- package/dist/server/bare/plugins/index.js +1 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/cache-logger.d.ts +1 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/cache-logger.js +3 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.d.ts +3 -1
- package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +57 -11
- package/dist/server/bare/plugins/llamacpp-completion/ops/finetune.d.ts +11 -0
- package/dist/server/bare/plugins/llamacpp-completion/ops/finetune.js +112 -0
- package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +175 -5
- package/dist/server/bare/plugins/llamacpp-completion/plugin.js +45 -35
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +11 -1
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +9 -4
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +17 -2
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +16 -15
- package/dist/server/bare/plugins/onnx-ocr/ops/ocr-stream.d.ts +5 -7
- package/dist/server/bare/plugins/onnx-ocr/ops/ocr-stream.js +11 -3
- package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +2 -0
- package/dist/server/bare/plugins/onnx-ocr/plugin.js +24 -19
- package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech.d.ts +7 -2
- package/dist/server/bare/plugins/onnx-tts/ops/text-to-speech.js +22 -97
- package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +98 -9
- package/dist/server/bare/plugins/onnx-tts/plugin.js +85 -46
- package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +30 -60
- package/dist/server/bare/plugins/parakeet-transcription/plugin.js +49 -37
- package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.d.ts +3 -0
- package/dist/server/bare/plugins/sdcpp-generation/ops/diffusion.js +51 -0
- package/dist/server/bare/plugins/sdcpp-generation/plugin.d.ts +278 -0
- package/dist/server/bare/plugins/sdcpp-generation/plugin.js +70 -0
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +38 -2
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +43 -22
- package/dist/server/bare/rag-hyperdb/handlers/ingest.js +2 -1
- package/dist/server/bare/rag-hyperdb/handlers/search.js +2 -1
- package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +7 -0
- package/dist/server/bare/registry/model-config-utils.js +3 -0
- package/dist/server/bare/registry/model-registry.d.ts +2 -2
- package/dist/server/bare/registry/model-registry.js +1 -1
- package/dist/server/bare/registry/registry-client.js +21 -0
- package/dist/server/bare/runtime-lifecycle.d.ts +28 -0
- package/dist/server/bare/runtime-lifecycle.js +132 -0
- package/dist/server/bare/types/addon-responses.d.ts +62 -0
- package/dist/server/bare/types/addon-responses.js +1 -0
- package/dist/server/env.js +3 -1
- package/dist/server/rpc/delegate-transport.js +1 -1
- package/dist/server/rpc/handle-request.js +50 -4
- package/dist/server/rpc/handler-registry.js +20 -1
- package/dist/server/rpc/handler-utils.d.ts +5 -3
- package/dist/server/rpc/handler-utils.js +52 -50
- package/dist/server/rpc/handlers/delete-cache.js +3 -0
- package/dist/server/rpc/handlers/diffusion-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/diffusion-stream.js +4 -0
- package/dist/server/rpc/handlers/finetune.d.ts +3 -0
- package/dist/server/rpc/handlers/finetune.js +16 -0
- package/dist/server/rpc/handlers/index.d.ts +10 -0
- package/dist/server/rpc/handlers/index.js +10 -0
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +24 -9
- package/dist/server/rpc/handlers/load-model/registry.d.ts +11 -0
- package/dist/server/rpc/handlers/load-model/registry.js +31 -4
- package/dist/server/rpc/handlers/plugin-dispatch.d.ts +1 -13
- package/dist/server/rpc/handlers/plugin-dispatch.js +21 -21
- package/dist/server/rpc/handlers/resume.d.ts +3 -0
- package/dist/server/rpc/handlers/resume.js +11 -0
- package/dist/server/rpc/handlers/suspend.d.ts +3 -0
- package/dist/server/rpc/handlers/suspend.js +11 -0
- package/dist/server/rpc/handlers/transcribe-stream.d.ts +1 -1
- package/dist/server/rpc/handlers/transcribe-stream.js +2 -2
- package/dist/server/rpc/handlers/transcribe.d.ts +3 -0
- package/dist/server/rpc/handlers/transcribe.js +4 -0
- package/dist/server/rpc/profiling/operation-metrics.js +107 -16
- package/dist/server/rpc/profiling/operation-wrappers.d.ts +1 -1
- package/dist/server/rpc/profiling/operation-wrappers.js +51 -19
- package/dist/server/rpc/progress-throttle.d.ts +8 -0
- package/dist/server/rpc/progress-throttle.js +47 -0
- package/dist/server/rpc/rpc-utils.d.ts +5 -0
- package/dist/server/rpc/rpc-utils.js +11 -0
- package/dist/server/utils/path-security.js +1 -1
- package/dist/server/utils/tool-integration.js +10 -0
- package/dist/server/utils/tool-parser.js +9 -5
- package/dist/server/worker-core.d.ts +2 -0
- package/dist/server/worker-core.js +26 -23
- package/dist/server/worker.js +2 -1
- package/dist/utils/encoding.d.ts +9 -0
- package/dist/utils/encoding.js +14 -0
- package/dist/utils/errors-server.d.ts +6 -0
- package/dist/utils/errors-server.js +11 -0
- package/package.json +81 -25
- package/dist/server/rpc/delegate-utils.d.ts +0 -2
- package/dist/server/rpc/delegate-utils.js +0 -5
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { loadModel, unloadModel, diffusion, FLUX_2_KLEIN_4B_Q4_0, FLUX_2_KLEIN_4B_VAE, QWEN3_4B_Q4_K_M } from "@qvac/sdk";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
// FLUX.2 [klein] uses a split-layout: separate diffusion model + LLM text encoder + VAE
|
|
5
|
+
const diffusionModelSrc = process.argv[2] || FLUX_2_KLEIN_4B_Q4_0;
|
|
6
|
+
const llmModelSrc = process.argv[3] || QWEN3_4B_Q4_K_M;
|
|
7
|
+
const vaeModelSrc = process.argv[4] || FLUX_2_KLEIN_4B_VAE;
|
|
8
|
+
const prompt = process.argv[5] || "a futuristic city at sunset, photorealistic";
|
|
9
|
+
const outputDir = process.argv[6] || ".";
|
|
10
|
+
console.log("Loading FLUX.2 [klein] split-layout model...");
|
|
11
|
+
const modelId = await loadModel({
|
|
12
|
+
modelSrc: diffusionModelSrc,
|
|
13
|
+
modelType: "diffusion",
|
|
14
|
+
modelConfig: {
|
|
15
|
+
device: "gpu",
|
|
16
|
+
threads: 4,
|
|
17
|
+
llmModelSrc,
|
|
18
|
+
vaeModelSrc,
|
|
19
|
+
},
|
|
20
|
+
onProgress: (p) => console.log(`Loading: ${p.percentage.toFixed(1)}%`),
|
|
21
|
+
});
|
|
22
|
+
console.log(`Model loaded: ${modelId}`);
|
|
23
|
+
console.log(`\nGenerating: "${prompt}"`);
|
|
24
|
+
const { progressStream, outputs, stats } = diffusion({
|
|
25
|
+
modelId,
|
|
26
|
+
prompt,
|
|
27
|
+
width: 512,
|
|
28
|
+
height: 512,
|
|
29
|
+
steps: 20,
|
|
30
|
+
guidance: 3.5,
|
|
31
|
+
seed: -1,
|
|
32
|
+
});
|
|
33
|
+
for await (const { step, totalSteps } of progressStream) {
|
|
34
|
+
process.stdout.write(`\rStep ${step}/${totalSteps}`);
|
|
35
|
+
}
|
|
36
|
+
console.log();
|
|
37
|
+
const buffers = await outputs;
|
|
38
|
+
for (let i = 0; i < buffers.length; i++) {
|
|
39
|
+
const outputPath = path.join(outputDir, `flux2_${i}.png`);
|
|
40
|
+
fs.writeFileSync(outputPath, buffers[i]);
|
|
41
|
+
console.log(`Saved: ${outputPath}`);
|
|
42
|
+
}
|
|
43
|
+
console.log("\nStats:", await stats);
|
|
44
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
45
|
+
console.log("Done.");
|
|
46
|
+
process.exit(0);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { loadModel, unloadModel, diffusion, SD_V2_1_1B_Q8_0 } from "@qvac/sdk";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
// Minimal diffusion example — single GGUF model, no companion files needed.
|
|
4
|
+
// Works with SD 1.x / 2.x all-in-one models.
|
|
5
|
+
const modelSrc = process.argv[2] || SD_V2_1_1B_Q8_0;
|
|
6
|
+
const prompt = process.argv[3] || "a photo of a cat sitting on a windowsill";
|
|
7
|
+
const modelId = await loadModel({
|
|
8
|
+
modelSrc,
|
|
9
|
+
modelType: "diffusion",
|
|
10
|
+
modelConfig: { prediction: "v" },
|
|
11
|
+
});
|
|
12
|
+
const { outputs } = diffusion({ modelId, prompt });
|
|
13
|
+
const buffers = await outputs;
|
|
14
|
+
fs.writeFileSync("output.png", buffers[0]);
|
|
15
|
+
console.log("Saved: output.png");
|
|
16
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
17
|
+
process.exit(0);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { loadModel, unloadModel, diffusion, FLUX_2_KLEIN_4B_Q4_0, FLUX_2_KLEIN_4B_VAE, QWEN3_4B_Q4_K_M } from "@qvac/sdk";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
const modelSrc = process.argv[2] || FLUX_2_KLEIN_4B_Q4_0;
|
|
5
|
+
const prompt = process.argv[3] ||
|
|
6
|
+
"a photo of a cat sitting on a windowsill, golden hour lighting";
|
|
7
|
+
const outputDir = process.argv[4] || ".";
|
|
8
|
+
console.log(`Loading diffusion model...`);
|
|
9
|
+
// FLUX.2 models require companion LLM + VAE models
|
|
10
|
+
const modelId = await loadModel({
|
|
11
|
+
modelSrc,
|
|
12
|
+
modelType: "diffusion",
|
|
13
|
+
modelConfig: { device: "gpu", threads: 4, llmModelSrc: QWEN3_4B_Q4_K_M, vaeModelSrc: FLUX_2_KLEIN_4B_VAE },
|
|
14
|
+
onProgress: (p) => console.log(`Loading: ${p.percentage.toFixed(1)}%`),
|
|
15
|
+
});
|
|
16
|
+
console.log(`Model loaded: ${modelId}`);
|
|
17
|
+
console.log(`\nGenerating: "${prompt}"`);
|
|
18
|
+
const { progressStream, outputs, stats } = diffusion({
|
|
19
|
+
modelId,
|
|
20
|
+
prompt,
|
|
21
|
+
width: 512,
|
|
22
|
+
height: 512,
|
|
23
|
+
steps: 20,
|
|
24
|
+
cfg_scale: 7.0,
|
|
25
|
+
seed: -1,
|
|
26
|
+
});
|
|
27
|
+
for await (const { step, totalSteps } of progressStream) {
|
|
28
|
+
process.stdout.write(`\rStep ${step}/${totalSteps}`);
|
|
29
|
+
}
|
|
30
|
+
console.log();
|
|
31
|
+
const buffers = await outputs;
|
|
32
|
+
for (let i = 0; i < buffers.length; i++) {
|
|
33
|
+
const outputPath = path.join(outputDir, `output_${i}.png`);
|
|
34
|
+
fs.writeFileSync(outputPath, buffers[i]);
|
|
35
|
+
console.log(`Saved: ${outputPath}`);
|
|
36
|
+
}
|
|
37
|
+
console.log("\nStats:", await stats);
|
|
38
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
39
|
+
console.log("Done.");
|
|
40
|
+
process.exit(0);
|
|
@@ -20,7 +20,7 @@ try {
|
|
|
20
20
|
});
|
|
21
21
|
console.log("\n📝 Example 1: Single Text Embedding");
|
|
22
22
|
console.log("=".repeat(50));
|
|
23
|
-
const singleEmbedding = await embed({ modelId, text: "Hello, world!" });
|
|
23
|
+
const { embedding: singleEmbedding } = await embed({ modelId, text: "Hello, world!" });
|
|
24
24
|
console.log("Input: 'Hello, world!'");
|
|
25
25
|
console.log("Embedding dimensions:", singleEmbedding.length);
|
|
26
26
|
console.log("First 10 values:", singleEmbedding.slice(0, 10));
|
|
@@ -31,7 +31,7 @@ try {
|
|
|
31
31
|
"A fast auburn fox leaps over a sleepy canine",
|
|
32
32
|
"Python is a programming language",
|
|
33
33
|
];
|
|
34
|
-
const batchEmbeddings = await embed({ modelId, text: texts });
|
|
34
|
+
const { embedding: batchEmbeddings } = await embed({ modelId, text: texts });
|
|
35
35
|
console.log("Input: Array of", texts.length, "texts");
|
|
36
36
|
console.log("Output: Array of", batchEmbeddings.length, "embeddings");
|
|
37
37
|
const [emb1, emb2, emb3] = batchEmbeddings;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { finetune, loadModel, QWEN3_600M_INST_Q4, unloadModel, } from "@qvac/sdk";
|
|
2
|
+
const pauseResumeEnabled = process.argv.includes("--pause-resume");
|
|
3
|
+
let modelId;
|
|
4
|
+
let exitCode = 0;
|
|
5
|
+
async function readProgress(handle, onTick) {
|
|
6
|
+
for await (const tick of handle.progressStream) {
|
|
7
|
+
const phase = tick.is_train ? "train" : "val";
|
|
8
|
+
console.log(`epoch=${tick.current_epoch + 1} step=${tick.global_steps} batch=${tick.current_batch}/${tick.total_batches} ${phase} loss=${tick.loss?.toFixed(4)} acc=${tick.accuracy?.toFixed(4)} eta=${Math.round(tick.eta_ms / 1000)}s`);
|
|
9
|
+
onTick(tick.global_steps);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
modelId = await loadModel({
|
|
14
|
+
modelSrc: QWEN3_600M_INST_Q4,
|
|
15
|
+
modelType: "llm",
|
|
16
|
+
modelConfig: {
|
|
17
|
+
device: "gpu",
|
|
18
|
+
ctx_size: 512,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
console.log(`✅ Model loaded with ID: ${modelId}`);
|
|
22
|
+
const loadedModelId = modelId;
|
|
23
|
+
const finetuneParams = {
|
|
24
|
+
modelId: loadedModelId,
|
|
25
|
+
options: {
|
|
26
|
+
trainDatasetDir: "./examples/finetune/input/small_train_HF.jsonl",
|
|
27
|
+
validation: {
|
|
28
|
+
type: "dataset",
|
|
29
|
+
path: "./examples/finetune/input/small_eval_HF.jsonl",
|
|
30
|
+
},
|
|
31
|
+
numberOfEpochs: 2,
|
|
32
|
+
learningRate: 1e-4,
|
|
33
|
+
lrMin: 1e-8,
|
|
34
|
+
loraModules: 'attn_q,attn_k,attn_v,attn_o,ffn_gate,ffn_up,ffn_down',
|
|
35
|
+
assistantLossOnly: true,
|
|
36
|
+
checkpointSaveSteps: 2,
|
|
37
|
+
checkpointSaveDir: "./examples/finetune/results/checkpoints",
|
|
38
|
+
outputParametersDir: "./examples/finetune/results",
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
const handle = finetune(finetuneParams);
|
|
42
|
+
let pauseRequested = false;
|
|
43
|
+
let pauseResultPromise;
|
|
44
|
+
const progressTask = readProgress(handle, (globalSteps) => {
|
|
45
|
+
if (pauseResumeEnabled && !pauseRequested && globalSteps >= 10) {
|
|
46
|
+
pauseRequested = true;
|
|
47
|
+
console.log("⏸️ Requesting a pause so the run can be resumed...");
|
|
48
|
+
pauseResultPromise = finetune({ modelId: loadedModelId, operation: "pause" });
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const initialResult = await handle.result;
|
|
52
|
+
await progressTask;
|
|
53
|
+
if (pauseResultPromise) {
|
|
54
|
+
await pauseResultPromise;
|
|
55
|
+
}
|
|
56
|
+
console.log("📦 Initial finetune result:", initialResult);
|
|
57
|
+
if (pauseResumeEnabled && initialResult.status === "PAUSED") {
|
|
58
|
+
console.log("▶️ Resuming from the saved checkpoint...");
|
|
59
|
+
const resumedHandle = finetune({
|
|
60
|
+
...finetuneParams,
|
|
61
|
+
operation: "resume",
|
|
62
|
+
});
|
|
63
|
+
const resumedProgressTask = readProgress(resumedHandle, function () { });
|
|
64
|
+
const resumedResult = await resumedHandle.result;
|
|
65
|
+
await resumedProgressTask;
|
|
66
|
+
console.log("✅ Resumed finetune result:", resumedResult);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error("❌ Error:", error);
|
|
71
|
+
exitCode = 1;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
if (modelId) {
|
|
75
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
process.exit(exitCode);
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
import { completion, loadModel, unloadModel, QWEN3_1_7B_INST_Q4, } from "../index.js";
|
|
13
13
|
// MCP SDK is a user-installed optional dependency
|
|
14
14
|
// Install with: bun add @modelcontextprotocol/sdk
|
|
15
|
+
// eslint-disable-next-line import/no-unresolved
|
|
15
16
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
17
|
+
// eslint-disable-next-line import/no-unresolved
|
|
16
18
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
17
19
|
function parseSearchResults(mcpResult) {
|
|
18
20
|
try {
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OCR example using the QVAC SDK.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* bun examples/ocr-fasttext.ts [path-to-image]
|
|
6
|
+
*
|
|
7
|
+
* This example requires a test image (default: examples/image/basic_test.bmp).
|
|
8
|
+
* Sample images are available in the QVAC source repository, but not included in the published npm package.
|
|
9
|
+
* Pass a custom image path, or download the default image into examples/image/:
|
|
10
|
+
* https://github.com/tetherto/qvac/blob/main/packages/sdk/examples/image/basic_test.bmp
|
|
11
|
+
*/
|
|
1
12
|
import { close, loadModel, ocr, OCR_LATIN_RECOGNIZER_1, unloadModel, } from "@qvac/sdk";
|
|
2
13
|
import path from "path";
|
|
3
14
|
import { fileURLToPath } from "url";
|
|
@@ -9,16 +9,16 @@ try {
|
|
|
9
9
|
});
|
|
10
10
|
console.log("Model loaded:", modelId);
|
|
11
11
|
console.log("\n=== Embed with per-call profiling ===");
|
|
12
|
-
const embedding1 = await embed({ modelId, text: "Profile this specific call" }, { profiling: { enabled: true, includeServerBreakdown: true } });
|
|
12
|
+
const { embedding: embedding1 } = await embed({ modelId, text: "Profile this specific call" }, { profiling: { enabled: true, includeServerBreakdown: true } });
|
|
13
13
|
console.log("Embedding dimensions:", embedding1.length);
|
|
14
14
|
console.log("\n=== Embed without profiling ===");
|
|
15
|
-
const embedding2 = await embed({
|
|
15
|
+
const { embedding: embedding2 } = await embed({
|
|
16
16
|
modelId,
|
|
17
17
|
text: "This call is not profiled",
|
|
18
18
|
});
|
|
19
19
|
console.log("Embedding dimensions:", embedding2.length);
|
|
20
20
|
console.log("\n=== Embed with profiling explicitly disabled ===");
|
|
21
|
-
const embedding3 = await embed({ modelId, text: "Profiling explicitly disabled for this call" }, { profiling: { enabled: false } });
|
|
21
|
+
const { embedding: embedding3 } = await embed({ modelId, text: "Profiling explicitly disabled for this call" }, { profiling: { enabled: false } });
|
|
22
22
|
console.log("Embedding dimensions:", embedding3.length);
|
|
23
23
|
await unloadModel({ modelId });
|
|
24
24
|
console.log("\n=== Profiler Summary (per-call data only) ===");
|
|
@@ -96,7 +96,7 @@ try {
|
|
|
96
96
|
for (const s of samples) {
|
|
97
97
|
ids.push(String(s.id));
|
|
98
98
|
documents.push(s.text);
|
|
99
|
-
embeddings.push(await embed({ modelId, text: s.text }));
|
|
99
|
+
embeddings.push((await embed({ modelId, text: s.text })).embedding);
|
|
100
100
|
}
|
|
101
101
|
await collection.add({
|
|
102
102
|
ids,
|
|
@@ -104,7 +104,7 @@ try {
|
|
|
104
104
|
embeddings,
|
|
105
105
|
});
|
|
106
106
|
console.log("🔎 Searching for similar documents...");
|
|
107
|
-
const queryEmbedding = await embed({ modelId, text: query });
|
|
107
|
+
const { embedding: queryEmbedding } = await embed({ modelId, text: query });
|
|
108
108
|
// Query top 3 by vector similarity and include distances
|
|
109
109
|
const res = await collection.query({
|
|
110
110
|
queryEmbeddings: [queryEmbedding],
|
|
@@ -33,7 +33,7 @@ try {
|
|
|
33
33
|
console.log(` Created ${chunks.length} chunks`);
|
|
34
34
|
console.log("\n🧠 Step 2: Generating embeddings (batch)...");
|
|
35
35
|
const texts = chunks.map((chunk) => chunk.content);
|
|
36
|
-
const embeddings = await embed({ modelId, text: texts });
|
|
36
|
+
const { embedding: embeddings } = await embed({ modelId, text: texts });
|
|
37
37
|
const embeddedDocs = chunks.map((chunk, i) => ({
|
|
38
38
|
id: chunk.id,
|
|
39
39
|
content: chunk.content,
|
|
@@ -63,7 +63,7 @@ try {
|
|
|
63
63
|
console.log("📚 Embedding documents...");
|
|
64
64
|
const documents = [];
|
|
65
65
|
for (const sample of samples) {
|
|
66
|
-
const embedding = await embed({ modelId, text: sample.text });
|
|
66
|
+
const { embedding } = await embed({ modelId, text: sample.text });
|
|
67
67
|
const record = {
|
|
68
68
|
id: sample.id,
|
|
69
69
|
text: sample.text,
|
|
@@ -73,7 +73,7 @@ try {
|
|
|
73
73
|
}
|
|
74
74
|
await documentsTable.add(documents);
|
|
75
75
|
console.log("🔎 Searching for similar documents...");
|
|
76
|
-
const queryEmbedding = await embed({ modelId, text: query });
|
|
76
|
+
const { embedding: queryEmbedding } = await embed({ modelId, text: query });
|
|
77
77
|
const results = (await documentsTable
|
|
78
78
|
.vectorSearch(queryEmbedding)
|
|
79
79
|
.limit(1)
|
|
@@ -58,7 +58,7 @@ try {
|
|
|
58
58
|
`);
|
|
59
59
|
console.log("📚 Embedding documents...");
|
|
60
60
|
for (const sample of samples) {
|
|
61
|
-
const embedding = await embed({ modelId, text: sample.text });
|
|
61
|
+
const { embedding } = await embed({ modelId, text: sample.text });
|
|
62
62
|
db.exec({
|
|
63
63
|
sql: "INSERT INTO documents VALUES (?, ?, vector_as_f32(?))",
|
|
64
64
|
bind: [sample.id, sample.text, JSON.stringify(embedding)],
|
|
@@ -72,7 +72,7 @@ try {
|
|
|
72
72
|
db.exec(`SELECT vector_quantize_preload('documents', 'embedding')`);
|
|
73
73
|
// Search for similar documents
|
|
74
74
|
console.log("🔎 Searching for similar documents...");
|
|
75
|
-
const queryEmbedding = await embed({ modelId, text: query });
|
|
75
|
+
const { embedding: queryEmbedding } = await embed({ modelId, text: query });
|
|
76
76
|
const results = [];
|
|
77
77
|
// Perform vector search
|
|
78
78
|
db.exec({
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { loadModel, LLAMA_3_2_1B_INST_Q4_0, completion, unloadModel, suspend, resume, } from "@qvac/sdk";
|
|
2
|
+
try {
|
|
3
|
+
// Load a model
|
|
4
|
+
const modelId = await loadModel({
|
|
5
|
+
modelSrc: LLAMA_3_2_1B_INST_Q4_0,
|
|
6
|
+
modelType: "llm",
|
|
7
|
+
onProgress: (progress) => {
|
|
8
|
+
console.log(progress);
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
console.log("✅ Model loaded\n");
|
|
12
|
+
// Run a completion before suspending
|
|
13
|
+
console.log("--- Completion before suspend ---");
|
|
14
|
+
const result1 = completion({
|
|
15
|
+
modelId,
|
|
16
|
+
history: [{ role: "user", content: "Say hello in one word" }],
|
|
17
|
+
stream: true,
|
|
18
|
+
});
|
|
19
|
+
for await (const token of result1.tokenStream) {
|
|
20
|
+
process.stdout.write(token);
|
|
21
|
+
}
|
|
22
|
+
console.log("\n");
|
|
23
|
+
// Suspend all networking and storage (e.g. app going to background)
|
|
24
|
+
console.log("⏸️ Suspending...");
|
|
25
|
+
await suspend();
|
|
26
|
+
console.log("✅ Suspended — Hyperswarm and Corestore resources are paused\n");
|
|
27
|
+
// Simulate time in background
|
|
28
|
+
console.log("💤 Simulating 3 seconds in background...");
|
|
29
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
30
|
+
// Resume when returning to foreground
|
|
31
|
+
console.log("▶️ Resuming...");
|
|
32
|
+
await resume();
|
|
33
|
+
console.log("✅ Resumed — networking and storage restored\n");
|
|
34
|
+
// Run another completion after resuming
|
|
35
|
+
console.log("--- Completion after resume ---");
|
|
36
|
+
const result2 = completion({
|
|
37
|
+
modelId,
|
|
38
|
+
history: [{ role: "user", content: "Say goodbye in one word" }],
|
|
39
|
+
stream: true,
|
|
40
|
+
});
|
|
41
|
+
for await (const token of result2.tokenStream) {
|
|
42
|
+
process.stdout.write(token);
|
|
43
|
+
}
|
|
44
|
+
console.log("\n");
|
|
45
|
+
await unloadModel({ modelId });
|
|
46
|
+
console.log("✅ Model unloaded");
|
|
47
|
+
process.exit(0);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error("❌ Error:", error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { loadModel, unloadModel, transcribe, PARAKEET_CTC_FP32,
|
|
1
|
+
import { loadModel, unloadModel, transcribe, PARAKEET_CTC_FP32, PARAKEET_CTC_TOKENIZER, } from "@qvac/sdk";
|
|
2
2
|
const args = process.argv.slice(2);
|
|
3
3
|
if (!args[0]) {
|
|
4
4
|
console.error("Usage: bun run examples/transcription/parakeet-ctc-filesystem.ts <wav-file> " +
|
|
5
|
-
"[model.onnx] [
|
|
5
|
+
"[model.onnx] [tokenizer.json]");
|
|
6
6
|
console.error("\nIf model paths are omitted, defaults to registry models.");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
const audioFilePath = args[0];
|
|
10
10
|
const parakeetCtcModelSrc = args[1] ?? PARAKEET_CTC_FP32;
|
|
11
|
-
const
|
|
12
|
-
const parakeetTokenizerSrc = args[3] ?? PARAKEET_CTC_TOKENIZER;
|
|
11
|
+
const parakeetTokenizerSrc = args[2] ?? PARAKEET_CTC_TOKENIZER;
|
|
13
12
|
try {
|
|
14
13
|
console.log("Loading Parakeet CTC model...");
|
|
15
14
|
const modelId = await loadModel({
|
|
@@ -18,7 +17,6 @@ try {
|
|
|
18
17
|
modelConfig: {
|
|
19
18
|
modelType: "ctc",
|
|
20
19
|
parakeetCtcModelSrc,
|
|
21
|
-
parakeetCtcModelDataSrc,
|
|
22
20
|
parakeetTokenizerSrc,
|
|
23
21
|
},
|
|
24
22
|
onProgress: (progress) => {
|
|
@@ -1,56 +1,64 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Microphone → Parakeet transcription using chunked `transcribe` calls.
|
|
3
|
+
*
|
|
4
|
+
* Usage: bun run examples/transcription/parakeet-microphone-record.ts
|
|
5
|
+
*
|
|
6
|
+
* Captures 3-second audio chunks from the microphone and sends each to the
|
|
7
|
+
* batch `transcribe` API. Press Ctrl+C to quit.
|
|
8
|
+
*
|
|
9
|
+
* Requirements: FFmpeg installed, microphone access.
|
|
10
|
+
*/
|
|
11
|
+
import { loadModel, unloadModel, transcribe, PARAKEET_TDT_ENCODER_FP32, PARAKEET_TDT_DECODER_FP32, PARAKEET_TDT_VOCAB, PARAKEET_TDT_PREPROCESSOR_FP32, } from "@qvac/sdk";
|
|
2
12
|
import { spawn, spawnSync } from "child_process";
|
|
3
13
|
import { platform } from "os";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
function getAudioDevice() {
|
|
11
|
-
switch (platform()) {
|
|
12
|
-
case "darwin":
|
|
13
|
-
return ":0";
|
|
14
|
-
case "linux":
|
|
15
|
-
return "default";
|
|
16
|
-
case "win32":
|
|
17
|
-
// Change as per your system
|
|
18
|
-
return "audio=@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\\wave_{58C07110-A4FD-4FF8-BA10-5A3C14389F71}";
|
|
19
|
-
default:
|
|
20
|
-
throw new Error(`Unsupported platform: ${platform()}`);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
14
|
+
const SAMPLE_RATE = 16000;
|
|
15
|
+
const BYTES_PER_SAMPLE = 2; // s16le
|
|
16
|
+
const CHUNK_DURATION_S = 3;
|
|
17
|
+
const CHUNK_SIZE = SAMPLE_RATE * BYTES_PER_SAMPLE * CHUNK_DURATION_S;
|
|
23
18
|
function getAudioInputArgs() {
|
|
24
19
|
switch (platform()) {
|
|
25
20
|
case "darwin":
|
|
26
|
-
return ["-f", "avfoundation", "-i",
|
|
27
|
-
case "linux":
|
|
28
|
-
return ["-f", "pulse", "-i", getAudioDevice()];
|
|
21
|
+
return ["-f", "avfoundation", "-i", ":0"];
|
|
29
22
|
case "win32":
|
|
30
|
-
return [
|
|
23
|
+
return [
|
|
24
|
+
"-f",
|
|
25
|
+
"dshow",
|
|
26
|
+
"-i",
|
|
27
|
+
"audio=@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\\wave_{58C07110-A4FD-4FF8-BA10-5A3C14389F71}",
|
|
28
|
+
];
|
|
29
|
+
case "linux":
|
|
30
|
+
return ["-f", "pulse", "-i", "default"];
|
|
31
31
|
default:
|
|
32
32
|
throw new Error(`Unsupported platform: ${platform()}`);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
// ── Main ──
|
|
36
|
+
try {
|
|
37
|
+
const r = spawnSync("ffmpeg", ["-version"], { stdio: "ignore" });
|
|
38
|
+
if (r.error || r.status !== 0)
|
|
39
|
+
throw new Error("FFmpeg not found");
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
console.error("FFmpeg is required. Install it and try again.");
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
36
45
|
console.log("Loading Parakeet model...");
|
|
37
46
|
const modelId = await loadModel({
|
|
38
47
|
modelSrc: PARAKEET_TDT_ENCODER_FP32,
|
|
39
48
|
modelType: "parakeet",
|
|
40
49
|
modelConfig: {
|
|
41
50
|
parakeetEncoderSrc: PARAKEET_TDT_ENCODER_FP32,
|
|
42
|
-
parakeetEncoderDataSrc: PARAKEET_TDT_ENCODER_DATA_FP32,
|
|
43
51
|
parakeetDecoderSrc: PARAKEET_TDT_DECODER_FP32,
|
|
44
52
|
parakeetVocabSrc: PARAKEET_TDT_VOCAB,
|
|
45
53
|
parakeetPreprocessorSrc: PARAKEET_TDT_PREPROCESSOR_FP32,
|
|
46
54
|
},
|
|
47
55
|
onProgress: (p) => console.log(`Download: ${p.percentage.toFixed(1)}%`),
|
|
48
56
|
});
|
|
49
|
-
console.log("Model loaded
|
|
57
|
+
console.log("Model loaded.\n");
|
|
50
58
|
const ffmpeg = spawn("ffmpeg", [
|
|
51
59
|
...getAudioInputArgs(),
|
|
52
60
|
"-ar",
|
|
53
|
-
|
|
61
|
+
String(SAMPLE_RATE),
|
|
54
62
|
"-ac",
|
|
55
63
|
"1",
|
|
56
64
|
"-sample_fmt",
|
|
@@ -59,9 +67,11 @@ const ffmpeg = spawn("ffmpeg", [
|
|
|
59
67
|
"s16le",
|
|
60
68
|
"pipe:1",
|
|
61
69
|
], { stdio: ["ignore", "pipe", "ignore"] });
|
|
62
|
-
|
|
70
|
+
if (!ffmpeg.stdout)
|
|
71
|
+
throw new Error("Failed to open microphone");
|
|
63
72
|
let buffer = Buffer.alloc(0);
|
|
64
73
|
let processing = false;
|
|
74
|
+
console.log("Listening... speak and pause to see transcriptions.\n");
|
|
65
75
|
ffmpeg.stdout.on("data", (chunk) => {
|
|
66
76
|
buffer = Buffer.concat([buffer, chunk]);
|
|
67
77
|
if (buffer.length >= CHUNK_SIZE && !processing) {
|
|
@@ -70,10 +80,9 @@ ffmpeg.stdout.on("data", (chunk) => {
|
|
|
70
80
|
processing = true;
|
|
71
81
|
void (async () => {
|
|
72
82
|
try {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
83
|
+
const text = await transcribe({ modelId, audioChunk });
|
|
84
|
+
if (text.trim() && !text.includes("[No speech detected]")) {
|
|
85
|
+
console.log(`> ${text.trim()}`);
|
|
77
86
|
}
|
|
78
87
|
}
|
|
79
88
|
catch (err) {
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Parakeet Sortformer diarization + TDT transcription example.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* bun examples/transcription/parakeet-sortformer.ts [sortformer-src] [path-to-audio]
|
|
6
|
+
*
|
|
7
|
+
* This example requires a test audio file (default: examples/audio/diarization-sample-16k.wav).
|
|
8
|
+
* Sample audio files are available in the QVAC source repository, but not included in the published npm package.
|
|
9
|
+
* Pass a custom audio path as the second argument, or download the default audio into examples/audio/:
|
|
10
|
+
* https://github.com/tetherto/qvac/blob/main/packages/sdk/examples/audio/diarization-sample-16k.wav
|
|
11
|
+
*/
|
|
12
|
+
import { loadModel, unloadModel, transcribe, PARAKEET_TDT_ENCODER_FP32, PARAKEET_TDT_DECODER_FP32, PARAKEET_TDT_VOCAB, PARAKEET_TDT_PREPROCESSOR_FP32, PARAKEET_SORTFORMER_FP32, } from "@qvac/sdk";
|
|
2
13
|
import { dirname, join } from "path";
|
|
3
14
|
import { fileURLToPath } from "url";
|
|
4
15
|
import { readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
@@ -6,7 +17,7 @@ import { tmpdir } from "os";
|
|
|
6
17
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
18
|
const args = process.argv.slice(2);
|
|
8
19
|
const sortformerSrc = args[0] ?? PARAKEET_SORTFORMER_FP32;
|
|
9
|
-
const defaultAudioPath = join(__dirname, "..", "
|
|
20
|
+
const defaultAudioPath = join(__dirname, "..", "audio", "diarization-sample-16k.wav");
|
|
10
21
|
const audioFilePath = args[1] ?? defaultAudioPath;
|
|
11
22
|
// ── Step 1: Diarize with Sortformer ──
|
|
12
23
|
const sfModelId = await loadModel({
|
|
@@ -29,7 +40,6 @@ const tdtModelId = await loadModel({
|
|
|
29
40
|
modelType: "parakeet",
|
|
30
41
|
modelConfig: {
|
|
31
42
|
parakeetEncoderSrc: PARAKEET_TDT_ENCODER_FP32,
|
|
32
|
-
parakeetEncoderDataSrc: PARAKEET_TDT_ENCODER_DATA_FP32,
|
|
33
43
|
parakeetDecoderSrc: PARAKEET_TDT_DECODER_FP32,
|
|
34
44
|
parakeetVocabSrc: PARAKEET_TDT_VOCAB,
|
|
35
45
|
parakeetPreprocessorSrc: PARAKEET_TDT_PREPROCESSOR_FP32,
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { loadModel, unloadModel, transcribe, PARAKEET_TDT_ENCODER_FP32,
|
|
1
|
+
import { loadModel, unloadModel, transcribe, PARAKEET_TDT_ENCODER_FP32, PARAKEET_TDT_DECODER_FP32, PARAKEET_TDT_VOCAB, PARAKEET_TDT_PREPROCESSOR_FP32, } from "@qvac/sdk";
|
|
2
2
|
const args = process.argv.slice(2);
|
|
3
3
|
if (!args[0]) {
|
|
4
4
|
console.error("Usage: bun run examples/transcription/parakeet-tdt-filesystem.ts <wav-file-path> " +
|
|
5
|
-
"[encoder-onnx] [
|
|
5
|
+
"[encoder-onnx] [decoder-onnx] [vocab-txt] [preprocessor-onnx]");
|
|
6
6
|
console.error("\nIf model paths are omitted, defaults to registry models.");
|
|
7
7
|
process.exit(1);
|
|
8
8
|
}
|
|
9
9
|
const audioFilePath = args[0];
|
|
10
10
|
const parakeetEncoderSrc = args[1] ?? PARAKEET_TDT_ENCODER_FP32;
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const parakeetPreprocessorSrc = args[5] ?? PARAKEET_TDT_PREPROCESSOR_FP32;
|
|
11
|
+
const parakeetDecoderSrc = args[2] ?? PARAKEET_TDT_DECODER_FP32;
|
|
12
|
+
const parakeetVocabSrc = args[3] ?? PARAKEET_TDT_VOCAB;
|
|
13
|
+
const parakeetPreprocessorSrc = args[4] ?? PARAKEET_TDT_PREPROCESSOR_FP32;
|
|
15
14
|
try {
|
|
16
15
|
console.log("Starting Parakeet transcription example...");
|
|
17
16
|
console.log("Loading Parakeet model...");
|
|
@@ -20,7 +19,6 @@ try {
|
|
|
20
19
|
modelType: "parakeet",
|
|
21
20
|
modelConfig: {
|
|
22
21
|
parakeetEncoderSrc,
|
|
23
|
-
parakeetEncoderDataSrc,
|
|
24
22
|
parakeetDecoderSrc,
|
|
25
23
|
parakeetVocabSrc,
|
|
26
24
|
parakeetPreprocessorSrc,
|