@qvac/sdk 0.5.0 → 0.6.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 (259) hide show
  1. package/README.md +48 -11
  2. package/bare-imports.json +35 -0
  3. package/dist/client/api/cancel.d.ts +12 -3
  4. package/dist/client/api/cancel.js +12 -3
  5. package/dist/client/api/get-model-info.d.ts +2 -2
  6. package/dist/client/api/get-model-info.js +2 -2
  7. package/dist/client/api/index.d.ts +2 -1
  8. package/dist/client/api/index.js +2 -1
  9. package/dist/client/api/load-model.js +6 -1
  10. package/dist/client/api/ocr.d.ts +31 -0
  11. package/dist/client/api/ocr.js +88 -0
  12. package/dist/client/api/rag.d.ts +215 -20
  13. package/dist/client/api/rag.js +382 -23
  14. package/dist/client/api/translate.js +10 -11
  15. package/dist/client/api/unload-model.js +1 -1
  16. package/dist/client/init-hooks.d.ts +4 -3
  17. package/dist/client/init-hooks.js +40 -31
  18. package/dist/client/rpc/bare-client.d.ts +1 -178
  19. package/dist/client/rpc/bare-client.js +42 -9
  20. package/dist/client/rpc/expo-rpc-client.js +57 -2
  21. package/dist/client/rpc/node-rpc-client.js +5 -1
  22. package/dist/client/rpc/rpc-client.d.ts +1 -1
  23. package/dist/client/rpc/rpc-client.js +11 -57
  24. package/dist/examples/config/blind-relay/blind-relay.config.d.ts +5 -0
  25. package/dist/examples/config/blind-relay/blind-relay.config.js +7 -0
  26. package/dist/examples/config/default/default.config.d.ts +8 -0
  27. package/dist/examples/config/default/default.config.js +6 -0
  28. package/dist/examples/default-config-usage.d.ts +17 -0
  29. package/dist/examples/default-config-usage.js +47 -0
  30. package/dist/examples/delegated-inference/consumer.js +1 -0
  31. package/dist/examples/download-with-blind-relays.js +4 -3
  32. package/dist/examples/embed-hyperdrive.js +4 -0
  33. package/dist/examples/kv-cache-custom-key.js +16 -1
  34. package/dist/examples/llamacpp-sharded.js +12 -3
  35. package/dist/examples/ocr-fasttext.d.ts +2 -0
  36. package/dist/examples/ocr-fasttext.js +52 -0
  37. package/dist/examples/quickstart.d.ts +2 -0
  38. package/dist/examples/quickstart.js +28 -0
  39. package/dist/examples/rag/rag-hyperdb/cancellation.d.ts +2 -0
  40. package/dist/examples/rag/rag-hyperdb/cancellation.js +75 -0
  41. package/dist/examples/rag/rag-hyperdb/ingest.d.ts +2 -0
  42. package/dist/examples/rag/{rag-hyperdb.js → rag-hyperdb/ingest.js} +10 -4
  43. package/dist/examples/rag/rag-hyperdb/pipeline.d.ts +2 -0
  44. package/dist/examples/rag/rag-hyperdb/pipeline.js +74 -0
  45. package/dist/examples/rag/rag-hyperdb/workspaces.d.ts +2 -0
  46. package/dist/examples/rag/rag-hyperdb/workspaces.js +178 -0
  47. package/dist/examples/translation/translation-bergamot-batch.d.ts +2 -0
  48. package/dist/examples/translation/translation-bergamot-batch.js +49 -0
  49. package/dist/examples/translation/translation-bergamot.d.ts +2 -0
  50. package/dist/examples/translation/translation-bergamot.js +39 -0
  51. package/dist/examples/translation/translation-indic.js +1 -0
  52. package/dist/examples/translation/translation-opus.js +1 -0
  53. package/dist/examples/translation/translation-stream.js +1 -0
  54. package/dist/expo/plugins/withMobileBundle.js +29 -10
  55. package/dist/index.d.ts +3 -2
  56. package/dist/index.js +3 -1
  57. package/dist/logging/addon.js +23 -7
  58. package/dist/logging/base-logger.js +2 -2
  59. package/dist/logging/client-logger.js +15 -4
  60. package/dist/logging/index.d.ts +1 -0
  61. package/dist/logging/index.js +1 -0
  62. package/dist/logging/logger.js +11 -3
  63. package/dist/logging/namespaces.d.ts +1 -0
  64. package/dist/logging/namespaces.js +1 -0
  65. package/dist/logging/registry.d.ts +5 -0
  66. package/dist/logging/registry.js +17 -5
  67. package/dist/logging/transport.js +2 -2
  68. package/dist/logging/utils.d.ts +2 -0
  69. package/dist/logging/utils.js +62 -0
  70. package/dist/models/hyperdrive/models.d.ts +1096 -178
  71. package/dist/models/hyperdrive/models.js +1476 -507
  72. package/dist/schemas/archive.d.ts +9 -0
  73. package/dist/schemas/archive.js +17 -0
  74. package/dist/schemas/cancel.d.ts +6 -0
  75. package/dist/schemas/cancel.js +5 -0
  76. package/dist/schemas/common.d.ts +582 -77
  77. package/dist/schemas/common.js +6 -1
  78. package/dist/schemas/delegate.d.ts +1 -0
  79. package/dist/schemas/delegate.js +1 -0
  80. package/dist/schemas/download-asset.d.ts +21 -9
  81. package/dist/schemas/get-model-info.d.ts +12 -10
  82. package/dist/schemas/get-model-info.js +9 -1
  83. package/dist/schemas/index.d.ts +6 -2
  84. package/dist/schemas/index.js +9 -2
  85. package/dist/schemas/llamacpp-config.d.ts +112 -8
  86. package/dist/schemas/llamacpp-config.js +40 -8
  87. package/dist/schemas/load-model.d.ts +2993 -525
  88. package/dist/schemas/load-model.js +88 -33
  89. package/dist/schemas/logging-stream.d.ts +2 -2
  90. package/dist/schemas/model-src-utils.d.ts +38 -16
  91. package/dist/schemas/model-src-utils.js +4 -8
  92. package/dist/schemas/model-types.d.ts +154 -0
  93. package/dist/schemas/model-types.js +140 -0
  94. package/dist/schemas/ocr.d.ts +88 -0
  95. package/dist/schemas/ocr.js +52 -0
  96. package/dist/schemas/rag.d.ts +183 -52
  97. package/dist/schemas/rag.js +148 -23
  98. package/dist/schemas/reload-config.d.ts +20 -8
  99. package/dist/schemas/reload-config.js +7 -5
  100. package/dist/schemas/runtime-context.d.ts +19 -0
  101. package/dist/schemas/runtime-context.js +7 -0
  102. package/dist/schemas/sdk-config.d.ts +697 -2
  103. package/dist/schemas/sdk-config.js +99 -1
  104. package/dist/schemas/sdk-errors-client.d.ts +1 -0
  105. package/dist/schemas/sdk-errors-client.js +5 -0
  106. package/dist/schemas/sdk-errors-server.d.ts +14 -0
  107. package/dist/schemas/sdk-errors-server.js +70 -0
  108. package/dist/schemas/shard.d.ts +21 -0
  109. package/dist/schemas/shard.js +17 -0
  110. package/dist/schemas/translate.d.ts +68 -23
  111. package/dist/schemas/translate.js +37 -11
  112. package/dist/schemas/translation-config.d.ts +272 -29
  113. package/dist/schemas/translation-config.js +63 -6
  114. package/dist/scripts/run-unit-tests.d.ts +2 -0
  115. package/dist/scripts/run-unit-tests.js +17 -0
  116. package/dist/server/bare/addons/llamacpp-completion/cache-logger.d.ts +6 -0
  117. package/dist/server/bare/addons/llamacpp-completion/cache-logger.js +34 -0
  118. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.d.ts +1 -5
  119. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/create-model.js +3 -26
  120. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.js +26 -7
  121. package/dist/server/bare/addons/llamacpp-completion/index.d.ts +4 -0
  122. package/dist/server/bare/addons/llamacpp-completion/index.js +3 -0
  123. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.d.ts +4 -1
  124. package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/kv-cache-utils.js +43 -10
  125. package/dist/server/bare/addons/llamacpp-embedding/create-model.d.ts +8 -0
  126. package/dist/server/bare/addons/llamacpp-embedding/create-model.js +38 -0
  127. package/dist/server/bare/addons/llamacpp-embedding/index.d.ts +3 -0
  128. package/dist/server/bare/addons/llamacpp-embedding/index.js +2 -0
  129. package/dist/server/bare/addons/load-model.js +28 -24
  130. package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.js +23 -8
  131. package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.js +35 -11
  132. package/dist/server/bare/addons/onnx-ocr/create-model.d.ts +10 -0
  133. package/dist/server/bare/addons/onnx-ocr/create-model.js +39 -0
  134. package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.d.ts +10 -0
  135. package/dist/server/bare/addons/onnx-ocr/handlers/ocr-stream.js +109 -0
  136. package/dist/server/bare/addons/onnx-ocr/index.d.ts +3 -0
  137. package/dist/server/bare/addons/onnx-ocr/index.js +2 -0
  138. package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.js +2 -1
  139. package/dist/server/bare/delegate-rpc-client.js +19 -1
  140. package/dist/server/bare/rag-hyperdb/handlers/chunk.d.ts +3 -0
  141. package/dist/server/bare/rag-hyperdb/handlers/chunk.js +7 -0
  142. package/dist/server/bare/rag-hyperdb/handlers/close-workspace.d.ts +3 -0
  143. package/dist/server/bare/rag-hyperdb/handlers/close-workspace.js +9 -0
  144. package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +1 -1
  145. package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +9 -10
  146. package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.d.ts +3 -0
  147. package/dist/server/bare/rag-hyperdb/handlers/delete-workspace.js +14 -0
  148. package/dist/server/bare/rag-hyperdb/handlers/ingest.d.ts +9 -0
  149. package/dist/server/bare/rag-hyperdb/handlers/ingest.js +18 -0
  150. package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.d.ts +3 -0
  151. package/dist/server/bare/rag-hyperdb/handlers/list-workspaces.js +4 -0
  152. package/dist/server/bare/rag-hyperdb/handlers/reindex.d.ts +9 -0
  153. package/dist/server/bare/rag-hyperdb/handlers/reindex.js +16 -0
  154. package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +7 -4
  155. package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +13 -14
  156. package/dist/server/bare/rag-hyperdb/handlers/search.js +10 -10
  157. package/dist/server/bare/rag-hyperdb/index.d.ts +8 -1
  158. package/dist/server/bare/rag-hyperdb/index.js +8 -1
  159. package/dist/server/bare/rag-hyperdb/rag-operation-manager.d.ts +7 -0
  160. package/dist/server/bare/rag-hyperdb/rag-operation-manager.js +39 -0
  161. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.d.ts +15 -0
  162. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +135 -0
  163. package/dist/server/bare/registry/config-registry.js +11 -0
  164. package/dist/server/bare/registry/logging-stream-registry.js +3 -3
  165. package/dist/server/bare/registry/model-config-registry.d.ts +4 -0
  166. package/dist/server/bare/registry/model-config-registry.js +15 -0
  167. package/dist/server/bare/registry/model-config-utils.d.ts +15 -0
  168. package/dist/server/bare/registry/model-config-utils.js +110 -0
  169. package/dist/server/bare/registry/model-registry.d.ts +6 -29
  170. package/dist/server/bare/registry/runtime-context-registry.d.ts +7 -0
  171. package/dist/server/bare/registry/runtime-context-registry.js +26 -0
  172. package/dist/server/bare/utils/loader-adapter.d.ts +7 -0
  173. package/dist/server/bare/utils/loader-adapter.js +9 -0
  174. package/dist/server/error-handlers.js +4 -2
  175. package/dist/server/rpc/handle-request.js +91 -9
  176. package/dist/server/rpc/handlers/cancelHandler.js +10 -1
  177. package/dist/server/rpc/handlers/completion-stream.js +1 -1
  178. package/dist/server/rpc/handlers/delete-cache.js +1 -1
  179. package/dist/server/rpc/handlers/embed.js +1 -1
  180. package/dist/server/rpc/handlers/get-model-info.d.ts +1 -1
  181. package/dist/server/rpc/handlers/get-model-info.js +22 -10
  182. package/dist/server/rpc/handlers/index.d.ts +4 -1
  183. package/dist/server/rpc/handlers/index.js +2 -0
  184. package/dist/server/rpc/handlers/load-model/download-manager.d.ts +11 -11
  185. package/dist/server/rpc/handlers/load-model/download-manager.js +36 -26
  186. package/dist/server/rpc/handlers/{load-model.d.ts → load-model/handler.d.ts} +2 -2
  187. package/dist/server/rpc/handlers/load-model/handler.js +179 -0
  188. package/dist/server/rpc/handlers/load-model/http.js +342 -33
  189. package/dist/server/rpc/handlers/load-model/hyperdrive.js +5 -3
  190. package/dist/server/rpc/handlers/load-model/index.d.ts +2 -2
  191. package/dist/server/rpc/handlers/load-model/index.js +2 -2
  192. package/dist/server/rpc/handlers/load-model/resolve.js +32 -3
  193. package/dist/server/rpc/handlers/load-model-delegated.js +6 -3
  194. package/dist/server/rpc/handlers/ocr-stream.d.ts +3 -0
  195. package/dist/server/rpc/handlers/ocr-stream.js +39 -0
  196. package/dist/server/rpc/handlers/rag.d.ts +2 -2
  197. package/dist/server/rpc/handlers/rag.js +107 -43
  198. package/dist/server/rpc/handlers/text-to-speech.js +1 -1
  199. package/dist/server/rpc/handlers/transcribe-stream.js +1 -1
  200. package/dist/server/rpc/handlers/translate.js +6 -15
  201. package/dist/server/utils/archive.d.ts +3 -0
  202. package/dist/server/utils/archive.js +171 -0
  203. package/dist/server/utils/audio/decoder.js +2 -2
  204. package/dist/server/utils/cache.d.ts +5 -5
  205. package/dist/server/utils/cache.js +6 -6
  206. package/dist/server/utils/config-transform.d.ts +2 -2
  207. package/dist/server/utils/config-transform.js +8 -6
  208. package/dist/server/utils/formatting.d.ts +13 -0
  209. package/dist/server/utils/formatting.js +26 -0
  210. package/dist/server/utils/gguf-tensor-extractor.d.ts +15 -0
  211. package/dist/server/utils/gguf-tensor-extractor.js +314 -0
  212. package/dist/server/utils/index.d.ts +3 -1
  213. package/dist/server/utils/index.js +3 -1
  214. package/dist/server/utils/shard-utils.d.ts +42 -16
  215. package/dist/server/utils/shard-utils.js +95 -7
  216. package/dist/server/worker.js +8 -3
  217. package/dist/utils/errors-base.d.ts +1 -1
  218. package/dist/utils/errors-base.js +2 -2
  219. package/dist/utils/errors-client.d.ts +12 -0
  220. package/dist/utils/errors-client.js +20 -0
  221. package/dist/utils/errors-server.d.ts +33 -0
  222. package/dist/utils/errors-server.js +55 -0
  223. package/package.json +42 -17
  224. package/dist/client/rpc/bare-rpc-client.d.ts +0 -4
  225. package/dist/client/rpc/bare-rpc-client.js +0 -94
  226. package/dist/examples/config/config-path.d.ts +0 -8
  227. package/dist/examples/config/config-path.js +0 -13
  228. package/dist/examples/rag/rag-hyperdb-workspaces.d.ts +0 -2
  229. package/dist/examples/rag/rag-hyperdb-workspaces.js +0 -106
  230. package/dist/examples/rag/rag-hyperdb.d.ts +0 -2
  231. package/dist/server/bare/addons/llamacpp/index.d.ts +0 -4
  232. package/dist/server/bare/addons/llamacpp/index.js +0 -3
  233. package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +0 -5
  234. package/dist/server/bare/rag-hyperdb/rag-manager.js +0 -66
  235. package/dist/server/rpc/handlers/load-model.js +0 -111
  236. package/dist/server/utils/hash.d.ts +0 -5
  237. package/dist/server/utils/hash.js +0 -11
  238. package/dist/utils/getProcessSafe.d.ts +0 -7
  239. package/dist/utils/getProcessSafe.js +0 -17
  240. package/dist/utils/runtime.d.ts +0 -30
  241. package/dist/utils/runtime.js +0 -48
  242. /package/dist/server/bare/addons/{llamacpp → llamacpp-completion}/handlers/completion-stream.d.ts +0 -0
  243. /package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.d.ts +0 -0
  244. /package/dist/server/bare/addons/{llamacpp → llamacpp-embedding}/handlers/embed.js +0 -0
  245. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/create-model.d.ts +0 -0
  246. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/handlers/translate.d.ts +0 -0
  247. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.d.ts +0 -0
  248. /package/dist/server/bare/addons/{translation → nmtcpp-translation}/index.js +0 -0
  249. /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.d.ts +0 -0
  250. /package/dist/server/bare/addons/{tts → onnx-tts}/create-model.js +0 -0
  251. /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.d.ts +0 -0
  252. /package/dist/server/bare/addons/{tts → onnx-tts}/handlers/text-to-speech.js +0 -0
  253. /package/dist/server/bare/addons/{tts → onnx-tts}/index.d.ts +0 -0
  254. /package/dist/server/bare/addons/{tts → onnx-tts}/index.js +0 -0
  255. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/create-model.d.ts +0 -0
  256. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/handlers/transcribe-stream.d.ts +0 -0
  257. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/handlers/transcribe-stream.js +0 -0
  258. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/index.d.ts +0 -0
  259. /package/dist/server/bare/addons/{whispercpp → whispercpp-transcription}/index.js +0 -0
