@modular-prompt/driver 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -5
- package/dist/driver-registry/ai-service.d.ts +23 -1
- package/dist/driver-registry/ai-service.d.ts.map +1 -1
- package/dist/driver-registry/ai-service.js +44 -10
- package/dist/driver-registry/ai-service.js.map +1 -1
- package/dist/driver-registry/config-based-factory.d.ts.map +1 -1
- package/dist/driver-registry/config-based-factory.js +16 -0
- package/dist/driver-registry/config-based-factory.js.map +1 -1
- package/dist/driver-registry/factory-helper.d.ts +2 -0
- package/dist/driver-registry/factory-helper.d.ts.map +1 -1
- package/dist/driver-registry/factory-helper.js +21 -3
- package/dist/driver-registry/factory-helper.js.map +1 -1
- package/dist/driver-registry/index.d.ts +2 -2
- package/dist/driver-registry/index.d.ts.map +1 -1
- package/dist/driver-registry/index.js +1 -1
- package/dist/driver-registry/index.js.map +1 -1
- package/dist/driver-registry/registry.d.ts.map +1 -1
- package/dist/driver-registry/registry.js +3 -1
- package/dist/driver-registry/registry.js.map +1 -1
- package/dist/driver-registry/types.d.ts +8 -2
- package/dist/driver-registry/types.d.ts.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/local-inference/adapters.d.ts +66 -0
- package/dist/local-inference/adapters.d.ts.map +1 -0
- package/dist/local-inference/adapters.js +2 -0
- package/dist/local-inference/adapters.js.map +1 -0
- package/dist/local-inference/driver.d.ts +51 -0
- package/dist/local-inference/driver.d.ts.map +1 -0
- package/dist/local-inference/driver.js +309 -0
- package/dist/local-inference/driver.js.map +1 -0
- package/dist/local-inference/index.d.ts +22 -0
- package/dist/local-inference/index.d.ts.map +1 -0
- package/dist/local-inference/index.js +17 -0
- package/dist/local-inference/index.js.map +1 -0
- package/dist/local-inference/process-client.d.ts +50 -0
- package/dist/local-inference/process-client.d.ts.map +1 -0
- package/dist/local-inference/process-client.js +92 -0
- package/dist/local-inference/process-client.js.map +1 -0
- package/dist/local-inference/process-communication.d.ts +41 -0
- package/dist/local-inference/process-communication.d.ts.map +1 -0
- package/dist/{mlx-ml/process → local-inference}/process-communication.js +25 -61
- package/dist/local-inference/process-communication.js.map +1 -0
- package/dist/local-inference/process-port.d.ts +12 -0
- package/dist/local-inference/process-port.d.ts.map +1 -0
- package/dist/local-inference/process-port.js +2 -0
- package/dist/local-inference/process-port.js.map +1 -0
- package/dist/local-inference/prompt-utils.d.ts +6 -0
- package/dist/local-inference/prompt-utils.d.ts.map +1 -0
- package/dist/local-inference/prompt-utils.js +17 -0
- package/dist/local-inference/prompt-utils.js.map +1 -0
- package/dist/local-inference/protocol.d.ts +192 -0
- package/dist/local-inference/protocol.d.ts.map +1 -0
- package/dist/local-inference/protocol.js +2 -0
- package/dist/local-inference/protocol.js.map +1 -0
- package/dist/local-inference/queue-types.d.ts +54 -0
- package/dist/local-inference/queue-types.d.ts.map +1 -0
- package/dist/local-inference/queue-types.js +2 -0
- package/dist/local-inference/queue-types.js.map +1 -0
- package/dist/local-inference/request-queue.d.ts +36 -0
- package/dist/local-inference/request-queue.d.ts.map +1 -0
- package/dist/{mlx-ml/process/queue.js → local-inference/request-queue.js} +83 -56
- package/dist/local-inference/request-queue.js.map +1 -0
- package/dist/local-inference/stream-utils.d.ts +19 -0
- package/dist/local-inference/stream-utils.d.ts.map +1 -0
- package/dist/local-inference/stream-utils.js +76 -0
- package/dist/local-inference/stream-utils.js.map +1 -0
- package/dist/mlx-ml/mlx-cache-support.d.ts +23 -0
- package/dist/mlx-ml/mlx-cache-support.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-cache-support.js +45 -0
- package/dist/mlx-ml/mlx-cache-support.js.map +1 -0
- package/dist/mlx-ml/mlx-driver.d.ts +20 -59
- package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
- package/dist/mlx-ml/mlx-driver.js +86 -460
- package/dist/mlx-ml/mlx-driver.js.map +1 -1
- package/dist/mlx-ml/mlx-local-inference-adapters.d.ts +3 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.js +19 -0
- package/dist/mlx-ml/mlx-local-inference-adapters.js.map +1 -0
- package/dist/mlx-ml/mlx-options.d.ts +19 -0
- package/dist/mlx-ml/mlx-options.d.ts.map +1 -0
- package/dist/mlx-ml/mlx-options.js +30 -0
- package/dist/mlx-ml/mlx-options.js.map +1 -0
- package/dist/mlx-ml/process/index.d.ts +10 -8
- package/dist/mlx-ml/process/index.d.ts.map +1 -1
- package/dist/mlx-ml/process/index.js +73 -54
- package/dist/mlx-ml/process/index.js.map +1 -1
- package/dist/mlx-ml/process/model-specific.d.ts +2 -1
- package/dist/mlx-ml/process/model-specific.d.ts.map +1 -1
- package/dist/mlx-ml/process/model-specific.js.map +1 -1
- package/dist/mlx-ml/process/prompt-builder.d.ts +11 -0
- package/dist/mlx-ml/process/prompt-builder.d.ts.map +1 -0
- package/dist/mlx-ml/process/prompt-builder.js +51 -0
- package/dist/mlx-ml/process/prompt-builder.js.map +1 -0
- package/dist/mlx-ml/process/types.d.ts +15 -183
- package/dist/mlx-ml/process/types.d.ts.map +1 -1
- package/dist/mlx-ml/types.d.ts +2 -45
- package/dist/mlx-ml/types.d.ts.map +1 -1
- package/dist/models-config/index.d.ts +8 -0
- package/dist/models-config/index.d.ts.map +1 -0
- package/dist/models-config/index.js +7 -0
- package/dist/models-config/index.js.map +1 -0
- package/dist/models-config/loader.d.ts +20 -0
- package/dist/models-config/loader.d.ts.map +1 -0
- package/dist/models-config/loader.js +85 -0
- package/dist/models-config/loader.js.map +1 -0
- package/dist/models-config/paths.d.ts +7 -0
- package/dist/models-config/paths.d.ts.map +1 -0
- package/dist/models-config/paths.js +11 -0
- package/dist/models-config/paths.js.map +1 -0
- package/dist/models-config/resolve.d.ts +57 -0
- package/dist/models-config/resolve.d.ts.map +1 -0
- package/dist/models-config/resolve.js +187 -0
- package/dist/models-config/resolve.js.map +1 -0
- package/dist/models-config/types.d.ts +60 -0
- package/dist/models-config/types.d.ts.map +1 -0
- package/dist/models-config/types.js +5 -0
- package/dist/models-config/types.js.map +1 -0
- package/dist/pytorch/process/index.d.ts +35 -0
- package/dist/pytorch/process/index.d.ts.map +1 -0
- package/dist/pytorch/process/index.js +69 -0
- package/dist/pytorch/process/index.js.map +1 -0
- package/dist/pytorch/pytorch-driver.d.ts +35 -0
- package/dist/pytorch/pytorch-driver.d.ts.map +1 -0
- package/dist/pytorch/pytorch-driver.js +48 -0
- package/dist/pytorch/pytorch-driver.js.map +1 -0
- package/dist/pytorch/pytorch-local-inference-adapters.d.ts +3 -0
- package/dist/pytorch/pytorch-local-inference-adapters.d.ts.map +1 -0
- package/dist/pytorch/pytorch-local-inference-adapters.js +19 -0
- package/dist/pytorch/pytorch-local-inference-adapters.js.map +1 -0
- package/dist/pytorch/pytorch-options.d.ts +8 -0
- package/dist/pytorch/pytorch-options.d.ts.map +1 -0
- package/dist/pytorch/pytorch-options.js +21 -0
- package/dist/pytorch/pytorch-options.js.map +1 -0
- package/dist/query-logger.js +1 -1
- package/dist/query-logger.js.map +1 -1
- package/dist/runtime/check.d.ts +10 -0
- package/dist/runtime/check.d.ts.map +1 -0
- package/dist/runtime/check.js +24 -0
- package/dist/runtime/check.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/manifest-core.d.mts +27 -0
- package/dist/runtime/manifest-core.d.mts.map +1 -0
- package/dist/runtime/manifest-core.mjs +68 -0
- package/dist/runtime/manifest-core.mjs.map +1 -0
- package/dist/runtime/manifest.d.ts +18 -0
- package/dist/runtime/manifest.d.ts.map +1 -0
- package/dist/runtime/manifest.js +9 -0
- package/dist/runtime/manifest.js.map +1 -0
- package/dist/runtime/paths-core.d.mts +17 -0
- package/dist/runtime/paths-core.d.mts.map +1 -0
- package/dist/runtime/paths-core.mjs +67 -0
- package/dist/runtime/paths-core.mjs.map +1 -0
- package/dist/runtime/paths.d.ts +12 -0
- package/dist/runtime/paths.d.ts.map +1 -0
- package/dist/runtime/paths.js +17 -0
- package/dist/runtime/paths.js.map +1 -0
- package/dist/types.d.ts +11 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +10 -7
- package/scripts/download-model.js +25 -9
- package/scripts/runtime-cli.js +315 -0
- package/src/mlx-ml/python/__main__.py +43 -4
- package/src/mlx-ml/python/handlers/__init__.py +2 -1
- package/src/mlx-ml/python/handlers/completion.py +3 -27
- package/src/mlx-ml/python/handlers/{chat.py → generate.py} +33 -106
- package/src/mlx-ml/python/handlers/render.py +40 -0
- package/src/mlx-ml/python/pyproject.toml +3 -2
- package/src/mlx-ml/python/server.py +28 -8
- package/src/mlx-ml/python/utils/template_render.py +80 -0
- package/src/mlx-ml/python/utils/token_utils.py +2 -2
- package/src/mlx-ml/python/uv.lock +549 -454
- package/src/pytorch/python/__main__.py +19 -0
- package/src/pytorch/python/backends/__init__.py +3 -0
- package/src/pytorch/python/backends/base.py +84 -0
- package/src/pytorch/python/backends/transformers_lm.py +127 -0
- package/src/pytorch/python/handlers/__init__.py +6 -0
- package/src/pytorch/python/handlers/cancel.py +53 -0
- package/src/pytorch/python/handlers/capabilities.py +6 -0
- package/src/pytorch/python/handlers/completion.py +15 -0
- package/src/pytorch/python/handlers/format_test.py +70 -0
- package/src/pytorch/python/handlers/generate.py +68 -0
- package/src/pytorch/python/handlers/render.py +40 -0
- package/src/pytorch/python/handlers/tokenize.py +63 -0
- package/src/pytorch/python/pyproject.toml +36 -0
- package/src/pytorch/python/server.py +140 -0
- package/src/pytorch/python/utils/__init__.py +0 -0
- package/src/pytorch/python/utils/chat_template_constraints.py +164 -0
- package/src/pytorch/python/utils/prompt_builder.py +54 -0
- package/src/pytorch/python/utils/template_render.py +80 -0
- package/src/pytorch/python/utils/token_utils.py +376 -0
- package/src/pytorch/python/uv.lock +694 -0
- package/dist/mlx-ml/process/process-communication.d.ts +0 -45
- package/dist/mlx-ml/process/process-communication.d.ts.map +0 -1
- package/dist/mlx-ml/process/process-communication.js.map +0 -1
- package/dist/mlx-ml/process/queue.d.ts +0 -35
- package/dist/mlx-ml/process/queue.d.ts.map +0 -1
- package/dist/mlx-ml/process/queue.js.map +0 -1
- package/scripts/setup-mlx.js +0 -53
|
@@ -3,7 +3,7 @@ import json
|
|
|
3
3
|
import sys
|
|
4
4
|
|
|
5
5
|
from backends.base import ModelBackend
|
|
6
|
-
from handlers import handle_cache_prefill, handle_capabilities,
|
|
6
|
+
from handlers import handle_cache_prefill, handle_capabilities, handle_completion, handle_format_test, handle_generate, handle_render, handle_tokenize
|
|
7
7
|
from handlers.cancel import request_cancel, reset_cancel
|
|
8
8
|
|
|
9
9
|
|
|
@@ -27,6 +27,15 @@ def read():
|
|
|
27
27
|
continue
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
def _is_valid_generate_prompt(prompt) -> bool:
|
|
31
|
+
"""prompt は非空文字列または非空のトークン ID リスト"""
|
|
32
|
+
if isinstance(prompt, str):
|
|
33
|
+
return bool(prompt)
|
|
34
|
+
if isinstance(prompt, list):
|
|
35
|
+
return len(prompt) > 0
|
|
36
|
+
return False
|
|
37
|
+
|
|
38
|
+
|
|
30
39
|
class Server:
|
|
31
40
|
def __init__(self, backend: ModelBackend, capabilities: dict):
|
|
32
41
|
self.backend = backend
|
|
@@ -93,21 +102,32 @@ class Server:
|
|
|
93
102
|
reasoning_effort=req.get('reasoning_effort'),
|
|
94
103
|
)
|
|
95
104
|
|
|
96
|
-
elif method == '
|
|
105
|
+
elif method == 'render':
|
|
97
106
|
messages = req.get('messages')
|
|
98
107
|
if not messages:
|
|
99
|
-
self._error_response("'messages' field is required for
|
|
108
|
+
self._error_response("'messages' field is required for render method")
|
|
100
109
|
return
|
|
101
|
-
|
|
110
|
+
handle_render(
|
|
102
111
|
self.backend,
|
|
103
|
-
self.capabilities,
|
|
104
112
|
messages,
|
|
105
|
-
primer=req.get('primer'),
|
|
106
113
|
options=req.get('options', {}),
|
|
107
114
|
tools=req.get('tools'),
|
|
108
|
-
images=req.get('images', []),
|
|
109
|
-
max_image_size=req.get('maxImageSize', 768),
|
|
110
115
|
reasoning_effort=req.get('reasoning_effort'),
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
elif method == 'generate':
|
|
119
|
+
prompt = req.get('prompt')
|
|
120
|
+
if not _is_valid_generate_prompt(prompt):
|
|
121
|
+
self._error_response("'prompt' field is required for generate method")
|
|
122
|
+
return
|
|
123
|
+
images = req.get('images', [])
|
|
124
|
+
handle_generate(
|
|
125
|
+
self.backend,
|
|
126
|
+
prompt,
|
|
127
|
+
options=req.get('options', {}),
|
|
128
|
+
images=images if images else None,
|
|
129
|
+
max_image_size=req.get('maxImageSize', 768),
|
|
130
|
+
primer=req.get('primer'),
|
|
111
131
|
cache_path=req.get('cache_path'),
|
|
112
132
|
cache_trim_tokens=req.get('cache_trim_tokens'),
|
|
113
133
|
)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""apply_chat_template によるプロンプト整形(推論なし)"""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from utils.prompt_builder import supports_chat_template
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def apply_chat_template_prompt(
|
|
9
|
+
backend,
|
|
10
|
+
messages: list,
|
|
11
|
+
*,
|
|
12
|
+
primer: str | None = None,
|
|
13
|
+
tools: list | None = None,
|
|
14
|
+
reasoning_effort: str | None = None,
|
|
15
|
+
trust_remote_code: bool | None = None,
|
|
16
|
+
) -> str | list:
|
|
17
|
+
"""messages を chat template で整形して prompt を返す"""
|
|
18
|
+
tokenizer = backend.get_tokenizer()
|
|
19
|
+
|
|
20
|
+
if not supports_chat_template(tokenizer):
|
|
21
|
+
raise ValueError("chat_template_not_available")
|
|
22
|
+
|
|
23
|
+
add_generation_prompt = True
|
|
24
|
+
fmt_messages = list(messages)
|
|
25
|
+
if primer is not None:
|
|
26
|
+
fmt_messages.append({"role": "assistant", "content": primer})
|
|
27
|
+
add_generation_prompt = False
|
|
28
|
+
|
|
29
|
+
if backend.supports_vision():
|
|
30
|
+
try:
|
|
31
|
+
prompt = tokenizer.apply_chat_template(
|
|
32
|
+
fmt_messages,
|
|
33
|
+
tools=tools,
|
|
34
|
+
add_generation_prompt=add_generation_prompt,
|
|
35
|
+
tokenize=False,
|
|
36
|
+
)
|
|
37
|
+
except TypeError:
|
|
38
|
+
prompt = tokenizer.apply_chat_template(
|
|
39
|
+
fmt_messages,
|
|
40
|
+
add_generation_prompt=add_generation_prompt,
|
|
41
|
+
tokenize=False,
|
|
42
|
+
)
|
|
43
|
+
else:
|
|
44
|
+
extra_kwargs: dict = {}
|
|
45
|
+
if tools is not None:
|
|
46
|
+
extra_kwargs["tools"] = tools
|
|
47
|
+
if reasoning_effort is not None:
|
|
48
|
+
extra_kwargs["reasoning_effort"] = reasoning_effort
|
|
49
|
+
if trust_remote_code is not None:
|
|
50
|
+
extra_kwargs["trust_remote_code"] = trust_remote_code
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
prompt = tokenizer.apply_chat_template(
|
|
54
|
+
fmt_messages,
|
|
55
|
+
add_generation_prompt=add_generation_prompt,
|
|
56
|
+
tokenize=False,
|
|
57
|
+
**extra_kwargs,
|
|
58
|
+
)
|
|
59
|
+
except TypeError:
|
|
60
|
+
try:
|
|
61
|
+
fallback_kwargs: dict = {}
|
|
62
|
+
if tools is not None:
|
|
63
|
+
fallback_kwargs["tools"] = tools
|
|
64
|
+
prompt = tokenizer.apply_chat_template(
|
|
65
|
+
fmt_messages,
|
|
66
|
+
add_generation_prompt=add_generation_prompt,
|
|
67
|
+
tokenize=False,
|
|
68
|
+
**fallback_kwargs,
|
|
69
|
+
)
|
|
70
|
+
except TypeError:
|
|
71
|
+
prompt = tokenizer.apply_chat_template(
|
|
72
|
+
fmt_messages,
|
|
73
|
+
add_generation_prompt=add_generation_prompt,
|
|
74
|
+
tokenize=False,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
if primer is not None and isinstance(prompt, str):
|
|
78
|
+
prompt = primer.join(prompt.split(primer)[0:-1]) + primer
|
|
79
|
+
|
|
80
|
+
return prompt
|
|
@@ -342,11 +342,11 @@ def get_capabilities(tokenizer):
|
|
|
342
342
|
dict: capabilities情報
|
|
343
343
|
"""
|
|
344
344
|
# 基本メソッド
|
|
345
|
-
methods = ["capabilities", "completion", "format_test"]
|
|
345
|
+
methods = ["capabilities", "completion", "generate", "format_test"]
|
|
346
346
|
|
|
347
347
|
# apply_chat_templateがある場合はchatメソッドを追加
|
|
348
348
|
if hasattr(tokenizer, 'apply_chat_template'):
|
|
349
|
-
methods.append("
|
|
349
|
+
methods.append("render")
|
|
350
350
|
|
|
351
351
|
capabilities = {
|
|
352
352
|
"methods": methods,
|