@qvac/sdk 0.7.1 → 0.8.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 (257) hide show
  1. package/NOTICE +73 -10
  2. package/README.md +4 -4
  3. package/bare-imports.json +9 -0
  4. package/dist/client/api/cancel.d.ts +9 -0
  5. package/dist/client/api/cancel.js +9 -0
  6. package/dist/client/api/completion-stream.d.ts +2 -1
  7. package/dist/client/api/completion-stream.js +2 -1
  8. package/dist/client/api/download-asset.d.ts +3 -2
  9. package/dist/client/api/download-asset.js +4 -3
  10. package/dist/client/api/embed.d.ts +5 -2
  11. package/dist/client/api/embed.js +2 -2
  12. package/dist/client/api/get-model-info.d.ts +1 -1
  13. package/dist/client/api/heartbeat.d.ts +30 -0
  14. package/dist/client/api/heartbeat.js +38 -0
  15. package/dist/client/api/index.d.ts +1 -1
  16. package/dist/client/api/index.js +1 -1
  17. package/dist/client/api/invoke-plugin.d.ts +3 -2
  18. package/dist/client/api/invoke-plugin.js +4 -4
  19. package/dist/client/api/load-model.d.ts +12 -10
  20. package/dist/client/api/load-model.js +3 -3
  21. package/dist/client/api/rag.d.ts +10 -10
  22. package/dist/client/api/rag.js +21 -21
  23. package/dist/client/api/text-to-speech.d.ts +2 -2
  24. package/dist/client/api/text-to-speech.js +3 -3
  25. package/dist/client/api/transcribe.d.ts +5 -3
  26. package/dist/client/api/transcribe.js +6 -4
  27. package/dist/client/api/translate.d.ts +2 -2
  28. package/dist/client/api/translate.js +3 -3
  29. package/dist/client/rpc/node-rpc-client.d.ts +2 -7
  30. package/dist/client/rpc/node-rpc-client.js +2 -39
  31. package/dist/client/rpc/profiling/index.d.ts +2 -0
  32. package/dist/client/rpc/profiling/index.js +1 -0
  33. package/dist/client/rpc/profiling/profiler.d.ts +27 -0
  34. package/dist/client/rpc/profiling/profiler.js +139 -0
  35. package/dist/client/rpc/rpc-client.d.ts +2 -2
  36. package/dist/client/rpc/rpc-client.js +174 -12
  37. package/dist/examples/delegated-inference/consumer-profiled.d.ts +2 -0
  38. package/dist/examples/delegated-inference/consumer-profiled.js +67 -0
  39. package/dist/examples/embed-p2p.d.ts +2 -0
  40. package/dist/examples/llamacpp-multimodal.js +1 -1
  41. package/dist/examples/llamacpp-p2p.d.ts +2 -0
  42. package/dist/examples/parallel-download.js +45 -13
  43. package/dist/examples/profiling/basic.d.ts +2 -0
  44. package/dist/examples/profiling/basic.js +71 -0
  45. package/dist/examples/profiling/per-call.d.ts +2 -0
  46. package/dist/examples/profiling/per-call.js +30 -0
  47. package/dist/examples/seed-p2p.d.ts +2 -0
  48. package/dist/examples/transcription/parakeet-ctc-filesystem.d.ts +2 -0
  49. package/dist/examples/transcription/parakeet-ctc-filesystem.js +40 -0
  50. package/dist/examples/transcription/parakeet-microphone-record.d.ts +2 -0
  51. package/dist/examples/transcription/parakeet-microphone-record.js +95 -0
  52. package/dist/examples/transcription/parakeet-sortformer.d.ts +2 -0
  53. package/dist/examples/transcription/parakeet-sortformer.js +115 -0
  54. package/dist/examples/transcription/parakeet-tdt-filesystem.d.ts +2 -0
  55. package/dist/examples/transcription/parakeet-tdt-filesystem.js +44 -0
  56. package/dist/examples/translation/translation-bergamot-pivot.d.ts +2 -0
  57. package/dist/examples/translation/translation-bergamot-pivot.js +73 -0
  58. package/dist/examples/translation/translation-llm-afriquegemma.d.ts +2 -0
  59. package/dist/examples/translation/translation-llm-afriquegemma.js +39 -0
  60. package/dist/index.d.ts +4 -2
  61. package/dist/index.js +3 -1
  62. package/dist/logging/index.d.ts +1 -1
  63. package/dist/logging/index.js +1 -1
  64. package/dist/logging/namespaces.d.ts +3 -9
  65. package/dist/logging/namespaces.js +2 -8
  66. package/dist/logging/registry.js +15 -1
  67. package/dist/models/registry/models.d.ts +1671 -310
  68. package/dist/models/registry/models.js +2116 -710
  69. package/dist/models/update-models/codegen.js +2 -2
  70. package/dist/models/update-models/history.d.ts +11 -0
  71. package/dist/models/update-models/history.js +24 -5
  72. package/dist/models/update-models/index.js +17 -16
  73. package/dist/models/update-models/naming.js +56 -0
  74. package/dist/profiling/aggregator.d.ts +15 -0
  75. package/dist/profiling/aggregator.js +100 -0
  76. package/dist/profiling/clock.d.ts +12 -0
  77. package/dist/profiling/clock.js +51 -0
  78. package/dist/profiling/controller.d.ts +33 -0
  79. package/dist/profiling/controller.js +123 -0
  80. package/dist/profiling/envelope.d.ts +10 -0
  81. package/dist/profiling/envelope.js +36 -0
  82. package/dist/profiling/events.d.ts +20 -0
  83. package/dist/profiling/events.js +37 -0
  84. package/dist/profiling/exporters.d.ts +10 -0
  85. package/dist/profiling/exporters.js +236 -0
  86. package/dist/profiling/index.d.ts +36 -0
  87. package/dist/profiling/index.js +31 -0
  88. package/dist/profiling/ring-buffer.d.ts +19 -0
  89. package/dist/profiling/ring-buffer.js +83 -0
  90. package/dist/profiling/types.d.ts +47 -0
  91. package/dist/profiling/types.js +1 -0
  92. package/dist/schemas/cancel.d.ts +12 -0
  93. package/dist/schemas/cancel.js +2 -0
  94. package/dist/schemas/common.d.ts +1927 -135
  95. package/dist/schemas/common.js +6 -3
  96. package/dist/schemas/completion-stream.d.ts +31 -0
  97. package/dist/schemas/completion-stream.js +13 -0
  98. package/dist/schemas/delegate.d.ts +8 -0
  99. package/dist/schemas/delegate.js +5 -2
  100. package/dist/schemas/download-asset.d.ts +14 -3
  101. package/dist/schemas/download-asset.js +3 -1
  102. package/dist/schemas/engine-addon-map.js +9 -6
  103. package/dist/schemas/get-model-info.d.ts +2 -0
  104. package/dist/schemas/get-model-info.js +1 -0
  105. package/dist/schemas/heartbeat.d.ts +17 -0
  106. package/dist/schemas/heartbeat.js +10 -0
  107. package/dist/schemas/index.d.ts +3 -2
  108. package/dist/schemas/index.js +3 -2
  109. package/dist/schemas/llamacpp-config.d.ts +140 -14
  110. package/dist/schemas/llamacpp-config.js +11 -7
  111. package/dist/schemas/load-model.d.ts +9762 -2515
  112. package/dist/schemas/load-model.js +142 -182
  113. package/dist/schemas/model-src-utils.d.ts +10 -2
  114. package/dist/schemas/model-types.d.ts +19 -1
  115. package/dist/schemas/model-types.js +11 -0
  116. package/dist/schemas/ocr.d.ts +37 -0
  117. package/dist/schemas/ocr.js +5 -0
  118. package/dist/schemas/plugin.d.ts +51 -5
  119. package/dist/schemas/plugin.js +26 -0
  120. package/dist/schemas/profiling.d.ts +105 -0
  121. package/dist/schemas/profiling.js +66 -0
  122. package/dist/schemas/registry.d.ts +18 -0
  123. package/dist/schemas/registry.js +2 -0
  124. package/dist/schemas/reload-config.d.ts +126 -6
  125. package/dist/schemas/reload-config.js +1 -1
  126. package/dist/schemas/sdk-config.d.ts +2280 -24
  127. package/dist/schemas/sdk-config.js +6 -1
  128. package/dist/schemas/sdk-errors-client.d.ts +1 -0
  129. package/dist/schemas/sdk-errors-client.js +7 -0
  130. package/dist/schemas/sdk-errors-server.d.ts +3 -0
  131. package/dist/schemas/sdk-errors-server.js +15 -0
  132. package/dist/schemas/text-to-speech.d.ts +90 -68
  133. package/dist/schemas/text-to-speech.js +16 -33
  134. package/dist/schemas/transcription-config.d.ts +383 -0
  135. package/dist/schemas/{whispercpp-config.js → transcription-config.js} +29 -1
  136. package/dist/schemas/translation-config.d.ts +463 -8
  137. package/dist/schemas/translation-config.js +35 -2
  138. package/dist/server/bare/delegate-rpc-client.js +52 -11
  139. package/dist/server/bare/ops/load-model.d.ts +7 -1
  140. package/dist/server/bare/ops/load-model.js +41 -42
  141. package/dist/server/bare/ops/transcribe.d.ts +3 -0
  142. package/dist/server/bare/ops/transcribe.js +75 -0
  143. package/dist/server/bare/ops/translate.d.ts +2 -0
  144. package/dist/server/bare/ops/translate.js +12 -4
  145. package/dist/server/bare/plugins/index.d.ts +1 -0
  146. package/dist/server/bare/plugins/index.js +1 -0
  147. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.d.ts +2 -1
  148. package/dist/server/bare/plugins/llamacpp-completion/ops/completion-stream.js +8 -6
  149. package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +108 -3
  150. package/dist/server/bare/plugins/llamacpp-completion/plugin.js +19 -6
  151. package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +32 -2
  152. package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +31 -17
  153. package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +325 -3
  154. package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +117 -13
  155. package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +50 -2
  156. package/dist/server/bare/plugins/onnx-ocr/plugin.js +46 -5
  157. package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +351 -4
  158. package/dist/server/bare/plugins/onnx-tts/plugin.js +81 -61
  159. package/dist/server/bare/plugins/parakeet-transcription/plugin.d.ts +317 -0
  160. package/dist/server/bare/plugins/parakeet-transcription/plugin.js +154 -0
  161. package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +209 -3
  162. package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +21 -9
  163. package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +2 -2
  164. package/dist/server/bare/registry/model-config-utils.js +3 -1
  165. package/dist/server/bare/registry/model-registry.d.ts +2 -0
  166. package/dist/server/bare/registry/model-registry.js +2 -1
  167. package/dist/server/bare/utils/audio-input.d.ts +10 -0
  168. package/dist/server/bare/utils/audio-input.js +33 -0
  169. package/dist/server/error-handlers.d.ts +3 -2
  170. package/dist/server/error-handlers.js +11 -8
  171. package/dist/server/plugins/registry.js +5 -1
  172. package/dist/server/rpc/delegate-transport.d.ts +11 -3
  173. package/dist/server/rpc/delegate-transport.js +214 -38
  174. package/dist/server/rpc/delegate-utils.d.ts +2 -0
  175. package/dist/server/rpc/delegate-utils.js +5 -0
  176. package/dist/server/rpc/handle-request.js +43 -4
  177. package/dist/server/rpc/handler-registry.js +33 -4
  178. package/dist/server/rpc/handler-utils.d.ts +5 -4
  179. package/dist/server/rpc/handler-utils.js +114 -31
  180. package/dist/server/rpc/handlers/cancel-delegated.d.ts +4 -0
  181. package/dist/server/rpc/handlers/cancel-delegated.js +71 -0
  182. package/dist/server/rpc/handlers/completion-stream-delegated.d.ts +3 -1
  183. package/dist/server/rpc/handlers/completion-stream-delegated.js +13 -4
  184. package/dist/server/rpc/handlers/download-asset.js +55 -3
  185. package/dist/server/rpc/handlers/heartbeat-delegated.d.ts +4 -0
  186. package/dist/server/rpc/handlers/heartbeat-delegated.js +32 -0
  187. package/dist/server/rpc/handlers/heartbeat.d.ts +3 -0
  188. package/dist/server/rpc/handlers/heartbeat.js +3 -0
  189. package/dist/server/rpc/handlers/index.d.ts +2 -2
  190. package/dist/server/rpc/handlers/index.js +2 -2
  191. package/dist/server/rpc/handlers/load-model/download-stats.d.ts +6 -0
  192. package/dist/server/rpc/handlers/load-model/download-stats.js +87 -0
  193. package/dist/server/rpc/handlers/load-model/handler.js +108 -123
  194. package/dist/server/rpc/handlers/load-model/http.d.ts +2 -1
  195. package/dist/server/rpc/handlers/load-model/http.js +21 -5
  196. package/dist/server/rpc/handlers/load-model/hyperdrive.d.ts +2 -1
  197. package/dist/server/rpc/handlers/load-model/hyperdrive.js +19 -14
  198. package/dist/server/rpc/handlers/load-model/registry.d.ts +2 -1
  199. package/dist/server/rpc/handlers/load-model/registry.js +113 -136
  200. package/dist/server/rpc/handlers/load-model/resolve.d.ts +2 -0
  201. package/dist/server/rpc/handlers/load-model/resolve.js +55 -22
  202. package/dist/server/rpc/handlers/load-model/types.d.ts +29 -0
  203. package/dist/server/rpc/handlers/load-model/types.js +1 -0
  204. package/dist/server/rpc/handlers/load-model-delegated.d.ts +5 -1
  205. package/dist/server/rpc/handlers/load-model-delegated.js +41 -11
  206. package/dist/server/rpc/handlers/plugin-dispatch.js +15 -10
  207. package/dist/server/rpc/handlers/plugin-invoke.js +56 -51
  208. package/dist/server/rpc/handlers/rag.js +24 -0
  209. package/dist/server/rpc/handlers/unload-model-delegated.d.ts +3 -0
  210. package/dist/server/rpc/handlers/unload-model-delegated.js +32 -0
  211. package/dist/server/rpc/profiling/context.d.ts +18 -0
  212. package/dist/server/rpc/profiling/context.js +38 -0
  213. package/dist/server/rpc/profiling/delegation-profiler.d.ts +32 -0
  214. package/dist/server/rpc/profiling/delegation-profiler.js +154 -0
  215. package/dist/server/rpc/profiling/index.d.ts +5 -0
  216. package/dist/server/rpc/profiling/index.js +4 -0
  217. package/dist/server/rpc/profiling/operation-metrics.d.ts +25 -0
  218. package/dist/server/rpc/profiling/operation-metrics.js +199 -0
  219. package/dist/server/rpc/profiling/operation-wrappers.d.ts +18 -0
  220. package/dist/server/rpc/profiling/operation-wrappers.js +124 -0
  221. package/dist/server/rpc/profiling/profiler.d.ts +13 -0
  222. package/dist/server/rpc/profiling/profiler.js +97 -0
  223. package/dist/server/utils/cache.d.ts +2 -1
  224. package/dist/server/utils/cache.js +5 -1
  225. package/dist/server/utils/checksum.d.ts +2 -0
  226. package/dist/server/utils/checksum.js +7 -0
  227. package/dist/server/utils/formatting.d.ts +6 -0
  228. package/dist/server/utils/formatting.js +35 -0
  229. package/dist/server/worker.js +2 -1
  230. package/dist/utils/errors-client.d.ts +3 -0
  231. package/dist/utils/errors-client.js +6 -0
  232. package/dist/utils/errors-server.d.ts +9 -0
  233. package/dist/utils/errors-server.js +15 -0
  234. package/dist/utils/global-singleton.d.ts +2 -0
  235. package/dist/utils/global-singleton.js +10 -0
  236. package/package.json +22 -18
  237. package/dist/client/api/ping.d.ts +0 -11
  238. package/dist/client/api/ping.js +0 -19
  239. package/dist/examples/embed-hyperdrive.d.ts +0 -2
  240. package/dist/examples/llamacpp-hyperdrive.d.ts +0 -2
  241. package/dist/examples/seed-hyperdrive.d.ts +0 -2
  242. package/dist/schemas/ping.d.ts +0 -11
  243. package/dist/schemas/ping.js +0 -8
  244. package/dist/schemas/whispercpp-config.d.ts +0 -70
  245. package/dist/server/bare/plugins/whispercpp-transcription/ops/transcribe-stream.d.ts +0 -3
  246. package/dist/server/bare/plugins/whispercpp-transcription/ops/transcribe-stream.js +0 -81
  247. package/dist/server/rpc/handlers/ping.d.ts +0 -3
  248. package/dist/server/rpc/handlers/ping.js +0 -3
  249. /package/dist/examples/{embed-hyperdrive.js → embed-p2p.js} +0 -0
  250. /package/dist/examples/{llamacpp-hyperdrive.js → llamacpp-p2p.js} +0 -0
  251. /package/dist/examples/{seed-hyperdrive.js → seed-p2p.js} +0 -0
  252. /package/dist/examples/{whispercpp-filesystem.d.ts → transcription/whispercpp-filesystem.d.ts} +0 -0
  253. /package/dist/examples/{whispercpp-filesystem.js → transcription/whispercpp-filesystem.js} +0 -0
  254. /package/dist/examples/{whispercpp-microphone-record.d.ts → transcription/whispercpp-microphone-record.d.ts} +0 -0
  255. /package/dist/examples/{whispercpp-microphone-record.js → transcription/whispercpp-microphone-record.js} +0 -0
  256. /package/dist/examples/{whispercpp-prompt.d.ts → transcription/whispercpp-prompt.d.ts} +0 -0
  257. /package/dist/examples/{whispercpp-prompt.js → transcription/whispercpp-prompt.js} +0 -0
