@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,61 @@
1
+ /**
2
+ * Build {@link QueryResult.usage} from raw token counts.
3
+ * Omits the field when all counts are zero/undefined.
4
+ */
5
+ export function buildQueryUsage(counts) {
6
+ const promptTokens = counts.promptTokens ?? 0;
7
+ const completionTokens = counts.completionTokens ?? 0;
8
+ const cacheReadTokens = counts.cacheReadTokens ?? 0;
9
+ const cacheWriteTokens = counts.cacheWriteTokens ?? 0;
10
+ if (promptTokens === 0 &&
11
+ completionTokens === 0 &&
12
+ cacheReadTokens === 0 &&
13
+ cacheWriteTokens === 0) {
14
+ return undefined;
15
+ }
16
+ return {
17
+ promptTokens,
18
+ completionTokens,
19
+ totalTokens: promptTokens + completionTokens,
20
+ ...(cacheReadTokens > 0 ? { cacheReadTokens } : {}),
21
+ ...(cacheWriteTokens > 0 ? { cacheWriteTokens } : {}),
22
+ };
23
+ }
24
+ /** Whether an {@link AbortSignal} is already aborted. */
25
+ export function isAborted(signal) {
26
+ return signal?.aborted ?? false;
27
+ }
28
+ /**
29
+ * Register an abort listener. Invokes `onAbort` immediately when already aborted.
30
+ * Returns a cleanup function.
31
+ */
32
+ export function watchAbortSignal(signal, onAbort) {
33
+ if (!signal) {
34
+ return () => { };
35
+ }
36
+ if (signal.aborted) {
37
+ onAbort();
38
+ return () => { };
39
+ }
40
+ const handler = () => onAbort();
41
+ signal.addEventListener('abort', handler);
42
+ return () => signal.removeEventListener('abort', handler);
43
+ }
44
+ /**
45
+ * StreamResult for a request that was aborted before inference started.
46
+ * `result` resolves (does not reject) with `finishReason: 'error'`.
47
+ */
48
+ export function createAbortedStreamResult(extras = {}) {
49
+ const emptyStream = {
50
+ async *[Symbol.asyncIterator]() { },
51
+ };
52
+ return {
53
+ stream: emptyStream,
54
+ result: Promise.resolve({
55
+ content: '',
56
+ finishReason: 'error',
57
+ ...extras,
58
+ }),
59
+ };
60
+ }
61
+ //# sourceMappingURL=query-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-utils.js","sourceRoot":"","sources":["../src/query-utils.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAEtD,IACE,YAAY,KAAK,CAAC;QAClB,gBAAgB,KAAK,CAAC;QACtB,eAAe,KAAK,CAAC;QACrB,gBAAgB,KAAK,CAAC,EACtB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,WAAW,EAAE,YAAY,GAAG,gBAAgB;QAC5C,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA+B,EAC/B,OAAmB;IAEnB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAA+B,EAAE;IAEjC,MAAM,WAAW,GAA0B;QACzC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAI,CAAC;KACnC,CAAC;IACF,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;YACtB,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,OAAO;YACrB,GAAG,MAAM;SACV,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { RuntimeProfile } from './paths.js';
2
+ import { isRuntimeReady } from './paths.js';
3
+ export declare class RuntimeNotReadyError extends Error {
4
+ readonly profile: RuntimeProfile;
5
+ readonly setupCommand: string;
6
+ constructor(profile: RuntimeProfile);
7
+ }
8
+ export { isRuntimeReady };
9
+ export declare function assertRuntimeReady(profile: RuntimeProfile): void;
10
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/runtime/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAe,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,OAAO,EAAE,cAAc;CAepC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAIhE"}
@@ -0,0 +1,24 @@
1
+ import { getVenvPath, isRuntimeReady } from './paths.js';
2
+ export class RuntimeNotReadyError extends Error {
3
+ profile;
4
+ setupCommand;
5
+ constructor(profile) {
6
+ const setupCommand = profile === 'mlx'
7
+ ? 'pnpm run setup-mlx -w @modular-prompt/driver'
8
+ : profile === 'pytorch'
9
+ ? 'pnpm run setup-pytorch -w @modular-prompt/driver'
10
+ : `node node_modules/@modular-prompt/driver/scripts/runtime-cli.js setup ${profile}`;
11
+ super(`${profile} runtime is not set up at ${getVenvPath(profile)}. ` +
12
+ `Run: ${setupCommand}`);
13
+ this.name = 'RuntimeNotReadyError';
14
+ this.profile = profile;
15
+ this.setupCommand = setupCommand;
16
+ }
17
+ }
18
+ export { isRuntimeReady };
19
+ export function assertRuntimeReady(profile) {
20
+ if (!isRuntimeReady(profile)) {
21
+ throw new RuntimeNotReadyError(profile);
22
+ }
23
+ }
24
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/runtime/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,OAAO,CAAiB;IACxB,YAAY,CAAS;IAE9B,YAAY,OAAuB;QACjC,MAAM,YAAY,GAChB,OAAO,KAAK,KAAK;YACf,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,OAAO,KAAK,SAAS;gBACrB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,yEAAyE,OAAO,EAAE,CAAC;QAC3F,KAAK,CACH,GAAG,OAAO,6BAA6B,WAAW,CAAC,OAAO,CAAC,IAAI;YAC/D,QAAQ,YAAY,EAAE,CACvB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IACxD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { MODULAR_PROMPT_DIR, RUNTIME_PROFILES, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, resolvePackageRoot, resolvePackageRootFromProcessModule, type RuntimeProfile, } from './paths.js';
2
+ export { readManifest, writeManifest, collectInstalledPackages, type RuntimeManifest, } from './manifest.js';
3
+ export { RuntimeNotReadyError, isRuntimeReady, assertRuntimeReady, } from './check.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mCAAmC,EACnC,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { MODULAR_PROMPT_DIR, RUNTIME_PROFILES, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, resolvePackageRoot, resolvePackageRootFromProcessModule, } from './paths.js';
2
+ export { readManifest, writeManifest, collectInstalledPackages, } from './manifest.js';
3
+ export { RuntimeNotReadyError, isRuntimeReady, assertRuntimeReady, } from './check.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mCAAmC,GAEpC,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,wBAAwB,GAEzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @param {string} pythonDir
3
+ * @param {string} venvPath
4
+ * @returns {Record<string, string> | undefined}
5
+ */
6
+ export function collectInstalledPackages(pythonDir: string, venvPath: string): Record<string, string> | undefined;
7
+ /**
8
+ * @param {string} profile
9
+ * @returns {import('./manifest-core.mjs').RuntimeManifest | null}
10
+ */
11
+ export function readManifest(profile: string): import("./manifest-core.mjs").RuntimeManifest | null;
12
+ /**
13
+ * @param {string} profile
14
+ * @param {import('./manifest-core.mjs').RuntimeManifest} manifest
15
+ */
16
+ export function writeManifest(profile: string, manifest: import("./manifest-core.mjs").RuntimeManifest): void;
17
+ export type RuntimeManifest = {
18
+ profile: string;
19
+ driverVersion: string;
20
+ platform: string;
21
+ pythonVersion: string;
22
+ createdAt: string;
23
+ variant?: string | undefined;
24
+ torchVersion?: string | undefined;
25
+ packages?: Record<string, string> | undefined;
26
+ };
27
+ //# sourceMappingURL=manifest-core.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-core.d.mts","sourceRoot":"","sources":["../../src/runtime/manifest-core.mjs"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,oDAJW,MAAM,YACN,MAAM,GACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAmB9C;AAED;;;GAGG;AACH,sCAHW,MAAM,GACJ,OAAO,qBAAqB,EAAE,eAAe,GAAG,IAAI,CAShE;AAED;;;GAGG;AACH,uCAHW,MAAM,YACN,OAAO,qBAAqB,EAAE,eAAe,QAKvD;;aAIa,MAAM;mBACN,MAAM;cACN,MAAM;mBACN,MAAM;eACN,MAAM"}
@@ -0,0 +1,68 @@
1
+ import { execSync } from 'child_process';
2
+ import { mkdirSync, readFileSync, writeFileSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { getManifestPath, getRuntimeDir } from './paths-core.mjs';
5
+
6
+ function resolveVenvPython(venvPath) {
7
+ return process.platform === 'win32'
8
+ ? join(venvPath, 'Scripts', 'python.exe')
9
+ : join(venvPath, 'bin', 'python');
10
+ }
11
+
12
+ /**
13
+ * @param {string} pythonDir
14
+ * @param {string} venvPath
15
+ * @returns {Record<string, string> | undefined}
16
+ */
17
+ export function collectInstalledPackages(pythonDir, venvPath) {
18
+ try {
19
+ const venvPython = resolveVenvPython(venvPath);
20
+ const output = execSync(`uv pip list --format=json --python "${venvPython}"`, {
21
+ cwd: pythonDir,
22
+ encoding: 'utf8',
23
+ });
24
+ const list = JSON.parse(output);
25
+ /** @type {Record<string, string>} */
26
+ const packages = {};
27
+ for (const pkg of list) {
28
+ packages[pkg.name] = pkg.version;
29
+ }
30
+ return packages;
31
+ } catch {
32
+ return undefined;
33
+ }
34
+ }
35
+
36
+ /**
37
+ * @param {string} profile
38
+ * @returns {import('./manifest-core.mjs').RuntimeManifest | null}
39
+ */
40
+ export function readManifest(profile) {
41
+ try {
42
+ const raw = readFileSync(getManifestPath(profile), 'utf8');
43
+ return JSON.parse(raw);
44
+ } catch {
45
+ return null;
46
+ }
47
+ }
48
+
49
+ /**
50
+ * @param {string} profile
51
+ * @param {import('./manifest-core.mjs').RuntimeManifest} manifest
52
+ */
53
+ export function writeManifest(profile, manifest) {
54
+ mkdirSync(getRuntimeDir(profile), { recursive: true });
55
+ writeFileSync(getManifestPath(profile), JSON.stringify(manifest, null, 2) + '\n', 'utf8');
56
+ }
57
+
58
+ /**
59
+ * @typedef {Object} RuntimeManifest
60
+ * @property {string} profile
61
+ * @property {string} driverVersion
62
+ * @property {string} platform
63
+ * @property {string} pythonVersion
64
+ * @property {string} createdAt
65
+ * @property {string} [variant]
66
+ * @property {string} [torchVersion]
67
+ * @property {Record<string, string>} [packages]
68
+ */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-core.mjs","sourceRoot":"","sources":["../../src/runtime/manifest-core.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,SAAS,iBAAiB,CAAC,QAAQ;IACjC,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO;QACjC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAS,EAAE,QAAQ;IAC1D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,uCAAuC,UAAU,GAAG,EAAE;YAC5E,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,qCAAqC;QACrC,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;QACnC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAO;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAO,EAAE,QAAQ;IAC7C,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;;;;;;GAUG"}
@@ -0,0 +1,18 @@
1
+ import type { RuntimeProfile } from './paths.js';
2
+ import { collectInstalledPackages } from './manifest-core.mjs';
3
+ export interface RuntimeManifest {
4
+ profile: RuntimeProfile;
5
+ driverVersion: string;
6
+ platform: string;
7
+ pythonVersion: string;
8
+ createdAt: string;
9
+ /** PyTorch 等の runtime variant(例: cpu-minimal) */
10
+ variant?: string;
11
+ /** セットアップ時に記録した torch バージョン */
12
+ torchVersion?: string;
13
+ packages?: Record<string, string>;
14
+ }
15
+ export declare function readManifest(profile: RuntimeProfile): RuntimeManifest | null;
16
+ export declare function writeManifest(profile: RuntimeProfile, manifest: RuntimeManifest): void;
17
+ export { collectInstalledPackages };
18
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/runtime/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,wBAAwB,EAGzB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,GAAG,IAAI,CAE5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,CAEtF;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { collectInstalledPackages, readManifest as readManifestCore, writeManifest as writeManifestCore, } from './manifest-core.mjs';
2
+ export function readManifest(profile) {
3
+ return readManifestCore(profile);
4
+ }
5
+ export function writeManifest(profile, manifest) {
6
+ writeManifestCore(profile, manifest);
7
+ }
8
+ export { collectInstalledPackages };
9
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/runtime/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,GACnC,MAAM,qBAAqB,CAAC;AAe7B,MAAM,UAAU,YAAY,CAAC,OAAuB;IAClD,OAAO,gBAAgB,CAAC,OAAO,CAA2B,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,QAAyB;IAC9E,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ~/.modular-prompt のルートパス
3
+ * MODULAR_PROMPT_HOME 環境変数で上書き可能(テスト用)
4
+ */
5
+ export function getModularPromptHome(): string;
6
+ export function getRuntimesRoot(): string;
7
+ export function getRuntimeDir(profile: any): string;
8
+ export function getVenvPath(profile: any): string;
9
+ export function getManifestPath(profile: any): string;
10
+ export function getMlxPythonDir(packageRoot: any): string;
11
+ export function getPytorchPythonDir(packageRoot: any): string;
12
+ export function isRuntimeReady(profile: any): boolean;
13
+ /** ホーム配下の設定ディレクトリ名 */
14
+ export const MODULAR_PROMPT_DIR: ".modular-prompt";
15
+ /** サポートする runtime profile */
16
+ export const RUNTIME_PROFILES: string[];
17
+ //# sourceMappingURL=paths-core.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths-core.d.mts","sourceRoot":"","sources":["../../src/runtime/paths-core.mjs"],"names":[],"mappings":"AAUA;;;GAGG;AACH,+CAKC;AAED,0CAEC;AAED,oDAEC;AAED,kDAEC;AAED,sDAEC;AAiBD,0DAEC;AAED,8DAEC;AAED,sDAMC;AA9DD,sBAAsB;AACtB,iCAAkC,iBAAiB,CAAC;AAEpD,6BAA6B;AAC7B,wCAAmD"}
@@ -0,0 +1,67 @@
1
+ import { existsSync } from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+
5
+ /** ホーム配下の設定ディレクトリ名 */
6
+ export const MODULAR_PROMPT_DIR = '.modular-prompt';
7
+
8
+ /** サポートする runtime profile */
9
+ export const RUNTIME_PROFILES = ['mlx', 'pytorch'];
10
+
11
+ /**
12
+ * ~/.modular-prompt のルートパス
13
+ * MODULAR_PROMPT_HOME 環境変数で上書き可能(テスト用)
14
+ */
15
+ export function getModularPromptHome() {
16
+ if (process.env.MODULAR_PROMPT_HOME) {
17
+ return process.env.MODULAR_PROMPT_HOME;
18
+ }
19
+ return path.join(os.homedir(), MODULAR_PROMPT_DIR);
20
+ }
21
+
22
+ export function getRuntimesRoot() {
23
+ return path.join(getModularPromptHome(), 'runtimes');
24
+ }
25
+
26
+ export function getRuntimeDir(profile) {
27
+ return path.join(getRuntimesRoot(), profile);
28
+ }
29
+
30
+ export function getVenvPath(profile) {
31
+ return path.join(getRuntimeDir(profile), '.venv');
32
+ }
33
+
34
+ export function getManifestPath(profile) {
35
+ return path.join(getRuntimeDir(profile), 'manifest.json');
36
+ }
37
+
38
+ /**
39
+ * @modular-prompt/driver パッケージルートから MLX Python プロジェクトを解決
40
+ */
41
+ function resolvePythonProjectDir(packageRoot, segment) {
42
+ const distPython = path.join(packageRoot, 'dist', segment, 'python');
43
+ const srcPython = path.join(packageRoot, 'src', segment, 'python');
44
+ if (existsSync(distPython)) {
45
+ return distPython;
46
+ }
47
+ if (existsSync(srcPython)) {
48
+ return srcPython;
49
+ }
50
+ return srcPython;
51
+ }
52
+
53
+ export function getMlxPythonDir(packageRoot) {
54
+ return resolvePythonProjectDir(packageRoot, 'mlx-ml');
55
+ }
56
+
57
+ export function getPytorchPythonDir(packageRoot) {
58
+ return resolvePythonProjectDir(packageRoot, 'pytorch');
59
+ }
60
+
61
+ export function isRuntimeReady(profile) {
62
+ const venv = getVenvPath(profile);
63
+ return (
64
+ existsSync(path.join(venv, 'bin', 'python')) ||
65
+ existsSync(path.join(venv, 'Scripts', 'python.exe'))
66
+ );
67
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths-core.mjs","sourceRoot":"","sources":["../../src/runtime/paths-core.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,sBAAsB;AACtB,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAEpD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAO;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAO;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAO;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,WAAW,EAAE,OAAO;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAW;IACzC,OAAO,uBAAuB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAW;IAC7C,OAAO,uBAAuB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAO;IACpC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,CACL,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { MODULAR_PROMPT_DIR, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady } from './paths-core.mjs';
2
+ export { MODULAR_PROMPT_DIR, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady, };
3
+ /** サポートする runtime profile */
4
+ export type RuntimeProfile = 'mlx' | 'pytorch';
5
+ export declare const RUNTIME_PROFILES: RuntimeProfile[];
6
+ /**
7
+ * @modular-prompt/driver パッケージルート(dist/ または packages/driver/)
8
+ */
9
+ export declare function resolvePackageRoot(fromDir: string): string;
10
+ /** dist/mlx-ml/process からパッケージルートを解決 */
11
+ export declare function resolvePackageRootFromProcessModule(importMetaUrl: string): string;
12
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAElB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,CAAC;AAEF,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAE/C,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAA8C,CAAC;AAE5F;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wCAAwC;AACxC,wBAAgB,mCAAmC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAGjF"}
@@ -0,0 +1,17 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { MODULAR_PROMPT_DIR, RUNTIME_PROFILES as RUNTIME_PROFILES_CORE, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady, } from './paths-core.mjs';
4
+ export { MODULAR_PROMPT_DIR, getModularPromptHome, getRuntimesRoot, getRuntimeDir, getVenvPath, getManifestPath, getMlxPythonDir, getPytorchPythonDir, isRuntimeReady, };
5
+ export const RUNTIME_PROFILES = RUNTIME_PROFILES_CORE;
6
+ /**
7
+ * @modular-prompt/driver パッケージルート(dist/ または packages/driver/)
8
+ */
9
+ export function resolvePackageRoot(fromDir) {
10
+ return path.resolve(fromDir, '..', '..', '..');
11
+ }
12
+ /** dist/mlx-ml/process からパッケージルートを解決 */
13
+ export function resolvePackageRootFromProcessModule(importMetaUrl) {
14
+ const moduleDir = path.dirname(fileURLToPath(importMetaUrl));
15
+ return resolvePackageRoot(moduleDir);
16
+ }
17
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,IAAI,qBAAqB,EACzC,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,CAAC;AAKF,MAAM,CAAC,MAAM,gBAAgB,GAAqB,qBAAyC,CAAC;AAE5F;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,mCAAmC,CAAC,aAAqB;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7D,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Attachment, ToolCall, ToolResultKind } from '@modular-prompt/core';
2
2
  import type { LogEntry } from '@modular-prompt/utils';
3
+ import type { CacheHandle } from './cache-controller.js';
3
4
  export type { Attachment, CompiledPrompt, ToolCall, ToolResultKind } from '@modular-prompt/core';
4
5
  /**
5
6
  * Chat message role
@@ -88,6 +89,10 @@ export interface QueryResult {
88
89
  promptTokens: number;
89
90
  completionTokens: number;
90
91
  totalTokens: number;
92
+ /** Tokens read from prompt/KV cache in this request */
93
+ cacheReadTokens?: number;
94
+ /** Tokens newly written to prompt/KV cache in this request */
95
+ cacheWriteTokens?: number;
91
96
  };
