@qvac/sdk 0.1.0-dev.1760648187.328e967
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 +202 -0
- package/README.md +301 -0
- package/dist/client/api/cancel.d.ts +25 -0
- package/dist/client/api/cancel.js +37 -0
- package/dist/client/api/completion-stream.d.ts +50 -0
- package/dist/client/api/completion-stream.js +103 -0
- package/dist/client/api/download-asset.d.ts +39 -0
- package/dist/client/api/download-asset.js +72 -0
- package/dist/client/api/embed.d.ts +11 -0
- package/dist/client/api/embed.js +24 -0
- package/dist/client/api/index.d.ts +13 -0
- package/dist/client/api/index.js +12 -0
- package/dist/client/api/load-model.d.ts +98 -0
- package/dist/client/api/load-model.js +154 -0
- package/dist/client/api/logging-stream.d.ts +21 -0
- package/dist/client/api/logging-stream.js +32 -0
- package/dist/client/api/ping.d.ts +11 -0
- package/dist/client/api/ping.js +18 -0
- package/dist/client/api/provide.d.ts +18 -0
- package/dist/client/api/provide.js +27 -0
- package/dist/client/api/rag.d.ts +42 -0
- package/dist/client/api/rag.js +97 -0
- package/dist/client/api/transcribe.d.ts +24 -0
- package/dist/client/api/transcribe.js +52 -0
- package/dist/client/api/translate.d.ts +47 -0
- package/dist/client/api/translate.js +114 -0
- package/dist/client/api/unload-model.d.ts +11 -0
- package/dist/client/api/unload-model.js +26 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +1 -0
- package/dist/client/logging-stream-registry.d.ts +5 -0
- package/dist/client/logging-stream-registry.js +60 -0
- package/dist/client/rpc/bare-client.d.ts +112 -0
- package/dist/client/rpc/bare-client.js +82 -0
- package/dist/client/rpc/bare-rpc-client.d.ts +4 -0
- package/dist/client/rpc/bare-rpc-client.js +87 -0
- package/dist/client/rpc/expo-rpc-client.d.ts +3 -0
- package/dist/client/rpc/expo-rpc-client.js +57 -0
- package/dist/client/rpc/node-rpc-client.d.ts +9 -0
- package/dist/client/rpc/node-rpc-client.js +99 -0
- package/dist/client/rpc/rpc-client.d.ts +5 -0
- package/dist/client/rpc/rpc-client.js +91 -0
- package/dist/client/rpc/rpc-error.d.ts +19 -0
- package/dist/client/rpc/rpc-error.js +39 -0
- package/dist/constants/audio.d.ts +3 -0
- package/dist/constants/audio.js +17 -0
- package/dist/constants/index.d.ts +2 -0
- package/dist/constants/index.js +1 -0
- package/dist/examples/delegated-inference/consumer.d.ts +2 -0
- package/dist/examples/delegated-inference/consumer.js +56 -0
- package/dist/examples/delegated-inference/provider.d.ts +2 -0
- package/dist/examples/delegated-inference/provider.js +57 -0
- package/dist/examples/download-with-cancel.d.ts +2 -0
- package/dist/examples/download-with-cancel.js +46 -0
- package/dist/examples/embed-hyperdrive.d.ts +2 -0
- package/dist/examples/embed-hyperdrive.js +19 -0
- package/dist/examples/kv-cache-example.d.ts +2 -0
- package/dist/examples/kv-cache-example.js +74 -0
- package/dist/examples/llamacpp-file-logging.d.ts +2 -0
- package/dist/examples/llamacpp-file-logging.js +62 -0
- package/dist/examples/llamacpp-filesystem.d.ts +2 -0
- package/dist/examples/llamacpp-filesystem.js +40 -0
- package/dist/examples/llamacpp-http.d.ts +2 -0
- package/dist/examples/llamacpp-http.js +41 -0
- package/dist/examples/llamacpp-hyperdrive.d.ts +2 -0
- package/dist/examples/llamacpp-hyperdrive.js +39 -0
- package/dist/examples/llamacpp-multimodal.d.ts +2 -0
- package/dist/examples/llamacpp-multimodal.js +62 -0
- package/dist/examples/llamacpp-native-tools.d.ts +2 -0
- package/dist/examples/llamacpp-native-tools.js +64 -0
- package/dist/examples/llamacpp-tools-routing.d.ts +2 -0
- package/dist/examples/llamacpp-tools-routing.js +364 -0
- package/dist/examples/llamacpp-tools.d.ts +2 -0
- package/dist/examples/llamacpp-tools.js +81 -0
- package/dist/examples/multi-model-demo.d.ts +2 -0
- package/dist/examples/multi-model-demo.js +75 -0
- package/dist/examples/parallel-download.d.ts +2 -0
- package/dist/examples/parallel-download.js +21 -0
- package/dist/examples/rag/rag-chromadb.d.ts +2 -0
- package/dist/examples/rag/rag-chromadb.js +130 -0
- package/dist/examples/rag/rag-hyperdb-workspaces.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb-workspaces.js +106 -0
- package/dist/examples/rag/rag-hyperdb.d.ts +2 -0
- package/dist/examples/rag/rag-hyperdb.js +50 -0
- package/dist/examples/rag/rag-lancedb.d.ts +2 -0
- package/dist/examples/rag/rag-lancedb.js +95 -0
- package/dist/examples/rag/rag-sqlite.d.ts +2 -0
- package/dist/examples/rag/rag-sqlite.js +107 -0
- package/dist/examples/seed-hyperdrive.d.ts +2 -0
- package/dist/examples/seed-hyperdrive.js +21 -0
- package/dist/examples/translation/translation-indic.d.ts +2 -0
- package/dist/examples/translation/translation-indic.js +30 -0
- package/dist/examples/translation/translation-llm-context.d.ts +2 -0
- package/dist/examples/translation/translation-llm-context.js +30 -0
- package/dist/examples/translation/translation-llm.d.ts +2 -0
- package/dist/examples/translation/translation-llm.js +38 -0
- package/dist/examples/translation/translation-opus.d.ts +2 -0
- package/dist/examples/translation/translation-opus.js +30 -0
- package/dist/examples/translation/translation-stream.d.ts +2 -0
- package/dist/examples/translation/translation-stream.js +35 -0
- package/dist/examples/whispercpp-filesystem.d.ts +2 -0
- package/dist/examples/whispercpp-filesystem.js +43 -0
- package/dist/examples/whispercpp-microphone-record.d.ts +2 -0
- package/dist/examples/whispercpp-microphone-record.js +311 -0
- package/dist/expo/plugins/index.d.ts +5 -0
- package/dist/expo/plugins/index.js +5 -0
- package/dist/expo/plugins/withMobileBundle.d.ts +8 -0
- package/dist/expo/plugins/withMobileBundle.js +60 -0
- package/dist/expo/plugins/withOpenCL.d.ts +9 -0
- package/dist/expo/plugins/withOpenCL.js +118 -0
- package/dist/expo/plugins/withQvacSDK.d.ts +9 -0
- package/dist/expo/plugins/withQvacSDK.js +13 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/logging/base-logger.d.ts +7 -0
- package/dist/logging/base-logger.js +55 -0
- package/dist/logging/index.d.ts +4 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/logger.d.ts +5 -0
- package/dist/logging/logger.js +28 -0
- package/dist/logging/stream-logger.d.ts +3 -0
- package/dist/logging/stream-logger.js +9 -0
- package/dist/logging/transport.d.ts +3 -0
- package/dist/logging/transport.js +15 -0
- package/dist/logging/types.d.ts +18 -0
- package/dist/logging/types.js +1 -0
- package/dist/logging/utils.d.ts +4 -0
- package/dist/logging/utils.js +47 -0
- package/dist/models/hyperdrive/index.d.ts +2 -0
- package/dist/models/hyperdrive/index.js +2 -0
- package/dist/models/hyperdrive/models.d.ts +475 -0
- package/dist/models/hyperdrive/models.js +534 -0
- package/dist/schemas/cancel.d.ts +33 -0
- package/dist/schemas/cancel.js +25 -0
- package/dist/schemas/common.d.ts +626 -0
- package/dist/schemas/common.js +47 -0
- package/dist/schemas/completion-stream.d.ts +125 -0
- package/dist/schemas/completion-stream.js +53 -0
- package/dist/schemas/delegate.d.ts +9 -0
- package/dist/schemas/delegate.js +9 -0
- package/dist/schemas/download-asset.d.ts +75 -0
- package/dist/schemas/download-asset.js +43 -0
- package/dist/schemas/embed.d.ts +20 -0
- package/dist/schemas/embed.js +14 -0
- package/dist/schemas/error.d.ts +13 -0
- package/dist/schemas/error.js +35 -0
- package/dist/schemas/index.d.ts +19 -0
- package/dist/schemas/index.js +19 -0
- package/dist/schemas/llamacpp-config.d.ts +30 -0
- package/dist/schemas/llamacpp-config.js +39 -0
- package/dist/schemas/load-model.d.ts +1259 -0
- package/dist/schemas/load-model.js +108 -0
- package/dist/schemas/logging-stream.d.ts +27 -0
- package/dist/schemas/logging-stream.js +16 -0
- package/dist/schemas/ping.d.ts +11 -0
- package/dist/schemas/ping.js +8 -0
- package/dist/schemas/provide.d.ts +43 -0
- package/dist/schemas/provide.js +25 -0
- package/dist/schemas/rag.d.ts +159 -0
- package/dist/schemas/rag.js +78 -0
- package/dist/schemas/transcription.d.ts +24 -0
- package/dist/schemas/transcription.js +15 -0
- package/dist/schemas/translate.d.ts +82 -0
- package/dist/schemas/translate.js +42 -0
- package/dist/schemas/translation-config.d.ts +83 -0
- package/dist/schemas/translation-config.js +46 -0
- package/dist/schemas/unload-model.d.ts +19 -0
- package/dist/schemas/unload-model.js +13 -0
- package/dist/schemas/whispercpp-config.d.ts +25 -0
- package/dist/schemas/whispercpp-config.js +18 -0
- package/dist/server/bare/addons/cancel.d.ts +3 -0
- package/dist/server/bare/addons/cancel.js +12 -0
- package/dist/server/bare/addons/index.d.ts +4 -0
- package/dist/server/bare/addons/index.js +3 -0
- package/dist/server/bare/addons/llamacpp/create-model.d.ts +5 -0
- package/dist/server/bare/addons/llamacpp/create-model.js +57 -0
- package/dist/server/bare/addons/llamacpp/handlers/completion-stream.d.ts +3 -0
- package/dist/server/bare/addons/llamacpp/handlers/completion-stream.js +65 -0
- package/dist/server/bare/addons/llamacpp/handlers/embed.d.ts +4 -0
- package/dist/server/bare/addons/llamacpp/handlers/embed.js +40 -0
- package/dist/server/bare/addons/llamacpp/index.d.ts +4 -0
- package/dist/server/bare/addons/llamacpp/index.js +3 -0
- package/dist/server/bare/addons/llamacpp/kv-cache-utils.d.ts +19 -0
- package/dist/server/bare/addons/llamacpp/kv-cache-utils.js +46 -0
- package/dist/server/bare/addons/load-model.d.ts +3 -0
- package/dist/server/bare/addons/load-model.js +55 -0
- package/dist/server/bare/addons/translation/create-model.d.ts +4 -0
- package/dist/server/bare/addons/translation/create-model.js +45 -0
- package/dist/server/bare/addons/translation/handlers/translate.d.ts +3 -0
- package/dist/server/bare/addons/translation/handlers/translate.js +86 -0
- package/dist/server/bare/addons/translation/index.d.ts +3 -0
- package/dist/server/bare/addons/translation/index.js +2 -0
- package/dist/server/bare/addons/unload-model.d.ts +3 -0
- package/dist/server/bare/addons/unload-model.js +20 -0
- package/dist/server/bare/addons/whispercpp/create-model.d.ts +6 -0
- package/dist/server/bare/addons/whispercpp/create-model.js +55 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.d.ts +3 -0
- package/dist/server/bare/addons/whispercpp/handlers/transcribe-stream.js +42 -0
- package/dist/server/bare/addons/whispercpp/index.d.ts +3 -0
- package/dist/server/bare/addons/whispercpp/index.js +2 -0
- package/dist/server/bare/delegate-rpc-client.d.ts +4 -0
- package/dist/server/bare/delegate-rpc-client.js +70 -0
- package/dist/server/bare/hyperswarm.d.ts +7 -0
- package/dist/server/bare/hyperswarm.js +62 -0
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/delete-embeddings.js +12 -0
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.d.ts +6 -0
- package/dist/server/bare/rag-hyperdb/handlers/save-embeddings.js +16 -0
- package/dist/server/bare/rag-hyperdb/handlers/search.d.ts +3 -0
- package/dist/server/bare/rag-hyperdb/handlers/search.js +15 -0
- package/dist/server/bare/rag-hyperdb/index.d.ts +5 -0
- package/dist/server/bare/rag-hyperdb/index.js +4 -0
- package/dist/server/bare/rag-hyperdb/rag-manager.d.ts +5 -0
- package/dist/server/bare/rag-hyperdb/rag-manager.js +61 -0
- package/dist/server/bare/registry/logging-stream-registry.d.ts +12 -0
- package/dist/server/bare/registry/logging-stream-registry.js +46 -0
- package/dist/server/bare/registry/model-registry.d.ts +64 -0
- package/dist/server/bare/registry/model-registry.js +95 -0
- package/dist/server/error-handlers.d.ts +4 -0
- package/dist/server/error-handlers.js +27 -0
- package/dist/server/http-server.d.ts +2 -0
- package/dist/server/http-server.js +189 -0
- package/dist/server/rpc/create-server.d.ts +4 -0
- package/dist/server/rpc/create-server.js +19 -0
- package/dist/server/rpc/handle-request.d.ts +12 -0
- package/dist/server/rpc/handle-request.js +220 -0
- package/dist/server/rpc/handlers/cancelHandler.d.ts +3 -0
- package/dist/server/rpc/handlers/cancelHandler.js +27 -0
- package/dist/server/rpc/handlers/completion-stream-delegated.d.ts +3 -0
- package/dist/server/rpc/handlers/completion-stream-delegated.js +30 -0
- package/dist/server/rpc/handlers/completion-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/completion-stream.js +52 -0
- package/dist/server/rpc/handlers/download-asset.d.ts +3 -0
- package/dist/server/rpc/handlers/download-asset.js +21 -0
- package/dist/server/rpc/handlers/embed.d.ts +3 -0
- package/dist/server/rpc/handlers/embed.js +21 -0
- package/dist/server/rpc/handlers/index.d.ts +23 -0
- package/dist/server/rpc/handlers/index.js +22 -0
- package/dist/server/rpc/handlers/load-model/download-manager.d.ts +31 -0
- package/dist/server/rpc/handlers/load-model/download-manager.js +88 -0
- package/dist/server/rpc/handlers/load-model/http.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model/http.js +337 -0
- package/dist/server/rpc/handlers/load-model/hyperdrive.d.ts +4 -0
- package/dist/server/rpc/handlers/load-model/hyperdrive.js +332 -0
- package/dist/server/rpc/handlers/load-model/index.d.ts +4 -0
- package/dist/server/rpc/handlers/load-model/index.js +3 -0
- package/dist/server/rpc/handlers/load-model/resolve.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model/resolve.js +121 -0
- package/dist/server/rpc/handlers/load-model-delegated.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model-delegated.js +93 -0
- package/dist/server/rpc/handlers/load-model.d.ts +3 -0
- package/dist/server/rpc/handlers/load-model.js +41 -0
- package/dist/server/rpc/handlers/logging-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/logging-stream.js +37 -0
- package/dist/server/rpc/handlers/provideHandler/connection.d.ts +3 -0
- package/dist/server/rpc/handlers/provideHandler/connection.js +25 -0
- package/dist/server/rpc/handlers/provideHandler/handler.d.ts +3 -0
- package/dist/server/rpc/handlers/provideHandler/handler.js +50 -0
- package/dist/server/rpc/handlers/provideHandler/proxy.d.ts +3 -0
- package/dist/server/rpc/handlers/provideHandler/proxy.js +22 -0
- package/dist/server/rpc/handlers/provideHandler.d.ts +2 -0
- package/dist/server/rpc/handlers/provideHandler.js +2 -0
- package/dist/server/rpc/handlers/rag.d.ts +3 -0
- package/dist/server/rpc/handlers/rag.js +67 -0
- package/dist/server/rpc/handlers/transcribe-stream.d.ts +3 -0
- package/dist/server/rpc/handlers/transcribe-stream.js +26 -0
- package/dist/server/rpc/handlers/translate.d.ts +3 -0
- package/dist/server/rpc/handlers/translate.js +51 -0
- package/dist/server/rpc/handlers/unload-model.d.ts +3 -0
- package/dist/server/rpc/handlers/unload-model.js +20 -0
- package/dist/server/rpc/index.d.ts +3 -0
- package/dist/server/rpc/index.js +2 -0
- package/dist/server/utils/audio/decoder.d.ts +4 -0
- package/dist/server/utils/audio/decoder.js +41 -0
- package/dist/server/utils/cache.d.ts +15 -0
- package/dist/server/utils/cache.js +32 -0
- package/dist/server/utils/hash.d.ts +5 -0
- package/dist/server/utils/hash.js +11 -0
- package/dist/server/utils/index.d.ts +5 -0
- package/dist/server/utils/index.js +4 -0
- package/dist/server/utils/model-path.d.ts +5 -0
- package/dist/server/utils/model-path.js +7 -0
- package/dist/server/worker.d.ts +6 -0
- package/dist/server/worker.js +77 -0
- package/dist/utils/withTimeout.d.ts +11 -0
- package/dist/utils/withTimeout.js +37 -0
- package/package.json +129 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
interface AddonInterface {
|
|
2
|
+
cancel(jobId?: string): Promise<void>;
|
|
3
|
+
}
|
|
4
|
+
export interface AnyModel {
|
|
5
|
+
load(...args: unknown[]): Promise<void>;
|
|
6
|
+
run(input: unknown): Promise<{
|
|
7
|
+
onUpdate(callback: (data: string) => void): {
|
|
8
|
+
await: () => Promise<void>;
|
|
9
|
+
};
|
|
10
|
+
onUpdate(callback: (data: Array<{
|
|
11
|
+
text: string;
|
|
12
|
+
}>) => void): {
|
|
13
|
+
await: () => Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
iterate(): AsyncIterableIterator<string | Array<{
|
|
16
|
+
text: string;
|
|
17
|
+
}>>;
|
|
18
|
+
await(): Promise<void>;
|
|
19
|
+
}>;
|
|
20
|
+
unload?(): Promise<void>;
|
|
21
|
+
addon?: AddonInterface;
|
|
22
|
+
}
|
|
23
|
+
interface DelegateOptions {
|
|
24
|
+
topic: string;
|
|
25
|
+
providerPublicKey: string;
|
|
26
|
+
timeout?: number | undefined;
|
|
27
|
+
}
|
|
28
|
+
interface LocalOptions {
|
|
29
|
+
model: AnyModel;
|
|
30
|
+
path: string;
|
|
31
|
+
loadedAt: Date;
|
|
32
|
+
}
|
|
33
|
+
export interface ModelEntry {
|
|
34
|
+
id: string;
|
|
35
|
+
isDelegated: boolean;
|
|
36
|
+
local?: LocalOptions;
|
|
37
|
+
delegated?: DelegateOptions;
|
|
38
|
+
}
|
|
39
|
+
export declare function registerModel(id: string, options: {
|
|
40
|
+
model: AnyModel;
|
|
41
|
+
path: string;
|
|
42
|
+
} | {
|
|
43
|
+
topic: string;
|
|
44
|
+
providerPublicKey: string;
|
|
45
|
+
timeout?: number;
|
|
46
|
+
}): void;
|
|
47
|
+
export declare function getModelEntry(id: string): ModelEntry | null;
|
|
48
|
+
export declare function getModel(id: string): AnyModel;
|
|
49
|
+
export declare function isModelLoaded(id: string): boolean;
|
|
50
|
+
export declare function unregisterModel(id: string): ModelEntry | null;
|
|
51
|
+
export declare function getAllModelIds(): string[];
|
|
52
|
+
export declare function getModelInfo(id: string): {
|
|
53
|
+
id: string;
|
|
54
|
+
path: string;
|
|
55
|
+
loadedAt: Date;
|
|
56
|
+
} | null;
|
|
57
|
+
export declare function clearRegistry(): void;
|
|
58
|
+
export declare function getRegistryStats(): {
|
|
59
|
+
totalModels: number;
|
|
60
|
+
modelIds: string[];
|
|
61
|
+
};
|
|
62
|
+
export declare function unloadAllModels(): Promise<void>;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=model-registry.d.ts.map
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Global registry state - using stateless functions to manage it
|
|
2
|
+
const modelRegistry = new Map();
|
|
3
|
+
export function registerModel(id, options) {
|
|
4
|
+
if (modelRegistry.has(id)) {
|
|
5
|
+
throw new Error(`Model with ID "${id}" is already registered`);
|
|
6
|
+
}
|
|
7
|
+
const isDelegated = "topic" in options && "providerPublicKey" in options;
|
|
8
|
+
if (isDelegated) {
|
|
9
|
+
const { topic, providerPublicKey, timeout } = options;
|
|
10
|
+
modelRegistry.set(id, {
|
|
11
|
+
id,
|
|
12
|
+
isDelegated: true,
|
|
13
|
+
delegated: {
|
|
14
|
+
topic,
|
|
15
|
+
providerPublicKey,
|
|
16
|
+
timeout,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
console.log(`Delegated model registered: ${id} -> topic: ${topic}, provider: ${providerPublicKey}, timeout: ${timeout}ms`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
modelRegistry.set(id, {
|
|
23
|
+
id,
|
|
24
|
+
isDelegated: false,
|
|
25
|
+
local: {
|
|
26
|
+
model: options.model,
|
|
27
|
+
path: options.path,
|
|
28
|
+
loadedAt: new Date(),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
console.log(`Local model registered: ${id} -> ${options.path}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function getModelEntry(id) {
|
|
35
|
+
return modelRegistry.get(id) || null;
|
|
36
|
+
}
|
|
37
|
+
export function getModel(id) {
|
|
38
|
+
const entry = modelRegistry.get(id);
|
|
39
|
+
if (!entry) {
|
|
40
|
+
const availableIds = Array.from(modelRegistry.keys());
|
|
41
|
+
throw new Error(`Model with ID "${id}" not found in registry. Available models: ${availableIds.join(", ")}`);
|
|
42
|
+
}
|
|
43
|
+
if (!entry.local) {
|
|
44
|
+
throw new Error(`Model with ID "${id}" is delegated and cannot be accessed as a local model`);
|
|
45
|
+
}
|
|
46
|
+
return entry.local.model;
|
|
47
|
+
}
|
|
48
|
+
export function isModelLoaded(id) {
|
|
49
|
+
return modelRegistry.has(id);
|
|
50
|
+
}
|
|
51
|
+
export function unregisterModel(id) {
|
|
52
|
+
const entry = modelRegistry.get(id);
|
|
53
|
+
if (entry) {
|
|
54
|
+
modelRegistry.delete(id);
|
|
55
|
+
console.log(`Model unregistered: ${id}`);
|
|
56
|
+
return entry;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
export function getAllModelIds() {
|
|
61
|
+
return Array.from(modelRegistry.keys());
|
|
62
|
+
}
|
|
63
|
+
export function getModelInfo(id) {
|
|
64
|
+
const entry = modelRegistry.get(id);
|
|
65
|
+
if (!entry || !entry.local) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
id: entry.id,
|
|
70
|
+
path: entry.local.path,
|
|
71
|
+
loadedAt: entry.local.loadedAt,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function clearRegistry() {
|
|
75
|
+
modelRegistry.clear();
|
|
76
|
+
console.log("Model registry cleared");
|
|
77
|
+
}
|
|
78
|
+
export function getRegistryStats() {
|
|
79
|
+
return {
|
|
80
|
+
totalModels: modelRegistry.size,
|
|
81
|
+
modelIds: Array.from(modelRegistry.keys()),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export async function unloadAllModels() {
|
|
85
|
+
const modelIds = getAllModelIds();
|
|
86
|
+
for (const modelId of modelIds) {
|
|
87
|
+
const entry = modelRegistry.get(modelId);
|
|
88
|
+
if (entry?.local?.model && entry.local.model.unload) {
|
|
89
|
+
await entry.local.model.unload();
|
|
90
|
+
console.log(`Model unloaded: ${modelId}`);
|
|
91
|
+
}
|
|
92
|
+
modelRegistry.delete(modelId);
|
|
93
|
+
}
|
|
94
|
+
console.log(`Unloaded ${modelIds.length} models`);
|
|
95
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
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;
|
|
4
|
+
//# sourceMappingURL=error-handlers.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createErrorResponse, responseSchema } from "../schemas/index.js";
|
|
2
|
+
export function sendErrorResponse(req, error) {
|
|
3
|
+
try {
|
|
4
|
+
const errorResponse = createErrorResponse(error);
|
|
5
|
+
const responseData = JSON.stringify(responseSchema.parse(errorResponse));
|
|
6
|
+
req.reply(responseData, "utf-8");
|
|
7
|
+
}
|
|
8
|
+
catch (responseError) {
|
|
9
|
+
console.error("Failed to create error response:", responseError);
|
|
10
|
+
const fallbackError = createErrorResponse(new Error("Internal server error"));
|
|
11
|
+
req.reply(JSON.stringify(fallbackError), "utf-8");
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function sendStreamErrorResponse(stream, error) {
|
|
15
|
+
try {
|
|
16
|
+
const errorResponse = createErrorResponse(error);
|
|
17
|
+
const responseData = JSON.stringify(responseSchema.parse(errorResponse));
|
|
18
|
+
stream.write(responseData + "\n", "utf-8");
|
|
19
|
+
stream.end();
|
|
20
|
+
}
|
|
21
|
+
catch (responseError) {
|
|
22
|
+
console.error("Failed to create stream error response:", responseError);
|
|
23
|
+
const fallbackError = createErrorResponse(new Error("Internal server error"));
|
|
24
|
+
stream.write(JSON.stringify(fallbackError) + "\n", "utf-8");
|
|
25
|
+
stream.end();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// import http from "bare-http1";
|
|
2
|
+
// import process from "bare-process";
|
|
3
|
+
// import { loadModel, completion } from "./handlers/llamacpp";
|
|
4
|
+
// // import { loadWhisperModel, transcribe } from "./whisper.js";
|
|
5
|
+
export {};
|
|
6
|
+
// export type Request = http.HTTPIncomingMessage;
|
|
7
|
+
// export type Response = http.HTTPServerResponse;
|
|
8
|
+
// export type RouteHandler = (
|
|
9
|
+
// req: Request,
|
|
10
|
+
// res: Response
|
|
11
|
+
// ) => Promise<void>;
|
|
12
|
+
// // async function transcribeRoute(
|
|
13
|
+
// // req: http.Request,
|
|
14
|
+
// // res: http.Response
|
|
15
|
+
// // ): Promise<void> {
|
|
16
|
+
// // if (req.method !== 'POST') {
|
|
17
|
+
// // res.statusCode = 405;
|
|
18
|
+
// // res.setHeader('Content-Type', 'application/json');
|
|
19
|
+
// // const errorResponse = JSON.stringify({ error: 'Method not allowed' });
|
|
20
|
+
// // res.setHeader("Content-Length", errorResponse.length);
|
|
21
|
+
// // res.write(errorResponse);
|
|
22
|
+
// // res.end();
|
|
23
|
+
// // return;
|
|
24
|
+
// // }
|
|
25
|
+
// // try {
|
|
26
|
+
// // // Read the request body
|
|
27
|
+
// // let body = '';
|
|
28
|
+
// // req.on('data', (chunk) => {
|
|
29
|
+
// // body += chunk;
|
|
30
|
+
// // });
|
|
31
|
+
// // await new Promise((resolve) => {
|
|
32
|
+
// // req.on('end', resolve);
|
|
33
|
+
// // });
|
|
34
|
+
// // // Parse JSON body
|
|
35
|
+
// // const { audio: b64Audio } = JSON.parse(body);
|
|
36
|
+
// // if (!b64Audio) {
|
|
37
|
+
// // res.statusCode = 400;
|
|
38
|
+
// // res.setHeader('Content-Type', 'application/json');
|
|
39
|
+
// // const errorResponse = JSON.stringify({ error: 'Missing b64Audio in request body' });
|
|
40
|
+
// // res.setHeader("Content-Length", errorResponse.length);
|
|
41
|
+
// // res.write(errorResponse);
|
|
42
|
+
// // res.end();
|
|
43
|
+
// // return;
|
|
44
|
+
// // }
|
|
45
|
+
// // // Call transcribe function
|
|
46
|
+
// // const transcription = await transcribe(b64Audio);
|
|
47
|
+
// // // Return transcription result
|
|
48
|
+
// // res.statusCode = 200;
|
|
49
|
+
// // res.setHeader('Content-Type', 'application/json');
|
|
50
|
+
// // const response = JSON.stringify({ transcription });
|
|
51
|
+
// // res.setHeader("Content-Length", response.length);
|
|
52
|
+
// // res.write(response);
|
|
53
|
+
// // res.end();
|
|
54
|
+
// // } catch (error) {
|
|
55
|
+
// // console.error('Transcription error:', error);
|
|
56
|
+
// // res.statusCode = 500;
|
|
57
|
+
// // res.setHeader('Content-Type', 'application/json');
|
|
58
|
+
// // const errorResponse = JSON.stringify({ error: 'Internal server error' });
|
|
59
|
+
// // res.setHeader("Content-Length", errorResponse.length);
|
|
60
|
+
// // res.write(errorResponse);
|
|
61
|
+
// // res.end();
|
|
62
|
+
// // }
|
|
63
|
+
// // }
|
|
64
|
+
// async function completionRoute(
|
|
65
|
+
// req: Request,
|
|
66
|
+
// res: Response
|
|
67
|
+
// ): Promise<void> {
|
|
68
|
+
// if (req.method !== 'POST') {
|
|
69
|
+
// res.statusCode = 405;
|
|
70
|
+
// res.setHeader('Content-Type', 'application/json');
|
|
71
|
+
// const errorResponse = JSON.stringify({ error: 'Method not allowed' });
|
|
72
|
+
// res.setHeader("Content-Length", errorResponse.length);
|
|
73
|
+
// res.write(errorResponse);
|
|
74
|
+
// res.end();
|
|
75
|
+
// return;
|
|
76
|
+
// }
|
|
77
|
+
// try {
|
|
78
|
+
// // Read the request body
|
|
79
|
+
// let body = '';
|
|
80
|
+
// req.on('data', (chunk) => {
|
|
81
|
+
// body += chunk;
|
|
82
|
+
// });
|
|
83
|
+
// await new Promise((resolve) => {
|
|
84
|
+
// req.on('end', resolve);
|
|
85
|
+
// });
|
|
86
|
+
// // Parse JSON body
|
|
87
|
+
// const { messages } = JSON.parse(body);
|
|
88
|
+
// if (!messages || !Array.isArray(messages)) {
|
|
89
|
+
// res.statusCode = 400;
|
|
90
|
+
// res.setHeader('Content-Type', 'application/json');
|
|
91
|
+
// const errorResponse = JSON.stringify({ error: 'Missing or invalid messages in request body' });
|
|
92
|
+
// res.setHeader("Content-Length", errorResponse.length);
|
|
93
|
+
// res.write(errorResponse);
|
|
94
|
+
// res.end();
|
|
95
|
+
// return;
|
|
96
|
+
// }
|
|
97
|
+
// // Call completion function
|
|
98
|
+
// const response = await completion(messages);
|
|
99
|
+
// // Return completion result
|
|
100
|
+
// res.statusCode = 200;
|
|
101
|
+
// res.setHeader('Content-Type', 'application/json');
|
|
102
|
+
// const jsonResponse = JSON.stringify({ response });
|
|
103
|
+
// res.setHeader("Content-Length", jsonResponse.length);
|
|
104
|
+
// res.write(jsonResponse);
|
|
105
|
+
// res.end();
|
|
106
|
+
// } catch (error) {
|
|
107
|
+
// console.error('Completion error:', error);
|
|
108
|
+
// res.statusCode = 500;
|
|
109
|
+
// res.setHeader('Content-Type', 'application/json');
|
|
110
|
+
// const errorResponse = JSON.stringify({ error: 'Internal server error' });
|
|
111
|
+
// res.setHeader("Content-Length", errorResponse.length);
|
|
112
|
+
// res.write(errorResponse);
|
|
113
|
+
// res.end();
|
|
114
|
+
// }
|
|
115
|
+
// }
|
|
116
|
+
// export const routes: Record<string, RouteHandler> = {
|
|
117
|
+
// // '/transcribe': transcribeRoute,
|
|
118
|
+
// '/completion': completionRoute
|
|
119
|
+
// };
|
|
120
|
+
// export async function handleRequest(
|
|
121
|
+
// req: Request,
|
|
122
|
+
// res: Response
|
|
123
|
+
// ): Promise<void> {
|
|
124
|
+
// // Set CORS headers
|
|
125
|
+
// res.setHeader('Access-Control-Allow-Origin', '*');
|
|
126
|
+
// res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
127
|
+
// res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
128
|
+
// // Handle preflight requests
|
|
129
|
+
// if (req.method === 'OPTIONS') {
|
|
130
|
+
// res.statusCode = 200;
|
|
131
|
+
// res.end();
|
|
132
|
+
// return;
|
|
133
|
+
// }
|
|
134
|
+
// const url = new URL(req.url!, `http://${req.headers.host}`);
|
|
135
|
+
// const route = routes[url.pathname];
|
|
136
|
+
// if (route) {
|
|
137
|
+
// await route(req, res);
|
|
138
|
+
// } else {
|
|
139
|
+
// // Handle 404 for unknown routes
|
|
140
|
+
// res.statusCode = 404;
|
|
141
|
+
// res.setHeader('Content-Type', 'application/json');
|
|
142
|
+
// const errorResponse = JSON.stringify({ error: 'Route not found' });
|
|
143
|
+
// res.setHeader("Content-Length", errorResponse.length);
|
|
144
|
+
// res.write(errorResponse);
|
|
145
|
+
// res.end();
|
|
146
|
+
// }
|
|
147
|
+
// }
|
|
148
|
+
// async function startServer(port: number = 3000): Promise<void> {
|
|
149
|
+
// const server = http.createServer(handleRequest);
|
|
150
|
+
// server.listen(port, () => {
|
|
151
|
+
// console.log(`HTTP server listening on port ${port}`);
|
|
152
|
+
// });
|
|
153
|
+
// // Handle graceful shutdown
|
|
154
|
+
// process.on('SIGTERM', () => {
|
|
155
|
+
// console.log('Shutting down HTTP server...');
|
|
156
|
+
// server.close(() => {
|
|
157
|
+
// console.log('HTTP server closed');
|
|
158
|
+
// process.exit(0);
|
|
159
|
+
// });
|
|
160
|
+
// });
|
|
161
|
+
// process.on('SIGINT', () => {
|
|
162
|
+
// console.log('Shutting down HTTP server...');
|
|
163
|
+
// server.close(() => {
|
|
164
|
+
// console.log('HTTP server closed');
|
|
165
|
+
// process.exit(0);
|
|
166
|
+
// });
|
|
167
|
+
// });
|
|
168
|
+
// }
|
|
169
|
+
// // Main application startup
|
|
170
|
+
// async function main() {
|
|
171
|
+
// console.log("🚀 Starting QVAC Notes server...");
|
|
172
|
+
// try {
|
|
173
|
+
// // Load models on startup
|
|
174
|
+
// console.log("Loading Whisper model...");
|
|
175
|
+
// // await loadWhisperModel();
|
|
176
|
+
// console.log("✅ Whisper model loaded");
|
|
177
|
+
// // Load LLM model (you may want to make this configurable)
|
|
178
|
+
// console.log("Loading LLM model...");
|
|
179
|
+
// await loadModel("/Users/marco/.cache/lm-studio/models/lmstudio-community/medgemma-4b-it-GGUF/medgemma-4b-it-Q4_K_M.gguf");
|
|
180
|
+
// console.log("✅ LLM model loaded");
|
|
181
|
+
// // Start HTTP server
|
|
182
|
+
// await startServer();
|
|
183
|
+
// } catch (error) {
|
|
184
|
+
// console.error("❌ Failed to start server:", error);
|
|
185
|
+
// process.exit(1);
|
|
186
|
+
// }
|
|
187
|
+
// }
|
|
188
|
+
// // Start the server
|
|
189
|
+
// main().catch(console.error);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import RPC from "bare-rpc";
|
|
2
|
+
import { connect } from "bare-net";
|
|
3
|
+
import { handleRequest } from "./handle-request.js";
|
|
4
|
+
export function createBareKitRPCServer() {
|
|
5
|
+
const { IPC } = globalThis
|
|
6
|
+
.BareKit;
|
|
7
|
+
return new RPC(IPC, handleRequest);
|
|
8
|
+
}
|
|
9
|
+
export function createIPCClient(socketPath) {
|
|
10
|
+
console.log(`Connecting to IPC socket at ${socketPath}`);
|
|
11
|
+
const socket = connect(socketPath);
|
|
12
|
+
socket.on("connect", () => {
|
|
13
|
+
console.log("Connected to IPC server");
|
|
14
|
+
});
|
|
15
|
+
socket.on("error", (err) => {
|
|
16
|
+
console.error("IPC client connection error:", err);
|
|
17
|
+
});
|
|
18
|
+
return new RPC(socket, handleRequest);
|
|
19
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
export declare function handleRequest(req: RPC.IncomingRequest): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=handle-request.d.ts.map
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { requestSchema, responseSchema, } 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.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 { handleRag } from "./handlers/rag.js";
|
|
16
|
+
import { sendErrorResponse, sendStreamErrorResponse } from "../error-handlers";
|
|
17
|
+
export async function handleRequest(req) {
|
|
18
|
+
try {
|
|
19
|
+
const rawData = req.data?.toString();
|
|
20
|
+
if (!rawData) {
|
|
21
|
+
throw new Error("No data received");
|
|
22
|
+
}
|
|
23
|
+
const jsonData = JSON.parse(rawData);
|
|
24
|
+
const request = requestSchema.parse(jsonData);
|
|
25
|
+
switch (request.type) {
|
|
26
|
+
case "downloadAsset": {
|
|
27
|
+
if (request.withProgress) {
|
|
28
|
+
const stream = req.createResponseStream();
|
|
29
|
+
try {
|
|
30
|
+
const response = await handleDownloadAsset(request, (update) => {
|
|
31
|
+
const data = JSON.stringify(responseSchema.parse(update));
|
|
32
|
+
stream.write(data + "\n", "utf-8");
|
|
33
|
+
});
|
|
34
|
+
// Send final response
|
|
35
|
+
const data = JSON.stringify(responseSchema.parse(response));
|
|
36
|
+
stream.write(data + "\n", "utf-8");
|
|
37
|
+
stream.end();
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
sendStreamErrorResponse(stream, error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
try {
|
|
45
|
+
const response = await handleDownloadAsset(request);
|
|
46
|
+
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
sendErrorResponse(req, error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
case "loadModel": {
|
|
55
|
+
if (request.withProgress) {
|
|
56
|
+
const stream = req.createResponseStream();
|
|
57
|
+
try {
|
|
58
|
+
// Route to appropriate handler based on delegation
|
|
59
|
+
let response;
|
|
60
|
+
if (request.delegate) {
|
|
61
|
+
response = await handleLoadModelDelegated(request, (update) => {
|
|
62
|
+
const data = JSON.stringify(responseSchema.parse(update));
|
|
63
|
+
stream.write(data + "\n", "utf-8");
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
response = await handleLoadModel(request, (update) => {
|
|
68
|
+
const data = JSON.stringify(responseSchema.parse(update));
|
|
69
|
+
stream.write(data + "\n", "utf-8");
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Send final response
|
|
73
|
+
const data = JSON.stringify(responseSchema.parse(response));
|
|
74
|
+
stream.write(data + "\n", "utf-8");
|
|
75
|
+
stream.end();
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
sendStreamErrorResponse(stream, error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Route to appropriate handler based on delegation
|
|
83
|
+
try {
|
|
84
|
+
const handler = request.delegate
|
|
85
|
+
? handleLoadModelDelegated
|
|
86
|
+
: handleLoadModel;
|
|
87
|
+
const response = await handler(request);
|
|
88
|
+
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
sendErrorResponse(req, error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
case "completionStream": {
|
|
97
|
+
const stream = req.createResponseStream();
|
|
98
|
+
try {
|
|
99
|
+
// Check if the model is delegated and route accordingly
|
|
100
|
+
const entry = getModelEntry(request.modelId);
|
|
101
|
+
const handler = entry?.isDelegated
|
|
102
|
+
? handleCompletionStreamDelegated
|
|
103
|
+
: handleCompletionStream;
|
|
104
|
+
for await (const response of handler(request)) {
|
|
105
|
+
const validatedResponse = responseSchema.parse(response);
|
|
106
|
+
const data = JSON.stringify(validatedResponse);
|
|
107
|
+
stream.write(data + "\n", "utf-8");
|
|
108
|
+
}
|
|
109
|
+
stream.end();
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
sendStreamErrorResponse(stream, error);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case "unloadModel": {
|
|
118
|
+
const response = await handleUnloadModel(request);
|
|
119
|
+
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "transcribeStream": {
|
|
123
|
+
const stream = req.createResponseStream();
|
|
124
|
+
try {
|
|
125
|
+
for await (const response of handleTranscribeStream(request)) {
|
|
126
|
+
const validatedResponse = responseSchema.parse(response);
|
|
127
|
+
const data = JSON.stringify(validatedResponse);
|
|
128
|
+
stream.write(data + "\n", "utf-8");
|
|
129
|
+
}
|
|
130
|
+
stream.end();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
sendStreamErrorResponse(stream, error);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case "loggingStream": {
|
|
139
|
+
const stream = req.createResponseStream();
|
|
140
|
+
try {
|
|
141
|
+
for await (const response of handleLoggingStream(request)) {
|
|
142
|
+
const validatedResponse = responseSchema.parse(response);
|
|
143
|
+
const data = JSON.stringify(validatedResponse);
|
|
144
|
+
stream.write(data + "\n", "utf-8");
|
|
145
|
+
}
|
|
146
|
+
stream.end();
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
sendStreamErrorResponse(stream, error);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case "ping": {
|
|
155
|
+
const res = {
|
|
156
|
+
type: "pong",
|
|
157
|
+
number: Math.random() * 100,
|
|
158
|
+
};
|
|
159
|
+
req.reply(JSON.stringify(res), "utf-8");
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case "embed": {
|
|
163
|
+
try {
|
|
164
|
+
const response = await handleEmbed(request);
|
|
165
|
+
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
sendErrorResponse(req, error);
|
|
169
|
+
}
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case "translate": {
|
|
173
|
+
const stream = req.createResponseStream();
|
|
174
|
+
try {
|
|
175
|
+
for await (const response of handleTranslate(request)) {
|
|
176
|
+
const validatedResponse = responseSchema.parse(response);
|
|
177
|
+
const data = JSON.stringify(validatedResponse);
|
|
178
|
+
stream.write(data + "\n", "utf-8");
|
|
179
|
+
}
|
|
180
|
+
stream.end();
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
sendStreamErrorResponse(stream, error);
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case "cancel": {
|
|
188
|
+
try {
|
|
189
|
+
const response = await cancelHandler(request);
|
|
190
|
+
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
sendErrorResponse(req, error);
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case "provide": {
|
|
198
|
+
const response = await provideHandler(request);
|
|
199
|
+
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case "rag": {
|
|
203
|
+
try {
|
|
204
|
+
const response = await handleRag(request);
|
|
205
|
+
req.reply(JSON.stringify(responseSchema.parse(response)), "utf-8");
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
sendErrorResponse(req, error);
|
|
209
|
+
}
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
default: {
|
|
213
|
+
throw new Error(`Unknown request type`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
sendErrorResponse(req, error);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cancel } from "../../bare/addons/index.js";
|
|
2
|
+
import { createCancelFunction } from "./load-model/download-manager.js";
|
|
3
|
+
export async function cancelHandler(request) {
|
|
4
|
+
try {
|
|
5
|
+
switch (request.operation) {
|
|
6
|
+
case "inference":
|
|
7
|
+
await cancel({ modelId: request.modelId });
|
|
8
|
+
break;
|
|
9
|
+
case "downloadAsset":
|
|
10
|
+
const cancelDownload = createCancelFunction(request.downloadKey, request.clearCache);
|
|
11
|
+
cancelDownload();
|
|
12
|
+
break;
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
type: "cancel",
|
|
16
|
+
success: true,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.error("Error during cancellation:", error);
|
|
21
|
+
return {
|
|
22
|
+
type: "cancel",
|
|
23
|
+
success: false,
|
|
24
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|