@@ -0,0 +1,154 @@
1
+ import parakeetAddonLogging from "@qvac/transcription-parakeet/addonLogging.js";
2
+ import TranscriptionParakeet, {} from "@qvac/transcription-parakeet";
3
+ import { definePlugin, defineHandler, transcribeStreamRequestSchema, transcribeStreamResponseSchema, ModelType, parakeetConfigSchema, ADDON_PARAKEET, } from "../../../../schemas/index.js";
4
+ import { createStreamLogger, registerAddonLogger } from "../../../../logging/index.js";
5
+ import { parseModelPath } from "../../../utils/index.js";
6
+ import { ModelLoadFailedError, ParakeetArtifactsRequiredError, } from "../../../../utils/errors-server.js";
7
+ import FilesystemDL from "@qvac/dl-filesystem";
8
+ import { transcribe } from "../../ops/transcribe.js";
9
+ async function resolveTdtConfig(cfg, ctx) {
10
+ const { parakeetEncoderSrc, parakeetEncoderDataSrc, parakeetDecoderSrc, parakeetVocabSrc, parakeetPreprocessorSrc, } = cfg;
11
+ if (!parakeetEncoderSrc ||
12
+ !parakeetDecoderSrc ||
13
+ !parakeetVocabSrc ||
14
+ !parakeetPreprocessorSrc) {
15
+ throw new ParakeetArtifactsRequiredError("TDT requires: parakeetEncoderSrc, parakeetDecoderSrc, parakeetVocabSrc, parakeetPreprocessorSrc");
16
+ }
17
+ const resolve = ctx.resolveModelPath;
18
+ const [encoderPath, encoderDataPath, decoderPath, vocabPath, preprocessorPath,] = await Promise.all([
19
+ resolve(parakeetEncoderSrc),
20
+ parakeetEncoderDataSrc ? resolve(parakeetEncoderDataSrc) : undefined,
21
+ resolve(parakeetDecoderSrc),
22
+ resolve(parakeetVocabSrc),
23
+ resolve(parakeetPreprocessorSrc),
24
+ ]);
25
+ return {
26
+ config: cfg,
27
+ artifacts: {
28
+ encoderPath,
29
+ ...(encoderDataPath !== undefined && { encoderDataPath }),
30
+ ...(decoderPath !== undefined && { decoderPath }),
31
+ ...(vocabPath !== undefined && { vocabPath }),
32
+ ...(preprocessorPath !== undefined && { preprocessorPath }),
33
+ },
34
+ };
35
+ }
36
+ async function resolveCtcConfig(cfg, ctx) {
37
+ const { parakeetCtcModelSrc, parakeetCtcModelDataSrc, parakeetTokenizerSrc } = cfg;
38
+ if (!parakeetCtcModelSrc || !parakeetTokenizerSrc) {
39
+ throw new ParakeetArtifactsRequiredError("CTC requires: parakeetCtcModelSrc, parakeetTokenizerSrc");
40
+ }
41
+ const resolve = ctx.resolveModelPath;
42
+ const [ctcModelPath, ctcModelDataPath, tokenizerPath] = await Promise.all([
43
+ resolve(parakeetCtcModelSrc),
44
+ parakeetCtcModelDataSrc ? resolve(parakeetCtcModelDataSrc) : undefined,
45
+ resolve(parakeetTokenizerSrc),
46
+ ]);
47
+ return {
48
+ config: cfg,
49
+ artifacts: {
50
+ ctcModelPath,
51
+ ...(ctcModelDataPath !== undefined && { ctcModelDataPath }),
52
+ ...(tokenizerPath !== undefined && { tokenizerPath }),
53
+ },
54
+ };
55
+ }
56
+ async function resolveSortformerConfig(cfg, ctx) {
57
+ const { parakeetSortformerSrc } = cfg;
58
+ if (!parakeetSortformerSrc) {
59
+ throw new ParakeetArtifactsRequiredError("Sortformer requires: parakeetSortformerSrc");
60
+ }
61
+ const resolve = ctx.resolveModelPath;
62
+ const sortformerPath = await resolve(parakeetSortformerSrc);
63
+ return {
64
+ config: cfg,
65
+ artifacts: {
66
+ ...(sortformerPath !== undefined && { sortformerPath }),
67
+ },
68
+ };
69
+ }
70
+ function createParakeetModel(params, addonPathKey) {
71
+ const config = (params.modelConfig ?? {});
72
+ const artifacts = params.artifacts ?? {};
73
+ const modelType = config.modelType ?? "tdt";
74
+ const primaryPath = artifacts[addonPathKey] ?? params.modelPath;
75
+ if (!primaryPath) {
76
+ throw new ModelLoadFailedError(`Parakeet ${modelType} requires a model source`);
77
+ }
78
+ const { dirPath } = parseModelPath(primaryPath);
79
+ const loader = new FilesystemDL({ dirPath });
80
+ const logger = createStreamLogger(params.modelId, ModelType.parakeetTranscription);
81
+ registerAddonLogger(params.modelId, ModelType.parakeetTranscription, logger);
82
+ const addonConfig = {
83
+ path: dirPath,
84
+ [addonPathKey]: primaryPath,
85
+ ...artifacts,
86
+ parakeetConfig: {
87
+ modelType,
88
+ maxThreads: config.maxThreads,
89
+ useGPU: config.useGPU,
90
+ sampleRate: config.sampleRate,
91
+ channels: config.channels,
92
+ captionEnabled: config.captionEnabled,
93
+ timestampsEnabled: config.timestampsEnabled,
94
+ },
95
+ };
96
+ const model = new TranscriptionParakeet({
97
+ loader,
98
+ logger,
99
+ modelName: parseModelPath(dirPath).basePath,
100
+ diskPath: dirPath,
101
+ }, addonConfig);
102
+ return { model, loader };
103
+ }
104
+ export const parakeetPlugin = definePlugin({
105
+ modelType: ModelType.parakeetTranscription,
106
+ displayName: "Parakeet (NVIDIA NeMo ONNX)",
107
+ addonPackage: ADDON_PARAKEET,
108
+ loadConfigSchema: parakeetConfigSchema,
109
+ skipPrimaryModelPathValidation: true,
110
+ async resolveConfig(cfg, ctx) {
111
+ const modelType = cfg.modelType ?? "tdt";
112
+ if (modelType === "ctc")
113
+ return resolveCtcConfig(cfg, ctx);
114
+ if (modelType === "sortformer")
115
+ return resolveSortformerConfig(cfg, ctx);
116
+ return resolveTdtConfig(cfg, ctx);
117
+ },
118
+ createModel(params) {
119
+ const modelType = (params.modelConfig ?? {}).modelType ?? "tdt";
120
+ if (modelType === "ctc")
121
+ return createParakeetModel(params, "ctcModelPath");
122
+ if (modelType === "sortformer")
123
+ return createParakeetModel(params, "sortformerPath");
124
+ return createParakeetModel(params, "encoderPath");
125
+ },
126
+ handlers: {
127
+ transcribeStream: defineHandler({
128
+ requestSchema: transcribeStreamRequestSchema,
129
+ responseSchema: transcribeStreamResponseSchema,
130
+ streaming: true,
131
+ handler: async function* (request) {
132
+ for await (const text of transcribe({
133
+ modelId: request.modelId,
134
+ audioChunk: request.audioChunk,
135
+ prompt: request.prompt,
136
+ })) {
137
+ yield {
138
+ type: "transcribeStream",
139
+ text,
140
+ };
141
+ }
142
+ yield {
143
+ type: "transcribeStream",
144
+ text: "",
145
+ done: true,
146
+ };
147
+ },
148
+ }),
149
+ },
150
+ logging: {
151
+ module: parakeetAddonLogging,
152
+ namespace: ModelType.parakeetTranscription,
153
+ },
154
+ });
@@ -1,8 +1,214 @@
1
- import { type CreateModelParams, type PluginModelResult } from "../../../../schemas/index";
1
+ import { type CreateModelParams, type PluginModelResult, type ResolveContext, type WhisperConfig } from "../../../../schemas/index";
2
2
  export declare const whisperPlugin: {
3
3
  modelType: "whispercpp-transcription";
4
4
  displayName: string;
5
- addonPackage: string;
5
+ addonPackage: "@qvac/transcription-whispercpp";
6
+ loadConfigSchema: import("zod").ZodObject<{
7
+ strategy: import("zod").ZodOptional<import("zod").ZodEnum<{
8
+ greedy: "greedy";
9
+ beam_search: "beam_search";
10
+ }>>;
11
+ n_threads: import("zod").ZodOptional<import("zod").ZodNumber>;
12
+ n_max_text_ctx: import("zod").ZodOptional<import("zod").ZodNumber>;
13
+ offset_ms: import("zod").ZodOptional<import("zod").ZodNumber>;
14
+ duration_ms: import("zod").ZodOptional<import("zod").ZodNumber>;
15
+ audio_ctx: import("zod").ZodOptional<import("zod").ZodNumber>;
16
+ translate: import("zod").ZodOptional<import("zod").ZodBoolean>;
17
+ no_context: import("zod").ZodOptional<import("zod").ZodBoolean>;
18
+ no_timestamps: import("zod").ZodOptional<import("zod").ZodBoolean>;
19
+ single_segment: import("zod").ZodOptional<import("zod").ZodBoolean>;
20
+ print_special: import("zod").ZodOptional<import("zod").ZodBoolean>;
21
+ print_progress: import("zod").ZodOptional<import("zod").ZodBoolean>;
22
+ print_realtime: import("zod").ZodOptional<import("zod").ZodBoolean>;
23
+ print_timestamps: import("zod").ZodOptional<import("zod").ZodBoolean>;
24
+ token_timestamps: import("zod").ZodOptional<import("zod").ZodBoolean>;
25
+ thold_pt: import("zod").ZodOptional<import("zod").ZodNumber>;
26
+ thold_ptsum: import("zod").ZodOptional<import("zod").ZodNumber>;
27
+ max_len: import("zod").ZodOptional<import("zod").ZodNumber>;
28
+ split_on_word: import("zod").ZodOptional<import("zod").ZodBoolean>;
29
+ max_tokens: import("zod").ZodOptional<import("zod").ZodNumber>;
30
+ debug_mode: import("zod").ZodOptional<import("zod").ZodBoolean>;
31
+ tdrz_enable: import("zod").ZodOptional<import("zod").ZodBoolean>;
32
+ suppress_regex: import("zod").ZodOptional<import("zod").ZodString>;
33
+ initial_prompt: import("zod").ZodOptional<import("zod").ZodString>;
34
+ language: import("zod").ZodOptional<import("zod").ZodString>;
35
+ detect_language: import("zod").ZodOptional<import("zod").ZodBoolean>;
36
+ suppress_blank: import("zod").ZodOptional<import("zod").ZodBoolean>;
37
+ suppress_nst: import("zod").ZodOptional<import("zod").ZodBoolean>;
38
+ temperature: import("zod").ZodOptional<import("zod").ZodNumber>;
39
+ length_penalty: import("zod").ZodOptional<import("zod").ZodNumber>;
40
+ temperature_inc: import("zod").ZodOptional<import("zod").ZodNumber>;
41
+ entropy_thold: import("zod").ZodOptional<import("zod").ZodNumber>;
42
+ logprob_thold: import("zod").ZodOptional<import("zod").ZodNumber>;
43
+ greedy_best_of: import("zod").ZodOptional<import("zod").ZodNumber>;
44
+ beam_search_beam_size: import("zod").ZodOptional<import("zod").ZodNumber>;
45
+ vad_params: import("zod").ZodOptional<import("zod").ZodObject<{
46
+ threshold: import("zod").ZodOptional<import("zod").ZodNumber>;
47
+ min_speech_duration_ms: import("zod").ZodOptional<import("zod").ZodNumber>;
48
+ min_silence_duration_ms: import("zod").ZodOptional<import("zod").ZodNumber>;
49
+ max_speech_duration_s: import("zod").ZodOptional<import("zod").ZodNumber>;
50
+ speech_pad_ms: import("zod").ZodOptional<import("zod").ZodNumber>;
51
+ samples_overlap: import("zod").ZodOptional<import("zod").ZodNumber>;
52
+ }, import("zod/v4/core").$strip>>;
53
+ audio_format: import("zod").ZodOptional<import("zod").ZodEnum<{
54
+ f32le: "f32le";
55
+ s16le: "s16le";
56
+ }>>;
57
+ contextParams: import("zod").ZodOptional<import("zod").ZodObject<{
58
+ model: import("zod").ZodOptional<import("zod").ZodString>;
59
+ use_gpu: import("zod").ZodOptional<import("zod").ZodBoolean>;
60
+ flash_attn: import("zod").ZodOptional<import("zod").ZodBoolean>;
61
+ gpu_device: import("zod").ZodOptional<import("zod").ZodNumber>;
62
+ }, import("zod/v4/core").$strip>>;
63
+ miscConfig: import("zod").ZodOptional<import("zod").ZodObject<{
64
+ caption_enabled: import("zod").ZodOptional<import("zod").ZodBoolean>;
65
+ }, import("zod/v4/core").$strip>>;
66
+ vadModelSrc: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodObject<{
67
+ src: import("zod").ZodString;
68
+ name: import("zod").ZodOptional<import("zod").ZodString>;
69
+ modelId: import("zod").ZodOptional<import("zod").ZodString>;
70
+ registryPath: import("zod").ZodOptional<import("zod").ZodString>;
71
+ registrySource: import("zod").ZodOptional<import("zod").ZodString>;
72
+ blobCoreKey: import("zod").ZodOptional<import("zod").ZodString>;
73
+ blobIndex: import("zod").ZodOptional<import("zod").ZodNumber>;
74
+ engine: import("zod").ZodOptional<import("zod").ZodString>;
75
+ expectedSize: import("zod").ZodOptional<import("zod").ZodNumber>;
76
+ sha256Checksum: import("zod").ZodOptional<import("zod").ZodString>;
77
+ addon: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodEnum<{
78
+ "llamacpp-completion": "llamacpp-completion";
79
+ "whispercpp-transcription": "whispercpp-transcription";
80
+ "llamacpp-embedding": "llamacpp-embedding";
81
+ "nmtcpp-translation": "nmtcpp-translation";
82
+ "onnx-tts": "onnx-tts";
83
+ "parakeet-transcription": "parakeet-transcription";
84
+ "onnx-ocr": "onnx-ocr";
85
+ llm: "llm";
86
+ whisper: "whisper";
87
+ embeddings: "embeddings";
88
+ nmt: "nmt";
89
+ parakeet: "parakeet";
90
+ tts: "tts";
91
+ ocr: "ocr";
92
+ }>, import("zod").ZodLiteral<"vad">]>>;
93
+ }, import("zod/v4/core").$strip>]>>;
94
+ }, import("zod/v4/core").$strip>;
95
+ resolveConfig(cfg: WhisperConfig, ctx: ResolveContext): Promise<{
96
+ config: {
97
+ strategy?: "greedy" | "beam_search" | undefined;
98
+ n_threads?: number | undefined;
99
+ n_max_text_ctx?: number | undefined;
100
+ offset_ms?: number | undefined;
101
+ duration_ms?: number | undefined;
102
+ audio_ctx?: number | undefined;
103
+ translate?: boolean | undefined;
104
+ no_context?: boolean | undefined;
105
+ no_timestamps?: boolean | undefined;
106
+ single_segment?: boolean | undefined;
107
+ print_special?: boolean | undefined;
108
+ print_progress?: boolean | undefined;
109
+ print_realtime?: boolean | undefined;
110
+ print_timestamps?: boolean | undefined;
111
+ token_timestamps?: boolean | undefined;
112
+ thold_pt?: number | undefined;
113
+ thold_ptsum?: number | undefined;
114
+ max_len?: number | undefined;
115
+ split_on_word?: boolean | undefined;
116
+ max_tokens?: number | undefined;
117
+ debug_mode?: boolean | undefined;
118
+ tdrz_enable?: boolean | undefined;
119
+ suppress_regex?: string | undefined;
120
+ initial_prompt?: string | undefined;
121
+ language?: string | undefined;
122
+ detect_language?: boolean | undefined;
123
+ suppress_blank?: boolean | undefined;
124
+ suppress_nst?: boolean | undefined;
125
+ temperature?: number | undefined;
126
+ length_penalty?: number | undefined;
127
+ temperature_inc?: number | undefined;
128
+ entropy_thold?: number | undefined;
129
+ logprob_thold?: number | undefined;
130
+ greedy_best_of?: number | undefined;
131
+ beam_search_beam_size?: number | undefined;
132
+ vad_params?: {
133
+ threshold?: number | undefined;
134
+ min_speech_duration_ms?: number | undefined;
135
+ min_silence_duration_ms?: number | undefined;
136
+ max_speech_duration_s?: number | undefined;
137
+ speech_pad_ms?: number | undefined;
138
+ samples_overlap?: number | undefined;
139
+ } | undefined;
140
+ audio_format?: "f32le" | "s16le" | undefined;
141
+ contextParams?: {
142
+ model?: string | undefined;
143
+ use_gpu?: boolean | undefined;
144
+ flash_attn?: boolean | undefined;
145
+ gpu_device?: number | undefined;
146
+ } | undefined;
147
+ miscConfig?: {
148
+ caption_enabled?: boolean | undefined;
149
+ } | undefined;
150
+ };
151
+ artifacts?: never;
152
+ } | {
153
+ config: {
154
+ strategy?: "greedy" | "beam_search" | undefined;
155
+ n_threads?: number | undefined;
156
+ n_max_text_ctx?: number | undefined;
157
+ offset_ms?: number | undefined;
158
+ duration_ms?: number | undefined;
159
+ audio_ctx?: number | undefined;
160
+ translate?: boolean | undefined;
161
+ no_context?: boolean | undefined;
162
+ no_timestamps?: boolean | undefined;
163
+ single_segment?: boolean | undefined;
164
+ print_special?: boolean | undefined;
165
+ print_progress?: boolean | undefined;
166
+ print_realtime?: boolean | undefined;
167
+ print_timestamps?: boolean | undefined;
168
+ token_timestamps?: boolean | undefined;
169
+ thold_pt?: number | undefined;
170
+ thold_ptsum?: number | undefined;
171
+ max_len?: number | undefined;
172
+ split_on_word?: boolean | undefined;
173
+ max_tokens?: number | undefined;
174
+ debug_mode?: boolean | undefined;
175
+ tdrz_enable?: boolean | undefined;
176
+ suppress_regex?: string | undefined;
177
+ initial_prompt?: string | undefined;
178
+ language?: string | undefined;
179
+ detect_language?: boolean | undefined;
180
+ suppress_blank?: boolean | undefined;
181
+ suppress_nst?: boolean | undefined;
182
+ temperature?: number | undefined;
183
+ length_penalty?: number | undefined;
184
+ temperature_inc?: number | undefined;
185
+ entropy_thold?: number | undefined;
186
+ logprob_thold?: number | undefined;
187
+ greedy_best_of?: number | undefined;
188
+ beam_search_beam_size?: number | undefined;
189
+ vad_params?: {
190
+ threshold?: number | undefined;
191
+ min_speech_duration_ms?: number | undefined;
192
+ min_silence_duration_ms?: number | undefined;
193
+ max_speech_duration_s?: number | undefined;
194
+ speech_pad_ms?: number | undefined;
195
+ samples_overlap?: number | undefined;
196
+ } | undefined;
197
+ audio_format?: "f32le" | "s16le" | undefined;
198
+ contextParams?: {
199
+ model?: string | undefined;
200
+ use_gpu?: boolean | undefined;
201
+ flash_attn?: boolean | undefined;
202
+ gpu_device?: number | undefined;
203
+ } | undefined;
204
+ miscConfig?: {
205
+ caption_enabled?: boolean | undefined;
206
+ } | undefined;
207
+ };
208
+ artifacts: {
209
+ vadModelPath: string;
210
+ };
211
+ }>;
6
212
  createModel(params: CreateModelParams): PluginModelResult;
