@qvac/sdk 0.13.5 → 0.14.1

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.
Files changed (226) hide show
  1. package/NOTICE +95 -1151
  2. package/README.md +1 -2
  3. package/bare-imports.json +0 -5
  4. package/dist/client/api/bci-transcribe.js +2 -1
  5. package/dist/client/api/download-asset.js +2 -1
  6. package/dist/client/api/finetune.js +6 -5
  7. package/dist/client/api/index.d.ts +1 -0
  8. package/dist/client/api/index.js +1 -0
  9. package/dist/client/api/load-model.d.ts +11 -8
  10. package/dist/client/api/load-model.js +6 -6
  11. package/dist/client/api/subscribe-logs.d.ts +28 -0
  12. package/dist/client/api/subscribe-logs.js +43 -0
  13. package/dist/client/api/text-to-speech.js +2 -1
  14. package/dist/client/config-loader/config-utils.js +2 -4
  15. package/dist/client/config-loader/resolve-config.bare.js +4 -3
  16. package/dist/client/parse-input.d.ts +3 -0
  17. package/dist/client/parse-input.js +14 -0
  18. package/dist/client/rpc/expo-rpc-client.js +2 -11
  19. package/dist/client/rpc/node-rpc-client.js +8 -2
  20. package/dist/client/rpc/rpc-client.js +39 -7
  21. package/dist/commands/bundle/constants.js +2 -1
  22. package/dist/commands/bundle/entry-gen.d.ts +1 -1
  23. package/dist/commands/bundle/entry-gen.js +6 -6
  24. package/dist/commands/bundle/index.js +3 -1
  25. package/dist/commands/bundle/resolve-sdk-import.d.ts +6 -0
  26. package/dist/commands/bundle/resolve-sdk-import.js +60 -0
  27. package/dist/examples/bci/bci-filesystem-streaming.js +14 -14
  28. package/dist/examples/bci/bci-filesystem.js +17 -13
  29. package/dist/examples/cache-management.js +38 -38
  30. package/dist/examples/cancel-by-request-id.js +9 -9
  31. package/dist/examples/completion-events.js +20 -14
  32. package/dist/examples/completion-stop-reason.js +13 -7
  33. package/dist/examples/concurrent-completion-collision.js +7 -7
  34. package/dist/examples/config-reload.js +7 -8
  35. package/dist/examples/default-config-usage.js +4 -4
  36. package/dist/examples/delegated-inference/composite.js +14 -10
  37. package/dist/examples/delegated-inference/consumer-profiled.js +13 -13
  38. package/dist/examples/delegated-inference/consumer.js +16 -12
  39. package/dist/examples/delegated-inference/provider.js +12 -12
  40. package/dist/examples/diffusion-esrgan-upscale.js +19 -15
  41. package/dist/examples/diffusion-flux2-klein-img2img.js +16 -11
  42. package/dist/examples/diffusion-flux2-klein.js +14 -9
  43. package/dist/examples/diffusion-img2img.js +9 -10
  44. package/dist/examples/diffusion-img2vid.js +17 -12
  45. package/dist/examples/diffusion-simple.js +1 -1
  46. package/dist/examples/diffusion-txt2img.js +14 -9
  47. package/dist/examples/diffusion-txt2vid.js +15 -10
  48. package/dist/examples/download-with-blind-relays.js +16 -21
  49. package/dist/examples/download-with-cancel.js +15 -16
  50. package/dist/examples/embed-multi-gpu.js +3 -4
  51. package/dist/examples/embed-p2p.js +11 -7
  52. package/dist/examples/finetune/llamacpp-finetune.js +7 -7
  53. package/dist/examples/kv-cache-cleanup.js +35 -35
  54. package/dist/examples/kv-cache-custom-key.js +24 -24
  55. package/dist/examples/kv-cache-example.js +9 -9
  56. package/dist/examples/llamacpp-cache.js +18 -14
  57. package/dist/examples/llamacpp-dynamic-tools.js +15 -9
  58. package/dist/examples/llamacpp-filesystem.js +15 -9
  59. package/dist/examples/llamacpp-http.js +12 -10
  60. package/dist/examples/llamacpp-multi-gpu.js +4 -4
  61. package/dist/examples/llamacpp-multimodal.js +13 -9
  62. package/dist/examples/llamacpp-p2p.js +8 -4
  63. package/dist/examples/llamacpp-sharded.js +5 -5
  64. package/dist/examples/llamacpp-structured-output.js +15 -9
  65. package/dist/examples/logging-file-transport.js +3 -3
  66. package/dist/examples/logging-global.d.ts +2 -0
  67. package/dist/examples/logging-global.js +34 -0
  68. package/dist/examples/logging-streaming.js +7 -10
  69. package/dist/examples/mcp-websearch.js +24 -18
  70. package/dist/examples/multi-model-demo.js +17 -11
  71. package/dist/examples/ocr-fasttext.js +14 -16
  72. package/dist/examples/parallel-download.js +7 -7
  73. package/dist/examples/plugins.js +40 -28
  74. package/dist/examples/profiling/basic.js +16 -10
  75. package/dist/examples/profiling/per-call.js +17 -11
  76. package/dist/examples/quickstart.bare.d.ts +2 -0
  77. package/dist/examples/quickstart.bare.js +18 -0
  78. package/dist/examples/quickstart.js +10 -3
  79. package/dist/examples/rag/rag-chromadb.js +18 -14
  80. package/dist/examples/rag/rag-hyperdb/cancellation.js +17 -14
  81. package/dist/examples/rag/rag-hyperdb/ingest.js +14 -12
  82. package/dist/examples/rag/rag-hyperdb/pipeline.js +19 -17
  83. package/dist/examples/rag/rag-hyperdb/workspaces.js +31 -27
  84. package/dist/examples/rag/rag-lancedb.js +12 -8
  85. package/dist/examples/rag/rag-sqlite.js +11 -7
  86. package/dist/examples/registry-query.js +17 -17
  87. package/dist/examples/seed-p2p.js +10 -6
  88. package/dist/examples/suspend-resume.js +20 -16
  89. package/dist/examples/tools/llamacpp-native-tools.js +24 -18
  90. package/dist/examples/tools/llamacpp-tools-gemma4.js +14 -8
  91. package/dist/examples/tools/llamacpp-tools-harmony-multiturn.js +20 -14
  92. package/dist/examples/tools/llamacpp-tools-pythonic.js +14 -8
  93. package/dist/examples/tools/llamacpp-tools-qwen35.js +14 -8
  94. package/dist/examples/transcription/parakeet-ctc-filesystem.js +12 -9
  95. package/dist/examples/transcription/parakeet-microphone-record.js +15 -9
  96. package/dist/examples/transcription/parakeet-microphone-stream.js +15 -9
  97. package/dist/examples/transcription/parakeet-sortformer-streaming.js +12 -6
  98. package/dist/examples/transcription/parakeet-sortformer.js +3 -5
  99. package/dist/examples/transcription/parakeet-tdt-filesystem.js +13 -10
  100. package/dist/examples/transcription/whispercpp-filesystem-streaming.js +16 -17
  101. package/dist/examples/transcription/whispercpp-filesystem.js +14 -10
  102. package/dist/examples/transcription/whispercpp-microphone-conversation.js +10 -10
  103. package/dist/examples/transcription/whispercpp-microphone-record.js +6 -6
  104. package/dist/examples/transcription/whispercpp-prompt.js +14 -10
  105. package/dist/examples/translation/translation-bergamot-batch.js +11 -7
  106. package/dist/examples/translation/translation-bergamot-pivot.js +13 -9
  107. package/dist/examples/translation/translation-bergamot.js +8 -4
  108. package/dist/examples/translation/translation-indic.js +8 -4
  109. package/dist/examples/translation/translation-llm-afriquegemma.js +7 -3
  110. package/dist/examples/translation/translation-llm-context.js +8 -4
  111. package/dist/examples/translation/translation-llm.js +7 -3
  112. package/dist/examples/translation/translation-stream.js +4 -4
  113. package/dist/examples/tts/chatterbox.js +19 -11
  114. package/dist/examples/tts/llm-to-tts-streaming.js +27 -14
  115. package/dist/examples/tts/supertonic-multilingual.js +18 -14
  116. package/dist/examples/tts/supertonic.js +19 -15
  117. package/dist/examples/tts/utils.js +1 -1
  118. package/dist/examples/vla-pi05.js +18 -14
  119. package/dist/examples/vla-smolvla.js +18 -14
  120. package/dist/examples/voice-assistant/voice-assistant.js +12 -12
  121. package/dist/index.d.ts +3 -4
  122. package/dist/index.js +3 -4
  123. package/dist/logging/client-logger.js +2 -1
  124. package/dist/logging/index.d.ts +1 -1
  125. package/dist/logging/index.js +1 -1
  126. package/dist/logging/namespaces.d.ts +1 -0
  127. package/dist/logging/namespaces.js +2 -0
  128. package/dist/logging/server-logger.js +1 -4
  129. package/dist/logging/utils.js +6 -1
  130. package/dist/models/registry/index.d.ts +17 -0
  131. package/dist/models/registry/index.js +20 -1
  132. package/dist/models/registry/models.d.ts +1062 -38
  133. package/dist/models/registry/models.js +3546 -2490
  134. package/dist/pear/pre.js +2 -2
  135. package/dist/schemas/bci-config.d.ts +37 -0
  136. package/dist/schemas/bci-config.js +2 -0
  137. package/dist/schemas/bci.d.ts +2 -0
  138. package/dist/schemas/common.d.ts +171 -94
  139. package/dist/schemas/completion-stream.d.ts +6 -3
  140. package/dist/schemas/completion-stream.js +10 -2
  141. package/dist/schemas/download-asset.d.ts +5 -5
  142. package/dist/schemas/engine-addon-map.d.ts +1 -1
  143. package/dist/schemas/engine-addon-map.js +6 -3
  144. package/dist/schemas/error.js +6 -1
  145. package/dist/schemas/llamacpp-config.d.ts +27 -8
  146. package/dist/schemas/llamacpp-config.js +19 -2
  147. package/dist/schemas/load-model.d.ts +4170 -570
  148. package/dist/schemas/load-model.js +85 -26
  149. package/dist/schemas/logging-stream.js +7 -1
  150. package/dist/schemas/model-src-utils.d.ts +6 -6
  151. package/dist/schemas/model-types.d.ts +14 -15
  152. package/dist/schemas/model-types.js +10 -11
  153. package/dist/schemas/ocr.d.ts +10 -8
  154. package/dist/schemas/ocr.js +8 -6
  155. package/dist/schemas/plugin.d.ts +6 -5
  156. package/dist/schemas/plugin.js +4 -4
  157. package/dist/schemas/rag.d.ts +4 -4
  158. package/dist/schemas/registry.d.ts +8 -8
  159. package/dist/schemas/registry.js +1 -1
  160. package/dist/schemas/reload-config.d.ts +6 -6
  161. package/dist/schemas/sdcpp-config.d.ts +12 -12
  162. package/dist/schemas/sdk-config.d.ts +171 -117
  163. package/dist/schemas/sdk-config.js +5 -5
  164. package/dist/schemas/sdk-errors-client.d.ts +1 -0
  165. package/dist/schemas/sdk-errors-client.js +7 -2
  166. package/dist/schemas/text-to-speech.d.ts +157 -13
  167. package/dist/schemas/text-to-speech.js +70 -7
  168. package/dist/schemas/transcription-config.d.ts +5 -1
  169. package/dist/schemas/transcription-config.js +2 -0
  170. package/dist/schemas/transcription.d.ts +3 -0
  171. package/dist/schemas/transcription.js +2 -1
  172. package/dist/schemas/translate.d.ts +6 -6
  173. package/dist/schemas/translate.js +2 -3
  174. package/dist/schemas/translation-config.d.ts +20 -20
  175. package/dist/server/bare/hyperswarm.js +3 -3
  176. package/dist/server/bare/ops/transcribe.js +46 -15
  177. package/dist/server/bare/plugins/bci-whispercpp-transcription/args.d.ts +3 -0
  178. package/dist/server/bare/plugins/bci-whispercpp-transcription/args.js +13 -0
  179. package/dist/server/bare/plugins/bci-whispercpp-transcription/plugin.d.ts +41 -0
  180. package/dist/server/bare/plugins/bci-whispercpp-transcription/plugin.js +6 -11
  181. package/dist/server/bare/plugins/bci-whispercpp-transcription/resolve-config.d.ts +75 -0
  182. package/dist/server/bare/plugins/bci-whispercpp-transcription/resolve-config.js +11 -0
  183. package/dist/server/bare/plugins/{onnx-ocr → ggml-ocr}/plugin.d.ts +16 -10
  184. package/dist/server/bare/plugins/{onnx-ocr → ggml-ocr}/plugin.js +25 -18
  185. package/dist/server/bare/plugins/index.d.ts +1 -1
  186. package/dist/server/bare/plugins/index.js +1 -1
  187. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stats.d.ts +10 -0
  188. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stats.js +29 -0
  189. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +4 -22
  190. package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +15 -7
  191. package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +7 -7
  192. package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +2 -0
  193. package/dist/server/bare/plugins/sdcpp-generation/plugin.d.ts +10 -10
  194. package/dist/server/bare/plugins/tts-ggml/plugin.d.ts +14 -8
  195. package/dist/server/bare/plugins/tts-ggml/plugin.js +12 -0
  196. package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +3 -1
  197. package/dist/server/bare/registry/logging-stream-registry.d.ts +4 -2
  198. package/dist/server/bare/registry/logging-stream-registry.js +12 -7
  199. package/dist/server/bare/registry/model-config-utils.js +2 -2
  200. package/dist/server/bare/registry/registry-client.js +1 -1
  201. package/dist/server/bare/runtime-lifecycle.d.ts +9 -0
  202. package/dist/server/bare/runtime-lifecycle.js +24 -0
  203. package/dist/server/bare/types/addon-responses.d.ts +1 -0
  204. package/dist/server/env.js +7 -10
  205. package/dist/server/plugins/registry.js +2 -4
  206. package/dist/server/rpc/handlers/load-model/handler.js +2 -4
  207. package/dist/server/rpc/handlers/load-model/http.js +253 -51
  208. package/dist/server/rpc/handlers/logging-stream.js +4 -2
  209. package/dist/server/rpc/handlers/plugin-invoke.js +5 -16
  210. package/dist/server/utils/completion-normalizer.js +13 -4
  211. package/dist/server/utils/worker-lock.js +5 -5
  212. package/dist/server/worker-core.d.ts +1 -1
  213. package/dist/server/worker-core.js +28 -18
  214. package/dist/utils/errors-client.d.ts +3 -0
  215. package/dist/utils/errors-client.js +5 -0
  216. package/dist/utils/errors-server.d.ts +2 -0
  217. package/dist/utils/errors-server.js +3 -0
  218. package/dist/utils/zod-error.d.ts +3 -0
  219. package/dist/utils/zod-error.js +4 -0
  220. package/package.json +21 -24
  221. package/dist/polyfills/bare-globals.d.ts +0 -2
  222. package/dist/polyfills/bare-globals.js +0 -4
  223. package/dist/polyfills/bare-globals.noop.d.ts +0 -2
  224. package/dist/polyfills/bare-globals.noop.js +0 -1
  225. /package/dist/server/bare/plugins/{onnx-ocr → ggml-ocr}/ops/ocr-stream.d.ts +0 -0
  226. /package/dist/server/bare/plugins/{onnx-ocr → ggml-ocr}/ops/ocr-stream.js +0 -0
