@qvac/sdk 0.2.7-dev.1761566029.f834aa3 → 0.4.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/README.md +26 -3
- package/dist/client/api/cancel.d.ts +1 -1
- package/dist/client/api/cancel.js +4 -3
- package/dist/client/api/completion-stream.d.ts +24 -32
- package/dist/client/api/completion-stream.js +142 -50
- package/dist/client/api/delete-cache.js +3 -2
- package/dist/client/api/download-asset.d.ts +3 -3
- package/dist/client/api/download-asset.js +12 -17
- package/dist/client/api/embed.d.ts +1 -1
- package/dist/client/api/embed.js +4 -3
- package/dist/client/api/get-model-info.d.ts +29 -0
- package/dist/client/api/get-model-info.js +14 -0
- package/dist/client/api/index.d.ts +4 -0
- package/dist/client/api/index.js +4 -0
- package/dist/client/api/load-model.d.ts +3 -3
- package/dist/client/api/load-model.js +13 -22
- package/dist/client/api/logging-stream.d.ts +1 -1
- package/dist/client/api/logging-stream.js +3 -2
- package/dist/client/api/ping.d.ts +1 -1
- package/dist/client/api/ping.js +3 -2
- package/dist/client/api/provide.d.ts +1 -1
- package/dist/client/api/provide.js +4 -3
- package/dist/client/api/rag.d.ts +3 -3
- package/dist/client/api/rag.js +13 -12
- package/dist/client/api/set-config.d.ts +7 -0
- package/dist/client/api/set-config.js +20 -0
- package/dist/client/api/stop-provider.d.ts +15 -0
- package/dist/client/api/stop-provider.js +25 -0
- package/dist/client/api/text-to-speech.d.ts +7 -0
- package/dist/client/api/text-to-speech.js +58 -0
- package/dist/client/api/transcribe.d.ts +4 -2
- package/dist/client/api/transcribe.js +9 -5
- package/dist/client/api/translate.d.ts +1 -1
- package/dist/client/api/translate.js +3 -2
- package/dist/client/api/unload-model.d.ts +5 -1
- package/dist/client/api/unload-model.js +14 -4
- package/dist/client/config-manager.d.ts +4 -0
- package/dist/client/config-manager.js +8 -0
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/init-hooks.d.ts +6 -0
- package/dist/client/init-hooks.js +37 -0
- package/dist/client/rpc/bare-client.d.ts +73 -0
- package/dist/client/rpc/bare-client.js +5 -4
- package/dist/client/rpc/bare-rpc-client.js +7 -3
- package/dist/client/rpc/expo-rpc-client.d.ts +1 -0
- package/dist/client/rpc/expo-rpc-client.js +9 -1
- package/dist/client/rpc/node-rpc-client.d.ts +1 -1
- package/dist/client/rpc/node-rpc-client.js +22 -9
- package/dist/client/rpc/rpc-client.d.ts +1 -0
- package/dist/client/rpc/rpc-client.js +27 -3
- package/dist/examples/cache-management.d.ts +2 -0
- package/dist/examples/cache-management.js +97 -0
- package/dist/examples/delegated-inference/consumer.js +2 -2
- package/dist/examples/download-with-blind-relays.d.ts +2 -0
- package/dist/examples/download-with-blind-relays.js +48 -0
- package/dist/examples/download-with-cancel.js +3 -4
- package/dist/examples/embed-hyperdrive.js +0 -1
- package/dist/examples/kv-cache-cleanup.js +0 -1
- package/dist/examples/kv-cache-custom-key.js +0 -1
- package/dist/examples/kv-cache-example.js +0 -1
- package/dist/examples/llamacpp-file-logging.js +0 -1
- package/dist/examples/llamacpp-filesystem.js +2 -2
- package/dist/examples/llamacpp-http.js +0 -1
- package/dist/examples/llamacpp-hyperdrive.js +0 -1
- package/dist/examples/llamacpp-multimodal.js +0 -1
- package/dist/examples/llamacpp-native-tools.js +118 -36
- package/dist/examples/llamacpp-sharded.d.ts +2 -0
- package/dist/examples/llamacpp-sharded.js +44 -0
- package/dist/examples/multi-model-demo.js +0 -1
- package/dist/examples/parallel-download.js +2 -2
- package/dist/examples/rag/rag-chromadb.js +0 -1
- package/dist/examples/rag/rag-hyperdb-workspaces.js +0 -1
- package/dist/examples/rag/rag-hyperdb.js +0 -1
- package/dist/examples/rag/rag-lancedb.js +0 -1
- package/dist/examples/rag/rag-sqlite.js +0 -1
- package/dist/examples/text-to-speech.d.ts +3 -0
- package/dist/examples/text-to-speech.js +137 -0
- package/dist/examples/translation/translation-indic.js +3 -1
- package/dist/examples/translation/translation-llm-context.js +0 -1
- package/dist/examples/translation/translation-llm.js +2 -2
- package/dist/examples/translation/translation-opus.js +3 -1
- package/dist/examples/translation/translation-stream.js +0 -1
- package/dist/examples/whispercpp-filesystem.js +32 -5
- package/dist/examples/whispercpp-microphone-record.js +9 -9
- package/dist/examples/whispercpp-prompt.d.ts +2 -0
- package/dist/examples/whispercpp-prompt.js +68 -0
- package/dist/expo/plugins/withMobileBundle.js +9 -3
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/models/hyperdrive/models.d.ts +1924 -100
- package/dist/models/hyperdrive/models.js +2051 -105
- package/dist/schemas/common.d.ts +420 -58
- package/dist/schemas/common.js +12 -0
- package/dist/schemas/completion-stream.d.ts +26 -22
- package/dist/schemas/completion-stream.js +9 -23
- package/dist/schemas/download-asset.d.ts +77 -2
- package/dist/schemas/download-asset.js +15 -4
- package/dist/schemas/get-model-info.d.ts +100 -0
- package/dist/schemas/get-model-info.js +40 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.js +8 -0
- package/dist/schemas/llamacpp-config.d.ts +2 -1
- package/dist/schemas/llamacpp-config.js +3 -4
- package/dist/schemas/load-model.d.ts +2316 -266
- package/dist/schemas/load-model.js +157 -10
- package/dist/schemas/model-src-utils.d.ts +98 -0
- package/dist/schemas/model-src-utils.js +31 -0
- package/dist/schemas/sdk-errors-client.d.ts +25 -0
- package/dist/schemas/sdk-errors-client.js +111 -0
- package/dist/schemas/sdk-errors-server.d.ts +55 -0
- package/dist/schemas/sdk-errors-server.js +271 -0
- package/dist/schemas/set-config.d.ts +21 -0
- package/dist/schemas/set-config.js +14 -0
- package/dist/schemas/stop-provide.d.ts +17 -0
- package/dist/schemas/stop-provide.js +15 -0
- package/dist/schemas/text-to-speech.d.ts +34 -0
- package/dist/schemas/text-to-speech.js +25 -0
- package/dist/schemas/tools.d.ts +62 -0
- package/dist/schemas/tools.js +43 -0
- package/dist/schemas/transcription.d.ts +25 -2
- package/dist/schemas/transcription.js +12 -1
- package/dist/schemas/translation-config.d.ts +33 -5
- package/dist/schemas/translation-config.js +18 -1
- package/dist/schemas/unload-model.d.ts +2 -0
- package/dist/schemas/unload-model.js +2 -0
- package/dist/schemas/whispercpp-config.d.ts +55 -18
- package/dist/schemas/whispercpp-config.js +63 -15
- package/dist/server/bare/addons/cancel.js +2 -1
- package/dist/server/bare/addons/llamacpp/create-model.d.ts +9 -2
- package/dist/server/bare/addons/llamacpp/create-model.js +23 -23
- package/dist/server/bare/addons/llamacpp/handlers/completion-stream.d.ts +10 -2
- package/dist/server/bare/addons/llamacpp/handlers/completion-stream.js +62 -43
- package/dist/server/bare/addons/llamacpp/handlers/embed.js +3 -2
- package/dist/server/bare/addons/llamacpp/kv-cache-utils.d.ts +1 -1
- package/dist/server/bare/addons/llamacpp/kv-cache-utils.js +6 -2
- package/dist/server/bare/addons/load-model.js +59 -28
- package/dist/server/bare/addons/translation/create-model.d.ts +5 -1
- package/dist/server/bare/addons/translation/create-model.js +17 -25
- package/dist/server/bare/addons/translation/handlers/translate.js +10 -1
- package/dist/server/bare/addons/tts/create-model.d.ts +10 -0
- package/dist/server/bare/addons/tts/create-model.js +25 -0
- package/dist/server/bare/addons/tts/handlers/text-to-speech.d.ts +3 -0
- package/dist/server/bare/addons/tts/handlers/text-to-speech.js +87 -0
- package/dist/server/bare/addons/tts/index.d.ts +3 -0
- package/dist/server/bare/addons/tts/index.js +2 -0
- package/dist/server/bare/addons/unload-model.js +21 -3
- package/dist/server/bare/addons/whispercpp/create-model.d.ts +5 -1
- package/dist/server/bare/addons/whispercpp/create-model.js +13 -32
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.js +41 -20
- package/dist/server/bare/delegate-rpc-client.js +3 -2
- package/dist/server/bare/hyperswarm.d.ts +3 -0
- package/dist/server/bare/hyperswarm.js +22 -1
- package/dist/server/bare/rag-hyperdb/rag-manager.js +16 -13
- package/dist/server/bare/registry/config-registry.d.ts +5 -0
- package/dist/server/bare/registry/config-registry.js +39 -0
- package/dist/server/bare/registry/logging-stream-registry.d.ts +1 -0
- package/dist/server/bare/registry/logging-stream-registry.js +7 -0
- package/dist/server/bare/registry/model-registry.d.ts +13 -0
- package/dist/server/bare/registry/model-registry.js +24 -7
- package/dist/server/rpc/handle-request.js +48 -3
- package/dist/server/rpc/handlers/completion-stream-delegated.js +2 -1
- package/dist/server/rpc/handlers/completion-stream.js +11 -4
- package/dist/server/rpc/handlers/download-asset.js +2 -3
- package/dist/server/rpc/handlers/get-model-info.d.ts +3 -0
- package/dist/server/rpc/handlers/get-model-info.js +148 -0
- package/dist/server/rpc/handlers/index.d.ts +6 -0
- package/dist/server/rpc/handlers/index.js +8 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +1 -0
- package/dist/server/rpc/handlers/load-model/download-manager.js +12 -31
- package/dist/server/rpc/handlers/load-model/http.js +51 -10
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +336 -156
- package/dist/server/rpc/handlers/load-model/index.js +1 -1
- package/dist/server/rpc/handlers/load-model/resolve.d.ts +1 -1
- package/dist/server/rpc/handlers/load-model/resolve.js +17 -60
- package/dist/server/rpc/handlers/load-model-delegated.js +7 -4
- package/dist/server/rpc/handlers/load-model.js +19 -1
- package/dist/server/rpc/handlers/provideHandler/handler.js +2 -1
- package/dist/server/rpc/handlers/rag.js +0 -3
- package/dist/server/rpc/handlers/set-config.d.ts +3 -0
- package/dist/server/rpc/handlers/set-config.js +18 -0
- package/dist/server/rpc/handlers/stopProvideHandler.d.ts +3 -0
- package/dist/server/rpc/handlers/stopProvideHandler.js +22 -0
- package/dist/server/rpc/handlers/text-to-speech.d.ts +3 -0
- package/dist/server/rpc/handlers/text-to-speech.js +7 -0
- package/dist/server/rpc/handlers/transcribe-stream.js +6 -2
- package/dist/server/rpc/handlers/unload-model.js +7 -0
- package/dist/server/utils/cache.d.ts +13 -8
- package/dist/server/utils/cache.js +69 -14
- package/dist/server/utils/checksum.d.ts +2 -0
- package/dist/server/utils/checksum.js +24 -0
- package/dist/server/utils/index.d.ts +2 -0
- package/dist/server/utils/index.js +2 -0
- package/dist/server/utils/shard-utils.d.ts +22 -0
- package/dist/server/utils/shard-utils.js +37 -0
- package/dist/server/utils/tool-integration.d.ts +13 -0
- package/dist/server/utils/tool-integration.js +43 -0
- package/dist/server/utils/tool-parser.d.ts +7 -0
- package/dist/server/utils/tool-parser.js +244 -0
- package/dist/server/worker.js +28 -10
- package/dist/utils/errors-base.d.ts +3 -0
- package/dist/utils/errors-base.js +13 -0
- package/dist/utils/errors-client.d.ts +107 -0
- package/dist/utils/errors-client.js +186 -0
- package/dist/utils/errors-server.d.ts +146 -0
- package/dist/utils/errors-server.js +253 -0
- package/dist/utils/tool-helpers.d.ts +17 -0
- package/dist/utils/tool-helpers.js +99 -0
- package/package.json +15 -11
- package/dist/examples/llamacpp-tools-routing.d.ts +0 -2
- package/dist/examples/llamacpp-tools-routing.js +0 -364
- package/dist/examples/llamacpp-tools.d.ts +0 -2
- package/dist/examples/llamacpp-tools.js +0 -81
- package/dist/server/http-server.d.ts +0 -2
- package/dist/server/http-server.js +0 -189
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import {} from "../../../../schemas/index.js";
|
|
2
|
-
import process from "bare-process";
|
|
3
2
|
const activeDownloads = new Map();
|
|
4
3
|
const clearCacheFlags = new Map();
|
|
5
4
|
export const getActiveDownload = (key) => activeDownloads.get(key);
|
|
6
5
|
export const registerDownload = (key, entry) => {
|
|
7
6
|
activeDownloads.set(key, entry);
|
|
8
|
-
registerCleanupHandlers();
|
|
9
7
|
};
|
|
10
8
|
export const unregisterDownload = (key) => {
|
|
11
9
|
activeDownloads.delete(key);
|
|
@@ -38,36 +36,19 @@ export const cancelAllDownloads = () => {
|
|
|
38
36
|
console.log(`🧹 Cancelling ${activeDownloads.size} active downloads`);
|
|
39
37
|
Array.from(activeDownloads.keys()).forEach((key) => createCancelFunction(key)());
|
|
40
38
|
};
|
|
41
|
-
// Register cleanup handlers for graceful shutdown
|
|
42
|
-
let cleanupRegistered = false;
|
|
43
39
|
let isCleaningUp = false;
|
|
44
|
-
const
|
|
45
|
-
if (
|
|
40
|
+
export const cleanupDownloads = async () => {
|
|
41
|
+
if (isCleaningUp)
|
|
46
42
|
return;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const downloadPromises = Array.from(activeDownloads.values()).map((entry) => entry.promise.catch(() => { }));
|
|
54
|
-
cancelAllDownloads();
|
|
55
|
-
if (downloadPromises.length > 0) {
|
|
56
|
-
await Promise.allSettled(downloadPromises);
|
|
57
|
-
}
|
|
43
|
+
isCleaningUp = true;
|
|
44
|
+
try {
|
|
45
|
+
const downloadPromises = Array.from(activeDownloads.values()).map((entry) => entry.promise.catch(() => { }));
|
|
46
|
+
cancelAllDownloads();
|
|
47
|
+
if (downloadPromises.length > 0) {
|
|
48
|
+
await Promise.allSettled(downloadPromises);
|
|
58
49
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
let handlingExit = false;
|
|
64
|
-
const exitHandler = async () => {
|
|
65
|
-
if (handlingExit)
|
|
66
|
-
return;
|
|
67
|
-
handlingExit = true;
|
|
68
|
-
await cleanup();
|
|
69
|
-
process.exit(0);
|
|
70
|
-
};
|
|
71
|
-
process.once("SIGTERM", () => void exitHandler());
|
|
72
|
-
process.once("SIGINT", () => void exitHandler());
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error("❌ Error during download cleanup:", error);
|
|
53
|
+
}
|
|
73
54
|
};
|
|
@@ -4,6 +4,7 @@ import fetch from "bare-fetch";
|
|
|
4
4
|
import { AbortController } from "bare-abort-controller";
|
|
5
5
|
import { getModelsCacheDir, generateShortHash } from "../../../utils/index.js";
|
|
6
6
|
import { getActiveDownload, registerDownload, unregisterDownload, createHttpDownloadKey, shouldClearCache, clearClearCacheFlag, } from "./download-manager.js";
|
|
7
|
+
import { DownloadCancelledError, HTTPError, NoResponseBodyError, ResponseBodyNotReadableError, } from "../../../../utils/errors-server.js";
|
|
7
8
|
function extractFilenameFromUrl(url) {
|
|
8
9
|
// Parse URL to get the filename from the path
|
|
9
10
|
const urlParts = url.split("/");
|
|
@@ -27,11 +28,10 @@ async function validateCachedFile(modelPath, url, signal) {
|
|
|
27
28
|
expectedSize = parseInt(response.headers.get("content-length") || "0");
|
|
28
29
|
}
|
|
29
30
|
catch (error) {
|
|
30
|
-
console.log(`⚠️ Could not get expected file size from HEAD request: ${String(error)}`);
|
|
31
|
-
|
|
32
|
-
return modelPath;
|
|
31
|
+
console.log(`⚠️ Could not get expected file size from HEAD request, will re-download: ${String(error)}`);
|
|
32
|
+
return null;
|
|
33
33
|
}
|
|
34
|
-
if (
|
|
34
|
+
if (localSize !== expectedSize) {
|
|
35
35
|
console.log(`📥 Cached file size mismatch. Expected: ${expectedSize}, Found: ${localSize}. Re-downloading...`);
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
@@ -45,7 +45,7 @@ async function validateCachedFile(modelPath, url, signal) {
|
|
|
45
45
|
}
|
|
46
46
|
async function performHttpDownload(url, modelPath, downloadKey, progressCallback, signal) {
|
|
47
47
|
if (signal?.aborted) {
|
|
48
|
-
throw new
|
|
48
|
+
throw new DownloadCancelledError();
|
|
49
49
|
}
|
|
50
50
|
console.log(`📥 Downloading model from HTTP: ${url}`);
|
|
51
51
|
// Check if file exists for resuming
|
|
@@ -78,6 +78,16 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
78
78
|
// Check if it's a 416 (Range Not Satisfiable) - file already complete
|
|
79
79
|
if (response.status === 416 && startOffset > 0) {
|
|
80
80
|
console.log(`✅ File already completely downloaded`);
|
|
81
|
+
// Send 100% progress for already complete file
|
|
82
|
+
if (progressCallback) {
|
|
83
|
+
progressCallback({
|
|
84
|
+
type: "modelProgress",
|
|
85
|
+
downloaded: startOffset,
|
|
86
|
+
total: startOffset,
|
|
87
|
+
percentage: 100,
|
|
88
|
+
downloadKey,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
81
91
|
return;
|
|
82
92
|
}
|
|
83
93
|
// Check if server doesn't support range requests
|
|
@@ -94,14 +104,14 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
94
104
|
...(signal && { signal }),
|
|
95
105
|
});
|
|
96
106
|
if (!freshResponse.ok) {
|
|
97
|
-
throw new
|
|
107
|
+
throw new HTTPError(freshResponse.status, freshResponse.statusText);
|
|
98
108
|
}
|
|
99
109
|
// Use the fresh response
|
|
100
110
|
Object.assign(response, freshResponse);
|
|
101
111
|
}
|
|
102
112
|
else if (response.status !== 206) {
|
|
103
113
|
// 206 is Partial Content (successful resume)
|
|
104
|
-
throw new
|
|
114
|
+
throw new HTTPError(response.status, response.statusText);
|
|
105
115
|
}
|
|
106
116
|
}
|
|
107
117
|
// Get total size from headers
|
|
@@ -128,7 +138,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
128
138
|
// Get the response body
|
|
129
139
|
const body = response.body;
|
|
130
140
|
if (!body) {
|
|
131
|
-
throw new
|
|
141
|
+
throw new NoResponseBodyError();
|
|
132
142
|
}
|
|
133
143
|
try {
|
|
134
144
|
// Check if body has pipe method (it's a Node/Bare stream)
|
|
@@ -180,7 +190,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
180
190
|
// Check if abort signal is triggered
|
|
181
191
|
if (signal && signal.aborted) {
|
|
182
192
|
writeStream.destroy();
|
|
183
|
-
throw new
|
|
193
|
+
throw new DownloadCancelledError();
|
|
184
194
|
}
|
|
185
195
|
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
186
196
|
downloadedBytes += buffer.length;
|
|
@@ -259,7 +269,7 @@ async function performHttpDownload(url, modelPath, downloadKey, progressCallback
|
|
|
259
269
|
});
|
|
260
270
|
}
|
|
261
271
|
else {
|
|
262
|
-
throw new
|
|
272
|
+
throw new ResponseBodyNotReadableError();
|
|
263
273
|
}
|
|
264
274
|
}
|
|
265
275
|
}
|
|
@@ -288,10 +298,41 @@ export async function downloadModelFromHttp(url, progressCallback) {
|
|
|
288
298
|
// Check if already cached
|
|
289
299
|
const cachedPath = await validateCachedFile(modelPath, url, abortController.signal);
|
|
290
300
|
if (cachedPath) {
|
|
301
|
+
if (progressCallback) {
|
|
302
|
+
try {
|
|
303
|
+
const stats = await fsPromises.stat(cachedPath);
|
|
304
|
+
progressCallback({
|
|
305
|
+
type: "modelProgress",
|
|
306
|
+
downloaded: stats.size,
|
|
307
|
+
total: stats.size,
|
|
308
|
+
percentage: 100,
|
|
309
|
+
downloadKey,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
// Ignore stat errors, file exists but might not be readable
|
|
314
|
+
}
|
|
315
|
+
}
|
|
291
316
|
return cachedPath;
|
|
292
317
|
}
|
|
293
318
|
// Download the file
|
|
294
319
|
await performHttpDownload(url, modelPath, downloadKey, progressCallback, abortController.signal);
|
|
320
|
+
// Send final 100% progress update
|
|
321
|
+
if (progressCallback) {
|
|
322
|
+
try {
|
|
323
|
+
const stats = await fsPromises.stat(modelPath);
|
|
324
|
+
progressCallback({
|
|
325
|
+
type: "modelProgress",
|
|
326
|
+
downloaded: stats.size,
|
|
327
|
+
total: stats.size,
|
|
328
|
+
percentage: 100,
|
|
329
|
+
downloadKey,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
// Ignore stat errors
|
|
334
|
+
}
|
|
335
|
+
}
|
|
295
336
|
return modelPath;
|
|
296
337
|
}
|
|
297
338
|
catch (error) {
|