@modular-prompt/driver 0.13.5 → 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.
Files changed (213) hide show
  1. package/README.md +117 -4
  2. package/dist/driver-registry/ai-service.d.ts +23 -1
  3. package/dist/driver-registry/ai-service.d.ts.map +1 -1
  4. package/dist/driver-registry/ai-service.js +44 -10
  5. package/dist/driver-registry/ai-service.js.map +1 -1
  6. package/dist/driver-registry/config-based-factory.d.ts.map +1 -1
  7. package/dist/driver-registry/config-based-factory.js +16 -0
  8. package/dist/driver-registry/config-based-factory.js.map +1 -1
  9. package/dist/driver-registry/factory-helper.d.ts +2 -0
  10. package/dist/driver-registry/factory-helper.d.ts.map +1 -1
  11. package/dist/driver-registry/factory-helper.js +21 -3
  12. package/dist/driver-registry/factory-helper.js.map +1 -1
  13. package/dist/driver-registry/index.d.ts +2 -2
  14. package/dist/driver-registry/index.d.ts.map +1 -1
  15. package/dist/driver-registry/index.js +1 -1
  16. package/dist/driver-registry/index.js.map +1 -1
  17. package/dist/driver-registry/registry.d.ts.map +1 -1
  18. package/dist/driver-registry/registry.js +3 -1
  19. package/dist/driver-registry/registry.js.map +1 -1
  20. package/dist/driver-registry/types.d.ts +8 -2
  21. package/dist/driver-registry/types.d.ts.map +1 -1
  22. package/dist/index.d.ts +11 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +11 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/local-inference/adapters.d.ts +66 -0
  27. package/dist/local-inference/adapters.d.ts.map +1 -0
  28. package/dist/local-inference/adapters.js +2 -0
  29. package/dist/local-inference/adapters.js.map +1 -0
  30. package/dist/local-inference/driver.d.ts +51 -0
  31. package/dist/local-inference/driver.d.ts.map +1 -0
  32. package/dist/local-inference/driver.js +309 -0
  33. package/dist/local-inference/driver.js.map +1 -0
  34. package/dist/local-inference/index.d.ts +22 -0
  35. package/dist/local-inference/index.d.ts.map +1 -0
  36. package/dist/local-inference/index.js +17 -0
  37. package/dist/local-inference/index.js.map +1 -0
  38. package/dist/local-inference/process-client.d.ts +50 -0
  39. package/dist/local-inference/process-client.d.ts.map +1 -0
  40. package/dist/local-inference/process-client.js +92 -0
  41. package/dist/local-inference/process-client.js.map +1 -0
  42. package/dist/local-inference/process-communication.d.ts +41 -0
  43. package/dist/local-inference/process-communication.d.ts.map +1 -0
  44. package/dist/{mlx-ml/process → local-inference}/process-communication.js +40 -47
  45. package/dist/local-inference/process-communication.js.map +1 -0
  46. package/dist/local-inference/process-port.d.ts +12 -0
  47. package/dist/local-inference/process-port.d.ts.map +1 -0
  48. package/dist/local-inference/process-port.js +2 -0
  49. package/dist/local-inference/process-port.js.map +1 -0
  50. package/dist/local-inference/prompt-utils.d.ts +6 -0
  51. package/dist/local-inference/prompt-utils.d.ts.map +1 -0
  52. package/dist/local-inference/prompt-utils.js +17 -0
  53. package/dist/local-inference/prompt-utils.js.map +1 -0
  54. package/dist/local-inference/protocol.d.ts +192 -0
  55. package/dist/local-inference/protocol.d.ts.map +1 -0
  56. package/dist/local-inference/protocol.js +2 -0
  57. package/dist/local-inference/protocol.js.map +1 -0
  58. package/dist/local-inference/queue-types.d.ts +54 -0
  59. package/dist/local-inference/queue-types.d.ts.map +1 -0
  60. package/dist/local-inference/queue-types.js +2 -0
  61. package/dist/local-inference/queue-types.js.map +1 -0
  62. package/dist/local-inference/request-queue.d.ts +36 -0
  63. package/dist/local-inference/request-queue.d.ts.map +1 -0
  64. package/dist/{mlx-ml/process/queue.js → local-inference/request-queue.js} +89 -56
  65. package/dist/local-inference/request-queue.js.map +1 -0
  66. package/dist/local-inference/stream-utils.d.ts +19 -0
  67. package/dist/local-inference/stream-utils.d.ts.map +1 -0
  68. package/dist/local-inference/stream-utils.js +76 -0
  69. package/dist/local-inference/stream-utils.js.map +1 -0
  70. package/dist/mlx-ml/mlx-cache-support.d.ts +23 -0
  71. package/dist/mlx-ml/mlx-cache-support.d.ts.map +1 -0
  72. package/dist/mlx-ml/mlx-cache-support.js +45 -0
  73. package/dist/mlx-ml/mlx-cache-support.js.map +1 -0
  74. package/dist/mlx-ml/mlx-driver.d.ts +20 -59
  75. package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
  76. package/dist/mlx-ml/mlx-driver.js +86 -415
  77. package/dist/mlx-ml/mlx-driver.js.map +1 -1
  78. package/dist/mlx-ml/mlx-local-inference-adapters.d.ts +3 -0
  79. package/dist/mlx-ml/mlx-local-inference-adapters.d.ts.map +1 -0
  80. package/dist/mlx-ml/mlx-local-inference-adapters.js +19 -0
  81. package/dist/mlx-ml/mlx-local-inference-adapters.js.map +1 -0
  82. package/dist/mlx-ml/mlx-options.d.ts +19 -0
  83. package/dist/mlx-ml/mlx-options.d.ts.map +1 -0
  84. package/dist/mlx-ml/mlx-options.js +30 -0
  85. package/dist/mlx-ml/mlx-options.js.map +1 -0
  86. package/dist/mlx-ml/process/index.d.ts +11 -8
  87. package/dist/mlx-ml/process/index.d.ts.map +1 -1
  88. package/dist/mlx-ml/process/index.js +75 -52
  89. package/dist/mlx-ml/process/index.js.map +1 -1
  90. package/dist/mlx-ml/process/model-specific.d.ts +2 -1
  91. package/dist/mlx-ml/process/model-specific.d.ts.map +1 -1
  92. package/dist/mlx-ml/process/model-specific.js.map +1 -1
  93. package/dist/mlx-ml/process/prompt-builder.d.ts +11 -0
  94. package/dist/mlx-ml/process/prompt-builder.d.ts.map +1 -0
  95. package/dist/mlx-ml/process/prompt-builder.js +51 -0
  96. package/dist/mlx-ml/process/prompt-builder.js.map +1 -0
  97. package/dist/mlx-ml/process/types.d.ts +15 -183
  98. package/dist/mlx-ml/process/types.d.ts.map +1 -1
  99. package/dist/mlx-ml/tool-call-parser/tool-formatter.js +2 -2
  100. package/dist/mlx-ml/tool-call-parser/tool-formatter.js.map +1 -1
  101. package/dist/mlx-ml/types.d.ts +2 -45
  102. package/dist/mlx-ml/types.d.ts.map +1 -1
  103. package/dist/models-config/index.d.ts +8 -0
  104. package/dist/models-config/index.d.ts.map +1 -0
  105. package/dist/models-config/index.js +7 -0
  106. package/dist/models-config/index.js.map +1 -0
  107. package/dist/models-config/loader.d.ts +20 -0
  108. package/dist/models-config/loader.d.ts.map +1 -0
  109. package/dist/models-config/loader.js +85 -0
  110. package/dist/models-config/loader.js.map +1 -0
  111. package/dist/models-config/paths.d.ts +7 -0
  112. package/dist/models-config/paths.d.ts.map +1 -0
  113. package/dist/models-config/paths.js +11 -0
  114. package/dist/models-config/paths.js.map +1 -0
  115. package/dist/models-config/resolve.d.ts +57 -0
  116. package/dist/models-config/resolve.d.ts.map +1 -0
  117. package/dist/models-config/resolve.js +187 -0
  118. package/dist/models-config/resolve.js.map +1 -0
  119. package/dist/models-config/types.d.ts +60 -0
  120. package/dist/models-config/types.d.ts.map +1 -0
  121. package/dist/models-config/types.js +5 -0
  122. package/dist/models-config/types.js.map +1 -0
  123. package/dist/pytorch/process/index.d.ts +35 -0
  124. package/dist/pytorch/process/index.d.ts.map +1 -0
  125. package/dist/pytorch/process/index.js +69 -0
  126. package/dist/pytorch/process/index.js.map +1 -0
  127. package/dist/pytorch/pytorch-driver.d.ts +35 -0
  128. package/dist/pytorch/pytorch-driver.d.ts.map +1 -0
  129. package/dist/pytorch/pytorch-driver.js +48 -0
  130. package/dist/pytorch/pytorch-driver.js.map +1 -0
  131. package/dist/pytorch/pytorch-local-inference-adapters.d.ts +3 -0
  132. package/dist/pytorch/pytorch-local-inference-adapters.d.ts.map +1 -0
  133. package/dist/pytorch/pytorch-local-inference-adapters.js +19 -0
  134. package/dist/pytorch/pytorch-local-inference-adapters.js.map +1 -0
  135. package/dist/pytorch/pytorch-options.d.ts +8 -0
  136. package/dist/pytorch/pytorch-options.d.ts.map +1 -0
  137. package/dist/pytorch/pytorch-options.js +21 -0
  138. package/dist/pytorch/pytorch-options.js.map +1 -0
  139. package/dist/query-logger.js +1 -1
  140. package/dist/query-logger.js.map +1 -1
  141. package/dist/query-utils.d.ts +29 -0
  142. package/dist/query-utils.d.ts.map +1 -0
  143. package/dist/query-utils.js +61 -0
  144. package/dist/query-utils.js.map +1 -0
  145. package/dist/runtime/check.d.ts +10 -0
  146. package/dist/runtime/check.d.ts.map +1 -0
  147. package/dist/runtime/check.js +24 -0
  148. package/dist/runtime/check.js.map +1 -0
  149. package/dist/runtime/index.d.ts +4 -0
  150. package/dist/runtime/index.d.ts.map +1 -0
  151. package/dist/runtime/index.js +4 -0
  152. package/dist/runtime/index.js.map +1 -0
  153. package/dist/runtime/manifest-core.d.mts +27 -0
  154. package/dist/runtime/manifest-core.d.mts.map +1 -0
  155. package/dist/runtime/manifest-core.mjs +68 -0
  156. package/dist/runtime/manifest-core.mjs.map +1 -0
  157. package/dist/runtime/manifest.d.ts +18 -0
  158. package/dist/runtime/manifest.d.ts.map +1 -0
  159. package/dist/runtime/manifest.js +9 -0
  160. package/dist/runtime/manifest.js.map +1 -0
  161. package/dist/runtime/paths-core.d.mts +17 -0
  162. package/dist/runtime/paths-core.d.mts.map +1 -0
  163. package/dist/runtime/paths-core.mjs +67 -0
  164. package/dist/runtime/paths-core.mjs.map +1 -0
  165. package/dist/runtime/paths.d.ts +12 -0
  166. package/dist/runtime/paths.d.ts.map +1 -0
  167. package/dist/runtime/paths.js +17 -0
  168. package/dist/runtime/paths.js.map +1 -0
  169. package/dist/types.d.ts +20 -1
  170. package/dist/types.d.ts.map +1 -1
  171. package/dist/types.js.map +1 -1
  172. package/package.json +8 -5
  173. package/scripts/download-model.js +25 -9
  174. package/scripts/runtime-cli.js +315 -0
  175. package/skills/driver-usage/SKILL.md +56 -1
  176. package/src/mlx-ml/python/__main__.py +43 -4
  177. package/src/mlx-ml/python/handlers/__init__.py +2 -1
  178. package/src/mlx-ml/python/handlers/cancel.py +53 -0
  179. package/src/mlx-ml/python/handlers/completion.py +3 -24
  180. package/src/mlx-ml/python/handlers/{chat.py → generate.py} +36 -106
  181. package/src/mlx-ml/python/handlers/render.py +40 -0
  182. package/src/mlx-ml/python/pyproject.toml +3 -2
  183. package/src/mlx-ml/python/server.py +35 -8
  184. package/src/mlx-ml/python/utils/template_render.py +80 -0
  185. package/src/mlx-ml/python/utils/token_utils.py +2 -2
  186. package/src/mlx-ml/python/uv.lock +549 -454
  187. package/src/pytorch/python/__main__.py +19 -0
  188. package/src/pytorch/python/backends/__init__.py +3 -0
  189. package/src/pytorch/python/backends/base.py +84 -0
  190. package/src/pytorch/python/backends/transformers_lm.py +127 -0
  191. package/src/pytorch/python/handlers/__init__.py +6 -0
  192. package/src/pytorch/python/handlers/cancel.py +53 -0
  193. package/src/pytorch/python/handlers/capabilities.py +6 -0
  194. package/src/pytorch/python/handlers/completion.py +15 -0
  195. package/src/pytorch/python/handlers/format_test.py +70 -0
  196. package/src/pytorch/python/handlers/generate.py +68 -0
  197. package/src/pytorch/python/handlers/render.py +40 -0
  198. package/src/pytorch/python/handlers/tokenize.py +63 -0
  199. package/src/pytorch/python/pyproject.toml +36 -0
  200. package/src/pytorch/python/server.py +140 -0
  201. package/src/pytorch/python/utils/__init__.py +0 -0
  202. package/src/pytorch/python/utils/chat_template_constraints.py +164 -0
  203. package/src/pytorch/python/utils/prompt_builder.py +54 -0
  204. package/src/pytorch/python/utils/template_render.py +80 -0
  205. package/src/pytorch/python/utils/token_utils.py +376 -0
  206. package/src/pytorch/python/uv.lock +694 -0
  207. package/dist/mlx-ml/process/process-communication.d.ts +0 -37
  208. package/dist/mlx-ml/process/process-communication.d.ts.map +0 -1
  209. package/dist/mlx-ml/process/process-communication.js.map +0 -1
  210. package/dist/mlx-ml/process/queue.d.ts +0 -33
  211. package/dist/mlx-ml/process/queue.d.ts.map +0 -1
  212. package/dist/mlx-ml/process/queue.js.map +0 -1
  213. package/scripts/setup-mlx.js +0 -53
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Local Inference Protocol プロセスクライアント
3
+ *
4
+ * stdio JSON-RPC 通信とリクエストキューを統合する。
5
+ */
6
+ import { Readable } from 'stream';
7
+ import type { RuntimeProfile } from '../runtime/index.js';
8
+ import type { InferenceCapabilities, InferenceFormatTestResult, InferenceRenderResult, InferenceTokenizeResult, InferenceCachePrefillResult, InferenceMessage, InferenceToolDefinition, InferenceSamplingOptions } from './protocol.js';
9
+ import { type SamplingOptionsMapper } from './request-queue.js';
10
+ export interface InferenceProcessClientConfig {
11
+ modelName: string;
12
+ /** uv --project に渡す Python プロジェクトディレクトリ */
13
+ pythonProjectDir: string;
14
+ /** UV_PROJECT_ENVIRONMENT に設定する venv パス */
15
+ venvPath: string;
16
+ /** 指定時は起動前に runtime venv の存在を確認する */
17
+ runtimeProfile?: RuntimeProfile;
18
+ extraSpawnArgs?: string[];
19
+ extraEnv?: Record<string, string>;
20
+ loggerPrefix?: string;
21
+ mapSamplingOptions?: SamplingOptionsMapper;
22
+ processExitErrorMessage?: (code: number | null, signal: string | null) => string;
23
+ }
24
+ export declare class InferenceProcessClient {
25
+ readonly modelName: string;
26
+ private requestQueue;
27
+ private processComm;
28
+ constructor(config: InferenceProcessClientConfig);
29
+ ensureInitialized(): Promise<void>;
30
+ getCapabilities(): Promise<InferenceCapabilities>;
31
+ formatTest(messages: InferenceMessage[], options?: {
32
+ primer?: string;
33
+ }): Promise<InferenceFormatTestResult>;
34
+ render(messages: InferenceMessage[], options?: InferenceSamplingOptions & {
35
+ primer?: string;
36
+ }, tools?: InferenceToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<InferenceRenderResult>;
37
+ tokenize(messages: InferenceMessage[], tools?: InferenceToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<InferenceTokenizeResult>;
38
+ cachePrefill(cachePath: string, messages: InferenceMessage[], baseCachePath?: string, trimToTokens?: number, prefixOffsets?: number[], prefixHashes?: string[], tools?: InferenceToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<InferenceCachePrefillResult>;
39
+ completion(prompt: string, options?: unknown, images?: string[], maxImageSize?: number): Promise<Readable>;
40
+ generate(prompt: string | number[], options?: unknown, images?: string[], maxImageSize?: number, cachePath?: string, cacheTrimTokens?: number, primer?: string): Promise<Readable>;
41
+ exit(): Promise<void>;
42
+ cancelActiveRequest(): void;
43
+ getStatus(): {
44
+ modelName: string;
45
+ queueLength: number;
46
+ isStreamingActive: boolean;
47
+ isJsonBuffering: boolean;
48
+ };
49
+ }
50
+ //# sourceMappingURL=process-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-client.d.ts","sourceRoot":"","sources":["../../src/local-inference/process-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Local Inference Protocol プロセスクライアント
3
+ *
4
+ * stdio JSON-RPC 通信とリクエストキューを統合する。
5
+ */
6
+ import { Logger } from '@modular-prompt/utils';
7
+ import { assertRuntimeReady } from '../runtime/index.js';
8
+ import { ProcessCommunication, } from './process-communication.js';
9
+ import { InferenceRequestQueue, } from './request-queue.js';
10
+ export class InferenceProcessClient {
11
+ modelName;
12
+ requestQueue;
13
+ processComm;
14
+ constructor(config) {
15
+ this.modelName = config.modelName;
16
+ if (config.runtimeProfile) {
17
+ assertRuntimeReady(config.runtimeProfile);
18
+ }
19
+ const logger = new Logger({
20
+ prefix: config.loggerPrefix ?? 'LIP',
21
+ context: 'process',
22
+ });
23
+ // processCallbacks は this.requestQueue 代入前に定義するが、
24
+ // コールバックは子プロセスの stdout/exit など非同期イベント時のみ呼ばれるため安全。
25
+ const processCallbacks = {
26
+ onJsonResponse: (jsonData) => this.requestQueue.handleJsonResponse(jsonData),
27
+ onRequestCompleted: () => this.requestQueue.onRequestCompleted(),
28
+ onProcessExit: (code, signal) => {
29
+ if (code !== 0) {
30
+ const message = config.processExitErrorMessage?.(code, signal) ??
31
+ `Inference process exited unexpectedly (code=${code}, signal=${signal})`;
32
+ logger.error(message);
33
+ this.requestQueue.rejectAll(new Error(message));
34
+ }
35
+ },
36
+ };
37
+ const queueCallbacks = {
38
+ sendToProcess: (data) => this.processComm.sendToProcess(data),
39
+ createNewStream: () => this.processComm.createNewStream(),
40
+ cancelActiveStream: () => this.processComm.cancelActiveStream(),
41
+ };
42
+ this.processComm = new ProcessCommunication({
43
+ pythonProjectDir: config.pythonProjectDir,
44
+ venvPath: config.venvPath,
45
+ modelName: config.modelName,
46
+ extraArgs: config.extraSpawnArgs,
47
+ extraEnv: config.extraEnv,
48
+ loggerPrefix: config.loggerPrefix,
49
+ processExitErrorMessage: config.processExitErrorMessage,
50
+ }, processCallbacks);
51
+ this.requestQueue = new InferenceRequestQueue(queueCallbacks, config.mapSamplingOptions);
52
+ }
53
+ async ensureInitialized() {
54
+ // 互換性のため維持
55
+ }
56
+ async getCapabilities() {
57
+ return this.requestQueue.addCapabilitiesRequest();
58
+ }
59
+ async formatTest(messages, options) {
60
+ return this.requestQueue.addFormatTestRequest(messages, options);
61
+ }
62
+ async render(messages, options, tools, reasoningEffort) {
63
+ return this.requestQueue.addRenderRequest(messages, options, tools, reasoningEffort);
64
+ }
65
+ async tokenize(messages, tools, reasoningEffort) {
66
+ return this.requestQueue.addTokenizeRequest(messages, tools, reasoningEffort);
67
+ }
68
+ async cachePrefill(cachePath, messages, baseCachePath, trimToTokens, prefixOffsets, prefixHashes, tools, reasoningEffort) {
69
+ return this.requestQueue.addCachePrefillRequest(cachePath, messages, baseCachePath, trimToTokens, prefixOffsets, prefixHashes, tools, reasoningEffort);
70
+ }
71
+ async completion(prompt, options, images, maxImageSize) {
72
+ return this.requestQueue.addCompletionRequest(prompt, options, images, maxImageSize);
73
+ }
74
+ async generate(prompt, options, images, maxImageSize, cachePath, cacheTrimTokens, primer) {
75
+ return this.requestQueue.addGenerateRequest(prompt, options, images, maxImageSize, cachePath, cacheTrimTokens, primer);
76
+ }
77
+ async exit() {
78
+ await this.processComm.exit();
79
+ }
80
+ cancelActiveRequest() {
81
+ this.requestQueue.cancelActiveRequest();
82
+ }
83
+ getStatus() {
84
+ return {
85
+ modelName: this.modelName,
86
+ queueLength: this.requestQueue.length,
87
+ isStreamingActive: this.processComm.isStreamingActive(),
88
+ isJsonBuffering: this.processComm.isJsonBuffering(),
89
+ };
90
+ }
91
+ }
92
+ //# sourceMappingURL=process-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-client.js","sourceRoot":"","sources":["../../src/local-inference/process-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Thin Python 推論プロセスとの stdio 通信
3
+ */
4
+ import { Readable } from 'stream';
5
+ export interface ProcessCommunicationCallbacks {
6
+ onJsonResponse: (jsonData: string) => void;
7
+ onRequestCompleted: () => void;
8
+ onProcessExit: (code: number | null, signal: string | null) => void;
9
+ }
10
+ export interface ProcessCommunicationConfig {
11
+ /** uv --project に渡す Python プロジェクトディレクトリ */
12
+ pythonProjectDir: string;
13
+ /** UV_PROJECT_ENVIRONMENT に設定する venv パス */
14
+ venvPath: string;
15
+ modelName: string;
16
+ /** `__main__.py` と modelName の後に付与する追加引数 */
17
+ extraArgs?: string[];
18
+ /** 子プロセス spawn 時にマージする追加環境変数 */
19
+ extraEnv?: Record<string, string>;
20
+ loggerPrefix?: string;
21
+ loggerContext?: string;
22
+ processExitErrorMessage?: (code: number | null, signal: string | null) => string;
23
+ }
24
+ export declare class ProcessCommunication {
25
+ private process;
26
+ private decoder;
27
+ private currentStream;
28
+ private jsonBuffer;
29
+ private draining;
30
+ private callbacks;
31
+ private readonly exitErrorMessage;
32
+ constructor(config: ProcessCommunicationConfig, callbacks: ProcessCommunicationCallbacks);
33
+ private processData;
34
+ createNewStream(): Readable;
35
+ cancelActiveStream(): void;
36
+ sendToProcess(data: string): void;
37
+ isStreamingActive(): boolean;
38
+ isJsonBuffering(): boolean;
39
+ exit(): Promise<void>;
40
+ }
41
+ //# sourceMappingURL=process-communication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-communication.d.ts","sourceRoot":"","sources":["../../src/local-inference/process-communication.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,MAAM,WAAW,6BAA6B;IAC5C,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,0BAA0B;IACzC,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;CAClF;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyD;gBAE9E,MAAM,EAAE,0BAA0B,EAAE,SAAS,EAAE,6BAA6B;IAoDxF,OAAO,CAAC,WAAW;IAwCnB,eAAe,IAAI,QAAQ;IAO3B,kBAAkB,IAAI,IAAI;IAc1B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC,iBAAiB,IAAI,OAAO;IAI5B,eAAe,IAAI,OAAO;IAIpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAe5B"}
@@ -1,52 +1,45 @@
1
1
  /**
2
- * MLX Driver プロセス通信管理
3
- *
4
- * Pythonプロセスとの通信、データの送受信、ストリーミング処理を管理
2
+ * Thin Python 推論プロセスとの stdio 通信
5
3
  */
6
4
  import { spawn } from 'child_process';
7
5
  import { Readable } from 'stream';
8
6
  import { StringDecoder } from 'string_decoder';
9
- import path from "path";
10
- import { fileURLToPath } from "url";
11
7
  import { Logger } from '@modular-prompt/utils';
12
- const logger = new Logger({ prefix: 'MLX', context: 'process' });
13
- // Get the mlx-ml/python directory
14
- // From dist/mlx-ml/process/ -> go up 3 levels to package root, then to src/mlx-ml/python
15
- const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', '..' // dist/mlx-ml/process -> dist/mlx-ml -> dist -> package root
16
- );
17
- const mlxDriverDir = path.join(packageRoot, 'src', 'mlx-ml', 'python');
18
8
  export class ProcessCommunication {
19
9
  process;
20
10
  decoder;
21
11
  currentStream = null;
22
12
  jsonBuffer = '';
13
+ draining = false;
23
14
  callbacks;
24
- constructor(modelName, callbacks, options) {
15
+ exitErrorMessage;
16
+ constructor(config, callbacks) {
25
17
  this.callbacks = callbacks;
26
18
  this.decoder = new StringDecoder('utf8');
19
+ this.exitErrorMessage =
20
+ config.processExitErrorMessage ??
21
+ ((code, signal) => `Inference process exited unexpectedly (code=${code}, signal=${signal})`);
22
+ const logger = new Logger({
23
+ prefix: config.loggerPrefix ?? 'LIP',
24
+ context: config.loggerContext ?? 'process',
25
+ });
27
26
  const args = [
28
27
  '--project',
29
- mlxDriverDir,
28
+ config.pythonProjectDir,
30
29
  'run',
31
30
  'python',
32
31
  '__main__.py',
33
- modelName
32
+ config.modelName,
33
+ ...(config.extraArgs ?? []),
34
34
  ];
35
- if (options?.textOnly) {
36
- args.push('--text-only');
37
- }
38
- if (options?.drafterModel) {
39
- args.push('--drafter', options.drafterModel);
40
- }
41
- if (options?.draftBlockSize !== undefined) {
42
- args.push('--draft-block-size', options.draftBlockSize.toString());
43
- }
44
35
  this.process = spawn('uv', args, {
45
- cwd: mlxDriverDir
36
+ cwd: config.pythonProjectDir,
37
+ env: {
38
+ ...process.env,
39
+ UV_PROJECT_ENVIRONMENT: config.venvPath,
40
+ ...config.extraEnv,
41
+ },
46
42
  });
47
- this.setupProcessHandlers();
48
- }
49
- setupProcessHandlers() {
50
43
  this.process.stderr.on('data', (data) => {
51
44
  logger.debug(data.toString());
52
45
  });
@@ -58,50 +51,41 @@ export class ProcessCommunication {
58
51
  });
59
52
  this.process.on('exit', (code, signal) => {
60
53
  if (this.currentStream) {
61
- this.currentStream.destroy(new Error(`MLX process exited unexpectedly (code=${code}, signal=${signal})`));
54
+ this.currentStream.destroy(new Error(this.exitErrorMessage(code, signal)));
62
55
  this.currentStream = null;
63
56
  }
64
57
  this.callbacks.onProcessExit(code, signal);
65
58
  });
66
59
  }
67
- /**
68
- * stdoutから受信したデータを処理する
69
- * null文字をレスポンス区切りとして解釈し、
70
- * 1つのdataチャンクに複数のレスポンスが含まれる場合も正しく処理する
71
- */
72
60
  processData(data) {
73
61
  let remaining = data;
74
62
  while (remaining.length > 0) {
75
63
  const nullIndex = remaining.indexOf('\0');
76
64
  if (nullIndex !== -1) {
77
- // null文字が見つかった場合、レスポンス終了
78
65
  const chunk = this.decoder.write(remaining.slice(0, nullIndex));
79
66
  this.decoder = new StringDecoder('utf8');
80
67
  if (this.currentStream) {
81
- // ストリーミングレスポンスの場合
82
68
  this.currentStream.push(chunk);
83
- this.currentStream.push(null); // ストリーム終了
69
+ this.currentStream.push(null);
84
70
  this.currentStream = null;
85
71
  }
86
- else {
87
- // JSONレスポンスの場合
72
+ else if (!this.draining) {
88
73
  this.jsonBuffer += chunk;
89
74
  this.callbacks.onJsonResponse(this.jsonBuffer);
90
75
  this.jsonBuffer = '';
91
76
  }
92
77
  this.callbacks.onRequestCompleted();
93
- // null文字以降の残りデータを続けて処理
78
+ if (this.draining) {
79
+ this.draining = false;
80
+ }
94
81
  remaining = remaining.slice(nullIndex + 1);
95
82
  }
96
83
  else {
97
- // null文字がない場合、データを蓄積
98
84
  const chunk = this.decoder.write(remaining);
99
85
  if (this.currentStream) {
100
- // ストリーミング中
101
86
  this.currentStream.push(chunk);
102
87
  }
103
- else {
104
- // JSONレスポンス蓄積中
88
+ else if (!this.draining) {
105
89
  this.jsonBuffer += chunk;
106
90
  }
107
91
  break;
@@ -110,10 +94,21 @@ export class ProcessCommunication {
110
94
  }
111
95
  createNewStream() {
112
96
  this.currentStream = new Readable({
113
- read() { } // 空のreadメソッド
97
+ read() { },
114
98
  });
115
99
  return this.currentStream;
116
100
  }
101
+ cancelActiveStream() {
102
+ if (!this.currentStream && !this.draining) {
103
+ return;
104
+ }
105
+ if (this.currentStream) {
106
+ this.currentStream.destroy();
107
+ this.currentStream = null;
108
+ }
109
+ this.draining = true;
110
+ this.sendToProcess(JSON.stringify({ method: 'cancel' }) + '\n');
111
+ }
117
112
  sendToProcess(data) {
118
113
  this.process.stdin.write(data);
119
114
  }
@@ -126,15 +121,13 @@ export class ProcessCommunication {
126
121
  async exit() {
127
122
  return new Promise((resolve) => {
128
123
  const timeout = setTimeout(() => {
129
- // タイムアウト後は強制終了
130
124
  this.process.kill('SIGTERM');
131
125
  resolve();
132
- }, 5000); // 5秒でタイムアウト
126
+ }, 5000);
133
127
  this.process.once('exit', () => {
134
128
  clearTimeout(timeout);
135
129
  resolve();
136
130
  });
137
- // stdinを閉じてプロセスに終了を通知
138
131
  this.process.stdin.end();
139
132
  });
140
133
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-communication.js","sourceRoot":"","sources":["../../src/local-inference/process-communication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Readable } from 'stream';
2
+ import type { InferenceCapabilities, InferenceMessage, InferenceRenderResult, InferenceToolDefinition } from './protocol.js';
3
+ /** LIP プロセスへの最小ポート(MlxProcess / 将来 PyTorchProcess が実装) */
4
+ export interface InferenceProcessPort {
5
+ ensureInitialized(): Promise<void>;
6
+ getCapabilities(): Promise<InferenceCapabilities>;
7
+ render(messages: InferenceMessage[], options?: Record<string, unknown>, tools?: InferenceToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<InferenceRenderResult>;
8
+ generate(prompt: string | number[], options?: Record<string, unknown>, images?: string[], maxImageSize?: number, cachePath?: string, cacheTrimTokens?: number, primer?: string): Promise<Readable>;
9
+ cancelActiveRequest(): void;
10
+ exit(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=process-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-port.d.ts","sourceRoot":"","sources":["../../src/local-inference/process-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,eAAe,CAAC;AAEvB,0DAA0D;AAC1D,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,eAAe,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClD,MAAM,CACJ,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,CAAC,EAAE,uBAAuB,EAAE,EACjC,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAC1C,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClC,QAAQ,CACN,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrB,mBAAmB,IAAI,IAAI,CAAC;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=process-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-port.js","sourceRoot":"","sources":["../../src/local-inference/process-port.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { CompiledPrompt } from '@modular-prompt/core';
2
+ /**
3
+ * Check if the prompt contains MessageElement
4
+ */
5
+ export declare function hasMessageElement(prompt: CompiledPrompt): boolean;
6
+ //# sourceMappingURL=prompt-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-utils.d.ts","sourceRoot":"","sources":["../../src/local-inference/prompt-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAcjE"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Check if the prompt contains MessageElement
3
+ */
4
+ export function hasMessageElement(prompt) {
5
+ const checkElements = (elements) => {
6
+ if (!elements)
7
+ return false;
8
+ return elements.some((element) => {
9
+ const el = element;
10
+ return el?.type === 'message';
11
+ });
12
+ };
13
+ return (checkElements(prompt.instructions) ||
14
+ checkElements(prompt.data) ||
15
+ checkElements(prompt.output));
16
+ }
17
+ //# sourceMappingURL=prompt-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-utils.js","sourceRoot":"","sources":["../../src/local-inference/prompt-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAW,EAAE;QACrD,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,MAAM,EAAE,GAAG,OAA4B,CAAC;YACxC,OAAO,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACL,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC;QAClC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1B,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Local Inference Protocol (LIP) 型定義
3
+ *
4
+ * Thin Python 推論型ドライバ(MLX / PyTorch 等)が共有する stdio JSON-RPC プロトコル。
5
+ * Python プロセスからの応答は snake_case のまま受け取る。
6
+ */
7
+ import type { SpecialToken, SpecialTokenPair } from '../formatter/types.js';
8
+ /** LIP で利用可能な JSON-RPC メソッド */
9
+ export type InferenceMethod = 'capabilities' | 'format_test' | 'render' | 'chat' | 'completion' | 'generate' | 'cache_prefill' | 'tokenize';
10
+ /** VLM content part for structured message content */
11
+ export type InferenceContentPart = {
12
+ type: 'text';
13
+ text: string;
14
+ } | {
15
+ type: 'image';
16
+ };
17
+ /** 標準メッセージ(system / user / assistant) */
18
+ export interface InferenceStandardMessage {
19
+ role: 'user' | 'assistant' | 'system';
20
+ content: string | InferenceContentPart[];
21
+ }
22
+ /** tool_calls 付き assistant メッセージ(HuggingFace 互換形式) */
23
+ export interface InferenceAssistantToolCallMessage {
24
+ role: 'assistant';
25
+ content: string;
26
+ tool_calls: Array<{
27
+ id: string;
28
+ type: 'function';
29
+ function: {
30
+ name: string;
31
+ arguments: string;
32
+ };
33
+ }>;
34
+ }
35
+ /** tool result メッセージ(HuggingFace 互換形式) */
36
+ export interface InferenceToolResultMessage {
37
+ role: 'tool';
38
+ content: string;
39
+ tool_call_id: string;
40
+ name: string;
41
+ }
42
+ export type InferenceMessage = InferenceStandardMessage | InferenceAssistantToolCallMessage | InferenceToolResultMessage;
43
+ /** HuggingFace apply_chat_template 互換の tool 定義 */
44
+ export interface InferenceToolDefinition {
45
+ type: 'function';
46
+ function: {
47
+ name: string;
48
+ description?: string;
49
+ parameters?: Record<string, unknown>;
50
+ };
51
+ }
52
+ /** サンプリング等の推論オプション(バックエンド共通の最小集合) */
53
+ export interface InferenceSamplingOptions {
54
+ max_tokens?: number;
55
+ temperature?: number;
56
+ top_p?: number;
57
+ top_k?: number;
58
+ repetition_penalty?: number;
59
+ repetition_context_size?: number;
60
+ trust_remote_code?: boolean;
61
+ }
62
+ export interface InferenceBaseRequest {
63
+ method: InferenceMethod;
64
+ }
65
+ export interface InferenceCapabilitiesRequest extends InferenceBaseRequest {
66
+ method: 'capabilities';
67
+ }
68
+ export interface InferenceFormatTestRequest extends InferenceBaseRequest {
69
+ method: 'format_test';
70
+ messages: InferenceMessage[];
71
+ options?: {
72
+ primer?: string;
73
+ };
74
+ }
75
+ export interface InferenceTokenizeRequest extends InferenceBaseRequest {
76
+ method: 'tokenize';
77
+ messages: InferenceMessage[];
78
+ tools?: InferenceToolDefinition[];
79
+ reasoning_effort?: 'low' | 'medium' | 'high';
80
+ }
81
+ export interface InferenceRenderRequest extends InferenceBaseRequest {
82
+ method: 'render';
83
+ messages: InferenceMessage[];
84
+ options?: InferenceSamplingOptions & {
85
+ primer?: string;
86
+ };
87
+ tools?: InferenceToolDefinition[];
88
+ reasoning_effort?: 'low' | 'medium' | 'high';
89
+ }
90
+ /** @deprecated Python chat ハンドラ廃止。render + generate を使用すること。 */
91
+ export interface InferenceChatRequest extends InferenceBaseRequest {
92
+ method: 'chat';
93
+ messages: InferenceMessage[];
94
+ primer?: string;
95
+ tools?: InferenceToolDefinition[];
96
+ options?: InferenceSamplingOptions;
97
+ images?: string[];
98
+ maxImageSize?: number;
99
+ reasoning_effort?: 'low' | 'medium' | 'high';
100
+ cache_path?: string;
101
+ cache_trim_tokens?: number;
102
+ }
103
+ export interface InferenceRenderResult {
104
+ formatted_prompt: string | null;
105
+ error: string | null;
106
+ }
107
+ export interface InferenceCompletionRequest extends InferenceBaseRequest {
108
+ method: 'completion';
109
+ prompt: string;
110
+ options?: InferenceSamplingOptions;
111
+ images?: string[];
112
+ maxImageSize?: number;
113
+ }
114
+ /** 整形済み prompt(文字列 or トークン ID)のストリーム推論 */
115
+ export interface InferenceGenerateRequest extends InferenceBaseRequest {
116
+ method: 'generate';
117
+ prompt: string | number[];
118
+ primer?: string;
119
+ options?: InferenceSamplingOptions;
120
+ images?: string[];
121
+ maxImageSize?: number;
122
+ cache_path?: string;
123
+ cache_trim_tokens?: number;
124
+ }
125
+ export interface InferenceCachePrefillRequest extends InferenceBaseRequest {
126
+ method: 'cache_prefill';
127
+ cache_path: string;
128
+ messages: InferenceMessage[];
129
+ base_cache_path?: string;
130
+ trim_to_tokens?: number;
131
+ prefix_offsets?: number[];
132
+ prefix_hashes?: string[];
133
+ tools?: InferenceToolDefinition[];
134
+ reasoning_effort?: 'low' | 'medium' | 'high';
135
+ }
136
+ export interface InferenceCachePrefillResult {
137
+ cache_path: string;
138
+ token_count?: number;
139
+ prefix_offsets?: number[];
140
+ prefix_hashes?: string[];
141
+ }
142
+ export type InferenceRequest = InferenceCapabilitiesRequest | InferenceFormatTestRequest | InferenceRenderRequest | InferenceTokenizeRequest | InferenceChatRequest | InferenceCompletionRequest | InferenceGenerateRequest | InferenceCachePrefillRequest;
143
+ /** MLX-LM が認識する tool_parser_type(capabilities 経由で参照)。
144
+ * 現時点では MLX 固有の知識。PyTorch バックエンド追加時(#302 Phase 6)に
145
+ * バックエンド固有モジュールへ移動・一般化する可能性あり。 */
146
+ export type KnownToolParserType = 'json_tools' | 'pythonic' | 'function_gemma' | 'mistral' | 'kimi_k2' | 'longcat' | 'glm47' | 'qwen3_coder' | 'minimax_m2' | 'gemma4' | 'harmony';
147
+ export interface ToolCallFormat {
148
+ tool_parser_type?: string;
149
+ call_start?: string;
150
+ call_end?: string;
151
+ response_start?: string;
152
+ response_end?: string;
153
+ }
154
+ export interface ChatTemplateInfo {
155
+ supported_roles: string[];
156
+ preview?: string;
157
+ constraints: Record<string, unknown>;
158
+ tool_call_format?: ToolCallFormat;
159
+ }
160
+ /**
161
+ * Python プロセスから取得するランタイム能力情報(snake_case)
162
+ */
163
+ export interface InferenceCapabilities {
164
+ methods: string[];
165
+ special_tokens: Record<string, SpecialToken | SpecialTokenPair>;
166
+ features: {
167
+ apply_chat_template: boolean;
168
+ vocab_size?: number;
169
+ model_max_length?: number;
170
+ chat_template?: ChatTemplateInfo;
171
+ };
172
+ chat_restrictions?: {
173
+ single_system_at_start?: boolean;
174
+ max_system_messages?: number;
175
+ alternating_turns?: boolean;
176
+ requires_user_last?: boolean;
177
+ allow_empty_messages?: boolean;
178
+ };
179
+ model_kind?: 'lm' | 'vlm';
180
+ }
181
+ export interface InferenceFormatTestResult {
182
+ formatted_prompt: string | null;
183
+ template_applied: boolean;
184
+ model_specific_processing: InferenceMessage[] | null;
185
+ error: string | null;
186
+ }
187
+ export interface InferenceTokenizeResult {
188
+ token_ids: number[] | null;
189
+ token_count: number;
190
+ error: string | null;
191
+ }
192
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/local-inference/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE5E,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,aAAa,GACb,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,UAAU,GACV,eAAe,GACf,UAAU,CAAC;AAEf,sDAAsD;AACtD,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,yCAAyC;AACzC,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAAC;CAC1C;AAED,sDAAsD;AACtD,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,KAAK,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC,CAAC;CACJ;AAED,0CAA0C;AAC1C,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,gBAAgB,GACxB,wBAAwB,GACxB,iCAAiC,GACjC,0BAA0B,CAAC;AAE/B,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;CACH;AAED,qCAAqC;AACrC,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IACpE,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC9C;AAED,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,wBAAwB,GAAG;QACnC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC9C;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,0CAA0C;AAC1C,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IACpE,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC9C;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,MAAM,gBAAgB,GACxB,4BAA4B,GAC5B,0BAA0B,GAC1B,sBAAsB,GACtB,wBAAwB,GACxB,oBAAoB,GACpB,0BAA0B,GAC1B,wBAAwB,GACxB,4BAA4B,CAAC;AAEjC;;kCAEkC;AAClC,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,UAAU,GACV,gBAAgB,GAChB,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,aAAa,GACb,YAAY,GACZ,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,cAAc,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAAC,CAAC;IAChE,QAAQ,EAAE;QACR,mBAAmB,EAAE,OAAO,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,gBAAgB,CAAC;KAClC,CAAC;IACF,iBAAiB,CAAC,EAAE;QAClB,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yBAAyB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACrD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.js.map