@bendyline/gezel-inference 1.0.2 → 1.0.4
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/dist/catalog/chat-models/de/deepseek-v4.1-flash-552b-q2/manifest.json +120 -0
- package/dist/catalog/chat-models/de/deepseek-v4.1-flash-552b-q2/versions/1.0.0/manifest.json +21 -0
- package/dist/catalog/chat-models/gl/glm-5.3-flash-320b-q2/manifest.json +6 -5
- package/dist/catalog/chat-models/gl/glm-5.3-flash-320b-q2/versions/1.0.2/manifest.json +27 -0
- package/dist/catalog/chat-models/gl/glm-5.3-flash-320b-q2/versions/1.0.3/manifest.json +27 -0
- package/dist/catalog/chat-models/index.json +1 -1
- package/dist/catalog/chat-models/na/nanbeige4.2-3b-q4/manifest.json +1 -1
- package/dist/catalog/chat-models/ne/nemotron3.5-bolt-74b-iq2/manifest.json +157 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-bolt-74b-iq2/versions/1.0.0/manifest.json +30 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-bolt-e4b-q4/manifest.json +142 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-bolt-e4b-q4/versions/1.0.0/manifest.json +14 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-bolt-e4b-q4/versions/1.0.1/manifest.json +14 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-super-vl-120b-nvfp4/manifest.json +156 -0
- package/dist/catalog/chat-models/ne/nemotron3.5-super-vl-120b-nvfp4/versions/1.0.0/manifest.json +28 -0
- package/dist/catalog/chat-models/raw-index.json +1 -1
- package/dist/catalog/image-models/an/animagine-xl-4/manifest.json +40 -0
- package/dist/catalog/image-models/an/animagine-xl-4/versions/4.0.0/manifest.json +10 -0
- package/dist/catalog/image-models/an/animagine-xl-4/versions/4.0.1/manifest.json +16 -0
- package/dist/catalog/image-models/fl/flux-2-klein-4b-q4/manifest.json +44 -0
- package/dist/catalog/image-models/fl/flux-2-klein-4b-q4/versions/1.0.0/manifest.json +23 -0
- package/dist/catalog/image-models/fl/flux-2-klein-4b-q4/versions/1.0.1/manifest.json +29 -0
- package/dist/catalog/image-models/index.json +1 -0
- package/dist/catalog/image-models/ir/iris-3b-f32/manifest.json +41 -0
- package/dist/catalog/image-models/ir/iris-3b-f32/versions/1.0.0/manifest.json +19 -0
- package/dist/catalog/image-models/ir/iris-3b-f32/versions/1.0.1/manifest.json +25 -0
- package/dist/catalog/image-models/ir/iris-3b-f32/versions/1.0.2/manifest.json +25 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q4/manifest.json +42 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q4/versions/1.0.0/manifest.json +23 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q4/versions/1.0.1/manifest.json +29 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q6/manifest.json +42 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q6/versions/1.0.0/manifest.json +23 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q6/versions/1.0.1/manifest.json +29 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q8/manifest.json +42 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q8/versions/1.0.0/manifest.json +23 -0
- package/dist/catalog/image-models/kr/krea-2-turbo-q8/versions/1.0.1/manifest.json +29 -0
- package/dist/catalog/image-models/mi/ming-image-0.1-design-bf16/manifest.json +41 -0
- package/dist/catalog/image-models/mi/ming-image-0.1-design-bf16/versions/1.0.0/manifest.json +31 -0
- package/dist/catalog/image-models/mi/ming-image-0.1-design-bf16/versions/1.0.1/manifest.json +50 -0
- package/dist/catalog/image-models/mi/ming-image-0.1-design-bf16/versions/1.0.2/manifest.json +50 -0
- package/dist/catalog/image-models/mo/moss-image-sft-q4/manifest.json +40 -0
- package/dist/catalog/image-models/mo/moss-image-sft-q4/versions/1.0.0/manifest.json +37 -0
- package/dist/catalog/image-models/mo/moss-image-sft-q4/versions/1.0.1/manifest.json +37 -0
- package/dist/catalog/image-models/raw-index.json +1 -0
- package/dist/catalog/image-models/sd/sd-1.5/manifest.json +40 -0
- package/dist/catalog/image-models/sd/sd-1.5/versions/1.0.0/manifest.json +10 -0
- package/dist/catalog/image-models/sd/sd-1.5/versions/1.0.1/manifest.json +16 -0
- package/dist/catalog/image-models/sd/sd-turbo/manifest.json +40 -0
- package/dist/catalog/image-models/sd/sd-turbo/versions/1.0.0/manifest.json +10 -0
- package/dist/catalog/image-models/sd/sd-turbo/versions/1.0.1/manifest.json +16 -0
- package/dist/catalog/image-models/sd/sdxl-base-1.0/manifest.json +39 -0
- package/dist/catalog/image-models/sd/sdxl-base-1.0/versions/1.0.0/manifest.json +10 -0
- package/dist/catalog/image-models/sd/sdxl-base-1.0/versions/1.0.1/manifest.json +16 -0
- package/dist/catalog/image-models/sd/sdxl-lightning-4step/manifest.json +40 -0
- package/dist/catalog/image-models/sd/sdxl-lightning-4step/versions/1.0.0/manifest.json +10 -0
- package/dist/catalog/image-models/sd/sdxl-lightning-4step/versions/1.0.1/manifest.json +16 -0
- package/dist/catalog/image-models/sd/sdxl-turbo/manifest.json +41 -0
- package/dist/catalog/image-models/sd/sdxl-turbo/versions/1.0.0/manifest.json +10 -0
- package/dist/catalog/image-models/sd/sdxl-turbo/versions/1.0.1/manifest.json +16 -0
- package/dist/catalog/knowledge-catalogs/be/bendyline-how-to-books/keywords.json +56 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-alaska-part-0001/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-nevada-part-0001/keywords.json +13 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-us-300-399-part-0001/keywords.json +14 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-us-347-349/keywords.json +17 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-utah-part-0001/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-utah-part-0002/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0001/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0002/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0003/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0004/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-washington-part-0005/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/ca/caselaw-wyoming-part-0001/keywords.json +12 -0
- package/dist/catalog/knowledge-catalogs/index.json +1 -1
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-aspnet-core-en/keywords.json +21 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-ai-platform-en/keywords.json +27 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-apps-compute-en/keywords.json +23 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-data-aiot-en/keywords.json +26 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-management-hybrid-en/keywords.json +28 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-azure-network-security-en/keywords.json +29 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-dotnet-en/keywords.json +21 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-entity-framework-en/keywords.json +14 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-microsoft-365-en/keywords.json +20 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-powershell-en/keywords.json +24 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-sql-server-en/keywords.json +27 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-windows-apps-en/keywords.json +18 -0
- package/dist/catalog/knowledge-catalogs/mi/microsoftdocs-windows-server-en/keywords.json +28 -0
- package/dist/catalog/knowledge-catalogs/raw-index.json +1 -1
- package/dist/catalog/knowledge-catalogs/re/regional-american-south/keywords.json +1700 -0
- package/dist/catalog/knowledge-catalogs/re/regional-american-south/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-andes-amazon/keywords.json +750 -0
- package/dist/catalog/knowledge-catalogs/re/regional-andes-amazon/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-australia-nz/keywords.json +1281 -0
- package/dist/catalog/knowledge-catalogs/re/regional-australia-nz/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-brazil/keywords.json +1125 -0
- package/dist/catalog/knowledge-catalogs/re/regional-brazil/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-britain-ireland/keywords.json +3287 -0
- package/dist/catalog/knowledge-catalogs/re/regional-britain-ireland/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-california-southwest/keywords.json +1835 -0
- package/dist/catalog/knowledge-catalogs/re/regional-california-southwest/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-canada-alaska/keywords.json +1184 -0
- package/dist/catalog/knowledge-catalogs/re/regional-canada-alaska/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-central-eastern-europe/keywords.json +1503 -0
- package/dist/catalog/knowledge-catalogs/re/regional-central-eastern-europe/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-asia/keywords.json +2836 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-asia/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-southern-africa/keywords.json +813 -0
- package/dist/catalog/knowledge-catalogs/re/regional-east-southern-africa/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mediterranean/keywords.json +2082 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mediterranean/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mexico-central-america/keywords.json +1481 -0
- package/dist/catalog/knowledge-catalogs/re/regional-mexico-central-america/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-middle-east/keywords.json +1272 -0
- package/dist/catalog/knowledge-catalogs/re/regional-middle-east/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-midwest/keywords.json +758 -0
- package/dist/catalog/knowledge-catalogs/re/regional-midwest/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-north-africa/keywords.json +896 -0
- package/dist/catalog/knowledge-catalogs/re/regional-north-africa/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northeast/keywords.json +1281 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northeast/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-eurasia/keywords.json +346 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-eurasia/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-europe/keywords.json +2688 -0
- package/dist/catalog/knowledge-catalogs/re/regional-northern-europe/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-islands/keywords.json +973 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-islands/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-northwest/keywords.json +937 -0
- package/dist/catalog/knowledge-catalogs/re/regional-pacific-northwest/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-rockies-plains/keywords.json +608 -0
- package/dist/catalog/knowledge-catalogs/re/regional-rockies-plains/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-south-asia/keywords.json +633 -0
- package/dist/catalog/knowledge-catalogs/re/regional-south-asia/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southeast-asia/keywords.json +2697 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southeast-asia/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southern-cone/keywords.json +606 -0
- package/dist/catalog/knowledge-catalogs/re/regional-southern-cone/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-west-central-africa/keywords.json +564 -0
- package/dist/catalog/knowledge-catalogs/re/regional-west-central-africa/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe/keywords.json +3247 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe-east/manifest.json +47 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe-east/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe-west/manifest.json +47 -0
- package/dist/catalog/knowledge-catalogs/re/regional-western-europe-west/versions/2026.10.5/manifest.json +133 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/keywords.json +5437 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-arts/versions/2026.10.1/manifest.json +181 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-astronomy/versions/2026.10.1/manifest.json +181 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-biology/versions/2026.10.1/manifest.json +217 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/keywords.json +5583 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-business/versions/2026.10.1/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-film-tv/keywords.json +6386 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-film-tv/manifest.json +2 -2
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-film-tv/versions/2026.10.1/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-food-drink/versions/2026.10.1/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/keywords.json +5672 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-games/versions/2026.10.1/manifest.json +137 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-geography/manifest.json +68 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-geography/versions/2026.10.1/manifest.json +217 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-history/manifest.json +68 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-history/versions/2026.10.1/manifest.json +217 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-language/versions/2026.10.1/manifest.json +141 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-law/versions/2026.10.1/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/keywords.json +5719 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-literature/versions/2026.10.1/manifest.json +193 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-mathematics/versions/2026.10.1/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/keywords.json +16009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-medicine/versions/2026.10.1/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/keywords.json +5843 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-military/versions/2026.10.1/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-music/keywords.json +6264 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-music/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-music/versions/2026.10.1/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-arts/manifest.json +66 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-arts/versions/2026.10.1/manifest.json +209 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-business/manifest.json +61 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-business/versions/2026.10.1/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-entertainment/manifest.json +64 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-entertainment/versions/2026.10.1/manifest.json +201 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-military/manifest.json +60 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-military/versions/2026.10.1/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-other/manifest.json +55 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-other/versions/2026.10.1/manifest.json +165 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-politics/manifest.json +63 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-politics/versions/2026.10.1/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-religion/manifest.json +64 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-religion/versions/2026.10.1/manifest.json +201 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-science/manifest.json +65 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-science/versions/2026.10.1/manifest.json +205 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-sports/manifest.json +73 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-people-sports/versions/2026.10.1/manifest.json +237 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/keywords.json +5447 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-politics/versions/2026.10.1/manifest.json +197 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-religion-philosophy/versions/2026.10.1/manifest.json +189 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/keywords.json +4009 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-science/versions/2026.10.1/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-sports/keywords.json +5209 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-sports/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-sports/versions/2026.10.1/manifest.json +193 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/keywords.json +6537 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-technology/versions/2026.10.1/manifest.json +185 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/keywords.json +5989 -0
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/manifest.json +1 -1
- package/dist/catalog/knowledge-catalogs/wi/wikipedia-transportation/versions/2026.10.1/manifest.json +189 -0
- package/dist/catalog/provenance.json +2 -1
- package/dist/engines/native-file-manifest.json +198 -118
- package/dist/engines/native-manifest.d.ts +4 -4
- package/dist/engines/native-manifest.js +36 -34
- package/dist/engines/resolver.js +12 -1
- package/dist/fs/atomic.d.ts +4 -1
- package/dist/fs/atomic.js +7 -1
- package/dist/http/openai-compat/chat-target.d.ts +1 -1
- package/dist/http/openai-compat/chat-target.js +1 -1
- package/dist/http/openai-compat/engine-failure.js +7 -2
- package/dist/http/routes/v1-chat.js +1 -1
- package/dist/http/routes/v1-images.d.ts +44 -0
- package/dist/http/routes/v1-images.js +370 -0
- package/dist/http/routes/v1-knowledge.js +4 -0
- package/dist/http/routes/v1-responses.d.ts +1 -1
- package/dist/inference-service.d.ts +9 -1
- package/dist/inference-service.js +44 -11
- package/dist/knowledge/manager.d.ts +7 -0
- package/dist/knowledge/manager.js +32 -1
- package/dist/kokoro-lexicon/manifest.json +6 -3
- package/dist/models/image-fit.d.ts +83 -0
- package/dist/models/image-fit.js +163 -0
- package/dist/models/weight-facts.d.ts +36 -0
- package/dist/models/weight-facts.js +171 -0
- package/dist/perf/responsiveness.js +4 -3
- package/dist/providers/audio/kokoro-frontend.js +1 -1
- package/dist/providers/ds4/build-provider.js +34 -21
- package/dist/providers/ds4/dspark.d.ts +23 -5
- package/dist/providers/ds4/dspark.js +36 -8
- package/dist/providers/image/img2img-support.d.ts +40 -0
- package/dist/providers/image/img2img-support.js +74 -0
- package/dist/providers/image/local-engine.d.ts +31 -0
- package/dist/providers/image/local-engine.js +47 -0
- package/dist/providers/image/local-factory.d.ts +95 -0
- package/dist/providers/image/local-factory.js +270 -0
- package/dist/providers/image/mock.d.ts +23 -0
- package/dist/providers/image/mock.js +151 -0
- package/dist/providers/image/pull-registry.d.ts +106 -0
- package/dist/providers/image/pull-registry.js +227 -0
- package/dist/providers/image/sd-cpp.d.ts +200 -0
- package/dist/providers/image/sd-cpp.js +845 -0
- package/dist/providers/image/types.d.ts +235 -0
- package/dist/providers/image/types.js +20 -0
- package/dist/providers/llama-cpp/backend-health.d.ts +7 -0
- package/dist/providers/llama-cpp/backend-health.js +41 -1
- package/dist/providers/llama-cpp/build-provider.js +107 -56
- package/dist/providers/llama-cpp/cache-adapter.d.ts +7 -1
- package/dist/providers/llama-cpp/cache-adapter.js +9 -0
- package/dist/providers/llama-cpp/devices.d.ts +13 -2
- package/dist/providers/llama-cpp/devices.js +43 -6
- package/dist/providers/llama-cpp/models.js +4 -1
- package/dist/providers/llama-cpp/offload-planner.d.ts +23 -0
- package/dist/providers/llama-cpp/offload-planner.js +27 -0
- package/dist/providers/llama-cpp/provider.d.ts +14 -3
- package/dist/providers/llama-cpp/provider.js +35 -2
- package/dist/providers/mlx/provider.js +15 -5
- package/dist/providers/mlx/reasoning-stream.d.ts +15 -0
- package/dist/providers/mlx/reasoning-stream.js +35 -0
- package/dist/providers/native/capacity-broker.js +9 -3
- package/dist/providers/native/local-engine-runtime.js +15 -12
- package/dist/providers/native/supervisor.d.ts +8 -0
- package/dist/providers/native/supervisor.js +55 -5
- package/dist/providers/project-macro-loop-bail.js +5 -3
- package/dist/providers/provider-lifecycle.d.ts +21 -0
- package/dist/providers/provider-lifecycle.js +83 -0
- package/dist/providers/queue.d.ts +9 -2
- package/dist/providers/queue.js +17 -2
- package/dist/providers/retirement-gate.d.ts +20 -0
- package/dist/providers/retirement-gate.js +55 -0
- package/dist/providers/session-hooks.d.ts +4 -1
- package/dist/system/memory.js +6 -0
- package/dist/utils/image-meta.d.ts +12 -0
- package/dist/utils/image-meta.js +77 -0
- package/package.json +6 -6
|
@@ -8,9 +8,10 @@ import { redactPathSecrets } from './redact-path.js';
|
|
|
8
8
|
/**
|
|
9
9
|
* Main-thread responsiveness monitor.
|
|
10
10
|
*
|
|
11
|
-
* The daemon runs on one event loop.
|
|
12
|
-
* packaged fallback) that loop is
|
|
13
|
-
*
|
|
11
|
+
* The daemon runs on one event loop. With an in-process embedded service (the
|
|
12
|
+
* packaged fallback, E2E, `GEZEL_SERVICE_HOST=in-process`) that loop is
|
|
13
|
+
* Electron's main thread, so a synchronous block here freezes the window
|
|
14
|
+
* itself, and Windows labels it "Not Responding"
|
|
14
15
|
* after 5 s. Before this existed a block under the suspend monitor's 10 s floor
|
|
15
16
|
* left no trace, and a longer one was logged as "host resumed after Ns
|
|
16
17
|
* suspended": sleep that never happened (two of them during one catalog
|
|
@@ -75,7 +75,7 @@ export class KokoroFrontend {
|
|
|
75
75
|
// put it back, because a packaging slip is the likely cause.
|
|
76
76
|
throw new Error(`Kokoro pronunciation dictionary is missing at ${file}; rebuild the service (node scripts/build-kokoro-lexicon.mjs stages it).`, { cause });
|
|
77
77
|
}
|
|
78
|
-
return parseKokoroLexicon(gunzipSync(packed).toString('utf8'));
|
|
78
|
+
return parseKokoroLexicon(gunzipSync(packed).toString('utf8'), { language });
|
|
79
79
|
})();
|
|
80
80
|
// A failed read must not be cached as a permanent failure.
|
|
81
81
|
void pending.catch(() => this.loaded.delete(language));
|
|
@@ -7,7 +7,7 @@ import { pickFreePort } from '../native/port.js';
|
|
|
7
7
|
import { NativeEngineSupervisor } from '../native/supervisor.js';
|
|
8
8
|
import { patientFetch } from '../patient-fetch.js';
|
|
9
9
|
import { nativeVisionEnabledFor } from '../vision-capability.js';
|
|
10
|
-
import { ds4DsparkArgs, resolveDs4Dspark } from './dspark.js';
|
|
10
|
+
import { DS4_V41_DRAFTER_RUNTIME_BYTES, ds4DsparkArgs, ds4DsparkStreamsWithSsd, resolveDs4Dspark, } from './dspark.js';
|
|
11
11
|
import { ds4MtpArgs, resolveDs4Mtp } from './mtp.js';
|
|
12
12
|
import { Ds4Provider } from './provider.js';
|
|
13
13
|
const log = createLogger('chat');
|
|
@@ -307,36 +307,50 @@ export async function buildDs4Provider(opts) {
|
|
|
307
307
|
if (config.ds4SsdStreaming === true && ds4Source?.ssdStreamingSupported === false) {
|
|
308
308
|
log.warn(`[ds4] ignored SSD-streaming override for ${effectiveModelId ?? modelPath}; this model keeps its lookup tables on disk but does not implement routed-expert streaming`);
|
|
309
309
|
}
|
|
310
|
+
const cachePlanWith = (extraResidentBytes) => planDs4ExpertCache({
|
|
311
|
+
configuredGb: config.ds4CacheExpertsGb,
|
|
312
|
+
catalogCacheBytes: ds4Source?.cacheExpertsBytes,
|
|
313
|
+
catalogResidentBytes: (ds4Source?.residentBytes ?? 0) + visionResidentBytes + extraResidentBytes,
|
|
314
|
+
totalRamBytes: totalRamGb * 1024 ** 3,
|
|
315
|
+
});
|
|
310
316
|
// DSpark speculative decoding. Resolved here, beside the residency decision
|
|
311
|
-
// it depends on: ds4 aborts at startup if an external `--mtp-model` is
|
|
312
|
-
// `--ssd-streaming
|
|
317
|
+
// it depends on: ds4 aborts at startup if an external `--mtp-model` is
|
|
318
|
+
// combined with `--ssd-streaming` for any family but DeepSeek V4.1.
|
|
319
|
+
const targetArchitecture = installedModel?.architecture;
|
|
320
|
+
const streamedDrafting = ssdStreaming && ds4DsparkStreamsWithSsd(targetArchitecture);
|
|
313
321
|
const dsparkSupportPath = config.ds4DsparkModelPath ?? installedModel?.draftModelPath;
|
|
314
322
|
// Residency is decided on the weights alone, then the companion is priced
|
|
315
323
|
// against what is left. That precedence is deliberate and not symmetric:
|
|
316
324
|
// residency is worth ~9.5x and drafting ~1.05x, so a companion that would
|
|
317
325
|
// push the model out of memory loses its own flag rather than costing the
|
|
318
|
-
// launch its residency.
|
|
326
|
+
// launch its residency. A streamed V4.1 launch keeps its drafter resident
|
|
327
|
+
// too, so it must still leave room for a minimum expert cache.
|
|
319
328
|
let companionFitsMemory = true;
|
|
320
329
|
let dsparkCompanionBytes = 0;
|
|
321
|
-
if (dsparkSupportPath && !ssdStreaming) {
|
|
330
|
+
if (dsparkSupportPath && (!ssdStreaming || streamedDrafting)) {
|
|
322
331
|
const { canUseDs4FullResidency } = await import('./residency.js');
|
|
323
332
|
const { stat: statCompanion } = await import('node:fs/promises');
|
|
324
333
|
const companionBytes = await statCompanion(dsparkSupportPath)
|
|
325
334
|
.then((st) => st.size)
|
|
326
335
|
.catch(() => undefined);
|
|
327
|
-
dsparkCompanionBytes =
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
:
|
|
334
|
-
|
|
336
|
+
dsparkCompanionBytes =
|
|
337
|
+
(companionBytes ?? 0) +
|
|
338
|
+
(ds4DsparkStreamsWithSsd(targetArchitecture) ? DS4_V41_DRAFTER_RUNTIME_BYTES : 0);
|
|
339
|
+
companionFitsMemory = ssdStreaming
|
|
340
|
+
? cachePlanWith(dsparkCompanionBytes).safe
|
|
341
|
+
: canUseDs4FullResidency({
|
|
342
|
+
modelSizeBytes: residentWeightBytes,
|
|
343
|
+
totalRamBytes,
|
|
344
|
+
...(companionBytes !== undefined || visionResidentBytes > 0
|
|
345
|
+
? { companionBytes: dsparkCompanionBytes + visionResidentBytes }
|
|
346
|
+
: {}),
|
|
347
|
+
});
|
|
335
348
|
}
|
|
336
349
|
const dspark = resolveDs4Dspark({
|
|
337
350
|
mode: config.ds4Dspark,
|
|
338
351
|
backend: backendFlag.slice(2),
|
|
339
352
|
ssdStreaming,
|
|
353
|
+
...(targetArchitecture ? { targetArchitecture } : {}),
|
|
340
354
|
companionFitsMemory,
|
|
341
355
|
...(dsparkSupportPath ? { supportModelPath: dsparkSupportPath } : {}),
|
|
342
356
|
});
|
|
@@ -365,14 +379,7 @@ export async function buildDs4Provider(opts) {
|
|
|
365
379
|
});
|
|
366
380
|
if (mtp.unmetRequest)
|
|
367
381
|
log.warn(`[ds4] ${mtp.unmetRequest}`);
|
|
368
|
-
const cachePlan =
|
|
369
|
-
configuredGb: config.ds4CacheExpertsGb,
|
|
370
|
-
catalogCacheBytes: ds4Source?.cacheExpertsBytes,
|
|
371
|
-
catalogResidentBytes: ds4Source?.residentBytes !== undefined || visionResidentBytes > 0
|
|
372
|
-
? (ds4Source?.residentBytes ?? 0) + visionResidentBytes
|
|
373
|
-
: undefined,
|
|
374
|
-
totalRamBytes: totalRamGb * 1024 ** 3,
|
|
375
|
-
});
|
|
382
|
+
const cachePlan = cachePlanWith(dspark.enabled && ssdStreaming ? dsparkCompanionBytes : 0);
|
|
376
383
|
if (ssdStreaming && !cachePlan.safe) {
|
|
377
384
|
const err = new Error(`DwarfStar (ds4) engine: ${effectiveModelId ?? 'the selected model'} cannot keep a safe minimum expert cache while preserving memory for the operating system. Choose a lighter model in Settings → DwarfStar (ds4).`);
|
|
378
385
|
err.isActionable = true;
|
|
@@ -526,12 +533,18 @@ export async function buildDs4Provider(opts) {
|
|
|
526
533
|
return { command: binary, args, baseUrl: `http://127.0.0.1:${port}`, cwd: ds4BundleDir };
|
|
527
534
|
},
|
|
528
535
|
});
|
|
536
|
+
// Sessions budget prompts, `max_tokens`, and compaction against this window,
|
|
537
|
+
// so it must be the `--ctx` ds4 actually launches with. Left unset, it fell
|
|
538
|
+
// back to the 64K llama default: GLM 5.3 (launched at 32K) overflowed with
|
|
539
|
+
// `context_length_exceeded` long before compaction triggered, and DeepSeek
|
|
540
|
+
// (launched at 128K) compacted at a third of its window.
|
|
529
541
|
const ds4Inner = new LlamaCppProvider({
|
|
530
542
|
supervisor,
|
|
531
543
|
logFile: ds4LogFile,
|
|
532
544
|
disableThinkingRequestShape: 'deepseek',
|
|
533
545
|
classifyLine: classifyDs4Line,
|
|
534
546
|
visionEnabled: vision.enabled,
|
|
547
|
+
numCtx,
|
|
535
548
|
...baseProviderOpts,
|
|
536
549
|
});
|
|
537
550
|
ds4ProviderHolder.current = ds4Inner;
|
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
* one measurement shape the policy here:
|
|
7
7
|
*
|
|
8
8
|
* - **The engine refuses an external MTP model alongside `--ssd-streaming`**,
|
|
9
|
-
* aborting at startup.
|
|
10
|
-
*
|
|
11
|
-
* on a 128 GiB machine, so
|
|
9
|
+
* aborting at startup, for every family except DeepSeek V4.1
|
|
10
|
+
* (`general.architecture` `deepseek41`, upstream ee7e840). Streaming is the
|
|
11
|
+
* only way the 153 GiB Q4 GGUF runs at all on a 128 GiB machine, so
|
|
12
|
+
* drafting is unreachable there. V4.1 keeps its 8.04 GiB drafter resident
|
|
13
|
+
* while the target's experts stream, but upstream warns it can still be
|
|
14
|
+
* slower than plain decoding, so `auto` never drafts a streamed launch.
|
|
12
15
|
* - **A support model is required.** Without one there is nothing to draft
|
|
13
16
|
* with, and ds4 exits on `--dspark` alone ("--dspark requires --mtp-model FILE").
|
|
14
17
|
* - **It does not pay on Metal.** Measured 2026-08-26, M5 Max, DeepSeek V4
|
|
@@ -25,6 +28,18 @@
|
|
|
25
28
|
*/
|
|
26
29
|
/** Which acceleration backend ds4 was launched with. */
|
|
27
30
|
export type Ds4Backend = 'metal' | 'cuda';
|
|
31
|
+
/**
|
|
32
|
+
* Whether ds4 accepts `--mtp-model` alongside `--ssd-streaming` for a target
|
|
33
|
+
* with this GGUF `general.architecture`. Mirrors the engine's own check
|
|
34
|
+
* (`DS4_MODEL_FAMILY != DS4_MODEL_FAMILY_DEEPSEEK41` in `ds4_engine_open`);
|
|
35
|
+
* an unknown architecture is treated as unsupported because the engine aborts.
|
|
36
|
+
*/
|
|
37
|
+
export declare function ds4DsparkStreamsWithSsd(architecture: string | undefined): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Buffers ds4 allocates beside a V4.1 drafter's weights; its startup memory
|
|
40
|
+
* plan charges `mtp_model.size + 64 MiB` for them.
|
|
41
|
+
*/
|
|
42
|
+
export declare const DS4_V41_DRAFTER_RUNTIME_BYTES: number;
|
|
28
43
|
export type Ds4DsparkMode = 'off' | 'on' | 'auto';
|
|
29
44
|
export interface Ds4DsparkOptions {
|
|
30
45
|
/** `config.ds4Dspark`. Absent → `auto`. */
|
|
@@ -33,12 +48,15 @@ export interface Ds4DsparkOptions {
|
|
|
33
48
|
backend: Ds4Backend;
|
|
34
49
|
/** Whether this launch streams experts from SSD. */
|
|
35
50
|
ssdStreaming: boolean;
|
|
51
|
+
/** The target GGUF's `general.architecture`, when known. */
|
|
52
|
+
targetArchitecture?: string;
|
|
36
53
|
/** Absolute path to a DSpark support GGUF, if one resolved. */
|
|
37
54
|
supportModelPath?: string;
|
|
38
55
|
/**
|
|
39
|
-
* Whether the companion still fits once the resident weights
|
|
56
|
+
* Whether the companion still fits once the resident weights (or, when
|
|
57
|
+
* streaming, the resident set plus a minimum expert cache) are accounted
|
|
40
58
|
* for. Defaults to true so callers that cannot weigh it keep the old
|
|
41
|
-
* behavior. When false the launch keeps its
|
|
59
|
+
* behavior. When false the launch keeps its memory plan and drops drafting —
|
|
42
60
|
* residency is worth ~9.5x and drafting ~1.05x, so the flag is what yields.
|
|
43
61
|
*/
|
|
44
62
|
companionFitsMemory?: boolean;
|
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
* one measurement shape the policy here:
|
|
7
7
|
*
|
|
8
8
|
* - **The engine refuses an external MTP model alongside `--ssd-streaming`**,
|
|
9
|
-
* aborting at startup.
|
|
10
|
-
*
|
|
11
|
-
* on a 128 GiB machine, so
|
|
9
|
+
* aborting at startup, for every family except DeepSeek V4.1
|
|
10
|
+
* (`general.architecture` `deepseek41`, upstream ee7e840). Streaming is the
|
|
11
|
+
* only way the 153 GiB Q4 GGUF runs at all on a 128 GiB machine, so
|
|
12
|
+
* drafting is unreachable there. V4.1 keeps its 8.04 GiB drafter resident
|
|
13
|
+
* while the target's experts stream, but upstream warns it can still be
|
|
14
|
+
* slower than plain decoding, so `auto` never drafts a streamed launch.
|
|
12
15
|
* - **A support model is required.** Without one there is nothing to draft
|
|
13
16
|
* with, and ds4 exits on `--dspark` alone ("--dspark requires --mtp-model FILE").
|
|
14
17
|
* - **It does not pay on Metal.** Measured 2026-08-26, M5 Max, DeepSeek V4
|
|
@@ -23,6 +26,20 @@
|
|
|
23
26
|
* residency-or-unified predicate would enable drafting on the one platform
|
|
24
27
|
* where it was measured to lose.
|
|
25
28
|
*/
|
|
29
|
+
/**
|
|
30
|
+
* Whether ds4 accepts `--mtp-model` alongside `--ssd-streaming` for a target
|
|
31
|
+
* with this GGUF `general.architecture`. Mirrors the engine's own check
|
|
32
|
+
* (`DS4_MODEL_FAMILY != DS4_MODEL_FAMILY_DEEPSEEK41` in `ds4_engine_open`);
|
|
33
|
+
* an unknown architecture is treated as unsupported because the engine aborts.
|
|
34
|
+
*/
|
|
35
|
+
export function ds4DsparkStreamsWithSsd(architecture) {
|
|
36
|
+
return architecture === 'deepseek41';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Buffers ds4 allocates beside a V4.1 drafter's weights; its startup memory
|
|
40
|
+
* plan charges `mtp_model.size + 64 MiB` for them.
|
|
41
|
+
*/
|
|
42
|
+
export const DS4_V41_DRAFTER_RUNTIME_BYTES = 64 * 1024 ** 2;
|
|
26
43
|
/**
|
|
27
44
|
* Resolve whether this launch drafts, and with what.
|
|
28
45
|
*
|
|
@@ -47,24 +64,29 @@ export function resolveDs4Dspark(opts) {
|
|
|
47
64
|
: {}),
|
|
48
65
|
};
|
|
49
66
|
}
|
|
50
|
-
if (opts.ssdStreaming) {
|
|
67
|
+
if (opts.ssdStreaming && !ds4DsparkStreamsWithSsd(opts.targetArchitecture)) {
|
|
51
68
|
return {
|
|
52
69
|
enabled: false,
|
|
53
|
-
reason: 'SSD streaming is on; ds4 rejects --mtp-model with --ssd-streaming',
|
|
70
|
+
reason: 'SSD streaming is on; ds4 rejects --mtp-model with --ssd-streaming except for DeepSeek V4.1',
|
|
54
71
|
...(mode === 'on'
|
|
55
72
|
? {
|
|
56
|
-
unmetRequest: 'ds4Dspark=on cannot be honored while SSD streaming is active — ds4 refuses an external --mtp-model with --ssd-streaming. Full residency requires a model that fits this machine with headroom to spare (ds4SsdStreaming=false).',
|
|
73
|
+
unmetRequest: 'ds4Dspark=on cannot be honored while SSD streaming is active — ds4 refuses an external --mtp-model with --ssd-streaming for every model but DeepSeek V4.1. Full residency requires a model that fits this machine with headroom to spare (ds4SsdStreaming=false).',
|
|
57
74
|
}
|
|
58
75
|
: {}),
|
|
59
76
|
};
|
|
60
77
|
}
|
|
61
78
|
if (opts.companionFitsMemory === false) {
|
|
79
|
+
const held = opts.ssdStreaming
|
|
80
|
+
? 'the resident weights and a minimum expert cache'
|
|
81
|
+
: 'the resident weights';
|
|
62
82
|
return {
|
|
63
83
|
enabled: false,
|
|
64
|
-
reason:
|
|
84
|
+
reason: `support model does not fit alongside ${held}`,
|
|
65
85
|
...(mode === 'on'
|
|
66
86
|
? {
|
|
67
|
-
unmetRequest:
|
|
87
|
+
unmetRequest: opts.ssdStreaming
|
|
88
|
+
? `ds4Dspark=on cannot be honored: the DSpark support model does not fit in memory alongside ${held}. Drafting was dropped rather than starving the expert cache.`
|
|
89
|
+
: 'ds4Dspark=on cannot be honored: the DSpark support model does not fit in memory alongside the fully resident weights. Drafting was dropped rather than giving up full residency, which is worth far more than drafting.',
|
|
68
90
|
}
|
|
69
91
|
: {}),
|
|
70
92
|
};
|
|
@@ -77,6 +99,12 @@ export function resolveDs4Dspark(opts) {
|
|
|
77
99
|
};
|
|
78
100
|
}
|
|
79
101
|
// auto
|
|
102
|
+
if (opts.ssdStreaming) {
|
|
103
|
+
return {
|
|
104
|
+
enabled: false,
|
|
105
|
+
reason: 'auto: drafting a streamed launch is unmeasured and upstream reports it can be slower; set ds4Dspark=on to draft',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
80
108
|
if (opts.backend !== 'cuda') {
|
|
81
109
|
return {
|
|
82
110
|
enabled: false,
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-model img2img capability resolution for the local sd-cpp engine.
|
|
3
|
+
*
|
|
4
|
+
* stable-diffusion.cpp's `/sdapi/v1/img2img` endpoint accepts
|
|
5
|
+
* `init_images` for any loaded model, but whether the *architecture*
|
|
6
|
+
* actually honors the init latents varies: the classic SD 1.x / SDXL
|
|
7
|
+
* denoising path is mature, while newer diffusion-model architectures
|
|
8
|
+
* (FLUX.2's LLM-encoder family, Krea 2's Qwen-Image lineage) are unverified on
|
|
9
|
+
* the pinned sd-server — the same server build that already ignores
|
|
10
|
+
* per-request step overrides for Krea (see MODEL_SAMPLE_STEP_DEFAULTS).
|
|
11
|
+
*
|
|
12
|
+
* Resolution ladder, most explicit wins:
|
|
13
|
+
* 1. `supportsImg2Img` declared on the catalog manifest (persisted
|
|
14
|
+
* into the installed `manifest.json` at pull time),
|
|
15
|
+
* 2. the assessment map below (repo-local truth for shipped models,
|
|
16
|
+
* same pattern as MODEL_CFG_DEFAULTS),
|
|
17
|
+
* 3. a `weightsKind` default: `checkpoint` (and unknown/legacy
|
|
18
|
+
* installs, which are all SD-era checkpoints) → supported;
|
|
19
|
+
* `diffusion-model` → not supported until assessed.
|
|
20
|
+
*
|
|
21
|
+
* When a model resolves unsupported, callers drop the input images and
|
|
22
|
+
* report `img2imgSkippedReason` instead of silently producing an
|
|
23
|
+
* "edit" that never saw the source image. Flip a map entry (or set the
|
|
24
|
+
* catalog field) after verifying a family on real hardware.
|
|
25
|
+
*/
|
|
26
|
+
export declare const MODEL_IMG2IMG_SUPPORT: Map<string, boolean>;
|
|
27
|
+
export interface Img2ImgSupportInput {
|
|
28
|
+
/** Resolved model id; undefined when nothing is installed. */
|
|
29
|
+
modelId?: string | undefined;
|
|
30
|
+
/** Explicit capability from catalog/installed metadata, when declared. */
|
|
31
|
+
explicit?: boolean | undefined;
|
|
32
|
+
/** Loading shape from installed metadata, when recorded. */
|
|
33
|
+
weightsKind?: 'checkpoint' | 'diffusion-model' | undefined;
|
|
34
|
+
}
|
|
35
|
+
export interface Img2ImgSupportVerdict {
|
|
36
|
+
supported: boolean;
|
|
37
|
+
/** Human-readable reason, set only when unsupported. */
|
|
38
|
+
reason?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function resolveImg2ImgSupport(input: Img2ImgSupportInput): Img2ImgSupportVerdict;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-model img2img capability resolution for the local sd-cpp engine.
|
|
3
|
+
*
|
|
4
|
+
* stable-diffusion.cpp's `/sdapi/v1/img2img` endpoint accepts
|
|
5
|
+
* `init_images` for any loaded model, but whether the *architecture*
|
|
6
|
+
* actually honors the init latents varies: the classic SD 1.x / SDXL
|
|
7
|
+
* denoising path is mature, while newer diffusion-model architectures
|
|
8
|
+
* (FLUX.2's LLM-encoder family, Krea 2's Qwen-Image lineage) are unverified on
|
|
9
|
+
* the pinned sd-server — the same server build that already ignores
|
|
10
|
+
* per-request step overrides for Krea (see MODEL_SAMPLE_STEP_DEFAULTS).
|
|
11
|
+
*
|
|
12
|
+
* Resolution ladder, most explicit wins:
|
|
13
|
+
* 1. `supportsImg2Img` declared on the catalog manifest (persisted
|
|
14
|
+
* into the installed `manifest.json` at pull time),
|
|
15
|
+
* 2. the assessment map below (repo-local truth for shipped models,
|
|
16
|
+
* same pattern as MODEL_CFG_DEFAULTS),
|
|
17
|
+
* 3. a `weightsKind` default: `checkpoint` (and unknown/legacy
|
|
18
|
+
* installs, which are all SD-era checkpoints) → supported;
|
|
19
|
+
* `diffusion-model` → not supported until assessed.
|
|
20
|
+
*
|
|
21
|
+
* When a model resolves unsupported, callers drop the input images and
|
|
22
|
+
* report `img2imgSkippedReason` instead of silently producing an
|
|
23
|
+
* "edit" that never saw the source image. Flip a map entry (or set the
|
|
24
|
+
* catalog field) after verifying a family on real hardware.
|
|
25
|
+
*/
|
|
26
|
+
export const MODEL_IMG2IMG_SUPPORT = new Map([
|
|
27
|
+
// Classic SD checkpoints — the original, well-exercised img2img path.
|
|
28
|
+
['sd-1.5', true],
|
|
29
|
+
['sd-turbo', true],
|
|
30
|
+
['sdxl-base-1.0', true],
|
|
31
|
+
['sdxl-turbo', true],
|
|
32
|
+
['sdxl-lightning-4step', true],
|
|
33
|
+
['animagine-xl-4', true],
|
|
34
|
+
// FLUX.1 — img2img documented working in upstream stable-diffusion.cpp.
|
|
35
|
+
// Still in the pinned catalog and on people's disks.
|
|
36
|
+
['flux-1-schnell-q4', true],
|
|
37
|
+
['flux-1-dev-q4', true],
|
|
38
|
+
// FLUX.2 Klein — LLM-text-encoder flow model; img2img unverified on the
|
|
39
|
+
// pinned sd-server. Treat as txt2img-only until assessed.
|
|
40
|
+
['flux-2-klein-4b-q4', false],
|
|
41
|
+
// Krea 2 Turbo — Qwen-Image architecture; the pinned server already has
|
|
42
|
+
// known per-request gaps for these models (steps override ignored).
|
|
43
|
+
['krea-2-turbo-q4', false],
|
|
44
|
+
['krea-2-turbo-q6', false],
|
|
45
|
+
['krea-2-turbo-q8', false],
|
|
46
|
+
]);
|
|
47
|
+
export function resolveImg2ImgSupport(input) {
|
|
48
|
+
if (input.explicit !== undefined) {
|
|
49
|
+
return input.explicit
|
|
50
|
+
? { supported: true }
|
|
51
|
+
: {
|
|
52
|
+
supported: false,
|
|
53
|
+
reason: `model ${input.modelId ?? 'unknown'} does not support image editing (img2img)`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (input.modelId !== undefined) {
|
|
57
|
+
const assessed = MODEL_IMG2IMG_SUPPORT.get(input.modelId);
|
|
58
|
+
if (assessed !== undefined) {
|
|
59
|
+
return assessed
|
|
60
|
+
? { supported: true }
|
|
61
|
+
: {
|
|
62
|
+
supported: false,
|
|
63
|
+
reason: `model ${input.modelId} does not support image editing (img2img) on the bundled engine`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (input.weightsKind === 'diffusion-model') {
|
|
68
|
+
return {
|
|
69
|
+
supported: false,
|
|
70
|
+
reason: `model ${input.modelId ?? 'unknown'} has not been verified for image editing (img2img) on the bundled engine`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return { supported: true };
|
|
74
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { GezelConfig } from '@bendyline/gezel';
|
|
2
|
+
import type { CatalogService } from '@bendyline/gezel-catalog';
|
|
3
|
+
import type { GpuArbiter } from '../gpu-arbiter.js';
|
|
4
|
+
import { ImageModelPullRegistry } from './pull-registry.js';
|
|
5
|
+
import type { ImageProvider } from './types.js';
|
|
6
|
+
export interface LocalImageEngineOptions {
|
|
7
|
+
home: string;
|
|
8
|
+
catalog: CatalogService;
|
|
9
|
+
arbiter: GpuArbiter;
|
|
10
|
+
readConfig: () => Promise<Pick<GezelConfig, 'defaultImageModel'>>;
|
|
11
|
+
/** Override for tests. */
|
|
12
|
+
env?: NodeJS.ProcessEnv;
|
|
13
|
+
/** Test seam: a provider in place of the local engine. */
|
|
14
|
+
provider?: ImageProvider;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Hosted inference's image engine: the local sd-server provider, built on
|
|
18
|
+
* first use, plus the pulls that install its models. Reset drains in-flight
|
|
19
|
+
* renders before an engine binary swap takes effect.
|
|
20
|
+
*/
|
|
21
|
+
export declare class LocalImageEngine {
|
|
22
|
+
private readonly opts;
|
|
23
|
+
readonly pulls: ImageModelPullRegistry;
|
|
24
|
+
private readonly lifecycle;
|
|
25
|
+
constructor(opts: LocalImageEngineOptions);
|
|
26
|
+
/** Whether this host can render at all: an engine binary, a server URL, or the mock. */
|
|
27
|
+
available(): boolean;
|
|
28
|
+
current(): Promise<ImageProvider>;
|
|
29
|
+
reset(): Promise<void>;
|
|
30
|
+
shutdown(): Promise<void>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ProviderLifecycle } from '../provider-lifecycle.js';
|
|
2
|
+
import { createLocalImageProvider } from './local-factory.js';
|
|
3
|
+
import { ImageModelPullRegistry } from './pull-registry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Hosted inference's image engine: the local sd-server provider, built on
|
|
6
|
+
* first use, plus the pulls that install its models. Reset drains in-flight
|
|
7
|
+
* renders before an engine binary swap takes effect.
|
|
8
|
+
*/
|
|
9
|
+
export class LocalImageEngine {
|
|
10
|
+
opts;
|
|
11
|
+
pulls;
|
|
12
|
+
// Only promise-returning operations can be tracked; a pull is an async
|
|
13
|
+
// iterable and is cancelled through its own registry instead.
|
|
14
|
+
lifecycle = new ProviderLifecycle(new Set(['generate', 'deleteModel']));
|
|
15
|
+
constructor(opts) {
|
|
16
|
+
this.opts = opts;
|
|
17
|
+
this.pulls = new ImageModelPullRegistry({ imageProvider: this, catalog: opts.catalog });
|
|
18
|
+
}
|
|
19
|
+
/** Whether this host can render at all: an engine binary, a server URL, or the mock. */
|
|
20
|
+
available() {
|
|
21
|
+
if (this.opts.provider)
|
|
22
|
+
return true;
|
|
23
|
+
const env = this.opts.env ?? process.env;
|
|
24
|
+
return Boolean(env.GEZEL_MOCK_PROVIDER === '1' || env.GEZEL_SD_SERVER_BIN || env.GEZEL_SD_SERVER_URL);
|
|
25
|
+
}
|
|
26
|
+
current() {
|
|
27
|
+
return this.lifecycle.current(async () => {
|
|
28
|
+
if (this.opts.provider)
|
|
29
|
+
return this.opts.provider;
|
|
30
|
+
const config = await this.opts.readConfig().catch(() => ({}));
|
|
31
|
+
const defaultModelId = config.defaultImageModel?.['sd-cpp'];
|
|
32
|
+
return createLocalImageProvider({
|
|
33
|
+
home: this.opts.home,
|
|
34
|
+
arbiter: this.opts.arbiter,
|
|
35
|
+
...(this.opts.env ? { env: this.opts.env } : {}),
|
|
36
|
+
...(defaultModelId ? { defaultModelId } : {}),
|
|
37
|
+
});
|
|
38
|
+
}, false);
|
|
39
|
+
}
|
|
40
|
+
reset() {
|
|
41
|
+
return this.lifecycle.reset();
|
|
42
|
+
}
|
|
43
|
+
async shutdown() {
|
|
44
|
+
this.pulls.clear();
|
|
45
|
+
await this.lifecycle.reset();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The local image provider: stable-diffusion.cpp's `sd-server` on this
|
|
3
|
+
* machine. Shared by the full service (behind its cloud and remote routing)
|
|
4
|
+
* and by hosted inference, which serves only this.
|
|
5
|
+
*
|
|
6
|
+
* Selection rules (first-match):
|
|
7
|
+
* 1. `GEZEL_MOCK_PROVIDER=1` → `MockImageProvider` (tests, CI).
|
|
8
|
+
* 2. `GEZEL_SD_SERVER_URL` present → `StableDiffusionCppProvider`
|
|
9
|
+
* pointed at that URL, no supervisor ("user runs their own
|
|
10
|
+
* server" mode — useful during development).
|
|
11
|
+
* 3. `GEZEL_SD_SERVER_BIN` present → `StableDiffusionCppProvider`
|
|
12
|
+
* backed by a `NativeEngineSupervisor` that spawns the binary
|
|
13
|
+
* on-demand at an ephemeral port.
|
|
14
|
+
* 4. Fallback: `StableDiffusionCppProvider` with the default
|
|
15
|
+
* base URL (127.0.0.1:9081) and no supervisor. `health()` reports
|
|
16
|
+
* `not-configured` so the UI can say the engine is not installed.
|
|
17
|
+
*/
|
|
18
|
+
import type { GpuArbiter } from '../gpu-arbiter.js';
|
|
19
|
+
import type { NativeCapacityOptions } from '../native/device-capacity.js';
|
|
20
|
+
import type { ImageProvider, InstalledImageModelInfo } from './types.js';
|
|
21
|
+
export interface LocalImageProviderOptions {
|
|
22
|
+
home: string;
|
|
23
|
+
/** Override for tests. */
|
|
24
|
+
env?: NodeJS.ProcessEnv;
|
|
25
|
+
/**
|
|
26
|
+
* The person's default local model (`config.defaultImageModel['sd-cpp']`).
|
|
27
|
+
* A configured id that is no longer installed falls through to the first
|
|
28
|
+
* installed model.
|
|
29
|
+
*/
|
|
30
|
+
defaultModelId?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Cross-engine GPU coordinator. Forwarded only to the supervised branch —
|
|
33
|
+
* the user-runs-their-own (`GEZEL_SD_SERVER_URL`) path doesn't manage
|
|
34
|
+
* VRAM tenancy.
|
|
35
|
+
*/
|
|
36
|
+
arbiter?: GpuArbiter;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Nothing to generate with: the person has to download a model first. Its
|
|
40
|
+
* own type so a route can answer with the fix, not a bare 500, which reads
|
|
41
|
+
* to an outside app as "something went wrong inside Gezel".
|
|
42
|
+
*/
|
|
43
|
+
export declare class NoLocalImageModelError extends Error {
|
|
44
|
+
readonly code = "no_local_image_model";
|
|
45
|
+
constructor();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* How sd-server is admitted to the device memory ledger: by bytes, like any
|
|
49
|
+
* other engine, never exclusively. The ledger already refuses co-residency
|
|
50
|
+
* where the byte or GPU budget cannot hold both, and `detectGpuPolicy` states
|
|
51
|
+
* the rule: automatic heuristics must not serialize models that fit.
|
|
52
|
+
* Exclusive admission did exactly that. On a DGX Spark with gemma4-31b
|
|
53
|
+
* resident (95 GB of a 128 GB machine), a 4-second SDXL render waited up to
|
|
54
|
+
* 89 s for the chat engine to go idle, then was evicted as soon as the next
|
|
55
|
+
* chat turn asked for memory, so every render paid a fresh load.
|
|
56
|
+
*/
|
|
57
|
+
export declare function sdServerCapacity(home: string): NativeCapacityOptions;
|
|
58
|
+
export declare function createLocalImageProvider(opts: LocalImageProviderOptions): Promise<ImageProvider>;
|
|
59
|
+
export interface ResolvedInstalledModel extends InstalledImageModelInfo {
|
|
60
|
+
weightsPath: string;
|
|
61
|
+
weightsKind: 'checkpoint' | 'diffusion-model';
|
|
62
|
+
auxiliaryFiles: Array<{
|
|
63
|
+
role: string;
|
|
64
|
+
path: string;
|
|
65
|
+
}>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Translate a resolved on-disk model into stable-diffusion.cpp's `sd-server`
|
|
69
|
+
* launch flags. `checkpoint` weights load via `--model`; `diffusion-model`
|
|
70
|
+
* weights are unet-only and ride alongside `--vae`/`--clip_l`/`--clip_g`/
|
|
71
|
+
* `--t5xxl` from the auxiliary files. Aux roles map 1:1 to flag names.
|
|
72
|
+
*
|
|
73
|
+
* Bind flags use `--listen-ip` / `--listen-port` (NOT `--host` / `--port`)
|
|
74
|
+
* — that's the upstream stable-diffusion.cpp server CLI as of master-587;
|
|
75
|
+
* earlier llama.cpp-style `--host` / `--port` will be rejected with
|
|
76
|
+
* `error: unknown argument: --host` and the supervisor restart-loops.
|
|
77
|
+
*
|
|
78
|
+
* `--vae-tiling` is the default because SDXL/Flux-class VAE decode at
|
|
79
|
+
* 800–1024px wants a single ~7 GB Vulkan buffer, which exceeds the
|
|
80
|
+
* per-allocation cap most consumer drivers enforce (~25–50% of total
|
|
81
|
+
* VRAM). The OOM lands at the very last step (sampling completes, then
|
|
82
|
+
* VAE blows up), wasting the entire generation. Tiled decode splits
|
|
83
|
+
* that buffer into chunks at ~10–20% decode-speed cost; on a 12 GB
|
|
84
|
+
* card it's the difference between succeeding and dying on `vae alloc
|
|
85
|
+
* compute buffer failed`. Quality difference is imperceptible for the
|
|
86
|
+
* tile sizes sd.cpp picks.
|
|
87
|
+
*
|
|
88
|
+
* The text encoder never takes flash attention. ggml's CPU kernel sums the
|
|
89
|
+
* attention values in FP16, which a Qwen-family encoder overflows: FLUX.2
|
|
90
|
+
* klein on a Windows-on-ARM CPU rendered unrelated shapes with a 200
|
|
91
|
+
* (native-v0.1.53). It bites wherever the encoder lands on the CPU, and the
|
|
92
|
+
* encoder runs once per image, so GPUs lose nothing. `--diffusion-fa` means
|
|
93
|
+
* `--flash-attn off,diffusion=on`, so that branch already leaves it off.
|
|
94
|
+
*/
|
|
95
|
+
export declare function buildSdServerArgs(model: ResolvedInstalledModel, port: number): string[];
|