@bendyline/gezel-inference 0.0.0-stage → 1.0.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/LICENSE +21 -0
- package/README.md +13 -2
- package/dist/cache/adapter.d.ts +115 -0
- package/dist/cache/adapter.js +23 -0
- package/dist/cache/budget.d.ts +15 -0
- package/dist/cache/budget.js +31 -0
- package/dist/cache/controller.d.ts +205 -0
- package/dist/cache/controller.js +377 -0
- package/dist/catalog/LICENSE +21 -0
- package/dist/catalog/chat-models/bt/btl4-35b-q4/manifest.json +146 -0
- package/dist/catalog/chat-models/bt/btl4-35b-q4/versions/1.0.0/manifest.json +15 -0
- package/dist/catalog/chat-models/bt/btl4-35b-q4/versions/1.0.1/manifest.json +15 -0
- package/dist/catalog/chat-models/bt/btl4-compact-iq2/manifest.json +146 -0
- package/dist/catalog/chat-models/bt/btl4-compact-iq2/versions/1.0.0/manifest.json +15 -0
- package/dist/catalog/chat-models/bt/btl4-compact-iq2/versions/1.0.1/manifest.json +15 -0
- package/dist/catalog/chat-models/bt/btl4-compact-iq2/versions/1.0.2/manifest.json +15 -0
- package/dist/catalog/chat-models/de/deepseek-r1-8b-q4/manifest.json +166 -0
- package/dist/catalog/chat-models/de/deepseek-r1-8b-q4/versions/1.1.0/manifest.json +62 -0
- package/dist/catalog/chat-models/de/deepseek-r1-8b-q4/versions/1.1.1/manifest.json +61 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-mxfp4/manifest.json +125 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-mxfp4/versions/1.0.0/manifest.json +27 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q2/manifest.json +125 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q2/versions/1.0.0/manifest.json +27 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q2/versions/1.1.0/manifest.json +27 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q2q4/manifest.json +126 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q2q4/versions/1.0.0/manifest.json +27 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q4/manifest.json +318 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q4/versions/1.0.0/manifest.json +225 -0
- package/dist/catalog/chat-models/de/deepseek-v4-flash-284b-q4/versions/1.1.0/manifest.json +225 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q4/manifest.json +249 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q4/versions/1.0.0/manifest.json +70 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q4/versions/1.1.0/manifest.json +72 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q4/versions/1.1.2/manifest.json +78 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q4/versions/1.1.3/manifest.json +78 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q4/versions/1.2.0/manifest.json +98 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q8/manifest.json +228 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q8/versions/1.0.0/manifest.json +72 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q8/versions/1.0.2/manifest.json +78 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q8/versions/1.0.3/manifest.json +78 -0
- package/dist/catalog/chat-models/ge/gemma4-12b-q8/versions/1.1.0/manifest.json +78 -0
- package/dist/catalog/chat-models/ge/gemma4-26b-q4/manifest.json +220 -0
- package/dist/catalog/chat-models/ge/gemma4-26b-q4/versions/1.1.0/manifest.json +75 -0
- package/dist/catalog/chat-models/ge/gemma4-26b-q4/versions/1.2.0/manifest.json +75 -0
- package/dist/catalog/chat-models/ge/gemma4-26b-q4/versions/1.2.1/manifest.json +80 -0
- package/dist/catalog/chat-models/ge/gemma4-26b-q4/versions/1.2.2/manifest.json +80 -0
- package/dist/catalog/chat-models/ge/gemma4-26b-q4/versions/1.3.0/manifest.json +81 -0
- package/dist/catalog/chat-models/ge/gemma4-31b-q4/manifest.json +226 -0
- package/dist/catalog/chat-models/ge/gemma4-31b-q4/versions/1.1.0/manifest.json +80 -0
- package/dist/catalog/chat-models/ge/gemma4-31b-q4/versions/1.1.1/manifest.json +82 -0
- package/dist/catalog/chat-models/ge/gemma4-31b-q4/versions/1.2.0/manifest.json +82 -0
- package/dist/catalog/chat-models/ge/gemma4-31b-q4/versions/1.2.1/manifest.json +95 -0
- package/dist/catalog/chat-models/ge/gemma4-31b-q4/versions/1.2.2/manifest.json +95 -0
- package/dist/catalog/chat-models/ge/gemma4-31b-q4/versions/1.3.0/manifest.json +86 -0
- package/dist/catalog/chat-models/ge/gemma4-e2b-q4/manifest.json +213 -0
- package/dist/catalog/chat-models/ge/gemma4-e2b-q4/versions/1.1.0/manifest.json +67 -0
- package/dist/catalog/chat-models/ge/gemma4-e2b-q4/versions/1.1.2/manifest.json +75 -0
- package/dist/catalog/chat-models/ge/gemma4-e2b-q4/versions/1.2.0/manifest.json +71 -0
- package/dist/catalog/chat-models/ge/gemma4-e2b-q4/versions/1.2.1/manifest.json +71 -0
- package/dist/catalog/chat-models/ge/gemma4-e2b-q4/versions/1.3.0/manifest.json +71 -0
- package/dist/catalog/chat-models/ge/gemma4-e4b-q4/manifest.json +205 -0
- package/dist/catalog/chat-models/ge/gemma4-e4b-q4/versions/1.1.0/manifest.json +72 -0
- package/dist/catalog/chat-models/ge/gemma4-e4b-q4/versions/1.1.2/manifest.json +75 -0
- package/dist/catalog/chat-models/ge/gemma4-e4b-q4/versions/1.2.0/manifest.json +76 -0
- package/dist/catalog/chat-models/ge/gemma4-e4b-q4/versions/1.2.1/manifest.json +76 -0
- package/dist/catalog/chat-models/ge/gemma4-e4b-q4/versions/1.3.0/manifest.json +76 -0
- package/dist/catalog/chat-models/gl/glm-5.2-754b-q2/manifest.json +127 -0
- package/dist/catalog/chat-models/gl/glm-5.2-754b-q2/versions/1.0.0/manifest.json +20 -0
- package/dist/catalog/chat-models/gl/glm-5.3-flash-320b-q2/manifest.json +140 -0
- package/dist/catalog/chat-models/gl/glm-5.3-flash-320b-q2/versions/1.0.0/manifest.json +23 -0
- package/dist/catalog/chat-models/gl/glm-5.3-flash-320b-q2/versions/1.0.1/manifest.json +26 -0
- package/dist/catalog/chat-models/gp/gpt-oss-120b-q4/manifest.json +247 -0
- package/dist/catalog/chat-models/gp/gpt-oss-120b-q4/versions/1.0.0/manifest.json +137 -0
- package/dist/catalog/chat-models/gp/gpt-oss-120b-q4/versions/1.1.0/manifest.json +135 -0
- package/dist/catalog/chat-models/gp/gpt-oss-20b-q4/manifest.json +195 -0
- package/dist/catalog/chat-models/gp/gpt-oss-20b-q4/versions/1.1.0/manifest.json +72 -0
- package/dist/catalog/chat-models/gp/gpt-oss-20b-q4/versions/1.1.1/manifest.json +71 -0
- package/dist/catalog/chat-models/gr/granite4.2-30b-q4/manifest.json +200 -0
- package/dist/catalog/chat-models/gr/granite4.2-30b-q4/versions/1.0.0/manifest.json +72 -0
- package/dist/catalog/chat-models/gr/granite4.2-3b-q4/manifest.json +196 -0
- package/dist/catalog/chat-models/gr/granite4.2-3b-q4/versions/1.0.0/manifest.json +57 -0
- package/dist/catalog/chat-models/gr/granite4.2-8b-q4/manifest.json +189 -0
- package/dist/catalog/chat-models/gr/granite4.2-8b-q4/versions/1.0.0/manifest.json +57 -0
- package/dist/catalog/chat-models/index.json +1 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q4/manifest.json +235 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q4/versions/1.0.0/manifest.json +124 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q4/versions/1.0.1/manifest.json +124 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q4/versions/1.0.2/manifest.json +123 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q6/manifest.json +257 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q6/versions/1.0.0/manifest.json +145 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q6/versions/1.0.1/manifest.json +145 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q8/manifest.json +285 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q8/versions/1.0.0/manifest.json +174 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q8/versions/1.0.1/manifest.json +174 -0
- package/dist/catalog/chat-models/la/laguna-s-2.1-118b-q8/versions/1.0.2/manifest.json +173 -0
- package/dist/catalog/chat-models/lf/lfm2.5-2.6b-q4/manifest.json +162 -0
- package/dist/catalog/chat-models/lf/lfm2.5-2.6b-q4/versions/1.0.0/manifest.json +59 -0
- package/dist/catalog/chat-models/lf/lfm2.5-2.6b-q4/versions/1.0.1/manifest.json +58 -0
- package/dist/catalog/chat-models/ll/llama3.2-3b-q4/manifest.json +134 -0
- package/dist/catalog/chat-models/ll/llama3.2-3b-q4/versions/1.1.0/manifest.json +57 -0
- package/dist/catalog/chat-models/ll/llama3.2-3b-q4/versions/1.1.1/manifest.json +56 -0
- package/dist/catalog/chat-models/mi/minicpm5-1b-q4/manifest.json +156 -0
- package/dist/catalog/chat-models/mi/minicpm5-1b-q4/versions/1.0.0/manifest.json +57 -0
- package/dist/catalog/chat-models/mi/minicpm5-2b-q4/manifest.json +161 -0
- package/dist/catalog/chat-models/mi/minicpm5-2b-q4/versions/1.0.0/manifest.json +57 -0
- package/dist/catalog/chat-models/mi/mistral-7b-q4/manifest.json +159 -0
- package/dist/catalog/chat-models/mi/mistral-7b-q4/versions/1.1.0/manifest.json +62 -0
- package/dist/catalog/chat-models/mi/mistral-7b-q4/versions/1.1.1/manifest.json +61 -0
- package/dist/catalog/chat-models/mi/mistral-medium-3.5-128b-q4/manifest.json +275 -0
- package/dist/catalog/chat-models/mi/mistral-medium-3.5-128b-q4/versions/1.0.0/manifest.json +154 -0
- package/dist/catalog/chat-models/mi/mistral-medium-3.5-128b-q4/versions/1.0.1/manifest.json +153 -0
- package/dist/catalog/chat-models/mu/muse-glimmer-30b-q4/manifest.json +135 -0
- package/dist/catalog/chat-models/mu/muse-glimmer-30b-q4/versions/1.0.0/manifest.json +20 -0
- package/dist/catalog/chat-models/mu/muse-glimmer-30b-q4/versions/1.0.1/manifest.json +20 -0
- package/dist/catalog/chat-models/mu/muse-glimmer-30b-q4/versions/1.0.2/manifest.json +20 -0
- package/dist/catalog/chat-models/na/nanbeige4.2-3b-q4/manifest.json +138 -0
- package/dist/catalog/chat-models/na/nanbeige4.2-3b-q4/versions/1.0.0/manifest.json +14 -0
- package/dist/catalog/chat-models/ne/nemotron3-nano-30b-q4/manifest.json +212 -0
- package/dist/catalog/chat-models/ne/nemotron3-nano-30b-q4/versions/1.0.0/manifest.json +94 -0
- package/dist/catalog/chat-models/ne/nemotron3-nano-30b-q4/versions/1.0.1/manifest.json +94 -0
- package/dist/catalog/chat-models/ne/nemotron3-nano-30b-q4/versions/1.0.2/manifest.json +93 -0
- package/dist/catalog/chat-models/ne/nemotron3-super-120b-q4/manifest.json +135 -0
- package/dist/catalog/chat-models/ne/nemotron3-super-120b-q4/versions/1.0.0/manifest.json +30 -0
- package/dist/catalog/chat-models/ne/nemotron3-super-120b-q4/versions/1.0.1/manifest.json +30 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-lightning-30b-q4/manifest.json +192 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-lightning-30b-q4/versions/1.0.0/manifest.json +74 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-lightning-30b-q4/versions/1.0.1/manifest.json +73 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-lightning-30b-q8/manifest.json +207 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-lightning-30b-q8/versions/1.0.0/manifest.json +89 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-lightning-30b-q8/versions/1.0.1/manifest.json +88 -0
- package/dist/catalog/chat-models/or/ornith-35b-q4/manifest.json +224 -0
- package/dist/catalog/chat-models/or/ornith-35b-q4/versions/1.0.0/manifest.json +94 -0
- package/dist/catalog/chat-models/or/ornith-35b-q4/versions/1.0.1/manifest.json +93 -0
- package/dist/catalog/chat-models/or/ornith-35b-q8/manifest.json +244 -0
- package/dist/catalog/chat-models/or/ornith-35b-q8/versions/1.0.0/manifest.json +114 -0
- package/dist/catalog/chat-models/or/ornith-35b-q8/versions/1.0.1/manifest.json +113 -0
- package/dist/catalog/chat-models/or/ornith-9b-q4/manifest.json +215 -0
- package/dist/catalog/chat-models/or/ornith-9b-q4/versions/1.0.0/manifest.json +84 -0
- package/dist/catalog/chat-models/or/ornith-9b-q4/versions/1.0.1/manifest.json +83 -0
- package/dist/catalog/chat-models/or/ornith1.5-35b-a3b-q4/manifest.json +208 -0
- package/dist/catalog/chat-models/or/ornith1.5-35b-a3b-q4/versions/1.0.0/manifest.json +74 -0
- package/dist/catalog/chat-models/or/ornith1.5-35b-a3b-q8/manifest.json +223 -0
- package/dist/catalog/chat-models/or/ornith1.5-35b-a3b-q8/versions/1.0.0/manifest.json +89 -0
- package/dist/catalog/chat-models/or/ornith1.5-9b-q4/manifest.json +187 -0
- package/dist/catalog/chat-models/or/ornith1.5-9b-q4/versions/1.0.0/manifest.json +53 -0
- package/dist/catalog/chat-models/or/ornith1.5-9b-q4/versions/1.0.1/manifest.json +77 -0
- package/dist/catalog/chat-models/or/ornith1.5-9b-q8/manifest.json +192 -0
- package/dist/catalog/chat-models/or/ornith1.5-9b-q8/versions/1.0.0/manifest.json +58 -0
- package/dist/catalog/chat-models/or/ornith1.5-9b-q8/versions/1.0.1/manifest.json +82 -0
- package/dist/catalog/chat-models/qw/qwen3.5-0.8b-q4/manifest.json +192 -0
- package/dist/catalog/chat-models/qw/qwen3.5-0.8b-q4/versions/1.0.0/manifest.json +75 -0
- package/dist/catalog/chat-models/qw/qwen3.5-122b-a10b-q4/manifest.json +315 -0
- package/dist/catalog/chat-models/qw/qwen3.5-122b-a10b-q4/versions/1.0.0/manifest.json +164 -0
- package/dist/catalog/chat-models/qw/qwen3.5-122b-a10b-q4/versions/1.0.1/manifest.json +164 -0
- package/dist/catalog/chat-models/qw/qwen3.5-122b-a10b-q4/versions/1.0.2/manifest.json +164 -0
- package/dist/catalog/chat-models/qw/qwen3.5-122b-a10b-q4/versions/1.0.3/manifest.json +163 -0
- package/dist/catalog/chat-models/qw/qwen3.5-27b-q4/manifest.json +217 -0
- package/dist/catalog/chat-models/qw/qwen3.5-27b-q4/versions/1.0.0/manifest.json +90 -0
- package/dist/catalog/chat-models/qw/qwen3.5-2b-q4/manifest.json +194 -0
- package/dist/catalog/chat-models/qw/qwen3.5-2b-q4/versions/1.1.0/manifest.json +77 -0
- package/dist/catalog/chat-models/qw/qwen3.5-2b-q4/versions/1.1.2/manifest.json +76 -0
- package/dist/catalog/chat-models/qw/qwen3.5-2b-q4/versions/1.1.3/manifest.json +76 -0
- package/dist/catalog/chat-models/qw/qwen3.5-4b-q4/manifest.json +188 -0
- package/dist/catalog/chat-models/qw/qwen3.5-4b-q4/versions/1.1.0/manifest.json +77 -0
- package/dist/catalog/chat-models/qw/qwen3.5-4b-q4/versions/1.1.2/manifest.json +76 -0
- package/dist/catalog/chat-models/qw/qwen3.5-4b-q4/versions/1.1.3/manifest.json +76 -0
- package/dist/catalog/chat-models/qw/qwen3.5-9b-q4/manifest.json +205 -0
- package/dist/catalog/chat-models/qw/qwen3.5-9b-q4/versions/1.1.0/manifest.json +82 -0
- package/dist/catalog/chat-models/qw/qwen3.5-9b-q4/versions/1.1.2/manifest.json +81 -0
- package/dist/catalog/chat-models/qw/qwen3.5-9b-q4/versions/1.1.3/manifest.json +81 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q4/manifest.json +230 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q4/versions/1.1.0/manifest.json +92 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q4/versions/1.1.4/manifest.json +91 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q4/versions/1.1.5/manifest.json +91 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q4/versions/1.1.6/manifest.json +115 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q8/manifest.json +240 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q8/versions/1.0.0/manifest.json +102 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q8/versions/1.0.2/manifest.json +103 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q8/versions/1.0.3/manifest.json +103 -0
- package/dist/catalog/chat-models/qw/qwen3.6-27b-q8/versions/1.0.4/manifest.json +127 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q4/manifest.json +233 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q4/versions/1.0.0/manifest.json +92 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q4/versions/1.0.1/manifest.json +93 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q4/versions/1.0.2/manifest.json +93 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q4/versions/1.0.3/manifest.json +117 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q8/manifest.json +252 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q8/versions/1.0.0/manifest.json +112 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q8/versions/1.0.1/manifest.json +113 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q8/versions/1.0.2/manifest.json +113 -0
- package/dist/catalog/chat-models/qw/qwen3.6-35b-a3b-q8/versions/1.0.3/manifest.json +137 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-iq1-s/manifest.json +195 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-iq1-s/versions/1.0.0/manifest.json +19 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q2/manifest.json +194 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q2/versions/1.0.0/manifest.json +19 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q3/manifest.json +194 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q3/versions/1.0.0/manifest.json +19 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q3/versions/1.0.1/manifest.json +19 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q4/manifest.json +291 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q4/versions/1.0.0/manifest.json +20 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q4/versions/1.0.1/manifest.json +93 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q4/versions/1.0.2/manifest.json +92 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q4/versions/1.0.3/manifest.json +116 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q4/versions/1.0.4/manifest.json +116 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q4/versions/1.0.5/manifest.json +116 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q6/manifest.json +278 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q6/versions/1.0.0/manifest.json +20 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q6/versions/1.0.1/manifest.json +104 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q6/versions/1.0.2/manifest.json +103 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q6/versions/1.0.3/manifest.json +127 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q8/manifest.json +278 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q8/versions/1.0.0/manifest.json +113 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q8/versions/1.0.1/manifest.json +113 -0
- package/dist/catalog/chat-models/qw/qwen3.8-27b-q8/versions/1.0.2/manifest.json +137 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-iq3/manifest.json +221 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-iq3/versions/1.0.0/manifest.json +36 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-iq4/manifest.json +429 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-iq4/versions/1.0.0/manifest.json +36 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-iq4/versions/1.1.0/manifest.json +205 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-iq4/versions/1.1.1/manifest.json +244 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-q2/manifest.json +203 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-q2/versions/1.0.0/manifest.json +21 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-q2/versions/1.0.1/manifest.json +31 -0
- package/dist/catalog/chat-models/qw/qwen3.8-flash-next-q2/versions/1.0.2/manifest.json +30 -0
- package/dist/catalog/chat-models/raw-index.json +1 -0
- package/dist/catalog/chat-models/ta/talkie-1930-13b-q4/manifest.json +79 -0
- package/dist/catalog/chat-models/ta/talkie-1930-13b-q4/versions/1.0.0/manifest.json +15 -0
- package/dist/catalog/chat-models/ta/talkie-1930-13b-q4/versions/1.0.1/manifest.json +15 -0
- package/dist/catalog/chat-models/te/ternary-bonsai-27b-q2/manifest.json +204 -0
- package/dist/catalog/chat-models/te/ternary-bonsai-27b-q2/versions/1.0.0/manifest.json +70 -0
- package/dist/catalog/chat-models/te/ternary-bonsai-27b-q2/versions/1.0.1/manifest.json +70 -0
- package/dist/catalog/chat-models/un/underdog-saluki-27b-iq2-mix/manifest.json +164 -0
- package/dist/catalog/chat-models/un/underdog-saluki-27b-iq2-mix/versions/1.0.0/manifest.json +14 -0
- package/dist/catalog/knowledge-catalogs/be/bendyline-how-to-books/manifest.json +26 -0
- package/dist/catalog/knowledge-catalogs/be/bendyline-how-to-books/versions/2026.10.8/manifest.json +8950 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-alaska-part-0001/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-alaska-part-0001/versions/2026.10.1/manifest.json +658 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-nevada-part-0001/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-nevada-part-0001/versions/2026.10.1/manifest.json +666 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-us-300-399-part-0001/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-us-300-399-part-0001/versions/2026.10.2/manifest.json +182 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-us-347-349/manifest.json +25 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-us-347-349/versions/2026.10.5/manifest.json +38 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-utah-part-0001/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-utah-part-0001/versions/2026.10.1/manifest.json +558 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-utah-part-0002/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-utah-part-0002/versions/2026.10.1/manifest.json +258 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0001/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0001/versions/2026.10.1/manifest.json +318 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0002/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0002/versions/2026.10.1/manifest.json +266 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0003/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0003/versions/2026.10.1/manifest.json +186 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0004/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0004/versions/2026.10.1/manifest.json +138 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0005/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0005/versions/2026.10.1/manifest.json +138 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-wyoming-part-0001/manifest.json +24 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-wyoming-part-0001/versions/2026.10.3/manifest.json +626 -0
- package/dist/catalog/knowledge-catalogs/index.json +1 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-aspnet-core-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-aspnet-core-en/versions/2026.10.16/manifest.json +18270 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-ai-platform-en/manifest.json +23 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-ai-platform-en/versions/2026.10.16/manifest.json +1098 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-apps-compute-en/manifest.json +23 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-apps-compute-en/versions/2026.10.16/manifest.json +722 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-data-aiot-en/manifest.json +23 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-data-aiot-en/versions/2026.10.16/manifest.json +530 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-management-hybrid-en/manifest.json +23 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-management-hybrid-en/versions/2026.10.16/manifest.json +602 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-network-security-en/manifest.json +23 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-network-security-en/versions/2026.10.16/manifest.json +250 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-dotnet-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-dotnet-en/versions/2026.10.16/manifest.json +16794 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-entity-framework-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-entity-framework-en/versions/2026.10.16/manifest.json +1106 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-microsoft-365-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-microsoft-365-en/versions/2026.10.16/manifest.json +234 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-powershell-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-powershell-en/versions/2026.10.16/manifest.json +522 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-sql-server-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-sql-server-en/versions/2026.10.16/manifest.json +1850 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-windows-apps-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-windows-apps-en/versions/2026.10.16/manifest.json +1734 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-windows-server-en/manifest.json +22 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-windows-server-en/versions/2026.10.16/manifest.json +774 -0
- package/dist/catalog/knowledge-catalogs/raw-index.json +1 -0
- package/dist/catalog/knowledge-catalogs/re/regional-american-south/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-american-south/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-american-south/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-american-south/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-andes-amazon/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-andes-amazon/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-andes-amazon/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-andes-amazon/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-australia-nz/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-australia-nz/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-australia-nz/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-australia-nz/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-brazil/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-brazil/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-brazil/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-brazil/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-britain-ireland/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-britain-ireland/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-britain-ireland/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-britain-ireland/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-california-southwest/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-california-southwest/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-california-southwest/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-california-southwest/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-canada-alaska/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-canada-alaska/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-canada-alaska/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-canada-alaska/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-central-eastern-europe/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-central-eastern-europe/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-central-eastern-europe/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-central-eastern-europe/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-asia/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-asia/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-asia/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-asia/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-southern-africa/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-southern-africa/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-southern-africa/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-southern-africa/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mediterranean/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mediterranean/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mediterranean/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mediterranean/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mexico-central-america/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mexico-central-america/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mexico-central-america/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mexico-central-america/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-middle-east/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-middle-east/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-middle-east/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-middle-east/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-midwest/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-midwest/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-midwest/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-midwest/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-north-africa/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-north-africa/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-north-africa/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-north-africa/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northeast/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northeast/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northeast/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northeast/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-eurasia/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-eurasia/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-eurasia/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-eurasia/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-europe/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-europe/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-europe/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-europe/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-islands/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-islands/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-islands/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-islands/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-northwest/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-northwest/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-northwest/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-northwest/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-rockies-plains/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-rockies-plains/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-rockies-plains/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-rockies-plains/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-south-asia/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-south-asia/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-south-asia/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-south-asia/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southeast-asia/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southeast-asia/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southeast-asia/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southeast-asia/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southern-cone/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southern-cone/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southern-cone/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southern-cone/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-west-central-africa/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-west-central-africa/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-west-central-africa/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-west-central-africa/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe/manifest.json +48 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe/versions/2026.10.3/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/manifest.json +28 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/versions/2026.4.2/manifest.json +53 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/versions/2026.4.3/manifest.json +885 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/versions/2026.4.5/manifest.json +157 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/art.json +11 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/manifest.json +32 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/versions/2026.4.2/manifest.json +69 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/versions/2026.4.3/manifest.json +741 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/versions/2026.4.5/manifest.json +173 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/manifest.json +69 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/versions/2026.4.4/manifest.json +217 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/versions/2026.4.5/manifest.json +217 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/manifest.json +64 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/versions/2026.4.4/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/versions/2026.4.5/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-film-tv/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-film-tv/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-film-tv/manifest.json +64 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-film-tv/versions/2026.4.5/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/art.json +11 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/manifest.json +29 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/versions/2026.4.2/manifest.json +57 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/versions/2026.4.3/manifest.json +925 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/versions/2026.4.5/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/manifest.json +28 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/versions/2026.4.2/manifest.json +53 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/versions/2026.4.3/manifest.json +1665 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/versions/2026.4.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/manifest.json +29 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/versions/2026.4.2/manifest.json +57 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/versions/2026.4.3/manifest.json +1233 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/versions/2026.4.5/manifest.json +141 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/art.json +11 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/manifest.json +29 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/versions/2026.4.2/manifest.json +57 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/versions/2026.4.3/manifest.json +493 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/versions/2026.4.5/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/manifest.json +63 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/versions/2026.4.4/manifest.json +193 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/versions/2026.4.5/manifest.json +193 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/manifest.json +30 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/versions/2026.4.2/manifest.json +61 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/versions/2026.4.3/manifest.json +665 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/versions/2026.4.5/manifest.json +177 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/manifest.json +29 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/versions/2026.4.2/manifest.json +57 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/versions/2026.4.3/manifest.json +745 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/versions/2026.4.5/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/manifest.json +62 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/versions/2026.4.4/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/versions/2026.4.5/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-music/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-music/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-music/manifest.json +64 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-music/versions/2026.4.5/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/manifest.json +64 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/versions/2026.4.4/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/versions/2026.4.5/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/manifest.json +30 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/versions/2026.4.2/manifest.json +61 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/versions/2026.4.3/manifest.json +1253 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/versions/2026.4.5/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/manifest.json +29 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/versions/2026.4.2/manifest.json +57 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/versions/2026.4.3/manifest.json +1957 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/versions/2026.4.5/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-sports/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-sports/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-sports/manifest.json +63 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-sports/versions/2026.4.5/manifest.json +193 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/art.json +11 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/manifest.json +45 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/versions/2026.4.4/manifest.json +121 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/versions/2026.4.5/manifest.json +173 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/art.json +12 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/logo.webp +0 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/manifest.json +62 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/versions/2026.4.4/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/versions/2026.4.5/manifest.json +189 -0
- package/dist/catalog/provenance.json +8 -0
- package/dist/chat/catalog-model-lookup.d.ts +21 -0
- package/dist/chat/catalog-model-lookup.js +48 -0
- package/dist/chat/local-model-tier.d.ts +1 -0
- package/dist/chat/local-model-tier.js +2 -0
- package/dist/chat/vision-capability.d.ts +1 -0
- package/dist/chat/vision-capability.js +3 -0
- package/dist/engine-components.d.ts +30 -0
- package/dist/engine-components.js +144 -0
- package/dist/engines/electron-native-reuse.d.ts +65 -0
- package/dist/engines/electron-native-reuse.js +305 -0
- package/dist/engines/native-file-manifest.json +1320 -0
- package/dist/engines/native-manifest.d.ts +70 -0
- package/dist/engines/native-manifest.js +98 -0
- package/dist/engines/registry.d.ts +88 -0
- package/dist/engines/registry.js +217 -0
- package/dist/engines/resolver.d.ts +121 -0
- package/dist/engines/resolver.js +894 -0
- package/dist/engines/signature.d.ts +85 -0
- package/dist/engines/signature.js +231 -0
- package/dist/fs/atomic.d.ts +53 -0
- package/dist/fs/atomic.js +202 -0
- package/dist/fs/config-store.d.ts +14 -0
- package/dist/fs/config-store.js +101 -0
- package/dist/fs/home-permissions.d.ts +18 -0
- package/dist/fs/home-permissions.js +27 -0
- package/dist/fs/safe-paths.d.ts +107 -0
- package/dist/fs/safe-paths.js +264 -0
- package/dist/fs/security-json.d.ts +13 -0
- package/dist/fs/security-json.js +67 -0
- package/dist/http/auth-context.d.ts +23 -0
- package/dist/http/auth-context.js +1 -0
- package/dist/http/engine-runtime-context.d.ts +30 -0
- package/dist/http/engine-runtime-context.js +1 -0
- package/dist/http/external-conversation-contract.d.ts +49 -0
- package/dist/http/external-conversation-contract.js +1 -0
- package/dist/http/external-conversation-headers.d.ts +11 -0
- package/dist/http/external-conversation-headers.js +11 -0
- package/dist/http/inference-context.d.ts +36 -0
- package/dist/http/inference-context.js +1 -0
- package/dist/http/model-inventory-cache.d.ts +8 -0
- package/dist/http/model-inventory-cache.js +8 -0
- package/dist/http/openai-compat/action-ledger.d.ts +15 -0
- package/dist/http/openai-compat/action-ledger.js +119 -0
- package/dist/http/openai-compat/apple-model.d.ts +3 -0
- package/dist/http/openai-compat/apple-model.js +44 -0
- package/dist/http/openai-compat/caller-owned-profile.d.ts +7 -0
- package/dist/http/openai-compat/caller-owned-profile.js +18 -0
- package/dist/http/openai-compat/chat-progress.d.ts +9 -0
- package/dist/http/openai-compat/chat-progress.js +69 -0
- package/dist/http/openai-compat/chat-target.d.ts +76 -0
- package/dist/http/openai-compat/chat-target.js +97 -0
- package/dist/http/openai-compat/embeddings.d.ts +37 -0
- package/dist/http/openai-compat/embeddings.js +86 -0
- package/dist/http/openai-compat/request-tuning.d.ts +35 -0
- package/dist/http/openai-compat/request-tuning.js +87 -0
- package/dist/http/openai-compat/responses-streaming.d.ts +351 -0
- package/dist/http/openai-compat/responses-streaming.js +717 -0
- package/dist/http/openai-compat/responses-translate.d.ts +215 -0
- package/dist/http/openai-compat/responses-translate.js +377 -0
- package/dist/http/openai-compat/streaming-telemetry.d.ts +30 -0
- package/dist/http/openai-compat/streaming-telemetry.js +88 -0
- package/dist/http/openai-compat/streaming.d.ts +141 -0
- package/dist/http/openai-compat/streaming.js +687 -0
- package/dist/http/openai-compat/tool-call-stream-filter.d.ts +33 -0
- package/dist/http/openai-compat/tool-call-stream-filter.js +110 -0
- package/dist/http/openai-compat/translate.d.ts +254 -0
- package/dist/http/openai-compat/translate.js +485 -0
- package/dist/http/routes/engines.d.ts +13 -0
- package/dist/http/routes/engines.js +366 -0
- package/dist/http/routes/machine-engine-proxy.d.ts +26 -0
- package/dist/http/routes/machine-engine-proxy.js +43 -0
- package/dist/http/routes/model-bundles.d.ts +4 -0
- package/dist/http/routes/model-bundles.js +190 -0
- package/dist/http/routes/v1-chat.d.ts +72 -0
- package/dist/http/routes/v1-chat.js +645 -0
- package/dist/http/routes/v1-embeddings.d.ts +3 -0
- package/dist/http/routes/v1-embeddings.js +82 -0
- package/dist/http/routes/v1-knowledge.d.ts +4 -0
- package/dist/http/routes/v1-knowledge.js +304 -0
- package/dist/http/routes/v1-models-ensure.d.ts +32 -0
- package/dist/http/routes/v1-models-ensure.js +122 -0
- package/dist/http/routes/v1-models.d.ts +8 -0
- package/dist/http/routes/v1-models.js +189 -0
- package/dist/http/routes/v1-responses.d.ts +20 -0
- package/dist/http/routes/v1-responses.js +327 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/inference-service.d.ts +28 -0
- package/dist/inference-service.js +275 -0
- package/dist/knowledge/admission.d.ts +3 -0
- package/dist/knowledge/admission.js +22 -0
- package/dist/knowledge/bundled-catalog.d.ts +2 -0
- package/dist/knowledge/bundled-catalog.js +2 -0
- package/dist/knowledge/catalog-host.d.ts +103 -0
- package/dist/knowledge/catalog-host.js +180 -0
- package/dist/knowledge/catalog-source.d.ts +22 -0
- package/dist/knowledge/catalog-source.js +35 -0
- package/dist/knowledge/install.d.ts +55 -0
- package/dist/knowledge/install.js +274 -0
- package/dist/knowledge/manager.d.ts +287 -0
- package/dist/knowledge/manager.js +1540 -0
- package/dist/knowledge/registry.d.ts +35 -0
- package/dist/knowledge/registry.js +123 -0
- package/dist/knowledge/search-worker.d.ts +17 -0
- package/dist/knowledge/search-worker.js +36 -0
- package/dist/knowledge/shared-install-contract.d.ts +19 -0
- package/dist/knowledge/shared-install-contract.js +1 -0
- package/dist/knowledge/spatial-query.d.ts +11 -0
- package/dist/knowledge/spatial-query.js +33 -0
- package/dist/knowledge/trust-anchors.d.ts +11 -0
- package/dist/knowledge/trust-anchors.js +51 -0
- package/dist/knowledge/vector-floors.d.ts +44 -0
- package/dist/knowledge/vector-floors.js +92 -0
- package/dist/knowledge/worker-host.d.ts +9 -0
- package/dist/knowledge/worker-host.js +179 -0
- package/dist/kokoro-lexicon/LICENSE +202 -0
- package/dist/kokoro-lexicon/lexicon-gb-en.txt.gz +0 -0
- package/dist/kokoro-lexicon/lexicon-us-en.txt.gz +0 -0
- package/dist/kokoro-lexicon/manifest.json +23 -0
- package/dist/machine-engine/inspect-runtime.d.ts +3 -0
- package/dist/machine-engine/inspect-runtime.js +48 -0
- package/dist/machine-engine/knowledge-assets.d.ts +79 -0
- package/dist/machine-engine/knowledge-assets.js +505 -0
- package/dist/memory/embed-core.d.ts +131 -0
- package/dist/memory/embed-core.js +398 -0
- package/dist/memory/embed-worker.d.ts +23 -0
- package/dist/memory/embed-worker.js +49 -0
- package/dist/memory/embeddings.d.ts +105 -0
- package/dist/memory/embeddings.js +467 -0
- package/dist/model-profile/behaviors/tools-mlx-template-fix.d.ts +1 -0
- package/dist/model-profile/behaviors/tools-mlx-template-fix.js +2 -0
- package/dist/model-profile/behaviors/turn-ramble-detection.d.ts +1 -0
- package/dist/model-profile/behaviors/turn-ramble-detection.js +2 -0
- package/dist/model-profile/defaults.d.ts +1 -0
- package/dist/model-profile/defaults.js +2 -0
- package/dist/model-profile/index.d.ts +9 -0
- package/dist/model-profile/index.js +7 -0
- package/dist/model-profile/registry.d.ts +15 -0
- package/dist/model-profile/registry.js +18 -0
- package/dist/model-profile/runtime.d.ts +48 -0
- package/dist/model-profile/runtime.js +131 -0
- package/dist/model-profile/tool-grammar.d.ts +1 -0
- package/dist/model-profile/tool-grammar.js +2 -0
- package/dist/model-profile/tuning.d.ts +19 -0
- package/dist/model-profile/tuning.js +21 -0
- package/dist/model-profile/types.d.ts +1 -0
- package/dist/model-profile/types.js +2 -0
- package/dist/models/bundle-storage.d.ts +28 -0
- package/dist/models/bundle-storage.js +80 -0
- package/dist/models/catalog-drift.d.ts +48 -0
- package/dist/models/catalog-drift.js +94 -0
- package/dist/models/catalog-payload-identity.d.ts +107 -0
- package/dist/models/catalog-payload-identity.js +254 -0
- package/dist/models/ensure.d.ts +125 -0
- package/dist/models/ensure.js +205 -0
- package/dist/models/gezmodel.d.ts +47 -0
- package/dist/models/gezmodel.js +742 -0
- package/dist/models/install-registry.d.ts +101 -0
- package/dist/models/install-registry.js +216 -0
- package/dist/models/model-id.d.ts +22 -0
- package/dist/models/model-id.js +40 -0
- package/dist/models/storage-roots.d.ts +274 -0
- package/dist/models/storage-roots.js +865 -0
- package/dist/native-release-entry.d.ts +16 -0
- package/dist/native-release-entry.js +16 -0
- package/dist/perf/redact-path.d.ts +2 -0
- package/dist/perf/redact-path.js +27 -0
- package/dist/perf/responsiveness.d.ts +70 -0
- package/dist/perf/responsiveness.js +560 -0
- package/dist/providers/active-install-message.d.ts +42 -0
- package/dist/providers/active-install-message.js +49 -0
- package/dist/providers/apple-foundation-models/binary.d.ts +4 -0
- package/dist/providers/apple-foundation-models/binary.js +18 -0
- package/dist/providers/apple-foundation-models/helper.d.ts +66 -0
- package/dist/providers/apple-foundation-models/helper.js +262 -0
- package/dist/providers/apple-foundation-models/provider.d.ts +82 -0
- package/dist/providers/apple-foundation-models/provider.js +389 -0
- package/dist/providers/apple-foundation-models/status.d.ts +9 -0
- package/dist/providers/apple-foundation-models/status.js +49 -0
- package/dist/providers/audio/kokoro-frontend.d.ts +50 -0
- package/dist/providers/audio/kokoro-frontend.js +113 -0
- package/dist/providers/audio/managed-speech-model.d.ts +9 -0
- package/dist/providers/audio/managed-speech-model.js +86 -0
- package/dist/providers/audio/types.d.ts +202 -0
- package/dist/providers/audio/types.js +17 -0
- package/dist/providers/audio/whisper-cpp.d.ts +99 -0
- package/dist/providers/audio/whisper-cpp.js +420 -0
- package/dist/providers/audio-persister-contract.d.ts +13 -0
- package/dist/providers/audio-persister-contract.js +1 -0
- package/dist/providers/catalog-model-config.d.ts +63 -0
- package/dist/providers/catalog-model-config.js +95 -0
- package/dist/providers/code-block-salvage.d.ts +1 -0
- package/dist/providers/code-block-salvage.js +2 -0
- package/dist/providers/codex-cli/reasoning.d.ts +8 -0
- package/dist/providers/codex-cli/reasoning.js +17 -0
- package/dist/providers/complete-tool-call.d.ts +16 -0
- package/dist/providers/complete-tool-call.js +25 -0
- package/dist/providers/constrained-turn.d.ts +1 -0
- package/dist/providers/constrained-turn.js +2 -0
- package/dist/providers/deliverable-read-pacing.d.ts +1 -0
- package/dist/providers/deliverable-read-pacing.js +2 -0
- package/dist/providers/direct-file-work-prompt.d.ts +1 -0
- package/dist/providers/direct-file-work-prompt.js +2 -0
- package/dist/providers/ds4/build-provider.d.ts +100 -0
- package/dist/providers/ds4/build-provider.js +539 -0
- package/dist/providers/ds4/cache-adapter.d.ts +42 -0
- package/dist/providers/ds4/cache-adapter.js +110 -0
- package/dist/providers/ds4/dspark.d.ts +83 -0
- package/dist/providers/ds4/dspark.js +107 -0
- package/dist/providers/ds4/mtp.d.ts +32 -0
- package/dist/providers/ds4/mtp.js +46 -0
- package/dist/providers/ds4/provider.d.ts +67 -0
- package/dist/providers/ds4/provider.js +104 -0
- package/dist/providers/ds4/residency.d.ts +143 -0
- package/dist/providers/ds4/residency.js +139 -0
- package/dist/providers/ds4/stdout-parser.d.ts +47 -0
- package/dist/providers/ds4/stdout-parser.js +134 -0
- package/dist/providers/duplicate-tool-calls.d.ts +1 -0
- package/dist/providers/duplicate-tool-calls.js +2 -0
- package/dist/providers/file-repair-policy.d.ts +1 -0
- package/dist/providers/file-repair-policy.js +2 -0
- package/dist/providers/gpu-arbiter.d.ts +159 -0
- package/dist/providers/gpu-arbiter.js +301 -0
- package/dist/providers/image-persister-contract.d.ts +15 -0
- package/dist/providers/image-persister-contract.js +1 -0
- package/dist/providers/llama-cpp/build-metadata.d.ts +13 -0
- package/dist/providers/llama-cpp/build-metadata.js +39 -0
- package/dist/providers/llama-cpp/build-provider.d.ts +66 -0
- package/dist/providers/llama-cpp/build-provider.js +1491 -0
- package/dist/providers/llama-cpp/cache-adapter.d.ts +242 -0
- package/dist/providers/llama-cpp/cache-adapter.js +689 -0
- package/dist/providers/llama-cpp/devices.d.ts +130 -0
- package/dist/providers/llama-cpp/devices.js +256 -0
- package/dist/providers/llama-cpp/disk-cache.d.ts +8 -0
- package/dist/providers/llama-cpp/disk-cache.js +112 -0
- package/dist/providers/llama-cpp/engine-flags.d.ts +181 -0
- package/dist/providers/llama-cpp/engine-flags.js +279 -0
- package/dist/providers/llama-cpp/gguf-metadata-async.d.ts +11 -0
- package/dist/providers/llama-cpp/gguf-metadata-async.js +180 -0
- package/dist/providers/llama-cpp/gguf-metadata-worker.d.ts +7 -0
- package/dist/providers/llama-cpp/gguf-metadata-worker.js +27 -0
- package/dist/providers/llama-cpp/gguf-metadata.d.ts +198 -0
- package/dist/providers/llama-cpp/gguf-metadata.js +615 -0
- package/dist/providers/llama-cpp/gguf-quantization-backfill.d.ts +32 -0
- package/dist/providers/llama-cpp/gguf-quantization-backfill.js +75 -0
- package/dist/providers/llama-cpp/index.d.ts +10 -0
- package/dist/providers/llama-cpp/index.js +13 -0
- package/dist/providers/llama-cpp/kv-cache-type.d.ts +118 -0
- package/dist/providers/llama-cpp/kv-cache-type.js +140 -0
- package/dist/providers/llama-cpp/log.d.ts +92 -0
- package/dist/providers/llama-cpp/log.js +280 -0
- package/dist/providers/llama-cpp/models.d.ts +389 -0
- package/dist/providers/llama-cpp/models.js +1011 -0
- package/dist/providers/llama-cpp/offload-planner.d.ts +339 -0
- package/dist/providers/llama-cpp/offload-planner.js +524 -0
- package/dist/providers/llama-cpp/provider.d.ts +493 -0
- package/dist/providers/llama-cpp/provider.js +862 -0
- package/dist/providers/llama-cpp/reasoning-launch.d.ts +7 -0
- package/dist/providers/llama-cpp/reasoning-launch.js +14 -0
- package/dist/providers/llama-cpp/spec-draft.d.ts +44 -0
- package/dist/providers/llama-cpp/spec-draft.js +44 -0
- package/dist/providers/llama-cpp/stdout-parser.d.ts +70 -0
- package/dist/providers/llama-cpp/stdout-parser.js +197 -0
- package/dist/providers/local-tool-call-salvage.d.ts +1 -0
- package/dist/providers/local-tool-call-salvage.js +2 -0
- package/dist/providers/local-turn-policy.d.ts +1 -0
- package/dist/providers/local-turn-policy.js +2 -0
- package/dist/providers/mlx/async-file-handoff.d.ts +11 -0
- package/dist/providers/mlx/async-file-handoff.js +25 -0
- package/dist/providers/mlx/build-provider.d.ts +65 -0
- package/dist/providers/mlx/build-provider.js +717 -0
- package/dist/providers/mlx/cache-adapter.d.ts +161 -0
- package/dist/providers/mlx/cache-adapter.js +445 -0
- package/dist/providers/mlx/chat-protocol.d.ts +48 -0
- package/dist/providers/mlx/chat-protocol.js +8 -0
- package/dist/providers/mlx/config-parser.d.ts +29 -0
- package/dist/providers/mlx/config-parser.js +81 -0
- package/dist/providers/mlx/engine-gate.d.ts +51 -0
- package/dist/providers/mlx/engine-gate.js +207 -0
- package/dist/providers/mlx/engine-hold.d.ts +41 -0
- package/dist/providers/mlx/engine-hold.js +59 -0
- package/dist/providers/mlx/engine-log-router.d.ts +84 -0
- package/dist/providers/mlx/engine-log-router.js +137 -0
- package/dist/providers/mlx/engine-stats-sampler.d.ts +36 -0
- package/dist/providers/mlx/engine-stats-sampler.js +59 -0
- package/dist/providers/mlx/index.d.ts +10 -0
- package/dist/providers/mlx/index.js +10 -0
- package/dist/providers/mlx/log.d.ts +55 -0
- package/dist/providers/mlx/log.js +157 -0
- package/dist/providers/mlx/model-geometry.d.ts +35 -0
- package/dist/providers/mlx/model-geometry.js +118 -0
- package/dist/providers/mlx/models.d.ts +289 -0
- package/dist/providers/mlx/models.js +1079 -0
- package/dist/providers/mlx/provider.d.ts +404 -0
- package/dist/providers/mlx/provider.js +3017 -0
- package/dist/providers/mlx/python/cache_persist.py +348 -0
- package/dist/providers/mlx/python/cache_seed.py +402 -0
- package/dist/providers/mlx/python/gezel_mlx_server.py +4491 -0
- package/dist/providers/mlx/python/lfm2_compat.py +55 -0
- package/dist/providers/mlx/python/qwen3_5_text_compat.py +60 -0
- package/dist/providers/mlx/python/qwen4_ple.py +159 -0
- package/dist/providers/mlx/python/spec_decode.py +775 -0
- package/dist/providers/mlx/python/template_stability.py +133 -0
- package/dist/providers/mlx/python/think_budget.py +113 -0
- package/dist/providers/mlx/python/tool_args_json.py +297 -0
- package/dist/providers/mlx/python/tool_call_stream.py +265 -0
- package/dist/providers/mlx/python/tool_grammar.py +794 -0
- package/dist/providers/mlx/python/vision_inputs.py +64 -0
- package/dist/providers/mlx/python/wave_policy.py +147 -0
- package/dist/providers/mlx/reasoning-stream.d.ts +85 -0
- package/dist/providers/mlx/reasoning-stream.js +196 -0
- package/dist/providers/mlx/request-shape.d.ts +34 -0
- package/dist/providers/mlx/request-shape.js +42 -0
- package/dist/providers/mlx/runtime-diagnostics.d.ts +29 -0
- package/dist/providers/mlx/runtime-diagnostics.js +162 -0
- package/dist/providers/mlx/spec-drafter.d.ts +25 -0
- package/dist/providers/mlx/spec-drafter.js +73 -0
- package/dist/providers/mlx/stdout-parser.d.ts +60 -0
- package/dist/providers/mlx/stdout-parser.js +254 -0
- package/dist/providers/mlx/textual-tool-call-salvage.d.ts +46 -0
- package/dist/providers/mlx/textual-tool-call-salvage.js +396 -0
- package/dist/providers/mlx/tool-call-protocol.d.ts +65 -0
- package/dist/providers/mlx/tool-call-protocol.js +140 -0
- package/dist/providers/mlx/tool-call-stripper.d.ts +68 -0
- package/dist/providers/mlx/tool-call-stripper.js +153 -0
- package/dist/providers/mlx/tool-image-retention.d.ts +23 -0
- package/dist/providers/mlx/tool-image-retention.js +43 -0
- package/dist/providers/mlx/turn-telemetry.d.ts +22 -0
- package/dist/providers/mlx/turn-telemetry.js +45 -0
- package/dist/providers/mlx/venv.d.ts +91 -0
- package/dist/providers/mlx/venv.js +111 -0
- package/dist/providers/mlx/vision-mode.d.ts +92 -0
- package/dist/providers/mlx/vision-mode.js +187 -0
- package/dist/providers/mlx/vision.d.ts +2 -0
- package/dist/providers/mlx/vision.js +12 -0
- package/dist/providers/mlx/wire-transcript.d.ts +14 -0
- package/dist/providers/mlx/wire-transcript.js +43 -0
- package/dist/providers/native/capacity-broker.d.ts +812 -0
- package/dist/providers/native/capacity-broker.js +1058 -0
- package/dist/providers/native/capacity-budget.d.ts +133 -0
- package/dist/providers/native/capacity-budget.js +265 -0
- package/dist/providers/native/device-capacity-ledger.d.ts +31 -0
- package/dist/providers/native/device-capacity-ledger.js +196 -0
- package/dist/providers/native/device-capacity.d.ts +84 -0
- package/dist/providers/native/device-capacity.js +431 -0
- package/dist/providers/native/engine-api-key.d.ts +57 -0
- package/dist/providers/native/engine-api-key.js +72 -0
- package/dist/providers/native/engine-key.d.ts +18 -0
- package/dist/providers/native/engine-key.js +41 -0
- package/dist/providers/native/engine-router.d.ts +145 -0
- package/dist/providers/native/engine-router.js +191 -0
- package/dist/providers/native/gpu-panic-guard.d.ts +54 -0
- package/dist/providers/native/gpu-panic-guard.js +59 -0
- package/dist/providers/native/inference.d.ts +33 -0
- package/dist/providers/native/inference.js +49 -0
- package/dist/providers/native/local-engine-runtime.d.ts +412 -0
- package/dist/providers/native/local-engine-runtime.js +1714 -0
- package/dist/providers/native/measured-budget.d.ts +32 -0
- package/dist/providers/native/measured-budget.js +54 -0
- package/dist/providers/native/port.d.ts +11 -0
- package/dist/providers/native/port.js +29 -0
- package/dist/providers/native/provider-pool.d.ts +474 -0
- package/dist/providers/native/provider-pool.js +1166 -0
- package/dist/providers/native/supervisor.d.ts +503 -0
- package/dist/providers/native/supervisor.js +1466 -0
- package/dist/providers/observation-context.d.ts +16 -0
- package/dist/providers/observation-context.js +1 -0
- package/dist/providers/openai-compatible/sse.d.ts +1 -0
- package/dist/providers/openai-compatible/sse.js +2 -0
- package/dist/providers/patient-fetch.d.ts +36 -0
- package/dist/providers/patient-fetch.js +44 -0
- package/dist/providers/project-macro-loop-bail.d.ts +7 -0
- package/dist/providers/project-macro-loop-bail.js +21 -0
- package/dist/providers/prose-document-salvage.d.ts +1 -0
- package/dist/providers/prose-document-salvage.js +2 -0
- package/dist/providers/provider-disposal.d.ts +1 -0
- package/dist/providers/provider-disposal.js +2 -0
- package/dist/providers/queue.d.ts +15 -0
- package/dist/providers/queue.js +23 -0
- package/dist/providers/ramble-abort-message.d.ts +1 -0
- package/dist/providers/ramble-abort-message.js +2 -0
- package/dist/providers/ramble-detector.d.ts +1 -0
- package/dist/providers/ramble-detector.js +2 -0
- package/dist/providers/reasoning-depth.d.ts +1 -0
- package/dist/providers/reasoning-depth.js +2 -0
- package/dist/providers/required-input-reads.d.ts +1 -0
- package/dist/providers/required-input-reads.js +2 -0
- package/dist/providers/session-defaults.d.ts +13 -0
- package/dist/providers/session-defaults.js +49 -0
- package/dist/providers/session-hooks.d.ts +26 -0
- package/dist/providers/session-hooks.js +1 -0
- package/dist/providers/streaming-session.d.ts +1 -0
- package/dist/providers/streaming-session.js +2 -0
- package/dist/providers/terminal-tool-policy.d.ts +1 -0
- package/dist/providers/terminal-tool-policy.js +2 -0
- package/dist/providers/tool-arg-schema-coercion.d.ts +1 -0
- package/dist/providers/tool-arg-schema-coercion.js +2 -0
- package/dist/providers/tool-executor.d.ts +12 -0
- package/dist/providers/tool-executor.js +20 -0
- package/dist/providers/tool-failure-tracker.d.ts +1 -0
- package/dist/providers/tool-failure-tracker.js +2 -0
- package/dist/providers/tool-repeat-tracker.d.ts +1 -0
- package/dist/providers/tool-repeat-tracker.js +2 -0
- package/dist/providers/turn-timeout.d.ts +1 -0
- package/dist/providers/turn-timeout.js +1 -0
- package/dist/providers/types.d.ts +834 -0
- package/dist/providers/types.js +42 -0
- package/dist/providers/usage-builder.d.ts +1 -0
- package/dist/providers/usage-builder.js +2 -0
- package/dist/providers/vision-capability.d.ts +109 -0
- package/dist/providers/vision-capability.js +137 -0
- package/dist/python/mlx-runtime-status-bus.d.ts +39 -0
- package/dist/python/mlx-runtime-status-bus.js +27 -0
- package/dist/python/uv-runtime.d.ts +176 -0
- package/dist/python/uv-runtime.js +492 -0
- package/dist/relevance/install.d.ts +28 -0
- package/dist/relevance/install.js +114 -0
- package/dist/relevance/manager.d.ts +79 -0
- package/dist/relevance/manager.js +211 -0
- package/dist/relevance/registry.d.ts +11 -0
- package/dist/relevance/registry.js +158 -0
- package/dist/relevance/relevance-core.d.ts +67 -0
- package/dist/relevance/relevance-core.js +189 -0
- package/dist/relevance/relevance-model.d.ts +42 -0
- package/dist/relevance/relevance-model.js +292 -0
- package/dist/relevance/relevance-worker.d.ts +20 -0
- package/dist/relevance/relevance-worker.js +57 -0
- package/dist/relevance/settings.d.ts +30 -0
- package/dist/relevance/settings.js +81 -0
- package/dist/remotes/identity.d.ts +121 -0
- package/dist/remotes/identity.js +348 -0
- package/dist/remotes/pinned-fetch.d.ts +45 -0
- package/dist/remotes/pinned-fetch.js +193 -0
- package/dist/remotes/types.d.ts +54 -0
- package/dist/remotes/types.js +1 -0
- package/dist/runtime-lock.d.ts +29 -0
- package/dist/runtime-lock.js +85 -0
- package/dist/search/relevance-stage.d.ts +81 -0
- package/dist/search/relevance-stage.js +177 -0
- package/dist/secrets/types.d.ts +63 -0
- package/dist/secrets/types.js +64 -0
- package/dist/speech.d.ts +1 -0
- package/dist/speech.js +1 -0
- package/dist/system/darwin-memory.d.ts +26 -0
- package/dist/system/darwin-memory.js +81 -0
- package/dist/system/gezel-process-memory.d.ts +55 -0
- package/dist/system/gezel-process-memory.js +156 -0
- package/dist/system/memory.d.ts +154 -0
- package/dist/system/memory.js +501 -0
- package/dist/transformers-cache.d.ts +112 -0
- package/dist/transformers-cache.js +392 -0
- package/dist/utils/disk-space.d.ts +55 -0
- package/dist/utils/disk-space.js +72 -0
- package/dist/utils/download-common.d.ts +138 -0
- package/dist/utils/download-common.js +196 -0
- package/dist/utils/download-with-retry.d.ts +85 -0
- package/dist/utils/download-with-retry.js +522 -0
- package/dist/utils/extract-zip.d.ts +22 -0
- package/dist/utils/extract-zip.js +103 -0
- package/dist/utils/retire-model-worker.d.ts +15 -0
- package/dist/utils/retire-model-worker.js +24 -0
- package/dist/utils/service-worker-entry.d.ts +59 -0
- package/dist/utils/service-worker-entry.js +69 -0
- package/dist/utils/xet-download.d.ts +40 -0
- package/dist/utils/xet-download.js +526 -0
- package/dist/utils/xet.d.ts +86 -0
- package/dist/utils/xet.js +201 -0
- package/package.json +103 -3
- package/scripts/embedding-packaging.cjs +264 -0
- package/scripts/embedding-packaging.d.cts +16 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MLX cache adapter — talks to our wrapped `gezel_mlx_server.py`.
|
|
3
|
+
*
|
|
4
|
+
* The wrapped server preserves prompt-cache state across requests when a
|
|
5
|
+
* `cache_id` is supplied. This adapter:
|
|
6
|
+
*
|
|
7
|
+
* - Allocates a stable `cache_id` per gezel sessionId. The mapping
|
|
8
|
+
* is the cache key from the engine's perspective, so two sessions
|
|
9
|
+
* never collide and one session always reuses its own cache.
|
|
10
|
+
* - Augments each `/v1/chat/completions` request body with that id
|
|
11
|
+
* plus, when known, a `prefix_cache_id` derived from a hash of the
|
|
12
|
+
* gezel's stable system prompt. The server uses prefix_cache_id as
|
|
13
|
+
* a fallback seed when the per-session cache_id misses — so a brand-
|
|
14
|
+
* new session for an existing gezel inherits the warmed prefix
|
|
15
|
+
* instead of cold-prefilling 2 KB of system prompt.
|
|
16
|
+
* - Calls `DELETE /v1/cache/{id}` on `evict` (controller-driven LRU
|
|
17
|
+
* or chat-manager invalidation hook).
|
|
18
|
+
* - Polls `GET /v1/cache/stats` on `reportUsage` so the controller
|
|
19
|
+
* reconciles its tracked usage against engine reality.
|
|
20
|
+
* - Calls `POST /v1/cache/warm` on `warm` — pre-prefill when the user
|
|
21
|
+
* opens a chat. With `persist=true`, the warmed entry is also
|
|
22
|
+
* written to disk so subsequent supervisor boots / new sessions
|
|
23
|
+
* find it ready.
|
|
24
|
+
*/
|
|
25
|
+
import type { CacheWarmMessage, EngineCacheAdapter, EngineCacheUsage, SystemPromptLayers } from '../../cache/adapter.js';
|
|
26
|
+
export interface MlxCacheAdapterOptions {
|
|
27
|
+
/**
|
|
28
|
+
* URL of the wrapped MLX server. Resolved lazily on each call so a
|
|
29
|
+
* supervisor-restart-with-new-port stays correct without re-creating
|
|
30
|
+
* the adapter.
|
|
31
|
+
*/
|
|
32
|
+
resolveBaseUrl: () => Promise<string | null>;
|
|
33
|
+
/** Test seam — defaults to the global fetch. */
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
/**
|
|
36
|
+
* Serializes engine-touching requests with chat completions. Cache
|
|
37
|
+
* warming performs model prefill too; letting it run beside a chat
|
|
38
|
+
* stream can starve the stream pre-first-byte on large MLX models.
|
|
39
|
+
*/
|
|
40
|
+
runExclusive?: <T>(label: string, work: () => Promise<T>) => Promise<T>;
|
|
41
|
+
}
|
|
42
|
+
export declare function gezelPrefixId(systemPrompt: string, tools?: readonly unknown[]): string;
|
|
43
|
+
/**
|
|
44
|
+
* Shared-band prefix id (flag `mlxSharedBandPrefix`). Hashes only the leading
|
|
45
|
+
* run of the system prompt that sibling sessions of the same (gezel, project)
|
|
46
|
+
* render identically — everything before the task band — instead of the whole
|
|
47
|
+
* prompt.
|
|
48
|
+
*
|
|
49
|
+
* Why a SEPARATE `prefix-band-` namespace rather than reusing
|
|
50
|
+
* {@link gezelPrefixId}'s: a band entry is deliberately SHORT (it holds only
|
|
51
|
+
* the shared head), while a legacy whole-prompt entry holds a full session.
|
|
52
|
+
* On this model family a prefix entry longer than the shared head is not a
|
|
53
|
+
* miss, it is a full re-prefill (`lcp < n` cannot be trimmed — 48 of
|
|
54
|
+
* qwen3.8's 64 layers are linear-attention `ArraysCache` with no `trim()`).
|
|
55
|
+
* Keeping the namespaces disjoint means the two shapes can never collide.
|
|
56
|
+
* See ADR 0010.
|
|
57
|
+
*/
|
|
58
|
+
export declare function gezelBandPrefixId(sharedPrefix: string, tools?: readonly unknown[]): string;
|
|
59
|
+
/**
|
|
60
|
+
* Layered prefix ids (flag `layeredPrefixCache`). Distinct `gp` / `gezel`
|
|
61
|
+
* namespaces, most-specific first. `gp` (full stable system) is the
|
|
62
|
+
* workhorse — shared across sessions of the same model+gezel+project;
|
|
63
|
+
* `gezel` (identity-only prefix) is shared across projects of the gezel.
|
|
64
|
+
* The server tries them longest-first and seeds `gp` from the first real
|
|
65
|
+
* session save, so the shared prefix carries the engine-templated tools.
|
|
66
|
+
*/
|
|
67
|
+
export declare function gezelLayerPrefixIds(layers: SystemPromptLayers, tools?: readonly unknown[]): {
|
|
68
|
+
gp: string;
|
|
69
|
+
gezel: string;
|
|
70
|
+
};
|
|
71
|
+
export declare class MlxCacheAdapter implements EngineCacheAdapter {
|
|
72
|
+
readonly providerName: "mlx";
|
|
73
|
+
private readonly resolveBaseUrl;
|
|
74
|
+
private readonly fetchImpl;
|
|
75
|
+
private readonly runExclusive;
|
|
76
|
+
/**
|
|
77
|
+
* Map of sessionId → stable per-gezel prefix id. Populated on
|
|
78
|
+
* `setSessionPrefix(sessionId, systemPrompt)` and consulted by
|
|
79
|
+
* `buildRequestExtras` to attach `prefix_cache_id` to each request.
|
|
80
|
+
* Prefix id changes (system-prompt drift) just overwrite the entry —
|
|
81
|
+
* no migration needed; the next request carries the new id and the
|
|
82
|
+
* engine treats the old one as orphaned.
|
|
83
|
+
*/
|
|
84
|
+
private readonly sessionPrefix;
|
|
85
|
+
/**
|
|
86
|
+
* Per-session LAYERED prefix ids (flag ON), ordered most-specific-first
|
|
87
|
+
* (`[gp, gezel]`). `buildRequestExtras` sends them as `prefix_cache_ids`;
|
|
88
|
+
* the server tries them longest-first on a per-session miss.
|
|
89
|
+
*/
|
|
90
|
+
private readonly sessionLayerPrefixIds;
|
|
91
|
+
/** Tracks which prefixes we've already warmed in this process so
|
|
92
|
+
* back-to-back session opens don't issue redundant warm requests. */
|
|
93
|
+
/**
|
|
94
|
+
* sessionId → length in CHARACTERS of the shared band inside this session's
|
|
95
|
+
* system message. Sent to the engine as `stable_prefix_chars` so the sidecar
|
|
96
|
+
* can plant its prompt-snapshot cut at the band boundary and publish a
|
|
97
|
+
* SHORT prefix entry rather than the session's full post-turn state.
|
|
98
|
+
* Chars, not tokens: only the engine has the tokenizer, and its snapshot
|
|
99
|
+
* capture already verifies the token-prefix and drops a mismatched cut.
|
|
100
|
+
*/
|
|
101
|
+
private readonly sessionBandChars;
|
|
102
|
+
private readonly warmedPrefixes;
|
|
103
|
+
/**
|
|
104
|
+
* Prefix warms already in progress. `warmedPrefixes` is only populated after
|
|
105
|
+
* the HTTP request succeeds, so without this single-flight map two app turns
|
|
106
|
+
* arriving together can submit duplicate warm sequences into one MLX wave.
|
|
107
|
+
*/
|
|
108
|
+
private readonly warmingPrefixes;
|
|
109
|
+
constructor(opts?: MlxCacheAdapterOptions);
|
|
110
|
+
/**
|
|
111
|
+
* Tell the adapter which gezel-prefix id this session belongs to.
|
|
112
|
+
* Called by the chat manager when it hydrates a session — sees the
|
|
113
|
+
* stable system prompt for the session's (gezel, project) pair and
|
|
114
|
+
* derives the hash via {@link gezelPrefixId}. Idempotent; same
|
|
115
|
+
* (sessionId, systemPrompt) → same prefixId → same map state.
|
|
116
|
+
*/
|
|
117
|
+
setSessionPrefix(sessionId: string, systemPrompt: string, tools?: readonly unknown[], sharedPrefix?: string): string;
|
|
118
|
+
/**
|
|
119
|
+
* Async session prep matching the cross-engine `prepareForSend` shape.
|
|
120
|
+
* Registers the session's prefix mapping and warms the prefix so
|
|
121
|
+
* subsequent sessions for the same gezel can inherit it on miss.
|
|
122
|
+
* Idempotent — repeated calls are a no-op past the first thanks to
|
|
123
|
+
* `warmedPrefixes`.
|
|
124
|
+
*/
|
|
125
|
+
prepareForSend(sessionId: string, systemPrompt?: string, layers?: SystemPromptLayers, tools?: readonly unknown[], sharedPrefix?: string): Promise<void>;
|
|
126
|
+
buildRequestExtras(sessionId: string): Record<string, unknown>;
|
|
127
|
+
evict(sessionIds: readonly string[]): Promise<void>;
|
|
128
|
+
reportUsage(): Promise<readonly EngineCacheUsage[]>;
|
|
129
|
+
warm(sessionId: string, messages: readonly CacheWarmMessage[]): Promise<void>;
|
|
130
|
+
/**
|
|
131
|
+
* Persist every in-memory cache entry to disk without evicting them.
|
|
132
|
+
* Called by the supervisor's Stage-1 idle-freeze hook so a long
|
|
133
|
+
* idle window doesn't risk losing warm state to a SIGKILL between
|
|
134
|
+
* Stage 1 (freeze) and Stage 2 (full SIGTERM). The wrapped server
|
|
135
|
+
* handles the actual save loop via `/admin/flush`.
|
|
136
|
+
*/
|
|
137
|
+
flushAll(opts?: {
|
|
138
|
+
/** Engine to flush; defaults to the live one. A stopping engine passes its own. */
|
|
139
|
+
baseUrl?: string;
|
|
140
|
+
/**
|
|
141
|
+
* Wait up to this long for the engine to finish winding down cancelled
|
|
142
|
+
* turns first. A turn cancelled just before a stop files its prompt
|
|
143
|
+
* snapshot on the worker's next step, and only then is it flushable.
|
|
144
|
+
*/
|
|
145
|
+
settleMs?: number;
|
|
146
|
+
}): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Pre-warm a per-gezel prefix entry. Called fire-and-forget on session
|
|
149
|
+
* open — the first session for a given gezel pays the prefill cost
|
|
150
|
+
* once and writes the entry to disk; subsequent sessions for the same
|
|
151
|
+
* gezel inherit the warm prefix without paying again.
|
|
152
|
+
*
|
|
153
|
+
* Idempotent across a single process lifetime — repeated calls for
|
|
154
|
+
* the same prefixId are a no-op locally (the engine itself short-
|
|
155
|
+
* circuits when its own in-memory entry already matches the prompt
|
|
156
|
+
* tokens, but skipping the round-trip saves a few ms and one log
|
|
157
|
+
* line per session open).
|
|
158
|
+
*/
|
|
159
|
+
warmPrefix(prefixId: string, systemPrompt: string, tools?: readonly unknown[]): Promise<void>;
|
|
160
|
+
private warmPrefixOnce;
|
|
161
|
+
}
|
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MLX cache adapter — talks to our wrapped `gezel_mlx_server.py`.
|
|
3
|
+
*
|
|
4
|
+
* The wrapped server preserves prompt-cache state across requests when a
|
|
5
|
+
* `cache_id` is supplied. This adapter:
|
|
6
|
+
*
|
|
7
|
+
* - Allocates a stable `cache_id` per gezel sessionId. The mapping
|
|
8
|
+
* is the cache key from the engine's perspective, so two sessions
|
|
9
|
+
* never collide and one session always reuses its own cache.
|
|
10
|
+
* - Augments each `/v1/chat/completions` request body with that id
|
|
11
|
+
* plus, when known, a `prefix_cache_id` derived from a hash of the
|
|
12
|
+
* gezel's stable system prompt. The server uses prefix_cache_id as
|
|
13
|
+
* a fallback seed when the per-session cache_id misses — so a brand-
|
|
14
|
+
* new session for an existing gezel inherits the warmed prefix
|
|
15
|
+
* instead of cold-prefilling 2 KB of system prompt.
|
|
16
|
+
* - Calls `DELETE /v1/cache/{id}` on `evict` (controller-driven LRU
|
|
17
|
+
* or chat-manager invalidation hook).
|
|
18
|
+
* - Polls `GET /v1/cache/stats` on `reportUsage` so the controller
|
|
19
|
+
* reconciles its tracked usage against engine reality.
|
|
20
|
+
* - Calls `POST /v1/cache/warm` on `warm` — pre-prefill when the user
|
|
21
|
+
* opens a chat. With `persist=true`, the warmed entry is also
|
|
22
|
+
* written to disk so subsequent supervisor boots / new sessions
|
|
23
|
+
* find it ready.
|
|
24
|
+
*/
|
|
25
|
+
import { createHash } from 'node:crypto';
|
|
26
|
+
/**
|
|
27
|
+
* Bytes-per-token estimate for MLX KV cache, used only as a fallback
|
|
28
|
+
* when the wrapped server's `est_bytes` is missing. The server itself
|
|
29
|
+
* reports real per-layer `nbytes` sums (fixed recurrent state priced
|
|
30
|
+
* in, full-attention KV no longer ~55% over-priced) and only falls
|
|
31
|
+
* back to its matching _BYTES_PER_TOKEN constant when a layer hides
|
|
32
|
+
* its size — keep the two constants in sync.
|
|
33
|
+
*/
|
|
34
|
+
const ESTIMATED_BYTES_PER_TOKEN = 100 * 1024;
|
|
35
|
+
/**
|
|
36
|
+
* Compute a stable id used for cross-session prefix sharing. The hash
|
|
37
|
+
* input is the verbatim system prompt text — when the gezel's about,
|
|
38
|
+
* the project context, or the tools block change, the hash changes and
|
|
39
|
+
* a new prefix file gets created on next warm. Old prefix files become
|
|
40
|
+
* orphaned and are pruned by the engine's disk-LRU eventually.
|
|
41
|
+
*
|
|
42
|
+
* Truncated to 16 hex chars (64 bits) — collision probability over a
|
|
43
|
+
* lifetime of installs is negligible at this scale and the shorter id
|
|
44
|
+
* is friendlier in logs.
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* Order-independent signature of the tool roster: names + argument keys,
|
|
48
|
+
* sorted. Stable against harmless description churn while separating real
|
|
49
|
+
* rosters. Shared by the flat and layered prefix ids — both must treat the
|
|
50
|
+
* roster as identity, because Qwen-family templates render the tool block
|
|
51
|
+
* at the TOP of the system message: two renders whose rosters differ share
|
|
52
|
+
* ~3 tokens no matter how identical the prompt text is.
|
|
53
|
+
*/
|
|
54
|
+
function toolRosterSignature(tools) {
|
|
55
|
+
return tools
|
|
56
|
+
.map((t) => {
|
|
57
|
+
const fn = t
|
|
58
|
+
?.function;
|
|
59
|
+
const props = fn?.parameters?.properties ?? {};
|
|
60
|
+
return `${fn?.name ?? '?'}:${Object.keys(props).sort().join(',')}`;
|
|
61
|
+
})
|
|
62
|
+
.sort()
|
|
63
|
+
.join('|');
|
|
64
|
+
}
|
|
65
|
+
export function gezelPrefixId(systemPrompt, tools) {
|
|
66
|
+
const h = createHash('sha256').update(systemPrompt, 'utf8');
|
|
67
|
+
// The tool ROSTER is part of the prefix identity — see
|
|
68
|
+
// {@link toolRosterSignature}. Roles carry different rosters, so mixed
|
|
69
|
+
// rosters over one prompt text are the common case, not an edge case.
|
|
70
|
+
if (tools && tools.length > 0) {
|
|
71
|
+
h.update('\u0000tools\u0000', 'utf8').update(toolRosterSignature(tools), 'utf8');
|
|
72
|
+
}
|
|
73
|
+
return `prefix-${h.digest('hex').slice(0, 16)}`;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Shared-band prefix id (flag `mlxSharedBandPrefix`). Hashes only the leading
|
|
77
|
+
* run of the system prompt that sibling sessions of the same (gezel, project)
|
|
78
|
+
* render identically — everything before the task band — instead of the whole
|
|
79
|
+
* prompt.
|
|
80
|
+
*
|
|
81
|
+
* Why a SEPARATE `prefix-band-` namespace rather than reusing
|
|
82
|
+
* {@link gezelPrefixId}'s: a band entry is deliberately SHORT (it holds only
|
|
83
|
+
* the shared head), while a legacy whole-prompt entry holds a full session.
|
|
84
|
+
* On this model family a prefix entry longer than the shared head is not a
|
|
85
|
+
* miss, it is a full re-prefill (`lcp < n` cannot be trimmed — 48 of
|
|
86
|
+
* qwen3.8's 64 layers are linear-attention `ArraysCache` with no `trim()`).
|
|
87
|
+
* Keeping the namespaces disjoint means the two shapes can never collide.
|
|
88
|
+
* See ADR 0010.
|
|
89
|
+
*/
|
|
90
|
+
export function gezelBandPrefixId(sharedPrefix, tools) {
|
|
91
|
+
const h = createHash('sha256').update(sharedPrefix, 'utf8');
|
|
92
|
+
// The roster is prefix IDENTITY on every id in this file — see
|
|
93
|
+
// {@link toolRosterSignature}.
|
|
94
|
+
if (tools && tools.length > 0) {
|
|
95
|
+
h.update('\u0000tools\u0000', 'utf8').update(toolRosterSignature(tools), 'utf8');
|
|
96
|
+
}
|
|
97
|
+
return `prefix-band-${h.digest('hex').slice(0, 16)}`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Layered prefix ids (flag `layeredPrefixCache`). Distinct `gp` / `gezel`
|
|
101
|
+
* namespaces, most-specific first. `gp` (full stable system) is the
|
|
102
|
+
* workhorse — shared across sessions of the same model+gezel+project;
|
|
103
|
+
* `gezel` (identity-only prefix) is shared across projects of the gezel.
|
|
104
|
+
* The server tries them longest-first and seeds `gp` from the first real
|
|
105
|
+
* session save, so the shared prefix carries the engine-templated tools.
|
|
106
|
+
*/
|
|
107
|
+
export function gezelLayerPrefixIds(layers, tools) {
|
|
108
|
+
// The roster folds into BOTH layered ids for the same reason it feeds
|
|
109
|
+
// {@link gezelPrefixId}: the tool block heads the rendered prompt, so a
|
|
110
|
+
// gp/gezel prefix saved under roster A is ~3 shared tokens for roster B.
|
|
111
|
+
// MLX's batched KV is untrimmable and the server seeds session caches
|
|
112
|
+
// from these entries before any LCP check, so a same-id/different-roster
|
|
113
|
+
// collision does not degrade to a miss — it seeds a wrong-shape cache
|
|
114
|
+
// that forces a full re-prefill. Distinct ids per roster line let each
|
|
115
|
+
// shape keep its own entry instead of fighting over one.
|
|
116
|
+
const sig = tools && tools.length > 0 ? `\u0000tools\u0000${toolRosterSignature(tools)}` : '';
|
|
117
|
+
const h = (s) => createHash('sha256').update(s, 'utf8').update(sig, 'utf8').digest('hex').slice(0, 16);
|
|
118
|
+
return { gp: `prefix-gp-${h(layers.project)}`, gezel: `prefix-gezel-${h(layers.gezel)}` };
|
|
119
|
+
}
|
|
120
|
+
export class MlxCacheAdapter {
|
|
121
|
+
providerName = 'mlx';
|
|
122
|
+
resolveBaseUrl;
|
|
123
|
+
fetchImpl;
|
|
124
|
+
runExclusive;
|
|
125
|
+
/**
|
|
126
|
+
* Map of sessionId → stable per-gezel prefix id. Populated on
|
|
127
|
+
* `setSessionPrefix(sessionId, systemPrompt)` and consulted by
|
|
128
|
+
* `buildRequestExtras` to attach `prefix_cache_id` to each request.
|
|
129
|
+
* Prefix id changes (system-prompt drift) just overwrite the entry —
|
|
130
|
+
* no migration needed; the next request carries the new id and the
|
|
131
|
+
* engine treats the old one as orphaned.
|
|
132
|
+
*/
|
|
133
|
+
sessionPrefix = new Map();
|
|
134
|
+
/**
|
|
135
|
+
* Per-session LAYERED prefix ids (flag ON), ordered most-specific-first
|
|
136
|
+
* (`[gp, gezel]`). `buildRequestExtras` sends them as `prefix_cache_ids`;
|
|
137
|
+
* the server tries them longest-first on a per-session miss.
|
|
138
|
+
*/
|
|
139
|
+
sessionLayerPrefixIds = new Map();
|
|
140
|
+
/** Tracks which prefixes we've already warmed in this process so
|
|
141
|
+
* back-to-back session opens don't issue redundant warm requests. */
|
|
142
|
+
/**
|
|
143
|
+
* sessionId → length in CHARACTERS of the shared band inside this session's
|
|
144
|
+
* system message. Sent to the engine as `stable_prefix_chars` so the sidecar
|
|
145
|
+
* can plant its prompt-snapshot cut at the band boundary and publish a
|
|
146
|
+
* SHORT prefix entry rather than the session's full post-turn state.
|
|
147
|
+
* Chars, not tokens: only the engine has the tokenizer, and its snapshot
|
|
148
|
+
* capture already verifies the token-prefix and drops a mismatched cut.
|
|
149
|
+
*/
|
|
150
|
+
sessionBandChars = new Map();
|
|
151
|
+
warmedPrefixes = new Set();
|
|
152
|
+
/**
|
|
153
|
+
* Prefix warms already in progress. `warmedPrefixes` is only populated after
|
|
154
|
+
* the HTTP request succeeds, so without this single-flight map two app turns
|
|
155
|
+
* arriving together can submit duplicate warm sequences into one MLX wave.
|
|
156
|
+
*/
|
|
157
|
+
warmingPrefixes = new Map();
|
|
158
|
+
constructor(opts = { resolveBaseUrl: async () => null }) {
|
|
159
|
+
this.resolveBaseUrl = opts.resolveBaseUrl;
|
|
160
|
+
this.fetchImpl = opts.fetchImpl ?? fetch;
|
|
161
|
+
this.runExclusive = opts.runExclusive ?? (async (_label, work) => work());
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Tell the adapter which gezel-prefix id this session belongs to.
|
|
165
|
+
* Called by the chat manager when it hydrates a session — sees the
|
|
166
|
+
* stable system prompt for the session's (gezel, project) pair and
|
|
167
|
+
* derives the hash via {@link gezelPrefixId}. Idempotent; same
|
|
168
|
+
* (sessionId, systemPrompt) → same prefixId → same map state.
|
|
169
|
+
*/
|
|
170
|
+
setSessionPrefix(sessionId, systemPrompt, tools, sharedPrefix) {
|
|
171
|
+
const prefixId = sharedPrefix
|
|
172
|
+
? gezelBandPrefixId(sharedPrefix, tools)
|
|
173
|
+
: gezelPrefixId(systemPrompt, tools);
|
|
174
|
+
this.sessionPrefix.set(sessionId, prefixId);
|
|
175
|
+
if (sharedPrefix)
|
|
176
|
+
this.sessionBandChars.set(sessionId, sharedPrefix.length);
|
|
177
|
+
else
|
|
178
|
+
this.sessionBandChars.delete(sessionId);
|
|
179
|
+
return prefixId;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Async session prep matching the cross-engine `prepareForSend` shape.
|
|
183
|
+
* Registers the session's prefix mapping and warms the prefix so
|
|
184
|
+
* subsequent sessions for the same gezel can inherit it on miss.
|
|
185
|
+
* Idempotent — repeated calls are a no-op past the first thanks to
|
|
186
|
+
* `warmedPrefixes`.
|
|
187
|
+
*/
|
|
188
|
+
async prepareForSend(sessionId, systemPrompt, layers, tools, sharedPrefix) {
|
|
189
|
+
if (layers) {
|
|
190
|
+
// Layered mode: register the [gp, gezel] ids the server will try
|
|
191
|
+
// longest-first. We do NOT system-only-warm the prefix here — the
|
|
192
|
+
// server seeds the shared `gp` prefix from the first real session
|
|
193
|
+
// save, so the inherited prefix carries the engine-templated tools
|
|
194
|
+
// (a system-only warm would strand them). Mirrors the llama-cpp
|
|
195
|
+
// disk-prefix path that the A/B proved out. The roster feeds the
|
|
196
|
+
// ids so save-backs from different rosters land in different
|
|
197
|
+
// entries instead of overwriting each other.
|
|
198
|
+
const { gp, gezel } = gezelLayerPrefixIds(layers, tools);
|
|
199
|
+
this.sessionLayerPrefixIds.set(sessionId, [gp, gezel]);
|
|
200
|
+
this.sessionPrefix.set(sessionId, gp);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (sharedPrefix) {
|
|
204
|
+
// Band path: register the id and stop. We deliberately do NOT warm.
|
|
205
|
+
// A synthetic warm renders a different template branch than the real
|
|
206
|
+
// turn (on Qwen the tool block heads the system message, so a
|
|
207
|
+
// no-tools render shares ~3 tokens), and `persist: true` would write
|
|
208
|
+
// that shape over a good entry — the measured oscillation in §3.7.
|
|
209
|
+
// The entry is instead published from a real turn's boundary snapshot,
|
|
210
|
+
// so it is a genuine token prefix by construction.
|
|
211
|
+
this.setSessionPrefix(sessionId, systemPrompt ?? '', tools, sharedPrefix);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (!systemPrompt)
|
|
215
|
+
return;
|
|
216
|
+
// Tools are part of the prefix IDENTITY unconditionally — a prefix
|
|
217
|
+
// saved for roster A must never be offered to roster B, whatever we
|
|
218
|
+
// decide about warming. The server seeds session caches from prefix
|
|
219
|
+
// entries before any LCP check, and MLX batched KV is untrimmable, so
|
|
220
|
+
// an id collision across rosters is not a miss — it is a wrong-shape
|
|
221
|
+
// seed that forces a full re-prefill.
|
|
222
|
+
const prefixId = this.setSessionPrefix(sessionId, systemPrompt, tools);
|
|
223
|
+
const hasTools = !!tools && tools.length > 0;
|
|
224
|
+
// Whether to WARM is a separate question from identity:
|
|
225
|
+
// - No tools: a system-only warm renders the same template branch a
|
|
226
|
+
// real tool-less turn will, so it is a genuine token-prefix. Warm.
|
|
227
|
+
// - Tools + GEZEL_MLX_STABLE_PREFIX: warm WITH the roster. Costs
|
|
228
|
+
// ~5-6K tokens of warm prefill; gated because the payoff needs the
|
|
229
|
+
// snapshot boundary too (measured as a net regression alone).
|
|
230
|
+
// - Tools, flag off: DO NOT WARM. A system-only warm renders Qwen's
|
|
231
|
+
// no-tools branch, which shares ~3 tokens with the real turn, and
|
|
232
|
+
// `persist: true` writes that shape to disk where it overwrites
|
|
233
|
+
// the good entry the last real session saved back. Wild-caught
|
|
234
|
+
// (koray PR-review fanout): `prefix-0b60345fcefa9ffd` oscillated
|
|
235
|
+
// between a 15,563-token no-tools render and the 24,796-token
|
|
236
|
+
// real one on every daemon boot — lcp=3, mode=fresh reused=0, 40
|
|
237
|
+
// full re-prefills, 1.58M tokens re-prefilled vs 238K of new
|
|
238
|
+
// work. Registration alone still routes save-backs correctly;
|
|
239
|
+
// the first turn just pays cold prefill once.
|
|
240
|
+
const stablePrefix = process.env.GEZEL_MLX_STABLE_PREFIX === '1' || process.env.GEZEL_MLX_STABLE_PREFIX === 'true';
|
|
241
|
+
if (hasTools && !stablePrefix)
|
|
242
|
+
return;
|
|
243
|
+
await this.warmPrefix(prefixId, systemPrompt, hasTools ? tools : undefined);
|
|
244
|
+
}
|
|
245
|
+
buildRequestExtras(sessionId) {
|
|
246
|
+
// The engine accepts `cache_id` as an extension field; absent the
|
|
247
|
+
// field, it behaves like upstream mlx_vlm.server (cache cleared
|
|
248
|
+
// every request). We always set it so cache reuse engages.
|
|
249
|
+
const extras = { cache_id: sessionId };
|
|
250
|
+
const layered = this.sessionLayerPrefixIds.get(sessionId);
|
|
251
|
+
if (layered && layered.length > 0) {
|
|
252
|
+
extras.prefix_cache_ids = layered;
|
|
253
|
+
// Back-compat for older engine builds that only read the singular.
|
|
254
|
+
extras.prefix_cache_id = layered[0];
|
|
255
|
+
return extras;
|
|
256
|
+
}
|
|
257
|
+
const prefixId = this.sessionPrefix.get(sessionId);
|
|
258
|
+
if (prefixId)
|
|
259
|
+
extras.prefix_cache_id = prefixId;
|
|
260
|
+
// Band path only: tells the sidecar where to cut its prompt snapshot so
|
|
261
|
+
// the published entry is the shared head, not the whole session. Absent
|
|
262
|
+
// ⇒ the sidecar keeps its end-minus-margin default, i.e. today's shape.
|
|
263
|
+
const bandChars = this.sessionBandChars.get(sessionId);
|
|
264
|
+
if (bandChars !== undefined && bandChars > 0)
|
|
265
|
+
extras.stable_prefix_chars = bandChars;
|
|
266
|
+
return extras;
|
|
267
|
+
}
|
|
268
|
+
async evict(sessionIds) {
|
|
269
|
+
const baseUrl = await this.resolveBaseUrl().catch(() => null);
|
|
270
|
+
if (!baseUrl)
|
|
271
|
+
return;
|
|
272
|
+
// Forget local prefix mapping on evict — the controller is signaling
|
|
273
|
+
// this session is gone. Keep `warmedPrefixes` though: other sessions
|
|
274
|
+
// sharing the same prefix still benefit from "already warmed" state.
|
|
275
|
+
for (const id of sessionIds) {
|
|
276
|
+
this.sessionPrefix.delete(id);
|
|
277
|
+
this.sessionLayerPrefixIds.delete(id);
|
|
278
|
+
this.sessionBandChars.delete(id);
|
|
279
|
+
}
|
|
280
|
+
// Fire deletes in parallel — they're idempotent and small.
|
|
281
|
+
await Promise.all(sessionIds.map(async (id) => {
|
|
282
|
+
try {
|
|
283
|
+
await this.fetchImpl(`${baseUrl}/v1/cache/${encodeURIComponent(id)}`, {
|
|
284
|
+
method: 'DELETE',
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// Eviction is best-effort; the controller already removed
|
|
289
|
+
// its tracking, and the engine will eventually evict via
|
|
290
|
+
// its own LRU when memory pressure grows.
|
|
291
|
+
}
|
|
292
|
+
}));
|
|
293
|
+
}
|
|
294
|
+
async reportUsage() {
|
|
295
|
+
const baseUrl = await this.resolveBaseUrl().catch(() => null);
|
|
296
|
+
if (!baseUrl)
|
|
297
|
+
return [];
|
|
298
|
+
let res;
|
|
299
|
+
try {
|
|
300
|
+
res = await this.fetchImpl(`${baseUrl}/v1/cache/stats`);
|
|
301
|
+
}
|
|
302
|
+
catch {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
if (!res.ok)
|
|
306
|
+
return [];
|
|
307
|
+
let payload;
|
|
308
|
+
try {
|
|
309
|
+
payload = await res.json();
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return [];
|
|
313
|
+
}
|
|
314
|
+
if (!Array.isArray(payload))
|
|
315
|
+
return [];
|
|
316
|
+
const usage = [];
|
|
317
|
+
for (const entry of payload) {
|
|
318
|
+
if (!entry || typeof entry !== 'object')
|
|
319
|
+
continue;
|
|
320
|
+
const e = entry;
|
|
321
|
+
const cacheId = e.cache_id;
|
|
322
|
+
const tokenCount = e.token_count;
|
|
323
|
+
const estBytes = e.est_bytes;
|
|
324
|
+
const lastUsedTs = e.last_used_ts;
|
|
325
|
+
if (typeof cacheId !== 'string' || typeof tokenCount !== 'number')
|
|
326
|
+
continue;
|
|
327
|
+
usage.push({
|
|
328
|
+
sessionId: cacheId,
|
|
329
|
+
tokenCount,
|
|
330
|
+
estBytes: typeof estBytes === 'number' ? estBytes : tokenCount * ESTIMATED_BYTES_PER_TOKEN,
|
|
331
|
+
// Server reports as Unix seconds; convert to epoch ms for the
|
|
332
|
+
// controller's clock.
|
|
333
|
+
lastUsedAt: typeof lastUsedTs === 'number' ? Math.round(lastUsedTs * 1000) : Date.now(),
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
return usage;
|
|
337
|
+
}
|
|
338
|
+
async warm(sessionId, messages) {
|
|
339
|
+
const baseUrl = await this.resolveBaseUrl().catch(() => null);
|
|
340
|
+
if (!baseUrl)
|
|
341
|
+
return;
|
|
342
|
+
await this.runExclusive(`cache-warm:${sessionId}`, async () => {
|
|
343
|
+
try {
|
|
344
|
+
await this.fetchImpl(`${baseUrl}/v1/cache/warm`, {
|
|
345
|
+
method: 'POST',
|
|
346
|
+
headers: { 'Content-Type': 'application/json' },
|
|
347
|
+
body: JSON.stringify({
|
|
348
|
+
cache_id: sessionId,
|
|
349
|
+
messages: messages.map((m) => ({ role: m.role, content: m.content ?? '' })),
|
|
350
|
+
}),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// Warming is best-effort. The next real send will prefill cold.
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Persist every in-memory cache entry to disk without evicting them.
|
|
360
|
+
* Called by the supervisor's Stage-1 idle-freeze hook so a long
|
|
361
|
+
* idle window doesn't risk losing warm state to a SIGKILL between
|
|
362
|
+
* Stage 1 (freeze) and Stage 2 (full SIGTERM). The wrapped server
|
|
363
|
+
* handles the actual save loop via `/admin/flush`.
|
|
364
|
+
*/
|
|
365
|
+
async flushAll(opts) {
|
|
366
|
+
const baseUrl = opts?.baseUrl ?? (await this.resolveBaseUrl().catch(() => null));
|
|
367
|
+
if (!baseUrl)
|
|
368
|
+
return;
|
|
369
|
+
const query = opts?.settleMs && opts.settleMs > 0 ? `?settle_ms=${Math.round(opts.settleMs)}` : '';
|
|
370
|
+
try {
|
|
371
|
+
const res = await this.fetchImpl(`${baseUrl}/admin/flush${query}`, { method: 'POST' });
|
|
372
|
+
await res.text().catch(() => '');
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
// Best-effort. The server's own SIGTERM handler is the
|
|
376
|
+
// belt-and-braces fallback even if this round-trip fails.
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Pre-warm a per-gezel prefix entry. Called fire-and-forget on session
|
|
381
|
+
* open — the first session for a given gezel pays the prefill cost
|
|
382
|
+
* once and writes the entry to disk; subsequent sessions for the same
|
|
383
|
+
* gezel inherit the warm prefix without paying again.
|
|
384
|
+
*
|
|
385
|
+
* Idempotent across a single process lifetime — repeated calls for
|
|
386
|
+
* the same prefixId are a no-op locally (the engine itself short-
|
|
387
|
+
* circuits when its own in-memory entry already matches the prompt
|
|
388
|
+
* tokens, but skipping the round-trip saves a few ms and one log
|
|
389
|
+
* line per session open).
|
|
390
|
+
*/
|
|
391
|
+
async warmPrefix(prefixId, systemPrompt, tools) {
|
|
392
|
+
if (this.warmedPrefixes.has(prefixId))
|
|
393
|
+
return;
|
|
394
|
+
const existing = this.warmingPrefixes.get(prefixId);
|
|
395
|
+
if (existing)
|
|
396
|
+
return existing;
|
|
397
|
+
const warming = this.warmPrefixOnce(prefixId, systemPrompt, tools);
|
|
398
|
+
this.warmingPrefixes.set(prefixId, warming);
|
|
399
|
+
try {
|
|
400
|
+
await warming;
|
|
401
|
+
}
|
|
402
|
+
finally {
|
|
403
|
+
if (this.warmingPrefixes.get(prefixId) === warming) {
|
|
404
|
+
this.warmingPrefixes.delete(prefixId);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
async warmPrefixOnce(prefixId, systemPrompt, tools) {
|
|
409
|
+
if (this.warmedPrefixes.has(prefixId))
|
|
410
|
+
return;
|
|
411
|
+
const baseUrl = await this.resolveBaseUrl().catch(() => null);
|
|
412
|
+
if (!baseUrl)
|
|
413
|
+
return;
|
|
414
|
+
await this.runExclusive(`cache-prefix:${prefixId}`, async () => {
|
|
415
|
+
if (this.warmedPrefixes.has(prefixId))
|
|
416
|
+
return;
|
|
417
|
+
try {
|
|
418
|
+
await this.fetchImpl(`${baseUrl}/v1/cache/warm`, {
|
|
419
|
+
method: 'POST',
|
|
420
|
+
headers: { 'Content-Type': 'application/json' },
|
|
421
|
+
body: JSON.stringify({
|
|
422
|
+
cache_id: prefixId,
|
|
423
|
+
// The "system" role gives the model the same context it'll see at
|
|
424
|
+
// chat time. The sidecar supplies two different synthetic users
|
|
425
|
+
// for templates that reject system-only input, then snapshots
|
|
426
|
+
// their stable token prefix before either user turn.
|
|
427
|
+
messages: [{ role: 'system', content: systemPrompt }],
|
|
428
|
+
// Render through the same tool-aware template branch the real
|
|
429
|
+
// turns use, or the warmed tokens are not their prefix.
|
|
430
|
+
...(tools && tools.length > 0 ? { tools } : {}),
|
|
431
|
+
// Critical: persist=true writes the warmed entry to disk so
|
|
432
|
+
// sibling sessions opened after this process restart still
|
|
433
|
+
// benefit. Without persist the prefix would only live in
|
|
434
|
+
// this process's memory.
|
|
435
|
+
persist: true,
|
|
436
|
+
}),
|
|
437
|
+
});
|
|
438
|
+
this.warmedPrefixes.add(prefixId);
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
// Best-effort — first turn just pays cold prefill cost.
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ToolCallDelta } from './tool-call-protocol.js';
|
|
2
|
+
export interface ChatMessage {
|
|
3
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
4
|
+
content: string | null;
|
|
5
|
+
tool_calls?: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
type: 'function';
|
|
8
|
+
function: {
|
|
9
|
+
name: string;
|
|
10
|
+
arguments: string;
|
|
11
|
+
};
|
|
12
|
+
}>;
|
|
13
|
+
tool_call_id?: string;
|
|
14
|
+
images?: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface ChatCompletionChunk {
|
|
17
|
+
choices?: Array<{
|
|
18
|
+
index: number;
|
|
19
|
+
delta: {
|
|
20
|
+
role?: string;
|
|
21
|
+
content?: string | null;
|
|
22
|
+
tool_calls?: ToolCallDelta[];
|
|
23
|
+
};
|
|
24
|
+
finish_reason?: string | null;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* mlx_vlm.server emits Responses-API field names (`input_tokens` /
|
|
28
|
+
* `output_tokens`) while older OpenAI-compatible servers (including
|
|
29
|
+
* llama.cpp's, ollama's, and the Chat Completions reference shape)
|
|
30
|
+
* use `prompt_tokens` / `completion_tokens`. We accept both so this
|
|
31
|
+
* type can flex across engines if we ever point the provider at
|
|
32
|
+
* a different OpenAI-compatible host. mlx_vlm also ships
|
|
33
|
+
* `prompt_tps` (prefill speed, set on first chunk) and
|
|
34
|
+
* `generation_tps` (running decode speed, updated per chunk).
|
|
35
|
+
*/
|
|
36
|
+
usage?: {
|
|
37
|
+
input_tokens?: number;
|
|
38
|
+
output_tokens?: number;
|
|
39
|
+
prompt_tokens?: number;
|
|
40
|
+
completion_tokens?: number;
|
|
41
|
+
total_tokens?: number;
|
|
42
|
+
prompt_tps?: number;
|
|
43
|
+
generation_tps?: number;
|
|
44
|
+
/** Prompt tokens actually served from the MLX KV cache. */
|
|
45
|
+
cached_tokens?: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export declare function setChatTemplateKwarg(body: Record<string, unknown>, key: string, value: unknown): void;
|