@modular-prompt/driver 0.12.0 → 0.13.2

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 (133) hide show
  1. package/dist/anthropic/anthropic-driver.d.ts +38 -8
  2. package/dist/anthropic/anthropic-driver.d.ts.map +1 -1
  3. package/dist/anthropic/anthropic-driver.js +180 -164
  4. package/dist/anthropic/anthropic-driver.js.map +1 -1
  5. package/dist/cache-controller.d.ts +31 -0
  6. package/dist/cache-controller.d.ts.map +1 -0
  7. package/dist/cache-controller.js +2 -0
  8. package/dist/cache-controller.js.map +1 -0
  9. package/dist/cache-utils.d.ts +20 -0
  10. package/dist/cache-utils.d.ts.map +1 -0
  11. package/dist/cache-utils.js +71 -0
  12. package/dist/cache-utils.js.map +1 -0
  13. package/dist/content-utils.d.ts.map +1 -1
  14. package/dist/content-utils.js +20 -0
  15. package/dist/content-utils.js.map +1 -1
  16. package/dist/driver-registry/config-based-factory.d.ts.map +1 -1
  17. package/dist/driver-registry/config-based-factory.js +7 -0
  18. package/dist/driver-registry/config-based-factory.js.map +1 -1
  19. package/dist/driver-registry/factory-helper.d.ts.map +1 -1
  20. package/dist/driver-registry/factory-helper.js +7 -4
  21. package/dist/driver-registry/factory-helper.js.map +1 -1
  22. package/dist/driver-registry/types.d.ts +6 -0
  23. package/dist/driver-registry/types.d.ts.map +1 -1
  24. package/dist/formatter/converter.js +1 -1
  25. package/dist/formatter/converter.js.map +1 -1
  26. package/dist/google-genai/element-converter.d.ts +11 -0
  27. package/dist/google-genai/element-converter.d.ts.map +1 -0
  28. package/dist/google-genai/element-converter.js +126 -0
  29. package/dist/google-genai/element-converter.js.map +1 -0
  30. package/dist/google-genai/google-genai-cache-controller.d.ts +24 -0
  31. package/dist/google-genai/google-genai-cache-controller.d.ts.map +1 -0
  32. package/dist/google-genai/google-genai-cache-controller.js +127 -0
  33. package/dist/google-genai/google-genai-cache-controller.js.map +1 -0
  34. package/dist/google-genai/google-genai-driver.d.ts +5 -29
  35. package/dist/google-genai/google-genai-driver.d.ts.map +1 -1
  36. package/dist/google-genai/google-genai-driver.js +92 -255
  37. package/dist/google-genai/google-genai-driver.js.map +1 -1
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +3 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/mlx-ml/mlx-cache-controller.d.ts +65 -0
  43. package/dist/mlx-ml/mlx-cache-controller.d.ts.map +1 -0
  44. package/dist/mlx-ml/mlx-cache-controller.js +624 -0
  45. package/dist/mlx-ml/mlx-cache-controller.js.map +1 -0
  46. package/dist/mlx-ml/mlx-driver.d.ts +12 -7
  47. package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
  48. package/dist/mlx-ml/mlx-driver.js +192 -124
  49. package/dist/mlx-ml/mlx-driver.js.map +1 -1
  50. package/dist/mlx-ml/mlx-message-utils.d.ts +9 -0
  51. package/dist/mlx-ml/mlx-message-utils.d.ts.map +1 -0
  52. package/dist/mlx-ml/mlx-message-utils.js +71 -0
  53. package/dist/mlx-ml/mlx-message-utils.js.map +1 -0
  54. package/dist/mlx-ml/process/index.d.ts +7 -3
  55. package/dist/mlx-ml/process/index.d.ts.map +1 -1
  56. package/dist/mlx-ml/process/index.js +22 -7
  57. package/dist/mlx-ml/process/index.js.map +1 -1
  58. package/dist/mlx-ml/process/model-handlers.d.ts +4 -59
  59. package/dist/mlx-ml/process/model-handlers.d.ts.map +1 -1
  60. package/dist/mlx-ml/process/model-handlers.js +15 -14
  61. package/dist/mlx-ml/process/model-handlers.js.map +1 -1
  62. package/dist/mlx-ml/process/model-specific.d.ts +7 -0
  63. package/dist/mlx-ml/process/model-specific.d.ts.map +1 -1
  64. package/dist/mlx-ml/process/model-specific.js +3 -0
  65. package/dist/mlx-ml/process/model-specific.js.map +1 -1
  66. package/dist/mlx-ml/process/process-communication.d.ts +3 -0
  67. package/dist/mlx-ml/process/process-communication.d.ts.map +1 -1
  68. package/dist/mlx-ml/process/process-communication.js +13 -0
  69. package/dist/mlx-ml/process/process-communication.js.map +1 -1
  70. package/dist/mlx-ml/process/queue.d.ts +5 -2
  71. package/dist/mlx-ml/process/queue.d.ts.map +1 -1
  72. package/dist/mlx-ml/process/queue.js +101 -14
  73. package/dist/mlx-ml/process/queue.js.map +1 -1
  74. package/dist/mlx-ml/process/response-processor.d.ts +10 -0
  75. package/dist/mlx-ml/process/response-processor.d.ts.map +1 -1
  76. package/dist/mlx-ml/process/response-processor.js +23 -1
  77. package/dist/mlx-ml/process/response-processor.js.map +1 -1
  78. package/dist/mlx-ml/process/types.d.ts +50 -4
  79. package/dist/mlx-ml/process/types.d.ts.map +1 -1
  80. package/dist/mlx-ml/tool-call-parser/content-parsers.d.ts +9 -0
  81. package/dist/mlx-ml/tool-call-parser/content-parsers.d.ts.map +1 -0
  82. package/dist/mlx-ml/tool-call-parser/content-parsers.js +223 -0
  83. package/dist/mlx-ml/tool-call-parser/content-parsers.js.map +1 -0
  84. package/dist/mlx-ml/tool-call-parser/detector.d.ts +16 -0
  85. package/dist/mlx-ml/tool-call-parser/detector.d.ts.map +1 -0
  86. package/dist/mlx-ml/tool-call-parser/detector.js +58 -0
  87. package/dist/mlx-ml/tool-call-parser/detector.js.map +1 -0
  88. package/dist/mlx-ml/tool-call-parser/index.d.ts +7 -0
  89. package/dist/mlx-ml/tool-call-parser/index.d.ts.map +1 -0
  90. package/dist/mlx-ml/tool-call-parser/index.js +136 -0
  91. package/dist/mlx-ml/tool-call-parser/index.js.map +1 -0
  92. package/dist/mlx-ml/tool-call-parser/tool-formatter.d.ts +8 -0
  93. package/dist/mlx-ml/tool-call-parser/tool-formatter.d.ts.map +1 -0
  94. package/dist/mlx-ml/tool-call-parser/tool-formatter.js +88 -0
  95. package/dist/mlx-ml/tool-call-parser/tool-formatter.js.map +1 -0
  96. package/dist/mlx-ml/tool-call-parser/types.d.ts +18 -0
  97. package/dist/mlx-ml/tool-call-parser/types.d.ts.map +1 -0
  98. package/dist/mlx-ml/tool-call-parser/types.js +2 -0
  99. package/dist/mlx-ml/tool-call-parser/types.js.map +1 -0
  100. package/dist/mlx-ml/tool-call-parser/utils.d.ts +5 -0
  101. package/dist/mlx-ml/tool-call-parser/utils.d.ts.map +1 -0
  102. package/dist/mlx-ml/tool-call-parser/utils.js +77 -0
  103. package/dist/mlx-ml/tool-call-parser/utils.js.map +1 -0
  104. package/dist/types.d.ts +2 -0
  105. package/dist/types.d.ts.map +1 -1
  106. package/package.json +9 -4
  107. package/src/mlx-ml/python/__main__.py +41 -449
  108. package/src/mlx-ml/python/backends/__init__.py +3 -0
  109. package/src/mlx-ml/python/backends/base.py +84 -0
  110. package/src/mlx-ml/python/backends/mlx_lm.py +202 -0
  111. package/src/mlx-ml/python/backends/mlx_vlm.py +99 -0
  112. package/src/mlx-ml/python/handlers/__init__.py +6 -0
  113. package/src/mlx-ml/python/handlers/cache.py +81 -0
  114. package/src/mlx-ml/python/handlers/capabilities.py +6 -0
  115. package/src/mlx-ml/python/handlers/chat.py +221 -0
  116. package/src/mlx-ml/python/handlers/completion.py +36 -0
  117. package/src/mlx-ml/python/handlers/format_test.py +70 -0
  118. package/src/mlx-ml/python/handlers/tokenize.py +63 -0
  119. package/src/mlx-ml/python/pyproject.toml +13 -3
  120. package/src/mlx-ml/python/server.py +126 -0
  121. package/src/mlx-ml/python/tests/__init__.py +0 -0
  122. package/src/mlx-ml/python/utils/__init__.py +0 -0
  123. package/src/mlx-ml/python/utils/prompt_builder.py +54 -0
  124. package/src/mlx-ml/python/{token_utils.py → utils/token_utils.py} +9 -40
  125. package/src/mlx-ml/python/uv.lock +266 -41
  126. package/dist/mlx-ml/tool-call-parser.d.ts +0 -30
  127. package/dist/mlx-ml/tool-call-parser.d.ts.map +0 -1
  128. package/dist/mlx-ml/tool-call-parser.js +0 -623
  129. package/dist/mlx-ml/tool-call-parser.js.map +0 -1
  130. /package/src/mlx-ml/python/{example_basic.py → examples/example_basic.py} +0 -0
  131. /package/src/mlx-ml/python/{example_tool_call.py → examples/example_tool_call.py} +0 -0
  132. /package/src/mlx-ml/python/{chat_template_constraints.py → utils/chat_template_constraints.py} +0 -0
  133. /package/src/mlx-ml/python/{vlm_utils.py → utils/vlm_utils.py} +0 -0
