@modular-prompt/driver 0.14.0 → 0.15.0
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 +58 -5
- package/dist/driver-registry/ai-service.d.ts +23 -1
- package/dist/driver-registry/ai-service.d.ts.map +1 -1
- package/dist/driver-registry/ai-service.js +44 -10
- package/dist/driver-registry/ai-service.js.map +1 -1
- package/dist/driver-registry/config-based-factory.d.ts.map +1 -1
- package/dist/driver-registry/config-based-factory.js +16 -0
- package/dist/driver-registry/config-based-factory.js.map +1 -1
- package/dist/driver-registry/factory-helper.d.ts +2 -0
- package/dist/driver-registry/factory-helper.d.ts.map +1 -1
- package/dist/driver-registry/factory-helper.js +21 -3
- package/dist/driver-registry/factory-helper.js.map +1 -1
- package/dist/driver-registry/index.d.ts +2 -2
- package/dist/driver-registry/index.d.ts.map +1 -1
- package/dist/driver-registry/index.js +1 -1
- package/dist/driver-registry/index.js.map +1 -1
- package/dist/driver-registry/registry.d.ts.map +1 -1
- package/dist/driver-registry/registry.js +3 -1
- package/dist/driver-registry/registry.js.map +1 -1
- package/dist/driver-registry/types.d.ts +8 -2
- package/dist/driver-registry/types.d.ts.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/local-inference/adapters.d.ts +66 -0
- package/dist/local-inference/adapters.d.ts.map +1 -0
- package/dist/local-inference/adapters.js +2 -0
- package/dist/local-inference/adapters.js.map +1 -0
- package/dist/local-inference/driver.d.ts +51 -0
- package/dist/local-inference/driver.d.ts.map +1 -0
- package/dist/local-inference/driver.js +309 -0
- package/dist/local-inference/driver.js.map +1 -0
- package/dist/local-inference/index.d.ts +22 -0
- package/dist/local-inference/index.d.ts.map +1 -0
- package/dist/local-inference/index.js +17 -0
- package/dist/local-inference/index.js.map +1 -0
- package/dist/local-inference/process-client.d.ts +50 -0
- package/dist/local-inference/process-client.d.ts.map +1 -0
- package/dist/local-inference/process-client.js +92 -0
- package/dist/local-inference/process-client.js.map +1 -0
- package/dist/local-inference/process-communication.d.ts +41 -0
- package/dist/local-inference/process-communication.d.ts.map +1 -0
- package/dist/{mlx-ml/process → local-inference}/process-communication.js +25 -61
- package/dist/local-inference/process-communication.js.map +1 -0
- package/dist/local-inference/process-port.d.ts +12 -0
- package/dist/local-inference/process-port.d.ts.map +1 -0
- package/dist/local-inference/process-port.js +2 -0
- package/dist/local-inference/process-port.js.map +1 -0
- package/dist/local-inference/prompt-utils.d.ts +6 -0
- package/dist/local-inference/prompt-utils.d.ts.map +1 -0
- package/dist/local-inference/prompt-utils.js +17 -0
- package/dist/local-inference/prompt-utils.js.map +1 -0
- package/dist/local-inference/protocol.d.ts +192 -0
- package/dist/local-inference/protocol.d.ts.map +1 -0
- package/dist/local-inference/protocol.js +2 -0
- package/dist/local-inference/protocol.js.map +1 -0
- package/dist/local-inference/queue-types.d.ts +54 -0
- package/dist/local-inference/queue-types.d.ts.map +1 -0
- package/dist/local-inference/queue-types.js +2 -0
- package/dist/local-inference/queue-types.js.map +1 -0
- package/dist/local-inference/request-queue.d.ts +36 -0
- package/dist/local-inference/request-queue.d.ts.map +1 -0
- package/dist/{mlx-ml/process/queue.js → local-inference/request-queue.js} +83 -56
- package/dist/local-inference/request-queue.js.map +1 -0
- package/dist/local-inference/stream-utils.d.ts +19 -0
- package/dist/local-inference/stream-utils.d.ts.map +1 -0
- package/dist/local-inference/stream-utils.js +76 -0
- package/dist/local-inference/stream-utils.js.map +1 -0
- package/dist/mlx-ml/mlx-cache-support.d.ts +23 -0
- package/dist/mlx-ml/mlx-cache-support.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-cache-support.js +45 -0
- package/dist/mlx-ml/mlx-cache-support.js.map +1 -0
- package/dist/mlx-ml/mlx-driver.d.ts +20 -59
- package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
- package/dist/mlx-ml/mlx-driver.js +86 -460
- package/dist/mlx-ml/mlx-driver.js.map +1 -1
- package/dist/mlx-ml/mlx-local-inference-adapters.d.ts +3 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.js +19 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.js.map +1 -0
- package/dist/mlx-ml/mlx-options.d.ts +19 -0
- package/dist/mlx-ml/mlx-options.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-options.js +30 -0
- package/dist/mlx-ml/mlx-options.js.map +1 -0
- package/dist/mlx-ml/process/index.d.ts +10 -8
- package/dist/mlx-ml/process/index.d.ts.map +1 -1
- package/dist/mlx-ml/process/index.js +73 -54
- package/dist/mlx-ml/process/index.js.map +1 -1
- package/dist/mlx-ml/process/model-specific.d.ts +2 -1
- package/dist/mlx-ml/process/model-specific.d.ts.map +1 -1
- package/dist/mlx-ml/process/model-specific.js.map +1 -1
- package/dist/mlx-ml/process/prompt-builder.d.ts +11 -0
- package/dist/mlx-ml/process/prompt-builder.d.ts.map +1 -0
- package/dist/mlx-ml/process/prompt-builder.js +51 -0
- package/dist/mlx-ml/process/prompt-builder.js.map +1 -0
- package/dist/mlx-ml/process/types.d.ts +15 -183
- package/dist/mlx-ml/process/types.d.ts.map +1 -1
- package/dist/mlx-ml/types.d.ts +2 -45
- package/dist/mlx-ml/types.d.ts.map +1 -1
- package/dist/models-config/index.d.ts +8 -0
- package/dist/models-config/index.d.ts.map +1 -0
- package/dist/models-config/index.js +7 -0
- package/dist/models-config/index.js.map +1 -0
- package/dist/models-config/loader.d.ts +20 -0
- package/dist/models-config/loader.d.ts.map +1 -0
- package/dist/models-config/loader.js +85 -0
- package/dist/models-config/loader.js.map +1 -0
- package/dist/models-config/paths.d.ts +7 -0
- package/dist/models-config/paths.d.ts.map +1 -0
- package/dist/models-config/paths.js +11 -0
- package/dist/models-config/paths.js.map +1 -0
- package/dist/models-config/resolve.d.ts +57 -0
- package/dist/models-config/resolve.d.ts.map +1 -0
- package/dist/models-config/resolve.js +187 -0
- package/dist/models-config/resolve.js.map +1 -0
- package/dist/models-config/types.d.ts +60 -0
- package/dist/models-config/types.d.ts.map +1 -0
- package/dist/models-config/types.js +5 -0
- package/dist/models-config/types.js.map +1 -0
- package/dist/pytorch/process/index.d.ts +35 -0
- package/dist/pytorch/process/index.d.ts.map +1 -0
- package/dist/pytorch/process/index.js +69 -0
- package/dist/pytorch/process/index.js.map +1 -0
- package/dist/pytorch/pytorch-driver.d.ts +35 -0
- package/dist/pytorch/pytorch-driver.d.ts.map +1 -0
- package/dist/pytorch/pytorch-driver.js +48 -0
- package/dist/pytorch/pytorch-driver.js.map +1 -0
- package/dist/pytorch/pytorch-local-inference-adapters.d.ts +3 -0
- package/dist/pytorch/pytorch-local-inference-adapters.d.ts.map +1 -0
- package/dist/pytorch/pytorch-local-inference-adapters.js +19 -0
- package/dist/pytorch/pytorch-local-inference-adapters.js.map +1 -0
- package/dist/pytorch/pytorch-options.d.ts +8 -0
- package/dist/pytorch/pytorch-options.d.ts.map +1 -0
- package/dist/pytorch/pytorch-options.js +21 -0
- package/dist/pytorch/pytorch-options.js.map +1 -0
- package/dist/query-logger.js +1 -1
- package/dist/query-logger.js.map +1 -1
- package/dist/runtime/check.d.ts +10 -0
- package/dist/runtime/check.d.ts.map +1 -0
- package/dist/runtime/check.js +24 -0
- package/dist/runtime/check.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/manifest-core.d.mts +27 -0
- package/dist/runtime/manifest-core.d.mts.map +1 -0
- package/dist/runtime/manifest-core.mjs +68 -0
- package/dist/runtime/manifest-core.mjs.map +1 -0
- package/dist/runtime/manifest.d.ts +18 -0
- package/dist/runtime/manifest.d.ts.map +1 -0
- package/dist/runtime/manifest.js +9 -0
- package/dist/runtime/manifest.js.map +1 -0
- package/dist/runtime/paths-core.d.mts +17 -0
- package/dist/runtime/paths-core.d.mts.map +1 -0
- package/dist/runtime/paths-core.mjs +67 -0
- package/dist/runtime/paths-core.mjs.map +1 -0
- package/dist/runtime/paths.d.ts +12 -0
- package/dist/runtime/paths.d.ts.map +1 -0
- package/dist/runtime/paths.js +17 -0
- package/dist/runtime/paths.js.map +1 -0
- package/dist/types.d.ts +11 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +10 -7
- package/scripts/download-model.js +25 -9
- package/scripts/runtime-cli.js +315 -0
- package/src/mlx-ml/python/__main__.py +43 -4
- package/src/mlx-ml/python/handlers/__init__.py +2 -1
- package/src/mlx-ml/python/handlers/completion.py +3 -27
- package/src/mlx-ml/python/handlers/{chat.py → generate.py} +33 -106
- package/src/mlx-ml/python/handlers/render.py +40 -0
- package/src/mlx-ml/python/pyproject.toml +3 -2
- package/src/mlx-ml/python/server.py +28 -8
- package/src/mlx-ml/python/utils/template_render.py +80 -0
- package/src/mlx-ml/python/utils/token_utils.py +2 -2
- package/src/mlx-ml/python/uv.lock +549 -454
- package/src/pytorch/python/__main__.py +19 -0
- package/src/pytorch/python/backends/__init__.py +3 -0
- package/src/pytorch/python/backends/base.py +84 -0
- package/src/pytorch/python/backends/transformers_lm.py +127 -0
- package/src/pytorch/python/handlers/__init__.py +6 -0
- package/src/pytorch/python/handlers/cancel.py +53 -0
- package/src/pytorch/python/handlers/capabilities.py +6 -0
- package/src/pytorch/python/handlers/completion.py +15 -0
- package/src/pytorch/python/handlers/format_test.py +70 -0
- package/src/pytorch/python/handlers/generate.py +68 -0
- package/src/pytorch/python/handlers/render.py +40 -0
- package/src/pytorch/python/handlers/tokenize.py +63 -0
- package/src/pytorch/python/pyproject.toml +36 -0
- package/src/pytorch/python/server.py +140 -0
- package/src/pytorch/python/utils/__init__.py +0 -0
- package/src/pytorch/python/utils/chat_template_constraints.py +164 -0
- package/src/pytorch/python/utils/prompt_builder.py +54 -0
- package/src/pytorch/python/utils/template_render.py +80 -0
- package/src/pytorch/python/utils/token_utils.py +376 -0
- package/src/pytorch/python/uv.lock +694 -0
- package/dist/mlx-ml/process/process-communication.d.ts +0 -45
- package/dist/mlx-ml/process/process-communication.d.ts.map +0 -1
- package/dist/mlx-ml/process/process-communication.js.map +0 -1
- package/dist/mlx-ml/process/queue.d.ts +0 -35
- package/dist/mlx-ml/process/queue.d.ts.map +0 -1
- package/dist/mlx-ml/process/queue.js.map +0 -1
- package/scripts/setup-mlx.js +0 -53
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
import type { InferenceCapabilities, InferenceCapabilitiesRequest, InferenceFormatTestRequest, InferenceFormatTestResult, InferenceRenderRequest, InferenceRenderResult, InferenceTokenizeRequest, InferenceTokenizeResult, InferenceChatRequest, InferenceCompletionRequest, InferenceGenerateRequest, InferenceCachePrefillRequest, InferenceCachePrefillResult, InferenceMessage, InferenceRequest, InferenceSamplingOptions } from './protocol.js';
|
|
3
|
+
/** 旧プロトコル互換のストリーミングリクエスト形状。
|
|
4
|
+
* options は LIP ワイヤ形式(snake_case)または mapper 通過後の Record を受け付ける。
|
|
5
|
+
* 旧 LegacyMlxRequest の MlxMlModelOptions 専用型から意図的に拡張(挙動は mapper 経由で同等)。 */
|
|
6
|
+
export interface LegacyStreamingRequest {
|
|
7
|
+
messages: InferenceMessage[];
|
|
8
|
+
prompt?: string;
|
|
9
|
+
primer?: string;
|
|
10
|
+
options?: InferenceSamplingOptions | Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export interface BaseQueueItem {
|
|
13
|
+
request: InferenceRequest | LegacyStreamingRequest;
|
|
14
|
+
expectJsonResponse?: boolean;
|
|
15
|
+
reject?: (reason: Error) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface CapabilitiesQueueItem extends BaseQueueItem {
|
|
18
|
+
request: InferenceCapabilitiesRequest;
|
|
19
|
+
resolve: (value: InferenceCapabilities) => void;
|
|
20
|
+
reject: (reason: Error) => void;
|
|
21
|
+
expectJsonResponse: true;
|
|
22
|
+
}
|
|
23
|
+
export interface FormatTestQueueItem extends BaseQueueItem {
|
|
24
|
+
request: InferenceFormatTestRequest;
|
|
25
|
+
resolve: (value: InferenceFormatTestResult) => void;
|
|
26
|
+
reject: (reason: Error) => void;
|
|
27
|
+
expectJsonResponse: true;
|
|
28
|
+
}
|
|
29
|
+
export interface RenderQueueItem extends BaseQueueItem {
|
|
30
|
+
request: InferenceRenderRequest;
|
|
31
|
+
resolve: (value: InferenceRenderResult) => void;
|
|
32
|
+
reject: (reason: Error) => void;
|
|
33
|
+
expectJsonResponse: true;
|
|
34
|
+
}
|
|
35
|
+
export interface TokenizeQueueItem extends BaseQueueItem {
|
|
36
|
+
request: InferenceTokenizeRequest;
|
|
37
|
+
resolve: (value: InferenceTokenizeResult) => void;
|
|
38
|
+
reject: (reason: Error) => void;
|
|
39
|
+
expectJsonResponse: true;
|
|
40
|
+
}
|
|
41
|
+
export interface CachePrefillQueueItem extends BaseQueueItem {
|
|
42
|
+
request: InferenceCachePrefillRequest;
|
|
43
|
+
resolve: (value: InferenceCachePrefillResult) => void;
|
|
44
|
+
reject: (reason: Error) => void;
|
|
45
|
+
expectJsonResponse: true;
|
|
46
|
+
}
|
|
47
|
+
export interface StreamingQueueItem extends BaseQueueItem {
|
|
48
|
+
request: InferenceChatRequest | InferenceCompletionRequest | InferenceGenerateRequest | LegacyStreamingRequest;
|
|
49
|
+
resolve: (value: Readable) => void;
|
|
50
|
+
reject: (reason: Error) => void;
|
|
51
|
+
expectJsonResponse?: false;
|
|
52
|
+
}
|
|
53
|
+
export type QueueItem = CapabilitiesQueueItem | FormatTestQueueItem | RenderQueueItem | TokenizeQueueItem | CachePrefillQueueItem | StreamingQueueItem;
|
|
54
|
+
//# sourceMappingURL=queue-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-types.d.ts","sourceRoot":"","sources":["../../src/local-inference/queue-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAEvB;;2EAE2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,gBAAgB,GAAG,sBAAsB,CAAC;IACnD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,OAAO,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAChD,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,OAAO,EAAE,0BAA0B,CAAC;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACpD,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,OAAO,EAAE,sBAAsB,CAAC;IAChC,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAChD,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,OAAO,EAAE,wBAAwB,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,OAAO,EAAE,4BAA4B,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;IACtD,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,OAAO,EAAE,oBAAoB,GAAG,0BAA0B,GAAG,wBAAwB,GAAG,sBAAsB,CAAC;IAC/G,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B;AAED,MAAM,MAAM,SAAS,GACjB,qBAAqB,GACrB,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,qBAAqB,GACrB,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-types.js","sourceRoot":"","sources":["../../src/local-inference/queue-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LIP JSON-RPC リクエストキュー
|
|
3
|
+
*/
|
|
4
|
+
import { Readable } from 'stream';
|
|
5
|
+
import type { InferenceCapabilities, InferenceFormatTestResult, InferenceRenderResult, InferenceTokenizeResult, InferenceCachePrefillResult, InferenceMessage, InferenceToolDefinition, InferenceSamplingOptions } from './protocol.js';
|
|
6
|
+
export interface RequestQueueCallbacks {
|
|
7
|
+
sendToProcess: (data: string) => void;
|
|
8
|
+
createNewStream: () => Readable;
|
|
9
|
+
cancelActiveStream: () => void;
|
|
10
|
+
}
|
|
11
|
+
export type SamplingOptionsMapper = (options?: unknown) => InferenceSamplingOptions | Record<string, unknown> | undefined;
|
|
12
|
+
export declare class InferenceRequestQueue {
|
|
13
|
+
private queue;
|
|
14
|
+
private isProcessing;
|
|
15
|
+
private callbacks;
|
|
16
|
+
private mapSamplingOptions;
|
|
17
|
+
constructor(callbacks: RequestQueueCallbacks, mapSamplingOptions?: SamplingOptionsMapper);
|
|
18
|
+
addCapabilitiesRequest(): Promise<InferenceCapabilities>;
|
|
19
|
+
addFormatTestRequest(messages: InferenceMessage[], options?: {
|
|
20
|
+
primer?: string;
|
|
21
|
+
}): Promise<InferenceFormatTestResult>;
|
|
22
|
+
addRenderRequest(messages: InferenceMessage[], options?: InferenceSamplingOptions & {
|
|
23
|
+
primer?: string;
|
|
24
|
+
}, tools?: InferenceToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<InferenceRenderResult>;
|
|
25
|
+
addTokenizeRequest(messages: InferenceMessage[], tools?: InferenceToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<InferenceTokenizeResult>;
|
|
26
|
+
addCachePrefillRequest(cachePath: string, messages: InferenceMessage[], baseCachePath?: string, trimToTokens?: number, prefixOffsets?: number[], prefixHashes?: string[], tools?: InferenceToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<InferenceCachePrefillResult>;
|
|
27
|
+
addCompletionRequest(prompt: string, options?: unknown, images?: string[], maxImageSize?: number): Promise<Readable>;
|
|
28
|
+
addGenerateRequest(prompt: string | number[], options?: unknown, images?: string[], maxImageSize?: number, cachePath?: string, cacheTrimTokens?: number, primer?: string): Promise<Readable>;
|
|
29
|
+
processNext(): void;
|
|
30
|
+
handleJsonResponse(jsonData: string): void;
|
|
31
|
+
onRequestCompleted(): void;
|
|
32
|
+
cancelActiveRequest(): void;
|
|
33
|
+
get length(): number;
|
|
34
|
+
rejectAll(error: Error): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=request-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-queue.d.ts","sourceRoot":"","sources":["../../src/local-inference/request-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* リクエストキューの管理とプロセッシングロジックを提供
|
|
2
|
+
* LIP JSON-RPC リクエストキュー
|
|
5
3
|
*/
|
|
6
|
-
|
|
7
|
-
export class QueueManager {
|
|
4
|
+
export class InferenceRequestQueue {
|
|
8
5
|
queue = [];
|
|
9
6
|
isProcessing = false;
|
|
10
7
|
callbacks;
|
|
11
|
-
|
|
8
|
+
mapSamplingOptions;
|
|
9
|
+
constructor(callbacks, mapSamplingOptions) {
|
|
12
10
|
this.callbacks = callbacks;
|
|
11
|
+
this.mapSamplingOptions = mapSamplingOptions ?? ((options) => options);
|
|
13
12
|
}
|
|
14
13
|
addCapabilitiesRequest() {
|
|
15
14
|
return new Promise((resolve, reject) => {
|
|
@@ -18,7 +17,7 @@ export class QueueManager {
|
|
|
18
17
|
request,
|
|
19
18
|
resolve,
|
|
20
19
|
reject,
|
|
21
|
-
expectJsonResponse: true
|
|
20
|
+
expectJsonResponse: true,
|
|
22
21
|
});
|
|
23
22
|
this.processNext();
|
|
24
23
|
});
|
|
@@ -28,22 +27,29 @@ export class QueueManager {
|
|
|
28
27
|
const request = {
|
|
29
28
|
method: 'format_test',
|
|
30
29
|
messages,
|
|
31
|
-
options
|
|
30
|
+
options,
|
|
32
31
|
};
|
|
33
32
|
this.queue.push({
|
|
34
33
|
request,
|
|
35
34
|
resolve,
|
|
36
35
|
reject,
|
|
37
|
-
expectJsonResponse: true
|
|
36
|
+
expectJsonResponse: true,
|
|
38
37
|
});
|
|
39
38
|
this.processNext();
|
|
40
39
|
});
|
|
41
40
|
}
|
|
42
|
-
|
|
41
|
+
addRenderRequest(messages, options, tools, reasoningEffort) {
|
|
43
42
|
return new Promise((resolve, reject) => {
|
|
43
|
+
const mappedOptions = options
|
|
44
|
+
? {
|
|
45
|
+
...(this.mapSamplingOptions(options) ?? {}),
|
|
46
|
+
...(options.primer ? { primer: options.primer } : {}),
|
|
47
|
+
}
|
|
48
|
+
: undefined;
|
|
44
49
|
const request = {
|
|
45
|
-
method: '
|
|
50
|
+
method: 'render',
|
|
46
51
|
messages,
|
|
52
|
+
...(mappedOptions && Object.keys(mappedOptions).length > 0 ? { options: mappedOptions } : {}),
|
|
47
53
|
...(tools && { tools }),
|
|
48
54
|
...(reasoningEffort && { reasoning_effort: reasoningEffort }),
|
|
49
55
|
};
|
|
@@ -51,35 +57,26 @@ export class QueueManager {
|
|
|
51
57
|
request,
|
|
52
58
|
resolve,
|
|
53
59
|
reject,
|
|
54
|
-
expectJsonResponse: true
|
|
60
|
+
expectJsonResponse: true,
|
|
55
61
|
});
|
|
56
62
|
this.processNext();
|
|
57
63
|
});
|
|
58
64
|
}
|
|
59
|
-
|
|
65
|
+
addTokenizeRequest(messages, tools, reasoningEffort) {
|
|
60
66
|
return new Promise((resolve, reject) => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
request,
|
|
75
|
-
resolve,
|
|
76
|
-
reject,
|
|
77
|
-
});
|
|
78
|
-
this.processNext();
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
reject(error);
|
|
82
|
-
}
|
|
67
|
+
const request = {
|
|
68
|
+
method: 'tokenize',
|
|
69
|
+
messages,
|
|
70
|
+
...(tools && { tools }),
|
|
71
|
+
...(reasoningEffort && { reasoning_effort: reasoningEffort }),
|
|
72
|
+
};
|
|
73
|
+
this.queue.push({
|
|
74
|
+
request,
|
|
75
|
+
resolve,
|
|
76
|
+
reject,
|
|
77
|
+
expectJsonResponse: true,
|
|
78
|
+
});
|
|
79
|
+
this.processNext();
|
|
83
80
|
});
|
|
84
81
|
}
|
|
85
82
|
addCachePrefillRequest(cachePath, messages, baseCachePath, trimToTokens, prefixOffsets, prefixHashes, tools, reasoningEffort) {
|
|
@@ -109,7 +106,7 @@ export class QueueManager {
|
|
|
109
106
|
const request = {
|
|
110
107
|
method: 'completion',
|
|
111
108
|
prompt,
|
|
112
|
-
options:
|
|
109
|
+
options: this.mapSamplingOptions(options),
|
|
113
110
|
...(images?.length ? { images, maxImageSize } : {}),
|
|
114
111
|
};
|
|
115
112
|
this.queue.push({
|
|
@@ -124,20 +121,42 @@ export class QueueManager {
|
|
|
124
121
|
}
|
|
125
122
|
});
|
|
126
123
|
}
|
|
124
|
+
addGenerateRequest(prompt, options, images, maxImageSize, cachePath, cacheTrimTokens, primer) {
|
|
125
|
+
return new Promise((resolve, reject) => {
|
|
126
|
+
try {
|
|
127
|
+
const request = {
|
|
128
|
+
method: 'generate',
|
|
129
|
+
prompt,
|
|
130
|
+
...(primer ? { primer } : {}),
|
|
131
|
+
options: this.mapSamplingOptions(options),
|
|
132
|
+
...(images?.length ? { images, maxImageSize } : {}),
|
|
133
|
+
...(cachePath ? { cache_path: cachePath } : {}),
|
|
134
|
+
...(cacheTrimTokens != null ? { cache_trim_tokens: cacheTrimTokens } : {}),
|
|
135
|
+
};
|
|
136
|
+
this.queue.push({
|
|
137
|
+
request,
|
|
138
|
+
resolve,
|
|
139
|
+
reject,
|
|
140
|
+
});
|
|
141
|
+
this.processNext();
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
reject(error);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
127
148
|
processNext() {
|
|
128
149
|
if (this.isProcessing || this.queue.length === 0) {
|
|
129
150
|
return;
|
|
130
151
|
}
|
|
131
152
|
this.isProcessing = true;
|
|
132
|
-
const queueItem = this.queue[0];
|
|
153
|
+
const queueItem = this.queue[0];
|
|
133
154
|
const { request, expectJsonResponse } = queueItem;
|
|
134
|
-
// ストリーミングレスポンスの場合のみcurrentStreamを設定
|
|
135
155
|
if (!expectJsonResponse) {
|
|
136
156
|
const stream = this.callbacks.createNewStream();
|
|
137
157
|
queueItem.resolve(stream);
|
|
138
|
-
this.queue.shift();
|
|
158
|
+
this.queue.shift();
|
|
139
159
|
}
|
|
140
|
-
// リクエストを送信
|
|
141
160
|
const input = JSON.stringify(request);
|
|
142
161
|
this.callbacks.sendToProcess(input + '\n');
|
|
143
162
|
}
|
|
@@ -147,8 +166,6 @@ export class QueueManager {
|
|
|
147
166
|
if (queueItem?.expectJsonResponse) {
|
|
148
167
|
try {
|
|
149
168
|
const jsonResponse = JSON.parse(jsonData);
|
|
150
|
-
// format_test has its own error field in MlxFormatTestResult — resolve if well-formed,
|
|
151
|
-
// but reject bare protocol errors (missing template_applied indicates server-side exception)
|
|
152
169
|
if (queueItem.request.method === 'format_test') {
|
|
153
170
|
if ('template_applied' in jsonResponse) {
|
|
154
171
|
queueItem.resolve(jsonResponse);
|
|
@@ -158,7 +175,18 @@ export class QueueManager {
|
|
|
158
175
|
formatted_prompt: null,
|
|
159
176
|
template_applied: false,
|
|
160
177
|
model_specific_processing: null,
|
|
161
|
-
error: jsonResponse.error || 'Malformed format_test response'
|
|
178
|
+
error: jsonResponse.error || 'Malformed format_test response',
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (queueItem.request.method === 'render') {
|
|
183
|
+
if ('formatted_prompt' in jsonResponse || jsonResponse.error) {
|
|
184
|
+
queueItem.resolve(jsonResponse);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
queueItem.resolve({
|
|
188
|
+
formatted_prompt: null,
|
|
189
|
+
error: jsonResponse.error || 'Malformed render response',
|
|
162
190
|
});
|
|
163
191
|
}
|
|
164
192
|
}
|
|
@@ -170,7 +198,7 @@ export class QueueManager {
|
|
|
170
198
|
queueItem.resolve({
|
|
171
199
|
token_ids: null,
|
|
172
200
|
token_count: 0,
|
|
173
|
-
error: jsonResponse.error || 'Malformed tokenize response'
|
|
201
|
+
error: jsonResponse.error || 'Malformed tokenize response',
|
|
174
202
|
});
|
|
175
203
|
}
|
|
176
204
|
}
|
|
@@ -189,7 +217,7 @@ export class QueueManager {
|
|
|
189
217
|
queueItem.resolve({
|
|
190
218
|
methods: [],
|
|
191
219
|
special_tokens: {},
|
|
192
|
-
features: { apply_chat_template: false }
|
|
220
|
+
features: { apply_chat_template: false },
|
|
193
221
|
});
|
|
194
222
|
}
|
|
195
223
|
else if (queueItem.request.method === 'format_test') {
|
|
@@ -197,14 +225,20 @@ export class QueueManager {
|
|
|
197
225
|
formatted_prompt: null,
|
|
198
226
|
template_applied: false,
|
|
199
227
|
model_specific_processing: null,
|
|
200
|
-
error: e instanceof Error ? e.message : 'Unknown error'
|
|
228
|
+
error: e instanceof Error ? e.message : 'Unknown error',
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else if (queueItem.request.method === 'render') {
|
|
232
|
+
queueItem.resolve({
|
|
233
|
+
formatted_prompt: null,
|
|
234
|
+
error: e instanceof Error ? e.message : 'Unknown error',
|
|
201
235
|
});
|
|
202
236
|
}
|
|
203
237
|
else if (queueItem.request.method === 'tokenize') {
|
|
204
238
|
queueItem.resolve({
|
|
205
239
|
token_ids: null,
|
|
206
240
|
token_count: 0,
|
|
207
|
-
error: e instanceof Error ? e.message : 'Unknown error'
|
|
241
|
+
error: e instanceof Error ? e.message : 'Unknown error',
|
|
208
242
|
});
|
|
209
243
|
}
|
|
210
244
|
else if (queueItem.request.method === 'cache_prefill') {
|
|
@@ -216,7 +250,7 @@ export class QueueManager {
|
|
|
216
250
|
}
|
|
217
251
|
onRequestCompleted() {
|
|
218
252
|
this.isProcessing = false;
|
|
219
|
-
this.processNext();
|
|
253
|
+
this.processNext();
|
|
220
254
|
}
|
|
221
255
|
cancelActiveRequest() {
|
|
222
256
|
if (!this.isProcessing) {
|
|
@@ -227,9 +261,6 @@ export class QueueManager {
|
|
|
227
261
|
get length() {
|
|
228
262
|
return this.queue.length;
|
|
229
263
|
}
|
|
230
|
-
get isEmpty() {
|
|
231
|
-
return this.queue.length === 0;
|
|
232
|
-
}
|
|
233
264
|
rejectAll(error) {
|
|
234
265
|
const pending = this.queue.splice(0);
|
|
235
266
|
for (const item of pending) {
|
|
@@ -237,9 +268,5 @@ export class QueueManager {
|
|
|
237
268
|
}
|
|
238
269
|
this.isProcessing = false;
|
|
239
270
|
}
|
|
240
|
-
clear() {
|
|
241
|
-
this.queue = [];
|
|
242
|
-
this.isProcessing = false;
|
|
243
|
-
}
|
|
244
271
|
}
|
|
245
|
-
//# sourceMappingURL=queue.js.map
|
|
272
|
+
//# sourceMappingURL=request-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../src/local-inference/request-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuCH,MAAM,OAAO,qBAAqB;IACxB,KAAK,GAAgB,EAAE,CAAC;IACxB,YAAY,GAAG,KAAK,CAAC;IACrB,SAAS,CAAwB;IACjC,kBAAkB,CAAwB;IAElD,YAAY,SAAgC,EAAE,kBAA0C;QACtF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAA+C,CAAC,CAAC;IACjH,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAiC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;YACzE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,kBAAkB,EAAE,IAAI;aACA,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAClB,QAA4B,EAC5B,OAA6B;QAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAA+B;gBAC1C,MAAM,EAAE,aAAa;gBACrB,QAAQ;gBACR,OAAO;aACR,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,kBAAkB,EAAE,IAAI;aACF,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CACd,QAA4B,EAC5B,OAAwD,EACxD,KAAiC,EACjC,eAA2C;QAE3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,aAAa,GAAG,OAAO;gBAC3B,CAAC,CAAC;oBACE,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC3C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtD;gBACH,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,OAAO,GAAG;gBACd,MAAM,EAAE,QAAiB;gBACzB,QAAQ;gBACR,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7F,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,eAAe,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;aAC9D,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,kBAAkB,EAAE,IAAI;aACN,CAAC,CAAC;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAChB,QAA4B,EAC5B,KAAiC,EACjC,eAA2C;QAE3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAA6B;gBACxC,MAAM,EAAE,UAAU;gBAClB,QAAQ;gBACR,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,eAAe,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;aAC9D,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,kBAAkB,EAAE,IAAI;aACJ,CAAC,CAAC;YACxB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CACpB,SAAiB,EACjB,QAA4B,EAC5B,aAAsB,EACtB,YAAqB,EACrB,aAAwB,EACxB,YAAuB,EACvB,KAAiC,EACjC,eAA2C;QAE3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAiC;gBAC5C,MAAM,EAAE,eAAe;gBACvB,UAAU,EAAE,SAAS;gBACrB,QAAQ;gBACR,GAAG,CAAC,aAAa,IAAI,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;gBACxD,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;gBAC7D,GAAG,CAAC,aAAa,IAAI,YAAY,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;gBACpG,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,eAAe,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;aAC9D,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,kBAAkB,EAAE,IAAI;aACA,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB,CAClB,MAAc,EACd,OAAiB,EACjB,MAAiB,EACjB,YAAqB;QAErB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,MAAM,OAAO,GAA+B;oBAC1C,MAAM,EAAE,YAAY;oBACpB,MAAM;oBACN,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBACzC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpD,CAAC;gBACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,OAAO;oBACP,OAAO;oBACP,MAAM;iBACe,CAAC,CAAC;gBACzB,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAChB,MAAyB,EACzB,OAAiB,EACjB,MAAiB,EACjB,YAAqB,EACrB,SAAkB,EAClB,eAAwB,EACxB,MAAe;QAEf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,MAAM,OAAO,GAA6B;oBACxC,MAAM,EAAE,UAAU;oBAClB,MAAM;oBACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;oBACzC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/C,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC3E,CAAC;gBACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBACd,OAAO;oBACP,OAAO;oBACP,MAAM;iBACe,CAAC,CAAC;gBACzB,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;QAElD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YAChD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,kBAAkB,CAAC,QAAgB;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,SAAS,EAAE,kBAAkB,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAC1C,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;wBAC/C,IAAI,kBAAkB,IAAI,YAAY,EAAE,CAAC;4BACtC,SAAiC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAC3D,CAAC;6BAAM,CAAC;4BACL,SAAiC,CAAC,OAAO,CAAC;gCACzC,gBAAgB,EAAE,IAAI;gCACtB,gBAAgB,EAAE,KAAK;gCACvB,yBAAyB,EAAE,IAAI;gCAC/B,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,gCAAgC;6BAC9D,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;wBACjD,IAAI,kBAAkB,IAAI,YAAY,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;4BAC5D,SAA6B,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBACvD,CAAC;6BAAM,CAAC;4BACL,SAA6B,CAAC,OAAO,CAAC;gCACrC,gBAAgB,EAAE,IAAI;gCACtB,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,2BAA2B;6BACzD,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBACnD,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;4BACjC,SAA+B,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBACzD,CAAC;6BAAM,CAAC;4BACL,SAA+B,CAAC,OAAO,CAAC;gCACvC,SAAS,EAAE,IAAI;gCACf,WAAW,EAAE,CAAC;gCACd,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,6BAA6B;6BAC3D,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;yBAAM,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;wBAC9B,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;oBACpD,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;wBACtD,SAAmC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC7D,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;wBACvD,SAAmC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC7D,CAAC;gBACH,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;wBAC/C,SAAmC,CAAC,OAAO,CAAC;4BAC3C,OAAO,EAAE,EAAE;4BACX,cAAc,EAAE,EAAE;4BAClB,QAAQ,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE;yBACzC,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;wBACrD,SAAiC,CAAC,OAAO,CAAC;4BACzC,gBAAgB,EAAE,IAAI;4BACtB,gBAAgB,EAAE,KAAK;4BACvB,yBAAyB,EAAE,IAAI;4BAC/B,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;yBACxD,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAChD,SAA6B,CAAC,OAAO,CAAC;4BACrC,gBAAgB,EAAE,IAAI;4BACtB,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;yBACxD,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBAClD,SAA+B,CAAC,OAAO,CAAC;4BACvC,SAAS,EAAE,IAAI;4BACf,WAAW,EAAE,CAAC;4BACd,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;yBACxD,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;wBACvD,SAAmC,CAAC,MAAM,CACzC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,KAAY;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
export interface StreamMeta {
|
|
3
|
+
prompt_tokens?: number;
|
|
4
|
+
generation_tokens?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare const META_MARKER = "\u001E__META__:";
|
|
7
|
+
export declare function extractStreamMeta(content: string): {
|
|
8
|
+
content: string;
|
|
9
|
+
meta: StreamMeta;
|
|
10
|
+
};
|
|
11
|
+
export declare function createStreamIterable(stream: Readable, isAborted?: () => boolean): {
|
|
12
|
+
iterable: AsyncIterable<string>;
|
|
13
|
+
completion: Promise<{
|
|
14
|
+
content: string;
|
|
15
|
+
meta: StreamMeta;
|
|
16
|
+
error: Error | null;
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=stream-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../src/local-inference/stream-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,WAAW,oBAAkB,CAAC;AAE3C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CASxF;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,QAAQ,EAChB,SAAS,CAAC,EAAE,MAAM,OAAO,GACxB;IACD,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CACjF,CA0DA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export const META_MARKER = '\x1e__META__:';
|
|
2
|
+
export function extractStreamMeta(content) {
|
|
3
|
+
const idx = content.lastIndexOf(META_MARKER);
|
|
4
|
+
if (idx === -1)
|
|
5
|
+
return { content, meta: {} };
|
|
6
|
+
const jsonStr = content.slice(idx + META_MARKER.length);
|
|
7
|
+
try {
|
|
8
|
+
return { content: content.slice(0, idx), meta: JSON.parse(jsonStr) };
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return { content: content.slice(0, idx), meta: {} };
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function createStreamIterable(stream, isAborted) {
|
|
15
|
+
const chunks = [];
|
|
16
|
+
let resolveCompletion;
|
|
17
|
+
let settled = false;
|
|
18
|
+
const settle = (error) => {
|
|
19
|
+
if (settled)
|
|
20
|
+
return;
|
|
21
|
+
settled = true;
|
|
22
|
+
const raw = chunks.join('');
|
|
23
|
+
const { content, meta } = extractStreamMeta(raw);
|
|
24
|
+
const aborted = isAborted?.() ?? false;
|
|
25
|
+
resolveCompletion({ content, meta, error: aborted ? null : error });
|
|
26
|
+
};
|
|
27
|
+
const completion = new Promise((resolve) => {
|
|
28
|
+
resolveCompletion = resolve;
|
|
29
|
+
});
|
|
30
|
+
const iterable = {
|
|
31
|
+
async *[Symbol.asyncIterator]() {
|
|
32
|
+
try {
|
|
33
|
+
let buffer = '';
|
|
34
|
+
let markerFound = false;
|
|
35
|
+
for await (const chunk of stream) {
|
|
36
|
+
if (isAborted?.()) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
const str = chunk.toString();
|
|
40
|
+
chunks.push(str);
|
|
41
|
+
if (markerFound)
|
|
42
|
+
continue;
|
|
43
|
+
buffer += str;
|
|
44
|
+
const markerIdx = buffer.indexOf(META_MARKER);
|
|
45
|
+
if (markerIdx !== -1) {
|
|
46
|
+
const text = buffer.slice(0, markerIdx);
|
|
47
|
+
if (text)
|
|
48
|
+
yield text;
|
|
49
|
+
markerFound = true;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const safeLen = buffer.length - (META_MARKER.length - 1);
|
|
53
|
+
if (safeLen > 0) {
|
|
54
|
+
yield buffer.slice(0, safeLen);
|
|
55
|
+
buffer = buffer.slice(safeLen);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!markerFound && buffer)
|
|
60
|
+
yield buffer;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
settle(error);
|
|
64
|
+
const aborted = isAborted?.() ?? false;
|
|
65
|
+
if (!aborted) {
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
settle(null);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
return { iterable, completion };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../src/local-inference/stream-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FormatterOptions } from '../formatter/types.js';
|
|
2
|
+
import type { InferenceMessage } from '../local-inference/protocol.js';
|
|
3
|
+
import type { LocalInferenceCacheSupport } from '../local-inference/adapters.js';
|
|
4
|
+
import type { InferenceProcessPort } from '../local-inference/process-port.js';
|
|
5
|
+
import type { PromptCacheController } from '../cache-controller.js';
|
|
6
|
+
/**
|
|
7
|
+
* MLX 向け KV キャッシュ連携を構築する。
|
|
8
|
+
* `PromptCacheController` が `MlxCacheController` でない場合は undefined(旧挙動と同様)。
|
|
9
|
+
* PyTorch 等の別バックエンド用 adapter は将来ここに並列で追加する。
|
|
10
|
+
*/
|
|
11
|
+
export declare function createMlxCacheSupport(controller: PromptCacheController): LocalInferenceCacheSupport | undefined;
|
|
12
|
+
export declare function bindMlxCacheOnCapabilitiesLoaded(cache: LocalInferenceCacheSupport, cacheBound: {
|
|
13
|
+
bound: boolean;
|
|
14
|
+
}, runtimeInfo: {
|
|
15
|
+
model_kind?: 'lm' | 'vlm';
|
|
16
|
+
}, ctx: {
|
|
17
|
+
process: InferenceProcessPort;
|
|
18
|
+
formatterOptions: FormatterOptions;
|
|
19
|
+
modelProcessor: {
|
|
20
|
+
applyChatSpecificProcessing(messages: InferenceMessage[]): InferenceMessage[];
|
|
21
|
+
};
|
|
22
|
+
}, onVlmDisabled: () => void): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=mlx-cache-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mlx-cache-support.d.ts","sourceRoot":"","sources":["../../src/mlx-ml/mlx-cache-support.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAEV,0BAA0B,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,qBAAqB,GAChC,0BAA0B,GAAG,SAAS,CA6BxC;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,0BAA0B,EACjC,UAAU,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,EAC9B,WAAW,EAAE;IAAE,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;CAAE,EAC1C,GAAG,EAAE;IACH,OAAO,EAAE,oBAAoB,CAAC;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE;QAAE,2BAA2B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAAA;KAAE,CAAC;CACnG,EACD,aAAa,EAAE,MAAM,IAAI,GACxB,OAAO,CAAC,IAAI,CAAC,CAef"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { MlxCacheController } from './mlx-cache-controller.js';
|
|
2
|
+
/**
|
|
3
|
+
* MLX 向け KV キャッシュ連携を構築する。
|
|
4
|
+
* `PromptCacheController` が `MlxCacheController` でない場合は undefined(旧挙動と同様)。
|
|
5
|
+
* PyTorch 等の別バックエンド用 adapter は将来ここに並列で追加する。
|
|
6
|
+
*/
|
|
7
|
+
export function createMlxCacheSupport(controller) {
|
|
8
|
+
if (!(controller instanceof MlxCacheController)) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const mlxCache = controller;
|
|
12
|
+
return {
|
|
13
|
+
async bind(process, formatterOptions, preprocess) {
|
|
14
|
+
await mlxCache.bind(process, formatterOptions, preprocess);
|
|
15
|
+
},
|
|
16
|
+
shouldDisableForVlm: (modelKind) => modelKind === 'vlm',
|
|
17
|
+
recordQuery: () => mlxCache.recordQuery?.(),
|
|
18
|
+
getGrowthBefore: () => mlxCache.getStats().cacheGrowthTokens,
|
|
19
|
+
getWriteTokensSince: (growthBefore) => Math.max(0, mlxCache.getStats().cacheGrowthTokens - growthBefore),
|
|
20
|
+
prepare: (params) => mlxCache.prepare(params),
|
|
21
|
+
readTokenCount: (cachePath) => mlxCache.readCacheTokenCount(cachePath),
|
|
22
|
+
recordPromptTokens: (promptTokens, cacheTokensUsed) => {
|
|
23
|
+
mlxCache.recordPromptTokens(promptTokens, cacheTokensUsed);
|
|
24
|
+
},
|
|
25
|
+
logStats: () => {
|
|
26
|
+
// MlxDriver.close() で QueryLogger 経由のログを行う
|
|
27
|
+
},
|
|
28
|
+
close: () => mlxCache.close(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function bindMlxCacheOnCapabilitiesLoaded(cache, cacheBound, runtimeInfo, ctx, onVlmDisabled) {
|
|
32
|
+
if (cacheBound.bound) {
|
|
33
|
+
return Promise.resolve();
|
|
34
|
+
}
|
|
35
|
+
if (cache.shouldDisableForVlm(runtimeInfo.model_kind)) {
|
|
36
|
+
onVlmDisabled();
|
|
37
|
+
return Promise.resolve();
|
|
38
|
+
}
|
|
39
|
+
return cache
|
|
40
|
+
.bind(ctx.process, ctx.formatterOptions, (msgs) => ctx.modelProcessor.applyChatSpecificProcessing(msgs))
|
|
41
|
+
.then(() => {
|
|
42
|
+
cacheBound.bound = true;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=mlx-cache-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mlx-cache-support.js","sourceRoot":"","sources":["../../src/mlx-ml/mlx-cache-support.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAiC;IAEjC,IAAI,CAAC,CAAC,UAAU,YAAY,kBAAkB,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC;IAC5B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU;YAC9C,MAAM,QAAQ,CAAC,IAAI,CACjB,OAAoD,EACpD,gBAAgB,EAChB,UAAU,CACX,CAAC;QACJ,CAAC;QACD,mBAAmB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK;QACvD,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE;QAC3C,eAAe,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,iBAAiB;QAC5D,mBAAmB,EAAE,CAAC,YAAY,EAAE,EAAE,CACpC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,iBAAiB,GAAG,YAAY,CAAC;QACnE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAgC;QAC5E,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,CAAC;QACtE,kBAAkB,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE;YACpD,QAAQ,CAAC,kBAAkB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAC7D,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,2CAA2C;QAC7C,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,KAAiC,EACjC,UAA8B,EAC9B,WAA0C,EAC1C,GAIC,EACD,aAAyB;IAEzB,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,aAAa,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK;SACT,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAChD,GAAG,CAAC,cAAc,CAAC,2BAA2B,CAAC,IAAI,CAAC,CACrD;SACA,IAAI,CAAC,GAAG,EAAE;QACT,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC"}
|