@modular-prompt/driver 0.14.0 → 0.16.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 (218) hide show
  1. package/README.md +90 -5
  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 +20 -3
  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 +22 -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 +11 -2
  21. package/dist/driver-registry/types.d.ts.map +1 -1
  22. package/dist/index.d.ts +10 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +9 -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 +25 -61
  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} +83 -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-controller.d.ts.map +1 -1
  71. package/dist/mlx-ml/mlx-cache-controller.js +2 -1
  72. package/dist/mlx-ml/mlx-cache-controller.js.map +1 -1
  73. package/dist/mlx-ml/mlx-cache-support.d.ts +23 -0
  74. package/dist/mlx-ml/mlx-cache-support.d.ts.map +1 -0
  75. package/dist/mlx-ml/mlx-cache-support.js +45 -0
  76. package/dist/mlx-ml/mlx-cache-support.js.map +1 -0
  77. package/dist/mlx-ml/mlx-driver.d.ts +20 -59
  78. package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
  79. package/dist/mlx-ml/mlx-driver.js +86 -460
  80. package/dist/mlx-ml/mlx-driver.js.map +1 -1
  81. package/dist/mlx-ml/mlx-local-inference-adapters.d.ts +3 -0
  82. package/dist/mlx-ml/mlx-local-inference-adapters.d.ts.map +1 -0
  83. package/dist/mlx-ml/mlx-local-inference-adapters.js +19 -0
  84. package/dist/mlx-ml/mlx-local-inference-adapters.js.map +1 -0
  85. package/dist/mlx-ml/mlx-options.d.ts +19 -0
  86. package/dist/mlx-ml/mlx-options.d.ts.map +1 -0
  87. package/dist/mlx-ml/mlx-options.js +30 -0
  88. package/dist/mlx-ml/mlx-options.js.map +1 -0
  89. package/dist/mlx-ml/process/index.d.ts +10 -8
  90. package/dist/mlx-ml/process/index.d.ts.map +1 -1
  91. package/dist/mlx-ml/process/index.js +73 -54
  92. package/dist/mlx-ml/process/index.js.map +1 -1
  93. package/dist/mlx-ml/process/model-specific.d.ts +2 -1
  94. package/dist/mlx-ml/process/model-specific.d.ts.map +1 -1
  95. package/dist/mlx-ml/process/model-specific.js.map +1 -1
  96. package/dist/mlx-ml/process/prompt-builder.d.ts +11 -0
  97. package/dist/mlx-ml/process/prompt-builder.d.ts.map +1 -0
  98. package/dist/mlx-ml/process/prompt-builder.js +51 -0
  99. package/dist/mlx-ml/process/prompt-builder.js.map +1 -0
  100. package/dist/mlx-ml/process/types.d.ts +15 -183
  101. package/dist/mlx-ml/process/types.d.ts.map +1 -1
  102. package/dist/mlx-ml/types.d.ts +2 -45
  103. package/dist/mlx-ml/types.d.ts.map +1 -1
  104. package/dist/models-config/index.d.ts +8 -0
  105. package/dist/models-config/index.d.ts.map +1 -0
  106. package/dist/models-config/index.js +7 -0
  107. package/dist/models-config/index.js.map +1 -0
  108. package/dist/models-config/loader.d.ts +20 -0
  109. package/dist/models-config/loader.d.ts.map +1 -0
  110. package/dist/models-config/loader.js +85 -0
  111. package/dist/models-config/loader.js.map +1 -0
  112. package/dist/models-config/paths.d.ts +15 -0
  113. package/dist/models-config/paths.d.ts.map +1 -0
  114. package/dist/models-config/paths.js +26 -0
  115. package/dist/models-config/paths.js.map +1 -0
  116. package/dist/models-config/resolve.d.ts +57 -0
  117. package/dist/models-config/resolve.d.ts.map +1 -0
  118. package/dist/models-config/resolve.js +208 -0
  119. package/dist/models-config/resolve.js.map +1 -0
  120. package/dist/models-config/types.d.ts +62 -0
  121. package/dist/models-config/types.d.ts.map +1 -0
  122. package/dist/models-config/types.js +5 -0
  123. package/dist/models-config/types.js.map +1 -0
  124. package/dist/pytorch/process/index.d.ts +35 -0
  125. package/dist/pytorch/process/index.d.ts.map +1 -0
  126. package/dist/pytorch/process/index.js +69 -0
  127. package/dist/pytorch/process/index.js.map +1 -0
  128. package/dist/pytorch/pytorch-driver.d.ts +35 -0
  129. package/dist/pytorch/pytorch-driver.d.ts.map +1 -0
  130. package/dist/pytorch/pytorch-driver.js +48 -0
  131. package/dist/pytorch/pytorch-driver.js.map +1 -0
  132. package/dist/pytorch/pytorch-local-inference-adapters.d.ts +3 -0
  133. package/dist/pytorch/pytorch-local-inference-adapters.d.ts.map +1 -0
  134. package/dist/pytorch/pytorch-local-inference-adapters.js +19 -0
  135. package/dist/pytorch/pytorch-local-inference-adapters.js.map +1 -0
  136. package/dist/pytorch/pytorch-options.d.ts +8 -0
  137. package/dist/pytorch/pytorch-options.d.ts.map +1 -0
  138. package/dist/pytorch/pytorch-options.js +21 -0
  139. package/dist/pytorch/pytorch-options.js.map +1 -0
  140. package/dist/query-logger.js +1 -1
  141. package/dist/query-logger.js.map +1 -1
  142. package/dist/runtime/check.d.ts +10 -0
  143. package/dist/runtime/check.d.ts.map +1 -0
  144. package/dist/runtime/check.js +25 -0
  145. package/dist/runtime/check.js.map +1 -0
  146. package/dist/runtime/index.d.ts +5 -0
  147. package/dist/runtime/index.d.ts.map +1 -0
  148. package/dist/runtime/index.js +5 -0
  149. package/dist/runtime/index.js.map +1 -0
  150. package/dist/runtime/manifest-core.d.mts +27 -0
  151. package/dist/runtime/manifest-core.d.mts.map +1 -0
  152. package/dist/runtime/manifest-core.mjs +68 -0
  153. package/dist/runtime/manifest-core.mjs.map +1 -0
  154. package/dist/runtime/manifest.d.ts +18 -0
  155. package/dist/runtime/manifest.d.ts.map +1 -0
  156. package/dist/runtime/manifest.js +9 -0
  157. package/dist/runtime/manifest.js.map +1 -0
  158. package/dist/runtime/paths-core.d.mts +17 -0
  159. package/dist/runtime/paths-core.d.mts.map +1 -0
  160. package/dist/runtime/paths-core.mjs +67 -0
  161. package/dist/runtime/paths-core.mjs.map +1 -0
  162. package/dist/runtime/paths.d.ts +12 -0
  163. package/dist/runtime/paths.d.ts.map +1 -0
  164. package/dist/runtime/paths.js +17 -0
  165. package/dist/runtime/paths.js.map +1 -0
  166. package/dist/runtime/setup-commands-core.d.mts +13 -0
  167. package/dist/runtime/setup-commands-core.d.mts.map +1 -0
  168. package/dist/runtime/setup-commands-core.mjs +14 -0
  169. package/dist/runtime/setup-commands-core.mjs.map +1 -0
  170. package/dist/runtime/setup-commands.d.ts +2 -0
  171. package/dist/runtime/setup-commands.d.ts.map +1 -0
  172. package/dist/runtime/setup-commands.js +2 -0
  173. package/dist/runtime/setup-commands.js.map +1 -0
  174. package/dist/types.d.ts +11 -1
  175. package/dist/types.d.ts.map +1 -1
  176. package/dist/types.js.map +1 -1
  177. package/package.json +13 -7
  178. package/scripts/download-model.js +26 -9
  179. package/scripts/runtime-cli.js +320 -0
  180. package/src/mlx-ml/python/__main__.py +43 -4
  181. package/src/mlx-ml/python/backends/cache_archive.py +41 -0
  182. package/src/mlx-ml/python/backends/mlx_lm.py +17 -1
  183. package/src/mlx-ml/python/handlers/__init__.py +2 -1
  184. package/src/mlx-ml/python/handlers/completion.py +3 -27
  185. package/src/mlx-ml/python/handlers/{chat.py → generate.py} +33 -106
  186. package/src/mlx-ml/python/handlers/render.py +40 -0
  187. package/src/mlx-ml/python/pyproject.toml +11 -4
  188. package/src/mlx-ml/python/server.py +28 -8
  189. package/src/mlx-ml/python/utils/template_render.py +80 -0
  190. package/src/mlx-ml/python/utils/token_utils.py +2 -2
  191. package/src/mlx-ml/python/uv.lock +544 -689
  192. package/src/pytorch/python/__main__.py +19 -0
  193. package/src/pytorch/python/backends/__init__.py +3 -0
  194. package/src/pytorch/python/backends/base.py +84 -0
  195. package/src/pytorch/python/backends/transformers_lm.py +127 -0
  196. package/src/pytorch/python/handlers/__init__.py +6 -0
  197. package/src/pytorch/python/handlers/cancel.py +53 -0
  198. package/src/pytorch/python/handlers/capabilities.py +6 -0
  199. package/src/pytorch/python/handlers/completion.py +15 -0
  200. package/src/pytorch/python/handlers/format_test.py +70 -0
  201. package/src/pytorch/python/handlers/generate.py +68 -0
  202. package/src/pytorch/python/handlers/render.py +40 -0
  203. package/src/pytorch/python/handlers/tokenize.py +63 -0
  204. package/src/pytorch/python/pyproject.toml +36 -0
  205. package/src/pytorch/python/server.py +140 -0
  206. package/src/pytorch/python/utils/__init__.py +0 -0
  207. package/src/pytorch/python/utils/chat_template_constraints.py +164 -0
  208. package/src/pytorch/python/utils/prompt_builder.py +54 -0
  209. package/src/pytorch/python/utils/template_render.py +80 -0
  210. package/src/pytorch/python/utils/token_utils.py +376 -0
  211. package/src/pytorch/python/uv.lock +694 -0
  212. package/dist/mlx-ml/process/process-communication.d.ts +0 -45
  213. package/dist/mlx-ml/process/process-communication.d.ts.map +0 -1
  214. package/dist/mlx-ml/process/process-communication.js.map +0 -1
  215. package/dist/mlx-ml/process/queue.d.ts +0 -35
  216. package/dist/mlx-ml/process/queue.d.ts.map +0 -1
  217. package/dist/mlx-ml/process/queue.js.map +0 -1
  218. package/scripts/setup-mlx.js +0 -53