7
213
  handlers: {
8
214
  transcribeStream: import("../../../../schemas/index").PluginHandlerDefinition<import("zod").ZodObject<{
@@ -25,7 +231,7 @@ export declare const whisperPlugin: {
25
231
  };
26
232
  logging: {
27
233
  module: import("@qvac/transcription-whispercpp/addonLogging").AddonLogging;
28
- namespace: "whispercpp";
234
+ namespace: "whispercpp-transcription";
29
235
  };
30
236
  };
31
237
  //# sourceMappingURL=plugin.d.ts.map
@@ -1,20 +1,20 @@
1
1
  import whisperAddonLogging from "@qvac/transcription-whispercpp/addonLogging.js";
2
2
  import TranscriptionWhispercpp, {} from "@qvac/transcription-whispercpp";
3
- import { definePlugin, defineHandler, transcribeStreamRequestSchema, transcribeStreamResponseSchema, ModelType, } from "../../../../schemas/index.js";
4
- import { ADDON_NAMESPACES, createStreamLogger } from "../../../../logging/index.js";
3
+ import { definePlugin, defineHandler, transcribeStreamRequestSchema, transcribeStreamResponseSchema, ModelType, whisperConfigSchema, ADDON_WHISPER, } from "../../../../schemas/index.js";
4
+ import { createStreamLogger, registerAddonLogger } from "../../../../logging/index.js";
5
5
  import { parseModelPath } from "../../../utils/index.js";
6
6
  import FilesystemDL from "@qvac/dl-filesystem";
7
- import { transcribe } from "./ops/transcribe-stream.js";
7
+ import { transcribe } from "../../ops/transcribe.js";
8
8
  function createWhisperModel(modelId, modelPath, whisperConfig, vadModelPath) {
9
9
  const { dirPath, basePath } = parseModelPath(modelPath);
10
10
  let vadModelName = "";
11
- const effectiveVadPath = vadModelPath || whisperConfig.vad_model_path;
12
- if (effectiveVadPath) {
13
- const vadParsed = parseModelPath(effectiveVadPath);
11
+ if (vadModelPath) {
12
+ const vadParsed = parseModelPath(vadModelPath);
14
13
  vadModelName = vadParsed.basePath;
15
14
  }
16
15
  const loader = new FilesystemDL({ dirPath });
17
- const logger = createStreamLogger(modelId, "whispercpp");
16
+ const logger = createStreamLogger(modelId, ModelType.whispercppTranscription);
17
+ registerAddonLogger(modelId, ModelType.whispercppTranscription, logger);
18
18
  const args = {
19
19
  loader,
20
20
  logger,
@@ -37,7 +37,19 @@ function createWhisperModel(modelId, modelPath, whisperConfig, vadModelPath) {
37
37
  export const whisperPlugin = definePlugin({
38
38
  modelType: ModelType.whispercppTranscription,
39
39
  displayName: "Whisper (whisper.cpp)",
40
- addonPackage: "@qvac/transcription-whispercpp",
40
+ addonPackage: ADDON_WHISPER,
41
+ loadConfigSchema: whisperConfigSchema,
42
+ async resolveConfig(cfg, ctx) {
43
+ const { vadModelSrc, ...whisperConfig } = cfg;
44
+ if (!vadModelSrc) {
45
+ return { config: whisperConfig };
46
+ }
47
+ const vadModelPath = await ctx.resolveModelPath(vadModelSrc);
48
+ return {
49
+ config: whisperConfig,
50
+ artifacts: { vadModelPath },
51
+ };
52
+ },
41
53
  createModel(params) {
42
54
  const whisperConfig = (params.modelConfig ?? {});
43
55
  const { model, loader } = createWhisperModel(params.modelId, params.modelPath, whisperConfig, params.artifacts?.["vadModelPath"]);
@@ -69,6 +81,6 @@ export const whisperPlugin = definePlugin({
69
81
  },
70
82
  logging: {
71
83
  module: whisperAddonLogging,
72
- namespace: ADDON_NAMESPACES.WHISPERCPP,
84
+ namespace: ModelType.whispercppTranscription,
73
85
  },
74
86
  });
@@ -5,7 +5,7 @@ import path from "bare-path";
5
5
  import { getConfiguredCacheDir } from "../registry/config-registry.js";
6
6
  import { RAGWorkspaceModelMismatchError, RAGWorkspaceNotOpenError, } from "../../../utils/errors-server.js";
7
7
  import { validateAndJoinPath } from "../../utils/path-security.js";
8
- import { createStreamLogger, getServerLogger, ADDON_NAMESPACES, } from "../../../logging/index.js";
8
+ import { createStreamLogger, getServerLogger, RAG_NAMESPACE, } from "../../../logging/index.js";
9
9
  import { cancelAllRagOperations } from "./rag-operation-manager.js";
10
10
  const logger = getServerLogger();
11
11
  const ragWorkspaces = new Map();
@@ -59,7 +59,7 @@ export async function getRagInstance(modelId, embeddingFunction, workspace) {
59
59
  }
60
60
  return entry.rag;
61
61
  }
62
- const workspaceLogger = createStreamLogger(key, ADDON_NAMESPACES.RAG_HYPERDB);
62
+ const workspaceLogger = createStreamLogger(key, RAG_NAMESPACE);
63
63
  const rag = new RAG({
64
64
  dbAdapter: entry.dbAdapter,
65
65
  embeddingFunction,
@@ -1,11 +1,12 @@
1
1
  import { ModelType, } from "../../../schemas/index.js";
2
2
  import { llmConfigSchema, embedConfigSchema } from "../../../schemas/llamacpp-config.js";
3
- import { whisperConfigSchema } from "../../../schemas/whispercpp-config.js";
3
+ import { whisperConfigSchema, parakeetRuntimeConfigSchema, } from "../../../schemas/transcription-config.js";
4
4
  import { ocrConfigSchema } from "../../../schemas/ocr.js";
5
5
  export const CANONICAL_TO_ALIAS = {
6
6
  [ModelType.llamacppCompletion]: "llm",
7
7
  [ModelType.llamacppEmbedding]: "embeddings",
8
8
  [ModelType.whispercppTranscription]: "whisper",
9
+ [ModelType.parakeetTranscription]: "parakeet",
9
10
  [ModelType.nmtcppTranslation]: "nmt",
10
11
  [ModelType.onnxTts]: "tts",
11
12
  [ModelType.onnxOcr]: "ocr",
@@ -14,6 +15,7 @@ export const MODEL_CONFIG_SCHEMAS = {
14
15
  [ModelType.llamacppCompletion]: llmConfigSchema,
15
16
  [ModelType.llamacppEmbedding]: embedConfigSchema,
16
17
  [ModelType.whispercppTranscription]: whisperConfigSchema,
18
+ [ModelType.parakeetTranscription]: parakeetRuntimeConfigSchema.passthrough(),
17
19
  [ModelType.onnxOcr]: ocrConfigSchema,
18
20
  };
19
21
  // Ordered general → specific (later patterns override earlier)
@@ -12,6 +12,7 @@ interface DelegateOptions {
12
12
  topic: string;
13
13
  providerPublicKey: string;
14
14
  timeout?: number | undefined;
15
+ healthCheckTimeout?: number | undefined;
15
16
  }
16
17
  interface LocalOptions {
17
18
  model: AnyModel;
@@ -39,6 +40,7 @@ export declare function registerModel(id: string, options: {
39
40
  topic: string;
40
41
  providerPublicKey: string;
41
42
  timeout?: number;
43
+ healthCheckTimeout?: number;
42
44
  }): void;
43
45
  export declare function getModelEntry(id: string): ModelEntry | null;
44
46
  export declare function getModel(id: string): AnyModel;
@@ -9,7 +9,7 @@ export function registerModel(id, options) {
9
9
  }
10
10
  const isDelegated = "topic" in options && "providerPublicKey" in options;
11
11
  if (isDelegated) {
12
- const { topic, providerPublicKey, timeout } = options;
12
+ const { topic, providerPublicKey, timeout, healthCheckTimeout } = options;
13
13
  modelRegistry.set(id, {
14
14
  id,
15
15
  isDelegated: true,
@@ -17,6 +17,7 @@ export function registerModel(id, options) {
17
17
  topic,
18
18
  providerPublicKey,
19
19
  timeout,
20
+ healthCheckTimeout,
20
21
  },
21
22
  });
22
23
  logger.info(`Delegated model registered: ${id} -> topic: ${topic}, provider: ${providerPublicKey}, timeout: ${timeout}ms`);
@@ -0,0 +1,10 @@
1
+ import { Readable } from "bare-stream";
2
+ import type { AudioInput, AudioFormat } from "../../../schemas/index";
3
+ /**
4
+ * Converts an AudioInput (base64 or filePath) into a Readable stream,
5
+ * decoding the audio when necessary.
6
+ *
7
+ * Shared by all transcription plugins (Whisper, Parakeet, etc.).
8
+ */
9
+ export declare function createAudioStream(audioChunk: AudioInput, audioFormat: AudioFormat): Promise<Readable>;
10
+ //# sourceMappingURL=audio-input.d.ts.map
@@ -0,0 +1,33 @@
1
+ import { Readable } from "bare-stream";
2
+ import fs from "bare-fs";
3
+ import { needsDecoding, decodeAudioToStream, } from "../../utils/audio/decoder.js";
4
+ import { AudioFileNotFoundError, InvalidAudioChunkError, } from "../../../utils/errors-server.js";
5
+ /**
6
+ * Converts an AudioInput (base64 or filePath) into a Readable stream,
7
+ * decoding the audio when necessary.
8
+ *
9
+ * Shared by all transcription plugins (Whisper, Parakeet, etc.).
10
+ */
11
+ export async function createAudioStream(audioChunk, audioFormat) {
12
+ switch (audioChunk.type) {
13
+ case "base64": {
14
+ const audioBuffer = Buffer.from(audioChunk.value, "base64");
15
+ return Readable.from([audioBuffer]);
16
+ }
17
+ case "filePath": {
18
+ const filePath = audioChunk.value;
19
+ try {
20
+ fs.accessSync(filePath);
21
+ }
22
+ catch (error) {
23
+ throw new AudioFileNotFoundError(filePath, error);
24
+ }
25
+ if (needsDecoding(filePath)) {
26
+ return decodeAudioToStream(filePath, audioFormat);
27
+ }
28
+ return fs.createReadStream(filePath);
29
+ }
30
+ default:
31
+ throw new InvalidAudioChunkError();
32
+ }
33
+ }
@@ -1,4 +1,5 @@
1
1
  import type RPC from "bare-rpc";
2
- export declare function sendErrorResponse(req: RPC.IncomingRequest, error: unknown): void;
3
- export declare function sendStreamErrorResponse(stream: ReturnType<RPC.IncomingRequest["createResponseStream"]>, error: unknown): void;
2
+ import { type ServerProfiler } from "./rpc/profiling/index";
3
+ export declare function sendErrorResponse(req: RPC.IncomingRequest, error: unknown, profiler?: ServerProfiler): void;
4
+ export declare function sendStreamErrorResponse(stream: ReturnType<RPC.IncomingRequest["createResponseStream"]>, error: unknown, profiler?: ServerProfiler): void;
4
5
  //# sourceMappingURL=error-handlers.d.ts.map
@@ -1,11 +1,16 @@
1
1
  import { createErrorResponse, responseSchema } from "../schemas/index.js";
2
2
  import { getServerLogger } from "../logging/index.js";
3
+ import {} from "./rpc/profiling/index.js";
3
4
  const logger = getServerLogger();
4
- export function sendErrorResponse(req, error) {
5
+ function buildErrorResponseData(error, profiler) {
6
+ const errorResponse = createErrorResponse(error);
7
+ const validated = responseSchema.parse(errorResponse);
8
+ const json = JSON.stringify(validated);
9
+ return profiler ? profiler.serializeError(json) : json;
10
+ }
11
+ export function sendErrorResponse(req, error, profiler) {
5
12
  try {
6
- const errorResponse = createErrorResponse(error);
7
- const responseData = JSON.stringify(responseSchema.parse(errorResponse));
8
- req.reply(responseData, "utf-8");
13
+ req.reply(buildErrorResponseData(error, profiler), "utf-8");
9
14
  }
10
15
  catch (responseError) {
11
16
  logger.error("Failed to create error response:", responseError);
@@ -13,11 +18,9 @@ export function sendErrorResponse(req, error) {
13
18
  req.reply(JSON.stringify(fallbackError), "utf-8");
14
19
  }
15
20
  }
16
- export function sendStreamErrorResponse(stream, error) {
21
+ export function sendStreamErrorResponse(stream, error, profiler) {
17
22
  try {
18
- const errorResponse = createErrorResponse(error);
19
- const responseData = JSON.stringify(responseSchema.parse(errorResponse));
20
- stream.write(responseData + "\n", "utf-8");
23
+ stream.write(buildErrorResponseData(error, profiler) + "\n", "utf-8");
21
24
  stream.end();
22
25
  }
23
26
  catch (responseError) {
@@ -1,5 +1,6 @@
1
1
  import { pluginDefinitionRuntimeSchema, } from "../../schemas/plugin.js";
2
- import { PluginAlreadyRegisteredError, PluginDefinitionInvalidError, PluginLoggingInvalidError, } from "../../utils/errors-server.js";
2
+ import { isModelTypeAlias } from "../../schemas/index.js";
3
+ import { PluginAlreadyRegisteredError, PluginDefinitionInvalidError, PluginLoggingInvalidError, PluginModelTypeReservedError, } from "../../utils/errors-server.js";
3
4
  import { createAddonLoggerCallback } from "../../logging/addon.js";
4
5
  const plugins = new Map();
5
6
  function getModelTypeForError(plugin) {
@@ -23,6 +24,9 @@ function validatePluginDefinition(plugin) {
23
24
  }
24
25
  export function registerPlugin(plugin) {
25
26
  validatePluginDefinition(plugin);
27
+ if (isModelTypeAlias(plugin.modelType)) {
28
+ throw new PluginModelTypeReservedError(plugin.modelType);
29
+ }
26
30
  if (plugins.has(plugin.modelType)) {
27
31
  throw new PluginAlreadyRegisteredError(plugin.modelType);
28
32
  }
@@ -5,7 +5,15 @@
5
5
  * delegation to remote peers (via HyperSwarm RPC).
6
6
  */
7
7
  import type RPC from "bare-rpc";
8
- import { type Request, type Response, type RPCOptions } from "../../schemas/index";
9
- export declare function send<T extends Request>(request: T, rpc: RPC, options?: RPCOptions): Promise<Response>;
10
- export declare function stream<T extends Request>(request: T, rpc: RPC, options?: RPCOptions): AsyncGenerator<Response>;
8
+ import { DELEGATION_BREAKDOWN_KEY, OPERATION_EVENT_KEY, type Request, type Response, type RPCOptions, type DelegationBreakdown, type OperationEvent } from "../../schemas/index";
9
+ import type { DelegatedHandlerOptions } from "./profiling/index";
10
+ export interface DelegateOptions extends RPCOptions, DelegatedHandlerOptions {
11
+ peerKey?: string;
12
+ }
13
+ export type ResponseWithDelegation = Response & {
14
+ [DELEGATION_BREAKDOWN_KEY]?: DelegationBreakdown;
15
+ [OPERATION_EVENT_KEY]?: OperationEvent;
16
+ };
17
+ export declare function send<T extends Request>(request: T, rpc: RPC, options?: DelegateOptions): Promise<Response>;
18
+ export declare function stream<T extends Request>(request: T, rpc: RPC, options?: DelegateOptions): AsyncGenerator<Response>;
11
19
  //# sourceMappingURL=delegate-transport.d.ts.map