@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 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/local-inference/protocol.ts"],"names":[],"mappings":""}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queue-types.js.map
@@ -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
- * MLX Driver キュー管理システム
3
- *
4
- * リクエストキューの管理とプロセッシングロジックを提供
2
+ * LIP JSON-RPC リクエストキュー
5
3
  */
6
- import { mapOptionsToPython } from './parameter-mapper.js';
7
- export class QueueManager {
4
+ export class InferenceRequestQueue {
8
5
  queue = [];
9
6
  isProcessing = false;
10
7
  callbacks;
11
- constructor(callbacks) {
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
- addTokenizeRequest(messages, tools, reasoningEffort) {
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: 'tokenize',
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
- addChatRequest(messages, primer, options, tools, images, maxImageSize, reasoningEffort, cachePath, cacheTrimTokens) {
65
+ addTokenizeRequest(messages, tools, reasoningEffort) {
60
66
  return new Promise((resolve, reject) => {
61
- try {
62
- const request = {
63
- method: 'chat',
64
- messages,
65
- primer,
66
- tools,
67
- options: mapOptionsToPython(options, true),
68
- ...(images?.length ? { images, maxImageSize } : {}),
69
- ...(reasoningEffort ? { reasoning_effort: reasoningEffort } : {}),
70
- ...(cachePath ? { cache_path: cachePath } : {}),
71
- ...(cacheTrimTokens != null ? { cache_trim_tokens: cacheTrimTokens } : {}),
72
- };
73
- this.queue.push({
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,8 +106,32 @@ export class QueueManager {
109
106
  const request = {
110
107
  method: 'completion',
111
108
  prompt,
112
- options: mapOptionsToPython(options, true),
109
+ options: this.mapSamplingOptions(options),
110
+ ...(images?.length ? { images, maxImageSize } : {}),
111
+ };
112
+ this.queue.push({
113
+ request,
114
+ resolve,
115
+ reject,
116
+ });
117
+ this.processNext();
118
+ }
119
+ catch (error) {
120
+ reject(error);
121
+ }
122
+ });
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),
113
132
  ...(images?.length ? { images, maxImageSize } : {}),
133
+ ...(cachePath ? { cache_path: cachePath } : {}),
134
+ ...(cacheTrimTokens != null ? { cache_trim_tokens: cacheTrimTokens } : {}),
114
135
  };
115
136
  this.queue.push({
116
137
  request,
@@ -129,15 +150,13 @@ export class QueueManager {
129
150
  return;
130
151
  }
131
152
  this.isProcessing = true;
132
- const queueItem = this.queue[0]; // まだshiftしない
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(); // ここで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,14 +250,17 @@ export class QueueManager {
216
250
  }
217
251
  onRequestCompleted() {
218
252
  this.isProcessing = false;
219
- this.processNext(); // 次のリクエストを処理
253
+ this.processNext();
254
+ }
255
+ cancelActiveRequest() {
256
+ if (!this.isProcessing) {
257
+ return;
258
+ }
259
+ this.callbacks.cancelActiveStream();
220
260
  }
221
261
  get length() {
222
262
  return this.queue.length;
223
263
  }
224
- get isEmpty() {
225
- return this.queue.length === 0;
226
- }
227
264
  rejectAll(error) {
228
265
  const pending = this.queue.splice(0);
229
266
  for (const item of pending) {
@@ -231,9 +268,5 @@ export class QueueManager {
231
268
  }
232
269
  this.isProcessing = false;
233
270
  }
234
- clear() {
235
- this.queue = [];
236
- this.isProcessing = false;
237
- }
238
271
  }
239
- //# 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":"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"}
@@ -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"}