@@ -1,434 +1,57 @@
1
- import { isToolResult } from '../types.js';
2
- import { formatPromptAsMessages } from '../formatter/converter.js';
3
- import { formatCompletionPrompt } from '../formatter/completion-formatter.js';
1
+ import { LocalInferenceDriver } from '../local-inference/driver.js';
2
+ import { hasMessageElement } from '../local-inference/prompt-utils.js';
4
3
  import { MlxProcess } from './process/index.js';
5
- import { createModelSpecificProcessor, selectApi } from './process/model-specific.js';
6
- import { selectResponseProcessor } from './process/model-handlers.js';
7
- import { extractJSON } from '@modular-prompt/utils';
8
- import { formatToolDefinitionsAsText } from './tool-call-parser/index.js';
9
- import { convertMessages, convertToolDefinitions, extractImagePaths } from './mlx-message-utils.js';
10
- import { QueryLogger } from '../query-logger.js';
11
- import { extractCacheablePrefix } from '../cache-utils.js';
4
+ import { mlxLocalInferenceAdapters } from './mlx-local-inference-adapters.js';
5
+ import { bindMlxCacheOnCapabilitiesLoaded, createMlxCacheSupport, } from './mlx-cache-support.js';
12
6
  import { MlxCacheController } from './mlx-cache-controller.js';
