@atomic-chat/core 0.13.2 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/backend/advisor/advisor.d.ts +8 -7
- package/dist/backend/advisor/advisor.js +17 -25
- package/dist/backend/advisor/advisor.js.map +1 -1
- package/dist/backend/catalog/index.d.ts +4 -2
- package/dist/backend/catalog/index.js +4 -2
- package/dist/backend/catalog/index.js.map +1 -1
- package/dist/backend/catalog/manifest.d.ts +5 -51
- package/dist/backend/catalog/manifest.js +5 -93
- package/dist/backend/catalog/manifest.js.map +1 -1
- package/dist/backend/catalog/upstream-releases-baseline.d.ts +2 -0
- package/dist/backend/catalog/upstream-releases-baseline.js +12 -0
- package/dist/backend/catalog/upstream-releases-baseline.js.map +1 -0
- package/dist/backend/catalog/upstream-releases-baseline.json +101 -0
- package/dist/backend/catalog/upstream-releases-catalog.d.ts +54 -0
- package/dist/backend/catalog/upstream-releases-catalog.js +148 -0
- package/dist/backend/catalog/upstream-releases-catalog.js.map +1 -0
- package/dist/backend/catalog/upstream-releases.d.ts +75 -0
- package/dist/backend/catalog/upstream-releases.js +155 -0
- package/dist/backend/catalog/upstream-releases.js.map +1 -0
- package/dist/backend/install/service.d.ts +7 -4
- package/dist/backend/install/service.js +4 -4
- package/dist/backend/install/service.js.map +1 -1
- package/dist/cli/commands/serve.js +10 -28
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +0 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/client/control-client.d.ts +7 -19
- package/dist/client/control-client.js +9 -29
- package/dist/client/control-client.js.map +1 -1
- package/dist/cloud/registry.d.ts +14 -1
- package/dist/cloud/registry.js +73 -2
- package/dist/cloud/registry.js.map +1 -1
- package/dist/config/paths.d.ts +4 -3
- package/dist/config/paths.js +15 -14
- package/dist/config/paths.js.map +1 -1
- package/dist/contracts/diffusion.d.ts +45 -18
- package/dist/contracts/diffusion.js +1 -1
- package/dist/contracts/diffusion.js.map +1 -1
- package/dist/contracts/engines.d.ts +1 -1
- package/dist/contracts/engines.js +2 -0
- package/dist/contracts/engines.js.map +1 -1
- package/dist/contracts/errors.d.ts +1 -3
- package/dist/contracts/errors.js +16 -0
- package/dist/contracts/errors.js.map +1 -1
- package/dist/contracts/events.d.ts +11 -6
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/media.d.ts +186 -0
- package/dist/contracts/media.js +55 -0
- package/dist/contracts/media.js.map +1 -0
- package/dist/contracts/session.d.ts +10 -1
- package/dist/contracts/session.js +10 -0
- package/dist/contracts/session.js.map +1 -1
- package/dist/contracts/settings.d.ts +36 -1
- package/dist/contracts/settings.js.map +1 -1
- package/dist/core/atomic-core.d.ts +7 -5
- package/dist/core/atomic-core.js +1 -0
- package/dist/core/atomic-core.js.map +1 -1
- package/dist/core/create.js +48 -58
- package/dist/core/create.js.map +1 -1
- package/dist/core/managed-engines.js +2 -0
- package/dist/core/managed-engines.js.map +1 -1
- package/dist/core/prism.d.ts +23 -6
- package/dist/core/prism.js +45 -0
- package/dist/core/prism.js.map +1 -1
- package/dist/core/public-server.js +3 -2
- package/dist/core/public-server.js.map +1 -1
- package/dist/core/types.d.ts +11 -0
- package/dist/core/types.js.map +1 -1
- package/dist/decision/process.d.ts +4 -0
- package/dist/decision/process.js +10 -1
- package/dist/decision/process.js.map +1 -1
- package/dist/diffusion/args.d.ts +3 -2
- package/dist/diffusion/args.js +21 -4
- package/dist/diffusion/args.js.map +1 -1
- package/dist/diffusion/compat.d.ts +1 -1
- package/dist/diffusion/compat.js +6 -2
- package/dist/diffusion/compat.js.map +1 -1
- package/dist/diffusion/gallery.d.ts +24 -3
- package/dist/diffusion/gallery.js +151 -21
- package/dist/diffusion/gallery.js.map +1 -1
- package/dist/diffusion/index.d.ts +3 -0
- package/dist/diffusion/index.js +3 -0
- package/dist/diffusion/index.js.map +1 -1
- package/dist/diffusion/jobs.d.ts +6 -1
- package/dist/diffusion/jobs.js +10 -1
- package/dist/diffusion/jobs.js.map +1 -1
- package/dist/diffusion/media-header.d.ts +22 -0
- package/dist/diffusion/media-header.js +149 -0
- package/dist/diffusion/media-header.js.map +1 -0
- package/dist/diffusion/parse.d.ts +3 -1
- package/dist/diffusion/parse.js +36 -0
- package/dist/diffusion/parse.js.map +1 -1
- package/dist/diffusion/recipe.d.ts +10 -1
- package/dist/diffusion/recipe.js +85 -21
- package/dist/diffusion/recipe.js.map +1 -1
- package/dist/diffusion/remote-job.d.ts +76 -0
- package/dist/diffusion/remote-job.js +643 -0
- package/dist/diffusion/remote-job.js.map +1 -0
- package/dist/diffusion/remote-store.d.ts +38 -0
- package/dist/diffusion/remote-store.js +91 -0
- package/dist/diffusion/remote-store.js.map +1 -0
- package/dist/diffusion/service.d.ts +9 -1
- package/dist/diffusion/service.js +49 -9
- package/dist/diffusion/service.js.map +1 -1
- package/dist/diffusion/state.d.ts +13 -1
- package/dist/diffusion/state.js +8 -0
- package/dist/diffusion/state.js.map +1 -1
- package/dist/diffusion/tracker.d.ts +6 -0
- package/dist/diffusion/tracker.js +11 -0
- package/dist/diffusion/tracker.js.map +1 -1
- package/dist/diffusion/validate.js +2 -2
- package/dist/diffusion/validate.js.map +1 -1
- package/dist/diffusion/video-gallery.d.ts +11 -4
- package/dist/diffusion/video-gallery.js +62 -25
- package/dist/diffusion/video-gallery.js.map +1 -1
- package/dist/diffusion/video-history.js +4 -1
- package/dist/diffusion/video-history.js.map +1 -1
- package/dist/diffusion/video-recipe.js +58 -25
- package/dist/diffusion/video-recipe.js.map +1 -1
- package/dist/diffusion/wiring.d.ts +3 -0
- package/dist/diffusion/wiring.js +1 -0
- package/dist/diffusion/wiring.js.map +1 -1
- package/dist/diffusion/workflow.d.ts +8 -2
- package/dist/diffusion/workflow.js +13 -5
- package/dist/diffusion/workflow.js.map +1 -1
- package/dist/downloads/downloader.d.ts +6 -1
- package/dist/downloads/downloader.js +12 -1
- package/dist/downloads/downloader.js.map +1 -1
- package/dist/embedding/process.d.ts +4 -0
- package/dist/embedding/process.js +10 -1
- package/dist/embedding/process.js.map +1 -1
- package/dist/media/adapters/a1111.d.ts +32 -0
- package/dist/media/adapters/a1111.js +207 -0
- package/dist/media/adapters/a1111.js.map +1 -0
- package/dist/media/adapters/aimlapi-videos.d.ts +34 -0
- package/dist/media/adapters/aimlapi-videos.js +172 -0
- package/dist/media/adapters/aimlapi-videos.js.map +1 -0
- package/dist/media/adapters/dashscope-image.d.ts +26 -0
- package/dist/media/adapters/dashscope-image.js +160 -0
- package/dist/media/adapters/dashscope-image.js.map +1 -0
- package/dist/media/adapters/dashscope-video.d.ts +47 -0
- package/dist/media/adapters/dashscope-video.js +251 -0
- package/dist/media/adapters/dashscope-video.js.map +1 -0
- package/dist/media/adapters/gemini-image.d.ts +27 -0
- package/dist/media/adapters/gemini-image.js +181 -0
- package/dist/media/adapters/gemini-image.js.map +1 -0
- package/dist/media/adapters/gemini-veo.d.ts +39 -0
- package/dist/media/adapters/gemini-veo.js +196 -0
- package/dist/media/adapters/gemini-veo.js.map +1 -0
- package/dist/media/adapters/hf-images.d.ts +85 -0
- package/dist/media/adapters/hf-images.js +439 -0
- package/dist/media/adapters/hf-images.js.map +1 -0
- package/dist/media/adapters/hf-videos.d.ts +44 -0
- package/dist/media/adapters/hf-videos.js +265 -0
- package/dist/media/adapters/hf-videos.js.map +1 -0
- package/dist/media/adapters/minimax-image.d.ts +26 -0
- package/dist/media/adapters/minimax-image.js +111 -0
- package/dist/media/adapters/minimax-image.js.map +1 -0
- package/dist/media/adapters/minimax-video-v2.d.ts +34 -0
- package/dist/media/adapters/minimax-video-v2.js +191 -0
- package/dist/media/adapters/minimax-video-v2.js.map +1 -0
- package/dist/media/adapters/minimax-video.d.ts +28 -0
- package/dist/media/adapters/minimax-video.js +155 -0
- package/dist/media/adapters/minimax-video.js.map +1 -0
- package/dist/media/adapters/mistral-agent-image.d.ts +33 -0
- package/dist/media/adapters/mistral-agent-image.js +108 -0
- package/dist/media/adapters/mistral-agent-image.js.map +1 -0
- package/dist/media/adapters/nvidia-genai.d.ts +28 -0
- package/dist/media/adapters/nvidia-genai.js +182 -0
- package/dist/media/adapters/nvidia-genai.js.map +1 -0
- package/dist/media/adapters/openai-images.d.ts +23 -0
- package/dist/media/adapters/openai-images.js +164 -0
- package/dist/media/adapters/openai-images.js.map +1 -0
- package/dist/media/adapters/openai-videos.d.ts +34 -0
- package/dist/media/adapters/openai-videos.js +175 -0
- package/dist/media/adapters/openai-videos.js.map +1 -0
- package/dist/media/adapters/openrouter-images.d.ts +25 -0
- package/dist/media/adapters/openrouter-images.js +161 -0
- package/dist/media/adapters/openrouter-images.js.map +1 -0
- package/dist/media/adapters/openrouter-videos.d.ts +43 -0
- package/dist/media/adapters/openrouter-videos.js +208 -0
- package/dist/media/adapters/openrouter-videos.js.map +1 -0
- package/dist/media/adapters/registry.d.ts +7 -0
- package/dist/media/adapters/registry.js +45 -0
- package/dist/media/adapters/registry.js.map +1 -0
- package/dist/media/adapters/types.d.ts +133 -0
- package/dist/media/adapters/types.js +15 -0
- package/dist/media/adapters/types.js.map +1 -0
- package/dist/media/adapters/xai-images.d.ts +19 -0
- package/dist/media/adapters/xai-images.js +83 -0
- package/dist/media/adapters/xai-images.js.map +1 -0
- package/dist/media/adapters/xai-videos.d.ts +29 -0
- package/dist/media/adapters/xai-videos.js +148 -0
- package/dist/media/adapters/xai-videos.js.map +1 -0
- package/dist/media/catalog-baseline.d.ts +2 -0
- package/dist/media/catalog-baseline.js +10 -0
- package/dist/media/catalog-baseline.js.map +1 -0
- package/dist/media/catalog-baseline.json +1819 -0
- package/dist/media/catalog-service.d.ts +42 -0
- package/dist/media/catalog-service.js +111 -0
- package/dist/media/catalog-service.js.map +1 -0
- package/dist/media/catalog.d.ts +50 -0
- package/dist/media/catalog.js +315 -0
- package/dist/media/catalog.js.map +1 -0
- package/dist/media/http.d.ts +125 -0
- package/dist/media/http.js +308 -0
- package/dist/media/http.js.map +1 -0
- package/dist/media/index.d.ts +14 -0
- package/dist/media/index.js +15 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/mask.d.ts +12 -0
- package/dist/media/mask.js +57 -0
- package/dist/media/mask.js.map +1 -0
- package/dist/media/service.d.ts +42 -0
- package/dist/media/service.js +144 -0
- package/dist/media/service.js.map +1 -0
- package/dist/models/compatibility/inspect.d.ts +11 -2
- package/dist/models/compatibility/inspect.js +44 -13
- package/dist/models/compatibility/inspect.js.map +1 -1
- package/dist/models/compatibility/service.d.ts +3 -0
- package/dist/models/compatibility/service.js +1 -0
- package/dist/models/compatibility/service.js.map +1 -1
- package/dist/models/gguf/tensors.d.ts +1 -0
- package/dist/models/gguf/tensors.js +4 -1
- package/dist/models/gguf/tensors.js.map +1 -1
- package/dist/models/hf.d.ts +3 -16
- package/dist/models/hf.js +4 -42
- package/dist/models/hf.js.map +1 -1
- package/dist/router/resolve.d.ts +15 -4
- package/dist/router/resolve.js +25 -3
- package/dist/router/resolve.js.map +1 -1
- package/dist/runtime/environment/linux-provisioner.js +7 -67
- package/dist/runtime/environment/linux-provisioner.js.map +1 -1
- package/dist/runtime/environment/runtime-removal-plan.d.ts +19 -0
- package/dist/runtime/environment/runtime-removal-plan.js +74 -0
- package/dist/runtime/environment/runtime-removal-plan.js.map +1 -0
- package/dist/runtime/environment/windows-provisioner.js +20 -4
- package/dist/runtime/environment/windows-provisioner.js.map +1 -1
- package/dist/runtime/managed-engines/spec.d.ts +2 -2
- package/dist/runtime/managed-engines/spec.js +6 -0
- package/dist/runtime/managed-engines/spec.js.map +1 -1
- package/dist/runtime/managed-models/compatibility.d.ts +10 -0
- package/dist/runtime/managed-models/compatibility.js +18 -0
- package/dist/runtime/managed-models/compatibility.js.map +1 -1
- package/dist/runtime/managed-text/adapter.d.ts +17 -0
- package/dist/runtime/managed-text/adapter.js.map +1 -1
- package/dist/runtime/managed-text/lifecycle.d.ts +8 -0
- package/dist/runtime/managed-text/lifecycle.js +38 -1
- package/dist/runtime/managed-text/lifecycle.js.map +1 -1
- package/dist/runtime/managed-text/readiness.d.ts +21 -1
- package/dist/runtime/managed-text/readiness.js +64 -0
- package/dist/runtime/managed-text/readiness.js.map +1 -1
- package/dist/runtime/managed-text/request-rules.d.ts +9 -7
- package/dist/runtime/managed-text/request-rules.js +58 -2
- package/dist/runtime/managed-text/request-rules.js.map +1 -1
- package/dist/runtime/managed-text/setting-values.d.ts +9 -0
- package/dist/runtime/managed-text/setting-values.js +44 -0
- package/dist/runtime/managed-text/setting-values.js.map +1 -0
- package/dist/runtime/sglang/adapter.d.ts +50 -0
- package/dist/runtime/sglang/adapter.js +393 -0
- package/dist/runtime/sglang/adapter.js.map +1 -0
- package/dist/runtime/sglang/engine.d.ts +16 -0
- package/dist/runtime/sglang/engine.js +38 -0
- package/dist/runtime/sglang/engine.js.map +1 -0
- package/dist/runtime/sglang/index.d.ts +11 -0
- package/dist/runtime/sglang/index.js +12 -0
- package/dist/runtime/sglang/index.js.map +1 -0
- package/dist/runtime/sglang/memory.d.ts +64 -0
- package/dist/runtime/sglang/memory.js +90 -0
- package/dist/runtime/sglang/memory.js.map +1 -0
- package/dist/runtime/sglang/settings.d.ts +49 -0
- package/dist/runtime/sglang/settings.js +118 -0
- package/dist/runtime/sglang/settings.js.map +1 -0
- package/dist/runtime/shared/external-sessions.js +1 -0
- package/dist/runtime/shared/external-sessions.js.map +1 -1
- package/dist/runtime/shared/ports.d.ts +10 -0
- package/dist/runtime/shared/ports.js +30 -0
- package/dist/runtime/shared/ports.js.map +1 -1
- package/dist/runtime/tensorrt-llm/adapter.d.ts +1 -4
- package/dist/runtime/tensorrt-llm/adapter.js +28 -11
- package/dist/runtime/tensorrt-llm/adapter.js.map +1 -1
- package/dist/runtime/tensorrt-llm/check.js +1 -0
- package/dist/runtime/tensorrt-llm/check.js.map +1 -1
- package/dist/runtime/tensorrt-llm/compatibility.d.ts +30 -6
- package/dist/runtime/tensorrt-llm/compatibility.js +41 -9
- package/dist/runtime/tensorrt-llm/compatibility.js.map +1 -1
- package/dist/runtime/tensorrt-llm/cuda-graphs.d.ts +32 -0
- package/dist/runtime/tensorrt-llm/cuda-graphs.js +33 -0
- package/dist/runtime/tensorrt-llm/cuda-graphs.js.map +1 -0
- package/dist/runtime/tensorrt-llm/engine.js +11 -5
- package/dist/runtime/tensorrt-llm/engine.js.map +1 -1
- package/dist/runtime/tensorrt-llm/kv-cache.d.ts +16 -0
- package/dist/runtime/tensorrt-llm/kv-cache.js +21 -1
- package/dist/runtime/tensorrt-llm/kv-cache.js.map +1 -1
- package/dist/runtime/vllm/adapter.js +2 -47
- package/dist/runtime/vllm/adapter.js.map +1 -1
- package/dist/runtime/vllm/memory.js +3 -16
- package/dist/runtime/vllm/memory.js.map +1 -1
- package/dist/runtime/vllm/settings.d.ts +7 -0
- package/dist/runtime/vllm/settings.js +2 -30
- package/dist/runtime/vllm/settings.js.map +1 -1
- package/dist/server/control/router.js +5 -4
- package/dist/server/control/router.js.map +1 -1
- package/dist/server/control/routes/media.d.ts +9 -0
- package/dist/server/control/routes/media.js +24 -0
- package/dist/server/control/routes/media.js.map +1 -0
- package/dist/server/control/routes/model-compatibility.d.ts +9 -0
- package/dist/server/control/routes/model-compatibility.js +31 -0
- package/dist/server/control/routes/model-compatibility.js.map +1 -0
- package/dist/server/control/types.d.ts +18 -20
- package/dist/server/http.js +15 -2
- package/dist/server/http.js.map +1 -1
- package/dist/server/public/gates.d.ts +6 -1
- package/dist/server/public/gates.js +7 -3
- package/dist/server/public/gates.js.map +1 -1
- package/dist/server/public/images-params.js +18 -1
- package/dist/server/public/images-params.js.map +1 -1
- package/dist/server/public/images.d.ts +11 -2
- package/dist/server/public/images.js +73 -9
- package/dist/server/public/images.js.map +1 -1
- package/dist/server/public/index.d.ts +1 -0
- package/dist/server/public/index.js +16 -7
- package/dist/server/public/index.js.map +1 -1
- package/dist/server/public/listing.js +1 -0
- package/dist/server/public/listing.js.map +1 -1
- package/dist/server/public/remote-media.d.ts +51 -0
- package/dist/server/public/remote-media.js +225 -0
- package/dist/server/public/remote-media.js.map +1 -0
- package/dist/server/public/responses.js +4 -2
- package/dist/server/public/responses.js.map +1 -1
- package/dist/server/public/static-assets.generated.js +1 -1
- package/dist/server/public/static-assets.generated.js.map +1 -1
- package/dist/server/public/trace.js +2 -0
- package/dist/server/public/trace.js.map +1 -1
- package/dist/server/public/types.d.ts +12 -1
- package/dist/server/public/videos-params.js +13 -3
- package/dist/server/public/videos-params.js.map +1 -1
- package/dist/server/public/videos.d.ts +1 -0
- package/dist/server/public/videos.js +21 -3
- package/dist/server/public/videos.js.map +1 -1
- package/dist/settings/schema/llamacpp-upstream.json +9 -0
- package/dist/settings/schema/sglang.json +251 -0
- package/dist/settings/schema.js +27 -1
- package/dist/settings/schema.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -6
- package/src/settings/schema/llamacpp-upstream.json +9 -0
- package/src/settings/schema/sglang.json +251 -0
- package/dist/backend/catalog/bundled-manifest-baseline.d.ts +0 -2
- package/dist/backend/catalog/bundled-manifest-baseline.js +0 -65
- package/dist/backend/catalog/bundled-manifest-baseline.js.map +0 -1
- package/dist/contracts/model-setup.d.ts +0 -115
- package/dist/contracts/model-setup.js +0 -33
- package/dist/contracts/model-setup.js.map +0 -1
- package/dist/core/model-setup/index.d.ts +0 -4
- package/dist/core/model-setup/index.js +0 -5
- package/dist/core/model-setup/index.js.map +0 -1
- package/dist/core/model-setup/plan.d.ts +0 -56
- package/dist/core/model-setup/plan.js +0 -158
- package/dist/core/model-setup/plan.js.map +0 -1
- package/dist/core/model-setup/service.d.ts +0 -92
- package/dist/core/model-setup/service.js +0 -329
- package/dist/core/model-setup/service.js.map +0 -1
- package/dist/core/model-setup/store.d.ts +0 -29
- package/dist/core/model-setup/store.js +0 -116
- package/dist/core/model-setup/store.js.map +0 -1
- package/dist/core/model-setup/wiring.d.ts +0 -59
- package/dist/core/model-setup/wiring.js +0 -132
- package/dist/core/model-setup/wiring.js.map +0 -1
- package/dist/server/control/routes/model-setups.d.ts +0 -11
- package/dist/server/control/routes/model-setups.js +0 -55
- package/dist/server/control/routes/model-setups.js.map +0 -1
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"updated_at": "2026-10-13T13:52:11Z",
|
|
4
|
+
"upstream_repo": "ggml-org/llama.cpp",
|
|
5
|
+
"download_base": "https://github.com/AtomicBot-ai/atomic-chat-conf/releases/download",
|
|
6
|
+
"releases": [
|
|
7
|
+
{
|
|
8
|
+
"tag": "b11463",
|
|
9
|
+
"commit": "d2a79e60464903f9832fbecdba48bd4cc6c47e75",
|
|
10
|
+
"published_at": "2026-10-07T10:40:25Z",
|
|
11
|
+
"min_core_version": "0.0.0",
|
|
12
|
+
"notes_url": "https://github.com/ggml-org/llama.cpp/releases/tag/b11463",
|
|
13
|
+
"assets": [
|
|
14
|
+
{
|
|
15
|
+
"name": "llama-b11463-bin-macos-arm64.tar.gz",
|
|
16
|
+
"sha256": "5fcb0237a9a6d247acfb91792249dde498e3f2231ed62a62851c5ca83eb230df",
|
|
17
|
+
"size": 12087702,
|
|
18
|
+
"validation": "approved"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "llama-b11463-bin-ubuntu-arm64.tar.gz",
|
|
22
|
+
"sha256": "95e17be13037fafbed43c7afd75230ce04defb941d066062d0aff4bb3d52caf4",
|
|
23
|
+
"size": 13724995,
|
|
24
|
+
"validation": "approved"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "llama-b11463-bin-ubuntu-cuda-13.4-arm64.tar.gz",
|
|
28
|
+
"sha256": "6a7580834b0679e02ad17da07905bba9fbb50c5dd04dbe1e3b95e518c536aa66",
|
|
29
|
+
"size": 147667327,
|
|
30
|
+
"validation": "approved"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "llama-b11463-bin-ubuntu-vulkan-arm64.tar.gz",
|
|
34
|
+
"sha256": "b3a97c347ef9284f8a82f433679f2daaa10310816affaaa99c94fb449f086698",
|
|
35
|
+
"size": 24887749,
|
|
36
|
+
"validation": "approved"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "llama-b11463-bin-ubuntu-vulkan-x64.tar.gz",
|
|
40
|
+
"sha256": "5d428312d97e4c25eb28277416de935a76ca80bf7ede6b418d43a2b10c0336cd",
|
|
41
|
+
"size": 31678494,
|
|
42
|
+
"validation": "approved"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "llama-b11463-bin-ubuntu-x64.tar.gz",
|
|
46
|
+
"sha256": "c7d63a3dfd1fe93a679b4bcd981dacb9153e2509a21bb912b9a01fc28a8447f5",
|
|
47
|
+
"size": 17732486,
|
|
48
|
+
"validation": "approved"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "llama-b11463-bin-win-cpu-arm64.zip",
|
|
52
|
+
"sha256": "3c0d239d4573b2dfda51d6832327114a78bf9913300efdec44a535f79cd6d2b2",
|
|
53
|
+
"size": 10424801,
|
|
54
|
+
"validation": "approved"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "llama-b11463-bin-win-cpu-x64.zip",
|
|
58
|
+
"sha256": "61fa0338763addfe9e7e71fca1f0fdd2ee8b636abf016bae167aab7973a13728",
|
|
59
|
+
"size": 17636283,
|
|
60
|
+
"validation": "approved"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "llama-b11463-bin-win-cuda-12.4-x64.zip",
|
|
64
|
+
"sha256": "648a85ead292c019483371055c7d727f37da6f8db6948db50c62870b2da31900",
|
|
65
|
+
"size": 262157599,
|
|
66
|
+
"validation": "approved"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "llama-b11463-bin-win-cuda-13.4-arm64.zip",
|
|
70
|
+
"sha256": "cc2bbfef79a2d7966cdaa18f5d3a95ea4dd0a27baa003ca0c1b4b4f7dba89c5b",
|
|
71
|
+
"size": 143195817,
|
|
72
|
+
"validation": "approved"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "llama-b11463-bin-win-cuda-13.4-x64.zip",
|
|
76
|
+
"sha256": "e935758fab193361452f001f1e487d216e709b8550e92b7e9228be5e23bd3d34",
|
|
77
|
+
"size": 150767155,
|
|
78
|
+
"validation": "approved"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "llama-b11463-bin-win-opencl-adreno-arm64.zip",
|
|
82
|
+
"sha256": "5065296d71ac9508aa19189c29198b0a9bc368de8f17496063cf0191fe9c3bc3",
|
|
83
|
+
"size": 10983603,
|
|
84
|
+
"validation": "approved"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "llama-b11463-bin-win-rocm-10.0-x64.zip",
|
|
88
|
+
"sha256": "981dcee4c9902523a627217d3a57875e805d43b2faddd6b01dc08a034d3ebbbe",
|
|
89
|
+
"size": 254658682,
|
|
90
|
+
"validation": "approved"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "llama-b11463-bin-win-vulkan-x64.zip",
|
|
94
|
+
"sha256": "c951fef0f0158bf4b6d8aa75c99a6209658bcbe75fd349d6d2b1b08672933a35",
|
|
95
|
+
"size": 31007237,
|
|
96
|
+
"validation": "approved"
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `llamacpp-upstream` release list, I/O half: fetches conf's release list, keeps it in memory
|
|
3
|
+
* for `UPSTREAM_RELEASES_TTL_MS`, writes the last good copy to
|
|
4
|
+
* `<data>/llamacpp-upstream/releases.cache.json`, and falls back, in order, to:
|
|
5
|
+
*
|
|
6
|
+
* 1. the legacy `backends/manifest.json`, only when the list answered but is not one this core
|
|
7
|
+
* reads (a 404 before conf publishes it, a newer `schema_version`, a body that is not JSON) —
|
|
8
|
+
* after a transport failure the legacy fetch would fail the same way, so it is skipped;
|
|
9
|
+
* 2. the disk copy;
|
|
10
|
+
* 3. the bundled baseline.
|
|
11
|
+
*
|
|
12
|
+
* Concurrent callers share one in-flight fetch. Never throws.
|
|
13
|
+
*/
|
|
14
|
+
import type { DataLayout } from '../../config/index.js';
|
|
15
|
+
import type { BackendCatalogSource, ProxyConfig } from '../../contracts/index.js';
|
|
16
|
+
import type { UpstreamReleaseCatalog } from './upstream-releases.js';
|
|
17
|
+
export declare const UPSTREAM_RELEASES_TTL_MS: number;
|
|
18
|
+
export declare const UPSTREAM_RELEASES_CACHE_FILE = "releases.cache.json";
|
|
19
|
+
type ResolvedSource = Extract<BackendCatalogSource, 'live' | 'legacy-manifest' | 'disk-cache' | 'bundled-baseline'>;
|
|
20
|
+
export interface UpstreamReleasesCatalog {
|
|
21
|
+
catalog: UpstreamReleaseCatalog;
|
|
22
|
+
source: ResolvedSource | Extract<BackendCatalogSource, 'session-cache'>;
|
|
23
|
+
}
|
|
24
|
+
export interface UpstreamReleasesCatalogServiceDeps {
|
|
25
|
+
layout: DataLayout;
|
|
26
|
+
fetchFor: (proxy?: ProxyConfig | null) => typeof fetch;
|
|
27
|
+
now?: () => number;
|
|
28
|
+
timeoutMs?: number;
|
|
29
|
+
/** The release list; `file://` is read from disk (the `ATOMIC_LLAMACPP_UPSTREAM_RELEASES_URL` hook). */
|
|
30
|
+
url?: string;
|
|
31
|
+
legacyUrl?: string;
|
|
32
|
+
baseline?: UpstreamReleaseCatalog;
|
|
33
|
+
log?: (level: 'info' | 'warn', message: string) => void;
|
|
34
|
+
}
|
|
35
|
+
export declare function upstreamReleasesCachePath(layout: DataLayout): string;
|
|
36
|
+
export declare class UpstreamReleasesCatalogService {
|
|
37
|
+
private readonly deps;
|
|
38
|
+
private memory;
|
|
39
|
+
private inFlight;
|
|
40
|
+
constructor(deps: UpstreamReleasesCatalogServiceDeps);
|
|
41
|
+
invalidate(): void;
|
|
42
|
+
catalog(options?: {
|
|
43
|
+
force?: boolean;
|
|
44
|
+
proxy?: ProxyConfig | null;
|
|
45
|
+
}): Promise<UpstreamReleasesCatalog>;
|
|
46
|
+
private resolve;
|
|
47
|
+
private readList;
|
|
48
|
+
private readLegacy;
|
|
49
|
+
private fetch;
|
|
50
|
+
private readDiskCache;
|
|
51
|
+
private writeDiskCache;
|
|
52
|
+
private log;
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `llamacpp-upstream` release list, I/O half: fetches conf's release list, keeps it in memory
|
|
3
|
+
* for `UPSTREAM_RELEASES_TTL_MS`, writes the last good copy to
|
|
4
|
+
* `<data>/llamacpp-upstream/releases.cache.json`, and falls back, in order, to:
|
|
5
|
+
*
|
|
6
|
+
* 1. the legacy `backends/manifest.json`, only when the list answered but is not one this core
|
|
7
|
+
* reads (a 404 before conf publishes it, a newer `schema_version`, a body that is not JSON) —
|
|
8
|
+
* after a transport failure the legacy fetch would fail the same way, so it is skipped;
|
|
9
|
+
* 2. the disk copy;
|
|
10
|
+
* 3. the bundled baseline.
|
|
11
|
+
*
|
|
12
|
+
* Concurrent callers share one in-flight fetch. Never throws.
|
|
13
|
+
*/
|
|
14
|
+
import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { fileURLToPath } from 'node:url';
|
|
17
|
+
import { fetchManifestWithFallbacks, LLAMACPP_BACKEND_MANIFEST_URL, MANIFEST_FETCH_TIMEOUT_MS, manifestTransportFromFetch, } from './manifest.js';
|
|
18
|
+
import { UPSTREAM_RELEASES_BASELINE } from './upstream-releases-baseline.js';
|
|
19
|
+
import { LLAMACPP_UPSTREAM_RELEASES_URL, parseUpstreamReleases, upstreamCatalogFromLegacyManifest, } from './upstream-releases.js';
|
|
20
|
+
export const UPSTREAM_RELEASES_TTL_MS = 60 * 60 * 1000;
|
|
21
|
+
export const UPSTREAM_RELEASES_CACHE_FILE = 'releases.cache.json';
|
|
22
|
+
export function upstreamReleasesCachePath(layout) {
|
|
23
|
+
return join(layout.provider('llamacpp-upstream').root, UPSTREAM_RELEASES_CACHE_FILE);
|
|
24
|
+
}
|
|
25
|
+
const message = (err) => (err instanceof Error ? err.message : String(err));
|
|
26
|
+
export class UpstreamReleasesCatalogService {
|
|
27
|
+
deps;
|
|
28
|
+
memory = null;
|
|
29
|
+
inFlight = null;
|
|
30
|
+
constructor(deps) {
|
|
31
|
+
this.deps = deps;
|
|
32
|
+
}
|
|
33
|
+
invalidate() {
|
|
34
|
+
this.memory = null;
|
|
35
|
+
}
|
|
36
|
+
async catalog(options = {}) {
|
|
37
|
+
const now = this.deps.now ?? Date.now;
|
|
38
|
+
if (!options.force && this.memory && now() - this.memory.fetchedAt < UPSTREAM_RELEASES_TTL_MS) {
|
|
39
|
+
return { catalog: this.memory.catalog, source: 'session-cache' };
|
|
40
|
+
}
|
|
41
|
+
if (this.inFlight)
|
|
42
|
+
return this.inFlight;
|
|
43
|
+
this.inFlight = this.resolve(options.proxy ?? null).finally(() => {
|
|
44
|
+
this.inFlight = null;
|
|
45
|
+
});
|
|
46
|
+
return this.inFlight;
|
|
47
|
+
}
|
|
48
|
+
async resolve(proxy) {
|
|
49
|
+
const now = this.deps.now ?? Date.now;
|
|
50
|
+
const remember = (catalog, source) => {
|
|
51
|
+
this.memory = { fetchedAt: now(), catalog };
|
|
52
|
+
return { catalog, source };
|
|
53
|
+
};
|
|
54
|
+
const list = await this.readList(proxy);
|
|
55
|
+
if ('catalog' in list) {
|
|
56
|
+
await this.writeDiskCache(list.catalog, now());
|
|
57
|
+
return remember(list.catalog, 'live');
|
|
58
|
+
}
|
|
59
|
+
this.log('warn', `[upstream-releases] release list unavailable: ${list.reason}`);
|
|
60
|
+
if (list.answered) {
|
|
61
|
+
const legacy = await this.readLegacy(proxy);
|
|
62
|
+
if (legacy)
|
|
63
|
+
return remember(legacy, 'legacy-manifest');
|
|
64
|
+
}
|
|
65
|
+
const cached = await this.readDiskCache();
|
|
66
|
+
if (cached)
|
|
67
|
+
return remember(cached, 'disk-cache');
|
|
68
|
+
return { catalog: this.deps.baseline ?? UPSTREAM_RELEASES_BASELINE, source: 'bundled-baseline' };
|
|
69
|
+
}
|
|
70
|
+
async readList(proxy) {
|
|
71
|
+
const url = this.deps.url ?? LLAMACPP_UPSTREAM_RELEASES_URL;
|
|
72
|
+
let text;
|
|
73
|
+
try {
|
|
74
|
+
if (url.startsWith('file:')) {
|
|
75
|
+
text = await readFile(fileURLToPath(url), 'utf8');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const response = await this.fetch(url, proxy);
|
|
79
|
+
if (!response.ok)
|
|
80
|
+
return { answered: true, reason: `${url} returned ${response.status}` };
|
|
81
|
+
text = await response.text();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
return { answered: false, reason: message(err) };
|
|
86
|
+
}
|
|
87
|
+
let body;
|
|
88
|
+
try {
|
|
89
|
+
body = JSON.parse(text);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return { answered: true, reason: `${url} is not JSON` };
|
|
93
|
+
}
|
|
94
|
+
const catalog = parseUpstreamReleases(body);
|
|
95
|
+
return catalog ? { catalog } : { answered: true, reason: `${url} is not a release list this core reads` };
|
|
96
|
+
}
|
|
97
|
+
async readLegacy(proxy) {
|
|
98
|
+
const url = this.deps.legacyUrl ?? LLAMACPP_BACKEND_MANIFEST_URL;
|
|
99
|
+
try {
|
|
100
|
+
const response = await this.fetch(url, proxy);
|
|
101
|
+
if (!response.ok)
|
|
102
|
+
throw new Error(`${url} returned ${response.status}`);
|
|
103
|
+
const catalog = upstreamCatalogFromLegacyManifest(await response.json());
|
|
104
|
+
if (!catalog)
|
|
105
|
+
throw new Error(`${url} has no tag_name`);
|
|
106
|
+
return catalog;
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
this.log('warn', `[upstream-releases] legacy manifest unavailable: ${message(err)}`);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async fetch(url, proxy) {
|
|
114
|
+
const { response } = await fetchManifestWithFallbacks([manifestTransportFromFetch('core fetch', this.deps.fetchFor(proxy))], url, this.deps.timeoutMs ?? MANIFEST_FETCH_TIMEOUT_MS);
|
|
115
|
+
return response;
|
|
116
|
+
}
|
|
117
|
+
async readDiskCache() {
|
|
118
|
+
try {
|
|
119
|
+
const raw = JSON.parse(await readFile(upstreamReleasesCachePath(this.deps.layout), 'utf8'));
|
|
120
|
+
return raw && typeof raw === 'object'
|
|
121
|
+
? parseUpstreamReleases(raw['manifest'])
|
|
122
|
+
: null;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
if (err.code !== 'ENOENT') {
|
|
126
|
+
this.log('warn', `[upstream-releases] failed to read disk cache: ${String(err)}`);
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async writeDiskCache(catalog, fetchedAt) {
|
|
132
|
+
const path = upstreamReleasesCachePath(this.deps.layout);
|
|
133
|
+
const temporary = `${path}.tmp-${process.pid}-${fetchedAt}`;
|
|
134
|
+
try {
|
|
135
|
+
await mkdir(this.deps.layout.provider('llamacpp-upstream').root, { recursive: true });
|
|
136
|
+
await writeFile(temporary, JSON.stringify({ fetched_at: fetchedAt, manifest: catalog }), 'utf8');
|
|
137
|
+
await rename(temporary, path);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
await rm(temporary, { force: true }).catch(() => { });
|
|
141
|
+
this.log('warn', `[upstream-releases] failed to write disk cache: ${String(err)}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
log(level, text) {
|
|
145
|
+
this.deps.log?.(level, text);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=upstream-releases-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-releases-catalog.js","sourceRoot":"","sources":["../../../src/backend/catalog/upstream-releases-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The release list of the `llamacpp-upstream` provider (ggml-org/llama.cpp builds mirrored and
|
|
3
|
+
* signed in atomic-chat-conf), pure half.
|
|
4
|
+
*
|
|
5
|
+
* Source of truth: `atomic-chat-conf/backends/llamacpp-upstream-releases.json` (schema
|
|
6
|
+
* `llamacpp-upstream-releases-schema.json` next to it). Each release names the oldest core it runs
|
|
7
|
+
* on (`min_core_version`) and each archive its `validation`; this core takes, per backend, the
|
|
8
|
+
* newest release it meets whose archive is `approved` (or `candidate`, on opt-in). That is how an
|
|
9
|
+
* engine update that needs a core change reaches only the cores that have it. A `withdrawn` release
|
|
10
|
+
* is never offered — a pack already installed from it is left alone.
|
|
11
|
+
*
|
|
12
|
+
* The legacy single-tag `backends/manifest.json` reads as a one-release list every core runs: it is
|
|
13
|
+
* what cores before the list follow, so conf only ever points it at such a release.
|
|
14
|
+
*
|
|
15
|
+
* Parsing is lenient per entry and strict per field, as for the PrismML manifest: a malformed
|
|
16
|
+
* release or archive is dropped, the rest survives; a newer `schema_version` is refused whole.
|
|
17
|
+
*/
|
|
18
|
+
import type { ArchSuffix, BackendVersion, UpstreamManifest } from '../types.js';
|
|
19
|
+
export declare const LLAMACPP_UPSTREAM_RELEASES_URL = "https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/llamacpp-upstream-releases.json";
|
|
20
|
+
export declare const UPSTREAM_RELEASES_SCHEMA_VERSION = 1;
|
|
21
|
+
/** `min_core_version` of a release every core runs, and of the legacy manifest read as a list. */
|
|
22
|
+
export declare const ANY_CORE_VERSION = "0.0.0";
|
|
23
|
+
export type UpstreamValidation = 'candidate' | 'approved';
|
|
24
|
+
export interface UpstreamReleaseAsset {
|
|
25
|
+
/** `llama-<tag>-bin-<backend>.<ext>`; the backend id is read from it. */
|
|
26
|
+
name: string;
|
|
27
|
+
/** Always present in the list; absent only on a legacy-manifest asset that is not mirrored. */
|
|
28
|
+
sha256?: string;
|
|
29
|
+
size?: number;
|
|
30
|
+
validation: UpstreamValidation;
|
|
31
|
+
}
|
|
32
|
+
export interface UpstreamRelease {
|
|
33
|
+
tag: string;
|
|
34
|
+
min_core_version: string;
|
|
35
|
+
withdrawn?: {
|
|
36
|
+
reason: string;
|
|
37
|
+
};
|
|
38
|
+
assets: UpstreamReleaseAsset[];
|
|
39
|
+
}
|
|
40
|
+
export interface UpstreamReleaseCatalog {
|
|
41
|
+
schema_version: 1;
|
|
42
|
+
/** Absent only for a legacy manifest naming an unmirrored tag: downloads use the ggml-org CDN. */
|
|
43
|
+
download_base?: string;
|
|
44
|
+
releases: UpstreamRelease[];
|
|
45
|
+
}
|
|
46
|
+
/** What decides whether a release is offered on this host. */
|
|
47
|
+
export interface UpstreamOfferOptions {
|
|
48
|
+
coreVersion: string;
|
|
49
|
+
/** The user's `allow_candidate_builds`: offer `candidate` archives too. */
|
|
50
|
+
allowCandidates: boolean;
|
|
51
|
+
}
|
|
52
|
+
/** Build number of an upstream tag, `null` for any other shape. */
|
|
53
|
+
export declare function upstreamTagBuild(tag: string): number | null;
|
|
54
|
+
/** A parsed release list, or `null` for anything that is not one this core reads. */
|
|
55
|
+
export declare function parseUpstreamReleases(value: unknown): UpstreamReleaseCatalog | null;
|
|
56
|
+
/**
|
|
57
|
+
* The legacy `backends/manifest.json` as a one-release list every core runs, or `null` when it has
|
|
58
|
+
* no `tag_name`. Its archives count as approved: conf moves that file only to such a release.
|
|
59
|
+
*/
|
|
60
|
+
export declare function upstreamCatalogFromLegacyManifest(value: unknown): UpstreamReleaseCatalog | null;
|
|
61
|
+
/** Not withdrawn and runnable by this core. */
|
|
62
|
+
export declare function upstreamReleaseOffered(release: UpstreamRelease, options: Pick<UpstreamOfferOptions, 'coreVersion'>): boolean;
|
|
63
|
+
/** `approved`, or `candidate` on opt-in. */
|
|
64
|
+
export declare function upstreamAssetOffered(asset: UpstreamReleaseAsset, options: Pick<UpstreamOfferOptions, 'allowCandidates'>): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Backends this host is offered: for each backend id, the newest offered release with an offered
|
|
67
|
+
* archive for it, newest build first. The hardware gate is applied later.
|
|
68
|
+
*/
|
|
69
|
+
export declare function upstreamRemoteBackends(catalog: UpstreamReleaseCatalog, options: UpstreamOfferOptions, osType: string, archSuffix: ArchSuffix): BackendVersion[];
|
|
70
|
+
/**
|
|
71
|
+
* One listed release in the legacy manifest's shape, for `resolveBackendArchiveSource`: any listed
|
|
72
|
+
* tag downloads from the mirror against its hash, whether or not it is offered right now (a pack
|
|
73
|
+
* reinstalled from an older release, a candidate the user opted into). `null` for an unlisted tag.
|
|
74
|
+
*/
|
|
75
|
+
export declare function upstreamManifestForTag(catalog: UpstreamReleaseCatalog, tag: string): UpstreamManifest | null;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The release list of the `llamacpp-upstream` provider (ggml-org/llama.cpp builds mirrored and
|
|
3
|
+
* signed in atomic-chat-conf), pure half.
|
|
4
|
+
*
|
|
5
|
+
* Source of truth: `atomic-chat-conf/backends/llamacpp-upstream-releases.json` (schema
|
|
6
|
+
* `llamacpp-upstream-releases-schema.json` next to it). Each release names the oldest core it runs
|
|
7
|
+
* on (`min_core_version`) and each archive its `validation`; this core takes, per backend, the
|
|
8
|
+
* newest release it meets whose archive is `approved` (or `candidate`, on opt-in). That is how an
|
|
9
|
+
* engine update that needs a core change reaches only the cores that have it. A `withdrawn` release
|
|
10
|
+
* is never offered — a pack already installed from it is left alone.
|
|
11
|
+
*
|
|
12
|
+
* The legacy single-tag `backends/manifest.json` reads as a one-release list every core runs: it is
|
|
13
|
+
* what cores before the list follow, so conf only ever points it at such a release.
|
|
14
|
+
*
|
|
15
|
+
* Parsing is lenient per entry and strict per field, as for the PrismML manifest: a malformed
|
|
16
|
+
* release or archive is dropped, the rest survives; a newer `schema_version` is refused whole.
|
|
17
|
+
*/
|
|
18
|
+
import { compareVersions } from '../version.js';
|
|
19
|
+
import { parseManifestForPlatform } from './manifest.js';
|
|
20
|
+
export const LLAMACPP_UPSTREAM_RELEASES_URL = 'https://raw.githubusercontent.com/AtomicBot-ai/atomic-chat-conf/main/backends/llamacpp-upstream-releases.json';
|
|
21
|
+
export const UPSTREAM_RELEASES_SCHEMA_VERSION = 1;
|
|
22
|
+
/** `min_core_version` of a release every core runs, and of the legacy manifest read as a list. */
|
|
23
|
+
export const ANY_CORE_VERSION = '0.0.0';
|
|
24
|
+
const UPSTREAM_TAG_RE = /^b(\d+)$/;
|
|
25
|
+
/** Build number of an upstream tag, `null` for any other shape. */
|
|
26
|
+
export function upstreamTagBuild(tag) {
|
|
27
|
+
const match = UPSTREAM_TAG_RE.exec(tag);
|
|
28
|
+
return match ? Number(match[1]) : null;
|
|
29
|
+
}
|
|
30
|
+
const isString = (v) => typeof v === 'string' && v.length > 0;
|
|
31
|
+
const isRecord = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
32
|
+
function parseAsset(raw) {
|
|
33
|
+
if (!isRecord(raw))
|
|
34
|
+
return null;
|
|
35
|
+
const { name, size, sha256, validation } = raw;
|
|
36
|
+
if (!isString(name))
|
|
37
|
+
return null;
|
|
38
|
+
if (typeof size !== 'number' || !Number.isInteger(size) || size <= 0)
|
|
39
|
+
return null;
|
|
40
|
+
if (typeof sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(sha256))
|
|
41
|
+
return null;
|
|
42
|
+
if (validation !== 'candidate' && validation !== 'approved')
|
|
43
|
+
return null;
|
|
44
|
+
return { name, sha256, size, validation };
|
|
45
|
+
}
|
|
46
|
+
function parseRelease(raw) {
|
|
47
|
+
if (!isRecord(raw))
|
|
48
|
+
return null;
|
|
49
|
+
const { tag, min_core_version } = raw;
|
|
50
|
+
if (!isString(tag) || upstreamTagBuild(tag) === null || !isString(min_core_version))
|
|
51
|
+
return null;
|
|
52
|
+
const assets = Array.isArray(raw['assets']) ? raw['assets'].map(parseAsset) : [];
|
|
53
|
+
const release = {
|
|
54
|
+
tag,
|
|
55
|
+
min_core_version,
|
|
56
|
+
assets: assets.filter((a) => a !== null),
|
|
57
|
+
};
|
|
58
|
+
const withdrawn = raw['withdrawn'];
|
|
59
|
+
if (isRecord(withdrawn) && isString(withdrawn['reason']))
|
|
60
|
+
release.withdrawn = { reason: withdrawn['reason'] };
|
|
61
|
+
return release;
|
|
62
|
+
}
|
|
63
|
+
/** A parsed release list, or `null` for anything that is not one this core reads. */
|
|
64
|
+
export function parseUpstreamReleases(value) {
|
|
65
|
+
if (!isRecord(value))
|
|
66
|
+
return null;
|
|
67
|
+
if (value['schema_version'] !== UPSTREAM_RELEASES_SCHEMA_VERSION)
|
|
68
|
+
return null;
|
|
69
|
+
if (!Array.isArray(value['releases']))
|
|
70
|
+
return null;
|
|
71
|
+
const catalog = {
|
|
72
|
+
schema_version: 1,
|
|
73
|
+
releases: value['releases'].map(parseRelease).filter((r) => r !== null),
|
|
74
|
+
};
|
|
75
|
+
if (isString(value['download_base']))
|
|
76
|
+
catalog.download_base = value['download_base'];
|
|
77
|
+
return catalog;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The legacy `backends/manifest.json` as a one-release list every core runs, or `null` when it has
|
|
81
|
+
* no `tag_name`. Its archives count as approved: conf moves that file only to such a release.
|
|
82
|
+
*/
|
|
83
|
+
export function upstreamCatalogFromLegacyManifest(value) {
|
|
84
|
+
if (!isRecord(value) || !isString(value['tag_name']))
|
|
85
|
+
return null;
|
|
86
|
+
const assets = [];
|
|
87
|
+
for (const raw of Array.isArray(value['assets']) ? value['assets'] : []) {
|
|
88
|
+
if (!isRecord(raw) || !isString(raw['name']))
|
|
89
|
+
continue;
|
|
90
|
+
const asset = { name: raw['name'], validation: 'approved' };
|
|
91
|
+
if (typeof raw['sha256'] === 'string')
|
|
92
|
+
asset.sha256 = raw['sha256'];
|
|
93
|
+
if (typeof raw['size'] === 'number')
|
|
94
|
+
asset.size = raw['size'];
|
|
95
|
+
assets.push(asset);
|
|
96
|
+
}
|
|
97
|
+
const catalog = {
|
|
98
|
+
schema_version: 1,
|
|
99
|
+
releases: [{ tag: value['tag_name'], min_core_version: ANY_CORE_VERSION, assets }],
|
|
100
|
+
};
|
|
101
|
+
if (isString(value['download_base']))
|
|
102
|
+
catalog.download_base = value['download_base'];
|
|
103
|
+
return catalog;
|
|
104
|
+
}
|
|
105
|
+
/** Not withdrawn and runnable by this core. */
|
|
106
|
+
export function upstreamReleaseOffered(release, options) {
|
|
107
|
+
return !release.withdrawn && compareVersions(options.coreVersion, release.min_core_version) >= 0;
|
|
108
|
+
}
|
|
109
|
+
/** `approved`, or `candidate` on opt-in. */
|
|
110
|
+
export function upstreamAssetOffered(asset, options) {
|
|
111
|
+
return asset.validation === 'approved' || options.allowCandidates;
|
|
112
|
+
}
|
|
113
|
+
const newestFirst = (releases) => [...releases].sort((a, b) => (upstreamTagBuild(b.tag) ?? 0) - (upstreamTagBuild(a.tag) ?? 0));
|
|
114
|
+
/**
|
|
115
|
+
* Backends this host is offered: for each backend id, the newest offered release with an offered
|
|
116
|
+
* archive for it, newest build first. The hardware gate is applied later.
|
|
117
|
+
*/
|
|
118
|
+
export function upstreamRemoteBackends(catalog, options, osType, archSuffix) {
|
|
119
|
+
const seen = new Set();
|
|
120
|
+
const out = [];
|
|
121
|
+
for (const release of newestFirst(catalog.releases)) {
|
|
122
|
+
if (!upstreamReleaseOffered(release, options))
|
|
123
|
+
continue;
|
|
124
|
+
const assets = release.assets.filter((a) => upstreamAssetOffered(a, options));
|
|
125
|
+
for (const entry of parseManifestForPlatform({ tag_name: release.tag, assets }, osType, archSuffix)) {
|
|
126
|
+
if (seen.has(entry.backend))
|
|
127
|
+
continue;
|
|
128
|
+
seen.add(entry.backend);
|
|
129
|
+
out.push(entry);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* One listed release in the legacy manifest's shape, for `resolveBackendArchiveSource`: any listed
|
|
136
|
+
* tag downloads from the mirror against its hash, whether or not it is offered right now (a pack
|
|
137
|
+
* reinstalled from an older release, a candidate the user opted into). `null` for an unlisted tag.
|
|
138
|
+
*/
|
|
139
|
+
export function upstreamManifestForTag(catalog, tag) {
|
|
140
|
+
const release = catalog.releases.find((r) => r.tag === tag);
|
|
141
|
+
if (!release)
|
|
142
|
+
return null;
|
|
143
|
+
const manifest = {
|
|
144
|
+
tag_name: release.tag,
|
|
145
|
+
assets: release.assets.map(({ name, sha256, size }) => ({
|
|
146
|
+
name,
|
|
147
|
+
...(sha256 !== undefined ? { sha256 } : {}),
|
|
148
|
+
...(size !== undefined ? { size } : {}),
|
|
149
|
+
})),
|
|
150
|
+
};
|
|
151
|
+
if (catalog.download_base)
|
|
152
|
+
manifest.download_base = catalog.download_base;
|
|
153
|
+
return manifest;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=upstream-releases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-releases.js","sourceRoot":"","sources":["../../../src/backend/catalog/upstream-releases.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,8 +62,11 @@ export interface BackendServiceDeps {
|
|
|
62
62
|
layout: DataLayout;
|
|
63
63
|
provider: LocalProviderId;
|
|
64
64
|
downloader: Downloader;
|
|
65
|
-
/**
|
|
66
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Upstream: the release list's entry for this tag, in the legacy manifest's shape, or `null` when
|
|
67
|
+
* the tag is not listed (the archive then comes from the ggml-org CDN, unhashed).
|
|
68
|
+
*/
|
|
69
|
+
readManifest: (tag: string, proxy?: ProxyConfig | null) => Promise<UpstreamManifest | null>;
|
|
67
70
|
optimalStore?: OptimalBackendStore;
|
|
68
71
|
/** Decides the executable name inside a pack (`llama-server` vs `llama-server.exe`). */
|
|
69
72
|
platform?: NodeJS.Platform;
|
|
@@ -174,8 +177,8 @@ export declare class BackendService {
|
|
|
174
177
|
*/
|
|
175
178
|
install(version: string, backend: string, options: InstallBackendOptions): Promise<InstallBackendResult>;
|
|
176
179
|
/**
|
|
177
|
-
* An upstream pack: from the signed mirror when the
|
|
178
|
-
* ggml-org CDN without a checksum — the app's behaviour, and the reason a build the mirror has not
|
|
180
|
+
* An upstream pack: from the signed mirror when the release list lists this exact asset, otherwise
|
|
181
|
+
* the ggml-org CDN without a checksum — the app's behaviour, and the reason a build the mirror has not
|
|
179
182
|
* caught up with still installs; a wrong tag then fails as a 404 during the download. Some Windows
|
|
180
183
|
* CUDA backends ship without the CUDA runtime, which is fetched beside them under the same task,
|
|
181
184
|
* because to the user this is one install with one progress bar.
|
|
@@ -31,7 +31,7 @@ import { deletableBackendPack, getBackendDir, listInstalledBackendPacks, readBun
|
|
|
31
31
|
import { scanInstalledBackends } from '../installed/index.js';
|
|
32
32
|
import { llamaServerExeName } from '../../config/index.js';
|
|
33
33
|
import { ensureTurboquantCudart, readTurboquantIndexedAsset, turboquantArchiveUrl } from '../turboquant.js';
|
|
34
|
-
import { parseBackendVersion, parseBinaryVersion } from '../version.js';
|
|
34
|
+
import { parseBackendVersion, parseBinaryVersion, stripBom } from '../version.js';
|
|
35
35
|
const execFileAsync = promisify(execFile);
|
|
36
36
|
/**
|
|
37
37
|
* How long a pack's `llama-server --version` may take. The first launch of a pack is from a path
|
|
@@ -312,14 +312,14 @@ export class BackendService {
|
|
|
312
312
|
return { version, backend, installed: true, path: target };
|
|
313
313
|
}
|
|
314
314
|
/**
|
|
315
|
-
* An upstream pack: from the signed mirror when the
|
|
316
|
-
* ggml-org CDN without a checksum — the app's behaviour, and the reason a build the mirror has not
|
|
315
|
+
* An upstream pack: from the signed mirror when the release list lists this exact asset, otherwise
|
|
316
|
+
* the ggml-org CDN without a checksum — the app's behaviour, and the reason a build the mirror has not
|
|
317
317
|
* caught up with still installs; a wrong tag then fails as a 404 during the download. Some Windows
|
|
318
318
|
* CUDA backends ship without the CUDA runtime, which is fetched beside them under the same task,
|
|
319
319
|
* because to the user this is one install with one progress bar.
|
|
320
320
|
*/
|
|
321
321
|
async upstreamDownloads(version, backend, staging, options) {
|
|
322
|
-
const manifest = await this.deps.readManifest(options.proxy);
|
|
322
|
+
const manifest = await this.deps.readManifest(stripBom(version), options.proxy);
|
|
323
323
|
const source = resolveBackendArchiveSource(version, backend, manifest ?? undefined);
|
|
324
324
|
const archivePath = join(staging, getBackendArchiveName(version, backend));
|
|
325
325
|
const cudartName = getCudartArchiveName(backend, version);
|