@@ -1,16 +1,12 @@
1
1
  import type { AIDriver, QueryOptions, QueryResult, StreamResult } from '../types.js';
2
- import type { FormatterOptions, ChatMessage } from '../formatter/types.js';
3
- import type { MlxMessage, MlxMlModelOptions, MlxModelCapabilities } from './types.js';
2
+ import type { FormatterOptions } from '../formatter/types.js';
3
+ import type { MlxMlModelOptions, MlxModelCapabilities } from './types.js';
4
4
  import type { CompiledPrompt } from '@modular-prompt/core';
5
+ import type { PromptCacheController } from '../cache-controller.js';
5
6
  /**
6
7
  * Check if the prompt contains MessageElement
7
8
  */
8
9
  export declare function hasMessageElement(prompt: CompiledPrompt): boolean;
9
- /**
10
- * Convert ChatMessage format to MLX format
11
- * VLM mode preserves image placeholders as structured content parts
12
- */
13
- export declare function convertMessages(messages: ChatMessage[], vlm?: boolean): MlxMessage[];
14
10
  /**
15
11
  * MLX ML driver configuration
16
12
  */
@@ -22,6 +18,12 @@ export interface MlxDriverConfig {
22
18
  maxImageSize?: number;
23
19
  /** VLMモデルをtext-onlyモードで使用する(VLM判定を抑制) */
24
20
  textOnly?: boolean;
21
+ /** Speculative decoding用のdrafter model名 */
22
+ drafterModel?: string;
23
+ /** Speculative decoding用のdraft block size(デフォルト: モデル依存) */
24
+ draftBlockSize?: number;
25
+ /** 外部で生成したキャッシュコントローラー */
26
+ cacheController?: PromptCacheController;
25
27
  }
