@qvac/sdk 0.6.1 → 0.7.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.
- package/LICENSE +1 -24
- package/NOTICE +632 -0
- package/README.md +2 -1
- package/dist/client/api/embed.js +1 -4
- package/dist/client/api/get-model-info.d.ts +10 -3
- package/dist/client/api/index.d.ts +2 -0
- package/dist/client/api/index.js +2 -0
- package/dist/client/api/invoke-plugin.d.ts +14 -0
- package/dist/client/api/invoke-plugin.js +38 -0
- package/dist/client/api/registry.d.ts +14 -0
- package/dist/client/api/registry.js +37 -0
- package/dist/client/api/transcribe.js +0 -4
- package/dist/client/api/unload-model.js +1 -1
- package/dist/client/config-loader/resolve-config.node.d.ts +3 -2
- package/dist/client/config-loader/resolve-config.node.js +31 -4
- package/dist/client/init-hooks.js +2 -1
- package/dist/client/rpc/bare-client.d.ts +2 -0
- package/dist/client/rpc/bare-client.js +48 -7
- package/dist/client/rpc/expo-device-info.d.ts +6 -0
- package/dist/client/rpc/expo-device-info.js +32 -0
- package/dist/client/rpc/expo-rpc-client.js +9 -32
- package/dist/client/rpc/node-rpc-client.d.ts +1 -1
- package/dist/client/rpc/node-rpc-client.js +201 -28
- package/dist/client/rpc/rpc-client.d.ts +1 -1
- package/dist/client/rpc/rpc-client.js +2 -2
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -0
- package/dist/constants/registry.d.ts +2 -0
- package/dist/constants/registry.js +1 -0
- package/dist/examples/cache-management.js +2 -2
- package/dist/examples/config/plugins/plugins.config.d.ts +5 -0
- package/dist/examples/config/plugins/plugins.config.js +4 -0
- package/dist/examples/download-with-blind-relays.js +1 -1
- package/dist/examples/llamacpp-multimodal.js +3 -3
- package/dist/examples/llamacpp-native-tools.js +2 -2
- package/dist/examples/mcp-websearch.js +2 -2
- package/dist/examples/multi-model-demo.js +2 -2
- package/dist/examples/ocr-fasttext.js +4 -4
- package/dist/examples/parallel-download.js +2 -2
- package/dist/examples/plugins.d.ts +14 -0
- package/dist/examples/plugins.js +129 -0
- package/dist/examples/registry-query.d.ts +2 -0
- package/dist/examples/registry-query.js +87 -0
- package/dist/examples/translation/translation-bergamot-batch.js +2 -2
- package/dist/examples/translation/translation-bergamot.js +4 -4
- package/dist/examples/translation/translation-opus.js +2 -2
- package/dist/examples/translation/translation-stream.js +2 -2
- package/dist/examples/tts/chatterbox.d.ts +2 -0
- package/dist/examples/tts/chatterbox.js +59 -0
- package/dist/examples/tts/supertonic.d.ts +2 -0
- package/dist/examples/tts/supertonic.js +51 -0
- package/dist/examples/tts/utils.d.ts +17 -0
- package/dist/examples/tts/utils.js +93 -0
- package/dist/examples/whispercpp-filesystem.js +2 -3
- package/dist/examples/whispercpp-microphone-record.js +1 -2
- package/dist/examples/whispercpp-prompt.js +2 -3
- package/dist/expo/plugins/index.d.ts +3 -0
- package/dist/expo/plugins/index.js +3 -0
- package/dist/expo/plugins/resolve-sdk-package-dir.d.ts +15 -0
- package/dist/expo/plugins/resolve-sdk-package-dir.js +31 -0
- package/dist/expo/plugins/withAndroidArchitecture.d.ts +8 -0
- package/dist/expo/plugins/withAndroidArchitecture.js +52 -0
- package/dist/expo/plugins/withAndroidNdkVersion.d.ts +8 -0
- package/dist/expo/plugins/withAndroidNdkVersion.js +31 -0
- package/dist/expo/plugins/withDeviceInfo.d.ts +10 -0
- package/dist/expo/plugins/withDeviceInfo.js +48 -0
- package/dist/expo/plugins/withMobileBundle.d.ts +5 -2
- package/dist/expo/plugins/withMobileBundle.js +121 -65
- package/dist/expo/plugins/withQvacSDK.d.ts +4 -0
- package/dist/expo/plugins/withQvacSDK.js +26 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +5 -5
- package/dist/models/{hyperdrive → registry}/index.js +1 -1
- package/dist/models/registry/models.d.ts +9056 -0
- package/dist/models/registry/models.js +9351 -0
- package/dist/models/update-models/codegen.d.ts +3 -0
- package/dist/models/update-models/codegen.js +135 -0
- package/dist/models/update-models/history.d.ts +13 -0
- package/dist/models/update-models/history.js +88 -0
- package/dist/models/update-models/index.d.ts +2 -0
- package/dist/models/update-models/index.js +124 -0
- package/dist/models/update-models/naming.d.ts +4 -0
- package/dist/models/update-models/naming.js +314 -0
- package/dist/models/update-models/processing.d.ts +8 -0
- package/dist/models/update-models/processing.js +67 -0
- package/dist/models/update-models/registry.d.ts +4 -0
- package/dist/models/update-models/registry.js +67 -0
- package/dist/models/update-models/shards.d.ts +4 -0
- package/dist/models/update-models/shards.js +57 -0
- package/dist/models/update-models/types.d.ts +60 -0
- package/dist/models/update-models/types.js +1 -0
- package/dist/models/update-models/utils.d.ts +3 -0
- package/dist/models/update-models/utils.js +21 -0
- package/dist/pear/pre.d.ts +18 -0
- package/dist/pear/pre.js +433 -0
- package/dist/schemas/common.d.ts +286 -32
- package/dist/schemas/common.js +12 -0
- package/dist/schemas/download-asset.d.ts +35 -11
- package/dist/schemas/download-asset.js +5 -1
- package/dist/schemas/engine-addon-map.d.ts +5 -0
- package/dist/schemas/engine-addon-map.js +49 -0
- package/dist/schemas/get-model-info.d.ts +32 -16
- package/dist/schemas/get-model-info.js +17 -8
- package/dist/schemas/index.d.ts +4 -1
- package/dist/schemas/index.js +4 -4
- package/dist/schemas/load-model.d.ts +2224 -900
- package/dist/schemas/load-model.js +130 -25
- package/dist/schemas/model-src-utils.d.ts +30 -12
- package/dist/schemas/model-src-utils.js +5 -2
- package/dist/schemas/model-types.d.ts +15 -4
- package/dist/schemas/model-types.js +21 -4
- package/dist/schemas/path-validation.d.ts +10 -0
- package/dist/schemas/path-validation.js +22 -0
- package/dist/schemas/plugin.d.ts +180 -0
- package/dist/schemas/plugin.js +132 -0
- package/dist/schemas/rag.d.ts +2 -2
- package/dist/schemas/rag.js +7 -3
- package/dist/schemas/registry.d.ts +338 -0
- package/dist/schemas/registry.js +91 -0
- package/dist/schemas/sdk-errors-client.d.ts +6 -6
- package/dist/schemas/sdk-errors-client.js +15 -15
- package/dist/schemas/sdk-errors-registry.d.ts +6 -0
- package/dist/schemas/sdk-errors-registry.js +8 -0
- package/dist/schemas/sdk-errors-server.d.ts +16 -2
- package/dist/schemas/sdk-errors-server.js +90 -10
- package/dist/schemas/text-to-speech.d.ts +670 -1
- package/dist/schemas/text-to-speech.js +51 -2
- package/dist/schemas/translate.d.ts +2 -2
- package/dist/scripts/run-security-tests-bare.d.ts +2 -0
- package/dist/scripts/run-security-tests-bare.js +78 -0
- package/dist/scripts/run-security-tests.d.ts +2 -0
- package/dist/scripts/run-security-tests.js +22 -0
- package/dist/server/bare/delegate-rpc-client.d.ts +6 -0
- package/dist/server/bare/delegate-rpc-client.js +136 -56
- package/dist/server/bare/{addons/llamacpp-embedding/handlers → ops}/embed.d.ts +1 -1
- package/dist/server/bare/{addons/llamacpp-embedding/handlers → ops}/embed.js +3 -3
- package/dist/server/bare/{addons/llamacpp-completion → ops}/kv-cache-utils.js +6 -6
- package/dist/server/bare/{addons → ops}/load-model.js +32 -42
- package/dist/server/bare/{addons/nmtcpp-translation/handlers → ops}/translate.d.ts +1 -1
- package/dist/server/bare/{addons/nmtcpp-translation/handlers → ops}/translate.js +5 -4
- package/dist/server/bare/plugins/index.d.ts +7 -0
- package/dist/server/bare/plugins/index.js +6 -0
- package/dist/server/bare/{addons/llamacpp-completion → plugins/llamacpp-completion/ops}/cache-logger.js +1 -1
- package/dist/server/bare/{addons/llamacpp-completion/handlers → plugins/llamacpp-completion/ops}/completion-stream.d.ts +1 -1
- package/dist/server/bare/{addons/llamacpp-completion/handlers → plugins/llamacpp-completion/ops}/completion-stream.js +2 -3
- package/dist/server/bare/plugins/llamacpp-completion/plugin.d.ts +115 -0
- package/dist/server/bare/plugins/llamacpp-completion/plugin.js +142 -0
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.d.ts +24 -0
- package/dist/server/bare/plugins/llamacpp-embedding/plugin.js +73 -0
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.d.ts +45 -0
- package/dist/server/bare/plugins/nmtcpp-translation/plugin.js +97 -0
- package/dist/server/bare/{addons/onnx-ocr/handlers → plugins/onnx-ocr/ops}/ocr-stream.js +2 -1
- package/dist/server/bare/plugins/onnx-ocr/plugin.d.ts +38 -0
- package/dist/server/bare/{addons/onnx-ocr/create-model.js → plugins/onnx-ocr/plugin.js} +39 -2
- package/dist/server/bare/{addons/onnx-tts/handlers → plugins/onnx-tts/ops}/text-to-speech.js +23 -1
- package/dist/server/bare/plugins/onnx-tts/plugin.d.ts +26 -0
- package/dist/server/bare/plugins/onnx-tts/plugin.js +162 -0
- package/dist/server/bare/plugins/onnx-tts/wav-helper.d.ts +14 -0
- package/dist/server/bare/plugins/onnx-tts/wav-helper.js +107 -0
- package/dist/server/bare/plugins/whispercpp-transcription/ops/transcribe-stream.d.ts +3 -0
- package/dist/server/bare/{addons/whispercpp-transcription/handlers → plugins/whispercpp-transcription/ops}/transcribe-stream.js +1 -2
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.d.ts +31 -0
- package/dist/server/bare/plugins/whispercpp-transcription/plugin.js +74 -0
- package/dist/server/bare/rag-hyperdb/handlers/ingest.js +1 -1
- package/dist/server/bare/rag-hyperdb/handlers/search.js +1 -1
- package/dist/server/bare/rag-hyperdb/rag-workspace-manager.js +2 -1
- package/dist/server/bare/registry/config-registry.js +1 -1
- package/dist/server/bare/registry/registry-client.d.ts +5 -0
- package/dist/server/bare/registry/registry-client.js +37 -0
- package/dist/server/env.d.ts +22 -0
- package/dist/server/env.js +57 -0
- package/dist/server/plugins/index.d.ts +2 -0
- package/dist/server/plugins/index.js +1 -0
- package/dist/server/plugins/registry.d.ts +9 -0
- package/dist/server/plugins/registry.js +75 -0
- package/dist/server/rpc/delegate-transport.d.ts +11 -0
- package/dist/server/rpc/delegate-transport.js +60 -0
- package/dist/server/rpc/handle-request.d.ts +0 -9
- package/dist/server/rpc/handle-request.js +13 -321
- package/dist/server/rpc/handler-registry.d.ts +3 -0
- package/dist/server/rpc/handler-registry.js +84 -0
- package/dist/server/rpc/handler-utils.d.ts +22 -0
- package/dist/server/rpc/handler-utils.js +87 -0
- package/dist/server/rpc/handlers/cancelHandler.js +1 -1
- package/dist/server/rpc/handlers/completion-stream-delegated.js +1 -1
- package/dist/server/rpc/handlers/completion-stream.js +2 -43
- package/dist/server/rpc/handlers/delete-cache.js +1 -1
- package/dist/server/rpc/handlers/embed.js +2 -21
- package/dist/server/rpc/handlers/get-model-info.js +19 -15
- package/dist/server/rpc/handlers/index.d.ts +9 -0
- package/dist/server/rpc/handlers/index.js +9 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +1 -0
- package/dist/server/rpc/handlers/load-model/download-manager.js +3 -0
- package/dist/server/rpc/handlers/load-model/handler.js +47 -24
- package/dist/server/rpc/handlers/load-model/http.js +3 -2
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +14 -10
- package/dist/server/rpc/handlers/load-model/registry.d.ts +10 -0
- package/dist/server/rpc/handlers/load-model/registry.js +571 -0
- package/dist/server/rpc/handlers/load-model/resolve.js +18 -5
- package/dist/server/rpc/handlers/load-model-delegated.js +4 -2
- package/dist/server/rpc/handlers/ocr-stream.js +2 -37
- package/dist/server/rpc/handlers/ping.d.ts +3 -0
- package/dist/server/rpc/handlers/ping.js +3 -0
- package/dist/server/rpc/handlers/plugin-dispatch.d.ts +15 -0
- package/dist/server/rpc/handlers/plugin-dispatch.js +54 -0
- package/dist/server/rpc/handlers/plugin-invoke.d.ts +4 -0
- package/dist/server/rpc/handlers/plugin-invoke.js +87 -0
- package/dist/server/rpc/handlers/registry.d.ts +5 -0
- package/dist/server/rpc/handlers/registry.js +157 -0
- package/dist/server/rpc/handlers/text-to-speech.js +2 -5
- package/dist/server/rpc/handlers/transcribe-stream.js +2 -30
- package/dist/server/rpc/handlers/translate.js +2 -42
- package/dist/server/rpc/handlers/unload-model.js +1 -1
- package/dist/server/rpc/index.d.ts +1 -1
- package/dist/server/utils/archive.d.ts +1 -0
- package/dist/server/utils/archive.js +10 -2
- package/dist/server/utils/cache.d.ts +5 -0
- package/dist/server/utils/cache.js +26 -2
- package/dist/server/utils/gguf-tensor-extractor.js +3 -3
- package/dist/server/utils/index.d.ts +1 -1
- package/dist/server/utils/index.js +1 -1
- package/dist/server/utils/path-security.d.ts +12 -0
- package/dist/server/utils/path-security.js +25 -0
- package/dist/server/utils/shard-utils.js +3 -3
- package/dist/server/worker-core.d.ts +6 -0
- package/dist/server/worker-core.js +88 -0
- package/dist/server/worker.d.ts +4 -5
- package/dist/server/worker.js +18 -116
- package/dist/utils/errors-client.d.ts +9 -6
- package/dist/utils/errors-client.js +19 -11
- package/dist/utils/errors-server.d.ts +44 -5
- package/dist/utils/errors-server.js +82 -9
- package/dist/utils/path-sanitize.d.ts +17 -0
- package/dist/utils/path-sanitize.js +54 -0
- package/expo/plugins/patches/android-link.mjs +63 -0
- package/expo/plugins/patches/ios-link.mjs +63 -0
- package/package.json +72 -10
- package/dist/examples/text-to-speech.d.ts +0 -3
- package/dist/examples/text-to-speech.js +0 -137
- package/dist/models/hyperdrive/models.d.ts +0 -4003
- package/dist/models/hyperdrive/models.js +0 -4282
- package/dist/server/bare/addons/index.d.ts +0 -4
- package/dist/server/bare/addons/index.js +0 -3
- package/dist/server/bare/addons/llamacpp-completion/create-model.d.ts +0 -8
- package/dist/server/bare/addons/llamacpp-completion/create-model.js +0 -43
- package/dist/server/bare/addons/llamacpp-completion/index.d.ts +0 -4
- package/dist/server/bare/addons/llamacpp-completion/index.js +0 -3
- package/dist/server/bare/addons/llamacpp-embedding/create-model.d.ts +0 -8
- package/dist/server/bare/addons/llamacpp-embedding/create-model.js +0 -38
- package/dist/server/bare/addons/llamacpp-embedding/index.d.ts +0 -3
- package/dist/server/bare/addons/llamacpp-embedding/index.js +0 -2
- package/dist/server/bare/addons/nmtcpp-translation/create-model.d.ts +0 -8
- package/dist/server/bare/addons/nmtcpp-translation/create-model.js +0 -52
- package/dist/server/bare/addons/nmtcpp-translation/index.d.ts +0 -3
- package/dist/server/bare/addons/nmtcpp-translation/index.js +0 -2
- package/dist/server/bare/addons/onnx-ocr/create-model.d.ts +0 -10
- package/dist/server/bare/addons/onnx-ocr/index.d.ts +0 -3
- package/dist/server/bare/addons/onnx-ocr/index.js +0 -2
- package/dist/server/bare/addons/onnx-tts/create-model.d.ts +0 -10
- package/dist/server/bare/addons/onnx-tts/create-model.js +0 -25
- package/dist/server/bare/addons/onnx-tts/index.d.ts +0 -3
- package/dist/server/bare/addons/onnx-tts/index.js +0 -2
- package/dist/server/bare/addons/whispercpp-transcription/create-model.d.ts +0 -10
- package/dist/server/bare/addons/whispercpp-transcription/create-model.js +0 -37
- package/dist/server/bare/addons/whispercpp-transcription/handlers/transcribe-stream.d.ts +0 -3
- package/dist/server/bare/addons/whispercpp-transcription/index.d.ts +0 -3
- package/dist/server/bare/addons/whispercpp-transcription/index.js +0 -2
- /package/dist/models/{hyperdrive → registry}/index.d.ts +0 -0
- /package/dist/server/bare/{addons → ops}/cancel.d.ts +0 -0
- /package/dist/server/bare/{addons → ops}/cancel.js +0 -0
- /package/dist/server/bare/{addons/llamacpp-completion → ops}/kv-cache-utils.d.ts +0 -0
- /package/dist/server/bare/{addons → ops}/load-model.d.ts +0 -0
- /package/dist/server/bare/{addons → ops}/unload-model.d.ts +0 -0
- /package/dist/server/bare/{addons → ops}/unload-model.js +0 -0
- /package/dist/server/bare/{addons/llamacpp-completion → plugins/llamacpp-completion/ops}/cache-logger.d.ts +0 -0
- /package/dist/server/bare/{addons/onnx-ocr/handlers → plugins/onnx-ocr/ops}/ocr-stream.d.ts +0 -0
- /package/dist/server/bare/{addons/onnx-tts/handlers → plugins/onnx-tts/ops}/text-to-speech.d.ts +0 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { pluginDefinitionRuntimeSchema, } from "../../schemas/plugin.js";
|
|
2
|
+
import { PluginAlreadyRegisteredError, PluginDefinitionInvalidError, PluginLoggingInvalidError, } from "../../utils/errors-server.js";
|
|
3
|
+
import { createAddonLoggerCallback } from "../../logging/addon.js";
|
|
4
|
+
const plugins = new Map();
|
|
5
|
+
function getModelTypeForError(plugin) {
|
|
6
|
+
if (!plugin || typeof plugin !== "object")
|
|
7
|
+
return "(unknown)";
|
|
8
|
+
if (!("modelType" in plugin))
|
|
9
|
+
return "(unknown)";
|
|
10
|
+
const modelType = plugin.modelType;
|
|
11
|
+
return typeof modelType === "string" && modelType.length > 0
|
|
12
|
+
? modelType
|
|
13
|
+
: "(unknown)";
|
|
14
|
+
}
|
|
15
|
+
function validatePluginDefinition(plugin) {
|
|
16
|
+
const result = pluginDefinitionRuntimeSchema.safeParse(plugin);
|
|
17
|
+
if (result.success)
|
|
18
|
+
return;
|
|
19
|
+
const details = result.error.issues
|
|
20
|
+
.map((i) => `${String(i.path.join("."))}: ${i.message}`)
|
|
21
|
+
.join(", ");
|
|
22
|
+
throw new PluginDefinitionInvalidError(getModelTypeForError(plugin), details);
|
|
23
|
+
}
|
|
24
|
+
export function registerPlugin(plugin) {
|
|
25
|
+
validatePluginDefinition(plugin);
|
|
26
|
+
if (plugins.has(plugin.modelType)) {
|
|
27
|
+
throw new PluginAlreadyRegisteredError(plugin.modelType);
|
|
28
|
+
}
|
|
29
|
+
// Validate logging module shape if provided
|
|
30
|
+
if (plugin.logging?.module) {
|
|
31
|
+
const loggingModule = plugin.logging.module;
|
|
32
|
+
if (typeof loggingModule["setLogger"] !== "function") {
|
|
33
|
+
throw new PluginLoggingInvalidError(plugin.modelType, "logging.module must have a setLogger(callback) function");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
plugins.set(plugin.modelType, plugin);
|
|
37
|
+
if (plugin.logging?.module && plugin.logging?.namespace) {
|
|
38
|
+
const loggingModule = plugin.logging.module;
|
|
39
|
+
loggingModule.setLogger(createAddonLoggerCallback(plugin.logging.namespace));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function getPlugin(modelType) {
|
|
43
|
+
return plugins.get(modelType);
|
|
44
|
+
}
|
|
45
|
+
export function getPluginHandler(modelType, handlerName) {
|
|
46
|
+
const plugin = plugins.get(modelType);
|
|
47
|
+
if (!plugin)
|
|
48
|
+
return undefined;
|
|
49
|
+
return plugin.handlers[handlerName];
|
|
50
|
+
}
|
|
51
|
+
export function hasPlugin(modelType) {
|
|
52
|
+
return plugins.has(modelType);
|
|
53
|
+
}
|
|
54
|
+
export function unregisterPlugin(modelType) {
|
|
55
|
+
const plugin = plugins.get(modelType);
|
|
56
|
+
if (!plugin)
|
|
57
|
+
return false;
|
|
58
|
+
if (plugin.logging?.module) {
|
|
59
|
+
const loggingModule = plugin.logging.module;
|
|
60
|
+
loggingModule.releaseLogger?.();
|
|
61
|
+
}
|
|
62
|
+
return plugins.delete(modelType);
|
|
63
|
+
}
|
|
64
|
+
export function getAllPlugins() {
|
|
65
|
+
return Array.from(plugins.values());
|
|
66
|
+
}
|
|
67
|
+
export function clearPlugins() {
|
|
68
|
+
for (const plugin of plugins.values()) {
|
|
69
|
+
if (plugin.logging?.module) {
|
|
70
|
+
const loggingModule = plugin.logging.module;
|
|
71
|
+
loggingModule.releaseLogger?.();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
plugins.clear();
|
|
75
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side RPC transport for delegated requests.
|
|
3
|
+
*
|
|
4
|
+
* This module provides `send` and `stream` functions for server-side
|
|
5
|
+
* delegation to remote peers (via HyperSwarm RPC).
|
|
6
|
+
*/
|
|
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>;
|
|
11
|
+
//# sourceMappingURL=delegate-transport.d.ts.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side RPC transport for delegated requests.
|
|
3
|
+
*
|
|
4
|
+
* This module provides `send` and `stream` functions for server-side
|
|
5
|
+
* delegation to remote peers (via HyperSwarm RPC).
|
|
6
|
+
*/
|
|
7
|
+
import { requestSchema, responseSchema, } from "../../schemas/index.js";
|
|
8
|
+
import { withTimeout, withTimeoutStream } from "../../utils/withTimeout.js";
|
|
9
|
+
import { getServerLogger } from "../../logging/index.js";
|
|
10
|
+
import { DelegateProviderError } from "../../utils/errors-server.js";
|
|
11
|
+
const logger = getServerLogger();
|
|
12
|
+
let commandCounter = 0;
|
|
13
|
+
function getNextCommandId() {
|
|
14
|
+
commandCounter = (commandCounter + 1) % Number.MAX_SAFE_INTEGER;
|
|
15
|
+
return commandCounter;
|
|
16
|
+
}
|
|
17
|
+
function checkAndThrowError(response) {
|
|
18
|
+
if (response.type === "error") {
|
|
19
|
+
throw new DelegateProviderError(response.message || "Unknown provider error", response.code);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function send(request, rpc, options) {
|
|
23
|
+
const parsedRequest = requestSchema.parse(request);
|
|
24
|
+
const req = rpc.request(getNextCommandId());
|
|
25
|
+
logger.debug("[delegate-transport] Sending:", { type: request.type });
|
|
26
|
+
const payload = JSON.stringify(parsedRequest);
|
|
27
|
+
req.send(payload, "utf-8");
|
|
28
|
+
const response = await withTimeout(req.reply("utf-8"), options?.timeout);
|
|
29
|
+
const resPayload = responseSchema.parse(JSON.parse(response?.toString() || "{}"));
|
|
30
|
+
logger.debug("[delegate-transport] Response:", { type: resPayload.type });
|
|
31
|
+
checkAndThrowError(resPayload);
|
|
32
|
+
return resPayload;
|
|
33
|
+
}
|
|
34
|
+
export async function* stream(request, rpc, options = {}) {
|
|
35
|
+
const parsedRequest = requestSchema.parse(request);
|
|
36
|
+
const req = rpc.request(getNextCommandId());
|
|
37
|
+
logger.debug("[delegate-transport] Streaming:", { type: request.type });
|
|
38
|
+
req.send(JSON.stringify(parsedRequest), "utf-8");
|
|
39
|
+
const responseStream = req.createResponseStream({ encoding: "utf-8" });
|
|
40
|
+
let buffer = "";
|
|
41
|
+
async function* processStream() {
|
|
42
|
+
for await (const chunk of responseStream) {
|
|
43
|
+
yield chunk;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const streamWithTimeout = withTimeoutStream(processStream(), options?.timeout);
|
|
47
|
+
for await (const chunk of streamWithTimeout) {
|
|
48
|
+
buffer += chunk.toString();
|
|
49
|
+
// Process complete lines (newline-delimited JSON)
|
|
50
|
+
const lines = buffer.split("\n");
|
|
51
|
+
buffer = lines.pop() || ""; // Keep incomplete line in buffer
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
if (line.trim()) {
|
|
54
|
+
const response = responseSchema.parse(JSON.parse(line));
|
|
55
|
+
checkAndThrowError(response);
|
|
56
|
+
yield response;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -1,12 +1,3 @@
|
|
|
1
1
|
import type RPC from "bare-rpc";
|
|
2
|
-
export type BareRPCRequest = {
|
|
3
|
-
data: Buffer;
|
|
4
|
-
reply: (data: string, encoding: BufferEncoding) => void;
|
|
5
|
-
createResponseStream: () => {
|
|
6
|
-
write: (data: string, encoding: BufferEncoding) => void;
|
|
7
|
-
end: () => void;
|
|
8
|
-
[Symbol.asyncIterator]?: () => AsyncIterator<Buffer>;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
2
|
export declare function handleRequest(req: RPC.IncomingRequest): Promise<void>;
|
|
12
3
|
//# sourceMappingURL=handle-request.d.ts.map
|
|
@@ -1,336 +1,28 @@
|
|
|
1
|
-
import { requestSchema,
|
|
2
|
-
import { handleCompletionStream } from "./handlers/completion-stream.js";
|
|
3
|
-
import { handleDownloadAsset } from "./handlers/download-asset.js";
|
|
4
|
-
import { handleLoadModel } from "./handlers/load-model/index.js";
|
|
5
|
-
import { handleLoadModelDelegated } from "./handlers/load-model-delegated.js";
|
|
6
|
-
import { handleCompletionStreamDelegated } from "./handlers/completion-stream-delegated.js";
|
|
7
|
-
import { getModelEntry } from "../bare/registry/model-registry.js";
|
|
8
|
-
import { setSDKConfig } from "../bare/registry/config-registry.js";
|
|
9
|
-
import { setRuntimeContext } from "../bare/registry/runtime-context-registry.js";
|
|
10
|
-
import { handleUnloadModel } from "./handlers/unload-model.js";
|
|
11
|
-
import { handleTranscribeStream } from "./handlers/transcribe-stream.js";
|
|
12
|
-
import { handleEmbed } from "./handlers/embed.js";
|
|
13
|
-
import { handleTranslate } from "./handlers/translate.js";
|
|
14
|
-
import { handleLoggingStream } from "./handlers/logging-stream.js";
|
|
15
|
-
import { cancelHandler } from "./handlers/cancelHandler.js";
|
|
16
|
-
import { provideHandler } from "./handlers/provideHandler.js";
|
|
17
|
-
import { stopProvideHandler } from "./handlers/stopProvideHandler.js";
|
|
18
|
-
import { handleRag } from "./handlers/rag.js";
|
|
19
|
-
import { handleDeleteCache } from "./handlers/delete-cache.js";
|
|
20
|
-
import { handleTextToSpeech } from "./handlers/text-to-speech.js";
|
|
21
|
-
import { handleGetModelInfo } from "./handlers/get-model-info.js";
|
|
22
|
-
import { handleOCRStream } from "./handlers/ocr-stream.js";
|
|
23
|
-
import { sendErrorResponse, sendStreamErrorResponse, } from "../error-handlers.js";
|
|
24
|
-
import { NoDataReceivedError, UnknownRequestTypeError, } from "../../utils/errors-client.js";
|
|
25
|
-
import { normalizeModelType } from "../../schemas/index.js";
|
|
1
|
+
import { requestSchema, normalizeModelType, } from "../../schemas/index.js";
|
|
26
2
|
import { resolveModelConfig } from "../bare/registry/model-config-registry.js";
|
|
3
|
+
import { sendErrorResponse } from "../error-handlers.js";
|
|
4
|
+
import { RPCNoDataReceivedError, RPCUnknownRequestTypeError, } from "../../utils/errors-server.js";
|
|
5
|
+
import { registry } from "./handler-registry.js";
|
|
6
|
+
import { executeHandler, handleInitConfig, isInitConfigMessage, } from "./handler-utils.js";
|
|
27
7
|
export async function handleRequest(req) {
|
|
28
8
|
try {
|
|
29
9
|
const rawData = req.data?.toString();
|
|
30
10
|
if (!rawData) {
|
|
31
|
-
throw new
|
|
11
|
+
throw new RPCNoDataReceivedError();
|
|
32
12
|
}
|
|
33
13
|
const jsonData = JSON.parse(rawData);
|
|
34
|
-
// Handle
|
|
35
|
-
if (jsonData
|
|
36
|
-
|
|
37
|
-
"type" in jsonData &&
|
|
38
|
-
jsonData.type === "__init_config") {
|
|
39
|
-
try {
|
|
40
|
-
const initData = jsonData;
|
|
41
|
-
if (initData.config) {
|
|
42
|
-
setSDKConfig(initData.config);
|
|
43
|
-
}
|
|
44
|
-
if (initData.runtimeContext) {
|
|
45
|
-
setRuntimeContext(initData.runtimeContext);
|
|
46
|
-
}
|
|
47
|
-
req.reply(JSON.stringify({ success: true }), "utf-8");
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
req.reply(JSON.stringify({
|
|
51
|
-
success: false,
|
|
52
|
-
error: error instanceof Error ? error.message : String(error),
|
|
53
|
-
}), "utf-8");
|
|
54
|
-
}
|
|
14
|
+
// Handle internal config initialization (bypasses schema)
|
|
15
|
+
if (isInitConfigMessage(jsonData)) {
|
|
16
|
+
handleInitConfig(req, jsonData);
|
|
55
17
|
return;
|
|
56
18
|
}
|
|
57
19
|
const processedData = applyDeviceDefaultsToRequest(jsonData);
|
|
58
20
|
const request = requestSchema.parse(processedData);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const stream = req.createResponseStream();
|
|
63
|
-
try {
|
|
64
|
-
const response = await handleDownloadAsset(request, (update) => {
|
|
65
|
-
const data = JSON.stringify(responseSchema.parse(update));
|
|
66
|
-
stream.write(data + "\n", "utf-8");
|
|
67
|
-
});
|
|
68
|
-
// Send final response
|
|
69
|
-
const data = JSON.stringify(responseSchema.parse(response));
|
|
70
|
-
stream.write(data + "\n", "utf-8");
|
|
71
|
-
stream.end();
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
sendStreamErrorResponse(stream, error);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
try {
|
|
79
|
-
const response = await handleDownloadAsset(request);
|
|
80
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
sendErrorResponse(req, error);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
case "loadModel": {
|
|
89
|
-
if (request.withProgress) {
|
|
90
|
-
const stream = req.createResponseStream();
|
|
91
|
-
try {
|
|
92
|
-
// Route to appropriate handler based on delegation
|
|
93
|
-
let response;
|
|
94
|
-
if (request.delegate) {
|
|
95
|
-
response = await handleLoadModelDelegated(request, (update) => {
|
|
96
|
-
const data = JSON.stringify(responseSchema.parse(update));
|
|
97
|
-
stream.write(data + "\n", "utf-8");
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
response = await handleLoadModel(request, (update) => {
|
|
102
|
-
const data = JSON.stringify(responseSchema.parse(update));
|
|
103
|
-
stream.write(data + "\n", "utf-8");
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
// Send final response
|
|
107
|
-
const data = JSON.stringify(responseSchema.parse(response));
|
|
108
|
-
stream.write(data + "\n", "utf-8");
|
|
109
|
-
stream.end();
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
sendStreamErrorResponse(stream, error);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else if (request.delegate) {
|
|
116
|
-
try {
|
|
117
|
-
const response = await handleLoadModelDelegated(request);
|
|
118
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
sendErrorResponse(req, error);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
// Load without progress/delegate, or reload config
|
|
126
|
-
try {
|
|
127
|
-
const response = await handleLoadModel(request);
|
|
128
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
131
|
-
sendErrorResponse(req, error);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
case "completionStream": {
|
|
137
|
-
const stream = req.createResponseStream();
|
|
138
|
-
try {
|
|
139
|
-
// Check if the model is delegated and route accordingly
|
|
140
|
-
const entry = getModelEntry(request.modelId);
|
|
141
|
-
const handler = entry?.isDelegated
|
|
142
|
-
? handleCompletionStreamDelegated
|
|
143
|
-
: handleCompletionStream;
|
|
144
|
-
for await (const response of handler(request)) {
|
|
145
|
-
const validatedResponse = responseSchema.parse(response);
|
|
146
|
-
const data = JSON.stringify(validatedResponse);
|
|
147
|
-
stream.write(data + "\n", "utf-8");
|
|
148
|
-
}
|
|
149
|
-
stream.end();
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
sendStreamErrorResponse(stream, error);
|
|
154
|
-
}
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
case "unloadModel": {
|
|
158
|
-
const response = await handleUnloadModel(request);
|
|
159
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
case "transcribeStream": {
|
|
163
|
-
const stream = req.createResponseStream();
|
|
164
|
-
try {
|
|
165
|
-
for await (const response of handleTranscribeStream(request)) {
|
|
166
|
-
const validatedResponse = responseSchema.parse(response);
|
|
167
|
-
const data = JSON.stringify(validatedResponse);
|
|
168
|
-
stream.write(data + "\n", "utf-8");
|
|
169
|
-
}
|
|
170
|
-
stream.end();
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
sendStreamErrorResponse(stream, error);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
case "loggingStream": {
|
|
179
|
-
const stream = req.createResponseStream();
|
|
180
|
-
try {
|
|
181
|
-
for await (const response of handleLoggingStream(request)) {
|
|
182
|
-
const validatedResponse = responseSchema.parse(response);
|
|
183
|
-
const data = JSON.stringify(validatedResponse);
|
|
184
|
-
stream.write(data + "\n", "utf-8");
|
|
185
|
-
}
|
|
186
|
-
stream.end();
|
|
187
|
-
}
|
|
188
|
-
catch (error) {
|
|
189
|
-
sendStreamErrorResponse(stream, error);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
break;
|
|
193
|
-
}
|
|
194
|
-
case "ping": {
|
|
195
|
-
const res = {
|
|
196
|
-
type: "pong",
|
|
197
|
-
number: Math.random() * 100,
|
|
198
|
-
};
|
|
199
|
-
req.reply(JSON.stringify(res), "utf-8");
|
|
200
|
-
break;
|
|
201
|
-
}
|
|
202
|
-
case "embed": {
|
|
203
|
-
try {
|
|
204
|
-
const response = await handleEmbed(request);
|
|
205
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
sendErrorResponse(req, error);
|
|
209
|
-
}
|
|
210
|
-
break;
|
|
211
|
-
}
|
|
212
|
-
case "translate": {
|
|
213
|
-
const stream = req.createResponseStream();
|
|
214
|
-
try {
|
|
215
|
-
for await (const response of handleTranslate(request)) {
|
|
216
|
-
const validatedResponse = responseSchema.parse(response);
|
|
217
|
-
const data = JSON.stringify(validatedResponse);
|
|
218
|
-
stream.write(data + "\n", "utf-8");
|
|
219
|
-
}
|
|
220
|
-
stream.end();
|
|
221
|
-
}
|
|
222
|
-
catch (error) {
|
|
223
|
-
sendStreamErrorResponse(stream, error);
|
|
224
|
-
}
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
case "cancel": {
|
|
228
|
-
try {
|
|
229
|
-
const response = await cancelHandler(request);
|
|
230
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
231
|
-
}
|
|
232
|
-
catch (error) {
|
|
233
|
-
sendErrorResponse(req, error);
|
|
234
|
-
}
|
|
235
|
-
break;
|
|
236
|
-
}
|
|
237
|
-
case "provide": {
|
|
238
|
-
const response = await provideHandler(request);
|
|
239
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
240
|
-
break;
|
|
241
|
-
}
|
|
242
|
-
case "stopProvide": {
|
|
243
|
-
const response = stopProvideHandler(request);
|
|
244
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
245
|
-
break;
|
|
246
|
-
}
|
|
247
|
-
case "rag": {
|
|
248
|
-
// Only ingest, saveEmbeddings, and reindex support progress
|
|
249
|
-
const supportsProgress = request.operation === "ingest" ||
|
|
250
|
-
request.operation === "saveEmbeddings" ||
|
|
251
|
-
request.operation === "reindex";
|
|
252
|
-
const withProgress = supportsProgress && request.withProgress;
|
|
253
|
-
if (withProgress) {
|
|
254
|
-
const stream = req.createResponseStream();
|
|
255
|
-
try {
|
|
256
|
-
const response = await handleRag(request, (update) => {
|
|
257
|
-
const data = JSON.stringify(responseSchema.parse(update));
|
|
258
|
-
stream.write(data + "\n", "utf-8");
|
|
259
|
-
});
|
|
260
|
-
// Send final response
|
|
261
|
-
const data = JSON.stringify(responseSchema.parse(response));
|
|
262
|
-
stream.write(data + "\n", "utf-8");
|
|
263
|
-
stream.end();
|
|
264
|
-
}
|
|
265
|
-
catch (error) {
|
|
266
|
-
sendStreamErrorResponse(stream, error);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
try {
|
|
271
|
-
const response = await handleRag(request);
|
|
272
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
273
|
-
}
|
|
274
|
-
catch (error) {
|
|
275
|
-
sendErrorResponse(req, error);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
break;
|
|
279
|
-
}
|
|
280
|
-
case "deleteCache": {
|
|
281
|
-
try {
|
|
282
|
-
const response = await handleDeleteCache(request);
|
|
283
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
284
|
-
}
|
|
285
|
-
catch (error) {
|
|
286
|
-
sendErrorResponse(req, error);
|
|
287
|
-
}
|
|
288
|
-
break;
|
|
289
|
-
}
|
|
290
|
-
case "textToSpeech": {
|
|
291
|
-
const stream = req.createResponseStream();
|
|
292
|
-
try {
|
|
293
|
-
for await (const response of handleTextToSpeech(request)) {
|
|
294
|
-
const validatedResponse = responseSchema.parse(response);
|
|
295
|
-
const data = JSON.stringify(validatedResponse);
|
|
296
|
-
stream.write(data + "\n", "utf-8");
|
|
297
|
-
}
|
|
298
|
-
stream.end();
|
|
299
|
-
}
|
|
300
|
-
catch (error) {
|
|
301
|
-
sendStreamErrorResponse(stream, error);
|
|
302
|
-
}
|
|
303
|
-
break;
|
|
304
|
-
}
|
|
305
|
-
case "getModelInfo": {
|
|
306
|
-
try {
|
|
307
|
-
const response = await handleGetModelInfo(request);
|
|
308
|
-
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
309
|
-
}
|
|
310
|
-
catch (error) {
|
|
311
|
-
sendErrorResponse(req, error);
|
|
312
|
-
}
|
|
313
|
-
break;
|
|
314
|
-
}
|
|
315
|
-
case "ocrStream": {
|
|
316
|
-
const stream = req.createResponseStream();
|
|
317
|
-
try {
|
|
318
|
-
for await (const response of handleOCRStream(request)) {
|
|
319
|
-
const validatedResponse = responseSchema.parse(response);
|
|
320
|
-
const data = JSON.stringify(validatedResponse);
|
|
321
|
-
stream.write(data + "\n", "utf-8");
|
|
322
|
-
}
|
|
323
|
-
stream.end();
|
|
324
|
-
}
|
|
325
|
-
catch (error) {
|
|
326
|
-
sendStreamErrorResponse(stream, error);
|
|
327
|
-
}
|
|
328
|
-
break;
|
|
329
|
-
}
|
|
330
|
-
default: {
|
|
331
|
-
throw new UnknownRequestTypeError();
|
|
332
|
-
}
|
|
21
|
+
const entry = registry[request.type];
|
|
22
|
+
if (!entry) {
|
|
23
|
+
throw new RPCUnknownRequestTypeError(request.type);
|
|
333
24
|
}
|
|
25
|
+
await executeHandler(req, request, entry);
|
|
334
26
|
}
|
|
335
27
|
catch (error) {
|
|
336
28
|
sendErrorResponse(req, error);
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {} from "../../schemas/index.js";
|
|
2
|
+
import { handleCompletionStream } from "./handlers/completion-stream.js";
|
|
3
|
+
import { handleDownloadAsset } from "./handlers/download-asset.js";
|
|
4
|
+
import { handleLoadModel } from "./handlers/load-model/index.js";
|
|
5
|
+
import { handleLoadModelDelegated } from "./handlers/load-model-delegated.js";
|
|
6
|
+
import { handleCompletionStreamDelegated } from "./handlers/completion-stream-delegated.js";
|
|
7
|
+
import { getModelEntry } from "../bare/registry/model-registry.js";
|
|
8
|
+
import { handleUnloadModel } from "./handlers/unload-model.js";
|
|
9
|
+
import { handleTranscribeStream } from "./handlers/transcribe-stream.js";
|
|
10
|
+
import { handleEmbed } from "./handlers/embed.js";
|
|
11
|
+
import { handleTranslate } from "./handlers/translate.js";
|
|
12
|
+
import { handleLoggingStream } from "./handlers/logging-stream.js";
|
|
13
|
+
import { cancelHandler } from "./handlers/cancelHandler.js";
|
|
14
|
+
import { provideHandler } from "./handlers/provideHandler.js";
|
|
15
|
+
import { stopProvideHandler } from "./handlers/stopProvideHandler.js";
|
|
16
|
+
import { handleRag } from "./handlers/rag.js";
|
|
17
|
+
import { handleDeleteCache } from "./handlers/delete-cache.js";
|
|
18
|
+
import { handleTextToSpeech } from "./handlers/text-to-speech.js";
|
|
19
|
+
import { handleGetModelInfo } from "./handlers/get-model-info.js";
|
|
20
|
+
import { handleOCRStream } from "./handlers/ocr-stream.js";
|
|
21
|
+
import { handlePing } from "./handlers/ping.js";
|
|
22
|
+
import { handlePluginInvoke, handlePluginInvokeStream, } from "./handlers/plugin-invoke.js";
|
|
23
|
+
import { handleModelRegistryList, handleModelRegistrySearch, handleModelRegistryGetModel, } from "./handlers/registry.js";
|
|
24
|
+
function ragSupportsProgress(request) {
|
|
25
|
+
if (request.type !== "rag")
|
|
26
|
+
return false;
|
|
27
|
+
return ["ingest", "saveEmbeddings", "reindex"].includes(request.operation);
|
|
28
|
+
}
|
|
29
|
+
function isModelDelegated(request) {
|
|
30
|
+
if (!("modelId" in request))
|
|
31
|
+
return false;
|
|
32
|
+
const entry = getModelEntry(request.modelId);
|
|
33
|
+
return entry?.isDelegated ?? false;
|
|
34
|
+
}
|
|
35
|
+
export const registry = {
|
|
36
|
+
// Simple Reply handlers
|
|
37
|
+
ping: { type: "reply", handler: handlePing },
|
|
38
|
+
unloadModel: { type: "reply", handler: handleUnloadModel },
|
|
39
|
+
embed: { type: "reply", handler: handleEmbed },
|
|
40
|
+
cancel: { type: "reply", handler: cancelHandler },
|
|
41
|
+
provide: { type: "reply", handler: provideHandler },
|
|
42
|
+
stopProvide: { type: "reply", handler: stopProvideHandler },
|
|
43
|
+
deleteCache: { type: "reply", handler: handleDeleteCache },
|
|
44
|
+
getModelInfo: { type: "reply", handler: handleGetModelInfo },
|
|
45
|
+
pluginInvoke: { type: "reply", handler: handlePluginInvoke },
|
|
46
|
+
modelRegistryList: { type: "reply", handler: handleModelRegistryList },
|
|
47
|
+
modelRegistrySearch: { type: "reply", handler: handleModelRegistrySearch },
|
|
48
|
+
modelRegistryGetModel: {
|
|
49
|
+
type: "reply",
|
|
50
|
+
handler: handleModelRegistryGetModel,
|
|
51
|
+
},
|
|
52
|
+
// Simple Stream handlers
|
|
53
|
+
transcribeStream: { type: "stream", handler: handleTranscribeStream },
|
|
54
|
+
loggingStream: { type: "stream", handler: handleLoggingStream },
|
|
55
|
+
translate: { type: "stream", handler: handleTranslate },
|
|
56
|
+
textToSpeech: { type: "stream", handler: handleTextToSpeech },
|
|
57
|
+
ocrStream: { type: "stream", handler: handleOCRStream },
|
|
58
|
+
pluginInvokeStream: { type: "stream", handler: handlePluginInvokeStream },
|
|
59
|
+
// Handlers with delegation support
|
|
60
|
+
loadModel: {
|
|
61
|
+
type: "reply",
|
|
62
|
+
handler: handleLoadModel,
|
|
63
|
+
delegatedHandler: handleLoadModelDelegated,
|
|
64
|
+
isDelegated: (r) => r.type === "loadModel" && !!r.delegate,
|
|
65
|
+
supportsProgress: true,
|
|
66
|
+
},
|
|
67
|
+
completionStream: {
|
|
68
|
+
type: "stream",
|
|
69
|
+
handler: handleCompletionStream,
|
|
70
|
+
delegatedHandler: handleCompletionStreamDelegated,
|
|
71
|
+
isDelegated: isModelDelegated,
|
|
72
|
+
},
|
|
73
|
+
// Handlers with progress support
|
|
74
|
+
downloadAsset: {
|
|
75
|
+
type: "reply",
|
|
76
|
+
handler: handleDownloadAsset,
|
|
77
|
+
supportsProgress: true,
|
|
78
|
+
},
|
|
79
|
+
rag: {
|
|
80
|
+
type: "reply",
|
|
81
|
+
handler: handleRag,
|
|
82
|
+
supportsProgress: ragSupportsProgress,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type QvacConfig, type Request, type Response, type RuntimeContext } from "../../schemas/index";
|
|
2
|
+
import type RPC from "bare-rpc";
|
|
3
|
+
type ReplyHandler = (request: any) => Promise<Response> | Response;
|
|
4
|
+
type StreamHandler = (request: any) => AsyncGenerator<Response>;
|
|
5
|
+
type ProgressHandler = (request: any, onProgress?: (update: Response) => void) => Promise<Response>;
|
|
6
|
+
export type HandlerEntry = {
|
|
7
|
+
type: "reply" | "stream";
|
|
8
|
+
handler: ReplyHandler | StreamHandler | ProgressHandler;
|
|
9
|
+
delegatedHandler?: ReplyHandler | StreamHandler | ProgressHandler;
|
|
10
|
+
isDelegated?: (request: Request) => boolean;
|
|
11
|
+
supportsProgress?: boolean | ((request: Request) => boolean);
|
|
12
|
+
};
|
|
13
|
+
export declare function executeHandler(req: RPC.IncomingRequest, request: Request, entry: HandlerEntry): Promise<void>;
|
|
14
|
+
type InitConfigMessage = {
|
|
15
|
+
type: "__init_config";
|
|
16
|
+
config: QvacConfig;
|
|
17
|
+
runtimeContext?: RuntimeContext;
|
|
18
|
+
};
|
|
19
|
+
export declare function isInitConfigMessage(data: unknown): data is InitConfigMessage;
|
|
20
|
+
export declare function handleInitConfig(req: RPC.IncomingRequest, data: InitConfigMessage): void;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=handler-utils.d.ts.map
|