@@ -3,7 +3,7 @@ import { embed, loadModel, unloadModel, GTE_LARGE_FP16 } from "@qvac/sdk";
3
3
  import { ChromaClient } from "chromadb";
4
4
  // Setup instructions for ChromaDB server
5
5
  const CHROMADB_SETUP_INSTRUCTIONS = `
6
- 🚀 To run this example, you need a ChromaDB server running locally.
6
+ ▸ To run this example, you need a ChromaDB server running locally.
7
7
 
8
8
  Setup options:
9
9
 
@@ -21,12 +21,12 @@ async function initializeChromaClient() {
21
21
  const client = new ChromaClient({ host: "localhost", port: 8000 });
22
22
  try {
23
23
  await client.heartbeat();
24
- console.log("✅ Connected to ChromaDB server");
24
+ console.log("▸ Connected to ChromaDB server");
25
25
  return client;
26
26
  }
27
27
  catch {
28
- console.error("❌ Failed to connect to ChromaDB server");
29
- console.error("Please ensure the server is running on localhost:8000");
28
+ console.error("✖ Failed to connect to ChromaDB server");
29
+ console.error("▸ Please ensure the server is running on localhost:8000");
30
30
  console.error(CHROMADB_SETUP_INSTRUCTIONS);
31
31
  process.exit(1);
32
32
  }
@@ -34,11 +34,17 @@ async function initializeChromaClient() {
34
34
  try {
35
35
  // Get query from command line or use default
36
36
  const query = process.argv[2] || "machine learning algorithms";
37
- console.log(`🔍 Query: "${query}"`);
37
+ console.log(`▸ Query: "${query}"`);
38
38
  const client = await initializeChromaClient();
39
39
  const modelId = await loadModel({
40
40
  modelSrc: GTE_LARGE_FP16,
41
- onProgress: (p) => console.log(`Loading model... ${Math.round(p.percentage)}%`),
41
+ onProgress: (p) => {
42
+ const mb = (n) => (n / 1e6).toFixed(1);
43
+ const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
44
+ process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
45
+ if (p.percentage >= 100)
46
+ process.stderr.write("\n");
47
+ },
42
48
  });
43
49
  // Sample corpus
44
50
  const samples = [
@@ -81,14 +87,14 @@ try {
81
87
  await client.deleteCollection({ name: collectionName });
82
88
  }
83
89
  catch (e) {
84
- console.warn(`Collection didn't exist, no need to delete: ${String(e)}`);
90
+ console.warn(`▸ Collection didn't exist, no need to delete: ${String(e)}`);
85
91
  }
