@qvac/sdk 0.1.0-dev.1760648187.328e967
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/LICENSE +202 -0
- package/README.md +301 -0
- package/dist/client/api/cancel.d.ts +25 -0
- package/dist/client/api/cancel.js +37 -0
- package/dist/client/api/completion-stream.d.ts +50 -0
- package/dist/client/api/completion-stream.js +103 -0
- package/dist/client/api/download-asset.d.ts +39 -0
- package/dist/client/api/download-asset.js +72 -0
- package/dist/client/api/embed.d.ts +11 -0
- package/dist/client/api/embed.js +24 -0
- package/dist/client/api/index.d.ts +13 -0
- package/dist/client/api/index.js +12 -0
- package/dist/client/api/load-model.d.ts +98 -0
- package/dist/client/api/load-model.js +154 -0
- package/dist/client/api/logging-stream.d.ts +21 -0
- package/dist/client/api/logging-stream.js +32 -0
- package/dist/client/api/ping.d.ts +11 -0
- package/dist/client/api/ping.js +18 -0
- package/dist/client/api/provide.d.ts +18 -0
- package/dist/client/api/provide.js +27 -0
- package/dist/client/api/rag.d.ts +42 -0
- package/dist/client/api/rag.js +97 -0
- package/dist/client/api/transcribe.d.ts +24 -0
- package/dist/client/api/transcribe.js +52 -0
- package/dist/client/api/translate.d.ts +47 -0
- package/dist/client/api/translate.js +114 -0
- package/dist/client/api/unload-model.d.ts +11 -0
- package/dist/client/api/unload-model.js +26 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +1 -0
- package/dist/client/logging-stream-registry.d.ts +5 -0
- package/dist/client/logging-stream-registry.js +60 -0
- package/dist/client/rpc/bare-client.d.ts +112 -0
- package/dist/client/rpc/bare-client.js +82 -0
- package/dist/client/rpc/bare-rpc-client.d.ts +4 -0
- package/dist/client/rpc/bare-rpc-client.js +87 -0
- package/dist/client/rpc/expo-rpc-client.d.ts +3 -0
- package/dist/client/rpc/expo-rpc-client.js +57 -0
- package/dist/client/rpc/node-rpc-client.d.ts +9 -0
- package/dist/client/rpc/node-rpc-client.js +99 -0
- package/dist/client/rpc/rpc-client.d.ts +5 -0
- package/dist/client/rpc/rpc-client.js +91 -0
- package/dist/client/rpc/rpc-error.d.ts +19 -0
- package/dist/client/rpc/rpc-error.js +39 -0
- package/dist/constants/audio.d.ts +3 -0
- package/dist/constants/audio.js +17 -0
- package/dist/constants/index.d.ts +2 -0
- package/dist/constants/index.js +1 -0
- package/dist/examples/delegated-inference/consumer.d.ts +2 -0
- package/dist/examples/delegated-inference/consumer.js +56 -0
- package/dist/examples/delegated-inference/provider.d.ts +2 -0
- package/dist/examples/delegated-inference/provider.js +57 -0
- package/dist/examples/download-with-cancel.d.ts +2 -0
- package/dist/examples/download-with-cancel.js +46 -0
- package/dist/examples/embed-hyperdrive.d.ts +2 -0
- package/dist/examples/embed-hyperdrive.js +19 -0
- package/dist/examples/kv-cache-example.d.ts +2 -0
- package/dist/examples/kv-cache-example.js +74 -0
- package/dist/examples/llamacpp-file-logging.d.ts +2 -0
- package/dist/examples/llamacpp-file-logging.js +62 -0
- package/dist/examples/llamacpp-filesystem.d.ts +2 -0
- package/dist/examples/llamacpp-filesystem.js +40 -0
- package/dist/examples/llamacpp-http.d.ts +2 -0
- package/dist/examples/llamacpp-http.js +41 -0
- package/dist/examples/llamacpp-hyperdrive.d.ts +2 -0
- package/dist/examples/llamacpp-hyperdrive.js +39 -0
- package/dist/examples/llamacpp-multimodal.d.ts +2 -0
- package/dist/examples/llamacpp-multimodal.js +62 -0
- package/dist/examples/llamacpp-native-tools.d.ts +2 -0
- package/dist/examples/llamacpp-native-tools.js +64 -0
- package/dist/examples/llamacpp-tools-routing.d.ts +2 -0
- package/dist/examples/llamacpp-tools-routing.js +364 -0
- package/dist/examples/llamacpp-tools.d.ts +2 -0
- package/dist/examples/llamacpp-tools.js +81 -0
- package/dist/examples/multi-model-demo.d.ts +2 -0
- package/dist/examples/multi-model-demo.js +75 -0
- package/dist/examples/parallel-download.d.ts +2 -0
- package/dist/examples/parallel-download.js +21 -0
- package/dist/examples/rag/rag-chromadb.d.ts +2 -0
- package/dist/examples/rag/rag-chromadb.js +130 -0
- package/dist/examples/rag/rag-hyperdb-workspaces.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb-workspaces.js +106 -0
- package/dist/examples/rag/rag-hyperdb.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb.js +50 -0
- package/dist/examples/rag/rag-lancedb.d.ts +2 -0
- package/dist/examples/rag/rag-lancedb.js +95 -0
- package/dist/examples/rag/rag-sqlite.d.ts +2 -0
- package/dist/examples/rag/rag-sqlite.js +107 -0
- package/dist/examples/seed-hyperdrive.d.ts +2 -0
- package/dist/examples/seed-hyperdrive.js +21 -0
- package/dist/examples/translation/translation-indic.d.ts +2 -0
- package/dist/examples/translation/translation-indic.js +30 -0
- package/dist/examples/translation/translation-llm-context.d.ts +2 -0
- package/dist/examples/translation/translation-llm-context.js +30 -0
- package/dist/examples/translation/translation-llm.d.ts +2 -0
- package/dist/examples/translation/translation-llm.js +38 -0
- package/dist/examples/translation/translation-opus.d.ts +2 -0
- package/dist/examples/translation/translation-opus.js +30 -0
- package/dist/examples/translation/translation-stream.d.ts +2 -0
- package/dist/examples/translation/translation-stream.js +35 -0
- package/dist/examples/whispercpp-filesystem.d.ts +2 -0
- package/dist/examples/whispercpp-filesystem.js +43 -0
- package/dist/examples/whispercpp-microphone-record.d.ts +2 -0
- package/dist/examples/whispercpp-microphone-record.js +311 -0
- package/dist/expo/plugins/index.d.ts +5 -0
- package/dist/expo/plugins/index.js +5 -0
- package/dist/expo/plugins/withMobileBundle.d.ts +8 -0
- package/dist/expo/plugins/withMobileBundle.js +60 -0
- package/dist/expo/plugins/withOpenCL.d.ts +9 -0
- package/dist/expo/plugins/withOpenCL.js +118 -0
- package/dist/expo/plugins/withQvacSDK.d.ts +9 -0
- package/dist/expo/plugins/withQvacSDK.js +13 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/logging/base-logger.d.ts +7 -0
- package/dist/logging/base-logger.js +55 -0
- package/dist/logging/index.d.ts +4 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/logger.d.ts +5 -0
- package/dist/logging/logger.js +28 -0
- package/dist/logging/stream-logger.d.ts +3 -0
- package/dist/logging/stream-logger.js +9 -0
- package/dist/logging/transport.d.ts +3 -0
- package/dist/logging/transport.js +15 -0
- package/dist/logging/types.d.ts +18 -0
- package/dist/logging/types.js +1 -0
- package/dist/logging/utils.d.ts +4 -0
- package/dist/logging/utils.js +47 -0
- package/dist/models/hyperdrive/index.d.ts +2 -0
- package/dist/models/hyperdrive/index.js +2 -0
- package/dist/models/hyperdrive/models.d.ts +475 -0
- package/dist/models/hyperdrive/models.js +534 -0
- package/dist/schemas/cancel.d.ts +33 -0
- package/dist/schemas/cancel.js +25 -0
- package/dist/schemas/common.d.ts +626 -0
- package/dist/schemas/common.js +47 -0
- package/dist/schemas/completion-stream.d.ts +125 -0
- package/dist/schemas/completion-stream.js +53 -0
- package/dist/schemas/delegate.d.ts +9 -0
- package/dist/schemas/delegate.js +9 -0
- package/dist/schemas/download-asset.d.ts +75 -0
- package/dist/schemas/download-asset.js +43 -0
- package/dist/schemas/embed.d.ts +20 -0
- package/dist/schemas/embed.js +14 -0
- package/dist/schemas/error.d.ts +13 -0
- package/dist/schemas/error.js +35 -0
- package/dist/schemas/index.d.ts +19 -0
- package/dist/schemas/index.js +19 -0
- package/dist/schemas/llamacpp-config.d.ts +30 -0
- package/dist/schemas/llamacpp-config.js +39 -0
- package/dist/schemas/load-model.d.ts +1259 -0
- package/dist/schemas/load-model.js +108 -0
- package/dist/schemas/logging-stream.d.ts +27 -0
- package/dist/schemas/logging-stream.js +16 -0
- package/dist/schemas/ping.d.ts +11 -0
- package/dist/schemas/ping.js +8 -0
- package/dist/schemas/provide.d.ts +43 -0
- package/dist/schemas/provide.js +25 -0
- package/dist/schemas/rag.d.ts +159 -0
- package/dist/schemas/rag.js +78 -0
- package/dist/schemas/transcription.d.ts +24 -0
- package/dist/schemas/transcription.js +15 -0
- package/dist/schemas/translate.d.ts +82 -0
- package/dist/schemas/translate.js +42 -0
- package/dist/schemas/translation-config.d.ts +83 -0
- package/dist/schemas/translation-config.js +46 -0
- package/dist/schemas/unload-model.d.ts +19 -0
- package/dist/schemas/unload-model.js +13 -0
- package/dist/schemas/whispercpp-config.d.ts +25 -0
- package/dist/schemas/whispercpp-config.js +18 -0
- package/dist/server/bare/addons/cancel.d.ts +3 -0
- package/dist/server/bare/addons/cancel.js +12 -0
- package/dist/server/bare/addons/index.d.ts +4 -0
- package/dist/server/bare/addons/index.js +3 -0
- package/dist/server/bare/addons/llamacpp/create-model.d.ts +5 -0
- package/dist/server/bare/addons/llamacpp/create-model.js +57 -0
- package/dist/server/bare/addons/llamacpp/handlers/completion-stream.d.ts +3 -0
- package/dist/server/bare/addons/llamacpp/handlers/completion-stream.js +65 -0
- package/dist/server/bare/addons/llamacpp/handlers/embed.d.ts +4 -0
- package/dist/server/bare/addons/llamacpp/handlers/embed.js +40 -0
- package/dist/server/bare/addons/llamacpp/index.d.ts +4 -0
- package/dist/server/bare/addons/llamacpp/index.js +3 -0
- package/dist/server/bare/addons/llamacpp/kv-cache-utils.d.ts +19 -0
- package/dist/server/bare/addons/llamacpp/kv-cache-utils.js +46 -0
- package/dist/server/bare/addons/load-model.d.ts +3 -0
- package/dist/server/bare/addons/load-model.js +55 -0
- package/dist/server/bare/addons/translation/create-model.d.ts +4 -0
- package/dist/server/bare/addons/translation/create-model.js +45 -0
- package/dist/server/bare/addons/translation/handlers/translate.d.ts +3 -0
- package/dist/server/bare/addons/translation/handlers/translate.js +86 -0
- package/dist/server/bare/addons/translation/index.d.ts +3 -0
- package/dist/server/bare/addons/translation/index.js +2 -0
- package/dist/server/bare/addons/unload-model.d.ts +3 -0
- package/dist/server/bare/addons/unload-model.js +20 -0
- package/dist/server/bare/addons/whispercpp/create-model.d.ts +6 -0
- package/dist/server/bare/addons/whispercpp/create-model.js +55 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.d.ts +3 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.js +42 -0
- package/dist/server/bare/addons/whispercpp/index.d.ts +3 -0
- package/dist/server/bare/addons/whispercpp/index.js +2 -0
- package/dist/server/bare/delegate-rpc-client.d.ts +4 -0
- package/dist/server/bare/delegate-rpc-client.js +70 -0
- package/dist/server/bare/hyperswarm.d.ts +7 -0
- package/dist/server/bare/hyperswarm.js +62 -0
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +12 -0
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +6 -0
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +16 -0
- package/dist/server/bare/rag-hyperdb/handlers/search.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/search.js +15 -0
- package/dist/server/bare/rag-hyperdb/index.d.ts +5 -0
- package/dist/server/bare/rag-hyperdb/index.js +4 -0
- package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +5 -0
- package/dist/server/bare/rag-hyperdb/rag-manager.js +61 -0
- package/dist/server/bare/registry/logging-stream-registry.d.ts +12 -0
- package/dist/server/bare/registry/logging-stream-registry.js +46 -0
- package/dist/server/bare/registry/model-registry.d.ts +64 -0
- package/dist/server/bare/registry/model-registry.js +95 -0
- package/dist/server/error-handlers.d.ts +4 -0
- package/dist/server/error-handlers.js +27 -0
- package/dist/server/http-server.d.ts +2 -0
- package/dist/server/http-server.js +189 -0
- package/dist/server/rpc/create-server.d.ts +4 -0
- package/dist/server/rpc/create-server.js +19 -0
- package/dist/server/rpc/handle-request.d.ts +12 -0
- package/dist/server/rpc/handle-request.js +220 -0
- package/dist/server/rpc/handlers/cancelHandler.d.ts +3 -0
- package/dist/server/rpc/handlers/cancelHandler.js +27 -0
- package/dist/server/rpc/handlers/completion-stream-delegated.d.ts +3 -0
- package/dist/server/rpc/handlers/completion-stream-delegated.js +30 -0
- package/dist/server/rpc/handlers/completion-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/completion-stream.js +52 -0
- package/dist/server/rpc/handlers/download-asset.d.ts +3 -0
- package/dist/server/rpc/handlers/download-asset.js +21 -0
- package/dist/server/rpc/handlers/embed.d.ts +3 -0
- package/dist/server/rpc/handlers/embed.js +21 -0
- package/dist/server/rpc/handlers/index.d.ts +23 -0
- package/dist/server/rpc/handlers/index.js +22 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +31 -0
- package/dist/server/rpc/handlers/load-model/download-manager.js +88 -0
- package/dist/server/rpc/handlers/load-model/http.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model/http.js +337 -0
- package/dist/server/rpc/handlers/load-model/hyperdrive.d.ts +4 -0
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +332 -0
- package/dist/server/rpc/handlers/load-model/index.d.ts +4 -0
- package/dist/server/rpc/handlers/load-model/index.js +3 -0
- package/dist/server/rpc/handlers/load-model/resolve.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model/resolve.js +121 -0
- package/dist/server/rpc/handlers/load-model-delegated.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model-delegated.js +93 -0
- package/dist/server/rpc/handlers/load-model.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model.js +41 -0
- package/dist/server/rpc/handlers/logging-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/logging-stream.js +37 -0
- package/dist/server/rpc/handlers/provideHandler/connection.d.ts +3 -0
- package/dist/server/rpc/handlers/provideHandler/connection.js +25 -0
- package/dist/server/rpc/handlers/provideHandler/handler.d.ts +3 -0
- package/dist/server/rpc/handlers/provideHandler/handler.js +50 -0
- package/dist/server/rpc/handlers/provideHandler/proxy.d.ts +3 -0
- package/dist/server/rpc/handlers/provideHandler/proxy.js +22 -0
- package/dist/server/rpc/handlers/provideHandler.d.ts +2 -0
- package/dist/server/rpc/handlers/provideHandler.js +2 -0
- package/dist/server/rpc/handlers/rag.d.ts +3 -0
- package/dist/server/rpc/handlers/rag.js +67 -0
- package/dist/server/rpc/handlers/transcribe-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/transcribe-stream.js +26 -0
- package/dist/server/rpc/handlers/translate.d.ts +3 -0
- package/dist/server/rpc/handlers/translate.js +51 -0
- package/dist/server/rpc/handlers/unload-model.d.ts +3 -0
- package/dist/server/rpc/handlers/unload-model.js +20 -0
- package/dist/server/rpc/index.d.ts +3 -0
- package/dist/server/rpc/index.js +2 -0
- package/dist/server/utils/audio/decoder.d.ts +4 -0
- package/dist/server/utils/audio/decoder.js +41 -0
- package/dist/server/utils/cache.d.ts +15 -0
- package/dist/server/utils/cache.js +32 -0
- package/dist/server/utils/hash.d.ts +5 -0
- package/dist/server/utils/hash.js +11 -0
- package/dist/server/utils/index.d.ts +5 -0
- package/dist/server/utils/index.js +4 -0
- package/dist/server/utils/model-path.d.ts +5 -0
- package/dist/server/utils/model-path.js +7 -0
- package/dist/server/worker.d.ts +6 -0
- package/dist/server/worker.js +77 -0
- package/dist/utils/withTimeout.d.ts +11 -0
- package/dist/utils/withTimeout.js +37 -0
- package/package.json +129 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { downloadAsset, cancel, LLAMA_3_2_1B_INST_Q4_0 } from "@qvac/sdk";
|
|
2
|
+
console.log(`š Starting download with pause/resume example`);
|
|
3
|
+
console.log(`\nš” Press Ctrl+C to pause the download (it will resume on restart)\n`);
|
|
4
|
+
let modelId;
|
|
5
|
+
let cancelled = false;
|
|
6
|
+
try {
|
|
7
|
+
// Download model with progress tracking and cancellation
|
|
8
|
+
await downloadAsset({
|
|
9
|
+
assetSrc: LLAMA_3_2_1B_INST_Q4_0,
|
|
10
|
+
onProgress: (progress) => {
|
|
11
|
+
const downloadedMB = (progress.downloaded / 1024 / 1024).toFixed(2);
|
|
12
|
+
const totalMB = (progress.total / 1024 / 1024).toFixed(2);
|
|
13
|
+
const percentage = progress.percentage.toFixed(1);
|
|
14
|
+
console.log(`š Progress: ${percentage}% (${downloadedMB}MB / ${totalMB}MB)`);
|
|
15
|
+
// Example: Stops at 35% (or use Ctrl+C for manual stop)
|
|
16
|
+
if (parseFloat(percentage) >= 35 && !cancelled) {
|
|
17
|
+
console.log("\nš« Auto-cancelling at 35% for demo purposes...,");
|
|
18
|
+
console.log(`š Progress: ${percentage}% (${downloadedMB}MB / ${totalMB}MB)`);
|
|
19
|
+
console.log(progress);
|
|
20
|
+
cancelled = true;
|
|
21
|
+
// Use the downloadKey to cancel
|
|
22
|
+
if (progress.downloadKey) {
|
|
23
|
+
void cancel({
|
|
24
|
+
operation: "downloadAsset",
|
|
25
|
+
downloadKey: progress.downloadKey,
|
|
26
|
+
// clearCache: true, // Uncomment to delete partial file instead of resuming
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
console.log(`\nā
Model downloaded successfully! Model ID: ${modelId}`);
|
|
33
|
+
console.log("šÆ Download completed without interruption");
|
|
34
|
+
// Clean up
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (error instanceof Error && error.message.includes("cancelled")) {
|
|
39
|
+
console.log("ā
Download was successfully cancelled");
|
|
40
|
+
process.exit(0);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.error("ā Error:", error);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { embed, GTE_LARGE_FP16, loadModel, unloadModel } from "@qvac/sdk";
|
|
2
|
+
try {
|
|
3
|
+
const modelId = await loadModel({
|
|
4
|
+
modelSrc: GTE_LARGE_FP16,
|
|
5
|
+
modelType: "embeddings",
|
|
6
|
+
onProgress: (progress) => {
|
|
7
|
+
console.log(progress);
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
const embedding = await embed({ modelId, text: "Hello, world!" });
|
|
11
|
+
console.log("Embedding (first 20 elements)", embedding.slice(0, 20));
|
|
12
|
+
console.log("Embeddings length", embedding.length);
|
|
13
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error("ā Error:", error);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { completion, LLAMA_3_2_1B_INST_Q4_0, loadModel, unloadModel, VERBOSITY, } from "@qvac/sdk";
|
|
2
|
+
try {
|
|
3
|
+
// Load the model
|
|
4
|
+
const modelId = await loadModel({
|
|
5
|
+
modelSrc: LLAMA_3_2_1B_INST_Q4_0,
|
|
6
|
+
modelType: "llm",
|
|
7
|
+
modelConfig: {
|
|
8
|
+
device: "gpu",
|
|
9
|
+
ctx_size: 2048,
|
|
10
|
+
verbosity: VERBOSITY.SILENT,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
console.log("š§ Testing KV Cache functionality...\n");
|
|
14
|
+
// First conversation with cache enabled
|
|
15
|
+
console.log("š First conversation (building cache):");
|
|
16
|
+
const history1 = [
|
|
17
|
+
{ role: "user", content: "What is the capital of France?" },
|
|
18
|
+
];
|
|
19
|
+
const result1 = completion({
|
|
20
|
+
modelId,
|
|
21
|
+
history: history1,
|
|
22
|
+
stream: true,
|
|
23
|
+
kvCache: true,
|
|
24
|
+
}); // kvCache = true
|
|
25
|
+
let response1 = "";
|
|
26
|
+
for await (const token of result1.tokenStream) {
|
|
27
|
+
response1 += token;
|
|
28
|
+
process.stdout.write(token);
|
|
29
|
+
}
|
|
30
|
+
const stats1 = await result1.stats;
|
|
31
|
+
console.log(`\nā±ļø First completion stats: ${JSON.stringify(stats1)}\n`);
|
|
32
|
+
// Continue conversation (should reuse cache from previous conversation)
|
|
33
|
+
console.log("š Continuing conversation (reusing cache):");
|
|
34
|
+
const history2 = [
|
|
35
|
+
{ role: "user", content: "What is the capital of France?" },
|
|
36
|
+
{ role: "assistant", content: response1.trim() },
|
|
37
|
+
{ role: "user", content: "What about Germany?" },
|
|
38
|
+
];
|
|
39
|
+
// This should:
|
|
40
|
+
// 1. Find existing cache from [user: "What is the capital of France?"] (history minus last message)
|
|
41
|
+
// 2. Load that cache and process the new "What about Germany?" message
|
|
42
|
+
// 3. Save the updated cache and rename it to include all messages
|
|
43
|
+
const result2 = completion({
|
|
44
|
+
modelId,
|
|
45
|
+
history: history2,
|
|
46
|
+
stream: true,
|
|
47
|
+
kvCache: true,
|
|
48
|
+
}); // kvCache = true
|
|
49
|
+
for await (const token of result2.tokenStream) {
|
|
50
|
+
process.stdout.write(token);
|
|
51
|
+
}
|
|
52
|
+
const stats2 = await result2.stats;
|
|
53
|
+
console.log(`\nā±ļø Second completion stats: ${JSON.stringify(stats2)}\n`);
|
|
54
|
+
// Compare with non-cached version
|
|
55
|
+
console.log("š Same conversation without cache:");
|
|
56
|
+
const result3 = completion({
|
|
57
|
+
modelId,
|
|
58
|
+
history: history2,
|
|
59
|
+
stream: true,
|
|
60
|
+
kvCache: false,
|
|
61
|
+
}); // kvCache = false
|
|
62
|
+
for await (const token of result3.tokenStream) {
|
|
63
|
+
process.stdout.write(token);
|
|
64
|
+
}
|
|
65
|
+
const stats3 = await result3.stats;
|
|
66
|
+
console.log(`\nā±ļø Non-cached completion stats: ${JSON.stringify(stats3)}\n`);
|
|
67
|
+
console.log("ā
KV Cache test completed!");
|
|
68
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
69
|
+
process.exit(0);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error("ā Error:", error);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { getLogger } from "../logging/index.js";
|
|
2
|
+
import { loadModel, completion, unloadModel } from "../client/api/index.js";
|
|
3
|
+
import { writeFileSync, appendFileSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { LLAMA_3_2_1B_INST_Q4_0 } from "../models/hyperdrive/index.js";
|
|
6
|
+
try {
|
|
7
|
+
const logFile = join(process.cwd(), "model-logs.txt");
|
|
8
|
+
// Clear previous logs
|
|
9
|
+
writeFileSync(logFile, "");
|
|
10
|
+
// Create logger with file transport
|
|
11
|
+
const logger = getLogger("llm-file-demo", {
|
|
12
|
+
level: "debug",
|
|
13
|
+
transports: [
|
|
14
|
+
// File transport - append logs to file
|
|
15
|
+
(level, namespace, message) => {
|
|
16
|
+
const timestamp = new Date().toISOString();
|
|
17
|
+
const logLine = `[${timestamp}] ${level.toUpperCase()} ${namespace}: ${message}\n`;
|
|
18
|
+
appendFileSync(logFile, logLine);
|
|
19
|
+
},
|
|
20
|
+
// Console transport for immediate feedback
|
|
21
|
+
(level, namespace, message) => {
|
|
22
|
+
console.log(`š [${level.toUpperCase()}] ${namespace}: ${message}`);
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
});
|
|
26
|
+
logger.info("Starting model demo with file logging");
|
|
27
|
+
// Load model with integrated logging
|
|
28
|
+
const modelId = await loadModel({
|
|
29
|
+
modelSrc: LLAMA_3_2_1B_INST_Q4_0,
|
|
30
|
+
modelType: "llm",
|
|
31
|
+
modelConfig: {
|
|
32
|
+
ctx_size: 2048,
|
|
33
|
+
temp: 0.7,
|
|
34
|
+
},
|
|
35
|
+
logger, // All model logs will be captured
|
|
36
|
+
});
|
|
37
|
+
logger.info(`Model loaded: ${modelId}`);
|
|
38
|
+
// Run a simple completion
|
|
39
|
+
logger.info("Starting completion...");
|
|
40
|
+
const messages = [
|
|
41
|
+
{ role: "user", content: "Tell me a short joke about programming." },
|
|
42
|
+
];
|
|
43
|
+
let responseText = "";
|
|
44
|
+
const result = completion({ modelId, history: messages, stream: true });
|
|
45
|
+
for await (const token of result.tokenStream) {
|
|
46
|
+
responseText += token;
|
|
47
|
+
process.stdout.write(token);
|
|
48
|
+
}
|
|
49
|
+
console.log("\n");
|
|
50
|
+
logger.info(`Completion finished, ${responseText.length} characters generated`);
|
|
51
|
+
// Unload model
|
|
52
|
+
await unloadModel({ modelId });
|
|
53
|
+
logger.info("Model unloaded successfully");
|
|
54
|
+
// Show user where logs were saved
|
|
55
|
+
console.log(`\nš All logs (including model internals) saved to: ${logFile}`);
|
|
56
|
+
console.log("You can inspect the file to see detailed model operation logs!");
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error("ā Error:", error);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { completion, loadModel } from "@qvac/sdk";
|
|
2
|
+
// Get GGUF file path from command line arguments
|
|
3
|
+
const ggufPath = process.argv[2];
|
|
4
|
+
if (!ggufPath) {
|
|
5
|
+
console.error("ā Error: Please provide the path to a GGUF file as the first argument");
|
|
6
|
+
console.error("Usage: bun run examples/llamacpp-filesystem.ts <path-to-gguf-file>");
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
console.log(`š Loading GGUF model from: ${ggufPath}`);
|
|
10
|
+
try {
|
|
11
|
+
// Load model from provided file path
|
|
12
|
+
const modelId = await loadModel({
|
|
13
|
+
modelSrc: ggufPath,
|
|
14
|
+
modelType: "llm",
|
|
15
|
+
modelConfig: {
|
|
16
|
+
ctx_size: 4096,
|
|
17
|
+
},
|
|
18
|
+
onProgress: (progress) => console.log(`Loading: ${progress.percentage.toFixed(1)}%`),
|
|
19
|
+
});
|
|
20
|
+
console.log(`ā
Model loaded successfully! Model ID: ${modelId}`);
|
|
21
|
+
// Create conversation history
|
|
22
|
+
const history = [
|
|
23
|
+
{ role: "user", content: "Explain Bitcoin in 3 key points" },
|
|
24
|
+
];
|
|
25
|
+
console.log("\nš¤ AI Response:");
|
|
26
|
+
process.stdout.write(""); // Start response on new line
|
|
27
|
+
// Stream completion
|
|
28
|
+
const result = completion({ modelId, history, stream: true });
|
|
29
|
+
for await (const token of result.tokenStream) {
|
|
30
|
+
process.stdout.write(token);
|
|
31
|
+
}
|
|
32
|
+
const stats = await result.stats;
|
|
33
|
+
console.log("\nš Performance Stats:", stats);
|
|
34
|
+
console.log("\n\nš Completed!");
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error("ā Error:", error);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { completion, loadModel, unloadModel } from "@qvac/sdk";
|
|
2
|
+
// Get HTTP URL from command line arguments or use default HuggingFace URL
|
|
3
|
+
const httpUrl = process.argv[2] ||
|
|
4
|
+
"https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-Q4_0.gguf";
|
|
5
|
+
console.log(`š Loading GGUF model from HTTP: ${httpUrl}`);
|
|
6
|
+
try {
|
|
7
|
+
// Load model from HTTP URL
|
|
8
|
+
const modelId = await loadModel({
|
|
9
|
+
modelSrc: httpUrl,
|
|
10
|
+
modelType: "llm",
|
|
11
|
+
modelConfig: {
|
|
12
|
+
ctx_size: 4096,
|
|
13
|
+
},
|
|
14
|
+
onProgress: (progress) => {
|
|
15
|
+
const downloadedMB = (progress.downloaded / 1024 / 1024).toFixed(2);
|
|
16
|
+
const totalMB = (progress.total / 1024 / 1024).toFixed(2);
|
|
17
|
+
console.log(`Loading: ${progress.percentage.toFixed(1)}% (${downloadedMB}MB / ${totalMB}MB)`);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
console.log(`ā
Model loaded successfully! Model ID: ${modelId}`);
|
|
21
|
+
// Create conversation history
|
|
22
|
+
const history = [
|
|
23
|
+
{ role: "user", content: "Explain quantum computing in 3 key points" },
|
|
24
|
+
];
|
|
25
|
+
console.log("\nš¤ AI Response:");
|
|
26
|
+
process.stdout.write(""); // Start response on new line
|
|
27
|
+
// Stream completion
|
|
28
|
+
const result = completion({ modelId, history, stream: true });
|
|
29
|
+
for await (const token of result.tokenStream) {
|
|
30
|
+
process.stdout.write(token);
|
|
31
|
+
}
|
|
32
|
+
const stats = await result.stats;
|
|
33
|
+
console.log("\nš Performance Stats:", stats);
|
|
34
|
+
console.log("\n\nš Completed!");
|
|
35
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error("ā Error:", error);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { completion, LLAMA_3_2_1B_INST_Q4_0, loadModel, downloadAsset, unloadModel, VERBOSITY, } from "@qvac/sdk";
|
|
2
|
+
try {
|
|
3
|
+
// First just cache the model
|
|
4
|
+
await downloadAsset({
|
|
5
|
+
assetSrc: LLAMA_3_2_1B_INST_Q4_0,
|
|
6
|
+
onProgress: (progress) => {
|
|
7
|
+
console.log(progress);
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
// Then load it in memory from cache
|
|
11
|
+
const modelId = await loadModel({
|
|
12
|
+
modelSrc: LLAMA_3_2_1B_INST_Q4_0,
|
|
13
|
+
modelType: "llm",
|
|
14
|
+
modelConfig: {
|
|
15
|
+
device: "gpu",
|
|
16
|
+
ctx_size: 2048,
|
|
17
|
+
verbosity: VERBOSITY.SILENT,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
const history = [
|
|
21
|
+
{
|
|
22
|
+
role: "user",
|
|
23
|
+
content: "Explain quantum computing in one sentence, use lots of emojis",
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
const result = completion({ modelId, history, stream: true });
|
|
27
|
+
for await (const token of result.tokenStream) {
|
|
28
|
+
process.stdout.write(token);
|
|
29
|
+
}
|
|
30
|
+
const stats = await result.stats;
|
|
31
|
+
console.log("\nš Performance Stats:", stats);
|
|
32
|
+
// Change `clearStorage: true` to delete cached model files
|
|
33
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error("ā Error:", error);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { completion, loadModel, unloadModel } from "@qvac/sdk";
|
|
2
|
+
if (process.argv.length < 3) {
|
|
3
|
+
console.error(`Specify an image file path as the first argument and a second image file path as the second (optional) argument`);
|
|
4
|
+
process.exit(1);
|
|
5
|
+
}
|
|
6
|
+
try {
|
|
7
|
+
// const modelPath = args[modelIndex + 1]!;
|
|
8
|
+
const imageFilePath = process.argv[2];
|
|
9
|
+
// Load the main model with projection in a single step
|
|
10
|
+
const modelId = await loadModel({
|
|
11
|
+
modelSrc: "https://huggingface.co/ggml-org/SmolVLM2-500M-Video-Instruct-GGUF/resolve/main/SmolVLM2-500M-Video-Instruct-Q8_0.gguf",
|
|
12
|
+
modelType: "llm",
|
|
13
|
+
projectionModelSrc: "https://huggingface.co/ggml-org/SmolVLM2-500M-Video-Instruct-GGUF/resolve/main/mmproj-SmolVLM2-500M-Video-Instruct-Q8_0.gguf",
|
|
14
|
+
modelConfig: {
|
|
15
|
+
ctx_size: 1024,
|
|
16
|
+
},
|
|
17
|
+
onProgress: (progress) => {
|
|
18
|
+
console.log(`Loading: ${progress.percentage.toFixed(1)}%`);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
//Using one particular media
|
|
22
|
+
const history = [
|
|
23
|
+
{
|
|
24
|
+
role: "user",
|
|
25
|
+
content: "What's in this image?",
|
|
26
|
+
attachments: [{ path: imageFilePath }],
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
const result = completion({ modelId, history, stream: true });
|
|
30
|
+
for await (const token of result.tokenStream) {
|
|
31
|
+
process.stdout.write(token);
|
|
32
|
+
}
|
|
33
|
+
const stats = await result.stats;
|
|
34
|
+
console.log("\nš Performance Stats:", stats);
|
|
35
|
+
console.log("--------------------------------");
|
|
36
|
+
//Using multiple media
|
|
37
|
+
if (process.argv.length < 4) {
|
|
38
|
+
console.log(`Only one image provided, terminating`);
|
|
39
|
+
process.exit(0);
|
|
40
|
+
}
|
|
41
|
+
const imageFilePath2 = process.argv[3];
|
|
42
|
+
const history2 = [
|
|
43
|
+
{
|
|
44
|
+
role: "user",
|
|
45
|
+
content: "Compare the two newspaper articles",
|
|
46
|
+
attachments: [{ path: imageFilePath }, { path: imageFilePath2 }],
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
const result2 = completion({ modelId, history: history2, stream: true });
|
|
50
|
+
for await (const token of result2.tokenStream) {
|
|
51
|
+
process.stdout.write(token);
|
|
52
|
+
}
|
|
53
|
+
const stats2 = await result2.stats;
|
|
54
|
+
console.log("\nš Performance Stats:", stats2);
|
|
55
|
+
console.log("--------------------------------");
|
|
56
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error("ā Error:", error);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { completion, loadModel, unloadModel } from "@qvac/sdk";
|
|
2
|
+
// Get GGUF file path from command line arguments
|
|
3
|
+
const ggufPath = process.argv[2];
|
|
4
|
+
if (!ggufPath) {
|
|
5
|
+
console.error("ā Error: Please provide the path to a GGUF file as the first argument");
|
|
6
|
+
console.error("Usage: bun run examples/llamacpp-native-tools.ts <path-to-gguf-file>");
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
// Tool definition
|
|
10
|
+
const tools = [
|
|
11
|
+
{
|
|
12
|
+
type: "function",
|
|
13
|
+
name: "get_horoscope",
|
|
14
|
+
description: "Get today's horoscope for an astrological sign.",
|
|
15
|
+
parameters: {
|
|
16
|
+
type: "object",
|
|
17
|
+
properties: {
|
|
18
|
+
sign: {
|
|
19
|
+
type: "string",
|
|
20
|
+
description: "An astrological sign like Taurus or Aquarius",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
required: ["sign"],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
// @ts-expect-error - Function will be used in future implementation
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
|
+
function getHoroscope(sign) {
|
|
30
|
+
return sign + " Next Tuesday you will befriend a baby otter.";
|
|
31
|
+
}
|
|
32
|
+
console.log(`š Loading GGUF model from: ${ggufPath}`);
|
|
33
|
+
try {
|
|
34
|
+
// Load model from provided file path
|
|
35
|
+
const modelId = await loadModel({
|
|
36
|
+
modelSrc: ggufPath,
|
|
37
|
+
modelType: "llm",
|
|
38
|
+
modelConfig: {
|
|
39
|
+
ctx_size: 4096,
|
|
40
|
+
},
|
|
41
|
+
onProgress: (progress) => console.log(`Loading: ${progress.percentage.toFixed(1)}%`),
|
|
42
|
+
});
|
|
43
|
+
console.log(`ā
Model loaded successfully! Model ID: ${modelId}`);
|
|
44
|
+
// Create conversation history
|
|
45
|
+
const history = [
|
|
46
|
+
{ role: "user", content: "Explain Bitcoin in 3 key points" },
|
|
47
|
+
];
|
|
48
|
+
console.log("\nš¤ AI Response:");
|
|
49
|
+
process.stdout.write(""); // Start response on new line
|
|
50
|
+
// Stream completion
|
|
51
|
+
const result = completion({ modelId, history, stream: true, tools });
|
|
52
|
+
for await (const token of result.tokenStream) {
|
|
53
|
+
process.stdout.write(token);
|
|
54
|
+
}
|
|
55
|
+
const stats = await result.stats;
|
|
56
|
+
console.log("\nš Performance Stats:", stats);
|
|
57
|
+
console.log("\n\nš Completed!");
|
|
58
|
+
await unloadModel({ modelId, clearStorage: false });
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error("ā Error:", error);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|