26
28
  /**
27
29
  * MLX ML driver using Python subprocess
@@ -35,6 +37,8 @@ export declare class MlxDriver implements AIDriver {
35
37
  private formatterOptions;
36
38
  private maxImageSize;
37
39
  private queryLogger;
40
+ private cacheController?;
41
+ private cacheControllerBound;
38
42
  get defaultOptions(): Partial<MlxMlModelOptions>;
39
43
  set defaultOptions(value: Partial<MlxMlModelOptions>);
40
44
  constructor(config: MlxDriverConfig);
@@ -75,6 +79,7 @@ export declare class MlxDriver implements AIDriver {
75
79
  * Returns runtime information converted to camelCase
76
80
  */
77
81
  getCapabilities(): Promise<MlxModelCapabilities>;
82
+ private logCacheStats;
78
83
  /**
79
84
  * Close the process
80
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mlx-driver.d.ts","sourceRoot":"","sources":["../../src/mlx-ml/mlx-driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAA0C,MAAM,aAAa,CAAC;AAE7H,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI3E,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,EAAkB,MAAM,YAAY,CAAC;AAItG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAwB3D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAYjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,GAAE,OAAe,GAAG,UAAU,EAAE,CAuD3F;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAsCD;;GAEG;AACH,qBAAa,SAAU,YAAW,QAAQ;IACxC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAA0B;IAE7C,IAAI,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAE/C;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAEnD;gBAEW,MAAM,EAAE,eAAe;IASnC;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;;OAGG;IACH,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;YACW,YAAY;IAwD1B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAajF;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,YAAY,CAAC;IAkFxB;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAsCtD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"mlx-driver.d.ts","sourceRoot":"","sources":["../../src/mlx-ml/mlx-driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAgB,MAAM,aAAa,CAAC;AAEnG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAI1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAQpE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAYjE;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAyED;;GAEG;AACH,qBAAa,SAAU,YAAW,QAAQ;IACxC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,eAAe,CAAC,CAAwB;IAChD,OAAO,CAAC,oBAAoB,CAAS;IAErC,IAAI,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAE/C;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAEnD;gBAEW,MAAM,EAAE,eAAe;IAiBnC;;OAEG;YACW,iBAAiB;IA2C/B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;;OAGG;IACH,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;YACW,YAAY;IA2F1B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAajF;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,YAAY,CAAC;IA2HxB;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAsCtD,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
@@ -1,29 +1,18 @@
1
- import { hasToolCalls, isToolResult } from '../types.js';
1
+ import { isToolResult } from '../types.js';
2
2
  import { formatPromptAsMessages } from '../formatter/converter.js';
3
3
  import { formatCompletionPrompt } from '../formatter/completion-formatter.js';
4
4
  import { MlxProcess } from './process/index.js';
5
5
  import { createModelSpecificProcessor, selectApi } from './process/model-specific.js';
6
6
  import { selectResponseProcessor } from './process/model-handlers.js';
7
7
  import { extractJSON } from '@modular-prompt/utils';
8
- import { parseToolCalls, formatToolDefinitionsAsText } from './tool-call-parser.js';
9
- import { contentToString, extractImagePaths, extractThinkingContent } from '../content-utils.js';
8
+ import { formatToolDefinitionsAsText } from './tool-call-parser/index.js';
9
+ import { convertMessages, convertToolDefinitions, extractImagePaths } from './mlx-message-utils.js';
10
10
  import { QueryLogger } from '../query-logger.js';
11
+ import { extractCacheablePrefix } from '../cache-utils.js';
12
+ import { MlxCacheController } from './mlx-cache-controller.js';
11
13
  // ========================================================================
12
14
  // Utility Functions (exported for testing)
13
15
  // ========================================================================
14
- /**
15
- * Convert ToolDefinition to MlxToolDefinition
16
- */
17
- function convertToolDefinitions(tools) {
18
- return tools.map(tool => ({
19
- type: 'function',
20
- function: {
21
- name: tool.name,
22
- description: tool.description,
23
- parameters: tool.parameters
24
- }
25
- }));
26
- }
27
16
  /**
28
17
  * Check if the prompt contains MessageElement
29
18
  */