86
92
  const collection = await client.createCollection({
87
93
  name: collectionName,
88
94
  embeddingFunction: null,
89
95
  });
90
96
  // Embed and add documents (we're bringing our own embeddings)
91
- console.log("📚 Embedding documents...");
97
+ console.log("▸ Embedding documents...");
92
98
  const ids = [];
93
99
  const documents = [];
94
100
  const embeddings = [];
@@ -102,7 +108,7 @@ try {
102
108
  documents,
103
109
  embeddings,
104
110
  });
105
- console.log("🔎 Searching for similar documents...");
111
+ console.log("▸ Searching for similar documents...");
106
112
  const { embedding: queryEmbedding } = await embed({ modelId, text: query });
107
113
  // Query top 3 by vector similarity and include distances
108
114
  const res = await collection.query({
@@ -110,19 +116,17 @@ try {
110
116
  nResults: 3,
111
117
  include: ["documents", "distances"],
112
118
  });
113
- console.log("\n📋 Top 3 most similar documents:");
119
+ console.log("▸ Top 3 most similar documents:");
114
120
  const docs = res.documents?.[0] ?? [];
115
121
  const dists = res.distances?.[0] ?? [];
116
122
  for (let i = 0; i < docs.length; i++) {
117
- console.log("=".repeat(50) + " Top result:");
118
- console.log(`\n${i + 1}. (Score: ${dists[i]?.toFixed(4)})`);
123
+ console.log(`${i + 1}. (Score: ${dists[i]?.toFixed(4)})`);
119
124
  console.log(` ${docs[i]}`);
120
- console.log("=".repeat(100));
121
125
  console.log();
122
126
  }
123
127
  await unloadModel({ modelId });
124
128
  }