92
97
  /** Tool calls selected by the model */
93
98
  toolCalls?: ToolCall[];
@@ -109,6 +114,10 @@ export type FinishReason = 'stop' | 'length' | 'error' | 'tool_calls';
109
114
  * - 'chat': Conversational chat mode
110
115
  */
111
116
  export type QueryMode = 'default' | 'thinking' | 'instruct' | 'chat';
117
+ /**
118
+ * API selection strategy (MLX / LocalInference drivers)
119
+ */
120
+ export type ApiStrategy = 'auto' | 'force-chat' | 'force-completion';
112
121
  /**
113
122
  * Options for querying AI model
114
123
  */
@@ -126,7 +135,7 @@ export interface QueryOptions {
126
135
  * - 'force-chat': Force chat API
127
136
  * - 'force-completion': Force completion API
128
137
  */
129
- apiStrategy?: 'auto' | 'force-chat' | 'force-completion';
138
+ apiStrategy?: ApiStrategy;
130
139
  /** Available tool definitions */
131
140
  tools?: ToolDefinition[];
132
141
  /** Tool usage strategy */
@@ -141,6 +150,16 @@ export interface QueryOptions {
141
150
  * - undefined: driver default behavior
142
151
  */
143
152
  cache?: boolean | 'read-only';
153
+ /**
154
+ * Externally prepared cache handle. When set, drivers that support KV caching
155
+ * skip internal prepare() and use this handle for generation.
156
+ */
157
+ cacheHandle?: CacheHandle;
158
+ /**
159
+ * Abort signal for cancelling in-flight inference.
160
+ * Unsupported drivers ignore this option.
161
+ */
162
+ signal?: AbortSignal;
144
163
  }
145
164
  /**
146
165
  * Stream result with both stream and final result
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgDA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAE,OAAoC,CAAC,SAAS,CAAC,CAAC;AAClI,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiDA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,CAAE,OAAoC,CAAC,SAAS,CAAC,CAAC;AAClI,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,OAAO,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modular-prompt/driver",
3
- "version": "0.13.5",
3
+ "version": "0.15.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -14,7 +14,8 @@
14
14
  "dist",
15
15
  "scripts",
16
16
  "skills",
17
- "src/mlx-ml/python"
17
+ "src/mlx-ml/python",
18
+ "src/pytorch/python"
18
19
  ],
19
20
  "dependencies": {
20
21
  "@anthropic-ai/sdk": "0.61.0",
@@ -53,7 +54,7 @@
53
54
  "directory": "packages/driver"
54
55
  },
55
56
  "scripts": {
56
- "build": "tsc -b --force",
57
+ "build": "tsc -b --force && cp src/runtime/paths-core.mjs src/runtime/manifest-core.mjs dist/runtime/",
57
58
  "test": "vitest",
58
59
  "test:run": "vitest run",
59
60
  "test:system": "vitest run --config vitest.config.system.ts",
@@ -63,7 +64,9 @@
63
64
  "typecheck": "tsc --noEmit",
64
65
  "copy-skills": "mkdir -p skills/driver-usage && cp ../../skills/driver-usage/SKILL.md skills/driver-usage/SKILL.md",
65
66
  "clean": "rm -rf dist skills tsconfig.tsbuildinfo",
66
- "postinstall": "node scripts/setup-mlx.js || true",
67
- "setup-mlx": "node scripts/setup-mlx.js"
67
+ "setup-mlx": "node scripts/runtime-cli.js setup mlx",
68
+ "setup-pytorch": "node scripts/runtime-cli.js setup pytorch",
69
+ "runtime:status": "node scripts/runtime-cli.js setup --status",
70
+ "runtime:cleanup": "node scripts/runtime-cli.js cleanup"
68
71
  }
69
72
  }
@@ -2,26 +2,38 @@
2
2
 
3
3
  import { execSync } from 'child_process';
4
4
  import { existsSync } from 'fs';
5
- import { join, dirname } from 'path';
6
- import { fileURLToPath } from 'url';
5
+ import { dirname, join } from 'path';
6
+ import { fileURLToPath, pathToFileURL } from 'url';
7
7
 
8
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
9
- const pythonDir = join(__dirname, '..', 'src', 'mlx-ml', 'python');
10
- const distPythonDir = join(__dirname, '..', 'dist', 'mlx-ml', 'python');
9
+ const packageRoot = join(__dirname, '..');
11
10
 
12
- // Check Python directory
13
- const targetDir = existsSync(distPythonDir) ? distPythonDir : pythonDir;
11
+ function runtimeModuleUrl(name) {
12
+ const distPath = join(packageRoot, 'dist', 'runtime', name);
13
+ const srcPath = join(packageRoot, 'src', 'runtime', name);
14
+ return pathToFileURL(existsSync(distPath) ? distPath : srcPath).href;
15
+ }
16
+
17
+ const { getMlxPythonDir, getVenvPath } = await import(runtimeModuleUrl('paths-core.mjs'));
18
+
19
+ const targetDir = getMlxPythonDir(packageRoot);
20
+ const venvPath = getVenvPath('mlx');
14
21
 
15
22
  if (!existsSync(targetDir)) {
16
23
  console.error('❌ MLX Python directory not found.');
17
- console.error(' Please run "npm run setup-mlx" first.');
24
+ console.error(' Please run "pnpm run setup-mlx -w @modular-prompt/driver" first.');
25
+ process.exit(1);
26
+ }
27
+
28
+ if (!existsSync(join(venvPath, 'bin', 'python'))) {
29
+ console.error('❌ MLX runtime is not set up.');
30
+ console.error(' Please run "pnpm run setup-mlx -w @modular-prompt/driver" first.');
18
31
  process.exit(1);
19
32
  }
20
33
 
21
34
  console.log('📦 Downloading test model...');
22
35
  console.log(`📁 Working directory: ${targetDir}\n`);
23
36
 
24
- // Get model name from command line arguments or use default
25
37
  const modelName = process.argv[2] || 'mlx-community/gemma-3-270m-it-4bit';
26
38
 
27
39
  try {
@@ -29,7 +41,11 @@ try {
29
41
  `uv run mlx_lm.generate --model ${modelName} --prompt 'test' --max-tokens 1`,
30
42
  {
31
43
  cwd: targetDir,
32
- stdio: 'inherit'
44
+ stdio: 'inherit',
45
+ env: {
46
+ ...process.env,
47
+ UV_PROJECT_ENVIRONMENT: venvPath,
48
+ },
33
49
  }
34
50
  );
35
51
  console.log('\n✅ Model downloaded successfully!');