@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
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The model-setup plan, pure: given the compatibility verdict, the conf rule (when one matched), the
|
|
3
|
-
* Hub's file facts, the Prism manifest and this machine, what a setup would download and install,
|
|
4
|
-
* how many bytes that is, and what blocks it. `digest` hashes exactly what decides the work, so a
|
|
5
|
-
* start computed against an older plan is refused as stale instead of doing something else.
|
|
6
|
-
*/
|
|
7
|
-
import { determineBestPrismBackend, determinePrismSupportedBackends, filterPrismBackendsBySupport, findPrismRelease, prismArchiveSources, prismCatalogToBackends, prismTagBuild, } from '../../backend/index.js';
|
|
8
|
-
import { canonicalDigest } from '../../runtime/environment/index.js';
|
|
9
|
-
/** The engine a stock file is registered for when it needs no PrismML build. */
|
|
10
|
-
export const STOCK_SETUP_PROVIDER = 'llamacpp-upstream';
|
|
11
|
-
/** `owner/<file name without .gguf>`: unique per file, and a leaf of the model tree. */
|
|
12
|
-
export function defaultModelId(repo, file) {
|
|
13
|
-
const owner = repo.split('/')[0] ?? repo;
|
|
14
|
-
const name = (file.split('/').pop() ?? file).replace(/\.gguf$/i, '');
|
|
15
|
-
return `${owner}/${name}`;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* The best offered PrismML pack for this machine that runs a file needing `requires` from build
|
|
19
|
-
* `minBuild` on; `null` when none does.
|
|
20
|
-
*/
|
|
21
|
-
export function choosePrismPack(input) {
|
|
22
|
-
const { manifest, host } = input;
|
|
23
|
-
const fits = prismCatalogToBackends(manifest, input.offer).filter((pack) => {
|
|
24
|
-
const release = findPrismRelease(manifest, pack.version);
|
|
25
|
-
const build = prismTagBuild(pack.version) ?? 0;
|
|
26
|
-
if (input.minBuild !== undefined && build < input.minBuild)
|
|
27
|
-
return false;
|
|
28
|
-
return input.requires.every((capability) => release?.capabilities.includes(capability));
|
|
29
|
-
});
|
|
30
|
-
const supported = filterPrismBackendsBySupport(fits, determinePrismSupportedBackends(host.osType, host.arch, host.features));
|
|
31
|
-
const best = determineBestPrismBackend(supported, host.gpus);
|
|
32
|
-
if (!best)
|
|
33
|
-
return null;
|
|
34
|
-
const [version, backend] = best.split('/');
|
|
35
|
-
const sources = prismArchiveSources(manifest, version, backend) ?? [];
|
|
36
|
-
return { version, backend, download_size: sources.reduce((sum, s) => sum + s.size, 0) };
|
|
37
|
-
}
|
|
38
|
-
function engineOf(input, blockers) {
|
|
39
|
-
const { verdict } = input;
|
|
40
|
-
if (verdict.provider !== 'atomic-prism')
|
|
41
|
-
return null;
|
|
42
|
-
if (verdict.outcome === 'compatible') {
|
|
43
|
-
return input.currentPack
|
|
44
|
-
? { provider: 'atomic-prism', ...input.currentPack, installed: true, download_size: 0 }
|
|
45
|
-
: null;
|
|
46
|
-
}
|
|
47
|
-
if (verdict.outcome !== 'engine_required' && verdict.outcome !== 'engine_update_required')
|
|
48
|
-
return null;
|
|
49
|
-
const pack = choosePrismPack({
|
|
50
|
-
manifest: input.manifest,
|
|
51
|
-
offer: input.offer,
|
|
52
|
-
host: input.host,
|
|
53
|
-
requires: verdict.requires,
|
|
54
|
-
...(verdict.min_prism_build !== undefined ? { minBuild: verdict.min_prism_build } : {}),
|
|
55
|
-
});
|
|
56
|
-
if (!pack) {
|
|
57
|
-
blockers.push({
|
|
58
|
-
code: 'no_engine_build',
|
|
59
|
-
message: 'No approved PrismML llama.cpp build runs this model on this computer yet.',
|
|
60
|
-
});
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
const installed = input.installedPacks.some((p) => p.version === pack.version && p.backend === pack.backend);
|
|
64
|
-
return {
|
|
65
|
-
provider: 'atomic-prism',
|
|
66
|
-
version: pack.version,
|
|
67
|
-
backend: pack.backend,
|
|
68
|
-
installed,
|
|
69
|
-
download_size: installed ? 0 : pack.download_size,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
function artifactsOf(input) {
|
|
73
|
-
const { request, rule } = input;
|
|
74
|
-
if (!rule) {
|
|
75
|
-
return {
|
|
76
|
-
model: {
|
|
77
|
-
repo: request.repo,
|
|
78
|
-
file: request.file,
|
|
79
|
-
revision: request.revision ?? 'main',
|
|
80
|
-
...(input.hubFile?.sha256 ? { sha256: input.hubFile.sha256 } : {}),
|
|
81
|
-
size: input.hubFile?.size ?? 0,
|
|
82
|
-
},
|
|
83
|
-
projector: null,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const { family, file } = rule;
|
|
87
|
-
const projector = request.include_projector === false ? undefined : family.projectors?.find((p) => p.default);
|
|
88
|
-
return {
|
|
89
|
-
model: {
|
|
90
|
-
repo: family.repo,
|
|
91
|
-
file: file.file,
|
|
92
|
-
revision: family.revision,
|
|
93
|
-
sha256: file.sha256,
|
|
94
|
-
size: file.size,
|
|
95
|
-
},
|
|
96
|
-
projector: projector
|
|
97
|
-
? {
|
|
98
|
-
repo: family.repo,
|
|
99
|
-
file: projector.file,
|
|
100
|
-
revision: family.revision,
|
|
101
|
-
sha256: projector.sha256,
|
|
102
|
-
size: projector.size,
|
|
103
|
-
}
|
|
104
|
-
: null,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/** What `digest` covers: everything that decides the work, nothing that drifts on its own. */
|
|
108
|
-
export function planDigest(plan) {
|
|
109
|
-
return canonicalDigest({
|
|
110
|
-
model_id: plan.model_id,
|
|
111
|
-
provider: plan.provider,
|
|
112
|
-
outcome: plan.verdict.outcome,
|
|
113
|
-
engine: plan.engine && {
|
|
114
|
-
version: plan.engine.version,
|
|
115
|
-
backend: plan.engine.backend,
|
|
116
|
-
installed: plan.engine.installed,
|
|
117
|
-
},
|
|
118
|
-
model: plan.model,
|
|
119
|
-
projector: plan.projector,
|
|
120
|
-
blockers: plan.blockers.map((b) => b.code),
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
export function planModelSetup(input) {
|
|
124
|
-
const { verdict } = input;
|
|
125
|
-
const blockers = [];
|
|
126
|
-
if (verdict.outcome === 'unsupported')
|
|
127
|
-
blockers.push({ code: 'unsupported', message: verdict.reason });
|
|
128
|
-
if (verdict.outcome === 'legacy_artifact') {
|
|
129
|
-
blockers.push({
|
|
130
|
-
code: 'legacy_artifact',
|
|
131
|
-
message: verdict.reason,
|
|
132
|
-
...(verdict.replacement ? { replacement: verdict.replacement } : {}),
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
const engine = engineOf(input, blockers);
|
|
136
|
-
const { model, projector } = artifactsOf(input);
|
|
137
|
-
const total = (engine?.download_size ?? 0) + model.size + (projector?.size ?? 0);
|
|
138
|
-
if (input.freeBytes !== null && total > input.freeBytes) {
|
|
139
|
-
blockers.push({
|
|
140
|
-
code: 'insufficient_disk_space',
|
|
141
|
-
message: `The setup needs ${total} bytes and ${input.freeBytes} are free.`,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
const body = {
|
|
145
|
-
model_id: input.request.model_id ?? defaultModelId(model.repo, model.file),
|
|
146
|
-
provider: verdict.provider ?? STOCK_SETUP_PROVIDER,
|
|
147
|
-
verdict,
|
|
148
|
-
engine,
|
|
149
|
-
model,
|
|
150
|
-
projector,
|
|
151
|
-
total_download_bytes: total,
|
|
152
|
-
free_bytes: input.freeBytes,
|
|
153
|
-
blockers,
|
|
154
|
-
...(verdict.defaults ? { defaults: verdict.defaults } : {}),
|
|
155
|
-
};
|
|
156
|
-
return { digest: planDigest(body), ...body };
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=plan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/core/model-setup/plan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,4BAA4B,EAC5B,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,GACd,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;AAEpE,gFAAgF;AAChF,MAAM,CAAC,MAAM,oBAAoB,GAAoB,mBAAmB,CAAA;AA6BxE,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IACxC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IACpE,OAAO,GAAG,KAAK,IAAI,IAAI,EAAE,CAAA;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAM/B;IACC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAChC,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzE,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACxD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QACxE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;IACF,MAAM,SAAS,GAAG,4BAA4B,CAC5C,IAAI,EACJ,+BAA+B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CACvE,CAAA;IACD,MAAM,IAAI,GAAG,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAA;IAC9D,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;IACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;AACzF,CAAC;AAED,SAAS,QAAQ,CAAC,KAA0B,EAAE,QAA6B;IACzE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACzB,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc;QAAE,OAAO,IAAI,CAAA;IACpD,IAAI,OAAO,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,WAAW;YACtB,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;YACvF,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB,IAAI,OAAO,CAAC,OAAO,KAAK,wBAAwB;QAAE,OAAO,IAAI,CAAA;IACtG,MAAM,IAAI,GAAG,eAAe,CAAC;QAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC,CAAA;IACF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,2EAA2E;SACrF,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5G,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS;QACT,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa;KAClD,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAA0B;IAI7C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM;gBACpC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;aAC/B;YACD,SAAS,EAAE,IAAI;SAChB,CAAA;IACH,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IAC7B,MAAM,SAAS,GACb,OAAO,CAAC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC7F,OAAO;QACL,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;QACD,SAAS,EAAE,SAAS;YAClB,CAAC,CAAC;gBACE,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,IAAI,EAAE,SAAS,CAAC,IAAI;aACrB;YACH,CAAC,CAAC,IAAI;KACT,CAAA;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,UAAU,CAAC,IAAoC;IAC7D,OAAO,eAAe,CAAC;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI;YACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SACjC;QACD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACzB,MAAM,QAAQ,GAAwB,EAAE,CAAA;IACxC,IAAI,OAAO,CAAC,OAAO,KAAK,aAAa;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACtG,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACxC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAA;IAChF,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,mBAAmB,KAAK,cAAc,KAAK,CAAC,SAAS,YAAY;SAC3E,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,IAAI,GAAmC;QAC3C,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QAC1E,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,oBAAoB;QAClD,OAAO;QACP,MAAM;QACN,KAAK;QACL,SAAS;QACT,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,KAAK,CAAC,SAAS;QAC3B,QAAQ;QACR,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAA;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAA;AAC9C,CAAC"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The model-setup runner: `queued → installing_engine → downloading_model → downloading_projector →
|
|
3
|
-
* verifying → registering → ready`, or `failed | cancelled`; a setup a stopped core left mid-way is
|
|
4
|
-
* `interrupted` at the next start and continues on `resume`, from the files already on disk.
|
|
5
|
-
*
|
|
6
|
-
* The PrismML pack is shared: two setups that need the same pack wait on one install, and cancelling
|
|
7
|
-
* one of them stops its wait, never the install the other still needs. Credentials are never stored:
|
|
8
|
-
* the Hugging Face token goes into the download headers of the run that uses it.
|
|
9
|
-
*/
|
|
10
|
-
import { AtomicCoreError } from '../../contracts/index.js';
|
|
11
|
-
import type { CompatibilityVerdict, ErrorBody, ModelSetup, ModelSetupEngine, ModelSetupPlan, ModelSetupPlanRequest, ModelSetupStartRequest, ProxyConfig } from '../../contracts/index.js';
|
|
12
|
-
import type { DataLayout } from '../../config/index.js';
|
|
13
|
-
import type { DownloadItem } from '../../downloads/index.js';
|
|
14
|
-
import type { ModelYmlInput } from '../../models/index.js';
|
|
15
|
-
import type { ModelSetupStore } from './store.js';
|
|
16
|
-
export interface ModelSetupServiceDeps {
|
|
17
|
-
layout: DataLayout;
|
|
18
|
-
store: ModelSetupStore;
|
|
19
|
-
plan: (request: ModelSetupPlanRequest) => Promise<ModelSetupPlan>;
|
|
20
|
-
/** Install the pack (idempotent: a pack already on disk returns at once). */
|
|
21
|
-
installEngine: (engine: ModelSetupEngine, taskId: string, proxy: ProxyConfig | null) => Promise<void>;
|
|
22
|
-
/** Make `atomic-prism` load from this pack. */
|
|
23
|
-
selectEngine: (engine: ModelSetupEngine) => Promise<void>;
|
|
24
|
-
download: (taskId: string, items: DownloadItem[]) => Promise<void>;
|
|
25
|
-
cancelDownload: (taskId: string) => void;
|
|
26
|
-
/** The header verdict of a downloaded file. */
|
|
27
|
-
verify: (modelPath: string) => Promise<CompatibilityVerdict>;
|
|
28
|
-
register: (modelId: string, yml: ModelYmlInput) => Promise<void>;
|
|
29
|
-
emit: (record: ModelSetup) => void;
|
|
30
|
-
/** `model:imported` for the app's model list. */
|
|
31
|
-
imported?: (event: {
|
|
32
|
-
provider: ModelSetupPlan['provider'];
|
|
33
|
-
modelId: string;
|
|
34
|
-
modelPath: string;
|
|
35
|
-
mmprojPath?: string;
|
|
36
|
-
}) => void;
|
|
37
|
-
newId: () => string;
|
|
38
|
-
/** Where model files are downloaded from; Hugging Face unless a test points it elsewhere. */
|
|
39
|
-
hfEndpoint?: string;
|
|
40
|
-
now?: () => number;
|
|
41
|
-
log?: (level: 'info' | 'warn', message: string) => void;
|
|
42
|
-
}
|
|
43
|
-
/** A download task id the progress events can carry: no characters a path or event name chokes on. */
|
|
44
|
-
export declare function setupTaskId(raw: string): string;
|
|
45
|
-
/** The engine install's task id, one per pack, shared by every setup that needs it. */
|
|
46
|
-
export declare function engineTaskId(engine: Pick<ModelSetupEngine, 'version' | 'backend'>): string;
|
|
47
|
-
/** The error the wire carries for a stopped setup. */
|
|
48
|
-
export declare function setupErrorBody(error: unknown): ErrorBody;
|
|
49
|
-
/** The refusal a blocked plan answers `POST /model-setups` with. */
|
|
50
|
-
export declare function blockedPlanError(plan: ModelSetupPlan): AtomicCoreError | null;
|
|
51
|
-
export declare class ModelSetupService {
|
|
52
|
-
private readonly deps;
|
|
53
|
-
private readonly records;
|
|
54
|
-
private readonly runs;
|
|
55
|
-
private readonly engines;
|
|
56
|
-
constructor(deps: ModelSetupServiceDeps);
|
|
57
|
-
/** Load the records and mark what a stopped core left mid-way `interrupted`. Call once at start. */
|
|
58
|
-
recover(): Promise<void>;
|
|
59
|
-
/** In-memory view for the control snapshot. */
|
|
60
|
-
snapshot(): ModelSetup[];
|
|
61
|
-
plan(request: ModelSetupPlanRequest): Promise<ModelSetupPlan>;
|
|
62
|
-
list(): Promise<ModelSetup[]>;
|
|
63
|
-
get(setupId: string): Promise<ModelSetup>;
|
|
64
|
-
/**
|
|
65
|
-
* Start a setup from the plan the user saw. A retry with the same `request_id` returns the setup
|
|
66
|
-
* it started; a plan that changed since is `MODEL_SETUP_PLAN_STALE`; a model already being set up
|
|
67
|
-
* returns that setup.
|
|
68
|
-
*/
|
|
69
|
-
start(input: ModelSetupStartRequest): Promise<ModelSetup>;
|
|
70
|
-
/** Stop a setup. Files downloaded so far stay, so `resume` continues from them. */
|
|
71
|
-
cancel(setupId: string): Promise<ModelSetup>;
|
|
72
|
-
/** Run a stopped setup again, planned afresh from its request. */
|
|
73
|
-
resume(setupId: string, options?: {
|
|
74
|
-
proxy?: ProxyConfig | null;
|
|
75
|
-
}): Promise<ModelSetup>;
|
|
76
|
-
/** Wait for a run in flight (tests and shutdown). */
|
|
77
|
-
settled(setupId: string): Promise<void>;
|
|
78
|
-
private taskIds;
|
|
79
|
-
private launch;
|
|
80
|
-
private run;
|
|
81
|
-
private sharedInstall;
|
|
82
|
-
/** Data-folder-relative paths, `/`-separated, as `model.yml` stores them. */
|
|
83
|
-
private pathsOf;
|
|
84
|
-
private item;
|
|
85
|
-
/** The header is the last word: a file that turned out to need another engine is not registered. */
|
|
86
|
-
private check;
|
|
87
|
-
private registerModel;
|
|
88
|
-
/** Commit a patch on top of the newest record, retrying if a concurrent write moved it. */
|
|
89
|
-
private update;
|
|
90
|
-
private remember;
|
|
91
|
-
private now;
|
|
92
|
-
}
|
|
@@ -1,329 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The model-setup runner: `queued → installing_engine → downloading_model → downloading_projector →
|
|
3
|
-
* verifying → registering → ready`, or `failed | cancelled`; a setup a stopped core left mid-way is
|
|
4
|
-
* `interrupted` at the next start and continues on `resume`, from the files already on disk.
|
|
5
|
-
*
|
|
6
|
-
* The PrismML pack is shared: two setups that need the same pack wait on one install, and cancelling
|
|
7
|
-
* one of them stops its wait, never the install the other still needs. Credentials are never stored:
|
|
8
|
-
* the Hugging Face token goes into the download headers of the run that uses it.
|
|
9
|
-
*/
|
|
10
|
-
import { stat } from 'node:fs/promises';
|
|
11
|
-
import { join, relative, sep } from 'node:path';
|
|
12
|
-
import { AtomicCoreError, MODEL_SETUP_FINAL_STAGES } from '../../contracts/index.js';
|
|
13
|
-
import { modelDirFromId } from '../../config/index.js';
|
|
14
|
-
import { hfResolveUrl } from '../../models/index.js';
|
|
15
|
-
/** A download task id the progress events can carry: no characters a path or event name chokes on. */
|
|
16
|
-
export function setupTaskId(raw) {
|
|
17
|
-
return raw.replace(/[^A-Za-z0-9_/:.-]/g, '_');
|
|
18
|
-
}
|
|
19
|
-
/** The engine install's task id, one per pack, shared by every setup that needs it. */
|
|
20
|
-
export function engineTaskId(engine) {
|
|
21
|
-
return setupTaskId(`atomic-prism-backend-${engine.version}/${engine.backend}`);
|
|
22
|
-
}
|
|
23
|
-
const isFinal = (stage) => MODEL_SETUP_FINAL_STAGES.includes(stage);
|
|
24
|
-
const RESUMABLE = ['interrupted', 'failed', 'cancelled'];
|
|
25
|
-
/** The error the wire carries for a stopped setup. */
|
|
26
|
-
export function setupErrorBody(error) {
|
|
27
|
-
if (error instanceof AtomicCoreError)
|
|
28
|
-
return error.toJSON();
|
|
29
|
-
return { code: 'IO_ERROR', message: error instanceof Error ? error.message : String(error) };
|
|
30
|
-
}
|
|
31
|
-
/** The refusal a blocked plan answers `POST /model-setups` with. */
|
|
32
|
-
export function blockedPlanError(plan) {
|
|
33
|
-
const blocker = plan.blockers[0];
|
|
34
|
-
if (!blocker)
|
|
35
|
-
return null;
|
|
36
|
-
const details = JSON.stringify({ blockers: plan.blockers });
|
|
37
|
-
switch (blocker.code) {
|
|
38
|
-
case 'legacy_artifact':
|
|
39
|
-
return new AtomicCoreError('MODEL_FORMAT_LEGACY', blocker.message, details);
|
|
40
|
-
case 'insufficient_disk_space':
|
|
41
|
-
return new AtomicCoreError('DISK_FULL', `[disk_full] ${blocker.message}`, details);
|
|
42
|
-
default:
|
|
43
|
-
return new AtomicCoreError('MODEL_ENGINE_INCOMPATIBLE', blocker.message, details);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const cancelled = () => new AtomicCoreError('MODEL_LOAD_CANCELLED', 'The model setup was cancelled.');
|
|
47
|
-
function raceAbort(work, signal) {
|
|
48
|
-
if (signal.aborted)
|
|
49
|
-
return Promise.reject(cancelled());
|
|
50
|
-
return new Promise((resolve, reject) => {
|
|
51
|
-
const onAbort = () => reject(cancelled());
|
|
52
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
53
|
-
work.then(resolve, reject).finally(() => signal.removeEventListener('abort', onAbort));
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
export class ModelSetupService {
|
|
57
|
-
deps;
|
|
58
|
-
records = new Map();
|
|
59
|
-
runs = new Map();
|
|
60
|
-
engines = new Map();
|
|
61
|
-
constructor(deps) {
|
|
62
|
-
this.deps = deps;
|
|
63
|
-
}
|
|
64
|
-
/** Load the records and mark what a stopped core left mid-way `interrupted`. Call once at start. */
|
|
65
|
-
async recover() {
|
|
66
|
-
for (const record of await this.deps.store.list()) {
|
|
67
|
-
this.records.set(record.setup_id, record);
|
|
68
|
-
if (isFinal(record.stage) || record.stage === 'interrupted')
|
|
69
|
-
continue;
|
|
70
|
-
await this.update(record.setup_id, { stage: 'interrupted', stopped_at: record.stage });
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/** In-memory view for the control snapshot. */
|
|
74
|
-
snapshot() {
|
|
75
|
-
return [...this.records.values()].sort((a, b) => a.created_at - b.created_at);
|
|
76
|
-
}
|
|
77
|
-
plan(request) {
|
|
78
|
-
return this.deps.plan(request);
|
|
79
|
-
}
|
|
80
|
-
async list() {
|
|
81
|
-
return this.snapshot();
|
|
82
|
-
}
|
|
83
|
-
async get(setupId) {
|
|
84
|
-
const record = this.records.get(setupId) ?? (await this.deps.store.read(setupId));
|
|
85
|
-
if (!record)
|
|
86
|
-
throw new AtomicCoreError('MODEL_SETUP_NOT_FOUND', 'No such model setup.', setupId);
|
|
87
|
-
return record;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Start a setup from the plan the user saw. A retry with the same `request_id` returns the setup
|
|
91
|
-
* it started; a plan that changed since is `MODEL_SETUP_PLAN_STALE`; a model already being set up
|
|
92
|
-
* returns that setup.
|
|
93
|
-
*/
|
|
94
|
-
async start(input) {
|
|
95
|
-
if (typeof input.request_id !== 'string' ||
|
|
96
|
-
input.request_id === '' ||
|
|
97
|
-
typeof input.plan_digest !== 'string') {
|
|
98
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'A model setup needs request_id and plan_digest.');
|
|
99
|
-
}
|
|
100
|
-
const { request_id: requestId, plan_digest: planDigest, proxy, ...request } = input;
|
|
101
|
-
const same = this.snapshot().find((r) => r.request_id === requestId);
|
|
102
|
-
if (same) {
|
|
103
|
-
if (JSON.stringify(same.request) !== JSON.stringify(request)) {
|
|
104
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'That request id was already used for another setup.', same.setup_id);
|
|
105
|
-
}
|
|
106
|
-
return same;
|
|
107
|
-
}
|
|
108
|
-
const plan = await this.deps.plan(input);
|
|
109
|
-
if (plan.digest !== planDigest) {
|
|
110
|
-
throw new AtomicCoreError('MODEL_SETUP_PLAN_STALE', 'What this setup would do has changed since it was planned; review the new plan.', JSON.stringify(plan));
|
|
111
|
-
}
|
|
112
|
-
const blocked = blockedPlanError(plan);
|
|
113
|
-
if (blocked)
|
|
114
|
-
throw blocked;
|
|
115
|
-
const active = this.snapshot().find((r) => r.plan.model_id === plan.model_id && !isFinal(r.stage) && r.stage !== 'interrupted');
|
|
116
|
-
if (active)
|
|
117
|
-
return active;
|
|
118
|
-
const setupId = this.deps.newId();
|
|
119
|
-
const now = this.now();
|
|
120
|
-
const record = {
|
|
121
|
-
setup_id: setupId,
|
|
122
|
-
request_id: requestId,
|
|
123
|
-
revision: 0,
|
|
124
|
-
stage: 'queued',
|
|
125
|
-
request,
|
|
126
|
-
plan,
|
|
127
|
-
task_ids: this.taskIds(setupId, plan),
|
|
128
|
-
created_at: now,
|
|
129
|
-
updated_at: now,
|
|
130
|
-
};
|
|
131
|
-
await this.deps.store.create(record);
|
|
132
|
-
this.remember(record);
|
|
133
|
-
this.launch(setupId, proxy ?? null);
|
|
134
|
-
return record;
|
|
135
|
-
}
|
|
136
|
-
/** Stop a setup. Files downloaded so far stay, so `resume` continues from them. */
|
|
137
|
-
async cancel(setupId) {
|
|
138
|
-
const record = await this.get(setupId);
|
|
139
|
-
const run = this.runs.get(setupId);
|
|
140
|
-
if (run) {
|
|
141
|
-
run.controller.abort();
|
|
142
|
-
this.deps.cancelDownload(record.task_ids.model);
|
|
143
|
-
if (record.task_ids.projector)
|
|
144
|
-
this.deps.cancelDownload(record.task_ids.projector);
|
|
145
|
-
await run.done;
|
|
146
|
-
return this.get(setupId);
|
|
147
|
-
}
|
|
148
|
-
if (isFinal(record.stage))
|
|
149
|
-
return record;
|
|
150
|
-
return this.update(setupId, { stage: 'cancelled', stopped_at: record.stage });
|
|
151
|
-
}
|
|
152
|
-
/** Run a stopped setup again, planned afresh from its request. */
|
|
153
|
-
async resume(setupId, options = {}) {
|
|
154
|
-
const record = await this.get(setupId);
|
|
155
|
-
if (this.runs.has(setupId) || !RESUMABLE.includes(record.stage))
|
|
156
|
-
return record;
|
|
157
|
-
const plan = await this.deps.plan(record.request);
|
|
158
|
-
const blocked = blockedPlanError(plan);
|
|
159
|
-
if (blocked) {
|
|
160
|
-
return this.update(setupId, {
|
|
161
|
-
stage: 'failed',
|
|
162
|
-
stopped_at: record.stage,
|
|
163
|
-
error: blocked.toJSON(),
|
|
164
|
-
plan,
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
const next = await this.update(setupId, { stage: 'queued', plan, task_ids: this.taskIds(setupId, plan) }, ['error', 'stopped_at']);
|
|
168
|
-
this.launch(setupId, options.proxy ?? null);
|
|
169
|
-
return next;
|
|
170
|
-
}
|
|
171
|
-
/** Wait for a run in flight (tests and shutdown). */
|
|
172
|
-
async settled(setupId) {
|
|
173
|
-
await this.runs.get(setupId)?.done;
|
|
174
|
-
}
|
|
175
|
-
taskIds(setupId, plan) {
|
|
176
|
-
return {
|
|
177
|
-
...(plan.engine && !plan.engine.installed ? { engine: engineTaskId(plan.engine) } : {}),
|
|
178
|
-
model: setupTaskId(`model-setup-${setupId}-model`),
|
|
179
|
-
...(plan.projector ? { projector: setupTaskId(`model-setup-${setupId}-projector`) } : {}),
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
launch(setupId, proxy) {
|
|
183
|
-
const controller = new AbortController();
|
|
184
|
-
const done = this.run(setupId, proxy, controller.signal).finally(() => {
|
|
185
|
-
if (this.runs.get(setupId)?.controller === controller)
|
|
186
|
-
this.runs.delete(setupId);
|
|
187
|
-
});
|
|
188
|
-
this.runs.set(setupId, { controller, done });
|
|
189
|
-
}
|
|
190
|
-
async run(setupId, proxy, signal) {
|
|
191
|
-
let stage = 'queued';
|
|
192
|
-
const enter = async (next) => {
|
|
193
|
-
if (signal.aborted)
|
|
194
|
-
throw cancelled();
|
|
195
|
-
stage = next;
|
|
196
|
-
return this.update(setupId, { stage: next });
|
|
197
|
-
};
|
|
198
|
-
try {
|
|
199
|
-
let record = await this.get(setupId);
|
|
200
|
-
const { plan } = record;
|
|
201
|
-
const paths = this.pathsOf(plan);
|
|
202
|
-
if (plan.engine) {
|
|
203
|
-
if (!plan.engine.installed) {
|
|
204
|
-
record = await enter('installing_engine');
|
|
205
|
-
await raceAbort(this.sharedInstall(plan.engine, proxy), signal);
|
|
206
|
-
}
|
|
207
|
-
await this.deps.selectEngine(plan.engine);
|
|
208
|
-
}
|
|
209
|
-
record = await enter('downloading_model');
|
|
210
|
-
await raceAbort(this.deps.download(record.task_ids.model, [this.item(plan.model, paths.model, plan.model_id, proxy)]), signal);
|
|
211
|
-
const projectorTask = record.task_ids.projector;
|
|
212
|
-
if (plan.projector && paths.projector && projectorTask) {
|
|
213
|
-
await enter('downloading_projector');
|
|
214
|
-
await raceAbort(this.deps.download(projectorTask, [
|
|
215
|
-
this.item(plan.projector, paths.projector, plan.model_id, proxy),
|
|
216
|
-
]), signal);
|
|
217
|
-
}
|
|
218
|
-
await enter('verifying');
|
|
219
|
-
this.check(plan, await this.deps.verify(join(this.deps.layout.root, paths.model)));
|
|
220
|
-
await enter('registering');
|
|
221
|
-
await this.registerModel(plan, paths);
|
|
222
|
-
await enter('ready');
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
const wasCancelled = signal.aborted || (error instanceof Error && error.message.includes('Download cancelled'));
|
|
226
|
-
await this.update(setupId, wasCancelled
|
|
227
|
-
? { stage: 'cancelled', stopped_at: stage }
|
|
228
|
-
: { stage: 'failed', stopped_at: stage, error: setupErrorBody(error) }).catch((e) => this.deps.log?.('warn', `[model-setup] could not record the end of ${setupId}: ${String(e)}`));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
sharedInstall(engine, proxy) {
|
|
232
|
-
const key = `${engine.version}/${engine.backend}`;
|
|
233
|
-
let install = this.engines.get(key);
|
|
234
|
-
if (!install) {
|
|
235
|
-
install = this.deps
|
|
236
|
-
.installEngine(engine, engineTaskId(engine), proxy)
|
|
237
|
-
.finally(() => this.engines.delete(key));
|
|
238
|
-
this.engines.set(key, install);
|
|
239
|
-
}
|
|
240
|
-
return install;
|
|
241
|
-
}
|
|
242
|
-
/** Data-folder-relative paths, `/`-separated, as `model.yml` stores them. */
|
|
243
|
-
pathsOf(plan) {
|
|
244
|
-
const dir = modelDirFromId(this.deps.layout.provider('llamacpp-upstream').modelsDir, plan.model_id);
|
|
245
|
-
const rel = (file) => relative(this.deps.layout.root, join(dir, file.split('/').pop() ?? file))
|
|
246
|
-
.split(sep)
|
|
247
|
-
.join('/');
|
|
248
|
-
return { model: rel(plan.model.file), ...(plan.projector ? { projector: rel(plan.projector.file) } : {}) };
|
|
249
|
-
}
|
|
250
|
-
item(artifact, savePath, modelId, proxy) {
|
|
251
|
-
return {
|
|
252
|
-
url: hfResolveUrl(artifact.repo, artifact.file, artifact.revision, this.deps.hfEndpoint),
|
|
253
|
-
save_path: savePath,
|
|
254
|
-
...(artifact.sha256 ? { sha256: artifact.sha256 } : {}),
|
|
255
|
-
...(artifact.size > 0 ? { size: artifact.size } : {}),
|
|
256
|
-
model_id: modelId,
|
|
257
|
-
...(proxy ? { proxy } : {}),
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
/** The header is the last word: a file that turned out to need another engine is not registered. */
|
|
261
|
-
check(plan, verdict) {
|
|
262
|
-
if (verdict.outcome === 'legacy_artifact')
|
|
263
|
-
throw new AtomicCoreError('MODEL_FORMAT_LEGACY', verdict.reason, JSON.stringify(verdict));
|
|
264
|
-
if (verdict.outcome === 'unsupported') {
|
|
265
|
-
throw new AtomicCoreError('MODEL_ENGINE_INCOMPATIBLE', verdict.reason, JSON.stringify(verdict));
|
|
266
|
-
}
|
|
267
|
-
if (verdict.provider !== null && verdict.provider !== plan.provider) {
|
|
268
|
-
throw new AtomicCoreError('MODEL_SETUP_PLAN_STALE', `The downloaded file needs ${verdict.provider}, not ${plan.provider}; plan the setup again.`, JSON.stringify(verdict));
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
async registerModel(plan, paths) {
|
|
272
|
-
const size = async (rel) => (await stat(join(this.deps.layout.root, rel))).size;
|
|
273
|
-
const modelSize = await size(paths.model);
|
|
274
|
-
const projectorSize = paths.projector ? await size(paths.projector) : 0;
|
|
275
|
-
const { verdict } = plan;
|
|
276
|
-
await this.deps.register(plan.model_id, {
|
|
277
|
-
model_path: paths.model,
|
|
278
|
-
...(paths.projector ? { mmproj_path: paths.projector } : {}),
|
|
279
|
-
name: (plan.model.file.split('/').pop() ?? plan.model.file).replace(/\.gguf$/i, ''),
|
|
280
|
-
size_bytes: modelSize + projectorSize,
|
|
281
|
-
...(plan.model.sha256 ? { model_sha256: plan.model.sha256 } : {}),
|
|
282
|
-
model_size_bytes: modelSize,
|
|
283
|
-
...(plan.projector?.sha256 ? { mmproj_sha256: plan.projector.sha256 } : {}),
|
|
284
|
-
...(paths.projector ? { mmproj_size_bytes: projectorSize, projector_vision: true } : {}),
|
|
285
|
-
embedding: false,
|
|
286
|
-
...(plan.provider === 'atomic-prism'
|
|
287
|
-
? {
|
|
288
|
-
atomic_runtime: {
|
|
289
|
-
provider: 'atomic-prism',
|
|
290
|
-
requires: verdict.requires,
|
|
291
|
-
...(verdict.min_prism_build !== undefined ? { min_build: verdict.min_prism_build } : {}),
|
|
292
|
-
...(verdict.family ? { family: verdict.family } : {}),
|
|
293
|
-
},
|
|
294
|
-
}
|
|
295
|
-
: {}),
|
|
296
|
-
});
|
|
297
|
-
this.deps.imported?.({
|
|
298
|
-
provider: plan.provider,
|
|
299
|
-
modelId: plan.model_id,
|
|
300
|
-
modelPath: paths.model,
|
|
301
|
-
...(paths.projector ? { mmprojPath: paths.projector } : {}),
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
/** Commit a patch on top of the newest record, retrying if a concurrent write moved it. */
|
|
305
|
-
async update(setupId, patch, clear = []) {
|
|
306
|
-
for (let attempt = 0; attempt < 3; attempt++) {
|
|
307
|
-
const current = await this.deps.store.read(setupId);
|
|
308
|
-
if (!current)
|
|
309
|
-
throw new AtomicCoreError('MODEL_SETUP_NOT_FOUND', 'No such model setup.', setupId);
|
|
310
|
-
const next = { ...current, ...patch, updated_at: this.now() };
|
|
311
|
-
for (const key of clear)
|
|
312
|
-
delete next[key];
|
|
313
|
-
const stored = await this.deps.store.commit(next, current.revision);
|
|
314
|
-
if (stored) {
|
|
315
|
-
this.remember(stored);
|
|
316
|
-
return stored;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
throw new AtomicCoreError('INTERNAL_ERROR', 'The model setup kept changing under this write.', setupId);
|
|
320
|
-
}
|
|
321
|
-
remember(record) {
|
|
322
|
-
this.records.set(record.setup_id, record);
|
|
323
|
-
this.deps.emit(record);
|
|
324
|
-
}
|
|
325
|
-
now() {
|
|
326
|
-
return (this.deps.now ?? Date.now)();
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
//# sourceMappingURL=service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/core/model-setup/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `<data>/atomic-core/prism-setups/<setup id>.json`: one record per model setup. One core owns a
|
|
3
|
-
* data folder at a time (the instance lock), so the store serialises writers in memory rather than
|
|
4
|
-
* with a lock file. A write never overwrites the only good copy: the previous record is kept as
|
|
5
|
-
* `.bak` and read back when the newest is torn. `commit` applies only against the revision it was
|
|
6
|
-
* computed from, so a late writer cannot step on a newer state.
|
|
7
|
-
*/
|
|
8
|
-
import type { ModelSetup } from '../../contracts/index.js';
|
|
9
|
-
/** Enough of a shape check to tell a record from a truncated write or a foreign file. */
|
|
10
|
-
export declare function parseModelSetupRecord(text: string): ModelSetup | null;
|
|
11
|
-
export declare class ModelSetupStore {
|
|
12
|
-
private readonly dir;
|
|
13
|
-
private tail;
|
|
14
|
-
constructor(dir: string);
|
|
15
|
-
/** Every record that can be read, oldest first. */
|
|
16
|
-
list(): Promise<ModelSetup[]>;
|
|
17
|
-
/** The record, its `.bak` when the newest write was torn, or `null`. */
|
|
18
|
-
read(setupId: string): Promise<ModelSetup | null>;
|
|
19
|
-
/** Write a new record; fails when one with that id exists. */
|
|
20
|
-
create(record: ModelSetup): Promise<ModelSetup>;
|
|
21
|
-
/**
|
|
22
|
-
* Replace the record when it is still at `expectedRevision`; the stored one gets
|
|
23
|
-
* `expectedRevision + 1`. Returns `null` without writing when another writer moved it first.
|
|
24
|
-
*/
|
|
25
|
-
commit(next: ModelSetup, expectedRevision: number): Promise<ModelSetup | null>;
|
|
26
|
-
private path;
|
|
27
|
-
private write;
|
|
28
|
-
private serialise;
|
|
29
|
-
}
|