125
129
  catch (error) {
126
- console.error("❌ Error:", error);
130
+ console.error("✖", error);
127
131
  process.exit(1);
128
132
  }
@@ -15,19 +15,23 @@ function generateDocuments(count) {
15
15
  });
16
16
  }
17
17
  try {
18
- console.log("RAG Cancellation Example\n");
18
+ console.log("▸ RAG Cancellation Example");
19
19
  // Load embedding model
20
- console.log("Loading embedding model...");
20
+ console.log("▸ Loading embedding model...");
21
21
  const modelId = await loadModel({
22
22
  modelSrc: GTE_LARGE_FP16,
23
- onProgress: (progress) => {
24
- process.stdout.write(`\r ${progress.percentage.toFixed(1)}%`);
23
+ onProgress: (p) => {
24
+ const mb = (n) => (n / 1e6).toFixed(1);
25
+ const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
26
+ process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
27
+ if (p.percentage >= 100)
28
+ process.stderr.write("\n");
25
29
  },
26
30
  });
27
- console.log("\n✅ Model loaded\n");
31
+ console.log("▸ Model loaded");
28
32
  // Generate documents
29
33
  const documents = generateDocuments(200);
30
- console.log(`📄 Processing ${documents.length} documents...\n`);
34
+ console.log(`▸ Processing ${documents.length} documents...`);
31
35
  let progressCount = 0;
32
36
  let cancelled = false;
33
37
  // Capture the decorated promise so we can cancel by `requestId` (the
@@ -40,10 +44,9 @@ try {
40
44
  progressInterval: 50,
41
45
  onProgress: (stage, current, total) => {
42
46
  progressCount++;
43
- const pct = total > 0 ? Math.round((current / total) * 100) : 0;
44
- console.log(` [${stage}] ${current}/${total} (${pct}%)`);
47
+ console.log(`▸ ${stage} ${current}/${total}`);
45
48
  if (!cancelled && stage === "embedding" && current > 10) {
46
- console.log("\n🛑 Triggering cancellation...\n");
49
+ console.log("▸ Triggering cancellation...");
47
50
  cancelled = true;
48
51
  void cancel({ requestId: ingest.requestId });
49
52
  }
@@ -51,15 +54,15 @@ try {
51
54
  });
52
55
  try {
53
56
  await ingest;
54
- console.log("\n⚠️ Ingest completed (cancellation didn't interrupt in time)");
57
+ console.log("▸ Ingest completed (cancellation didn't interrupt in time)");
55
58
  }
56
59
  catch (error) {
57
60
  const msg = error instanceof Error ? error.message : String(error);
58
61
  const wasCancelled = msg.toLowerCase().includes("cancel") ||
59
62
  msg.toLowerCase().includes("abort");
60
63
  if (wasCancelled) {
61
- console.log("✅ Operation cancelled successfully!");
62
- console.log(` Progress updates received: ${progressCount}`);
64
+ console.log("▸ Operation cancelled successfully!");
65
+ console.log(`▸ Progress updates received: ${progressCount}`);
63
66
  }
64
67
  else {
65
68
  throw error;
@@ -68,10 +71,10 @@ try {
68
71
  // Cleanup (workspace may not exist if cancelled early)
69
72
  await ragCloseWorkspace({ workspace: WORKSPACE, deleteOnClose: true }).catch(() => { });
70
73
  await unloadModel({ modelId });
71
- console.log("✅ Done");
74
+ console.log("▸ Done");
72
75
  process.exit(0);
73
76
  }
74
77
  catch (error) {
75
- console.error("❌ Error:", error);
78
+ console.error("✖", error);
76
79
  process.exit(1);
77
80
  }
@@ -3,11 +3,15 @@ try {
3
3
  // Get query from command line or use default
4
4
  const query = process.argv[2] || "machine learning algorithms";
5
5
  const workspace = "ingest-example";
6
- console.log(`🔍 Query: "${query}"`);
6
+ console.log(`▸ Query: "${query}"`);
7
7
  const modelId = await loadModel({
8
8
  modelSrc: GTE_LARGE_FP16,
9
- onProgress: (progress) => {
10
- console.log(`Loading model... ${progress.percentage.toFixed(1)}%`);
9
+ onProgress: (p) => {
10
+ const mb = (n) => (n / 1e6).toFixed(1);
11
+ const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
12
+ process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
13
+ if (p.percentage >= 100)
14
+ process.stderr.write("\n");
11
15
  },
12
16
  });
13
17
  const samples = [
@@ -20,35 +24,33 @@ try {
20
24
  "Cloud computing delivers computing services over the internet, allowing users to access resources like storage, processing power, and applications on-demand from anywhere.",
21
25
  "Cybersecurity protects digital systems, networks, and data from malicious attacks, unauthorized access, and various forms of cyber threats through multiple layers of defense.",
22
26
  ];
23
- console.log("📚 Ingesting documents...");
27
+ console.log("▸ Ingesting documents...");
24
28
  const result = await ragIngest({
25
29
  modelId,
26
30
  workspace,
27
31
  documents: samples,
28
32
  chunk: false,
29
33
  });
30
- console.log(`✅ Ingested ${result.processed.length} documents`);
31
- console.log("🔎 Searching for similar documents...");
34
+ console.log(`▸ Ingested ${result.processed.length} documents`);
35
+ console.log("▸ Searching for similar documents...");
32
36
  const results = await ragSearch({
33
37
  modelId,
34
38
  workspace,
35
39
  query,
36
40
  topK: 3,
37
41
  });
38
- console.log("\n📋 Top 3 most similar documents:");
42
+ console.log("▸ Top 3 most similar documents:");
39
43
  results.forEach((result, index) => {
40
- console.log("=".repeat(50) + " Top result:");
41
- console.log(`\n${index + 1}. (Score: ${result.score})`);
44
+ console.log(`${index + 1}. (Score: ${result.score})`);
42
45
  console.log(` ${result.content}`);
43
- console.log("=".repeat(100));
44
46
  console.log();
45
47
  });
46
48
  // Cleanup: close and delete workspace
47
49
  await ragCloseWorkspace({ workspace, deleteOnClose: true });
48
- console.log(`\n🗑️ Deleted '${workspace}' workspace`);
50
+ console.log(`▸ Deleted '${workspace}' workspace`);
49
51
  await unloadModel({ modelId });
50
52
  }
51
53
  catch (error) {
52
- console.error("❌ Error:", error);
54
+ console.error("✖", error);
53
55
  process.exit(1);
54
56
  }
@@ -2,13 +2,17 @@ import { loadModel, unloadModel, embed, GTE_LARGE_FP16, ragChunk, ragSaveEmbeddi
2
2
  try {
3
3
  // Get query from command line or use default
4
4
  const query = process.argv[2] || "machine learning algorithms";
5
- console.log("🔧 RAG Pipeline Example (Segregated Flow)\n");
6
- console.log(`🔍 Query: "${query}"`);
5
+ console.log("▸ RAG Pipeline Example (Segregated Flow)");
6
+ console.log(`▸ Query: "${query}"`);
7
7
  const workspace = "pipeline-example";
8
8
  const modelId = await loadModel({
9
9
  modelSrc: GTE_LARGE_FP16,
10
- onProgress: (progress) => {
11
- console.log(`Loading model... ${progress.percentage.toFixed(1)}%`);
10
+ onProgress: (p) => {
11
+ const mb = (n) => (n / 1e6).toFixed(1);
12
+ const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
13
+ process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
14
+ if (p.percentage >= 100)
15
+ process.stderr.write("\n");
12
16
  },
13
17
  });
14
18
  const samples = [
@@ -21,7 +25,7 @@ try {
21
25
  "Cloud computing delivers computing services over the internet, allowing users to access resources like storage, processing power, and applications on-demand from anywhere.",
22
26
  "Cybersecurity protects digital systems, networks, and data from malicious attacks, unauthorized access, and various forms of cyber threats through multiple layers of defense.",
23
27
  ];
24
- console.log("\n📝 Step 1: Chunking documents...");
28
+ console.log("▸ Step 1: Chunking documents...");
25
29
  const chunks = await ragChunk({
26
30
  documents: samples,
27
31
  chunkOpts: {
@@ -29,8 +33,8 @@ try {
29
33
  chunkOverlap: 20,
30
34
  },
31
35
  });
32
- console.log(` Created ${chunks.length} chunks`);
33
- console.log("\n🧠 Step 2: Generating embeddings (batch)...");
36
+ console.log(`▸ Created ${chunks.length} chunks`);
37
+ console.log("▸ Step 2: Generating embeddings (batch)...");
34
38
  const texts = chunks.map((chunk) => chunk.content);
35
39
  const { embedding: embeddings } = await embed({ modelId, text: texts });
36
40
  const embeddedDocs = chunks.map((chunk, i) => ({
@@ -39,35 +43,33 @@ try {
39
43
  embedding: embeddings[i],
40
44
  embeddingModelId: modelId,
41
45
  }));
42
- console.log(` Generated ${embeddedDocs.length} embeddings`);
43
- console.log("\n💾 Step 3: Saving to vector database...");
46
+ console.log(`▸ Generated ${embeddedDocs.length} embeddings`);
47
+ console.log("▸ Step 3: Saving to vector database...");
44
48
  const saveResult = await ragSaveEmbeddings({
45
49
  workspace,
46
50
  documents: embeddedDocs,
47
51
  });
48
52
  const saved = saveResult.filter((r) => r.status === "fulfilled").length;
49
- console.log(` Saved ${saved}/${saveResult.length} documents`);
50
- console.log("\n🔎 Step 4: Searching...");
53
+ console.log(`▸ Saved ${saved}/${saveResult.length} documents`);
54
+ console.log("▸ Step 4: Searching...");
51
55
  const results = await ragSearch({
52
56
  workspace,
53
57
  modelId,
54
58
  query,
55
59
  topK: 3,
56
60
  });
57
- console.log("\n📋 Top 3 most similar documents:");
61
+ console.log("▸ Top 3 most similar documents:");
58
62
  results.forEach((result, index) => {
59
- console.log("=".repeat(50) + " Top result:");
60
- console.log(`\n${index + 1}. (Score: ${result.score})`);
63
+ console.log(`${index + 1}. (Score: ${result.score})`);
61
64
  console.log(` ${result.content}`);
62
- console.log("=".repeat(100));
63
65
  console.log();
64
66
  });
65
67
  // Cleanup: close and delete workspace
66
68
  await ragCloseWorkspace({ workspace, deleteOnClose: true });
67
- console.log(`🗑️ Deleted '${workspace}' workspace`);
69
+ console.log(`▸ Deleted '${workspace}' workspace`);
68
70
  await unloadModel({ modelId });
69
71
  }
70
72
  catch (error) {
71
- console.error("❌ Error:", error);
73
+ console.error("✖", error);
72
74
  process.exit(1);
73
75
  }
@@ -1,12 +1,17 @@
1
1
  import { loadModel, unloadModel, GTE_LARGE_FP16, ragIngest, ragSearch, ragDeleteEmbeddings, ragListWorkspaces, ragCloseWorkspace, ragReindex, } from "@qvac/sdk";
2
2
  try {
3
- console.log("🚀 RAG Workspaces with Chunking Example\n");
3
+ console.log("▸ RAG Workspaces with Chunking Example");
4
4
  // Load model
5
5
  const modelId = await loadModel({
6
6
  modelSrc: GTE_LARGE_FP16,
7
- onProgress: (p) => process.stdout.write(`\rLoading: ${Math.round(p.percentage * 100)}%`),
7
+ onProgress: (p) => {
8
+ const mb = (n) => (n / 1e6).toFixed(1);
9
+ const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
10
+ process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
11
+ if (p.percentage >= 100)
12
+ process.stderr.write("\n");
13
+ },
8
14
  });
9
- console.log("\n");
10
15
  // Medical articles (will be chunked)
11
16
  const medicalArticles = [
12
17
  `COVID-19: A Comprehensive Overview
@@ -68,7 +73,7 @@ try {
68
73
  "Deep learning neural networks enable breakthroughs in computer vision and natural language processing.",
69
74
  ];
70
75
  // Ingest medical articles with chunking
71
- console.log("📚 Ingesting medical articles with chunking...");
76
+ console.log("▸ Ingesting medical articles with chunking...");
72
77
  const medicalResult = await ragIngest({
73
78
  modelId,
74
79
  workspace: "medical",
@@ -81,16 +86,16 @@ try {
81
86
  splitStrategy: "token",
82
87
  },
83
88
  });
84
- console.log(`✅ Created ${medicalResult.processed.length} chunks from medical articles`);
89
+ console.log(`▸ Created ${medicalResult.processed.length} chunks from medical articles`);
85
90
  // Ingest tech docs without chunking
86
- console.log("\n📚 Ingesting tech documents...");
91
+ console.log("\n▸ Ingesting tech documents...");
87
92
  const techResult = await ragIngest({
88
93
  modelId,
89
94
  workspace: "technology",
90
95
  documents: techDocs,
91
96
  chunk: false,
92
97
  });
93
- console.log(`✅ Ingested ${techResult.processed.length} tech documents`);
98
+ console.log(`▸ Ingested ${techResult.processed.length} tech documents`);
94
99
  // Test searches
95
100
  const searches = [
96
101
  { workspace: "medical", query: "COVID symptoms fever", label: "Medical" },
@@ -98,20 +103,20 @@ try {
98
103
  { workspace: "technology", query: "neural networks", label: "Tech" },
99
104
  { workspace: "technology", query: "COVID", label: "Tech (isolation test)" },
100
105
  ];
101
- console.log("\n🔍 Running searches:");
106
+ console.log("\n▸ Running searches:");
102
107
  for (const { workspace, query, label } of searches) {
103
108
  const results = await ragSearch({ modelId, workspace, query, topK: 1 });
104
109
  console.log(`\n${label}: "${query}"`);
105
110
  if (results.length > 0 && results[0]) {
106
- console.log(` ✓ Score: ${results[0].score.toFixed(3)}`);
107
- console.log(` ✓ Match: ${results[0].content.substring(0, 80)}...`);
111
+ console.log(` Score: ${results[0].score.toFixed(3)}`);
112
+ console.log(` Match: ${results[0].content.substring(0, 80)}...`);
108
113
  }
109
114
  else {
110
- console.log(` ✗ No results (workspace isolation working correctly)`);
115
+ console.log(` ▸ No results (workspace isolation working correctly)`);
111
116
  }
112
117
  }
113
118
  // Test a third workspace
114
- console.log("\n📁 Testing 'general' workspace...");
119
+ console.log("\n▸ Testing 'general' workspace...");
115
120
  await ragIngest({
116
121
  modelId,
117
122
  workspace: "general",
@@ -123,20 +128,19 @@ try {
123
128
  workspace: "general",
124
129
  query: "general workspace",
125
130
  });
126
- console.log(`General workspace: ${generalSearch?.[0]?.content === "General workspace content for testing" ? "✅ Working" : "❌ Failed"}`);
131
+ console.log(`▸ General workspace: ${generalSearch?.[0]?.content === "General workspace content for testing" ? "Working" : "Failed"}`);
127
132
  // Reindexing - regenerate embeddings for an existing workspace
128
- console.log("\n🔄 Reindexing medical workspace...");
133
+ console.log("\n▸ Reindexing medical workspace...");
129
134
  const reindexResult = await ragReindex({
130
135
  workspace: "medical",
131
136
  modelId,
132
137
  onProgress: (stage, current, total) => {
133
- const pct = total > 0 ? Math.round((current / total) * 100) : 0;
134
- console.log(` [${stage}] ${current}/${total} (${pct}%)`);
138
+ console.log(`▸ ${stage} ${current}/${total}`);
135
139
  },
136
140
  });
137
- console.log(`${reindexResult.reindexed ? "✅ Reindex completed" : "⚠️ Reindex returned false"} for medical workspace`);
141
+ console.log(`▸ ${reindexResult.reindexed ? "Reindex completed" : "Reindex returned false"} for medical workspace`);
138
142
  if (reindexResult.details) {
139
- console.log(" Details:", reindexResult.details);
143
+ console.log("▸ Details:", reindexResult.details);
140
144
  }
141
145
  // Verify reindexed data still works
142
146
  const reindexVerify = await ragSearch({
@@ -145,7 +149,7 @@ try {
145
149
  query: "COVID symptoms",
146
150
  topK: 1,
147
151
  });
148
- console.log(` Verification search: ${reindexVerify.length > 0 ? "✅ Working" : "❌ Failed"}`);
152
+ console.log(`▸ Verification search: ${reindexVerify.length > 0 ? "Working" : "Failed"}`);
149
153
  // Cleanup example
150
154
  const firstChunk = medicalResult.processed.find((p) => p.status === "fulfilled" && p.id);
151
155
  if (firstChunk?.id) {
@@ -153,25 +157,25 @@ try {
153
157
  workspace: "medical",
154
158
  ids: [firstChunk.id],
155
159
  });
156
- console.log("\n🗑️ Deleted one medical chunk");
160
+ console.log("\n▸ Deleted one medical chunk");
157
161
  }
158
162
  // List all workspaces
159
- console.log("\n📂 Listing workspaces...");
163
+ console.log("\n▸ Listing workspaces...");
160
164
  const workspaces = await ragListWorkspaces();
161
165
  workspaces.forEach((ws) => {
162
- console.log(` • ${ws.name} (${ws.open ? "open" : "closed"})`);
166
+ console.log(`▸ ${ws.name} (${ws.open ? "open" : "closed"})`);
163
167
  });
164
168
  // Close and delete all workspaces created in this example
165
- console.log("\n🗑️ Closing and deleting workspaces...");
169
+ console.log("\n▸ Closing and deleting workspaces...");
166
170
  await ragCloseWorkspace({ workspace: "medical", deleteOnClose: true });
167
- console.log("Deleted 'medical' workspace");
171
+ console.log("▸ Deleted 'medical' workspace");
168
172
  await ragCloseWorkspace({ workspace: "technology", deleteOnClose: true });
169
- console.log("Deleted 'technology' workspace");
173
+ console.log("▸ Deleted 'technology' workspace");
170
174
  await ragCloseWorkspace({ workspace: "general", deleteOnClose: true });
171
- console.log("Deleted 'general' workspace");
175
+ console.log("▸ Deleted 'general' workspace");
172
176
  await unloadModel({ modelId });
173
177
  }
174
178
  catch (error) {
175
- console.error("❌ Error:", error);
179
+ console.error("✖", error);
176
180
  process.exit(1);
177
181
  }
@@ -4,12 +4,16 @@ import * as a from "apache-arrow";
4
4
  try {
5
5
  // Get query from command line or use default
6
6
  const query = process.argv[2] || "machine learning algorithms";
7
- console.log(`🔍 Query: "${query}"`);
7
+ console.log(`▸ Query: "${query}"`);
8
8
  const db = await lancedb.connect(".rag-lancedb");
9
9
  const modelId = await loadModel({
10
10
  modelSrc: GTE_LARGE_FP16,
11
- onProgress: (progress) => {
12
- console.log(`Loading model... ${progress.percentage.toFixed(1)}%`);
11
+ onProgress: (p) => {
12
+ const mb = (n) => (n / 1e6).toFixed(1);
13
+ const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
14
+ process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
15
+ if (p.percentage >= 100)
16
+ process.stderr.write("\n");
13
17
  },
14
18
  });
15
19
  const samples = [
@@ -56,10 +60,10 @@ try {
56
60
  await db.dropTable("documents");
57
61
  }
58
62
  catch (e) {
59
- console.warn(`Table doesn't exist, no need to drop: ${String(e)}`);
63
+ console.warn(`▸ Table doesn't exist, no need to drop: ${String(e)}`);
60
64
  }
61
65
  const documentsTable = await db.createEmptyTable("documents", schema);
62
- console.log("📚 Embedding documents...");
66
+ console.log("▸ Embedding documents...");
63
67
  const documents = [];
64
68
  for (const sample of samples) {
65
69
  const { embedding } = await embed({ modelId, text: sample.text });
@@ -71,13 +75,13 @@ try {
71
75
  documents.push(record);
72
76
  }
73
77
  await documentsTable.add(documents);
74
- console.log("🔎 Searching for similar documents...");
78
+ console.log("▸ Searching for similar documents...");
75
79
  const { embedding: queryEmbedding } = await embed({ modelId, text: query });
76
80
  const results = (await documentsTable
77
81
  .vectorSearch(queryEmbedding)
78
82
  .limit(1)
79
83
  .toArray());
80
- console.log("\n📋 Top 3 most similar documents:");
84
+ console.log("\n▸ Top 3 most similar documents:");
81
85
  results.forEach((result, index) => {
82
86
  console.log("=".repeat(50) + " Top result:");
83
87
  console.log(`\n${index + 1}. (Score: ${result._distance?.toFixed(4)})`);
@@ -88,6 +92,6 @@ try {
88
92
  await unloadModel({ modelId });
89
93
  }
90
94
  catch (error) {
91
- console.error("❌ Error:", error);
95
+ console.error("✖", error);
92
96
  process.exit(1);
93
97
  }
@@ -3,14 +3,18 @@ import sqlite3InitModule from "@sqliteai/sqlite-wasm";
3
3
  try {
4
4
  // Get query from command line or use default
5
5
  const query = process.argv[2] || "machine learning algorithms";
6
- console.log(`🔍 Query: "${query}"`);
6
+ console.log(`▸ Query: "${query}"`);
7
7
  // Initialize SQLite with vector extension
8
8
  const sqlite3 = await sqlite3InitModule();
9
9
  const db = new sqlite3.oo1.DB(":memory:", "c");
10
10
  const modelId = await loadModel({
11
11
  modelSrc: GTE_LARGE_FP16,
12
- onProgress: (progress) => {
13
- console.log(`Loading model... ${progress.percentage.toFixed(1)}%`);
12
+ onProgress: (p) => {
13
+ const mb = (n) => (n / 1e6).toFixed(1);
14
+ const line = `▸ Downloading ${p.percentage.toFixed(0)}% (${mb(p.downloaded)}/${mb(p.total)} MB)`;
15
+ process.stderr.write(process.stderr.isTTY ? `\r${line}` : `${line}\n`);
16
+ if (p.percentage >= 100)
17
+ process.stderr.write("\n");
14
18
  },
15
19
  });
16
20
  const samples = [
@@ -55,7 +59,7 @@ try {
55
59
  embedding BLOB NOT NULL
56
60
  )
57
61
  `);
58
- console.log("📚 Embedding documents...");
62
+ console.log("▸ Embedding documents...");
59
63
  for (const sample of samples) {
60
64
  const { embedding } = await embed({ modelId, text: sample.text });
61
65
  db.exec({
@@ -70,7 +74,7 @@ try {
70
74
  // [Optional] Preload quantized vectors in memory for optimal performance
71
75
  db.exec(`SELECT vector_quantize_preload('documents', 'embedding')`);
72
76
  // Search for similar documents
73
- console.log("🔎 Searching for similar documents...");
77
+ console.log("▸ Searching for similar documents...");
74
78
  const { embedding: queryEmbedding } = await embed({ modelId, text: query });
75
79
  const results = [];
76
80
  // Perform vector search
@@ -88,7 +92,7 @@ try {
88
92
  results.push(typedRow);
89
93
  },
90
94
  });
91
- console.log("\n📋 Top 3 most similar documents:");
95
+ console.log("\n▸ Top 3 most similar documents:");
92
96
  results.forEach((result, index) => {
93
97
  console.log("=".repeat(50) + " Top result:");
94
98
  console.log(`\n${index + 1}. [ID: ${result.id}] (Score: ${result.distance.toFixed(4)})`);
@@ -100,6 +104,6 @@ try {
100
104
  db.close();
101
105
  }
102
106
  catch (error) {
103
- console.error("❌ Error:", error);
107
+ console.error("✖", error);
104
108
  process.exit(1);
105
109
  }