@modular-prompt/driver 0.16.0 → 0.17.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 +98 -10
- package/dist/cache-controller.d.ts +4 -0
- package/dist/cache-controller.d.ts.map +1 -1
- package/dist/driver-registry/config-based-factory.d.ts +3 -0
- package/dist/driver-registry/config-based-factory.d.ts.map +1 -1
- package/dist/driver-registry/config-based-factory.js +8 -1
- 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 +9 -2
- package/dist/driver-registry/factory-helper.js.map +1 -1
- package/dist/driver-registry/index.d.ts +1 -1
- package/dist/driver-registry/index.d.ts.map +1 -1
- package/dist/driver-registry/types.d.ts +15 -1
- package/dist/driver-registry/types.d.ts.map +1 -1
- package/dist/formatter/converter.d.ts.map +1 -1
- package/dist/formatter/converter.js +31 -2
- package/dist/formatter/converter.js.map +1 -1
- package/dist/google-genai/google-genai-driver.d.ts +1 -0
- package/dist/google-genai/google-genai-driver.d.ts.map +1 -1
- package/dist/google-genai/google-genai-driver.js +36 -27
- package/dist/google-genai/google-genai-driver.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/local-inference/adapters.d.ts +6 -0
- package/dist/local-inference/adapters.d.ts.map +1 -1
- package/dist/local-inference/driver.d.ts.map +1 -1
- package/dist/local-inference/driver.js +45 -24
- package/dist/local-inference/driver.js.map +1 -1
- package/dist/local-inference/process-client.d.ts +4 -2
- package/dist/local-inference/process-client.d.ts.map +1 -1
- package/dist/local-inference/process-client.js +24 -8
- package/dist/local-inference/process-client.js.map +1 -1
- package/dist/local-inference/process-communication.d.ts +9 -2
- package/dist/local-inference/process-communication.d.ts.map +1 -1
- package/dist/local-inference/process-communication.js +37 -5
- package/dist/local-inference/process-communication.js.map +1 -1
- package/dist/local-inference/protocol.d.ts +4 -0
- package/dist/local-inference/protocol.d.ts.map +1 -1
- package/dist/local-inference/request-queue.d.ts +1 -1
- package/dist/local-inference/request-queue.d.ts.map +1 -1
- package/dist/local-inference/request-queue.js +26 -7
- package/dist/local-inference/request-queue.js.map +1 -1
- package/dist/local-inference/stream-utils.d.ts +6 -0
- package/dist/local-inference/stream-utils.d.ts.map +1 -1
- package/dist/local-inference/stream-utils.js.map +1 -1
- package/dist/mlx-ml/mlx-cache-controller.d.ts +9 -0
- package/dist/mlx-ml/mlx-cache-controller.d.ts.map +1 -1
- package/dist/mlx-ml/mlx-cache-controller.js +158 -33
- package/dist/mlx-ml/mlx-cache-controller.js.map +1 -1
- package/dist/mlx-ml/mlx-cache-support.d.ts +2 -2
- package/dist/mlx-ml/mlx-cache-support.d.ts.map +1 -1
- package/dist/mlx-ml/mlx-cache-support.js +8 -3
- package/dist/mlx-ml/mlx-cache-support.js.map +1 -1
- package/dist/mlx-ml/mlx-driver.d.ts +0 -1
- package/dist/mlx-ml/mlx-driver.d.ts.map +1 -1
- package/dist/mlx-ml/mlx-driver.js +1 -8
- package/dist/mlx-ml/mlx-driver.js.map +1 -1
- package/dist/mlx-ml/process/index.d.ts +1 -1
- package/dist/mlx-ml/process/index.d.ts.map +1 -1
- package/dist/mlx-ml/process/index.js +2 -2
- package/dist/mlx-ml/process/index.js.map +1 -1
- package/dist/models-config/index.d.ts +1 -1
- package/dist/models-config/index.d.ts.map +1 -1
- package/dist/models-config/index.js +1 -1
- package/dist/models-config/index.js.map +1 -1
- package/dist/models-config/resolve.d.ts +9 -1
- package/dist/models-config/resolve.d.ts.map +1 -1
- package/dist/models-config/resolve.js +94 -2
- package/dist/models-config/resolve.js.map +1 -1
- package/dist/models-config/types.d.ts +3 -1
- package/dist/models-config/types.d.ts.map +1 -1
- package/dist/pytorch/process/index.d.ts +4 -2
- package/dist/pytorch/process/index.d.ts.map +1 -1
- package/dist/pytorch/process/index.js +24 -7
- package/dist/pytorch/process/index.js.map +1 -1
- package/dist/pytorch/pytorch-cache-controller.d.ts +84 -0
- package/dist/pytorch/pytorch-cache-controller.d.ts.map +1 -0
- package/dist/pytorch/pytorch-cache-controller.js +742 -0
- package/dist/pytorch/pytorch-cache-controller.js.map +1 -0
- package/dist/pytorch/pytorch-cache-support.d.ts +23 -0
- package/dist/pytorch/pytorch-cache-support.d.ts.map +1 -0
- package/dist/pytorch/pytorch-cache-support.js +47 -0
- package/dist/pytorch/pytorch-cache-support.js.map +1 -0
- package/dist/pytorch/pytorch-driver.d.ts +8 -1
- package/dist/pytorch/pytorch-driver.d.ts.map +1 -1
- package/dist/pytorch/pytorch-driver.js +40 -0
- package/dist/pytorch/pytorch-driver.js.map +1 -1
- package/dist/runtime/check.d.ts.map +1 -1
- package/dist/runtime/check.js +8 -6
- package/dist/runtime/check.js.map +1 -1
- package/dist/runtime/index.d.ts +2 -2
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +2 -2
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/manifest-core.d.mts +1 -0
- package/dist/runtime/manifest-core.mjs +1 -0
- package/dist/runtime/manifest-core.mjs.map +1 -1
- package/dist/runtime/manifest.d.ts +2 -0
- package/dist/runtime/manifest.d.ts.map +1 -1
- package/dist/runtime/manifest.js.map +1 -1
- package/dist/runtime/paths-core.d.mts +15 -1
- package/dist/runtime/paths-core.d.mts.map +1 -1
- package/dist/runtime/paths-core.mjs +50 -5
- package/dist/runtime/paths-core.mjs.map +1 -1
- package/dist/runtime/paths.d.ts +2 -2
- package/dist/runtime/paths.d.ts.map +1 -1
- package/dist/runtime/paths.js +2 -2
- package/dist/runtime/paths.js.map +1 -1
- package/dist/runtime/pytorch-template-core.d.mts +11 -0
- package/dist/runtime/pytorch-template-core.d.mts.map +1 -0
- package/dist/runtime/pytorch-template-core.mjs +54 -0
- package/dist/runtime/pytorch-template-core.mjs.map +1 -0
- package/dist/runtime/setup-commands-core.d.mts +3 -0
- package/dist/runtime/setup-commands-core.d.mts.map +1 -1
- package/dist/runtime/setup-commands-core.mjs +4 -0
- package/dist/runtime/setup-commands-core.mjs.map +1 -1
- package/dist/runtime/setup-commands.d.ts +1 -1
- package/dist/runtime/setup-commands.d.ts.map +1 -1
- package/dist/runtime/setup-commands.js +1 -1
- package/dist/runtime/setup-commands.js.map +1 -1
- package/dist/vertexai/vertexai-driver.d.ts +6 -0
- package/dist/vertexai/vertexai-driver.d.ts.map +1 -1
- package/dist/vertexai/vertexai-driver.js +106 -36
- package/dist/vertexai/vertexai-driver.js.map +1 -1
- package/docs/DRIVER_API.md +455 -0
- package/docs/LOCAL_MODEL_SETUP.md +765 -0
- package/docs/mlx-api-selection.md +301 -0
- package/package.json +10 -6
- package/scripts/runtime-cli.bin.test.ts +142 -0
- package/scripts/runtime-cli.js +305 -35
- package/scripts/runtime-cli.test.ts +163 -0
- package/skills/driver-usage/SKILL.md +29 -0
- package/src/mlx-ml/python/__main__.py +1 -1
- package/src/mlx-ml/python/backends/base.py +88 -18
- package/src/mlx-ml/python/backends/mlx_lm.py +28 -3
- package/src/mlx-ml/python/backends/mlx_vlm.py +679 -2
- package/src/mlx-ml/python/handlers/cache.py +4 -0
- package/src/mlx-ml/python/handlers/generate.py +33 -10
- package/src/mlx-ml/python/handlers/tokenize.py +1 -4
- package/src/mlx-ml/python/pyproject.toml +2 -2
- package/src/mlx-ml/python/server.py +2 -0
- package/src/mlx-ml/python/uv.lock +12 -12
- package/src/pytorch/templates/cpu-minimal/backends/base.py +139 -0
- package/src/pytorch/templates/cpu-minimal/backends/transformers_lm.py +1167 -0
- package/src/pytorch/{python → templates/cpu-minimal}/handlers/__init__.py +1 -0
- package/src/pytorch/templates/cpu-minimal/handlers/cache.py +88 -0
- package/src/pytorch/templates/cpu-minimal/handlers/generate.py +157 -0
- package/src/pytorch/{python → templates/cpu-minimal}/pyproject.toml +2 -2
- package/src/pytorch/{python → templates/cpu-minimal}/server.py +20 -2
- package/src/pytorch/templates/cpu-minimal/tests/test_cache_handler.py +284 -0
- package/src/pytorch/templates/cpu-minimal/tests/test_capabilities.py +14 -0
- package/src/pytorch/templates/cpu-minimal/tests/test_server.py +141 -0
- package/src/pytorch/templates/cpu-minimal/tests/test_transformers_errors.py +89 -0
- package/src/pytorch/templates/cpu-minimal/tests/test_transformers_lm_cache.py +554 -0
- package/src/pytorch/templates/cpu-minimal/utils/__init__.py +0 -0
- package/src/pytorch/{python → templates/cpu-minimal}/utils/token_utils.py +2 -2
- package/src/pytorch/templates/cpu-minimal/utils/transformers_errors.py +54 -0
- package/src/pytorch/{python → templates/cpu-minimal}/uv.lock +149 -109
- package/src/pytorch/templates/cuda/__main__.py +19 -0
- package/src/pytorch/templates/cuda/backends/__init__.py +3 -0
- package/src/pytorch/{python → templates/cuda}/backends/base.py +54 -6
- package/src/pytorch/templates/cuda/backends/transformers_lm.py +379 -0
- package/src/pytorch/templates/cuda/handlers/__init__.py +7 -0
- package/src/pytorch/templates/cuda/handlers/cache.py +93 -0
- package/src/pytorch/templates/cuda/handlers/cancel.py +53 -0
- package/src/pytorch/templates/cuda/handlers/capabilities.py +6 -0
- package/src/pytorch/templates/cuda/handlers/completion.py +15 -0
- package/src/pytorch/templates/cuda/handlers/format_test.py +70 -0
- package/src/pytorch/templates/cuda/handlers/generate.py +152 -0
- package/src/pytorch/templates/cuda/handlers/render.py +40 -0
- package/src/pytorch/templates/cuda/handlers/tokenize.py +63 -0
- package/src/pytorch/templates/cuda/pyproject.toml +37 -0
- package/src/pytorch/templates/cuda/server.py +158 -0
- package/src/pytorch/templates/cuda/tests/__init__.py +0 -0
- package/src/pytorch/templates/cuda/tests/test_cache_handler.py +207 -0
- package/src/pytorch/templates/cuda/tests/test_capabilities.py +14 -0
- package/src/pytorch/templates/cuda/tests/test_server.py +145 -0
- package/src/pytorch/templates/cuda/tests/test_transformers_errors.py +89 -0
- package/src/pytorch/templates/cuda/tests/test_transformers_lm_cache.py +288 -0
- package/src/pytorch/templates/cuda/utils/__init__.py +0 -0
- package/src/pytorch/templates/cuda/utils/chat_template_constraints.py +164 -0
- package/src/pytorch/templates/cuda/utils/prompt_builder.py +54 -0
- package/src/pytorch/templates/cuda/utils/template_render.py +80 -0
- package/src/pytorch/templates/cuda/utils/token_utils.py +376 -0
- package/src/pytorch/templates/cuda/utils/transformers_errors.py +54 -0
- package/src/pytorch/templates/cuda/uv.lock +734 -0
- package/src/pytorch/python/backends/transformers_lm.py +0 -127
- package/src/pytorch/python/handlers/generate.py +0 -68
- /package/src/pytorch/{python → templates/cpu-minimal}/__main__.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/backends/__init__.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/handlers/cancel.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/handlers/capabilities.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/handlers/completion.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/handlers/format_test.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/handlers/render.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/handlers/tokenize.py +0 -0
- /package/src/pytorch/{python/utils → templates/cpu-minimal/tests}/__init__.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/utils/chat_template_constraints.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/utils/prompt_builder.py +0 -0
- /package/src/pytorch/{python → templates/cpu-minimal}/utils/template_render.py +0 -0
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ if (result.logEntries) {
|
|
|
52
52
|
}
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
詳細は [Driver APIリファレンス](
|
|
55
|
+
詳細は [Driver APIリファレンス](./docs/DRIVER_API.md) を参照してください。
|
|
56
56
|
|
|
57
57
|
## 利用可能なドライバー
|
|
58
58
|
|
|
@@ -71,6 +71,76 @@ if (result.logEntries) {
|
|
|
71
71
|
|
|
72
72
|
各ドライバーの詳細な設定・オプションは `skills/driver-usage/SKILL.md` を参照。
|
|
73
73
|
|
|
74
|
+
`VertexAIDriver` の明示 Context Caching は、`@google/genai` を Vertex モードで初期化した
|
|
75
|
+
`GoogleGenAICacheController` を `cacheController` として手動注入します。config-based factory で
|
|
76
|
+
自動生成せず、extract Session と同じ controller を共有してください。最小配線例は
|
|
77
|
+
[キャッシュ設計の Vertex AI 節](../docs/CACHE_DESIGN.md#vertex-ai-の明示キャッシュ)を参照してください。
|
|
78
|
+
|
|
79
|
+
### PyTorchProcess の KV キャッシュ
|
|
80
|
+
|
|
81
|
+
`PyTorchProcess` の低レベル API では、Transformers の text-only LM に対して、KV キャッシュを prefill して suffix を生成できます。`memory://` ref は同一 Python プロセス内だけで有効です。`cpu-minimal` backend で通常のファイルパスを指定すると、PyTorch backend 固有の `pytorch_kv_v1` 形式で KV と `.meta.json` を永続化できます。CUDA backend は process-local cache のみを使用し、cache ファイルを作成しません。
|
|
82
|
+
|
|
83
|
+
`PyTorchDriver` に `PyTorchCacheController` を渡すと、`cache: true` のクエリでキャッシュ可能な instructions/data の prefix を自動的に prefill・再利用できます。固定の `cacheDir` を指定した controller がプロセス再起動後も cache を再利用できるのは `cpu-minimal` backend です。CUDA backend は process-local で、incremental/prefix metadata を拒否し、restart 後は miss になります。`QueryResult.usage` の `cacheReadTokens` / `cacheWriteTokens` には backend が報告した利用量を反映します。固定 `cacheDir` は runtime variant / device ごとに分け、CPU と CUDA で共有しないでください。現在の PyTorch backend では VLM・画像入力の cache は無効です。
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import {
|
|
87
|
+
PyTorchCacheController,
|
|
88
|
+
PyTorchDriver,
|
|
89
|
+
} from '@modular-prompt/driver';
|
|
90
|
+
|
|
91
|
+
const driver = new PyTorchDriver({
|
|
92
|
+
model: 'your-transformers-model',
|
|
93
|
+
cacheController: new PyTorchCacheController({
|
|
94
|
+
cacheDir: '/path/to/pytorch-cache',
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const result = await driver.query(prompt, { cache: true });
|
|
99
|
+
console.log(result.usage?.cacheReadTokens);
|
|
100
|
+
console.log(result.usage?.cacheWriteTokens);
|
|
101
|
+
await driver.close();
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
import { PyTorchProcess } from '@modular-prompt/driver';
|
|
106
|
+
import type { InferenceMessage } from '@modular-prompt/driver';
|
|
107
|
+
|
|
108
|
+
const process = new PyTorchProcess('your-transformers-model');
|
|
109
|
+
const prefixMessages: InferenceMessage[] = [
|
|
110
|
+
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
111
|
+
{ role: 'user', content: 'Keep this conversation context.' },
|
|
112
|
+
];
|
|
113
|
+
const queryMessages: InferenceMessage[] = [
|
|
114
|
+
...prefixMessages,
|
|
115
|
+
{ role: 'user', content: 'Answer the next question.' },
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
const cache = await process.cachePrefill('memory://conversation-prefix', prefixMessages);
|
|
120
|
+
const rendered = await process.render(queryMessages);
|
|
121
|
+
if (rendered.error || rendered.formatted_prompt == null) {
|
|
122
|
+
throw new Error(rendered.error ?? 'Failed to render the prompt');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const stream = await process.generate(
|
|
126
|
+
rendered.formatted_prompt,
|
|
127
|
+
{ max_tokens: 64, temperature: 0 },
|
|
128
|
+
undefined,
|
|
129
|
+
undefined,
|
|
130
|
+
cache.cache_path,
|
|
131
|
+
);
|
|
132
|
+
for await (const chunk of stream) {
|
|
133
|
+
process.stdout.write(chunk.toString());
|
|
134
|
+
}
|
|
135
|
+
} finally {
|
|
136
|
+
await process.exit();
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`cachePrefill()` の結果には prefill した `token_count` と `cache_write_tokens` が含まれ、同じ参照を最初に使う `generate()` の LIP meta にも write 数が一度だけ通知されます。キャッシュを使った生成では `cache_read_tokens` と `cache_write_tokens`、実際に参照を読み込めたかどうかは `cache_loaded` で確認できます。
|
|
141
|
+
|
|
142
|
+
prefill に渡した prompt の token 列は、`generate()` に渡す rendered prompt の先頭と一致している必要があります。`memory://` ref は `PyTorchProcess` または Python 子プロセスの終了・再起動で失われます。`cpu-minimal` のファイル cache は同じ model ID・dtype・device の backend から再利用できますが、CUDA はファイル cache を作成せず restart 後に miss になります。不一致や破損したファイルは cache miss として full prompt の cold path にフォールバックします。`baseCachePath` と `trimToTokens` を指定した `cachePrefill()` では、`cpu-minimal` で base cache を trim して suffix だけを prefill できます。CUDA は incremental prefill をサポートしません。`cacheTrimTokens` を指定した `generate()` の trim は生成用 clone に適用され、同じ cache ref の元 state は保持されます。`PyTorchCacheController` はこの低レベル API を `PromptCacheController` のライフサイクルに接続し、同一 query の prefill 増分を `cacheWriteTokens` として報告します。
|
|
143
|
+
|
|
74
144
|
## 主な機能
|
|
75
145
|
|
|
76
146
|
- **統一インターフェース**: `query()` / `streamQuery()` / `close()` の3メソッド
|
|
@@ -117,7 +187,7 @@ const profileOverlay = {
|
|
|
117
187
|
const ai = AIService.fromMergedConfig(bundled, profileOverlay);
|
|
118
188
|
const models = ai.modelsConfig;
|
|
119
189
|
|
|
120
|
-
const spec = resolveModelName('local-chat', models
|
|
190
|
+
const spec = resolveModelName('local-chat', models);
|
|
121
191
|
const fallback = resolveDefaultModelFromConfig(models);
|
|
122
192
|
const driver = await ai.createDriver(spec);
|
|
123
193
|
```
|
|
@@ -126,7 +196,8 @@ const driver = await ai.createDriver(spec);
|
|
|
126
196
|
- `AIService.fromModelsConfig({ source })` — `source: 'merge'`(デフォルト)で user yaml を読み込み、`source: 'overlay'` で無視
|
|
127
197
|
- `mode: 'merge' | 'override'` — models セクションの浅いマージ / 置換
|
|
128
198
|
- デフォルト model は `models.default` alias、なければ models の先頭エントリから導出
|
|
129
|
-
- `defaults`
|
|
199
|
+
- `defaults` によるモデルの暗黙解決は廃止(YAML に残っていても警告のみ)。`runtime` はモデル決定後の provider 推論に限って利用する
|
|
200
|
+
- 生 model ID は `resolveModelName()` が merged models の model 完全一致エントリ、`runtime` / `metadata.runtime`、既知のモデル名パターンの順で provider を推論する。推論できない場合は `--provider <provider>` などで明示指定する
|
|
130
201
|
|
|
131
202
|
simple-chat では profile の `modelsConfig` に inline の `models` / `drivers` を載せ、`workflow.models.default.ref` で alias 参照できます。`ref` に未知の alias を指定した場合は **エラーで停止**します。
|
|
132
203
|
|
|
@@ -137,7 +208,9 @@ simple-chat では profile の `modelsConfig` に inline の `models` / `drivers
|
|
|
137
208
|
ローカル統合テストや手元試行で使うモデルは、通常設定と分けて
|
|
138
209
|
`~/.modular-prompt/models.testing.yaml` に置けます。`MODULAR_PROMPT_HOME` を設定している場合は、そのディレクトリ配下を使用します。プロジェクト配下の設定ファイルは暗黙探索しません。
|
|
139
210
|
|
|
140
|
-
`models.default` には cache 対応の text-only LM
|
|
211
|
+
`models.default` には cache 対応の text-only LM または cache を使う MLX VLM を指定できます。MLX VLM の cache は `backend: vlm`(または `auto`)で起動し、画像なしリクエストは `mlx-vlm==0.7.4` の `exact_cache_v1`、画像付きリクエストは専用の `vision_cache_v1` namespace としてディスクへ保存されます。画像付き cache は text-only VLM / LM の cache(LM の `.safetensors.zip` を含む)とは相互利用できません。
|
|
212
|
+
|
|
213
|
+
MLX VLM の画像入力は local file path のみ対応します。URL / data URI の loader は実装していないため、画像付き cache 経路でも利用できません。
|
|
141
214
|
|
|
142
215
|
```yaml
|
|
143
216
|
models:
|
|
@@ -155,10 +228,10 @@ models:
|
|
|
155
228
|
マージ順は **base → `models.yaml` → `models.testing.yaml` → overlay** です。Vitest 実行中または `NODE_ENV=test` では testing 設定が自動で追加されます。CLI などで明示的に使う場合は次の環境変数を指定します。
|
|
156
229
|
|
|
157
230
|
```bash
|
|
158
|
-
MODULAR_PROMPT_MODELS_PROFILE=testing modular-extract create meeting -m default docs/notes.txt
|
|
231
|
+
MODULAR_PROMPT_MODELS_PROFILE=testing modular-prompt-extract create meeting -m default docs/notes.txt
|
|
159
232
|
```
|
|
160
233
|
|
|
161
|
-
ライブラリからは `resolveModelsConfig({ profile: 'testing' })` または `AIService.fromModelsConfig({ profile: 'testing' })` を使用できます。統合テストはこの設定から MLX/API ドライバーを導出し、設定が無い場合は従来の `test-drivers.yaml` にフォールバックします。サンプルは [
|
|
234
|
+
ライブラリからは `resolveModelsConfig({ profile: 'testing' })` または `AIService.fromModelsConfig({ profile: 'testing' })` を使用できます。統合テストはこの設定から MLX/API ドライバーを導出し、設定が無い場合は従来の `test-drivers.yaml` にフォールバックします。サンプルは [models.testing.yaml.example](https://github.com/otolab/modular-prompt/blob/main/packages/driver/test/integration/models.testing.yaml.example) または同梱 [LOCAL_MODEL_SETUP.md](./docs/LOCAL_MODEL_SETUP.md) を参照してください。
|
|
162
235
|
|
|
163
236
|
|
|
164
237
|
```typescript
|
|
@@ -186,7 +259,7 @@ const final = await result;
|
|
|
186
259
|
- キャンセル前の部分応答は `result.content` に残ります
|
|
187
260
|
- 他ドライバーは `signal` を無視します(未実装)
|
|
188
261
|
|
|
189
|
-
詳細は [Driver APIリファレンス](
|
|
262
|
+
詳細は [Driver APIリファレンス](./docs/DRIVER_API.md#推論キャンセルabortsignal) を参照。
|
|
190
263
|
|
|
191
264
|
## トークン使用量(usage)
|
|
192
265
|
|
|
@@ -197,7 +270,7 @@ for await (const _ of stream) { /* consume */ }
|
|
|
197
270
|
const final = await result;
|
|
198
271
|
if (final.usage) {
|
|
199
272
|
console.log(final.usage.promptTokens, final.usage.completionTokens);
|
|
200
|
-
console.log(final.usage.cacheReadTokens); // MLX + KV キャッシュ時
|
|
273
|
+
console.log(final.usage.cacheReadTokens); // MLX/PyTorch + KV キャッシュ時
|
|
201
274
|
console.log(final.usage.cacheWriteTokens); // 同一クエリ内の新規 prefill 時
|
|
202
275
|
}
|
|
203
276
|
```
|
|
@@ -262,7 +335,7 @@ modular-prompt-runtime setup mlx
|
|
|
262
335
|
VLM(Vision Language Model)対応モデルを画像なしのテキストのみで使用する場合は、`textOnly`オプションを使用します。
|
|
263
336
|
|
|
264
337
|
```typescript
|
|
265
|
-
import { MlxDriver } from '@modular-prompt/driver';
|
|
338
|
+
import { MlxDriver, MlxCacheController } from '@modular-prompt/driver';
|
|
266
339
|
|
|
267
340
|
const driver = new MlxDriver({
|
|
268
341
|
model: 'mlx-community/Qwen2-VL-2B-Instruct-4bit',
|
|
@@ -281,6 +354,21 @@ await driver.close();
|
|
|
281
354
|
|
|
282
355
|
`textOnly: true`を指定すると、VLM対応モデルを`mlx-lm`(高速起動)で起動し、画像処理なしのテキストのみで使用できます。
|
|
283
356
|
|
|
357
|
+
`textOnly: true` は互換性のために VLM モデルを LM backend として起動する指定です。VLM backend 自体を使用して text-only cache を永続化する場合は、`backend: 'vlm'`(省略時の `auto` でも可)を指定し、cache controller を共有します。
|
|
358
|
+
|
|
359
|
+
```typescript
|
|
360
|
+
const cacheController = new MlxCacheController({
|
|
361
|
+
cacheDir: '/path/to/cache',
|
|
362
|
+
});
|
|
363
|
+
const driver = new MlxDriver({
|
|
364
|
+
model: 'mlx-community/Qwen2-VL-2B-Instruct-4bit',
|
|
365
|
+
backend: 'vlm',
|
|
366
|
+
cacheController,
|
|
367
|
+
});
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
VLM の text-only cache は `cacheDir/<key>.vlm.safetensors/exact_<hash>.safetensors`、画像付き cache は `cacheDir/<key>.vlm-vision.safetensors/exact_<hash>.safetensors` に保存されます。実体ごとの `.meta.json` に `token_count` 等を記録し、画像付き sidecar には image hash、resize 条件、`vision_cache_v1` の version も記録します。0.7.0 で作成した text-only `exact_cache_v1` snapshot は 0.7.4 でも load できます。0.7.4 の interleaved image formatting 変更により、0.7.0 で作成した vision sidecar は version mismatch として miss し、cold prefill から再構築されます。VLM の incremental prefill と LM archive との互換性は提供しません。画像 feature tensor 自体は process-local の `VisionFeatureCache` に保持し、再起動後は再構築します。Pinned `mlx-vlm==0.7.4` の PIL key は bytes のみですが、MLX backend は mode・寸法・bytes・画像列を含む wrapper key を upstream cache に渡して衝突を防ぎます。
|
|
371
|
+
|
|
284
372
|
#### 特殊トークンの確認
|
|
285
373
|
|
|
286
374
|
モデルがサポートする特殊トークンを確認できます:
|
|
@@ -334,7 +422,7 @@ uv --project . run python __main__.py \
|
|
|
334
422
|
|
|
335
423
|
前提条件: Python 3.10以上、CUDA対応GPU、Linux。
|
|
336
424
|
|
|
337
|
-
詳細は [ローカルモデルセットアップガイド](
|
|
425
|
+
詳細は [ローカルモデルセットアップガイド](./docs/LOCAL_MODEL_SETUP.md) を参照してください。
|
|
338
426
|
|
|
339
427
|
## Skills(Claude Code向け)
|
|
340
428
|
|
|
@@ -6,6 +6,10 @@ export interface CachePrepareParams {
|
|
|
6
6
|
data?: Element[];
|
|
7
7
|
tools?: ToolDefinition[];
|
|
8
8
|
reasoningEffort?: 'low' | 'medium' | 'high';
|
|
9
|
+
/** Image sources belonging to a VLM cacheable prefix. */
|
|
10
|
+
images?: string[];
|
|
11
|
+
/** Image resize limit used when constructing a VLM cache. */
|
|
12
|
+
maxImageSize?: number;
|
|
9
13
|
/** When true, only return existing cache hits — never create new entries */
|
|
10
14
|
readOnly?: boolean;
|
|
11
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-controller.d.ts","sourceRoot":"","sources":["../src/cache-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,QAAQ,EAAE;QACR,YAAY,EAAE,OAAO,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,WAAW,CAAC,IAAI,IAAI,CAAC;IACrB,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,wGAAwG;IACxG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"cache-controller.d.ts","sourceRoot":"","sources":["../src/cache-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5C,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,QAAQ,EAAE;QACR,YAAY,EAAE,OAAO,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,WAAW,CAAC,IAAI,IAAI,CAAC;IACrB,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,wGAAwG;IACxG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { DriverRegistry } from './registry.js';
|
|
9
9
|
import type { ModelSpec } from './types.js';
|
|
10
|
+
import type { PromptCacheController } from '../cache-controller.js';
|
|
10
11
|
/**
|
|
11
12
|
* アプリケーション設定
|
|
12
13
|
* CLI層やアプリケーション層で管理される統一的な設定
|
|
@@ -36,6 +37,8 @@ export interface ApplicationConfig {
|
|
|
36
37
|
project?: string;
|
|
37
38
|
location?: string;
|
|
38
39
|
region?: string;
|
|
40
|
+
/** 外部で生成した controller(extract Session と共有する場合) */
|
|
41
|
+
cacheController?: PromptCacheController;
|
|
39
42
|
};
|
|
40
43
|
/** GoogleGenAI設定 */
|
|
41
44
|
googlegenai?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-based-factory.d.ts","sourceRoot":"","sources":["../../src/driver-registry/config-based-factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"config-based-factory.d.ts","sourceRoot":"","sources":["../../src/driver-registry/config-based-factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EACV,SAAS,EAIV,MAAM,YAAY,CAAC;AAepB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAOpE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc;IACd,OAAO,CAAC,EAAE;QACR,mBAAmB;QACnB,MAAM,CAAC,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,sBAAsB;QACtB,SAAS,CAAC,EAAE;YACV,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,2BAA2B;YAC3B,MAAM,CAAC,EAAE;gBACP,OAAO,EAAE,MAAM,CAAC;gBAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAClB,WAAW,CAAC,EAAE,MAAM,CAAC;aACtB,CAAC;SACH,CAAC;QACF,iBAAiB;QACjB,QAAQ,CAAC,EAAE;YACT,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,kDAAkD;YAClD,eAAe,CAAC,EAAE,qBAAqB,CAAC;SACzC,CAAC;QACF,oBAAoB;QACpB,WAAW,CAAC,EAAE;YACZ,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,YAAY;QACZ,GAAG,CAAC,EAAE;YACJ,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,eAAe;QACf,MAAM,CAAC,EAAE;YACP,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,aAAa;QACb,IAAI,CAAC,EAAE;YACL,gDAAgD;YAChD,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IAEF,iBAAiB;IACjB,cAAc,CAAC,EAAE;QACf,IAAI,CAAC,EAAE,OAAO,aAAa,EAAE,SAAS,CAAC;QACvC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,YAAY;IACZ,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAGD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAuHN"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { MlxDriver } from '../mlx-ml/mlx-driver.js';
|
|
10
10
|
import { MlxCacheController } from '../mlx-ml/mlx-cache-controller.js';
|
|
11
11
|
import { PyTorchDriver } from '../pytorch/pytorch-driver.js';
|
|
12
|
+
import { PyTorchCacheController } from '../pytorch/pytorch-cache-controller.js';
|
|
12
13
|
import { OpenAIDriver } from '../openai/openai-driver.js';
|
|
13
14
|
import { AnthropicDriver } from '../anthropic/anthropic-driver.js';
|
|
14
15
|
import { VertexAIDriver } from '../vertexai/vertexai-driver.js';
|
|
@@ -52,11 +53,16 @@ export function registerFactories(registry, config) {
|
|
|
52
53
|
// PyTorch Driver Factory
|
|
53
54
|
registry.registerFactory('pytorch', (spec) => {
|
|
54
55
|
const driverOpts = spec.driverOptions;
|
|
56
|
+
const cacheController = driverOpts?.cacheController
|
|
57
|
+
?? (driverOpts?.cacheDir
|
|
58
|
+
? new PyTorchCacheController({ cacheDir: driverOpts.cacheDir })
|
|
59
|
+
: undefined);
|
|
55
60
|
return new PyTorchDriver({
|
|
56
61
|
model: spec.model,
|
|
57
62
|
defaultOptions: mergeDefaults(spec),
|
|
58
63
|
venvPath: driverOpts?.venvPath ?? spec.metadata?.venvPath,
|
|
59
64
|
device: driverOpts?.device ?? spec.metadata?.device,
|
|
65
|
+
cacheController,
|
|
60
66
|
});
|
|
61
67
|
});
|
|
62
68
|
// OpenAI Driver Factory
|
|
@@ -87,7 +93,8 @@ export function registerFactories(registry, config) {
|
|
|
87
93
|
project: vertexConfig?.project || process.env.VERTEX_AI_PROJECT,
|
|
88
94
|
location: vertexConfig?.location || vertexConfig?.region || 'us-central1',
|
|
89
95
|
model: spec.model,
|
|
90
|
-
defaultOptions: mergeDefaults(spec)
|
|
96
|
+
defaultOptions: mergeDefaults(spec),
|
|
97
|
+
cacheController: vertexConfig?.cacheController,
|
|
91
98
|
});
|
|
92
99
|
});
|
|
93
100
|
// GoogleGenAI Driver Factory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-based-factory.js","sourceRoot":"","sources":["../../src/driver-registry/config-based-factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"config-based-factory.js","sourceRoot":"","sources":["../../src/driver-registry/config-based-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory-helper.d.ts","sourceRoot":"","sources":["../../src/driver-registry/factory-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"factory-helper.d.ts","sourceRoot":"","sources":["../../src/driver-registry/factory-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EACV,SAAS,EAKV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsCpD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,eAAe,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;CAChC,GACA,IAAI,CAuHN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAGN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,GACrC,IAAI,CAGN"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* ドライバファクトリの登録を支援するヘルパー関数
|
|
4
4
|
*/
|
|
5
5
|
import { logger } from '@modular-prompt/utils';
|
|
6
|
+
import { PyTorchCacheController } from '../pytorch/pytorch-cache-controller.js';
|
|
6
7
|
/**
|
|
7
8
|
* defaultOptionsのmaxTokensをModelSpec.maxOutputTokensで制限
|
|
8
9
|
*
|
|
@@ -58,11 +59,17 @@ export function registerStandardDriverFactories(registry, drivers) {
|
|
|
58
59
|
if (drivers.PyTorchDriver) {
|
|
59
60
|
const Driver = drivers.PyTorchDriver;
|
|
60
61
|
registry.registerFactory('pytorch', (spec) => {
|
|
62
|
+
const driverOpts = spec.driverOptions;
|
|
63
|
+
const cacheController = driverOpts?.cacheController
|
|
64
|
+
?? (driverOpts?.cacheDir
|
|
65
|
+
? new PyTorchCacheController({ cacheDir: driverOpts.cacheDir })
|
|
66
|
+
: undefined);
|
|
61
67
|
return new Driver({
|
|
62
68
|
model: spec.model,
|
|
63
69
|
defaultOptions: validateAndClampMaxTokens(spec, spec.defaultOptions),
|
|
64
|
-
venvPath: spec.metadata?.venvPath,
|
|
65
|
-
device: spec.metadata?.device,
|
|
70
|
+
venvPath: driverOpts?.venvPath ?? spec.metadata?.venvPath,
|
|
71
|
+
device: driverOpts?.device ?? spec.metadata?.device,
|
|
72
|
+
cacheController,
|
|
66
73
|
});
|
|
67
74
|
});
|
|
68
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory-helper.js","sourceRoot":"","sources":["../../src/driver-registry/factory-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"factory-helper.js","sourceRoot":"","sources":["../../src/driver-registry/factory-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAShF;;;;;;GAMG;AACH,SAAS,yBAAyB,CAChC,IAAe,EACf,cAAmD;IAEnD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,cAAc,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC;QACtE,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,SAAmB,CAAC;IACrD,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CACT,cAAc,SAAS,wBAAwB;YAC/C,IAAI,IAAI,CAAC,eAAe,gBAAgB,IAAI,CAAC,KAAK,KAAK;YACvD,eAAe,IAAI,CAAC,eAAe,GAAG,CACvC,CAAC;QACF,OAAO;YACL,GAAG,cAAc;YACjB,SAAS,EAAE,IAAI,CAAC,eAAe;SAChC,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAe;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAkD,CAAC;IAC3E,OAAO,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,OAAO,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAC7C,QAAwB,EACxB,OASC;IAED,aAAa;IACb,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;QACjC,4CAA4C;QAC5C,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAe,EAAE,EAAE;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAkD,CAAC;YAC3E,OAAO,IAAI,MAAM,CAAC;gBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,yBAAyB,CACvC,IAAI,EACJ,IAAI,CAAC,cAAc,CACpB;gBACD,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC;gBAChC,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAK,IAAI,CAAC,QAAQ,EAAE,QAAgC;gBAClF,YAAY,EAAE,UAAU,EAAE,YAAY,IAAK,IAAI,CAAC,QAAQ,EAAE,YAAmC;gBAC7F,cAAc,EAAE,UAAU,EAAE,cAAc,IAAK,IAAI,CAAC,QAAQ,EAAE,cAAqC;gBACnG,eAAe,EAAE,UAAU,EAAE,eAAe;aAC7C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;QACrC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,IAAe,EAAE,EAAE;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAsD,CAAC;YAC/E,MAAM,eAAe,GAAG,UAAU,EAAE,eAAe;mBAC9C,CAAC,UAAU,EAAE,QAAQ;oBACtB,CAAC,CAAC,IAAI,sBAAsB,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;oBAC/D,CAAC,CAAC,SAAS,CAAC,CAAC;YACjB,OAAO,IAAI,MAAM,CAAC;gBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;gBACpE,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAK,IAAI,CAAC,QAAQ,EAAE,QAA+B;gBACjF,MAAM,EAAE,UAAU,EAAE,MAAM,IAAK,IAAI,CAAC,QAAQ,EAAE,MAA6B;gBAC3E,eAAe;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QACpC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAe,EAAE,EAAE;YACrD,OAAO,IAAI,MAAM,CAAC;gBAChB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;gBACxC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,yBAAyB,CACvC,IAAI,EACJ,IAAI,CAAC,QAAQ,CACa;aAC7B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;QACvC,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,IAAe,EAAE,EAAE;YACxD,OAAO,IAAI,MAAM,CAAC;gBAChB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;gBAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,yBAAyB,CACvC,IAAI,EACJ,IAAI,CAAC,QAAQ,CACa;aAC7B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;QACtC,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,IAAe,EAAE,EAAE;YACvD,OAAO,IAAI,MAAM,CAAC;gBAChB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBACtC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,aAAa;gBACzD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,yBAAyB,CACvC,IAAI,EACJ,IAAI,CAAC,QAAQ,CACa;aAC7B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QACpC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAe,EAAE,EAAE;YACrD,OAAO,IAAI,MAAM,CAAC;gBAChB,OAAO,EAAE,wBAAwB;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,yBAAyB,CACvC,IAAI,EACJ,IAAI,CAAC,QAAQ,CACa;aAC7B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;QAClC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE;YACpC,OAAO,IAAI,MAAM,CAAC;gBAChB,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iCAAiC;IACjC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;QAClC,QAAQ,CAAC,eAAe,CAAC,MAAwB,EAAE,GAAG,EAAE;YACtD,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAwB,EACxB,OAAgC;IAEhC,8DAA8D;IAC9D,+BAA+B,CAAC,QAAQ,EAAE,OAAc,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAwB,EACxB,IAAY,EACZ,OAAsC;IAEtC,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,CAAC,IAAW,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
export { DriverRegistry } from './registry.js';
|
|
6
6
|
export { registerFactories, type ApplicationConfig } from './config-based-factory.js';
|
|
7
7
|
export { AIService, type SelectionOptions, type AIServiceModelsOptions, } from './ai-service.js';
|
|
8
|
-
export type { DriverProvider, DriverCapability, ModelSpec, DriverFactory, MlxBackendMode, MlxModelDriverOptions, } from './types.js';
|
|
8
|
+
export type { DriverProvider, DriverCapability, ModelSpec, DriverFactory, MlxBackendMode, MlxModelDriverOptions, PyTorchModelDriverOptions, } from './types.js';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver-registry/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,cAAc,EACd,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver-registry/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,YAAY,CAAC"}
|
|
@@ -34,8 +34,22 @@ export interface MlxModelDriverOptions {
|
|
|
34
34
|
/** 外部で生成した KV cache controller(runtime から driver と共有する場合。runtime-only) */
|
|
35
35
|
cacheController?: PromptCacheController;
|
|
36
36
|
}
|
|
37
|
+
/** PyTorch ドライバー固有オプション */
|
|
38
|
+
export interface PyTorchModelDriverOptions {
|
|
39
|
+
/** 外部 venv パス */
|
|
40
|
+
venvPath?: string;
|
|
41
|
+
/** PyTorch の実行デバイス(例: cpu, cuda) */
|
|
42
|
+
device?: string;
|
|
43
|
+
/**
|
|
44
|
+
* KV キャッシュディレクトリ。ディスク永続化は `cpu-minimal` runtime のみ。
|
|
45
|
+
* CUDA は process-local(再起動後は再利用されない)。CPU/CUDA や runtime variant/device 間で同じ `cacheDir` を共有しないこと。
|
|
46
|
+
*/
|
|
47
|
+
cacheDir?: string;
|
|
48
|
+
/** 外部で生成した KV cache controller */
|
|
49
|
+
cacheController?: PromptCacheController;
|
|
50
|
+
}
|
|
37
51
|
/** ドライバー固有オプションのunion(将来拡張) */
|
|
38
|
-
export type ModelDriverOptions = MlxModelDriverOptions;
|
|
52
|
+
export type ModelDriverOptions = MlxModelDriverOptions | PyTorchModelDriverOptions;
|
|
39
53
|
/**
|
|
40
54
|
* モデル仕様(code-bugsのModelSpecと同等)
|
|
41
55
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/driver-registry/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,aAAa,GACb,KAAK,GACL,SAAS,GACT,QAAQ,GACR,MAAM,GACN,MAAM,GACN,MAAM,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,OAAO,GACP,MAAM,GACN,eAAe,GACf,cAAc,GACd,UAAU,GACV,QAAQ,GACR,WAAW,GACX,MAAM,GACN,OAAO,GACP,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,MAAM,GACN,kBAAkB,CAAC;AAEvB,0BAA0B;AAC1B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED,+BAA+B;AAC/B,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/driver-registry/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/formatter/converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/formatter/converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AAKlF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAExF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;CAQjC,CAAC;AAGF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,gBAAqB,GAC7B,WAAW,EAAE,CAgFf"}
|
|
@@ -141,7 +141,6 @@ function elementToMessages(element, formatter) {
|
|
|
141
141
|
}
|
|
142
142
|
case 'material': {
|
|
143
143
|
// Format material with clear structure
|
|
144
|
-
const materialContent = contentToString(element.content);
|
|
145
144
|
const materialLines = [`Material: ${element.title}`];
|
|
146
145
|
if (element.id) {
|
|
147
146
|
materialLines.push(`ID: ${element.id}`);
|
|
@@ -149,6 +148,23 @@ function elementToMessages(element, formatter) {
|
|
|
149
148
|
if (element.usage != null) {
|
|
150
149
|
materialLines.push(`Usage: ${element.usage} tokens`);
|
|
151
150
|
}
|
|
151
|
+
// Keep image attachments on materials so VLM callers (including the
|
|
152
|
+
// extract runtime) can discover and pass them to mlx-vlm. Text-only
|
|
153
|
+
// material formatting remains byte-for-byte compatible.
|
|
154
|
+
if (hasImageAttachment(element.content)) {
|
|
155
|
+
const imageAttachments = element.content.filter((attachment) => attachment.type === 'image_url' && attachment.image_url?.url != null);
|
|
156
|
+
return [{
|
|
157
|
+
role: 'system',
|
|
158
|
+
content: [
|
|
159
|
+
{
|
|
160
|
+
type: 'text',
|
|
161
|
+
text: `${materialLines.join('\n')}\n\n${contentToString(element.content)}`,
|
|
162
|
+
},
|
|
163
|
+
...imageAttachments,
|
|
164
|
+
],
|
|
165
|
+
}];
|
|
166
|
+
}
|
|
167
|
+
const materialContent = contentToString(element.content);
|
|
152
168
|
materialLines.push('', materialContent);
|
|
153
169
|
return [{
|
|
154
170
|
role: 'system',
|
|
@@ -157,7 +173,6 @@ function elementToMessages(element, formatter) {
|
|
|
157
173
|
}
|
|
158
174
|
case 'chunk': {
|
|
159
175
|
// Format chunk with partOf, index, and total
|
|
160
|
-
const chunkContent = contentToString(element.content);
|
|
161
176
|
// Format header based on available information
|
|
162
177
|
let chunkHeader;
|
|
163
178
|
if (element.index !== undefined && element.total !== undefined) {
|
|
@@ -169,6 +184,17 @@ function elementToMessages(element, formatter) {
|
|
|
169
184
|
else {
|
|
170
185
|
chunkHeader = `Part of ${element.partOf}:`;
|
|
171
186
|
}
|
|
187
|
+
if (hasImageAttachment(element.content)) {
|
|
188
|
+
const imageAttachments = element.content.filter((attachment) => attachment.type === 'image_url' && attachment.image_url?.url != null);
|
|
189
|
+
return [{
|
|
190
|
+
role: 'system',
|
|
191
|
+
content: [
|
|
192
|
+
{ type: 'text', text: `${chunkHeader}\n\n${contentToString(element.content)}` },
|
|
193
|
+
...imageAttachments,
|
|
194
|
+
],
|
|
195
|
+
}];
|
|
196
|
+
}
|
|
197
|
+
const chunkContent = contentToString(element.content);
|
|
172
198
|
return [{
|
|
173
199
|
role: 'system',
|
|
174
200
|
content: `${chunkHeader}\n\n${chunkContent}`
|
|
@@ -192,4 +218,7 @@ function elementToMessages(element, formatter) {
|
|
|
192
218
|
}
|
|
193
219
|
}
|
|
194
220
|
}
|
|
221
|
+
function hasImageAttachment(content) {
|
|
222
|
+
return Array.isArray(content) && content.some((attachment) => attachment.type === 'image_url' && attachment.image_url?.url != null);
|
|
223
|
+
}
|
|
195
224
|
//# sourceMappingURL=converter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/formatter/converter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/formatter/converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,7 @@ export declare class GoogleGenAIDriver implements AIDriver {
|
|
|
40
40
|
set defaultOptions(value: Partial<GoogleGenAIQueryOptions>);
|
|
41
41
|
constructor(config?: GoogleGenAIDriverConfig);
|
|
42
42
|
private buildPromptPayload;
|
|
43
|
+
private buildCachedPromptPayload;
|
|
43
44
|
private buildGenerationConfig;
|
|
44
45
|
private chatMessageToContent;
|
|
45
46
|
private convertJsonSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-genai-driver.d.ts","sourceRoot":"","sources":["../../src/google-genai/google-genai-driver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAqC,MAAM,aAAa,CAAC;AAIxH,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,wBAAwB,CAAC;AAIjF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE;QACf,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KAC3C,CAAC;CACH;AAmBD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,eAAe,CAAC,CAAwB;IAEhD,IAAI,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAErD;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,EAEzD;gBAEW,MAAM,GAAE,uBAA4B;YAclC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"google-genai-driver.d.ts","sourceRoot":"","sources":["../../src/google-genai/google-genai-driver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAqC,MAAM,aAAa,CAAC;AAIxH,OAAO,KAAK,EAAE,qBAAqB,EAAe,MAAM,wBAAwB,CAAC;AAIjF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE;QACf,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KAC3C,CAAC;CACH;AAmBD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,eAAe,CAAC,CAAwB;IAEhD,IAAI,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAErD;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,EAEzD;gBAEW,MAAM,GAAE,uBAA4B;YAclC,kBAAkB;IA0ChC,OAAO,CAAC,wBAAwB;IA0BhC,OAAO,CAAC,qBAAqB;IAoD7B,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,WAAW,CAAC;IAsEvB;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,YAAY,CAAC;IA2HxB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -48,35 +48,28 @@ export class GoogleGenAIDriver {
|
|
|
48
48
|
this.cacheController = config.cacheController;
|
|
49
49
|
}
|
|
50
50
|
async buildPromptPayload(prompt, mergedOptions, model) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
tools: mergedOptions.tools,
|
|
62
|
-
readOnly: mergedOptions.cache === 'read-only',
|
|
63
|
-
});
|
|
64
|
-
const instructionsForRequest = handle.includes.instructions
|
|
65
|
-
? partition.volatile.instructions
|
|
66
|
-
: [...partition.cacheable.instructions, ...partition.volatile.instructions];
|
|
67
|
-
const uncachedInstructionParts = instructionsForRequest.length > 0
|
|
68
|
-
? instructionsForRequest.map(el => elementToPart(el))
|
|
69
|
-
: undefined;
|
|
70
|
-
const dataForRequest = handle.includes.dataElementCount >= partition.cacheable.data.length
|
|
71
|
-
? partition.volatile.data
|
|
72
|
-
: [...partition.cacheable.data, ...partition.volatile.data];
|
|
73
|
-
const volatileElements = [...dataForRequest, ...partition.volatile.output];
|
|
74
|
-
const contents = volatileElements.length > 0
|
|
75
|
-
? mergeToolResultContents(volatileElements.map(el => elementToContent(el)))
|
|
76
|
-
: [{ parts: [{ text: 'Please process according to the instructions.' }] }];
|
|
77
|
-
return { systemInstructionParts: uncachedInstructionParts, contents, cacheHandle: handle };
|
|
51
|
+
const partition = partitionPrompt(prompt);
|
|
52
|
+
const hasCacheableContent = partition.cacheable.instructions.length > 0 ||
|
|
53
|
+
partition.cacheable.data.length > 0 ||
|
|
54
|
+
(mergedOptions.tools && mergedOptions.tools.length > 0);
|
|
55
|
+
// A handle prepared by a caller (for example, an extract session) is the
|
|
56
|
+
// source of truth. In particular, do not call prepare() again when the
|
|
57
|
+
// caller also sets cache: false to opt out of driver-side preparation.
|
|
58
|
+
if (mergedOptions.cacheHandle) {
|
|
59
|
+
if (mergedOptions.cacheHandle.ref) {
|
|
60
|
+
return this.buildCachedPromptPayload(partition, mergedOptions.cacheHandle);
|
|
78
61
|
}
|
|
79
62
|
}
|
|
63
|
+
else if (this.cacheController && mergedOptions.cache !== false && hasCacheableContent) {
|
|
64
|
+
const handle = await this.cacheController.prepare({
|
|
65
|
+
model,
|
|
66
|
+
instructions: partition.cacheable.instructions,
|
|
67
|
+
data: partition.cacheable.data,
|
|
68
|
+
tools: mergedOptions.tools,
|
|
69
|
+
readOnly: mergedOptions.cache === 'read-only',
|
|
70
|
+
});
|
|
71
|
+
return this.buildCachedPromptPayload(partition, handle);
|
|
72
|
+
}
|
|
80
73
|
const systemInstructionParts = prompt.instructions?.map(el => elementToPart(el));
|
|
81
74
|
const allDataElements = [...(prompt.data || []), ...(prompt.output || [])];
|
|
82
75
|
const contents = allDataElements.length > 0
|
|
@@ -84,6 +77,22 @@ export class GoogleGenAIDriver {
|
|
|
84
77
|
: [{ parts: [{ text: 'Please process according to the instructions.' }] }];
|
|
85
78
|
return { systemInstructionParts, contents, cacheHandle: null };
|
|
86
79
|
}
|
|
80
|
+
buildCachedPromptPayload(partition, handle) {
|
|
81
|
+
const instructionsForRequest = handle.includes.instructions
|
|
82
|
+
? partition.volatile.instructions
|
|
83
|
+
: [...partition.cacheable.instructions, ...partition.volatile.instructions];
|
|
84
|
+
const uncachedInstructionParts = instructionsForRequest.length > 0
|
|
85
|
+
? instructionsForRequest.map(el => elementToPart(el))
|
|
86
|
+
: undefined;
|
|
87
|
+
const dataForRequest = handle.includes.dataElementCount >= partition.cacheable.data.length
|
|
88
|
+
? partition.volatile.data
|
|
89
|
+
: [...partition.cacheable.data, ...partition.volatile.data];
|
|
90
|
+
const volatileElements = [...dataForRequest, ...partition.volatile.output];
|
|
91
|
+
const contents = volatileElements.length > 0
|
|
92
|
+
? mergeToolResultContents(volatileElements.map(el => elementToContent(el)))
|
|
93
|
+
: [{ parts: [{ text: 'Please process according to the instructions.' }] }];
|
|
94
|
+
return { systemInstructionParts: uncachedInstructionParts, contents, cacheHandle: handle };
|
|
95
|
+
}
|
|
87
96
|
buildGenerationConfig(mergedOptions, cacheHandle, systemInstructionParts, prompt) {
|
|
88
97
|
const config = {
|
|
89
98
|
temperature: mergedOptions.temperature ?? this.defaultTemperature,
|