13
- import { buildQueryUsage, createAbortedStreamResult, isAborted, watchAbortSignal, } from '../query-utils.js';
14
- // ========================================================================
15
- // Utility Functions (exported for testing)
16
- // ========================================================================
7
+ export { hasMessageElement };
17
8
  /**
18
- * Check if the prompt contains MessageElement
9
+ * MLX ML driver using Python subprocess.
10
+ * 共通ロジックは LocalInferenceDriver に委譲する。
19
11
  */
20
- export function hasMessageElement(prompt) {
21
- const checkElements = (elements) => {
22
- if (!elements)
23
- return false;
24
- return elements.some(element => {
25
- const el = element;
26
- return el?.type === 'message';
27
- });
28
- };
29
- return checkElements(prompt.instructions) ||
30
- checkElements(prompt.data) ||
31
- checkElements(prompt.output);
32
- }
33
- const META_MARKER = '\x1e__META__:';
34
- function extractStreamMeta(content) {
35
- const idx = content.lastIndexOf(META_MARKER);
36
- if (idx === -1)
37
- return { content, meta: {} };
38
- const jsonStr = content.slice(idx + META_MARKER.length);
39
- try {
40
- return { content: content.slice(0, idx), meta: JSON.parse(jsonStr) };
41
- }
42
- catch {
43
- return { content: content.slice(0, idx), meta: {} };
44
- }
45
- }
46
- function createStreamIterable(stream, isAborted) {
47
- const chunks = [];
48
- let resolveCompletion;
49
- let settled = false;
50
- const settle = (error) => {
51
- if (settled)
52
- return;
53
- settled = true;
54
- const raw = chunks.join('');
55
- const { content, meta } = extractStreamMeta(raw);
56
- const aborted = isAborted?.() ?? false;
57
- resolveCompletion({ content, meta, error: aborted ? null : error });
58
- };
59
- const completion = new Promise((resolve) => {
60
- resolveCompletion = resolve;
61
- });
62
- const iterable = {
63
- async *[Symbol.asyncIterator]() {
64
- try {
65
- let buffer = '';
66
- let markerFound = false;
67
- for await (const chunk of stream) {
68
- if (isAborted?.()) {
69
- break;
70
- }
71
- const str = chunk.toString();
72
- chunks.push(str);
73
- if (markerFound)
74
- continue;
75
- buffer += str;
76
- const markerIdx = buffer.indexOf(META_MARKER);
77
- if (markerIdx !== -1) {
78
- const text = buffer.slice(0, markerIdx);
79
- if (text)
80
- yield text;
81
- markerFound = true;
82
- }
83
- else {
84
- const safeLen = buffer.length - (META_MARKER.length - 1);
85
- if (safeLen > 0) {
86
- yield buffer.slice(0, safeLen);
87
- buffer = buffer.slice(safeLen);
88
- }
89
- }
90
- }
91
- if (!markerFound && buffer)
92
- yield buffer;
93
- }
94
- catch (error) {
95
- settle(error);
96
- const aborted = isAborted?.() ?? false;
97
- if (!aborted) {
98
- throw error;
99
- }
100
- }
101
- finally {
102
- settle(null);
103
- }
104
- }
105
- };
106
- return { iterable, completion };
107
- }
108
- /**
109
- * MLX ML driver using Python subprocess
110
- */
111
- export class MlxDriver {
112
- process;
113
- model;
114
- _defaultOptions;
115
- runtimeInfo = null;
116
- modelProcessor;
117
- formatterOptions;
118
- maxImageSize;
119
- queryLogger = new QueryLogger('MLX');
120
- cacheController;
121
- cacheControllerBound = false;
122
- get defaultOptions() {
123
- return this._defaultOptions;
124
- }
125
- set defaultOptions(value) {
126
- this._defaultOptions = value;
127
- }
12
+ export class MlxDriver extends LocalInferenceDriver {
13
+ cacheControllerRaw;
14
+ cacheDisabledForVlm = false;
15
+ cacheBindingState = { bound: false };
128
16
  constructor(config) {
129
- this.model = config.model;
130
- this._defaultOptions = config.defaultOptions || {};
131
- this.formatterOptions = config.formatterOptions || {};
132
- this.maxImageSize = config.maxImageSize ?? 768;
133
- this.process = new MlxProcess(config.model, {
17
+ const mlxProcess = new MlxProcess(config.model, {
18
+ backend: config.backend,
134
19
  textOnly: config.textOnly,
135
20
  drafterModel: config.drafterModel,
136
- draftBlockSize: config.draftBlockSize
21
+ draftBlockSize: config.draftBlockSize,
137
22
  });
138
- this.modelProcessor = createModelSpecificProcessor(config.model);
139
- this.cacheController = config.cacheController;
23
+ const cacheSupport = config.cacheController
24
+ ? createMlxCacheSupport(config.cacheController)
25
+ : undefined;
26
+ super({
27
+ model: config.model,
28
+ process: mlxProcess,
29
+ adapters: mlxLocalInferenceAdapters,
30
+ formatterOptions: config.formatterOptions,
31
+ maxImageSize: config.maxImageSize,
32
+ defaultOptions: config.defaultOptions,
33
+ loggerPrefix: 'MLX',
34
+ cache: cacheSupport,
35
+ onCapabilitiesLoaded: async (runtimeInfo, ctx) => {
36
+ if (!cacheSupport)
37
+ return;
38
+ await bindMlxCacheOnCapabilitiesLoaded(cacheSupport, this.cacheBindingState, runtimeInfo, ctx, () => {
39
+ this.queryLogger.log.info('VLM models do not support prompt caching — cacheController disabled');
40
+ this.cacheDisabledForVlm = true;
41
+ this.disableCacheSupport();
42
+ });
43
+ },
44
+ });
45
+ this.cacheControllerRaw = config.cacheController;
140
46
  if (config.drafterModel) {
141
47
  this.queryLogger.log.info(`Drafter model: ${config.drafterModel}`);
142
48
  }
143
49
  }
144
- /**
145
- * Initialize process and cache runtime info
146
- */
147
- async ensureInitialized() {
148
- // Ensure process is initialized
149
- await this.process.ensureInitialized();
150
- // Cache runtime info if not already cached
151
- if (!this.runtimeInfo) {
152
- try {
153
- this.runtimeInfo = await this.process.getCapabilities();
154
- // Update formatterOptions with special tokens from runtime info
155
- if (this.runtimeInfo.special_tokens) {
156
- this.formatterOptions.specialTokens = this.runtimeInfo.special_tokens;
157
- }
158
- // Update model processor with runtime context
159
- this.modelProcessor.setRuntimeContext({
160
- chatRestrictions: this.runtimeInfo.chat_restrictions,
161
- modelKind: this.runtimeInfo.model_kind,
162
- });
163
- // Bind cache controller if provided and not yet bound
164
- // NOTE: instanceof guard means VLM check only covers MlxCacheController.
165
- // A custom PromptCacheController on a VLM model would bypass this — add a
166
- // model-kind guard here if another implementation is introduced.
167
- if (this.cacheController instanceof MlxCacheController && !this.cacheControllerBound) {
168
- if (this.runtimeInfo.model_kind === 'vlm') {
169
- this.queryLogger.log.info('VLM models do not support prompt caching — cacheController disabled');
170
- this.cacheController = undefined;
171
- }
172
- else {
173
- await this.cacheController.bind(this.process, this.formatterOptions, (msgs) => this.modelProcessor.applyChatSpecificProcessing(msgs));
174
- this.cacheControllerBound = true;
175
- }
176
- }
177
- }
178
- catch (error) {
179
- this.queryLogger.log.error('Failed to get MLX runtime info:', error instanceof Error ? error.message : String(error));
180
- }
181
- }
182
- }
183
- /**
184
- * VLMモデルかどうかを判定
185
- */
186
- isVLM() {
187
- return this.runtimeInfo?.model_kind === 'vlm';
188
- }
189
- /**
190
- * Determine which API to use (chat or completion)
191
- * Simple logic based on runtime info only
192
- */
193
- determineApi(options) {
194
- return selectApi(options?.apiStrategy || 'auto', options?.mode, !!this.runtimeInfo?.features.apply_chat_template, this.modelProcessor.hasCompletionProcessor());
195
- }
196
- /**
197
- * モデルがnativeツール対応かを判定
198
- * tool_call_format(Python側検出結果)を唯一の判断基準とする
199
- */
200
- hasNativeToolSupport() {
201
- return !!this.runtimeInfo?.features?.chat_template?.tool_call_format?.call_start;
202
- }
203
- /**
204
- * Execute query and return stream
205
- * Common logic for query and streamQuery
206
- */
207
- async executeQuery(prompt, mlxOptions, options) {
208
- // APIを選択
209
- const api = this.determineApi(options);
210
- // tools変換
211
- const tools = options?.tools ? convertToolDefinitions(options.tools) : undefined;
212
- // completion API または nativeツール非対応の場合、tool定義をテキストとしてプロンプトに注入
213
- let augmentedPrompt = prompt;
214
- if (options?.tools && options.tools.length > 0 && (api === 'completion' || !this.hasNativeToolSupport())) {
215
- const toolsText = formatToolDefinitionsAsText(options.tools, this.runtimeInfo?.special_tokens, this.runtimeInfo?.features?.chat_template?.tool_call_format);
216
- augmentedPrompt = {
217
- ...prompt,
218
- instructions: [
219
- ...prompt.instructions,
220
- { type: 'text', content: toolsText }
221
- ]
222
- };
223
- }
224
- // Record all queries, regardless of API mode or cache usage
225
- this.cacheController?.recordQuery?.();
226
- let stream;
227
- if (api === 'completion') {
228
- let formattedPrompt = formatCompletionPrompt(augmentedPrompt, this.formatterOptions);
229
- formattedPrompt = this.modelProcessor.applyCompletionSpecificProcessing(formattedPrompt);
230
- stream = await this.process.completion(formattedPrompt, mlxOptions);
231
- }
232
- else {
233
- const messages = formatPromptAsMessages(augmentedPrompt, this.formatterOptions);
234
- const vlm = this.isVLM();
235
- let mlxMessages = convertMessages(messages, vlm);
236
- mlxMessages = this.modelProcessor.applyChatSpecificProcessing(mlxMessages);
237
- const nativeTools = this.hasNativeToolSupport() && tools?.length ? tools : undefined;
238
- const images = vlm
239
- ? messages.flatMap(m => 'content' in m && !isToolResult(m) ? extractImagePaths(m.content) : [])
240
- : [];
241
- // Cache: chat APIのみ、以下の条件を全て満たす場合にキャッシュを使用
242
- // - options.cache !== false(呼び出し側が明示的に無効化していない)
243
- // - trustRemoteCode未指定(明示的なtrue/falseどちらもapply_chat_template kwargsに影響)
244
- let cachePath;
245
- let cacheTrimTokens;
246
- let cacheWriteTokens = 0;
247
- const cacheGrowthBefore = this.cacheController instanceof MlxCacheController
248
- ? this.cacheController.getStats().cacheGrowthTokens
249
- : 0;
250
- const trustRemoteCode = mlxOptions.trustRemoteCode;
251
- if (this.cacheController && options?.cache !== false && trustRemoteCode === undefined) {
252
- const prefix = extractCacheablePrefix(augmentedPrompt);
253
- const hasCacheableContent = prefix.instructions.length > 0 ||
254
- prefix.data.length > 0;
255
- if (hasCacheableContent) {
256
- const cacheStart = performance.now();
257
- const handle = await this.cacheController.prepare({
258
- model: this.model,
259
- instructions: prefix.instructions,
260
- data: prefix.data,
261
- tools: nativeTools ? options.tools : undefined,
262
- reasoningEffort: options?.reasoningEffort,
263
- readOnly: options?.cache === 'read-only',
264
- });
265
- cachePath = handle.ref || undefined;
266
- cacheTrimTokens = handle.trimTokens;
267
- if (cachePath) {
268
- this.queryLogger.log.debug(`cache prepare ${(performance.now() - cacheStart).toFixed(0)}ms`, `(${prefix.instructions.length}i+${prefix.data.length}d)`, cacheTrimTokens != null ? `trim=${cacheTrimTokens}` : '');
269
- }
270
- }
271
- }
272
- if (this.cacheController instanceof MlxCacheController) {
273
- cacheWriteTokens = Math.max(0, this.cacheController.getStats().cacheGrowthTokens - cacheGrowthBefore);
274
- }
275
- stream = await this.process.chat(mlxMessages, undefined, mlxOptions, nativeTools, images.length > 0 ? images : undefined, images.length > 0 ? this.maxImageSize : undefined, options?.reasoningEffort, cachePath, cacheTrimTokens);
276
- const cacheTokensUsed = cachePath
277
- ? (cacheTrimTokens ?? (this.cacheController instanceof MlxCacheController
278
- ? this.cacheController.readCacheTokenCount(cachePath) : 0))
279
- : 0;
280
- return { stream, cacheTokensUsed, cacheWriteTokens };
281
- }
282
- return { stream, cacheTokensUsed: 0, cacheWriteTokens: 0 };
283
- }
284
- /**
285
- * Query the AI model with a compiled prompt
286
- */
287
- async query(prompt, options) {
288
- // Use streamQuery for consistency with other drivers
289
- const { stream, result } = await this.streamQuery(prompt, options);
290
- // Consume the stream to trigger completion
291
- // This is necessary because the result promise only resolves when the stream is fully consumed
292
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
293
- for await (const _chunk of stream) {
294
- // Just consume the stream, don't need to do anything with the chunks
295
- }
296
- return result;
50
+ get defaultOptions() {
51
+ return super.defaultOptions;
297
52
  }
298
- /**
299
- * Stream query implementation
300
- */
301
- async streamQuery(prompt, options) {
302
- await this.ensureInitialized();
303
- const signal = options?.signal;
304
- if (isAborted(signal)) {
305
- return createAbortedStreamResult(this.queryLogger.collect());
306
- }
307
- let abortRequested = false;
308
- const cleanupAbort = watchAbortSignal(signal, () => {
309
- abortRequested = true;
310
- this.process.cancelActiveRequest();
311
- });
312
- const checkAborted = () => abortRequested || isAborted(signal);
313
- // Merge options (only override if explicitly provided)
314
- const mlxOptions = {
315
- ...this.defaultOptions,
316
- ...(options?.maxTokens !== undefined && { maxTokens: options.maxTokens }),
317
- ...(options?.temperature !== undefined && { temperature: options.temperature }),
318
- ...(options?.topP !== undefined && { topP: options.topP }),
319
- ...(options?.topK !== undefined && { topK: options.topK }),
320
- };
321
- this.queryLogger.mark(mlxOptions);
322
- const queryStart = performance.now();
323
- const { stream, cacheTokensUsed, cacheWriteTokens } = await this.executeQuery(prompt, mlxOptions, options);
324
- if (checkAborted()) {
325
- this.process.cancelActiveRequest();
326
- }
327
- const streamStart = performance.now();
328
- this.queryLogger.log.debug(`setup ${(streamStart - queryStart).toFixed(0)}ms`);
329
- const { iterable, completion } = createStreamIterable(stream, checkAborted);
330
- const queryLogger = this.queryLogger;
331
- let firstChunkTime = 0;
332
- const wrappedIterable = {
333
- [Symbol.asyncIterator]() {
334
- const inner = iterable[Symbol.asyncIterator]();
335
- let firstChunk = true;
336
- return {
337
- async next() {
338
- if (checkAborted()) {
339
- void inner.return?.();
340
- return { done: true, value: undefined };
341
- }
342
- const result = await inner.next();
343
- if (!result.done) {
344
- if (firstChunk) {
345
- firstChunk = false;
346
- firstChunkTime = performance.now();
347
- queryLogger.log.debug(`TTFT ${(firstChunkTime - streamStart).toFixed(0)}ms`);
348
- }
349
- }
350
- if (result.done) {
351
- const now = performance.now();
352
- if (firstChunkTime > 0) {
353
- const genMs = now - firstChunkTime;
354
- queryLogger.log.debug(`generation ${genMs.toFixed(0)}ms (query total ${(now - queryStart).toFixed(0)}ms)`);
355
- }
356
- else {
357
- queryLogger.log.debug(`query total ${(performance.now() - queryStart).toFixed(0)}ms`);
358
- }
359
- }
360
- return result;
361
- },
362
- async return(value) {
363
- cleanupAbort();
364
- return inner.return?.(value) ?? { done: true, value: undefined };
365
- },
366
- async throw(e) {
367
- cleanupAbort();
368
- return inner.throw?.(e) ?? { done: true, value: undefined };
369
- },
370
- };
371
- },
372
- };
373
- const cacheController = this.cacheController;
374
- const resultPromise = completion
375
- .then(({ content, meta, error }) => {
376
- const aborted = checkAborted();
377
- if (error && !aborted) {
378
- this.queryLogger.log.error('Stream error:', error.message);
379
- throw error;
380
- }
381
- if (cacheController instanceof MlxCacheController && meta.prompt_tokens != null) {
382
- cacheController.recordPromptTokens(meta.prompt_tokens, cacheTokensUsed);
383
- }
384
- if (meta.generation_tokens != null && firstChunkTime > 0) {
385
- const genMs = performance.now() - firstChunkTime;
386
- const actualTps = (meta.generation_tokens / genMs * 1000).toFixed(1);
387
- this.queryLogger.log.debug(`${meta.generation_tokens} tokens, ${actualTps} tok/s`);
388
- }
389
- const hasTools = options?.tools && options.tools.length > 0;
390
- const responseProcessor = selectResponseProcessor(this.model, this.runtimeInfo, { enableToolParsing: !!hasTools });
391
- const parsed = responseProcessor(content);
392
- const finalContent = parsed.content;
393
- const thinkingContent = parsed.thinkingContent;
394
- const toolCalls = parsed.toolCalls;
395
- if (thinkingContent) {
396
- this.queryLogger.log.verbose('Thinking content:', thinkingContent);
397
- }
398
- let structuredOutput;
399
- if (prompt.metadata?.outputSchema && finalContent) {
400
- const extracted = extractJSON(finalContent, { multiple: false });
401
- if (extracted.source !== 'none' && extracted.data !== null) {
402
- structuredOutput = extracted.data;
403
- }
404
- }
405
- const finishReason = aborted
406
- ? 'error'
407
- : toolCalls
408
- ? 'tool_calls'
409
- : 'stop';
410
- return {
411
- content: finalContent,
412
- thinkingContent,
413
- structuredOutput,
414
- toolCalls,
415
- finishReason,
416
- usage: buildQueryUsage({
417
- promptTokens: meta.prompt_tokens,
418
- completionTokens: meta.generation_tokens,
419
- cacheReadTokens: cacheTokensUsed,
420
- cacheWriteTokens,
421
- }),
422
- ...this.queryLogger.collect(),
423
- };
424
- })
425
- .finally(() => {
426
- cleanupAbort();
427
- });
428
- return {
429
- stream: wrappedIterable,
430
- result: resultPromise,
431
- };
53
+ set defaultOptions(value) {
54
+ super.defaultOptions = value ?? {};
432
55
  }
433
56
  /**
434
57
  * Get model capabilities (public API)
@@ -437,51 +60,62 @@ export class MlxDriver {
437
60
  */
438
61
  async getCapabilities() {
439
62
  await this.ensureInitialized();
440
- if (!this.runtimeInfo) {
63
+ const runtimeInfo = this.getRuntimeInfo();
64
+ if (!runtimeInfo) {
441
65
  throw new Error('Failed to retrieve model capabilities');
442
66
  }
443
- // Convert snake_case to camelCase
444
67
  return {
445
- methods: this.runtimeInfo.methods,
446
- specialTokens: this.runtimeInfo.special_tokens,
68
+ methods: runtimeInfo.methods,
69
+ specialTokens: runtimeInfo.special_tokens,
447
70
  features: {
448
- hasChatTemplate: this.runtimeInfo.features.apply_chat_template,
449
- vocabSize: this.runtimeInfo.features.vocab_size,
450
- modelMaxLength: this.runtimeInfo.features.model_max_length,
451
- chatTemplate: this.runtimeInfo.features.chat_template ? {
452
- supportedRoles: this.runtimeInfo.features.chat_template.supported_roles,
453
- preview: this.runtimeInfo.features.chat_template.preview,
454
- constraints: this.runtimeInfo.features.chat_template.constraints,
455
- toolCallFormat: this.runtimeInfo.features.chat_template.tool_call_format ? {
456
- toolParserType: this.runtimeInfo.features.chat_template.tool_call_format.tool_parser_type,
457
- callStart: this.runtimeInfo.features.chat_template.tool_call_format.call_start,
458
- callEnd: this.runtimeInfo.features.chat_template.tool_call_format.call_end,
459
- responseStart: this.runtimeInfo.features.chat_template.tool_call_format.response_start,
460
- responseEnd: this.runtimeInfo.features.chat_template.tool_call_format.response_end,
461
- } : undefined
462
- } : undefined
71
+ hasChatTemplate: runtimeInfo.features.apply_chat_template,
72
+ vocabSize: runtimeInfo.features.vocab_size,
73
+ modelMaxLength: runtimeInfo.features.model_max_length,
74
+ chatTemplate: runtimeInfo.features.chat_template
75
+ ? {
76
+ supportedRoles: runtimeInfo.features.chat_template.supported_roles,
77
+ preview: runtimeInfo.features.chat_template.preview,
78
+ constraints: runtimeInfo.features.chat_template.constraints,
79
+ toolCallFormat: runtimeInfo.features.chat_template.tool_call_format
80
+ ? {
81
+ toolParserType: runtimeInfo.features.chat_template.tool_call_format.tool_parser_type,
82
+ callStart: runtimeInfo.features.chat_template.tool_call_format.call_start,
83
+ callEnd: runtimeInfo.features.chat_template.tool_call_format.call_end,
84
+ responseStart: runtimeInfo.features.chat_template.tool_call_format.response_start,
85
+ responseEnd: runtimeInfo.features.chat_template.tool_call_format.response_end,
86
+ }
87
+ : undefined,
88
+ }
89
+ : undefined,
463
90
  },
464
- chatRestrictions: this.runtimeInfo.chat_restrictions ? {
465
- singleSystemAtStart: this.runtimeInfo.chat_restrictions.single_system_at_start,
466
- maxSystemMessages: this.runtimeInfo.chat_restrictions.max_system_messages,
467
- alternatingTurns: this.runtimeInfo.chat_restrictions.alternating_turns,
468
- requiresUserLast: this.runtimeInfo.chat_restrictions.requires_user_last,
469
- allowEmptyMessages: this.runtimeInfo.chat_restrictions.allow_empty_messages,
470
- } : undefined
91
+ chatRestrictions: runtimeInfo.chat_restrictions
92
+ ? {
93
+ singleSystemAtStart: runtimeInfo.chat_restrictions.single_system_at_start,
94
+ maxSystemMessages: runtimeInfo.chat_restrictions.max_system_messages,
95
+ alternatingTurns: runtimeInfo.chat_restrictions.alternating_turns,
96
+ requiresUserLast: runtimeInfo.chat_restrictions.requires_user_last,
97
+ allowEmptyMessages: runtimeInfo.chat_restrictions.allow_empty_messages,
98
+ }
99
+ : undefined,
471
100
  };
472
101
  }
102
+ async close() {
103
+ this.logCacheStats();
104
+ if (this.cacheDisabledForVlm) {
105
+ await this.cacheControllerRaw?.close();
106
+ }
107
+ await super.close();
108
+ }
473
109
  logCacheStats() {
474
- if (!(this.cacheController instanceof MlxCacheController))
110
+ if (this.cacheDisabledForVlm)
111
+ return;
112
+ if (!(this.cacheControllerRaw instanceof MlxCacheController))
475
113
  return;
476
- const s = this.cacheController.getStats();
114
+ const s = this.cacheControllerRaw.getStats();
477
115
  if (s.totalQueries === 0)
478
116
  return;
479
- const queryBreakdown = s.incremental + s.fresh > 0
480
- ? ` (incremental ${s.incremental}, fresh ${s.fresh})`
481
- : '';
482
- const parts = [
483
- `cache stats: ${s.totalQueries} queries${queryBreakdown}`,
484
- ];
117
+ const queryBreakdown = s.incremental + s.fresh > 0 ? ` (incremental ${s.incremental}, fresh ${s.fresh})` : '';
118
+ const parts = [`cache stats: ${s.totalQueries} queries${queryBreakdown}`];
485
119
  if (s.totalPromptTokens > 0) {
486
120
  const reusedRate = ((s.prefillReusedTokens / s.totalPromptTokens) * 100).toFixed(0);
487
121
  parts.push(`prompt ${s.totalPromptTokens} tokens, ${s.prefillReusedTokens} reused (${reusedRate}%)`);
@@ -491,13 +125,5 @@ export class MlxDriver {
491
125
  }
492
126
  this.queryLogger.log.verbose(parts.join(' | '));
493
127
  }
494
- /**
495
- * Close the process
496
- */
497
- async close() {
498
- this.logCacheStats();
499
- await this.cacheController?.close();
500
- await this.process.exit();
501
- }
502
128
  }
503
129
  //# sourceMappingURL=mlx-driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mlx-driver.js","sourceRoot":"","sources":["../../src/mlx-ml/mlx-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mlx-driver.js","sourceRoot":"","sources":["../../src/mlx-ml/mlx-driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { LocalInferenceAdapters } from '../local-inference/adapters.js';
2
+ export declare const mlxLocalInferenceAdapters: LocalInferenceAdapters;
3
+ //# sourceMappingURL=mlx-local-inference-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlx-local-inference-adapters.d.ts","sourceRoot":"","sources":["../../src/mlx-ml/mlx-local-inference-adapters.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAE7E,eAAO,MAAM,yBAAyB,EAAE,sBAavC,CAAC"}