@modular-prompt/driver 0.11.15 → 0.13.1
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.
- package/README.md +25 -0
- package/dist/anthropic/anthropic-driver.d.ts +38 -8
- package/dist/anthropic/anthropic-driver.d.ts.map +1 -1
- package/dist/anthropic/anthropic-driver.js +180 -164
- package/dist/anthropic/anthropic-driver.js.map +1 -1
- package/dist/cache-controller.d.ts +28 -0
- package/dist/cache-controller.d.ts.map +1 -0
- package/dist/cache-controller.js +2 -0
- package/dist/cache-controller.js.map +1 -0
- package/dist/cache-utils.d.ts +20 -0
- package/dist/cache-utils.d.ts.map +1 -0
- package/dist/cache-utils.js +71 -0
- package/dist/cache-utils.js.map +1 -0
- package/dist/content-utils.d.ts +9 -0
- package/dist/content-utils.d.ts.map +1 -1
- package/dist/content-utils.js +47 -0
- package/dist/content-utils.js.map +1 -1
- package/dist/driver-registry/config-based-factory.d.ts.map +1 -1
- package/dist/driver-registry/config-based-factory.js +7 -0
- package/dist/driver-registry/config-based-factory.js.map +1 -1
- package/dist/driver-registry/factory-helper.d.ts.map +1 -1
- package/dist/driver-registry/factory-helper.js +7 -4
- package/dist/driver-registry/factory-helper.js.map +1 -1
- package/dist/driver-registry/types.d.ts +6 -0
- package/dist/driver-registry/types.d.ts.map +1 -1
- package/dist/formatter/converter.js +1 -1
- package/dist/formatter/converter.js.map +1 -1
- package/dist/google-genai/element-converter.d.ts +11 -0
- package/dist/google-genai/element-converter.d.ts.map +1 -0
- package/dist/google-genai/element-converter.js +126 -0
- package/dist/google-genai/element-converter.js.map +1 -0
- package/dist/google-genai/google-genai-cache-controller.d.ts +24 -0
- package/dist/google-genai/google-genai-cache-controller.d.ts.map +1 -0
- package/dist/google-genai/google-genai-cache-controller.js +127 -0
- package/dist/google-genai/google-genai-cache-controller.js.map +1 -0
- package/dist/google-genai/google-genai-driver.d.ts +5 -29
- package/dist/google-genai/google-genai-driver.d.ts.map +1 -1
- package/dist/google-genai/google-genai-driver.js +92 -255
- package/dist/google-genai/google-genai-driver.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mlx-ml/mlx-cache-controller.d.ts +66 -0
- package/dist/mlx-ml/mlx-cache-controller.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-cache-controller.js +600 -0
- package/dist/mlx-ml/mlx-cache-controller.js.map +1 -0
- package/dist/mlx-ml/mlx-driver.d.ts +13 -8
- package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
- package/dist/mlx-ml/mlx-driver.js +202 -143
- package/dist/mlx-ml/mlx-driver.js.map +1 -1
- package/dist/mlx-ml/mlx-message-utils.d.ts +9 -0
- package/dist/mlx-ml/mlx-message-utils.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-message-utils.js +71 -0
- package/dist/mlx-ml/mlx-message-utils.js.map +1 -0
- package/dist/mlx-ml/process/harmony-parser.d.ts +3 -0
- package/dist/mlx-ml/process/harmony-parser.d.ts.map +1 -0
- package/dist/mlx-ml/process/harmony-parser.js +175 -0
- package/dist/mlx-ml/process/harmony-parser.js.map +1 -0
- package/dist/mlx-ml/process/index.d.ts +7 -3
- package/dist/mlx-ml/process/index.d.ts.map +1 -1
- package/dist/mlx-ml/process/index.js +22 -7
- package/dist/mlx-ml/process/index.js.map +1 -1
- package/dist/mlx-ml/process/model-handlers.d.ts +11 -58
- package/dist/mlx-ml/process/model-handlers.d.ts.map +1 -1
- package/dist/mlx-ml/process/model-handlers.js +29 -11
- package/dist/mlx-ml/process/model-handlers.js.map +1 -1
- package/dist/mlx-ml/process/model-specific.d.ts +7 -0
- package/dist/mlx-ml/process/model-specific.d.ts.map +1 -1
- package/dist/mlx-ml/process/model-specific.js +3 -0
- package/dist/mlx-ml/process/model-specific.js.map +1 -1
- package/dist/mlx-ml/process/parameter-validator.d.ts.map +1 -1
- package/dist/mlx-ml/process/parameter-validator.js +10 -3
- package/dist/mlx-ml/process/parameter-validator.js.map +1 -1
- package/dist/mlx-ml/process/process-communication.d.ts +3 -0
- package/dist/mlx-ml/process/process-communication.d.ts.map +1 -1
- package/dist/mlx-ml/process/process-communication.js +13 -0
- package/dist/mlx-ml/process/process-communication.js.map +1 -1
- package/dist/mlx-ml/process/queue.d.ts +5 -2
- package/dist/mlx-ml/process/queue.d.ts.map +1 -1
- package/dist/mlx-ml/process/queue.js +103 -15
- package/dist/mlx-ml/process/queue.js.map +1 -1
- package/dist/mlx-ml/process/response-processor.d.ts +18 -0
- package/dist/mlx-ml/process/response-processor.d.ts.map +1 -0
- package/dist/mlx-ml/process/response-processor.js +24 -0
- package/dist/mlx-ml/process/response-processor.js.map +1 -0
- package/dist/mlx-ml/process/types.d.ts +51 -4
- package/dist/mlx-ml/process/types.d.ts.map +1 -1
- package/dist/mlx-ml/tool-call-parser.d.ts.map +1 -1
- package/dist/mlx-ml/tool-call-parser.js +44 -68
- package/dist/mlx-ml/tool-call-parser.js.map +1 -1
- package/dist/mlx-ml/types.d.ts +1 -0
- package/dist/mlx-ml/types.d.ts.map +1 -1
- package/dist/openai/openai-driver.d.ts +0 -2
- package/dist/openai/openai-driver.d.ts.map +1 -1
- package/dist/openai/openai-driver.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -4
- package/src/mlx-ml/python/__main__.py +41 -425
- package/src/mlx-ml/python/backends/__init__.py +3 -0
- package/src/mlx-ml/python/backends/base.py +84 -0
- package/src/mlx-ml/python/backends/mlx_lm.py +202 -0
- package/src/mlx-ml/python/backends/mlx_vlm.py +99 -0
- package/src/mlx-ml/python/examples/example_basic.py +93 -0
- package/src/mlx-ml/python/examples/example_tool_call.py +165 -0
- package/src/mlx-ml/python/handlers/__init__.py +6 -0
- package/src/mlx-ml/python/handlers/cache.py +81 -0
- package/src/mlx-ml/python/handlers/capabilities.py +6 -0
- package/src/mlx-ml/python/handlers/chat.py +221 -0
- package/src/mlx-ml/python/handlers/completion.py +36 -0
- package/src/mlx-ml/python/handlers/format_test.py +70 -0
- package/src/mlx-ml/python/handlers/tokenize.py +63 -0
- package/src/mlx-ml/python/pyproject.toml +15 -5
- package/src/mlx-ml/python/server.py +126 -0
- package/src/mlx-ml/python/tests/__init__.py +0 -0
- package/src/mlx-ml/python/utils/__init__.py +0 -0
- package/src/mlx-ml/python/utils/prompt_builder.py +54 -0
- package/src/mlx-ml/python/{token_utils.py → utils/token_utils.py} +13 -5
- package/src/mlx-ml/python/uv.lock +299 -57
- /package/src/mlx-ml/python/{chat_template_constraints.py → utils/chat_template_constraints.py} +0 -0
- /package/src/mlx-ml/python/{vlm_utils.py → utils/vlm_utils.py} +0 -0
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mlx-message-utils.js","sourceRoot":"","sources":["../../src/mlx-ml/mlx-message-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harmony-parser.d.ts","sourceRoot":"","sources":["../../../src/mlx-ml/process/harmony-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAmBtF,eAAO,MAAM,oBAAoB,EAAE,iBAsClC,CAAC"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
const START_TOKEN = '<|start|>';
|
|
2
|
+
const END_TOKEN = '<|end|>';
|
|
3
|
+
const RETURN_TOKEN = '<|return|>';
|
|
4
|
+
const CHANNEL_TOKEN = '<|channel|>';
|
|
5
|
+
const MESSAGE_TOKEN = '<|message|>';
|
|
6
|
+
const CALL_TOKEN = '<|call|>';
|
|
7
|
+
const CONSTRAIN_TOKEN = '<|constrain|>';
|
|
8
|
+
const MESSAGE_END_TOKENS = [CALL_TOKEN, END_TOKEN, RETURN_TOKEN];
|
|
9
|
+
const FUNCTION_ROLE_PREFIX = 'assistant to=functions.';
|
|
10
|
+
export const parseHarmonyResponse = (rawText) => {
|
|
11
|
+
const messages = extractHarmonyMessages(rawText);
|
|
12
|
+
const finalParts = [];
|
|
13
|
+
const thinkingParts = [];
|
|
14
|
+
const toolCalls = [];
|
|
15
|
+
for (const message of messages) {
|
|
16
|
+
const channelBase = getChannelBase(message.channel);
|
|
17
|
+
if (message.role.startsWith('functions.') && message.role.includes(' to=assistant')) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (channelBase === 'analysis') {
|
|
21
|
+
if (message.content) {
|
|
22
|
+
thinkingParts.push(message.content);
|
|
23
|
+
}
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (channelBase === 'final') {
|
|
27
|
+
if (message.content) {
|
|
28
|
+
finalParts.push(message.content);
|
|
29
|
+
}
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const toolCall = parseToolCallMessage(message, toolCalls.length);
|
|
33
|
+
if (toolCall) {
|
|
34
|
+
toolCalls.push(toolCall);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
content: finalParts.join('\n'),
|
|
39
|
+
thinkingContent: thinkingParts.length > 0 ? thinkingParts.join('\n') : undefined,
|
|
40
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
function extractHarmonyMessages(rawText) {
|
|
44
|
+
const messages = [];
|
|
45
|
+
let cursor = 0;
|
|
46
|
+
// ストリーム出力では最初の <|start|>assistant が含まれない場合がある
|
|
47
|
+
// (chat templateのadd_generation_promptで付与されるため)
|
|
48
|
+
// <|channel|> から始まるテキストを最初のメッセージとして処理
|
|
49
|
+
const firstStart = rawText.indexOf(START_TOKEN);
|
|
50
|
+
const firstChannel = rawText.indexOf(CHANNEL_TOKEN);
|
|
51
|
+
if (firstChannel !== -1 && (firstStart === -1 || firstChannel < firstStart)) {
|
|
52
|
+
const implicitMessage = parseMessageAt(rawText, -START_TOKEN.length, true);
|
|
53
|
+
if (implicitMessage) {
|
|
54
|
+
messages.push(implicitMessage.value);
|
|
55
|
+
cursor = implicitMessage.nextIndex;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
while (cursor < rawText.length) {
|
|
59
|
+
const startIndex = rawText.indexOf(START_TOKEN, cursor);
|
|
60
|
+
if (startIndex === -1) {
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
const message = parseMessageAt(rawText, startIndex);
|
|
64
|
+
if (!message) {
|
|
65
|
+
cursor = startIndex + START_TOKEN.length;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
messages.push(message.value);
|
|
69
|
+
cursor = message.nextIndex;
|
|
70
|
+
}
|
|
71
|
+
return messages;
|
|
72
|
+
}
|
|
73
|
+
function parseMessageAt(rawText, startIndex, implicitRole) {
|
|
74
|
+
let role;
|
|
75
|
+
let channelIndex;
|
|
76
|
+
if (implicitRole) {
|
|
77
|
+
// <|start|> が省略されたケース: roleは "assistant" と推定
|
|
78
|
+
role = 'assistant';
|
|
79
|
+
channelIndex = rawText.indexOf(CHANNEL_TOKEN, 0);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const roleStart = startIndex + START_TOKEN.length;
|
|
83
|
+
channelIndex = rawText.indexOf(CHANNEL_TOKEN, roleStart);
|
|
84
|
+
if (channelIndex === -1) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
role = rawText.slice(roleStart, channelIndex).trim();
|
|
88
|
+
}
|
|
89
|
+
if (channelIndex === -1) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
const messageIndex = rawText.indexOf(MESSAGE_TOKEN, channelIndex + CHANNEL_TOKEN.length);
|
|
93
|
+
if (messageIndex === -1) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
let channel = rawText.slice(channelIndex + CHANNEL_TOKEN.length, messageIndex);
|
|
97
|
+
channel = stripTrailingConstraint(channel).trim();
|
|
98
|
+
const contentStart = messageIndex + MESSAGE_TOKEN.length;
|
|
99
|
+
const endInfo = findMessageEnd(rawText, contentStart);
|
|
100
|
+
const contentEnd = endInfo?.index ?? rawText.length;
|
|
101
|
+
const content = rawText.slice(contentStart, contentEnd).trim();
|
|
102
|
+
return {
|
|
103
|
+
value: {
|
|
104
|
+
role,
|
|
105
|
+
channel,
|
|
106
|
+
content,
|
|
107
|
+
},
|
|
108
|
+
nextIndex: endInfo ? endInfo.index + endInfo.token.length : rawText.length,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function stripTrailingConstraint(channel) {
|
|
112
|
+
const constrainIndex = channel.indexOf(CONSTRAIN_TOKEN);
|
|
113
|
+
return constrainIndex === -1 ? channel : channel.slice(0, constrainIndex);
|
|
114
|
+
}
|
|
115
|
+
function findMessageEnd(rawText, contentStart) {
|
|
116
|
+
let nearestIndex = -1;
|
|
117
|
+
let nearestToken = null;
|
|
118
|
+
for (const token of MESSAGE_END_TOKENS) {
|
|
119
|
+
const index = rawText.indexOf(token, contentStart);
|
|
120
|
+
if (index !== -1 && (nearestIndex === -1 || index < nearestIndex)) {
|
|
121
|
+
nearestIndex = index;
|
|
122
|
+
nearestToken = token;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (nearestIndex === -1 || nearestToken === null) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
return { index: nearestIndex, token: nearestToken };
|
|
129
|
+
}
|
|
130
|
+
function parseToolCallMessage(message, index) {
|
|
131
|
+
if (!message.role.startsWith(FUNCTION_ROLE_PREFIX)) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const name = message.role.slice(FUNCTION_ROLE_PREFIX.length).trim();
|
|
135
|
+
if (!name) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
const channelBase = getChannelBase(message.channel);
|
|
139
|
+
if (channelBase !== 'commentary') {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const parsedArguments = parseToolArguments(message.content);
|
|
143
|
+
if (!parsedArguments) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
id: `harmony_call_${index}`,
|
|
148
|
+
name,
|
|
149
|
+
arguments: parsedArguments,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function getChannelBase(channel) {
|
|
153
|
+
const trimmed = channel.trim();
|
|
154
|
+
const spaceIndex = trimmed.indexOf(' ');
|
|
155
|
+
return spaceIndex === -1 ? trimmed : trimmed.slice(0, spaceIndex);
|
|
156
|
+
}
|
|
157
|
+
function parseToolArguments(content) {
|
|
158
|
+
if (!content) {
|
|
159
|
+
return {};
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const parsed = JSON.parse(content);
|
|
163
|
+
if (isRecord(parsed)) {
|
|
164
|
+
return parsed;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
function isRecord(value) {
|
|
173
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=harmony-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harmony-parser.js","sourceRoot":"","sources":["../../../src/mlx-ml/process/harmony-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
* 機能をモジュール化し、役割を分離
|
|
6
6
|
*/
|
|
7
7
|
import { Readable } from 'stream';
|
|
8
|
-
import type { MlxMlModelOptions, MlxMessage, MlxRuntimeInfo, MlxFormatTestResult, MlxToolDefinition } from './types.js';
|
|
9
|
-
export type { MlxMlModelOptions, MlxMessage, MlxRuntimeInfo, MlxFormatTestResult, MlxToolDefinition };
|
|
8
|
+
import type { MlxMlModelOptions, MlxMessage, MlxRuntimeInfo, MlxFormatTestResult, MlxTokenizeResult, MlxCachePrefillResult, MlxToolDefinition } from './types.js';
|
|
9
|
+
export type { MlxMlModelOptions, MlxMessage, MlxRuntimeInfo, MlxFormatTestResult, MlxTokenizeResult, MlxCachePrefillResult, MlxToolDefinition };
|
|
10
10
|
export interface MlxProcessOptions {
|
|
11
11
|
textOnly?: boolean;
|
|
12
|
+
drafterModel?: string;
|
|
13
|
+
draftBlockSize?: number;
|
|
12
14
|
}
|
|
13
15
|
export declare class MlxProcess {
|
|
14
16
|
modelName: string;
|
|
@@ -23,7 +25,9 @@ export declare class MlxProcess {
|
|
|
23
25
|
formatTest(messages: MlxMessage[], options?: {
|
|
24
26
|
primer?: string;
|
|
25
27
|
}): Promise<MlxFormatTestResult>;
|
|
26
|
-
|
|
28
|
+
tokenize(messages: MlxMessage[], tools?: MlxToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<MlxTokenizeResult>;
|
|
29
|
+
cachePrefill(cachePath: string, messages: MlxMessage[], baseCachePath?: string, trimToTokens?: number, prefixOffsets?: number[], prefixHashes?: string[], tools?: MlxToolDefinition[], reasoningEffort?: 'low' | 'medium' | 'high'): Promise<MlxCachePrefillResult>;
|
|
30
|
+
chat(messages: MlxMessage[], primer?: string, options?: MlxMlModelOptions, tools?: MlxToolDefinition[], images?: string[], maxImageSize?: number, reasoningEffort?: 'low' | 'medium' | 'high', cachePath?: string, cacheTrimTokens?: number): Promise<Readable>;
|
|
27
31
|
completion(prompt: string, options?: MlxMlModelOptions, images?: string[], maxImageSize?: number): Promise<Readable>;
|
|
28
32
|
exit(): Promise<void>;
|
|
29
33
|
getStatus(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mlx-ml/process/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mlx-ml/process/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAOpB,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAClB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,UAAU;IACrB,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAuB;gBAE9B,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IA4B1D;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC;IAK1C,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK/F,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,iBAAiB,EAAE,EAAE,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKtI,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,iBAAiB,EAAE,EAAE,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKnQ,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,iBAAiB,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK/P,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKpH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS;;;;;;CAQV"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
* mlx-ml.tsドライバーからアクセスされるメイン API
|
|
5
5
|
* 機能をモジュール化し、役割を分離
|
|
6
6
|
*/
|
|
7
|
+
import { Logger } from '@modular-prompt/utils';
|
|
7
8
|
import { QueueManager } from './queue.js';
|
|
8
9
|
import { ProcessCommunication } from './process-communication.js';
|
|
10
|
+
const logger = new Logger({ prefix: 'MLX', context: 'process' });
|
|
9
11
|
export class MlxProcess {
|
|
10
12
|
modelName;
|
|
11
13
|
queueManager;
|
|
@@ -15,7 +17,14 @@ export class MlxProcess {
|
|
|
15
17
|
// コールバック設定
|
|
16
18
|
const processCallbacks = {
|
|
17
19
|
onJsonResponse: (jsonData) => this.queueManager.handleJsonResponse(jsonData),
|
|
18
|
-
onRequestCompleted: () => this.queueManager.onRequestCompleted()
|
|
20
|
+
onRequestCompleted: () => this.queueManager.onRequestCompleted(),
|
|
21
|
+
onProcessExit: (code, signal) => {
|
|
22
|
+
if (code !== 0) {
|
|
23
|
+
const error = new Error(`MLX process exited unexpectedly (code=${code}, signal=${signal})`);
|
|
24
|
+
logger.error(error.message);
|
|
25
|
+
this.queueManager.rejectAll(error);
|
|
26
|
+
}
|
|
27
|
+
},
|
|
19
28
|
};
|
|
20
29
|
const queueCallbacks = {
|
|
21
30
|
sendToProcess: (data) => this.processComm.sendToProcess(data),
|
|
@@ -39,14 +48,20 @@ export class MlxProcess {
|
|
|
39
48
|
async formatTest(messages, options) {
|
|
40
49
|
return this.queueManager.addFormatTestRequest(messages, options);
|
|
41
50
|
}
|
|
42
|
-
// API v2.0
|
|
43
|
-
async
|
|
44
|
-
|
|
45
|
-
return this.queueManager.addChatRequest(messages, primer, options, tools, images, maxImageSize);
|
|
51
|
+
// API v2.0 Tokenize
|
|
52
|
+
async tokenize(messages, tools, reasoningEffort) {
|
|
53
|
+
return this.queueManager.addTokenizeRequest(messages, tools, reasoningEffort);
|
|
46
54
|
}
|
|
47
|
-
//
|
|
55
|
+
// Cache operations
|
|
56
|
+
async cachePrefill(cachePath, messages, baseCachePath, trimToTokens, prefixOffsets, prefixHashes, tools, reasoningEffort) {
|
|
57
|
+
return this.queueManager.addCachePrefillRequest(cachePath, messages, baseCachePath, trimToTokens, prefixOffsets, prefixHashes, tools, reasoningEffort);
|
|
58
|
+
}
|
|
59
|
+
// API v2.0 Chat
|
|
60
|
+
async chat(messages, primer, options, tools, images, maxImageSize, reasoningEffort, cachePath, cacheTrimTokens) {
|
|
61
|
+
return this.queueManager.addChatRequest(messages, primer, options, tools, images, maxImageSize, reasoningEffort, cachePath, cacheTrimTokens);
|
|
62
|
+
}
|
|
63
|
+
// API v2.0 Completion
|
|
48
64
|
async completion(prompt, options, images, maxImageSize) {
|
|
49
|
-
// completion APIを直接使用(前処理はドライバーで実施済み)
|
|
50
65
|
return this.queueManager.addCompletionRequest(prompt, options, images, maxImageSize);
|
|
51
66
|
}
|
|
52
67
|
async exit() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mlx-ml/process/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mlx-ml/process/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,68 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 各モデル特有のメッセージ変換やプロンプト生成処理を管理
|
|
5
5
|
*/
|
|
6
|
-
import type { MlxMessage } from './types.js';
|
|
6
|
+
import type { MlxMessage, MlxRuntimeInfo } from './types.js';
|
|
7
|
+
import type { ResponseProcessor } from './response-processor.js';
|
|
7
8
|
/**
|
|
8
9
|
* システムメッセージをマージ(末尾の改行をtrim)
|
|
9
10
|
*/
|
|
10
11
|
export declare function mergeSystemMessages(msgs: MlxMessage[]): MlxMessage[];
|
|
11
|
-
/**
|
|
12
|
-
* Tanuki-8B-dpo-v1用のChat処理
|
|
13
|
-
*/
|
|
14
|
-
export declare function processTanukiChat(messages: MlxMessage[]): MlxMessage[];
|
|
15
|
-
/**
|
|
16
|
-
* CodeLlama用のChat処理
|
|
17
|
-
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
18
|
-
*/
|
|
19
|
-
export declare function processCodeLlamaChat(messages: MlxMessage[]): MlxMessage[];
|
|
20
|
-
/**
|
|
21
|
-
* Gemma-3用のChat処理
|
|
22
|
-
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
23
|
-
*/
|
|
24
|
-
export declare function processGemmaChat(messages: MlxMessage[]): MlxMessage[];
|
|
25
|
-
/**
|
|
26
|
-
* Gemma-4用のChat処理
|
|
27
|
-
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
28
|
-
*/
|
|
29
|
-
export declare function processGemma4Chat(messages: MlxMessage[]): MlxMessage[];
|
|
30
|
-
export declare function processGemma4Completion(prompt: string): string;
|
|
31
|
-
/**
|
|
32
|
-
* llm-jp-3.1用のCompletion処理
|
|
33
|
-
* chat_templateに厳密に準拠した形式
|
|
34
|
-
* Note: llm-jp-3.1はforce-completion設定のため、chat APIは使用されない
|
|
35
|
-
*/
|
|
36
|
-
export declare function processLlmJpCompletion(prompt: string): string;
|
|
37
|
-
/**
|
|
38
|
-
* Tanuki-8B用のCompletion処理
|
|
39
|
-
*/
|
|
40
|
-
export declare function processTanukiCompletion(prompt: string): string;
|
|
41
|
-
/**
|
|
42
|
-
* Gemma-3用のCompletion処理
|
|
43
|
-
*/
|
|
44
|
-
export declare function processGemmaCompletion(prompt: string): string;
|
|
45
|
-
/**
|
|
46
|
-
* ELYZA (Llama 2ベース) 用のCompletion処理
|
|
47
|
-
*
|
|
48
|
-
* ELYZAはLlama 2のinstruction formatを使用:
|
|
49
|
-
* <s>[INST] <<SYS>>
|
|
50
|
-
* システムプロンプト
|
|
51
|
-
* <</SYS>>
|
|
52
|
-
*
|
|
53
|
-
* ユーザープロンプト [/INST]
|
|
54
|
-
*
|
|
55
|
-
* Note: <<SYS>>, [INST]などはspecial tokensではなく、複数トークンに分割される
|
|
56
|
-
*/
|
|
57
|
-
export declare function processElyzaCompletion(prompt: string): string;
|
|
58
|
-
/**
|
|
59
|
-
* LFM用のChat処理
|
|
60
|
-
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
61
|
-
*/
|
|
62
|
-
export declare function processLfmChat(messages: MlxMessage[]): MlxMessage[];
|
|
63
|
-
/**
|
|
64
|
-
* Qwen用のChat処理
|
|
65
|
-
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
66
|
-
*/
|
|
67
|
-
export declare function processQwenChat(messages: MlxMessage[]): MlxMessage[];
|
|
68
12
|
/**
|
|
69
13
|
* モデル名に基づいてChat処理を選択
|
|
70
14
|
*/
|
|
@@ -76,4 +20,13 @@ export declare function selectChatProcessor(modelName: string): ((messages: MlxM
|
|
|
76
20
|
* 特定モデルのみ専用の後処理を適用する。
|
|
77
21
|
*/
|
|
78
22
|
export declare function selectCompletionProcessor(modelName: string): ((prompt: string) => string) | null;
|
|
23
|
+
/**
|
|
24
|
+
* レスポンス後処理を選択
|
|
25
|
+
*
|
|
26
|
+
* tool_parser_type ベースの判定を優先し、モデル名はフォールバック。
|
|
27
|
+
* 常にResponseProcessorを返す(nullは返さない)。
|
|
28
|
+
*/
|
|
29
|
+
export declare function selectResponseProcessor(modelName: string, runtimeInfo: MlxRuntimeInfo | null, options?: {
|
|
30
|
+
enableToolParsing?: boolean;
|
|
31
|
+
}): ResponseProcessor;
|
|
79
32
|
//# sourceMappingURL=model-handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-handlers.d.ts","sourceRoot":"","sources":["../../../src/mlx-ml/process/model-handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"model-handlers.d.ts","sourceRoot":"","sources":["../../../src/mlx-ml/process/model-handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIjE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAwBpE;AA4KD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,CAAC,GAAG,IAAI,CAyBxG;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,CAahG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,cAAc,GAAG,IAAI,EAClC,OAAO,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC,iBAAiB,CAWnB"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 各モデル特有のメッセージ変換やプロンプト生成処理を管理
|
|
5
5
|
*/
|
|
6
|
+
import { createDefaultProcessor } from './response-processor.js';
|
|
7
|
+
import { parseHarmonyResponse } from './harmony-parser.js';
|
|
6
8
|
/**
|
|
7
9
|
* システムメッセージをマージ(末尾の改行をtrim)
|
|
8
10
|
*/
|
|
@@ -55,7 +57,7 @@ function mergeSystemMessagesRaw(msgs) {
|
|
|
55
57
|
/**
|
|
56
58
|
* Tanuki-8B-dpo-v1用のChat処理
|
|
57
59
|
*/
|
|
58
|
-
|
|
60
|
+
function processTanukiChat(messages) {
|
|
59
61
|
// まずsystemメッセージをマージ(改行を保持)
|
|
60
62
|
const mergedMessages = mergeSystemMessagesRaw(messages);
|
|
61
63
|
const result = [];
|
|
@@ -86,21 +88,21 @@ export function processTanukiChat(messages) {
|
|
|
86
88
|
* CodeLlama用のChat処理
|
|
87
89
|
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
88
90
|
*/
|
|
89
|
-
|
|
91
|
+
function processCodeLlamaChat(messages) {
|
|
90
92
|
return mergeSystemMessages(messages);
|
|
91
93
|
}
|
|
92
94
|
/**
|
|
93
95
|
* Gemma-3用のChat処理
|
|
94
96
|
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
95
97
|
*/
|
|
96
|
-
|
|
98
|
+
function processGemmaChat(messages) {
|
|
97
99
|
return mergeSystemMessages(messages);
|
|
98
100
|
}
|
|
99
101
|
/**
|
|
100
102
|
* Gemma-4用のChat処理
|
|
101
103
|
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
102
104
|
*/
|
|
103
|
-
|
|
105
|
+
function processGemma4Chat(messages) {
|
|
104
106
|
const msgs = [
|
|
105
107
|
{
|
|
106
108
|
role: 'system',
|
|
@@ -110,7 +112,7 @@ export function processGemma4Chat(messages) {
|
|
|
110
112
|
];
|
|
111
113
|
return msgs;
|
|
112
114
|
}
|
|
113
|
-
|
|
115
|
+
function processGemma4Completion(prompt) {
|
|
114
116
|
return [
|
|
115
117
|
'You are a helpful assistant.',
|
|
116
118
|
prompt,
|
|
@@ -121,7 +123,7 @@ export function processGemma4Completion(prompt) {
|
|
|
121
123
|
* chat_templateに厳密に準拠した形式
|
|
122
124
|
* Note: llm-jp-3.1はforce-completion設定のため、chat APIは使用されない
|
|
123
125
|
*/
|
|
124
|
-
|
|
126
|
+
function processLlmJpCompletion(prompt) {
|
|
125
127
|
// llm-jpは複数言語の混ぜ書きに弱い傾向があるため、特定の言語を優先しないよう明示的に指示
|
|
126
128
|
const llmJpSpecificInstruction = '指示は英語・日本語の混ぜ書きになっているが、どちらの言語も同等の指示として十分に理解すること。\n出力は与えられたタスクに対してふさわしい言語を選択する。\n\n';
|
|
127
129
|
// chat_templateのsystemメッセージと同じ固定文字列(良好な回答を得るために必要な固定プロンプト)
|
|
@@ -134,14 +136,14 @@ export function processLlmJpCompletion(prompt) {
|
|
|
134
136
|
/**
|
|
135
137
|
* Tanuki-8B用のCompletion処理
|
|
136
138
|
*/
|
|
137
|
-
|
|
139
|
+
function processTanukiCompletion(prompt) {
|
|
138
140
|
// completion APIではブロック化トークンを使用可能
|
|
139
141
|
return `### システム:\n${prompt}\n\n### 応答:\n`;
|
|
140
142
|
}
|
|
141
143
|
/**
|
|
142
144
|
* Gemma-3用のCompletion処理
|
|
143
145
|
*/
|
|
144
|
-
|
|
146
|
+
function processGemmaCompletion(prompt) {
|
|
145
147
|
// Gemma-3はchat形式に依存しないcompletion処理が可能
|
|
146
148
|
return `<start_of_turn>user\n${prompt}<end_of_turn>\n<start_of_turn>model\n`;
|
|
147
149
|
}
|
|
@@ -157,7 +159,7 @@ export function processGemmaCompletion(prompt) {
|
|
|
157
159
|
*
|
|
158
160
|
* Note: <<SYS>>, [INST]などはspecial tokensではなく、複数トークンに分割される
|
|
159
161
|
*/
|
|
160
|
-
|
|
162
|
+
function processElyzaCompletion(prompt) {
|
|
161
163
|
const B_INST = '[INST]';
|
|
162
164
|
const E_INST = '[/INST]';
|
|
163
165
|
const B_SYS = '<<SYS>>\n';
|
|
@@ -171,14 +173,14 @@ export function processElyzaCompletion(prompt) {
|
|
|
171
173
|
* LFM用のChat処理
|
|
172
174
|
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
173
175
|
*/
|
|
174
|
-
|
|
176
|
+
function processLfmChat(messages) {
|
|
175
177
|
return mergeSystemMessages(messages);
|
|
176
178
|
}
|
|
177
179
|
/**
|
|
178
180
|
* Qwen用のChat処理
|
|
179
181
|
* userメッセージ補完は applyChatSpecificProcessing で汎用的に処理
|
|
180
182
|
*/
|
|
181
|
-
|
|
183
|
+
function processQwenChat(messages) {
|
|
182
184
|
return mergeSystemMessages(messages);
|
|
183
185
|
}
|
|
184
186
|
/**
|
|
@@ -233,4 +235,20 @@ export function selectCompletionProcessor(modelName) {
|
|
|
233
235
|
// デフォルト: 汎用フォーマッタで動作する
|
|
234
236
|
return (prompt) => prompt;
|
|
235
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* レスポンス後処理を選択
|
|
240
|
+
*
|
|
241
|
+
* tool_parser_type ベースの判定を優先し、モデル名はフォールバック。
|
|
242
|
+
* 常にResponseProcessorを返す(nullは返さない)。
|
|
243
|
+
*/
|
|
244
|
+
export function selectResponseProcessor(modelName, runtimeInfo, options) {
|
|
245
|
+
const parserType = runtimeInfo?.features?.chat_template?.tool_call_format?.tool_parser_type;
|
|
246
|
+
if (parserType === 'harmony') {
|
|
247
|
+
return parseHarmonyResponse;
|
|
248
|
+
}
|
|
249
|
+
if (modelName.includes('llm-jp-4')) {
|
|
250
|
+
return parseHarmonyResponse;
|
|
251
|
+
}
|
|
252
|
+
return createDefaultProcessor(runtimeInfo, options);
|
|
253
|
+
}
|
|
236
254
|
//# sourceMappingURL=model-handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-handlers.js","sourceRoot":"","sources":["../../../src/mlx-ml/process/model-handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,8BAA8B;gBAC9B,WAAW,CAAC,IAAI,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAoC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3G,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxF,OAAO,CAAC,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAkB;IAChD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,cAAc,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpK,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,aAAa,GAAe;YAChC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;SACrC,CAAC;QACF,OAAO,CAAC,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"model-handlers.js","sourceRoot":"","sources":["../../../src/mlx-ml/process/model-handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,8BAA8B;gBAC9B,WAAW,CAAC,IAAI,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAoC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3G,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxF,OAAO,CAAC,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAkB;IAChD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,cAAc,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpK,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,aAAa,GAAe;YAChC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;SACrC,CAAC;QACF,OAAO,CAAC,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAsB;IAC/C,2BAA2B;IAC3B,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAExD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,yBAAyB;IACzB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,yCAAyC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO;SAC/E,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,mBAAmB;QACnB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,uCAAuC;SACjD,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IACjC,CAAC;IAED,kBAAkB;IAClB,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,iEAAiE;KAC3E,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,QAAsB;IAClD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,QAAsB;IAC9C,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,QAAsB;IAC/C,MAAM,IAAI,GAAiB;QACzB;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gCAAgC;SAC1C;QACD,GAAG,QAAQ;KACZ,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC7C,OAAO;QACL,8BAA8B;QAC9B,MAAM;KACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,MAAc;IAC5C,iDAAiD;IACjD,MAAM,wBAAwB,GAAG,mFAAmF,CAAC;IAErH,2DAA2D;IAC3D,OAAO,wCAAwC;QAC7C,eAAe;QACf,wBAAwB;QACxB,MAAM;QACN,aAAa,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,MAAc;IAC7C,iCAAiC;IACjC,OAAO,cAAc,MAAM,eAAe,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,MAAc;IAC5C,sCAAsC;IACtC,OAAO,wBAAwB,MAAM,uCAAuC,CAAC;AAC/E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,sBAAsB,CAAC,MAAc;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC;IAC1B,MAAM,KAAK,GAAG,gBAAgB,CAAC;IAC/B,MAAM,cAAc,GAAG,yBAAyB,CAAC;IAEjD,6BAA6B;IAC7B,2CAA2C;IAC3C,OAAO,GAAG,MAAM,IAAI,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,QAAsB;IAC5C,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,QAAsB;IAC7C,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,kDAAkD;IAClD,IAAI,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC3C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QAClD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,oCAAoC;IACpC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,YAAY;IACZ,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,sBAAsB,CAAC;IACpE,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,uBAAuB,CAAC;IACpE,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,sBAAsB,CAAC;IACjE,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,uBAAuB,CAAC;IAClE,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,sBAAsB,CAAC;IAE7E,uBAAuB;IACvB,OAAO,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAiB,EACjB,WAAkC,EAClC,OAAyC;IAEzC,MAAM,UAAU,GAAG,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IAE5F,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,OAAO,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -31,6 +31,12 @@ export interface ModelSpecificProcessor {
|
|
|
31
31
|
* Completion API用のモデル固有プロセッサが存在するか
|
|
32
32
|
*/
|
|
33
33
|
hasCompletionProcessor(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Chat API用のモデル固有プロセッサが存在するか
|
|
36
|
+
* true の場合、chatProcessor はメッセージ全体の文脈に依存する変換を行うため
|
|
37
|
+
* サブセットへの適用は prefix 安定性を保証しない
|
|
38
|
+
*/
|
|
39
|
+
hasChatProcessor(): boolean;
|
|
34
40
|
/**
|
|
35
41
|
* runtimeInfo取得後に制約・モデル情報を反映
|
|
36
42
|
*/
|
|
@@ -63,6 +69,7 @@ export declare class DefaultModelSpecificProcessor implements ModelSpecificProce
|
|
|
63
69
|
* Completion API用のモデル固有プロセッサが存在するか
|
|
64
70
|
*/
|
|
65
71
|
hasCompletionProcessor(): boolean;
|
|
72
|
+
hasChatProcessor(): boolean;
|
|
66
73
|
/**
|
|
67
74
|
* Completion API用のモデル固有処理
|
|
68
75
|
* モデルごとにブロック化トークンやプロンプトフォーマットを適用
|