@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,560 @@
|
|
|
1
|
+
import { mkdir, readdir, rm, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { Session } from 'node:inspector/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { createHistogram } from 'node:perf_hooks';
|
|
5
|
+
import { Worker } from 'node:worker_threads';
|
|
6
|
+
import { createLogger, } from '@bendyline/gezel';
|
|
7
|
+
import { redactPathSecrets } from './redact-path.js';
|
|
8
|
+
/**
|
|
9
|
+
* Main-thread responsiveness monitor.
|
|
10
|
+
*
|
|
11
|
+
* The daemon runs on one event loop. In embedded mode (`pnpm app`, and the
|
|
12
|
+
* packaged fallback) that loop is Electron's main thread, so a synchronous
|
|
13
|
+
* block here freezes the window itself, and Windows labels it "Not Responding"
|
|
14
|
+
* after 5 s. Before this existed a block under the suspend monitor's 10 s floor
|
|
15
|
+
* left no trace, and a longer one was logged as "host resumed after Ns
|
|
16
|
+
* suspended": sleep that never happened (two of them during one catalog
|
|
17
|
+
* update, 2026-09-30).
|
|
18
|
+
*
|
|
19
|
+
* Detection is a heartbeat on the main thread that notices its own gaps, with
|
|
20
|
+
* a watchdog worker as the witness: if the worker's timer stayed on schedule
|
|
21
|
+
* through the gap, the main thread was blocked; if the worker was late too, the
|
|
22
|
+
* whole process or host was paused, which is the suspend clock's business.
|
|
23
|
+
* `eventLoopUtilization()` cannot make that call: Electron's main process
|
|
24
|
+
* reports it as all zeros.
|
|
25
|
+
*
|
|
26
|
+
* Every tick here wakes an otherwise idle process, and the machine service is
|
|
27
|
+
* idle almost all of the time. A 20 ms event-loop-delay histogram plus 100 ms
|
|
28
|
+
* ticks on both threads took an idle daemon from 13 to 59 context switches a
|
|
29
|
+
* second (v1.26275.85), so the beat doubles as the delay sampler and both
|
|
30
|
+
* threads tick at the coarsest period that still measures a recordable stall.
|
|
31
|
+
*/
|
|
32
|
+
const log = createLogger('perf');
|
|
33
|
+
/**
|
|
34
|
+
* A gap is measured to within one beat, so this has to stay well inside
|
|
35
|
+
* `STALL_RECORD_MS`. At the same period, a pause long enough to log leaves the
|
|
36
|
+
* watchdog late by more than half the gap, which is what `isMainThreadBlock`
|
|
37
|
+
* needs to rule the main thread out.
|
|
38
|
+
*/
|
|
39
|
+
export const BEAT_MS = 250;
|
|
40
|
+
export const WATCHDOG_TICK_MS = 250;
|
|
41
|
+
/** Shorter blocks are ordinary GC and JSON work; not worth a record. */
|
|
42
|
+
export const STALL_RECORD_MS = 500;
|
|
43
|
+
const STALL_LOG_MS = 1_000;
|
|
44
|
+
/** Windows marks an unresponsive window "Not Responding" after 5 s. */
|
|
45
|
+
const STALL_WARN_MS = 5_000;
|
|
46
|
+
const SLOW_REQUEST_RECORD_MS = 250;
|
|
47
|
+
const SLOW_REQUEST_LOG_MS = 1_000;
|
|
48
|
+
const RING_SIZE = 50;
|
|
49
|
+
/** Finished work is kept this long so a stall can name what ran through it. */
|
|
50
|
+
const FINISHED_WORK_KEEP_MS = 120_000;
|
|
51
|
+
const FINISHED_WORK_MIN_MS = 50;
|
|
52
|
+
const FINISHED_WORK_CAP = 500;
|
|
53
|
+
const DELAY_WINDOW_MS = 5 * 60_000;
|
|
54
|
+
const PROFILE_WINDOW_MS = 60_000;
|
|
55
|
+
const PROFILE_SAMPLING_US = 5_000;
|
|
56
|
+
const PROFILE_KEEP = 20;
|
|
57
|
+
const LABEL_MAX = 200;
|
|
58
|
+
/**
|
|
59
|
+
* The witness. It keeps its own late ticks and, asked about a gap, answers
|
|
60
|
+
* with the worst one since the gap began. A tick late by less than a period is
|
|
61
|
+
* not kept: it cannot reach half of a recordable gap.
|
|
62
|
+
*
|
|
63
|
+
* It sleeps on a futex instead of running an event loop: a worker woken by its
|
|
64
|
+
* own timer cost about 1.6 context switches per tick on Windows, against 1.0
|
|
65
|
+
* for this. The main thread posts the question and then flips `asked` to wake
|
|
66
|
+
* it early. Ticks are settled before questions, so a late tick at a resume is
|
|
67
|
+
* always on record by the time the question about that gap is answered.
|
|
68
|
+
*/
|
|
69
|
+
const WATCHDOG_SOURCE = `
|
|
70
|
+
const { parentPort, receiveMessageOnPort, workerData } = require('node:worker_threads');
|
|
71
|
+
const tickMs = workerData.tickMs;
|
|
72
|
+
const asked = new Int32Array(workerData.asked);
|
|
73
|
+
const lateTicks = [];
|
|
74
|
+
let lastTick = Date.now();
|
|
75
|
+
for (;;) {
|
|
76
|
+
Atomics.wait(asked, 0, 0, Math.max(0, lastTick + tickMs - Date.now()));
|
|
77
|
+
const now = Date.now();
|
|
78
|
+
if (now - lastTick >= tickMs) {
|
|
79
|
+
const lateMs = now - lastTick - tickMs;
|
|
80
|
+
lastTick = now;
|
|
81
|
+
if (lateMs >= tickMs) {
|
|
82
|
+
lateTicks.push({ at: now, lateMs });
|
|
83
|
+
if (lateTicks.length > 32) lateTicks.shift();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
Atomics.store(asked, 0, 0);
|
|
87
|
+
for (let m = receiveMessageOnPort(parentPort); m; m = receiveMessageOnPort(parentPort)) {
|
|
88
|
+
const gap = m.message;
|
|
89
|
+
let lateMs = 0;
|
|
90
|
+
for (const tick of lateTicks) {
|
|
91
|
+
if (tick.at > gap.startedAt && tick.lateMs > lateMs) lateMs = tick.lateMs;
|
|
92
|
+
}
|
|
93
|
+
parentPort.postMessage({ startedAt: gap.startedAt, durationMs: gap.durationMs, watchdogLateMs: lateMs });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
`;
|
|
97
|
+
/**
|
|
98
|
+
* A stale heartbeat is a main-thread block only when the watchdog itself kept
|
|
99
|
+
* time. When the watchdog was late by a comparable amount, the process or the
|
|
100
|
+
* host was paused, and blaming whatever was in flight would be a false lead.
|
|
101
|
+
*/
|
|
102
|
+
export function isMainThreadBlock(report) {
|
|
103
|
+
return report.watchdogLateMs < report.durationMs / 2;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Work that overlapped `[start, end]`, most suspicious first. Running work
|
|
107
|
+
* counts to `now`; a request that blocked the thread finishes the instant the
|
|
108
|
+
* block ends, so finished work has to be searched too. Ranking is by overlap
|
|
109
|
+
* with the block, then by the tightest fit: a 10 s request inside a 10 s block
|
|
110
|
+
* outranks a 90 s long-poll that merely spanned it.
|
|
111
|
+
*/
|
|
112
|
+
export function workDuring(start, end, active, finished, now, limit = 6) {
|
|
113
|
+
const hits = [];
|
|
114
|
+
const consider = (w, until) => {
|
|
115
|
+
const overlap = Math.min(until, end) - Math.max(w.startedAt, start);
|
|
116
|
+
if (overlap > 0)
|
|
117
|
+
hits.push({ label: w.label, durationMs: until - w.startedAt, overlap });
|
|
118
|
+
};
|
|
119
|
+
for (const w of active)
|
|
120
|
+
consider(w, now);
|
|
121
|
+
for (const w of finished)
|
|
122
|
+
consider(w, w.endedAt);
|
|
123
|
+
hits.sort((a, b) => b.overlap - a.overlap || a.durationMs - b.durationMs);
|
|
124
|
+
return hits.slice(0, limit).map(({ label, durationMs }) => ({ label, durationMs }));
|
|
125
|
+
}
|
|
126
|
+
export function formatPerfMs(ms) {
|
|
127
|
+
if (ms < 1_000)
|
|
128
|
+
return `${Math.round(ms)}ms`;
|
|
129
|
+
if (ms < 60_000)
|
|
130
|
+
return `${(ms / 1_000).toFixed(1)}s`;
|
|
131
|
+
const m = Math.floor(ms / 60_000);
|
|
132
|
+
return `${m}m${Math.round((ms % 60_000) / 1_000)}s`;
|
|
133
|
+
}
|
|
134
|
+
function pushRing(ring, item) {
|
|
135
|
+
ring.push(item);
|
|
136
|
+
if (ring.length > RING_SIZE)
|
|
137
|
+
ring.splice(0, ring.length - RING_SIZE);
|
|
138
|
+
}
|
|
139
|
+
function clip(label) {
|
|
140
|
+
return label.length > LABEL_MAX ? `${label.slice(0, LABEL_MAX - 1)}…` : label;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Rolling CPU profile of the main thread, kept only when a window contains a
|
|
144
|
+
* stall. The V8 sampler runs on its own thread, so samples land inside a
|
|
145
|
+
* synchronous block, native calls included — which is what makes the saved
|
|
146
|
+
* profile a verdict rather than a suspect list.
|
|
147
|
+
*/
|
|
148
|
+
class StallProfiler {
|
|
149
|
+
dir;
|
|
150
|
+
wanted;
|
|
151
|
+
session = null;
|
|
152
|
+
running = false;
|
|
153
|
+
disabled = false;
|
|
154
|
+
chain = Promise.resolve();
|
|
155
|
+
/** When the current profile began, so a capture can tell if it covers a block. */
|
|
156
|
+
profileStartedAt = 0;
|
|
157
|
+
constructor(dir, wanted) {
|
|
158
|
+
this.dir = dir;
|
|
159
|
+
this.wanted = wanted;
|
|
160
|
+
}
|
|
161
|
+
get active() {
|
|
162
|
+
return this.running;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Start or stop to match `wanted()` without restarting a running profile.
|
|
166
|
+
* Boot calls this the moment debug mode is known: waiting for the first
|
|
167
|
+
* window roll left every boot block unprofiled (2026-10-08).
|
|
168
|
+
*/
|
|
169
|
+
sync() {
|
|
170
|
+
this.enqueue(async () => {
|
|
171
|
+
const want = this.wantNow();
|
|
172
|
+
if (want && !this.running)
|
|
173
|
+
await this.begin();
|
|
174
|
+
else if (!want && this.running)
|
|
175
|
+
await this.end();
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/** Called every window: start, stop, or roll the profile per `wanted()`. */
|
|
179
|
+
roll() {
|
|
180
|
+
this.enqueue(async () => {
|
|
181
|
+
const want = this.wantNow();
|
|
182
|
+
if (want && !this.running)
|
|
183
|
+
await this.begin();
|
|
184
|
+
else if (!want && this.running)
|
|
185
|
+
await this.end();
|
|
186
|
+
else if (this.running) {
|
|
187
|
+
await this.end();
|
|
188
|
+
await this.begin();
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Save the current window's profile. Resolves to the file name, or null.
|
|
194
|
+
* A profile that began after the block did is not saved: it holds only the
|
|
195
|
+
* tail, and a 263 ms profile filed as "the 2.7s block" sent the reader after
|
|
196
|
+
* the profiler's own startup cost.
|
|
197
|
+
*/
|
|
198
|
+
capture(at, durationMs) {
|
|
199
|
+
return this.enqueue(async () => {
|
|
200
|
+
if (!this.running || !this.session)
|
|
201
|
+
return null;
|
|
202
|
+
// `at` is the last beat before the block, up to a beat ahead of it.
|
|
203
|
+
if (this.profileStartedAt > at + BEAT_MS)
|
|
204
|
+
return null;
|
|
205
|
+
const { profile } = await this.session.post('Profiler.stop');
|
|
206
|
+
this.running = false;
|
|
207
|
+
const stamp = new Date(at).toISOString().replace(/[:.]/g, '-');
|
|
208
|
+
const name = `stall-${stamp}-${Math.round(durationMs)}ms.cpuprofile`;
|
|
209
|
+
await mkdir(this.dir, { recursive: true });
|
|
210
|
+
await writeFile(join(this.dir, name), JSON.stringify(profile));
|
|
211
|
+
await this.prune();
|
|
212
|
+
if (this.wantNow())
|
|
213
|
+
await this.begin();
|
|
214
|
+
return name;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
dispose() {
|
|
218
|
+
return this.enqueue(async () => {
|
|
219
|
+
await this.end();
|
|
220
|
+
this.session?.disconnect();
|
|
221
|
+
this.session = null;
|
|
222
|
+
}).then(() => undefined);
|
|
223
|
+
}
|
|
224
|
+
wantNow() {
|
|
225
|
+
if (this.disabled)
|
|
226
|
+
return false;
|
|
227
|
+
try {
|
|
228
|
+
return this.wanted();
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async begin() {
|
|
235
|
+
if (!this.session) {
|
|
236
|
+
const session = new Session();
|
|
237
|
+
session.connect();
|
|
238
|
+
this.session = session;
|
|
239
|
+
}
|
|
240
|
+
await this.session.post('Profiler.enable');
|
|
241
|
+
await this.session.post('Profiler.setSamplingInterval', { interval: PROFILE_SAMPLING_US });
|
|
242
|
+
const startedAt = Date.now();
|
|
243
|
+
await this.session.post('Profiler.start');
|
|
244
|
+
this.profileStartedAt = startedAt;
|
|
245
|
+
this.running = true;
|
|
246
|
+
}
|
|
247
|
+
async end() {
|
|
248
|
+
if (!this.running || !this.session)
|
|
249
|
+
return;
|
|
250
|
+
this.running = false;
|
|
251
|
+
await this.session.post('Profiler.stop');
|
|
252
|
+
}
|
|
253
|
+
async prune() {
|
|
254
|
+
const names = (await readdir(this.dir))
|
|
255
|
+
.filter((n) => n.startsWith('stall-') && n.endsWith('.cpuprofile'))
|
|
256
|
+
.sort();
|
|
257
|
+
for (const old of names.slice(0, Math.max(0, names.length - PROFILE_KEEP))) {
|
|
258
|
+
await rm(join(this.dir, old), { force: true });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
enqueue(op) {
|
|
262
|
+
const next = this.chain.then(op).catch((err) => {
|
|
263
|
+
// Another inspector client (a debugger attached with --inspect) can own
|
|
264
|
+
// the profiler. Losing profiles must never cost the daemon anything else.
|
|
265
|
+
this.disabled = true;
|
|
266
|
+
this.running = false;
|
|
267
|
+
log.warn(`CPU profiling for stalls is off for this run: ${err instanceof Error ? err.message : String(err)}`);
|
|
268
|
+
return null;
|
|
269
|
+
});
|
|
270
|
+
this.chain = next;
|
|
271
|
+
return next;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
class ResponsivenessMonitor {
|
|
275
|
+
startedAt = Date.now();
|
|
276
|
+
active = new Map();
|
|
277
|
+
finished = [];
|
|
278
|
+
stalls = [];
|
|
279
|
+
slowRequests = [];
|
|
280
|
+
clientReports = [];
|
|
281
|
+
nextId = 1;
|
|
282
|
+
lastBeatAt = Date.now();
|
|
283
|
+
beatTimer;
|
|
284
|
+
windowTimer;
|
|
285
|
+
/** Beat lateness in nanoseconds, the unit `monitorEventLoopDelay` used. */
|
|
286
|
+
delay = createHistogram();
|
|
287
|
+
delayWindowStartedAt = Date.now();
|
|
288
|
+
watchdogAsked = new Int32Array(new SharedArrayBuffer(4));
|
|
289
|
+
watchdog = null;
|
|
290
|
+
profiler;
|
|
291
|
+
/**
|
|
292
|
+
* Gaps sent to the watchdog and not yet answered. The window timer comes due
|
|
293
|
+
* during a long block and fires in the same tick as the beat that reports
|
|
294
|
+
* it, so rolling then discarded the very profile the answer would save.
|
|
295
|
+
*/
|
|
296
|
+
awaitingVerdicts = 0;
|
|
297
|
+
rollDeferred = false;
|
|
298
|
+
constructor(opts) {
|
|
299
|
+
this.beatTimer = setInterval(() => this.beat(), BEAT_MS);
|
|
300
|
+
this.beatTimer.unref?.();
|
|
301
|
+
this.profiler = new StallProfiler(join(opts.logsDir, 'perf'), opts.profileWhen ?? (() => false));
|
|
302
|
+
this.windowTimer = setInterval(() => {
|
|
303
|
+
this.rollProfile();
|
|
304
|
+
if (Date.now() - this.delayWindowStartedAt >= DELAY_WINDOW_MS) {
|
|
305
|
+
this.delay.reset();
|
|
306
|
+
this.delayWindowStartedAt = Date.now();
|
|
307
|
+
}
|
|
308
|
+
}, opts.profileWindowMs ?? PROFILE_WINDOW_MS);
|
|
309
|
+
this.windowTimer.unref?.();
|
|
310
|
+
this.profiler.roll();
|
|
311
|
+
this.startWatchdog();
|
|
312
|
+
}
|
|
313
|
+
/** Match profiling to the current debug setting now, not at the next window. */
|
|
314
|
+
syncProfiling() {
|
|
315
|
+
this.profiler.sync();
|
|
316
|
+
}
|
|
317
|
+
rollProfile() {
|
|
318
|
+
// A stale beat is a gap about to be reported: the window timer can fire
|
|
319
|
+
// ahead of the beat that reports it.
|
|
320
|
+
if (this.awaitingVerdicts > 0 || Date.now() - this.lastBeatAt >= STALL_RECORD_MS) {
|
|
321
|
+
this.rollDeferred = true;
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
this.rollDeferred = false;
|
|
325
|
+
this.profiler.roll();
|
|
326
|
+
}
|
|
327
|
+
begin(label) {
|
|
328
|
+
const id = this.nextId++;
|
|
329
|
+
const work = { label: clip(redactPathSecrets(label)), startedAt: Date.now() };
|
|
330
|
+
this.active.set(id, work);
|
|
331
|
+
return (outcome) => {
|
|
332
|
+
if (!this.active.delete(id))
|
|
333
|
+
return;
|
|
334
|
+
const endedAt = Date.now();
|
|
335
|
+
const durationMs = endedAt - work.startedAt;
|
|
336
|
+
if (durationMs >= FINISHED_WORK_MIN_MS)
|
|
337
|
+
this.remember({ ...work, endedAt });
|
|
338
|
+
if (outcome?.method && outcome.path && durationMs >= SLOW_REQUEST_RECORD_MS) {
|
|
339
|
+
const status = outcome.status ?? 0;
|
|
340
|
+
pushRing(this.slowRequests, {
|
|
341
|
+
at: new Date(work.startedAt).toISOString(),
|
|
342
|
+
method: outcome.method,
|
|
343
|
+
path: clip(redactPathSecrets(outcome.path)),
|
|
344
|
+
status,
|
|
345
|
+
durationMs,
|
|
346
|
+
});
|
|
347
|
+
if (durationMs >= SLOW_REQUEST_LOG_MS) {
|
|
348
|
+
log.info(`slow request ${work.label} ${formatPerfMs(durationMs)} (${status})`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
recordClient(received) {
|
|
354
|
+
const report = redactClientReport(received);
|
|
355
|
+
pushRing(this.clientReports, { receivedAt: new Date().toISOString(), report });
|
|
356
|
+
log.info(`ui: ${describeClientReport(report)}`);
|
|
357
|
+
}
|
|
358
|
+
snapshot() {
|
|
359
|
+
const now = Date.now();
|
|
360
|
+
const count = this.delay.count;
|
|
361
|
+
return {
|
|
362
|
+
running: true,
|
|
363
|
+
startedAt: new Date(this.startedAt).toISOString(),
|
|
364
|
+
profiling: this.profiler.active,
|
|
365
|
+
eventLoopDelay: count > 0
|
|
366
|
+
? {
|
|
367
|
+
windowStartedAt: new Date(this.delayWindowStartedAt).toISOString(),
|
|
368
|
+
p50Ms: this.delay.percentile(50) / 1e6,
|
|
369
|
+
p99Ms: this.delay.percentile(99) / 1e6,
|
|
370
|
+
maxMs: this.delay.max / 1e6,
|
|
371
|
+
}
|
|
372
|
+
: null,
|
|
373
|
+
stalls: [...this.stalls],
|
|
374
|
+
slowRequests: [...this.slowRequests],
|
|
375
|
+
inflight: [...this.active.values()]
|
|
376
|
+
.map((w) => ({ label: w.label, durationMs: now - w.startedAt }))
|
|
377
|
+
.sort((a, b) => b.durationMs - a.durationMs),
|
|
378
|
+
clientReports: [...this.clientReports],
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
async dispose() {
|
|
382
|
+
clearInterval(this.beatTimer);
|
|
383
|
+
clearInterval(this.windowTimer);
|
|
384
|
+
const watchdog = this.watchdog;
|
|
385
|
+
this.watchdog = null;
|
|
386
|
+
await Promise.all([watchdog?.terminate(), this.profiler.dispose()]);
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* A gap is reported from the last beat, the last moment the thread was seen
|
|
390
|
+
* alive, so it overstates the block by less than one beat rather than
|
|
391
|
+
* missing one of a recordable size.
|
|
392
|
+
*/
|
|
393
|
+
beat() {
|
|
394
|
+
const now = Date.now();
|
|
395
|
+
const startedAt = this.lastBeatAt;
|
|
396
|
+
this.lastBeatAt = now;
|
|
397
|
+
const gapMs = now - startedAt;
|
|
398
|
+
this.delay.record(Math.max(1, Math.round((gapMs - BEAT_MS) * 1e6)));
|
|
399
|
+
if (gapMs < STALL_RECORD_MS || !this.watchdog) {
|
|
400
|
+
if (this.rollDeferred && this.awaitingVerdicts === 0)
|
|
401
|
+
this.rollProfile();
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
this.awaitingVerdicts += 1;
|
|
405
|
+
this.watchdog.postMessage({ startedAt, durationMs: gapMs });
|
|
406
|
+
Atomics.store(this.watchdogAsked, 0, 1);
|
|
407
|
+
Atomics.notify(this.watchdogAsked, 0);
|
|
408
|
+
}
|
|
409
|
+
remember(work) {
|
|
410
|
+
const cutoff = work.endedAt - FINISHED_WORK_KEEP_MS;
|
|
411
|
+
const oldest = this.finished[0];
|
|
412
|
+
if (this.finished.length >= FINISHED_WORK_CAP || (oldest && oldest.endedAt < cutoff)) {
|
|
413
|
+
this.finished = this.finished
|
|
414
|
+
.filter((w) => w.endedAt >= cutoff)
|
|
415
|
+
.slice(-(FINISHED_WORK_CAP - 1));
|
|
416
|
+
}
|
|
417
|
+
this.finished.push(work);
|
|
418
|
+
}
|
|
419
|
+
startWatchdog() {
|
|
420
|
+
try {
|
|
421
|
+
const worker = new Worker(WATCHDOG_SOURCE, {
|
|
422
|
+
eval: true,
|
|
423
|
+
workerData: { tickMs: WATCHDOG_TICK_MS, asked: this.watchdogAsked.buffer },
|
|
424
|
+
});
|
|
425
|
+
worker.on('message', (report) => this.onWatchdogReport(report));
|
|
426
|
+
worker.on('error', (err) => {
|
|
427
|
+
log.warn(`stall watchdog stopped: ${err instanceof Error ? err.message : String(err)}`);
|
|
428
|
+
});
|
|
429
|
+
worker.unref();
|
|
430
|
+
this.watchdog = worker;
|
|
431
|
+
}
|
|
432
|
+
catch (err) {
|
|
433
|
+
log.warn(`stall watchdog unavailable: ${err instanceof Error ? err.message : String(err)}`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
onWatchdogReport(report) {
|
|
437
|
+
this.awaitingVerdicts = Math.max(0, this.awaitingVerdicts - 1);
|
|
438
|
+
this.handleReport(report);
|
|
439
|
+
if (this.awaitingVerdicts === 0 && this.rollDeferred)
|
|
440
|
+
this.rollProfile();
|
|
441
|
+
}
|
|
442
|
+
handleReport(report) {
|
|
443
|
+
if (!isMainThreadBlock(report))
|
|
444
|
+
return;
|
|
445
|
+
const now = Date.now();
|
|
446
|
+
const stall = {
|
|
447
|
+
at: new Date(report.startedAt).toISOString(),
|
|
448
|
+
durationMs: report.durationMs,
|
|
449
|
+
during: workDuring(report.startedAt, report.startedAt + report.durationMs, this.active.values(), this.finished, now),
|
|
450
|
+
};
|
|
451
|
+
pushRing(this.stalls, stall);
|
|
452
|
+
if (report.durationMs < STALL_LOG_MS)
|
|
453
|
+
return;
|
|
454
|
+
const running = stall.during.length > 0
|
|
455
|
+
? stall.during.map((w) => `${w.label} (${formatPerfMs(w.durationMs)})`).join(', ')
|
|
456
|
+
: 'nothing tracked';
|
|
457
|
+
const line = `main thread blocked for ${formatPerfMs(report.durationMs)} — running: ${running}`;
|
|
458
|
+
if (report.durationMs >= STALL_WARN_MS)
|
|
459
|
+
log.warn(line);
|
|
460
|
+
else
|
|
461
|
+
log.info(line);
|
|
462
|
+
void this.profiler.capture(report.startedAt, report.durationMs).then((name) => {
|
|
463
|
+
if (!name)
|
|
464
|
+
return;
|
|
465
|
+
stall.profile = name;
|
|
466
|
+
log.info(`CPU profile of the ${formatPerfMs(report.durationMs)} block: logs/perf/${name}`);
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* The renderer reports the paths it timed, so they are scrubbed like the
|
|
472
|
+
* daemon's own. Never longer than what arrived: `GET /perf` validates the
|
|
473
|
+
* stored report again against the same length caps.
|
|
474
|
+
*/
|
|
475
|
+
export function redactClientReport(report) {
|
|
476
|
+
const scrub = (text) => redactPathSecrets(text).slice(0, text.length);
|
|
477
|
+
if (report.kind === 'long-task') {
|
|
478
|
+
return {
|
|
479
|
+
...report,
|
|
480
|
+
view: scrub(report.view),
|
|
481
|
+
...(report.source !== undefined ? { source: scrub(report.source) } : {}),
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
return {
|
|
485
|
+
...report,
|
|
486
|
+
view: scrub(report.view),
|
|
487
|
+
slowest: report.slowest.map((request) => ({ ...request, path: scrub(request.path) })),
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
export function describeClientReport(report) {
|
|
491
|
+
if (report.kind === 'long-task') {
|
|
492
|
+
return `renderer blocked for ${formatPerfMs(report.durationMs)} on ${report.view}${report.source ? ` in ${report.source}` : ''}`;
|
|
493
|
+
}
|
|
494
|
+
const slowest = report.slowest[0];
|
|
495
|
+
const parts = [
|
|
496
|
+
`opened ${report.view} in ${formatPerfMs(report.settledMs)}${report.unsettled ? ' (still loading)' : ''}`,
|
|
497
|
+
`first frame ${formatPerfMs(report.firstFrameMs)}`,
|
|
498
|
+
`${report.requests} request${report.requests === 1 ? '' : 's'}`,
|
|
499
|
+
];
|
|
500
|
+
if (slowest) {
|
|
501
|
+
parts.push(`slowest ${slowest.method} ${slowest.path} ${formatPerfMs(slowest.ms)}${slowest.serverMs !== undefined ? ` (daemon ${formatPerfMs(slowest.serverMs)})` : ''}`);
|
|
502
|
+
}
|
|
503
|
+
if (report.longTasks.count > 0) {
|
|
504
|
+
parts.push(`renderer busy ${report.longTasks.count}× (max ${formatPerfMs(report.longTasks.maxMs)})`);
|
|
505
|
+
}
|
|
506
|
+
return parts.join(', ');
|
|
507
|
+
}
|
|
508
|
+
let monitor = null;
|
|
509
|
+
const noop = () => { };
|
|
510
|
+
/**
|
|
511
|
+
* Start watching the main thread. A second start replaces the first; the
|
|
512
|
+
* returned stopper only ever stops the monitor it started.
|
|
513
|
+
*/
|
|
514
|
+
export function startResponsivenessMonitor(opts) {
|
|
515
|
+
if (monitor)
|
|
516
|
+
void monitor.dispose();
|
|
517
|
+
const mine = new ResponsivenessMonitor(opts);
|
|
518
|
+
monitor = mine;
|
|
519
|
+
return async () => {
|
|
520
|
+
if (monitor === mine)
|
|
521
|
+
monitor = null;
|
|
522
|
+
await mine.dispose();
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
/** Start or stop the stall profiler to match its condition now. */
|
|
526
|
+
export function syncPerfProfiling() {
|
|
527
|
+
monitor?.syncProfiling();
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Mark a stretch of background work so a stall that happens during it can
|
|
531
|
+
* name it. Returns the function that ends the stretch; free when no monitor runs.
|
|
532
|
+
*/
|
|
533
|
+
export function beginPerfWork(label) {
|
|
534
|
+
if (!monitor)
|
|
535
|
+
return noop;
|
|
536
|
+
const end = monitor.begin(label);
|
|
537
|
+
return () => end();
|
|
538
|
+
}
|
|
539
|
+
/** Time one HTTP request. The returned function takes the response status. */
|
|
540
|
+
export function beginPerfRequest(method, path) {
|
|
541
|
+
if (!monitor)
|
|
542
|
+
return noop;
|
|
543
|
+
const end = monitor.begin(`${method} ${path}`);
|
|
544
|
+
return (status) => end({ status, method, path });
|
|
545
|
+
}
|
|
546
|
+
export function recordClientPerfReport(report) {
|
|
547
|
+
monitor?.recordClient(report);
|
|
548
|
+
}
|
|
549
|
+
export function perfSnapshot() {
|
|
550
|
+
return (monitor?.snapshot() ?? {
|
|
551
|
+
running: false,
|
|
552
|
+
startedAt: null,
|
|
553
|
+
profiling: false,
|
|
554
|
+
eventLoopDelay: null,
|
|
555
|
+
stalls: [],
|
|
556
|
+
slowRequests: [],
|
|
557
|
+
inflight: [],
|
|
558
|
+
clientReports: [],
|
|
559
|
+
});
|
|
560
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sentence a chat turn shows when no local model is installed yet.
|
|
3
|
+
*
|
|
4
|
+
* A first run pins a recommended model and the user starts a multi-gigabyte
|
|
5
|
+
* download — then, quite reasonably, tries to chat while they wait. The turn
|
|
6
|
+
* fails, because there is genuinely nothing to answer with. What it used to
|
|
7
|
+
* say was "Download a model from the list above", which is written for the
|
|
8
|
+
* Settings model list and is wrong twice over in a chat: there is no list
|
|
9
|
+
* above, and the download they are being told to start is already running.
|
|
10
|
+
*
|
|
11
|
+
* Given the live install snapshot, say the true thing instead.
|
|
12
|
+
*/
|
|
13
|
+
export interface ActiveInstallLike {
|
|
14
|
+
catalogId: string;
|
|
15
|
+
bytesWritten: number;
|
|
16
|
+
totalBytes: number;
|
|
17
|
+
phase: 'downloading' | 'verifying' | 'extracting-metadata';
|
|
18
|
+
}
|
|
19
|
+
/** Whole-percent progress, or null when the total size isn't known yet. */
|
|
20
|
+
export declare function installPercent(install: ActiveInstallLike): number | null;
|
|
21
|
+
/**
|
|
22
|
+
* The Settings tab that lists this machine's models, named the way the UI's
|
|
23
|
+
* `deviceLabel` names it. llama.cpp runs everywhere, so its errors must not
|
|
24
|
+
* send a Windows owner to a "This Mac" tab that does not exist.
|
|
25
|
+
*/
|
|
26
|
+
export declare function localDeviceSettingsLabel(platform?: NodeJS.Platform): string;
|
|
27
|
+
/**
|
|
28
|
+
* Why an on-device chat can't answer yet. Not a fault: the person is waiting
|
|
29
|
+
* on a download, so the turn's failure card offers the fix and no bug report.
|
|
30
|
+
* `describeTurnError` copies the code into the turn's error detail.
|
|
31
|
+
*/
|
|
32
|
+
export type NotReadyCode = 'model-not-ready' | 'engine-not-ready';
|
|
33
|
+
/** An actionable error for a chat that can't answer yet. */
|
|
34
|
+
export declare function notReadyError(message: string, code: NotReadyCode): Error;
|
|
35
|
+
/**
|
|
36
|
+
* Compose the user-facing message for a chat turn that found no model.
|
|
37
|
+
*
|
|
38
|
+
* `active` is whichever install is in flight for this engine, or null. The
|
|
39
|
+
* caller supplies `engineLabel` ("Local model", "Apple MLX") so the message
|
|
40
|
+
* keeps the prefix the rest of that provider's errors use.
|
|
41
|
+
*/
|
|
42
|
+
export declare function noModelYetMessage(engineLabel: string, active: ActiveInstallLike | null): string;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** Whole-percent progress, or null when the total size isn't known yet. */
|
|
2
|
+
export function installPercent(install) {
|
|
3
|
+
if (!Number.isFinite(install.totalBytes) || install.totalBytes <= 0)
|
|
4
|
+
return null;
|
|
5
|
+
const pct = (install.bytesWritten / install.totalBytes) * 100;
|
|
6
|
+
if (!Number.isFinite(pct))
|
|
7
|
+
return null;
|
|
8
|
+
// Never round up to 100 while bytes are still arriving — "100% downloaded"
|
|
9
|
+
// next to a turn that just failed reads as a contradiction.
|
|
10
|
+
return Math.max(0, Math.min(99, Math.floor(pct)));
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The Settings tab that lists this machine's models, named the way the UI's
|
|
14
|
+
* `deviceLabel` names it. llama.cpp runs everywhere, so its errors must not
|
|
15
|
+
* send a Windows owner to a "This Mac" tab that does not exist.
|
|
16
|
+
*/
|
|
17
|
+
export function localDeviceSettingsLabel(platform = process.platform) {
|
|
18
|
+
if (platform === 'darwin')
|
|
19
|
+
return 'This Mac';
|
|
20
|
+
if (platform === 'win32')
|
|
21
|
+
return 'This PC';
|
|
22
|
+
return 'This Device';
|
|
23
|
+
}
|
|
24
|
+
/** An actionable error for a chat that can't answer yet. */
|
|
25
|
+
export function notReadyError(message, code) {
|
|
26
|
+
const err = new Error(message);
|
|
27
|
+
err.isActionable = true;
|
|
28
|
+
err.code = code;
|
|
29
|
+
return err;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Compose the user-facing message for a chat turn that found no model.
|
|
33
|
+
*
|
|
34
|
+
* `active` is whichever install is in flight for this engine, or null. The
|
|
35
|
+
* caller supplies `engineLabel` ("Local model", "Apple MLX") so the message
|
|
36
|
+
* keeps the prefix the rest of that provider's errors use.
|
|
37
|
+
*/
|
|
38
|
+
export function noModelYetMessage(engineLabel, active) {
|
|
39
|
+
if (!active) {
|
|
40
|
+
return `${engineLabel}: no model is installed yet. Download one from Settings → Artificial Intelligence, then try again.`;
|
|
41
|
+
}
|
|
42
|
+
if (active.phase !== 'downloading') {
|
|
43
|
+
const verb = active.phase === 'verifying' ? 'being verified' : 'being prepared';
|
|
44
|
+
return `${engineLabel}: your model is ${verb} — hang tight, this message will work as soon as it finishes.`;
|
|
45
|
+
}
|
|
46
|
+
const pct = installPercent(active);
|
|
47
|
+
const progress = pct === null ? 'still downloading' : `${pct}% downloaded`;
|
|
48
|
+
return `${engineLabel}: your model is ${progress} — hang tight. Send this again once it finishes and it will go through.`;
|
|
49
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Both Electron and headless CLI startup can publish the verified native root. */
|
|
2
|
+
export declare function appleFmBinaryPath(env?: NodeJS.ProcessEnv): string | undefined;
|
|
3
|
+
/** Passive picker presence. Only an explicit helper probe can establish readiness. */
|
|
4
|
+
export declare function appleFoundationModelsInstalled(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, arch?: string): boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/** Both Electron and headless CLI startup can publish the verified native root. */
|
|
4
|
+
export function appleFmBinaryPath(env = process.env) {
|
|
5
|
+
if (env.GEZEL_APPLE_FM_BIN)
|
|
6
|
+
return env.GEZEL_APPLE_FM_BIN;
|
|
7
|
+
if (env.GEZEL_NATIVE_BIN_DIR) {
|
|
8
|
+
const binary = join(env.GEZEL_NATIVE_BIN_DIR, 'darwin-arm64', 'gezel-apple-fm');
|
|
9
|
+
if (existsSync(binary))
|
|
10
|
+
return binary;
|
|
11
|
+
}
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
/** Passive picker presence. Only an explicit helper probe can establish readiness. */
|
|
15
|
+
export function appleFoundationModelsInstalled(env = process.env, platform = process.platform, arch = process.arch) {
|
|
16
|
+
const bin = appleFmBinaryPath(env);
|
|
17
|
+
return platform === 'darwin' && arch === 'arm64' && !!bin && existsSync(bin);
|
|
18
|
+
}
|