@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,116 +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 { mkdir, readFile, readdir, rename, rm, writeFile } from 'node:fs/promises';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
import { AtomicCoreError, MODEL_SETUP_STAGES } from '../../contracts/index.js';
|
|
11
|
-
const SAFE_ID = /^[A-Za-z0-9_-]{1,128}$/;
|
|
12
|
-
/** Enough of a shape check to tell a record from a truncated write or a foreign file. */
|
|
13
|
-
export function parseModelSetupRecord(text) {
|
|
14
|
-
try {
|
|
15
|
-
const raw = JSON.parse(text);
|
|
16
|
-
if (typeof raw?.setup_id !== 'string' || !SAFE_ID.test(raw.setup_id))
|
|
17
|
-
return null;
|
|
18
|
-
if (typeof raw.request_id !== 'string')
|
|
19
|
-
return null;
|
|
20
|
-
if (!Number.isSafeInteger(raw.revision) || raw.revision < 0)
|
|
21
|
-
return null;
|
|
22
|
-
if (!MODEL_SETUP_STAGES.includes(raw.stage))
|
|
23
|
-
return null;
|
|
24
|
-
if (typeof raw.plan?.digest !== 'string' || typeof raw.plan.model_id !== 'string')
|
|
25
|
-
return null;
|
|
26
|
-
return raw;
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
export class ModelSetupStore {
|
|
33
|
-
dir;
|
|
34
|
-
tail = Promise.resolve();
|
|
35
|
-
constructor(dir) {
|
|
36
|
-
this.dir = dir;
|
|
37
|
-
}
|
|
38
|
-
/** Every record that can be read, oldest first. */
|
|
39
|
-
async list() {
|
|
40
|
-
const names = await readdir(this.dir).catch((err) => {
|
|
41
|
-
if (err.code === 'ENOENT')
|
|
42
|
-
return [];
|
|
43
|
-
throw err;
|
|
44
|
-
});
|
|
45
|
-
const ids = new Set(names
|
|
46
|
-
.filter((n) => n.endsWith('.json') || n.endsWith('.json.bak'))
|
|
47
|
-
.map((n) => n.replace(/\.json(\.bak)?$/, '')));
|
|
48
|
-
const records = [];
|
|
49
|
-
for (const id of ids) {
|
|
50
|
-
const record = SAFE_ID.test(id) ? await this.read(id) : null;
|
|
51
|
-
if (record)
|
|
52
|
-
records.push(record);
|
|
53
|
-
}
|
|
54
|
-
return records.sort((a, b) => a.created_at - b.created_at || a.setup_id.localeCompare(b.setup_id));
|
|
55
|
-
}
|
|
56
|
-
/** The record, its `.bak` when the newest write was torn, or `null`. */
|
|
57
|
-
async read(setupId) {
|
|
58
|
-
if (!SAFE_ID.test(setupId))
|
|
59
|
-
return null;
|
|
60
|
-
const path = this.path(setupId);
|
|
61
|
-
for (const candidate of [path, `${path}.bak`]) {
|
|
62
|
-
const text = await readFile(candidate, 'utf8').catch(() => undefined);
|
|
63
|
-
const record = text === undefined ? null : parseModelSetupRecord(text);
|
|
64
|
-
if (record)
|
|
65
|
-
return record;
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
/** Write a new record; fails when one with that id exists. */
|
|
70
|
-
async create(record) {
|
|
71
|
-
return this.serialise(async () => {
|
|
72
|
-
if (await this.read(record.setup_id)) {
|
|
73
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'A model setup with that id already exists.', record.setup_id);
|
|
74
|
-
}
|
|
75
|
-
await this.write(record);
|
|
76
|
-
return record;
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Replace the record when it is still at `expectedRevision`; the stored one gets
|
|
81
|
-
* `expectedRevision + 1`. Returns `null` without writing when another writer moved it first.
|
|
82
|
-
*/
|
|
83
|
-
async commit(next, expectedRevision) {
|
|
84
|
-
return this.serialise(async () => {
|
|
85
|
-
const current = await this.read(next.setup_id);
|
|
86
|
-
if (!current || current.revision !== expectedRevision)
|
|
87
|
-
return null;
|
|
88
|
-
const stored = { ...next, revision: expectedRevision + 1 };
|
|
89
|
-
await this.write(stored);
|
|
90
|
-
return stored;
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
path(setupId) {
|
|
94
|
-
return join(this.dir, `${setupId}.json`);
|
|
95
|
-
}
|
|
96
|
-
async write(record) {
|
|
97
|
-
await mkdir(this.dir, { recursive: true });
|
|
98
|
-
const path = this.path(record.setup_id);
|
|
99
|
-
const temporary = `${path}.tmp-${process.pid}`;
|
|
100
|
-
await writeFile(temporary, `${JSON.stringify(record, null, 2)}\n`, 'utf8');
|
|
101
|
-
await rename(path, `${path}.bak`).catch((err) => {
|
|
102
|
-
if (err.code !== 'ENOENT')
|
|
103
|
-
throw err;
|
|
104
|
-
});
|
|
105
|
-
await rename(temporary, path).catch(async (err) => {
|
|
106
|
-
await rm(temporary, { force: true }).catch(() => { });
|
|
107
|
-
throw err;
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
serialise(operation) {
|
|
111
|
-
const result = this.tail.then(operation, operation);
|
|
112
|
-
this.tail = result.catch(() => { });
|
|
113
|
-
return result;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/core/model-setup/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Composition of the model setup for `create.ts`: the plan's facts (the verdict, the conf rule, the
|
|
3
|
-
* Hub's file facts, the PrismML manifest, this machine, the packs on disk, free space) gathered from
|
|
4
|
-
* the core's services, and the runner's I/O (engine install, downloads, header check, `model.yml`).
|
|
5
|
-
*/
|
|
6
|
-
import type { DataLayout } from '../../config/index.js';
|
|
7
|
-
import type { CoreEvents, LocalProviderId, ModelCompatibilityRequest, ModelCompatibilityResponse, ModelSetupPlan, ModelSetupPlanRequest, ProxyConfig } from '../../contracts/index.js';
|
|
8
|
-
import type { PrismCatalogService, PrismOfferOptions, RocmHostProbe } from '../../backend/index.js';
|
|
9
|
-
import type { DownloadItem } from '../../downloads/index.js';
|
|
10
|
-
import type { HardwareFacts } from '../../hardware/index.js';
|
|
11
|
-
import type { ModelCompatibilityService, ModelYmlInput } from '../../models/index.js';
|
|
12
|
-
import type { PrismPackRef } from './plan.js';
|
|
13
|
-
import { ModelSetupService } from './service.js';
|
|
14
|
-
export interface ModelSetupWiringDeps {
|
|
15
|
-
layout: DataLayout;
|
|
16
|
-
compatibility: Pick<ModelCompatibilityService, 'check' | 'ruleFor'>;
|
|
17
|
-
prismCatalog: Pick<PrismCatalogService, 'catalog'>;
|
|
18
|
-
hardware: () => Promise<HardwareFacts>;
|
|
19
|
-
offer: () => PrismOfferOptions;
|
|
20
|
-
currentPack: () => Promise<PrismPackRef | null>;
|
|
21
|
-
installEngine: (version: string, backend: string, options: {
|
|
22
|
-
taskId: string;
|
|
23
|
-
proxy: ProxyConfig | null;
|
|
24
|
-
}) => Promise<unknown>;
|
|
25
|
-
selectEngine: (versionBackend: string) => Promise<unknown>;
|
|
26
|
-
downloader: {
|
|
27
|
-
download: (taskId: string, items: DownloadItem[], options: {
|
|
28
|
-
headers?: Record<string, string>;
|
|
29
|
-
resume?: boolean;
|
|
30
|
-
}) => Promise<unknown>;
|
|
31
|
-
cancel: (taskId: string) => unknown;
|
|
32
|
-
};
|
|
33
|
-
register: (provider: LocalProviderId, modelId: string, yml: ModelYmlInput) => Promise<unknown>;
|
|
34
|
-
/** A registered model's file: absolute path and the sha256 its `model.yml` records. */
|
|
35
|
-
modelFile: (provider: LocalProviderId, modelId: string) => Promise<{
|
|
36
|
-
modelPath: string;
|
|
37
|
-
sha256?: string;
|
|
38
|
-
}>;
|
|
39
|
-
emit: <K extends keyof CoreEvents>(name: K, payload: CoreEvents[K]) => void;
|
|
40
|
-
freeBytes: () => Promise<number | null>;
|
|
41
|
-
/** The fetch for one request's proxy policy. */
|
|
42
|
-
fetchFor: (proxy?: ProxyConfig | null) => typeof fetch;
|
|
43
|
-
newId: () => string;
|
|
44
|
-
/** Test hook `ATOMIC_HF_ENDPOINT`: where model files are downloaded from. */
|
|
45
|
-
hfEndpoint?: string;
|
|
46
|
-
env?: NodeJS.ProcessEnv;
|
|
47
|
-
platform?: NodeJS.Platform;
|
|
48
|
-
rocmProbe?: () => Promise<RocmHostProbe>;
|
|
49
|
-
installedPacks?: () => Promise<PrismPackRef[]>;
|
|
50
|
-
log?: (level: 'info' | 'warn', message: string) => void;
|
|
51
|
-
}
|
|
52
|
-
/** The plan for one request, from what the core knows now. */
|
|
53
|
-
export declare function planFor(deps: ModelSetupWiringDeps, request: ModelSetupPlanRequest): Promise<ModelSetupPlan>;
|
|
54
|
-
/**
|
|
55
|
-
* `POST /models/compatibility`: a registered model by id (its file on disk), or a Hub file before
|
|
56
|
-
* download (the conf rule, then — when asked — its header over HTTP ranges).
|
|
57
|
-
*/
|
|
58
|
-
export declare function compatibilityFor(deps: Pick<ModelSetupWiringDeps, 'compatibility' | 'modelFile'>, request: ModelCompatibilityRequest): Promise<ModelCompatibilityResponse>;
|
|
59
|
-
export declare function wireModelSetups(deps: ModelSetupWiringDeps): ModelSetupService;
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Composition of the model setup for `create.ts`: the plan's facts (the verdict, the conf rule, the
|
|
3
|
-
* Hub's file facts, the PrismML manifest, this machine, the packs on disk, free space) gathered from
|
|
4
|
-
* the core's services, and the runner's I/O (engine install, downloads, header check, `model.yml`).
|
|
5
|
-
*/
|
|
6
|
-
import { AtomicCoreError } from '../../contracts/index.js';
|
|
7
|
-
import { getPrismSupportedFeatures, scanInstalledBackends } from '../../backend/index.js';
|
|
8
|
-
import { fetchHfGgufFiles, hfToken } from '../../models/index.js';
|
|
9
|
-
import { planModelSetup } from './plan.js';
|
|
10
|
-
import { ModelSetupService } from './service.js';
|
|
11
|
-
import { ModelSetupStore } from './store.js';
|
|
12
|
-
function assertPlanRequest(request) {
|
|
13
|
-
const ok = (v) => typeof v === 'string' && v.trim() !== '';
|
|
14
|
-
if (!ok(request.repo) || !ok(request.file)) {
|
|
15
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'A model setup needs the Hugging Face repo and file.');
|
|
16
|
-
}
|
|
17
|
-
if (!/\.gguf$/i.test(request.file)) {
|
|
18
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'A model setup downloads a .gguf file.', request.file);
|
|
19
|
-
}
|
|
20
|
-
if (request.revision !== undefined && !ok(request.revision)) {
|
|
21
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'The revision must be a non-empty string.');
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
/** The plan for one request, from what the core knows now. */
|
|
25
|
-
export async function planFor(deps, request) {
|
|
26
|
-
assertPlanRequest(request);
|
|
27
|
-
const query = {
|
|
28
|
-
repo: request.repo,
|
|
29
|
-
file: request.file,
|
|
30
|
-
...(request.revision ? { revision: request.revision } : {}),
|
|
31
|
-
};
|
|
32
|
-
const [verdict, rule, catalog, facts, current, installedPacks, freeBytes] = await Promise.all([
|
|
33
|
-
deps.compatibility.check({ ...query, inspectRemote: true }),
|
|
34
|
-
deps.compatibility.ruleFor(query),
|
|
35
|
-
deps.prismCatalog.catalog({ force: false, proxy: request.proxy ?? null }),
|
|
36
|
-
deps.hardware(),
|
|
37
|
-
deps.currentPack(),
|
|
38
|
-
deps.installedPacks
|
|
39
|
-
? deps.installedPacks()
|
|
40
|
-
: scanInstalledBackends(deps.layout, 'atomic-prism', deps.platform ?? process.platform).catch(() => []),
|
|
41
|
-
deps.freeBytes().catch(() => null),
|
|
42
|
-
]);
|
|
43
|
-
let hubFile;
|
|
44
|
-
if (!rule) {
|
|
45
|
-
const token = hfToken(deps.env ?? process.env);
|
|
46
|
-
const files = await fetchHfGgufFiles(request.repo, {
|
|
47
|
-
fetch: deps.fetchFor(request.proxy ?? null),
|
|
48
|
-
...(token ? { token } : {}),
|
|
49
|
-
});
|
|
50
|
-
const found = files.find((f) => f.filename === request.file);
|
|
51
|
-
if (!found)
|
|
52
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', `"${request.file}" is not a GGUF file of ${request.repo}.`);
|
|
53
|
-
hubFile = { size: found.size, ...(found.sha256 ? { sha256: found.sha256 } : {}) };
|
|
54
|
-
}
|
|
55
|
-
const rocm = facts.osType === 'linux' && deps.rocmProbe ? await deps.rocmProbe().catch(() => undefined) : undefined;
|
|
56
|
-
return planModelSetup({
|
|
57
|
-
request,
|
|
58
|
-
verdict,
|
|
59
|
-
...(rule ? { rule } : {}),
|
|
60
|
-
...(hubFile ? { hubFile } : {}),
|
|
61
|
-
manifest: catalog.manifest,
|
|
62
|
-
offer: deps.offer(),
|
|
63
|
-
host: {
|
|
64
|
-
osType: facts.osType,
|
|
65
|
-
arch: facts.arch,
|
|
66
|
-
features: getPrismSupportedFeatures(facts.osType, facts.cpuExtensions ?? [], facts.gpus, rocm),
|
|
67
|
-
gpus: facts.gpus,
|
|
68
|
-
},
|
|
69
|
-
installedPacks: installedPacks.map((p) => ({ version: p.version, backend: p.backend })),
|
|
70
|
-
currentPack: current,
|
|
71
|
-
freeBytes,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* `POST /models/compatibility`: a registered model by id (its file on disk), or a Hub file before
|
|
76
|
-
* download (the conf rule, then — when asked — its header over HTTP ranges).
|
|
77
|
-
*/
|
|
78
|
-
export async function compatibilityFor(deps, request) {
|
|
79
|
-
if (typeof request.model_id === 'string' && request.model_id !== '') {
|
|
80
|
-
const target = await deps.modelFile(request.provider ?? 'llamacpp-upstream', request.model_id);
|
|
81
|
-
return deps.compatibility.check({
|
|
82
|
-
modelPath: target.modelPath,
|
|
83
|
-
...(target.sha256 ? { sha256: target.sha256 } : {}),
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
if (typeof request.repo !== 'string' ||
|
|
87
|
-
request.repo === '' ||
|
|
88
|
-
typeof request.file !== 'string' ||
|
|
89
|
-
request.file === '') {
|
|
90
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'A compatibility check needs model_id, or repo and file.');
|
|
91
|
-
}
|
|
92
|
-
return deps.compatibility.check({
|
|
93
|
-
repo: request.repo,
|
|
94
|
-
file: request.file,
|
|
95
|
-
...(request.revision ? { revision: request.revision } : {}),
|
|
96
|
-
...(request.sha256 ? { sha256: request.sha256 } : {}),
|
|
97
|
-
inspectRemote: request.inspect_remote === true,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
export function wireModelSetups(deps) {
|
|
101
|
-
return new ModelSetupService({
|
|
102
|
-
layout: deps.layout,
|
|
103
|
-
store: new ModelSetupStore(deps.layout.core.prismSetupsDir),
|
|
104
|
-
plan: (request) => planFor(deps, request),
|
|
105
|
-
installEngine: async (engine, taskId, proxy) => {
|
|
106
|
-
await deps.installEngine(engine.version, engine.backend, { taskId, proxy });
|
|
107
|
-
},
|
|
108
|
-
selectEngine: async (engine) => {
|
|
109
|
-
await deps.selectEngine(`${engine.version}/${engine.backend}`);
|
|
110
|
-
},
|
|
111
|
-
download: async (taskId, items) => {
|
|
112
|
-
const token = hfToken(deps.env ?? process.env);
|
|
113
|
-
await deps.downloader.download(taskId, items, {
|
|
114
|
-
resume: true,
|
|
115
|
-
...(token ? { headers: { authorization: `Bearer ${token}` } } : {}),
|
|
116
|
-
});
|
|
117
|
-
},
|
|
118
|
-
cancelDownload: (taskId) => {
|
|
119
|
-
deps.downloader.cancel(taskId);
|
|
120
|
-
},
|
|
121
|
-
verify: (modelPath) => deps.compatibility.check({ modelPath }),
|
|
122
|
-
register: async (modelId, yml) => {
|
|
123
|
-
await deps.register(typeof yml['atomic_runtime'] === 'object' ? 'atomic-prism' : 'llamacpp-upstream', modelId, yml);
|
|
124
|
-
},
|
|
125
|
-
emit: (record) => deps.emit('model-setup:changed', record),
|
|
126
|
-
imported: (event) => deps.emit('model:imported', event),
|
|
127
|
-
newId: deps.newId,
|
|
128
|
-
...(deps.hfEndpoint ? { hfEndpoint: deps.hfEndpoint } : {}),
|
|
129
|
-
...(deps.log ? { log: deps.log } : {}),
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=wiring.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../../src/core/model-setup/wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model compatibility and the model setup: `POST /models/compatibility` (what a file needs and
|
|
3
|
-
* whether this core runs it), `GET /models/atomic-prism/families` (the Bonsai models the conf rules
|
|
4
|
-
* name, for the Hub), `POST /models/setup-plan` (what a setup would install and download,
|
|
5
|
-
* with a digest), `POST /model-setups` (start one from that digest), `GET /model-setups[/:id]`, and
|
|
6
|
-
* `POST /model-setups/:id/{cancel,resume}`. Progress is the `model-setup:changed` event plus the
|
|
7
|
-
* `download:*` events of the setup's task ids.
|
|
8
|
-
*/
|
|
9
|
-
import type { Router } from '../../http.js';
|
|
10
|
-
import type { ControlRouteContext, ControlServerDeps } from '../types.js';
|
|
11
|
-
export declare function registerModelSetupRoutes(router: Router, deps: ControlServerDeps, ctx: ControlRouteContext): void;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model compatibility and the model setup: `POST /models/compatibility` (what a file needs and
|
|
3
|
-
* whether this core runs it), `GET /models/atomic-prism/families` (the Bonsai models the conf rules
|
|
4
|
-
* name, for the Hub), `POST /models/setup-plan` (what a setup would install and download,
|
|
5
|
-
* with a digest), `POST /model-setups` (start one from that digest), `GET /model-setups[/:id]`, and
|
|
6
|
-
* `POST /model-setups/:id/{cancel,resume}`. Progress is the `model-setup:changed` event plus the
|
|
7
|
-
* `download:*` events of the setup's task ids.
|
|
8
|
-
*/
|
|
9
|
-
import { AtomicCoreError } from '../../../contracts/index.js';
|
|
10
|
-
import { readJsonBody, sendJson } from '../../http.js';
|
|
11
|
-
function control(deps) {
|
|
12
|
-
if (!deps.modelSetups)
|
|
13
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'Model setup is not available in this core.');
|
|
14
|
-
return deps.modelSetups;
|
|
15
|
-
}
|
|
16
|
-
async function objectBody(req) {
|
|
17
|
-
const body = await readJsonBody(req);
|
|
18
|
-
if (typeof body !== 'object' || body === null || Array.isArray(body)) {
|
|
19
|
-
throw new AtomicCoreError('INVALID_ARGUMENT', 'The request body must be a JSON object.');
|
|
20
|
-
}
|
|
21
|
-
return body;
|
|
22
|
-
}
|
|
23
|
-
export function registerModelSetupRoutes(router, deps, ctx) {
|
|
24
|
-
const { p } = ctx;
|
|
25
|
-
router.post(p('/models/compatibility'), async (req, res) => {
|
|
26
|
-
const setups = control(deps);
|
|
27
|
-
sendJson(res, 200, await setups.compatibility(await objectBody(req)));
|
|
28
|
-
});
|
|
29
|
-
router.get(p('/models/atomic-prism/families'), async (_req, res) => {
|
|
30
|
-
sendJson(res, 200, await control(deps).families());
|
|
31
|
-
});
|
|
32
|
-
router.post(p('/models/setup-plan'), async (req, res) => {
|
|
33
|
-
const setups = control(deps);
|
|
34
|
-
sendJson(res, 200, await setups.plan(await objectBody(req)));
|
|
35
|
-
});
|
|
36
|
-
router.post(p('/model-setups'), async (req, res) => {
|
|
37
|
-
const setups = control(deps);
|
|
38
|
-
sendJson(res, 202, await setups.start(await objectBody(req)));
|
|
39
|
-
});
|
|
40
|
-
router.get(p('/model-setups'), async (_req, res) => {
|
|
41
|
-
sendJson(res, 200, { setups: await control(deps).list() });
|
|
42
|
-
});
|
|
43
|
-
router.get(p('/model-setups/:id'), async (_req, res, { params }) => {
|
|
44
|
-
sendJson(res, 200, await control(deps).get(params['id'] ?? ''));
|
|
45
|
-
});
|
|
46
|
-
router.post(p('/model-setups/:id/cancel'), async (_req, res, { params }) => {
|
|
47
|
-
sendJson(res, 200, await control(deps).cancel(params['id'] ?? ''));
|
|
48
|
-
});
|
|
49
|
-
router.post(p('/model-setups/:id/resume'), async (req, res, { params }) => {
|
|
50
|
-
const setups = control(deps);
|
|
51
|
-
const body = await objectBody(req);
|
|
52
|
-
sendJson(res, 200, await setups.resume(params['id'] ?? '', { proxy: body.proxy ?? null }));
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=model-setups.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-setups.js","sourceRoot":"","sources":["../../../../src/server/control/routes/model-setups.ts"],"names":[],"mappings":"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"}
|