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