@@ -1,181 +1,3 @@
1
- import type { Request, Response } from "../../schemas/index";
2
- export declare function send<T extends Request>(request: T): Promise<Response>;
3
- export declare function stream<T extends Request>(request: T): AsyncGenerator<{
4
- type: "cancel";
5
- success: boolean;
6
- error?: string | undefined;
7
- } | {
8
- type: "completionStream";
9
- token: string;
10
- done?: boolean | undefined;
11
- stats?: {
12
- timeToFirstToken: number;
13
- tokensPerSecond: number;
14
- cacheTokens: number;
15
- } | undefined;
16
- toolCallEvent?: {
17
- type: "toolCall";
18
- call: {
19
- id: string;
20
- name: string;
21
- arguments: Record<string, unknown>;
22
- raw?: string | undefined;
23
- };
24
- } | {
25
- type: "toolCallError";
26
- error: {
27
- code: "PARSE_ERROR" | "VALIDATION_ERROR" | "UNKNOWN_TOOL";
28
- message: string;
29
- raw?: string | undefined;
30
- };
31
- } | undefined;
32
- toolCalls?: {
33
- id: string;
34
- name: string;
35
- arguments: Record<string, unknown>;
36
- raw?: string | undefined;
37
- }[] | undefined;
38
- error?: string | undefined;
39
- } | {
40
- type: "deleteCache";
41
- success: boolean;
42
- error?: string | undefined;
43
- } | {
44
- type: "textToSpeech";
45
- buffer: number[];
46
- done: boolean;
47
- } | {
48
- type: "loadModel";
49
- success: boolean;
50
- modelId?: string | undefined;
51
- error?: string | undefined;
52
- } | {
53
- type: "modelProgress";
54
- downloaded: number;
55
- total: number;
56
- percentage: number;
57
- downloadKey: string;
58
- shardInfo?: {
59
- currentShard: number;
60
- totalShards: number;
61
- shardName: string;
62
- overallDownloaded: number;
63
- overallTotal: number;
64
- overallPercentage: number;
65
- } | undefined;
66
- } | {
67
- type: "downloadAsset";
68
- success: boolean;
69
- assetId?: string | undefined;
70
- error?: string | undefined;
71
- } | {
72
- type: "embed";
73
- success: boolean;
74
- embedding: number[] | number[][];
75
- error?: string | undefined;
76
- } | {
77
- type: "loggingStream";
78
- id: string;
79
- level: "error" | "warn" | "info" | "debug" | "off";
80
- namespace: string;
81
- message: string;
82
- timestamp: number;
83
- } | {
84
- type: "provide";
85
- success: boolean;
86
- error?: string | undefined;
87
- publicKey?: string | undefined;
88
- } | {
89
- type: "stopProvide";
90
- success: boolean;
91
- error?: string | undefined;
92
- } | {
93
- type: "unloadModel";
94
- success: boolean;
95
- error?: string | undefined;
96
- hasActiveModels?: boolean | undefined;
97
- hasActiveProviders?: boolean | undefined;
98
- } | {
99
- type: "pong";
100
- number: number;
101
- } | {
102
- type: "transcribeStream";
103
- text?: string | undefined;
104
- done?: boolean | undefined;
105
- error?: string | undefined;
106
- } | {
107
- type: "translate";
108
- token: string;
109
- done?: boolean | undefined;
110
- stats?: {
111
- processedTokens: number;
112
- processingTime: number;
113
- } | undefined;
114
- error?: string | undefined;
115
- } | {
116
- type: "error";
117
- message: string;
118
- stack?: string | undefined;
119
- timestamp?: string | undefined;
120
- name?: string | undefined;
121
- code?: number | undefined;
122
- cause?: unknown;
123
- } | {
124
- type: "rag";
125
- success: boolean;
126
- operation: "saveEmbeddings";
127
- processed: {
128
- status: "fulfilled" | "rejected";
129
- id?: string | undefined;
130
- error?: string | undefined;
131
- }[];
132
- droppedIndices: number[];
133
- error?: string | undefined;
134
- } | {
135
- type: "rag";
136
- success: boolean;
137
- operation: "search";
138
- results: {
139
- id: string;
140
- content: string;
141
- score: number;
142
- }[];
143
- error?: string | undefined;
144
- } | {
145
- type: "rag";
146
- success: boolean;
147
- operation: "deleteEmbeddings";
148
- error?: string | undefined;
149
- } | {
150
- type: "getModelInfo";
151
- modelInfo: {
152
- name: string;
153
- modelId: string;
154
- hyperdriveKey: string;
155
- hyperbeeKey: string;
156
- expectedSize: number;
157
- sha256Checksum: string;
158
- addon: "llm" | "whisper" | "embeddings" | "nmt" | "tts" | "vad";
159
- isCached: boolean;
160
- isLoaded: boolean;
161
- cacheFiles: {
162
- filename: string;
163
- path: string;
164
- expectedSize: number;
165
- sha256Checksum: string;
166
- isCached: boolean;
167
- actualSize?: number | undefined;
168
- cachedAt?: Date | undefined;
169
- }[];
170
- actualSize?: number | undefined;
171
- cachedAt?: Date | undefined;
172
- loadedInstances?: {
173
- registryId: string;
174
- loadedAt: Date;
175
- config?: unknown;
176
- }[] | undefined;
177
- };
178
- }, void, any>;
179
1
  export declare function getRPC(): Promise<{
180
2
  request(): {
181
3
  send(payload: string): void;
@@ -183,4 +5,5 @@ export declare function getRPC(): Promise<{
183
5
  createResponseStream(): AsyncGenerator<Buffer<ArrayBuffer>, void, unknown>;
184
6
  };
185
7
  }>;
8
+ export declare function close(): void;
186
9
  //# sourceMappingURL=bare-client.d.ts.map
@@ -1,23 +1,43 @@
1
+ import { normalizeModelType } from "../../schemas/index.js";
2
+ import os from "bare-os";
1
3
  import { handlers } from "../../server/rpc/handlers/index.js";
2
4
  import { RPCNoHandlerError, RPCRequestNotSentError, } from "../../utils/errors-client.js";
3
5
  import { initializeConfig } from "../init-hooks.js";
4
6
  import { setSDKConfig } from "../../server/bare/registry/config-registry.js";
7
+ import { setRuntimeContext } from "../../server/bare/registry/runtime-context-registry.js";
8
+ import { resolveModelConfig } from "../../server/bare/registry/model-config-registry.js";
5
9
  import { resolveConfig } from "../config-loader/resolve-config.bare.js";
6
10
  // Get the handler for a request type
7
- const getHandler = (type) => {
11
+ function getHandler(type) {
8
12
  const handler = handlers[type];
9
13
  return typeof handler === "function" ? handler : undefined;
10
- };
11
- export async function send(request) {
14
+ }
15
+ function applyDeviceDefaultsToLoadModel(request) {
16
+ if (request.type !== "loadModel" || !("modelSrc" in request)) {
17
+ return request;
18
+ }
19
+ let canonicalType;
20
+ try {
21
+ canonicalType = normalizeModelType(request.modelType);
22
+ }
23
+ catch {
24
+ return request;
25
+ }
26
+ const rawConfig = request.modelConfig ?? {};
27
+ const configWithDefaults = resolveModelConfig(canonicalType, rawConfig);
28
+ return { ...request, modelConfig: configWithDefaults };
29
+ }
30
+ async function send(request) {
12
31
  if (request.type === "ping") {
13
32
  return { type: "pong", number: Math.random() * 100 };
14
33
  }
15
34
  const handler = getHandler(request.type);
16
35
  if (!handler)
17
36
  throw new RPCNoHandlerError(request.type);
18
- return (await handler(request));
37
+ const processedRequest = applyDeviceDefaultsToLoadModel(request);
38
+ return (await handler(processedRequest));
19
39
  }
20
- export async function* stream(request) {
40
+ async function* stream(request) {
21
41
  const handler = getHandler(request.type);
22
42
  if (!handler)
23
43
  throw new RPCNoHandlerError(request.type);
@@ -25,11 +45,12 @@ export async function* stream(request) {
25
45
  if (request.type === "loadModel" &&
26
46
  "withProgress" in request &&
27
47
  request.withProgress) {
48
+ const processedRequest = applyDeviceDefaultsToLoadModel(request);
28
49
  async function* streamWithProgress() {
29
50
  const queue = [];
30
51
  let done = false;
31
52
  const loadModelHandler = handler;
32
- loadModelHandler(request, (update) => queue.push(update))
53
+ loadModelHandler(processedRequest, (update) => queue.push(update))
33
54
  .then((final) => {
34
55
  queue.push(final);
35
56
  done = true;
@@ -105,8 +126,13 @@ const createMockRPCRequest = () => {
105
126
  "type" in requestData &&
106
127
  requestData.type === "__init_config") {
107
128
  try {
108
- const configData = requestData;
109
- setSDKConfig(configData.config);
129
+ const initData = requestData;
130
+ if (initData.config) {
131
+ setSDKConfig(initData.config);
132
+ }
133
+ if (initData.runtimeContext) {
134
+ setRuntimeContext(initData.runtimeContext);
135
+ }
110
136
  return Buffer.from(JSON.stringify({ success: true }));
111
137
  }
112
138
  catch (error) {
@@ -138,8 +164,15 @@ export async function getRPC() {
138
164
  };
139
165
  // Initialize config once on first call
140
166
  if (!configInitialized) {
141
- await initializeConfig(mockRPC, resolveConfig);
167
+ const runtimeContext = {
168
+ runtime: "bare",
169
+ platform: os.platform(),
170
+ };
171
+ await initializeConfig(mockRPC, resolveConfig, runtimeContext);
142
172
  configInitialized = true;
143
173
  }
144
174
  return mockRPC;
145
175
  }
176
+ export function close() {
177
+ // noop
178
+ }
@@ -6,7 +6,48 @@ import { getClientLogger } from "../../logging/index.js";
6
6
  const logger = getClientLogger();
7
7
  let rpcInstance = null;
8
8
  let rpcPromise = null;
9
+ let workletInstance = null;
10
+ let workletInitialized = false;
11
+ let cachedRuntimeContext;
9
12
  logger.debug("EXPO RPC Client bundle");
13
+ async function getRuntimeContext() {
14
+ if (cachedRuntimeContext) {
15
+ return cachedRuntimeContext;
16
+ }
17
+ // expo-device is optional - gracefully handle if not installed
18
+ let deviceModel;
19
+ let deviceBrand;
20
+ let platform;
21
+ try {
22
+ const expoModulesCore = await import("expo-modules-core");
23
+ // this looks odd, but is necessary to ensure that import can be used safely.
24
+ // It will crash the app if the module is not installed, but the node dependency is present.
25
+ const nativeDeviceModule = expoModulesCore.requireOptionalNativeModule("ExpoDevice");
26
+ if (nativeDeviceModule) {
27
+ const Device = await import("expo-device");
28
+ logger.info(`Device: ${Device.modelName} ${Device.brand} ${Device.osName}`);
29
+ const osName = Device?.osName?.toLowerCase();
30
+ if (osName?.includes("ios")) {
31
+ platform = "ios";
32
+ }
33
+ else if (osName?.includes("android")) {
34
+ platform = "android";
35
+ }
36
+ deviceModel = Device.modelName ?? undefined;
37
+ deviceBrand = Device.brand ?? undefined;
38
+ }
39
+ }
40
+ catch {
41
+ logger.debug("expo-device not available, device info will be omitted");
42
+ }
43
+ cachedRuntimeContext = {
44
+ runtime: "react-native",
45
+ platform,
46
+ deviceModel,
47
+ deviceBrand,
48
+ };
49
+ return cachedRuntimeContext;
50
+ }
10
51
  export async function getRPC() {
11
52
  if (rpcInstance) {
12
53
  return rpcInstance;
@@ -15,10 +56,22 @@ export async function getRPC() {
15
56
  return rpcPromise;
16
57
  }
17
58
  rpcPromise = (async () => {
59
+ if (workletInstance) {
60
+ logger.debug("šŸ”„ Reusing existing worklet");
61
+ rpcInstance = new RPC(workletInstance.IPC, () => { });
62
+ // Only initialize once per worklet - server state persists
63
+ if (!workletInitialized) {
64
+ const runtimeContext = await getRuntimeContext();
65
+ await initializeConfig(rpcInstance, resolveConfig, runtimeContext);
66
+ workletInitialized = true;
67
+ }
68
+ return rpcInstance;
69
+ }
18
70
  const { Paths } = await import("expo-file-system");
19
71
  const bareKitModule = await import("react-native-bare-kit");
20
72
  const worklet = new bareKitModule.Worklet();
21
- logger.debug("Starting worklet");
73
+ workletInstance = worklet;
74
+ logger.debug("Starting new worklet");
22
75
  // Load the mobile bundle - this will be generated by the Expo plugin
23
76
  // using the user's installed bare library versions
24
77
  let mobileBundle;
@@ -47,7 +100,9 @@ export async function getRPC() {
47
100
  rpcInstance = new RPC(worklet.IPC, () => {
48
101
  // Use this for async callbacks
49
102
  });
50
- await initializeConfig(rpcInstance, resolveConfig);
103
+ const runtimeContext = await getRuntimeContext();
104
+ await initializeConfig(rpcInstance, resolveConfig, runtimeContext);
105
+ workletInitialized = true;
51
106
  return rpcInstance;
52
107
  })();
53
108
  try {
@@ -54,7 +54,11 @@ async function ensureRPC() {
54
54
  });
55
55
  });
56
56
  const rpc = await rpcPromise;
57
- await initializeConfig(rpc, resolveConfig);
57
+ const runtimeContext = {
58
+ runtime: "node",
59
+ platform: process.platform,
60
+ };
61
+ await initializeConfig(rpc, resolveConfig, runtimeContext);
58
62
  return rpc;
59
63
  }
60
64
  const mockRPC = {
@@ -2,5 +2,5 @@ import type RPC from "bare-rpc";
2
2
  import { type Request, type Response, type RPCOptions } from "../../schemas/index";
3
3
  export declare function send<T extends Request>(request: T, rpc?: RPC, options?: RPCOptions): Promise<Response>;
4
4
  export declare function stream<T extends Request>(request: T, rpc?: RPC, options?: RPCOptions): AsyncGenerator<Response>;
5
- export declare function close(): Promise<void>;
5
+ export declare function close(): void;
6
6
  //# sourceMappingURL=rpc-client.d.ts.map
@@ -1,8 +1,8 @@
1
1
  import { requestSchema, responseSchema, } from "../../schemas/index.js";
2
2
  import { RPCError } from "./rpc-error.js";
3
3
  import { withTimeout, withTimeoutStream } from "../../utils/withTimeout.js";
4
- import { isReactNative, isBare } from "../../utils/runtime.js";
5
- import { getClientLogger } from "../../logging/index.js";
4
+ import { getClientLogger, summarizeRequest } from "../../logging/index.js";
5
+ import { getRPC, close as closeRPC } from "#rpc";
6
6
  const logger = getClientLogger();
7
7
  let rpcInstance = null;
8
8
  let commandCounter = 0;
@@ -15,52 +15,17 @@ function checkAndThrowError(response) {
15
15
  throw new RPCError(response);
16
16
  }
17
17
  }
18
- async function getRPC() {
18
+ async function getRPCInstance() {
19
19
  if (rpcInstance)
20
20
  return rpcInstance;
21
- const isRN = isReactNative();
22
- const isBareRuntime = isBare();
23
- // TODO Lots of type unsafe hacks to make this work cross platform
24
- if (isRN) {
25
- logger.debug("React Native runtime detected");
26
- // Only import expo client for React Native - Metro won't bundle the Node client
27
- const expoRPCClientPath = "./expo-rpc-client";
28
- const mod = (await import(expoRPCClientPath));
29
- rpcInstance = await (typeof mod === "function" ? mod() : mod.getRPC());
30
- return rpcInstance;
31
- }
32
- else if (isBareRuntime) {
33
- logger.debug("Bare runtime detected");
34
- // Use dynamic import for Bare client
35
- const mod = await import("./bare-client.js");
36
- rpcInstance = (await mod.getRPC());
37
- return rpcInstance;
38
- }
39
- else {
40
- logger.debug("Node runtime detected");
41
- // Use dynamic import for Node client to prevent Metro from bundling it
42
- const mod = await import("./node-rpc-client.js");
43
- rpcInstance = mod.getRPC();
44
- return rpcInstance;
45
- }
21
+ rpcInstance = await getRPC();
22
+ return rpcInstance;
46
23
  }
47
24
  export async function send(request, rpc, options) {
48
25
  const parsedRequest = requestSchema.parse(request);
49
- const rpcInstance = rpc || (await getRPC());
26
+ const rpcInstance = rpc || (await getRPCInstance());
50
27
  const req = rpcInstance.request(getNextCommandId());
51
- // TODO temp for debugging, find a better solution to exclude large payloads
52
- // Log request type and basic info, avoid logging large payloads
53
- if (request.type === "transcribeStream") {
54
- logger.debug("RPC Client sending:", {
55
- type: request.type,
56
- modelId: request.modelId,
57
- audioChunkType: request.audioChunk.type,
58
- audioChunkSize: request.audioChunk.value.length,
59
- });
60
- }
61
- else {
62
- logger.debug("RPC Client sending:", request);
63
- }
28
+ logger.debug("RPC Client sending:", summarizeRequest(request));
64
29
  const payload = JSON.stringify(parsedRequest);
65
30
  req.send(payload, "utf-8");
66
31
  const response = await withTimeout(req.reply("utf-8"), options?.timeout);
@@ -71,8 +36,9 @@ export async function send(request, rpc, options) {
71
36
  }
72
37
  export async function* stream(request, rpc, options = {}) {
73
38
  const parsedRequest = requestSchema.parse(request);
74
- const rpcInstance = rpc || (await getRPC());
39
+ const rpcInstance = rpc || (await getRPCInstance());
75
40
  const req = rpcInstance.request(getNextCommandId());
41
+ logger.debug("RPC Client streaming:", summarizeRequest(request));
76
42
  req.send(JSON.stringify(parsedRequest), "utf-8");
77
43
  const responseStream = req.createResponseStream({ encoding: "utf-8" });
78
44
  let buffer = "";
@@ -96,21 +62,9 @@ export async function* stream(request, rpc, options = {}) {
96
62
  }
97
63
  }
98
64
  }
99
- export async function close() {
65
+ export function close() {
100
66
  if (!rpcInstance)
101
67
  return;
102
- const isRN = isReactNative();
103
- const isBareRuntime = isBare();
104
- if (isRN) {
105
- const mod = (await import("./expo-rpc-client.js"));
106
- mod.close();
107
- }
108
- else if (isBareRuntime) {
109
- // Bare runs in-process (no separate worker), so no cleanup needed
110
- }
111
- else {
112
- const mod = (await import("./node-rpc-client.js"));
113
- mod.close();
114
- }
68
+ closeRPC();
115
69
  rpcInstance = null;
116
70
  }
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ swarmRelays: string[];
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=blind-relay.config.d.ts.map
@@ -0,0 +1,7 @@
1
+ export default {
2
+ swarmRelays: [
3
+ "0000000000000000000000000000000000000000000000000000000000000001",
4
+ "0000000000000000000000000000000000000000000000000000000000000002",
5
+ "0000000000000000000000000000000000000000000000000000000000000003",
6
+ ],
7
+ };
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ loggerLevel: string;
3
+ loggerConsoleOutput: boolean;
4
+ httpDownloadConcurrency: number;
5
+ httpConnectionTimeoutMs: number;
6
+ };
7
+ export default _default;
8
+ //# sourceMappingURL=default.config.d.ts.map
@@ -0,0 +1,6 @@
1
+ export default {
2
+ loggerLevel: "info",
3
+ loggerConsoleOutput: true,
4
+ httpDownloadConcurrency: 3,
5
+ httpConnectionTimeoutMs: 10000,
6
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Default Config Example
3
+ *
4
+ * This example demonstrates how to use a config file with the SDK.
5
+ *
6
+ * Supported config formats:
7
+ * - qvac.config.json (JSON)
8
+ * - qvac.config.js (JavaScript with default export)
9
+ * - qvac.config.ts (TypeScript with default export)
10
+ *
11
+ * Config resolution order:
12
+ * 1. QVAC_CONFIG_PATH environment variable (used here for demo purposes)
13
+ * 2. Config file in project root - auto-discovered, no env var needed
14
+ * 3. SDK defaults
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=default-config-usage.d.ts.map
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Default Config Example
3
+ *
4
+ * This example demonstrates how to use a config file with the SDK.
5
+ *
6
+ * Supported config formats:
7
+ * - qvac.config.json (JSON)
8
+ * - qvac.config.js (JavaScript with default export)
9
+ * - qvac.config.ts (TypeScript with default export)
10
+ *
11
+ * Config resolution order:
12
+ * 1. QVAC_CONFIG_PATH environment variable (used here for demo purposes)
13
+ * 2. Config file in project root - auto-discovered, no env var needed
14
+ * 3. SDK defaults
15
+ */
16
+ // Note: This example uses .js file for the config
17
+ // However it could be .json or .ts as well, depending on your needs.
18
+ const configDir = import.meta.dirname ?? process.cwd();
19
+ process.env["QVAC_CONFIG_PATH"] =
20
+ `${configDir}/config/default/default.config.js`;
21
+ console.log(`šŸ” Using config from: ${process.env["QVAC_CONFIG_PATH"]}`);
22
+ const { loadModel, unloadModel, completion, LLAMA_3_2_1B_INST_Q4_0 } = await import("@qvac/sdk");
23
+ try {
24
+ console.log("šŸš€ Loading model with configured settings...\n");
25
+ const modelId = await loadModel({
26
+ modelSrc: LLAMA_3_2_1B_INST_Q4_0,
27
+ modelType: "llm",
28
+ });
29
+ console.log("\nšŸ’¬ Running completion...\n");
30
+ const result = completion({
31
+ modelId,
32
+ history: [
33
+ { role: "user", content: "Say 'Config works!' in exactly 3 words." },
34
+ ],
35
+ stream: true,
36
+ });
37
+ for await (const token of result.tokenStream) {
38
+ process.stdout.write(token);
39
+ }
40
+ console.log("\n");
41
+ await unloadModel({ modelId });
42
+ }
43
+ catch (error) {
44
+ console.error("āŒ Error:", error);
45
+ process.exit(1);
46
+ }
47
+ export {};
@@ -32,6 +32,7 @@ try {
32
32
  providerPublicKey,
33
33
  timeout: 5_000, // Optional: 5 second timeout for delegated requests
34
34
  fallbackToLocal: true, // Optional: Fall back to local inference if delegation fails
35
+ // forceNewConnection: true, // Optional: Force a new connection instead of reusing cached one
35
36
  },
36
37
  onProgress: (progress) => {
37
38
  console.log(`šŸ“Š Download progress: ${progress.percentage.toFixed(1)}% (${progress.downloaded}/${progress.total} bytes)`);
@@ -1,8 +1,9 @@
1
1
  // Set config path before importing SDK - the SDK loads config during initialization
2
2
  // This example uses a config file that defines blind relay public keys for improved P2P connectivity
3
3
  // Blind relays help establish connections through NAT/firewalls by acting as intermediaries
4
- import { getConfigPath } from "./config/config-path.js";
5
- process.env["QVAC_CONFIG_PATH"] = getConfigPath(import.meta.url, "qvac.config.json");
4
+ const configDir = import.meta.dirname ?? process.cwd();
5
+ process.env["QVAC_CONFIG_PATH"] =
6
+ `${configDir}/config/blind-relay/blind-relay.config.js`;
6
7
  import { downloadAsset, close, LLAMA_3_2_1B_INST_Q4_0, loadModel, getModelInfo, unloadModel, } from "@qvac/sdk";
7
8
  console.log(`šŸš€ Download with Blind Relays Example`);
8
9
  console.log(`${"=".repeat(60)}\n`);
@@ -37,7 +38,7 @@ try {
37
38
  });
38
39
  console.log(`\nāœ… Model downloaded successfully using blind relays!`);
39
40
  console.log(`Blind relays helped establish peer connections through NAT/firewalls\n`);
40
- await close();
41
+ close();
41
42
  }
42
43
  catch (error) {
43
44
  console.error("āŒ Error:", error);
@@ -13,6 +13,10 @@ try {
13
13
  onProgress: (progress) => {
14
14
  console.log(progress);
15
15
  },
16
+ modelConfig: {
17
+ gpuLayers: 99,
18
+ device: "gpu",
19
+ },
16
20
  });
17
21
  console.log("\nšŸ“ Example 1: Single Text Embedding");
18
22
  console.log("=".repeat(50));
@@ -14,7 +14,7 @@ try {
14
14
  modelConfig: {
15
15
  device: "gpu",
16
16
  ctx_size: 2048,
17
- verbosity: VERBOSITY.ERROR,
17
+ verbosity: VERBOSITY.DEBUG,
18
18
  },
19
19
  });
20
20
  // Prompt 1 with cache key "session-a" (first time - no cache exists)
@@ -70,6 +70,21 @@ try {
70
70
  }
71
71
  const stats3 = await result3.stats;
72
72
  console.log(`\n Stats: TTFT=${stats3?.timeToFirstToken}ms, CacheTokens=${stats3?.cacheTokens}\n`);
73
+ // Prompt 4: Go back to session-a to trigger flush of session-b
74
+ console.log('\nšŸ“ Prompt 4: "What is 5+5?" with cache key "session-a" (BACK TO FIRST)');
75
+ console.log(" Status: This should trigger session-b to be flushed to disk\n");
76
+ const result4 = completion({
77
+ modelId,
78
+ history: [systemPromptMessage, { role: "user", content: "What is 5+5?" }],
79
+ stream: true,
80
+ kvCache: "session-a", // Back to session-a!
81
+ });
82
+ console.log(" Response: ");
83
+ for await (const token of result4.tokenStream) {
84
+ process.stdout.write(token);
85
+ }
86
+ const stats4 = await result4.stats;
87
+ console.log(`\n Stats: TTFT=${stats4?.timeToFirstToken}ms, CacheTokens=${stats4?.cacheTokens}\n`);
73
88
  // Summary
74
89
  console.log("\nāœ… Summary:");
75
90
  console.log(' - Prompts 1 & 2 share cache key "session-a" → same cache file');