@@ -40,91 +29,61 @@ export function hasMessageElement(prompt) {
40
29
  checkElements(prompt.data) ||
41
30
  checkElements(prompt.output);
42
31
  }
43
- /**
44
- * Convert ChatMessage format to MLX format
45
- * VLM mode preserves image placeholders as structured content parts
46
- */
47
- export function convertMessages(messages, vlm = false) {
48
- return messages.map(msg => {
49
- // AssistantToolCallMessage - tool_calls付きメッセージ
50
- if (hasToolCalls(msg)) {
51
- return {
52
- role: 'assistant',
53
- content: msg.content,
54
- tool_calls: msg.toolCalls.map(tc => ({
55
- id: tc.id,
56
- type: 'function',
57
- function: {
58
- name: tc.name,
59
- arguments: JSON.stringify(tc.arguments)
60
- }
61
- }))
62
- };
63
- }
64
- // ToolResultMessage - ツール結果メッセージ
65
- if (isToolResult(msg)) {
66
- let content;
67
- if (msg.kind === 'text') {
68
- content = String(msg.value);
69
- }
70
- else if (msg.kind === 'data') {
71
- content = JSON.stringify(msg.value);
72
- }
73
- else {
74
- content = String(msg.value);
75
- }
76
- return {
77
- role: 'tool',
78
- content,
79
- tool_call_id: msg.toolCallId,
80
- name: msg.name
81
- };
82
- }
83
- // StandardChatMessage - 通常メッセージ(VLM対応含む)
84
- if (vlm && Array.isArray(msg.content)) {
85
- const parts = [];
86
- for (const att of msg.content) {
87
- if (att.type === 'image_url' && att.image_url?.url) {
88
- parts.push({ type: 'image' });
89
- }
90
- else if (att.type === 'text' && att.text) {
91
- parts.push({ type: 'text', text: att.text });
92
- }
93
- }
94
- if (parts.length > 0) {
95
- return { role: msg.role, content: parts };
96
- }
97
- }
98
- return {
99
- role: msg.role,
100
- content: contentToString(msg.content)
101
- };
102
- });
32
+ const META_MARKER = '\x1e__META__:';
33
+ function extractStreamMeta(content) {
34
+ const idx = content.lastIndexOf(META_MARKER);
35
+ if (idx === -1)
36
+ return { content, meta: {} };
37
+ const jsonStr = content.slice(idx + META_MARKER.length);
38
+ try {
39
+ return { content: content.slice(0, idx), meta: JSON.parse(jsonStr) };
40
+ }
41
+ catch {
42
+ return { content: content.slice(0, idx), meta: {} };
43
+ }
103
44
  }
104
- /**
105
- * Creates an async iterable from a readable stream with content collection
106
- */
107
45
  function createStreamIterable(stream) {
108
46
  const chunks = [];
109
47
  let resolveCompletion;
110
48
  const completion = new Promise((resolve) => {
111
49
  resolveCompletion = resolve;
112
50
  });
113
- // Create async iterable that collects chunks and handles completion
114
51
  const iterable = {
115
52
  async *[Symbol.asyncIterator]() {
116
53
  try {
54
+ let buffer = '';
55
+ let markerFound = false;
117
56
  for await (const chunk of stream) {
118
57
  const str = chunk.toString();
119
58
  chunks.push(str);
120
- yield str;
59
+ if (markerFound)
60
+ continue;
61
+ buffer += str;
62
+ const markerIdx = buffer.indexOf(META_MARKER);
63
+ if (markerIdx !== -1) {
64
+ const text = buffer.slice(0, markerIdx);
65
+ if (text)
66
+ yield text;
67
+ markerFound = true;
68
+ }
69
+ else {
70
+ const safeLen = buffer.length - (META_MARKER.length - 1);
71
+ if (safeLen > 0) {
72
+ yield buffer.slice(0, safeLen);
73
+ buffer = buffer.slice(safeLen);
74
+ }
75
+ }
121
76
  }
122
- // Stream ended successfully
123
- resolveCompletion({ content: chunks.join(''), error: null });
77
+ if (!markerFound && buffer)
78
+ yield buffer;
79
+ const raw = chunks.join('');
80
+ const { content, meta } = extractStreamMeta(raw);
81
+ resolveCompletion({ content, meta, error: null });
124
82
  }
125
83
  catch (error) {
126
- // Stream errored
127
- resolveCompletion({ content: chunks.join(''), error: error });
84
+ const raw = chunks.join('');
85
+ const { content, meta } = extractStreamMeta(raw);
86
+ resolveCompletion({ content, meta, error: error });
128
87
  throw error;
129
88
  }
130
89
  }
@@ -143,6 +102,8 @@ export class MlxDriver {
143
102
  formatterOptions;
144
103
  maxImageSize;
145
104
  queryLogger = new QueryLogger('MLX');
105
+ cacheController;
106
+ cacheControllerBound = false;
146
107
  get defaultOptions() {
147
108
  return this._defaultOptions;
148
109
  }
@@ -154,8 +115,16 @@ export class MlxDriver {
154
115
  this._defaultOptions = config.defaultOptions || {};
155
116
  this.formatterOptions = config.formatterOptions || {};
156
117
  this.maxImageSize = config.maxImageSize ?? 768;
157
- this.process = new MlxProcess(config.model, { textOnly: config.textOnly });
118
+ this.process = new MlxProcess(config.model, {
119
+ textOnly: config.textOnly,
120
+ drafterModel: config.drafterModel,
121
+ draftBlockSize: config.draftBlockSize
122
+ });
158
123
  this.modelProcessor = createModelSpecificProcessor(config.model);
124
+ this.cacheController = config.cacheController;
125
+ if (config.drafterModel) {
126
+ this.queryLogger.log.info(`Drafter model: ${config.drafterModel}`);
127
+ }
159
128
  }
160
129
  /**
161
130
  * Initialize process and cache runtime info
@@ -176,6 +145,20 @@ export class MlxDriver {
176
145
  chatRestrictions: this.runtimeInfo.chat_restrictions,
177
146
  modelKind: this.runtimeInfo.model_kind,
178
147
  });
148
+ // Bind cache controller if provided and not yet bound
149
+ // NOTE: instanceof guard means VLM check only covers MlxCacheController.
150
+ // A custom PromptCacheController on a VLM model would bypass this — add a
151
+ // model-kind guard here if another implementation is introduced.
152
+ if (this.cacheController instanceof MlxCacheController && !this.cacheControllerBound) {
153
+ if (this.runtimeInfo.model_kind === 'vlm') {
154
+ this.queryLogger.log.info('VLM models do not support prompt caching — cacheController disabled');
155
+ this.cacheController = undefined;
156
+ }
157
+ else {
158
+ await this.cacheController.bind(this.process, this.formatterOptions, (msgs) => this.modelProcessor.applyChatSpecificProcessing(msgs));
159
+ this.cacheControllerBound = true;
160
+ }
161
+ }
179
162
  }
180
163
  catch (error) {
181
164
  this.queryLogger.log.error('Failed to get MLX runtime info:', error instanceof Error ? error.message : String(error));
@@ -215,7 +198,6 @@ export class MlxDriver {
215
198
  let augmentedPrompt = prompt;
216
199
  if (options?.tools && options.tools.length > 0 && (api === 'completion' || !this.hasNativeToolSupport())) {
217
200
  const toolsText = formatToolDefinitionsAsText(options.tools, this.runtimeInfo?.special_tokens, this.runtimeInfo?.features?.chat_template?.tool_call_format);
218
- // instructions の末尾にTextElementとして追加
219
201
  augmentedPrompt = {
220
202
  ...prompt,
221
203
  instructions: [
@@ -224,31 +206,57 @@ export class MlxDriver {
224
206
  ]
225
207
  };
226
208
  }
209
+ // Record all queries, regardless of API mode or cache usage
210
+ this.cacheController?.recordQuery?.();
227
211
  let stream;
228
212
  if (api === 'completion') {
229
- // completion APIを使用 - 標準フォーマッターを使用
230
- // completion APIではtools非対応
231
213
  let formattedPrompt = formatCompletionPrompt(augmentedPrompt, this.formatterOptions);
232
- // モデル固有の後処理を適用
233
214
  formattedPrompt = this.modelProcessor.applyCompletionSpecificProcessing(formattedPrompt);
234
215
  stream = await this.process.completion(formattedPrompt, mlxOptions);
235
216
  }
236
217
  else {
237
- // chat APIを使用 - メッセージ変換して処理
238
218
  const messages = formatPromptAsMessages(augmentedPrompt, this.formatterOptions);
239
219
  const vlm = this.isVLM();
240
220
  let mlxMessages = convertMessages(messages, vlm);
241
- // chat APIではチャット処理を適用
242
221
  mlxMessages = this.modelProcessor.applyChatSpecificProcessing(mlxMessages);
243
- // nativeツール対応の場合のみPythonにtoolsを渡す
244
- const nativeTools = this.hasNativeToolSupport() ? tools : undefined;
245
- // VLMの場合は画像パスを抽出(ファイル読み込み用)
222
+ const nativeTools = this.hasNativeToolSupport() && tools?.length ? tools : undefined;
246
223
  const images = vlm
247
224
  ? messages.flatMap(m => 'content' in m && !isToolResult(m) ? extractImagePaths(m.content) : [])
248
225
  : [];
249
- stream = await this.process.chat(mlxMessages, undefined, mlxOptions, nativeTools, images.length > 0 ? images : undefined, images.length > 0 ? this.maxImageSize : undefined, options?.reasoningEffort);
226
+ // Cache: chat APIのみ、以下の条件を全て満たす場合にキャッシュを使用
227
+ // - outputSchema未指定(formatPromptAsMessagesがschemaを挿入し、prefixがずれる)
228
+ // - trustRemoteCode未指定(明示的なtrue/falseどちらもapply_chat_template kwargsに影響)
229
+ let cachePath;
230
+ let cacheTrimTokens;
231
+ const trustRemoteCode = mlxOptions.trustRemoteCode;
232
+ if (this.cacheController && !augmentedPrompt.metadata?.outputSchema && trustRemoteCode === undefined) {
233
+ const prefix = extractCacheablePrefix(augmentedPrompt);
234
+ const hasCacheableContent = prefix.instructions.length > 0 ||
235
+ prefix.data.length > 0;
236
+ if (hasCacheableContent) {
237
+ const cacheStart = performance.now();
238
+ const handle = await this.cacheController.prepare({
239
+ model: this.model,
240
+ instructions: prefix.instructions,
241
+ data: prefix.data,
242
+ tools: nativeTools ? options.tools : undefined,
243
+ reasoningEffort: options?.reasoningEffort,
244
+ });
245
+ cachePath = handle.ref || undefined;
246
+ cacheTrimTokens = handle.trimTokens;
247
+ if (cachePath) {
248
+ this.queryLogger.log.debug(`cache prepare ${(performance.now() - cacheStart).toFixed(0)}ms`, `(${prefix.instructions.length}i+${prefix.data.length}d)`, cacheTrimTokens != null ? `trim=${cacheTrimTokens}` : '');
249
+ }
250
+ }
251
+ }
252
+ stream = await this.process.chat(mlxMessages, undefined, mlxOptions, nativeTools, images.length > 0 ? images : undefined, images.length > 0 ? this.maxImageSize : undefined, options?.reasoningEffort, cachePath, cacheTrimTokens);
253
+ const cacheTokensUsed = cachePath
254
+ ? (cacheTrimTokens ?? (this.cacheController instanceof MlxCacheController
255
+ ? this.cacheController.readCacheTokenCount(cachePath) : 0))
256
+ : 0;
257
+ return { stream, cacheTokensUsed };
250
258
  }
251
- return stream;
259
+ return { stream, cacheTokensUsed: 0 };
252
260
  }
253
261
  /**
254
262
  * Query the AI model with a compiled prompt
@@ -279,42 +287,79 @@ export class MlxDriver {
279
287
  };
280
288
  this.queryLogger.mark(mlxOptions);
281
289
  // Use executeQuery for the actual stream generation
282
- const stream = await this.executeQuery(prompt, mlxOptions, options);
290
+ const queryStart = performance.now();
291
+ const { stream, cacheTokensUsed } = await this.executeQuery(prompt, mlxOptions, options);
292
+ const streamStart = performance.now();
293
+ this.queryLogger.log.debug(`setup ${(streamStart - queryStart).toFixed(0)}ms`);
283
294
  // Convert stream to async iterable with collection
284
295
  const { iterable, completion } = createStreamIterable(stream);
296
+ // Wrap iterable with phase-separated timing:
297
+ // TTFT: streamStart → first chunk (inference latency, shows cache benefit)
298
+ // generation: first chunk → last chunk (output speed, tok/s)
299
+ // query total: queryStart → last chunk (end-to-end)
300
+ const queryLogger = this.queryLogger;
301
+ let firstChunkTime = 0;
302
+ const wrappedIterable = {
303
+ [Symbol.asyncIterator]() {
304
+ const inner = iterable[Symbol.asyncIterator]();
305
+ let firstChunk = true;
306
+ return {
307
+ async next() {
308
+ const result = await inner.next();
309
+ if (!result.done) {
310
+ if (firstChunk) {
311
+ firstChunk = false;
312
+ firstChunkTime = performance.now();
313
+ queryLogger.log.debug(`TTFT ${(firstChunkTime - streamStart).toFixed(0)}ms`);
314
+ }
315
+ }
316
+ if (result.done) {
317
+ const now = performance.now();
318
+ if (firstChunkTime > 0) {
319
+ const genMs = now - firstChunkTime;
320
+ queryLogger.log.debug(`generation ${genMs.toFixed(0)}ms (query total ${(now - queryStart).toFixed(0)}ms)`);
321
+ }
322
+ else {
323
+ queryLogger.log.debug(`query total ${(performance.now() - queryStart).toFixed(0)}ms`);
324
+ }
325
+ }
326
+ return result;
327
+ },
328
+ async return(value) {
329
+ return inner.return?.(value) ?? { done: true, value: undefined };
330
+ },
331
+ async throw(e) {
332
+ return inner.throw?.(e) ?? { done: true, value: undefined };
333
+ },
334
+ };
335
+ },
336
+ };
285
337
  // Create result promise that waits for stream completion
286
- const resultPromise = completion.then(({ content, error }) => {
338
+ const cacheController = this.cacheController;
339
+ const resultPromise = completion.then(({ content, meta, error }) => {
287
340
  // If there was an error, log and throw it
288
341
  if (error) {
289
342
  this.queryLogger.log.error('Stream error:', error.message);
290
343
  throw error;
291
344
  }
292
- // Response post-processing via model-specific processor
293
- const responseProcessor = selectResponseProcessor(this.model, this.runtimeInfo);
294
- let finalContent = content;
295
- let thinkingContent;
296
- let toolCalls;
297
- if (responseProcessor) {
298
- const parsed = responseProcessor(content);
299
- finalContent = parsed.content;
300
- thinkingContent = parsed.thinkingContent;
301
- toolCalls = parsed.toolCalls;
345
+ if (cacheController instanceof MlxCacheController && meta.prompt_tokens != null) {
346
+ cacheController.recordPromptTokens(meta.prompt_tokens, cacheTokensUsed);
302
347
  }
303
- else {
304
- // Legacy flow: tool call detection only
305
- if (options?.tools && options.tools.length > 0) {
306
- const parseResult = parseToolCalls(content, this.runtimeInfo);
307
- if (parseResult.toolCalls.length > 0) {
308
- toolCalls = parseResult.toolCalls;
309
- finalContent = parseResult.content;
310
- }
311
- }
348
+ // Log accurate generation stats if available
349
+ if (meta.generation_tokens != null && firstChunkTime > 0) {
350
+ const genMs = performance.now() - firstChunkTime;
351
+ const actualTps = (meta.generation_tokens / genMs * 1000).toFixed(1);
352
+ this.queryLogger.log.debug(`${meta.generation_tokens} tokens, ${actualTps} tok/s`);
312
353
  }
313
- // Extract <think> tags if not already handled by responseProcessor
314
- if (!thinkingContent) {
315
- const extracted = extractThinkingContent(finalContent);
316
- finalContent = extracted.content;
317
- thinkingContent = extracted.thinkingContent;
354
+ // Response post-processing: thinking抽出 + tool call解析
355
+ const hasTools = options?.tools && options.tools.length > 0;
356
+ const responseProcessor = selectResponseProcessor(this.model, this.runtimeInfo, { enableToolParsing: !!hasTools });
357
+ const parsed = responseProcessor(content);
358
+ let finalContent = parsed.content;
359
+ const thinkingContent = parsed.thinkingContent;
360
+ const toolCalls = parsed.toolCalls;
361
+ if (thinkingContent) {
362
+ this.queryLogger.log.verbose('Thinking content:', thinkingContent);
318
363
  }
319
364
  // Handle structured output if schema is provided
320
365
  let structuredOutput;
@@ -335,7 +380,7 @@ export class MlxDriver {
335
380
  };
336
381
  });
337
382
  return {
338
- stream: iterable,
383
+ stream: wrappedIterable,
339
384
  result: resultPromise
340
385
  };
341
386
  }
@@ -379,10 +424,33 @@ export class MlxDriver {
379
424
  } : undefined
380
425
  };
381
426
  }
427
+ logCacheStats() {
428
+ if (!(this.cacheController instanceof MlxCacheController))
429
+ return;
430
+ const s = this.cacheController.getStats();
431
+ if (s.totalQueries === 0)
432
+ return;
433
+ const queryBreakdown = s.incremental + s.fresh > 0
434
+ ? ` (incremental ${s.incremental}, fresh ${s.fresh})`
435
+ : '';
436
+ const parts = [
437
+ `cache stats: ${s.totalQueries} queries${queryBreakdown}`,
438
+ ];
439
+ if (s.totalPromptTokens > 0) {
440
+ const reusedRate = ((s.prefillReusedTokens / s.totalPromptTokens) * 100).toFixed(0);
441
+ parts.push(`prompt ${s.totalPromptTokens} tokens, ${s.prefillReusedTokens} reused (${reusedRate}%)`);
442
+ }
443
+ if (s.cacheGrowthTokens > 0) {
444
+ parts.push(`cache +${s.cacheGrowthTokens} tokens`);
445
+ }
446
+ this.queryLogger.log.verbose(parts.join(' | '));
447
+ }
382
448
  /**
383
449
  * Close the process
384
450
  */
385
451
  async close() {
452
+ this.logCacheStats();
453
+ await this.cacheController?.close();
386
454
  await this.process.exit();
387
455
  }
388
456
  }
@@ -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,9 @@
1
+ import type { ChatMessage } from '../formatter/types.js';
2
+ import type { ToolDefinition } from '../types.js';
3
+ import type { MlxMessage } from './types.js';
4
+ import type { MlxToolDefinition } from './process/types.js';
5
+ import { extractImagePaths } from '../content-utils.js';
6
+ export { extractImagePaths };
7
+ export declare function convertToolDefinitions(tools: ToolDefinition[]): MlxToolDefinition[];
8
+ export declare function convertMessages(messages: ChatMessage[], vlm?: boolean): MlxMessage[];
9
+ //# sourceMappingURL=mlx-message-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mlx-message-utils.d.ts","sourceRoot":"","sources":["../../src/mlx-ml/mlx-message-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAmB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,iBAAiB,EAAE,CASnF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,GAAE,OAAe,GAAG,UAAU,EAAE,CAuD3F"}
@@ -0,0 +1,71 @@
1
+ import { hasToolCalls, isToolResult } from '../types.js';
2
+ import { contentToString, extractImagePaths } from '../content-utils.js';
3
+ export { extractImagePaths };
4
+ export function convertToolDefinitions(tools) {
5
+ return tools.map(tool => ({
6
+ type: 'function',
7
+ function: {
8
+ name: tool.name,
9
+ description: tool.description,
10
+ parameters: tool.parameters
11
+ }
12
+ }));
13
+ }
14
+ export function convertMessages(messages, vlm = false) {
15
+ return messages.map(msg => {
16
+ // AssistantToolCallMessage - tool_calls付きメッセージ
17
+ if (hasToolCalls(msg)) {
18
+ return {
19
+ role: 'assistant',
20
+ content: msg.content,
21
+ tool_calls: msg.toolCalls.map(tc => ({
22
+ id: tc.id,
23
+ type: 'function',
24
+ function: {
25
+ name: tc.name,
26
+ arguments: JSON.stringify(tc.arguments)
27
+ }
28
+ }))
29
+ };
30
+ }
31
+ // ToolResultMessage - ツール結果メッセージ
32
+ if (isToolResult(msg)) {
33
+ let content;
34
+ if (msg.kind === 'text') {
35
+ content = String(msg.value);
36
+ }
37
+ else if (msg.kind === 'data') {
38
+ content = JSON.stringify(msg.value);
39
+ }
40
+ else {
41
+ content = String(msg.value);
42
+ }
43
+ return {
44
+ role: 'tool',
45
+ content,
46
+ tool_call_id: msg.toolCallId,
47
+ name: msg.name
48
+ };
49
+ }
50
+ // StandardChatMessage - 通常メッセージ(VLM対応含む)
51
+ if (vlm && Array.isArray(msg.content)) {
52
+ const parts = [];
53
+ for (const att of msg.content) {
54
+ if (att.type === 'image_url' && att.image_url?.url) {
55
+ parts.push({ type: 'image' });
56
+ }
57
+ else if (att.type === 'text' && att.text) {
58
+ parts.push({ type: 'text', text: att.text });
59
+ }
60
+ }
61
+ if (parts.length > 0) {
62
+ return { role: msg.role, content: parts };
63
+ }
64
+ }
65
+ return {
66
+ role: msg.role,
67
+ content: contentToString(msg.content)
68
+ };
69
+ });
70
+ }
71
+ //# sourceMappingURL=mlx-message-utils.js.map