@atomic-chat/core 0.13.2 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/backend/advisor/advisor.d.ts +8 -7
- package/dist/backend/advisor/advisor.js +17 -25
- package/dist/backend/advisor/advisor.js.map +1 -1
- package/dist/backend/catalog/index.d.ts +4 -2
- package/dist/backend/catalog/index.js +4 -2
- package/dist/backend/catalog/index.js.map +1 -1
- package/dist/backend/catalog/manifest.d.ts +5 -51
- package/dist/backend/catalog/manifest.js +5 -93
- package/dist/backend/catalog/manifest.js.map +1 -1
- package/dist/backend/catalog/upstream-releases-baseline.d.ts +2 -0
- package/dist/backend/catalog/upstream-releases-baseline.js +12 -0
- package/dist/backend/catalog/upstream-releases-baseline.js.map +1 -0
- package/dist/backend/catalog/upstream-releases-baseline.json +101 -0
- package/dist/backend/catalog/upstream-releases-catalog.d.ts +54 -0
- package/dist/backend/catalog/upstream-releases-catalog.js +148 -0
- package/dist/backend/catalog/upstream-releases-catalog.js.map +1 -0
- package/dist/backend/catalog/upstream-releases.d.ts +75 -0
- package/dist/backend/catalog/upstream-releases.js +155 -0
- package/dist/backend/catalog/upstream-releases.js.map +1 -0
- package/dist/backend/install/service.d.ts +7 -4
- package/dist/backend/install/service.js +4 -4
- package/dist/backend/install/service.js.map +1 -1
- package/dist/cli/commands/serve.js +10 -28
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +0 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/client/control-client.d.ts +7 -19
- package/dist/client/control-client.js +9 -29
- package/dist/client/control-client.js.map +1 -1
- package/dist/cloud/registry.d.ts +14 -1
- package/dist/cloud/registry.js +73 -2
- package/dist/cloud/registry.js.map +1 -1
- package/dist/config/paths.d.ts +4 -3
- package/dist/config/paths.js +15 -14
- package/dist/config/paths.js.map +1 -1
- package/dist/contracts/diffusion.d.ts +45 -18
- package/dist/contracts/diffusion.js +1 -1
- package/dist/contracts/diffusion.js.map +1 -1
- package/dist/contracts/engines.d.ts +1 -1
- package/dist/contracts/engines.js +2 -0
- package/dist/contracts/engines.js.map +1 -1
- package/dist/contracts/errors.d.ts +1 -3
- package/dist/contracts/errors.js +16 -0
- package/dist/contracts/errors.js.map +1 -1
- package/dist/contracts/events.d.ts +11 -6
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/media.d.ts +186 -0
- package/dist/contracts/media.js +55 -0
- package/dist/contracts/media.js.map +1 -0
- package/dist/contracts/session.d.ts +10 -1
- package/dist/contracts/session.js +10 -0
- package/dist/contracts/session.js.map +1 -1
- package/dist/contracts/settings.d.ts +36 -1
- package/dist/contracts/settings.js.map +1 -1
- package/dist/core/atomic-core.d.ts +7 -5
- package/dist/core/atomic-core.js +1 -0
- package/dist/core/atomic-core.js.map +1 -1
- package/dist/core/create.js +48 -58
- package/dist/core/create.js.map +1 -1
- package/dist/core/managed-engines.js +2 -0
- package/dist/core/managed-engines.js.map +1 -1
- package/dist/core/prism.d.ts +23 -6
- package/dist/core/prism.js +45 -0
- package/dist/core/prism.js.map +1 -1
- package/dist/core/public-server.js +3 -2
- package/dist/core/public-server.js.map +1 -1
- package/dist/core/types.d.ts +11 -0
- package/dist/core/types.js.map +1 -1
- package/dist/decision/process.d.ts +4 -0
- package/dist/decision/process.js +10 -1
- package/dist/decision/process.js.map +1 -1
- package/dist/diffusion/args.d.ts +3 -2
- package/dist/diffusion/args.js +21 -4
- package/dist/diffusion/args.js.map +1 -1
- package/dist/diffusion/compat.d.ts +1 -1
- package/dist/diffusion/compat.js +6 -2
- package/dist/diffusion/compat.js.map +1 -1
- package/dist/diffusion/gallery.d.ts +24 -3
- package/dist/diffusion/gallery.js +151 -21
- package/dist/diffusion/gallery.js.map +1 -1
- package/dist/diffusion/index.d.ts +3 -0
- package/dist/diffusion/index.js +3 -0
- package/dist/diffusion/index.js.map +1 -1
- package/dist/diffusion/jobs.d.ts +6 -1
- package/dist/diffusion/jobs.js +10 -1
- package/dist/diffusion/jobs.js.map +1 -1
- package/dist/diffusion/media-header.d.ts +22 -0
- package/dist/diffusion/media-header.js +149 -0
- package/dist/diffusion/media-header.js.map +1 -0
- package/dist/diffusion/parse.d.ts +3 -1
- package/dist/diffusion/parse.js +36 -0
- package/dist/diffusion/parse.js.map +1 -1
- package/dist/diffusion/recipe.d.ts +10 -1
- package/dist/diffusion/recipe.js +85 -21
- package/dist/diffusion/recipe.js.map +1 -1
- package/dist/diffusion/remote-job.d.ts +76 -0
- package/dist/diffusion/remote-job.js +643 -0
- package/dist/diffusion/remote-job.js.map +1 -0
- package/dist/diffusion/remote-store.d.ts +38 -0
- package/dist/diffusion/remote-store.js +91 -0
- package/dist/diffusion/remote-store.js.map +1 -0
- package/dist/diffusion/service.d.ts +9 -1
- package/dist/diffusion/service.js +49 -9
- package/dist/diffusion/service.js.map +1 -1
- package/dist/diffusion/state.d.ts +13 -1
- package/dist/diffusion/state.js +8 -0
- package/dist/diffusion/state.js.map +1 -1
- package/dist/diffusion/tracker.d.ts +6 -0
- package/dist/diffusion/tracker.js +11 -0
- package/dist/diffusion/tracker.js.map +1 -1
- package/dist/diffusion/validate.js +2 -2
- package/dist/diffusion/validate.js.map +1 -1
- package/dist/diffusion/video-gallery.d.ts +11 -4
- package/dist/diffusion/video-gallery.js +62 -25
- package/dist/diffusion/video-gallery.js.map +1 -1
- package/dist/diffusion/video-history.js +4 -1
- package/dist/diffusion/video-history.js.map +1 -1
- package/dist/diffusion/video-recipe.js +58 -25
- package/dist/diffusion/video-recipe.js.map +1 -1
- package/dist/diffusion/wiring.d.ts +3 -0
- package/dist/diffusion/wiring.js +1 -0
- package/dist/diffusion/wiring.js.map +1 -1
- package/dist/diffusion/workflow.d.ts +8 -2
- package/dist/diffusion/workflow.js +13 -5
- package/dist/diffusion/workflow.js.map +1 -1
- package/dist/downloads/downloader.d.ts +6 -1
- package/dist/downloads/downloader.js +12 -1
- package/dist/downloads/downloader.js.map +1 -1
- package/dist/embedding/process.d.ts +4 -0
- package/dist/embedding/process.js +10 -1
- package/dist/embedding/process.js.map +1 -1
- package/dist/media/adapters/a1111.d.ts +32 -0
- package/dist/media/adapters/a1111.js +207 -0
- package/dist/media/adapters/a1111.js.map +1 -0
- package/dist/media/adapters/aimlapi-videos.d.ts +34 -0
- package/dist/media/adapters/aimlapi-videos.js +172 -0
- package/dist/media/adapters/aimlapi-videos.js.map +1 -0
- package/dist/media/adapters/dashscope-image.d.ts +26 -0
- package/dist/media/adapters/dashscope-image.js +160 -0
- package/dist/media/adapters/dashscope-image.js.map +1 -0
- package/dist/media/adapters/dashscope-video.d.ts +47 -0
- package/dist/media/adapters/dashscope-video.js +251 -0
- package/dist/media/adapters/dashscope-video.js.map +1 -0
- package/dist/media/adapters/gemini-image.d.ts +27 -0
- package/dist/media/adapters/gemini-image.js +181 -0
- package/dist/media/adapters/gemini-image.js.map +1 -0
- package/dist/media/adapters/gemini-veo.d.ts +39 -0
- package/dist/media/adapters/gemini-veo.js +196 -0
- package/dist/media/adapters/gemini-veo.js.map +1 -0
- package/dist/media/adapters/hf-images.d.ts +85 -0
- package/dist/media/adapters/hf-images.js +439 -0
- package/dist/media/adapters/hf-images.js.map +1 -0
- package/dist/media/adapters/hf-videos.d.ts +44 -0
- package/dist/media/adapters/hf-videos.js +265 -0
- package/dist/media/adapters/hf-videos.js.map +1 -0
- package/dist/media/adapters/minimax-image.d.ts +26 -0
- package/dist/media/adapters/minimax-image.js +111 -0
- package/dist/media/adapters/minimax-image.js.map +1 -0
- package/dist/media/adapters/minimax-video-v2.d.ts +34 -0
- package/dist/media/adapters/minimax-video-v2.js +191 -0
- package/dist/media/adapters/minimax-video-v2.js.map +1 -0
- package/dist/media/adapters/minimax-video.d.ts +28 -0
- package/dist/media/adapters/minimax-video.js +155 -0
- package/dist/media/adapters/minimax-video.js.map +1 -0
- package/dist/media/adapters/mistral-agent-image.d.ts +33 -0
- package/dist/media/adapters/mistral-agent-image.js +108 -0
- package/dist/media/adapters/mistral-agent-image.js.map +1 -0
- package/dist/media/adapters/nvidia-genai.d.ts +28 -0
- package/dist/media/adapters/nvidia-genai.js +182 -0
- package/dist/media/adapters/nvidia-genai.js.map +1 -0
- package/dist/media/adapters/openai-images.d.ts +23 -0
- package/dist/media/adapters/openai-images.js +164 -0
- package/dist/media/adapters/openai-images.js.map +1 -0
- package/dist/media/adapters/openai-videos.d.ts +34 -0
- package/dist/media/adapters/openai-videos.js +175 -0
- package/dist/media/adapters/openai-videos.js.map +1 -0
- package/dist/media/adapters/openrouter-images.d.ts +25 -0
- package/dist/media/adapters/openrouter-images.js +161 -0
- package/dist/media/adapters/openrouter-images.js.map +1 -0
- package/dist/media/adapters/openrouter-videos.d.ts +43 -0
- package/dist/media/adapters/openrouter-videos.js +208 -0
- package/dist/media/adapters/openrouter-videos.js.map +1 -0
- package/dist/media/adapters/registry.d.ts +7 -0
- package/dist/media/adapters/registry.js +45 -0
- package/dist/media/adapters/registry.js.map +1 -0
- package/dist/media/adapters/types.d.ts +133 -0
- package/dist/media/adapters/types.js +15 -0
- package/dist/media/adapters/types.js.map +1 -0
- package/dist/media/adapters/xai-images.d.ts +19 -0
- package/dist/media/adapters/xai-images.js +83 -0
- package/dist/media/adapters/xai-images.js.map +1 -0
- package/dist/media/adapters/xai-videos.d.ts +29 -0
- package/dist/media/adapters/xai-videos.js +148 -0
- package/dist/media/adapters/xai-videos.js.map +1 -0
- package/dist/media/catalog-baseline.d.ts +2 -0
- package/dist/media/catalog-baseline.js +10 -0
- package/dist/media/catalog-baseline.js.map +1 -0
- package/dist/media/catalog-baseline.json +1819 -0
- package/dist/media/catalog-service.d.ts +42 -0
- package/dist/media/catalog-service.js +111 -0
- package/dist/media/catalog-service.js.map +1 -0
- package/dist/media/catalog.d.ts +50 -0
- package/dist/media/catalog.js +315 -0
- package/dist/media/catalog.js.map +1 -0
- package/dist/media/http.d.ts +125 -0
- package/dist/media/http.js +308 -0
- package/dist/media/http.js.map +1 -0
- package/dist/media/index.d.ts +14 -0
- package/dist/media/index.js +15 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/mask.d.ts +12 -0
- package/dist/media/mask.js +57 -0
- package/dist/media/mask.js.map +1 -0
- package/dist/media/service.d.ts +42 -0
- package/dist/media/service.js +144 -0
- package/dist/media/service.js.map +1 -0
- package/dist/models/compatibility/inspect.d.ts +11 -2
- package/dist/models/compatibility/inspect.js +44 -13
- package/dist/models/compatibility/inspect.js.map +1 -1
- package/dist/models/compatibility/service.d.ts +3 -0
- package/dist/models/compatibility/service.js +1 -0
- package/dist/models/compatibility/service.js.map +1 -1
- package/dist/models/gguf/tensors.d.ts +1 -0
- package/dist/models/gguf/tensors.js +4 -1
- package/dist/models/gguf/tensors.js.map +1 -1
- package/dist/models/hf.d.ts +3 -16
- package/dist/models/hf.js +4 -42
- package/dist/models/hf.js.map +1 -1
- package/dist/router/resolve.d.ts +15 -4
- package/dist/router/resolve.js +25 -3
- package/dist/router/resolve.js.map +1 -1
- package/dist/runtime/environment/linux-provisioner.js +7 -67
- package/dist/runtime/environment/linux-provisioner.js.map +1 -1
- package/dist/runtime/environment/runtime-removal-plan.d.ts +19 -0
- package/dist/runtime/environment/runtime-removal-plan.js +74 -0
- package/dist/runtime/environment/runtime-removal-plan.js.map +1 -0
- package/dist/runtime/environment/windows-provisioner.js +20 -4
- package/dist/runtime/environment/windows-provisioner.js.map +1 -1
- package/dist/runtime/managed-engines/spec.d.ts +2 -2
- package/dist/runtime/managed-engines/spec.js +6 -0
- package/dist/runtime/managed-engines/spec.js.map +1 -1
- package/dist/runtime/managed-models/compatibility.d.ts +10 -0
- package/dist/runtime/managed-models/compatibility.js +18 -0
- package/dist/runtime/managed-models/compatibility.js.map +1 -1
- package/dist/runtime/managed-text/adapter.d.ts +17 -0
- package/dist/runtime/managed-text/adapter.js.map +1 -1
- package/dist/runtime/managed-text/lifecycle.d.ts +8 -0
- package/dist/runtime/managed-text/lifecycle.js +38 -1
- package/dist/runtime/managed-text/lifecycle.js.map +1 -1
- package/dist/runtime/managed-text/readiness.d.ts +21 -1
- package/dist/runtime/managed-text/readiness.js +64 -0
- package/dist/runtime/managed-text/readiness.js.map +1 -1
- package/dist/runtime/managed-text/request-rules.d.ts +9 -7
- package/dist/runtime/managed-text/request-rules.js +58 -2
- package/dist/runtime/managed-text/request-rules.js.map +1 -1
- package/dist/runtime/managed-text/setting-values.d.ts +9 -0
- package/dist/runtime/managed-text/setting-values.js +44 -0
- package/dist/runtime/managed-text/setting-values.js.map +1 -0
- package/dist/runtime/sglang/adapter.d.ts +50 -0
- package/dist/runtime/sglang/adapter.js +393 -0
- package/dist/runtime/sglang/adapter.js.map +1 -0
- package/dist/runtime/sglang/engine.d.ts +16 -0
- package/dist/runtime/sglang/engine.js +38 -0
- package/dist/runtime/sglang/engine.js.map +1 -0
- package/dist/runtime/sglang/index.d.ts +11 -0
- package/dist/runtime/sglang/index.js +12 -0
- package/dist/runtime/sglang/index.js.map +1 -0
- package/dist/runtime/sglang/memory.d.ts +64 -0
- package/dist/runtime/sglang/memory.js +90 -0
- package/dist/runtime/sglang/memory.js.map +1 -0
- package/dist/runtime/sglang/settings.d.ts +49 -0
- package/dist/runtime/sglang/settings.js +118 -0
- package/dist/runtime/sglang/settings.js.map +1 -0
- package/dist/runtime/shared/external-sessions.js +1 -0
- package/dist/runtime/shared/external-sessions.js.map +1 -1
- package/dist/runtime/shared/ports.d.ts +10 -0
- package/dist/runtime/shared/ports.js +30 -0
- package/dist/runtime/shared/ports.js.map +1 -1
- package/dist/runtime/tensorrt-llm/adapter.d.ts +1 -4
- package/dist/runtime/tensorrt-llm/adapter.js +28 -11
- package/dist/runtime/tensorrt-llm/adapter.js.map +1 -1
- package/dist/runtime/tensorrt-llm/check.js +1 -0
- package/dist/runtime/tensorrt-llm/check.js.map +1 -1
- package/dist/runtime/tensorrt-llm/compatibility.d.ts +30 -6
- package/dist/runtime/tensorrt-llm/compatibility.js +41 -9
- package/dist/runtime/tensorrt-llm/compatibility.js.map +1 -1
- package/dist/runtime/tensorrt-llm/cuda-graphs.d.ts +32 -0
- package/dist/runtime/tensorrt-llm/cuda-graphs.js +33 -0
- package/dist/runtime/tensorrt-llm/cuda-graphs.js.map +1 -0
- package/dist/runtime/tensorrt-llm/engine.js +11 -5
- package/dist/runtime/tensorrt-llm/engine.js.map +1 -1
- package/dist/runtime/tensorrt-llm/kv-cache.d.ts +16 -0
- package/dist/runtime/tensorrt-llm/kv-cache.js +21 -1
- package/dist/runtime/tensorrt-llm/kv-cache.js.map +1 -1
- package/dist/runtime/vllm/adapter.js +2 -47
- package/dist/runtime/vllm/adapter.js.map +1 -1
- package/dist/runtime/vllm/memory.js +3 -16
- package/dist/runtime/vllm/memory.js.map +1 -1
- package/dist/runtime/vllm/settings.d.ts +7 -0
- package/dist/runtime/vllm/settings.js +2 -30
- package/dist/runtime/vllm/settings.js.map +1 -1
- package/dist/server/control/router.js +5 -4
- package/dist/server/control/router.js.map +1 -1
- package/dist/server/control/routes/media.d.ts +9 -0
- package/dist/server/control/routes/media.js +24 -0
- package/dist/server/control/routes/media.js.map +1 -0
- package/dist/server/control/routes/model-compatibility.d.ts +9 -0
- package/dist/server/control/routes/model-compatibility.js +31 -0
- package/dist/server/control/routes/model-compatibility.js.map +1 -0
- package/dist/server/control/types.d.ts +18 -20
- package/dist/server/http.js +15 -2
- package/dist/server/http.js.map +1 -1
- package/dist/server/public/gates.d.ts +6 -1
- package/dist/server/public/gates.js +7 -3
- package/dist/server/public/gates.js.map +1 -1
- package/dist/server/public/images-params.js +18 -1
- package/dist/server/public/images-params.js.map +1 -1
- package/dist/server/public/images.d.ts +11 -2
- package/dist/server/public/images.js +73 -9
- package/dist/server/public/images.js.map +1 -1
- package/dist/server/public/index.d.ts +1 -0
- package/dist/server/public/index.js +16 -7
- package/dist/server/public/index.js.map +1 -1
- package/dist/server/public/listing.js +1 -0
- package/dist/server/public/listing.js.map +1 -1
- package/dist/server/public/remote-media.d.ts +51 -0
- package/dist/server/public/remote-media.js +225 -0
- package/dist/server/public/remote-media.js.map +1 -0
- package/dist/server/public/responses.js +4 -2
- package/dist/server/public/responses.js.map +1 -1
- package/dist/server/public/static-assets.generated.js +1 -1
- package/dist/server/public/static-assets.generated.js.map +1 -1
- package/dist/server/public/trace.js +2 -0
- package/dist/server/public/trace.js.map +1 -1
- package/dist/server/public/types.d.ts +12 -1
- package/dist/server/public/videos-params.js +13 -3
- package/dist/server/public/videos-params.js.map +1 -1
- package/dist/server/public/videos.d.ts +1 -0
- package/dist/server/public/videos.js +21 -3
- package/dist/server/public/videos.js.map +1 -1
- package/dist/settings/schema/llamacpp-upstream.json +9 -0
- package/dist/settings/schema/sglang.json +251 -0
- package/dist/settings/schema.js +27 -1
- package/dist/settings/schema.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -6
- package/src/settings/schema/llamacpp-upstream.json +9 -0
- package/src/settings/schema/sglang.json +251 -0
- package/dist/backend/catalog/bundled-manifest-baseline.d.ts +0 -2
- package/dist/backend/catalog/bundled-manifest-baseline.js +0 -65
- package/dist/backend/catalog/bundled-manifest-baseline.js.map +0 -1
- package/dist/contracts/model-setup.d.ts +0 -115
- package/dist/contracts/model-setup.js +0 -33
- package/dist/contracts/model-setup.js.map +0 -1
- package/dist/core/model-setup/index.d.ts +0 -4
- package/dist/core/model-setup/index.js +0 -5
- package/dist/core/model-setup/index.js.map +0 -1
- package/dist/core/model-setup/plan.d.ts +0 -56
- package/dist/core/model-setup/plan.js +0 -158
- package/dist/core/model-setup/plan.js.map +0 -1
- package/dist/core/model-setup/service.d.ts +0 -92
- package/dist/core/model-setup/service.js +0 -329
- package/dist/core/model-setup/service.js.map +0 -1
- package/dist/core/model-setup/store.d.ts +0 -29
- package/dist/core/model-setup/store.js +0 -116
- package/dist/core/model-setup/store.js.map +0 -1
- package/dist/core/model-setup/wiring.d.ts +0 -59
- package/dist/core/model-setup/wiring.js +0 -132
- package/dist/core/model-setup/wiring.js.map +0 -1
- package/dist/server/control/routes/model-setups.d.ts +0 -11
- package/dist/server/control/routes/model-setups.js +0 -55
- package/dist/server/control/routes/model-setups.js.map +0 -1
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aimlapi-videos`: AIMLAPI's video API. The provider is registered with `https://api.aimlapi.com/v1`;
|
|
3
|
+
* video lives on `/v2` of the same server, so `{video}` is the base with its trailing version
|
|
4
|
+
* segment swapped for `/v2/video/generations` (`https://api.aimlapi.com/v2/video/generations`).
|
|
5
|
+
*
|
|
6
|
+
* - submit: `POST {video}`, JSON `{model, prompt, duration, aspect_ratio, resolution, generate_audio,
|
|
7
|
+
* seed, negative_prompt, image_url}` → `{id, status}`. The first frame goes as a data URL in
|
|
8
|
+
* `image_url` (the field most of its image-to-video models take), or in the field the model's
|
|
9
|
+
* `options.image_field` names; a last frame only into the field `options.last_frame_field` names.
|
|
10
|
+
* - poll: `GET {video}?generation_id={id}` → `queued | generating | completed | error` (also
|
|
11
|
+
* `waiting`, `active`), `video: {url}`, `error: {name, message}`.
|
|
12
|
+
* - download: `video.url`, a file on AIMLAPI's CDN; off the API's origin it goes without the key.
|
|
13
|
+
* - models: `GET {base}/models`, the entries typed `internal/video-generations/submit`. An id that
|
|
14
|
+
* says image to video (`-i2v`, `image-to-video`) takes only that workflow, one that says text to
|
|
15
|
+
* video only `create`; models that need a video, references or a voice are left out.
|
|
16
|
+
*
|
|
17
|
+
* No cancel: AIMLAPI has none.
|
|
18
|
+
*/
|
|
19
|
+
import { callProvider, downloadResult, joinUrl, MAX_VIDEO_BYTES, remoteError, sniffVideoMime, toDataUrl, } from '../http.js';
|
|
20
|
+
const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
21
|
+
const BLOCKED = /moderation|content[ _-]?polic|safety|nsfw|sensitive|prohibited|blocked|flagged/i;
|
|
22
|
+
const VIDEO_TYPE = 'internal/video-generations/submit';
|
|
23
|
+
const IMAGE_TO_VIDEO = /(^|[-/_.])(i2v|image-to-video)([-/_.]|$)/i;
|
|
24
|
+
const TEXT_TO_VIDEO = /(^|[-/_.])(t2v|text-to-video)([-/_.]|$)/i;
|
|
25
|
+
/** Models whose input is a video, reference images, a pose or a voice: nothing the form gives. */
|
|
26
|
+
const OTHER_INPUTS = /(^|[-/_.])(v2v|r2v|video-to-video|reference-to-video|extend-video|video-edit|motion-control|vace|foley|avatar|omnihuman|animate)([-/_.]|$)/i;
|
|
27
|
+
/** `POST`/`GET` URL of AIMLAPI's video API: the registered base with `/v2/video/generations` for its version. */
|
|
28
|
+
export function aimlapiVideoUrl(baseUrl) {
|
|
29
|
+
return joinUrl(baseUrl.replace(/\/+$/, '').replace(/\/v\d+$/, ''), '/v2/video/generations');
|
|
30
|
+
}
|
|
31
|
+
/** The submit body: each field only when the job set it and the model offers it; frames as data URLs. */
|
|
32
|
+
export function aimlapiVideoBody(job, provider = 'AIMLAPI') {
|
|
33
|
+
const params = job.model.params;
|
|
34
|
+
const options = job.model.options ?? {};
|
|
35
|
+
const body = { model: job.model.id, prompt: job.prompt };
|
|
36
|
+
if (job.durationSecs !== undefined && params.durations)
|
|
37
|
+
body['duration'] = Math.round(job.durationSecs);
|
|
38
|
+
if (job.aspectRatio && params.aspect_ratios)
|
|
39
|
+
body['aspect_ratio'] = job.aspectRatio;
|
|
40
|
+
if (job.resolution && params.resolutions)
|
|
41
|
+
body['resolution'] = job.resolution;
|
|
42
|
+
if (job.generateAudio !== undefined && params.audio)
|
|
43
|
+
body['generate_audio'] = job.generateAudio;
|
|
44
|
+
if (job.seed !== undefined && params.seed)
|
|
45
|
+
body['seed'] = job.seed;
|
|
46
|
+
if (job.negativePrompt && params.negative_prompt)
|
|
47
|
+
body['negative_prompt'] = job.negativePrompt;
|
|
48
|
+
if (job.workflow === 'image-to-video') {
|
|
49
|
+
if (!job.firstFrame)
|
|
50
|
+
throw remoteError('REMOTE_UNSUPPORTED', 'Image to video needs a first frame.', job.workflow);
|
|
51
|
+
const field = typeof options['image_field'] === 'string' && options['image_field']
|
|
52
|
+
? options['image_field']
|
|
53
|
+
: 'image_url';
|
|
54
|
+
body[field] = toDataUrl(job.firstFrame.bytes, job.firstFrame.mime);
|
|
55
|
+
if (job.lastFrame) {
|
|
56
|
+
const last = options['last_frame_field'];
|
|
57
|
+
if (!params.last_frame || typeof last !== 'string' || last === '')
|
|
58
|
+
throw remoteError('REMOTE_UNSUPPORTED', `${provider} takes no last frame for this model.`, job.model.id);
|
|
59
|
+
body[last] = toDataUrl(job.lastFrame.bytes, job.lastFrame.mime);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return body;
|
|
63
|
+
}
|
|
64
|
+
/** A generation's `error: {name, message}` as the closest `REMOTE_*` code. */
|
|
65
|
+
export function aimlapiVideoError(provider, error) {
|
|
66
|
+
const fields = isObject(error) ? error : {};
|
|
67
|
+
const name = typeof fields['name'] === 'string' ? fields['name'] : '';
|
|
68
|
+
const said = typeof fields['message'] === 'string' && fields['message'].trim() !== ''
|
|
69
|
+
? fields['message'].trim()
|
|
70
|
+
: typeof error === 'string' && error.trim() !== ''
|
|
71
|
+
? error.trim()
|
|
72
|
+
: '';
|
|
73
|
+
const details = [name, said].filter(Boolean).join(': ') || undefined;
|
|
74
|
+
if (BLOCKED.test(`${name} ${said}`))
|
|
75
|
+
return remoteError('REMOTE_CONTENT_BLOCKED', `${provider} refused the request: ${said || name}`, details);
|
|
76
|
+
if (/invalid|validation|bad.?request|unprocessable/i.test(name))
|
|
77
|
+
return remoteError('REMOTE_REJECTED', said ? `${provider}: ${said}` : `${provider} refused the request.`, details);
|
|
78
|
+
return remoteError('REMOTE_UNAVAILABLE', said ? `${provider} failed to make the clip: ${said}` : `${provider} failed to make the clip.`, details);
|
|
79
|
+
}
|
|
80
|
+
/** One generation answer (the submit's or a poll's) as a poll result. */
|
|
81
|
+
export function readAimlapiVideo(provider, json) {
|
|
82
|
+
const fields = isObject(json) ? json : {};
|
|
83
|
+
const status = typeof fields['status'] === 'string' ? fields['status'].toLowerCase() : '';
|
|
84
|
+
switch (status) {
|
|
85
|
+
case 'queued':
|
|
86
|
+
case 'waiting':
|
|
87
|
+
case 'pending':
|
|
88
|
+
return { state: 'queued' };
|
|
89
|
+
case 'completed':
|
|
90
|
+
case 'succeeded':
|
|
91
|
+
case 'success': {
|
|
92
|
+
const video = fields['video'];
|
|
93
|
+
const url = isObject(video) && typeof video['url'] === 'string'
|
|
94
|
+
? video['url']
|
|
95
|
+
: typeof video === 'string'
|
|
96
|
+
? video
|
|
97
|
+
: '';
|
|
98
|
+
return url !== ''
|
|
99
|
+
? { state: 'completed', result: { url } }
|
|
100
|
+
: {
|
|
101
|
+
state: 'failed',
|
|
102
|
+
error: remoteError('REMOTE_UNAVAILABLE', `${provider} finished without a clip.`),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
case 'error':
|
|
106
|
+
case 'failed':
|
|
107
|
+
return { state: 'failed', error: aimlapiVideoError(provider, fields['error']) };
|
|
108
|
+
default:
|
|
109
|
+
// `generating`, `active`, and whatever comes next.
|
|
110
|
+
return { state: 'running' };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** The video models of AIMLAPI's `GET {base}/models`, with the workflow their id names. */
|
|
114
|
+
export function aimlapiVideoModels(json) {
|
|
115
|
+
const data = isObject(json) ? json['data'] : json;
|
|
116
|
+
const out = [];
|
|
117
|
+
const seen = new Set();
|
|
118
|
+
for (const item of Array.isArray(data) ? data : []) {
|
|
119
|
+
if (!isObject(item) || item['type'] !== VIDEO_TYPE)
|
|
120
|
+
continue;
|
|
121
|
+
const id = item['id'];
|
|
122
|
+
if (typeof id !== 'string' || id === '' || seen.has(id) || OTHER_INPUTS.test(id))
|
|
123
|
+
continue;
|
|
124
|
+
seen.add(id);
|
|
125
|
+
const model = { id };
|
|
126
|
+
const info = isObject(item['info']) ? item['info'] : {};
|
|
127
|
+
if (typeof info['name'] === 'string' && info['name'] !== '')
|
|
128
|
+
model.name = info['name'];
|
|
129
|
+
if (IMAGE_TO_VIDEO.test(id))
|
|
130
|
+
model.workflows = ['image-to-video'];
|
|
131
|
+
else if (TEXT_TO_VIDEO.test(id))
|
|
132
|
+
model.workflows = ['create'];
|
|
133
|
+
out.push(model);
|
|
134
|
+
}
|
|
135
|
+
return out;
|
|
136
|
+
}
|
|
137
|
+
export const AIMLAPI_VIDEOS = {
|
|
138
|
+
dialect: 'aimlapi-videos',
|
|
139
|
+
kind: 'video',
|
|
140
|
+
pollIntervalMs: { first: 5_000, max: 20_000 },
|
|
141
|
+
async listModels(ctx) {
|
|
142
|
+
const answer = await callProvider(ctx, joinUrl(ctx.baseUrl, '/models'));
|
|
143
|
+
return aimlapiVideoModels(answer.json);
|
|
144
|
+
},
|
|
145
|
+
async submit(ctx, job) {
|
|
146
|
+
const body = aimlapiVideoBody(job, ctx.provider);
|
|
147
|
+
const answer = await callProvider(ctx, aimlapiVideoUrl(ctx.baseUrl), { json: body });
|
|
148
|
+
const fields = isObject(answer.json) ? answer.json : {};
|
|
149
|
+
const id = fields['id'] ?? fields['generation_id'];
|
|
150
|
+
if (typeof id !== 'string' || id === '')
|
|
151
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} answered without a generation id.`, answer.text.slice(0, 500));
|
|
152
|
+
const status = typeof fields['status'] === 'string' ? fields['status'].toLowerCase() : '';
|
|
153
|
+
if (status === 'error' || status === 'failed')
|
|
154
|
+
throw aimlapiVideoError(ctx.provider, fields['error']);
|
|
155
|
+
return { id };
|
|
156
|
+
},
|
|
157
|
+
async poll(ctx, submission) {
|
|
158
|
+
const url = `${aimlapiVideoUrl(ctx.baseUrl)}?generation_id=${encodeURIComponent(submission.id)}`;
|
|
159
|
+
const answer = await callProvider(ctx, url);
|
|
160
|
+
return readAimlapiVideo(ctx.provider, answer.json);
|
|
161
|
+
},
|
|
162
|
+
async download(ctx, _submission, result) {
|
|
163
|
+
if (!result.url)
|
|
164
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} gave no clip to download.`);
|
|
165
|
+
const file = await downloadResult(ctx, result.url, { maxBytes: MAX_VIDEO_BYTES, what: 'video' });
|
|
166
|
+
const mime = sniffVideoMime(file.bytes);
|
|
167
|
+
if (!mime)
|
|
168
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} returned a file that is not a video.`);
|
|
169
|
+
return { bytes: file.bytes, mime };
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=aimlapi-videos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aimlapi-videos.js","sourceRoot":"","sources":["../../../src/media/adapters/aimlapi-videos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,eAAe,EACf,WAAW,EACX,cAAc,EACd,SAAS,GACV,MAAM,YAAY,CAAA;AAKnB,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CACnD,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAEtE,MAAM,OAAO,GAAG,iFAAiF,CAAA;AAEjG,MAAM,UAAU,GAAG,mCAAmC,CAAA;AACtD,MAAM,cAAc,GAAG,2CAA2C,CAAA;AAClE,MAAM,aAAa,GAAG,0CAA0C,CAAA;AAChE,kGAAkG;AAClG,MAAM,YAAY,GAChB,6IAA6I,CAAA;AAE/I,iHAAiH;AACjH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAA;AAC7F,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,gBAAgB,CAAC,GAAuB,EAAE,QAAQ,GAAG,SAAS;IAC5E,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAA;IAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAA;IACvC,MAAM,IAAI,GAAW,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;IAChE,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS;QAAE,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IACvG,IAAI,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,aAAa;QAAE,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,WAAW,CAAA;IACnF,IAAI,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW;QAAE,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,UAAU,CAAA;IAC7E,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK;QAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAAC,aAAa,CAAA;IAC/F,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI;QAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAA;IAClE,IAAI,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,eAAe;QAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,cAAc,CAAA;IAC9F,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,UAAU;YACjB,MAAM,WAAW,CAAC,oBAAoB,EAAE,qCAAqC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9F,MAAM,KAAK,GACT,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;YAClE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YACxB,CAAC,CAAC,WAAW,CAAA;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAClE,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE;gBAC/D,MAAM,WAAW,CACf,oBAAoB,EACpB,GAAG,QAAQ,sCAAsC,EACjD,GAAG,CAAC,KAAK,CAAC,EAAE,CACb,CAAA;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,KAAc;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3C,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrE,MAAM,IAAI,GACR,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QACtE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;QAC1B,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;YAChD,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YACd,CAAC,CAAC,EAAE,CAAA;IACV,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;IACpE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;QACjC,OAAO,WAAW,CAAC,wBAAwB,EAAE,GAAG,QAAQ,yBAAyB,IAAI,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;IAC3G,IAAI,gDAAgD,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7D,OAAO,WAAW,CAChB,iBAAiB,EACjB,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,uBAAuB,EAClE,OAAO,CACR,CAAA;IACH,OAAO,WAAW,CAChB,oBAAoB,EACpB,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,6BAA6B,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,2BAA2B,EAC9F,OAAO,CACR,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,IAAa;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACzC,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACzF,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;QAC5B,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;YAC7B,MAAM,GAAG,GACP,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ;gBACjD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBACd,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;oBACzB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,EAAE,CAAA;YACV,OAAO,GAAG,KAAK,EAAE;gBACf,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;gBACzC,CAAC,CAAC;oBACE,KAAK,EAAE,QAAQ;oBACf,KAAK,EAAE,WAAW,CAAC,oBAAoB,EAAE,GAAG,QAAQ,2BAA2B,CAAC;iBACjF,CAAA;QACP,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAA;QACjF;YACE,mDAAmD;YACnD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,MAAM,GAAG,GAAqB,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU;YAAE,SAAQ;QAC5D,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAQ;QAC1F,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACZ,MAAM,KAAK,GAAmB,EAAE,EAAE,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QACtF,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,SAAS,GAAG,CAAC,gBAAgB,CAAC,CAAA;aAC5D,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC7D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,OAAO,EAAE,gBAAgB;IACzB,IAAI,EAAE,OAAO;IACb,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;IAE7C,KAAK,CAAC,UAAU,CAAC,GAAG;QAClB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;QACvE,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG;QACnB,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACpF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,CAAA;QAClD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE;YACrC,MAAM,WAAW,CACf,oBAAoB,EACpB,GAAG,GAAG,CAAC,QAAQ,oCAAoC,EACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAC1B,CAAA;QACH,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACzF,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ;YAAE,MAAM,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QACrG,OAAO,EAAE,EAAE,EAAE,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU;QACxB,MAAM,GAAG,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAA;QAChG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC3C,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,MAAM,WAAW,CAAC,oBAAoB,EAAE,GAAG,GAAG,CAAC,QAAQ,4BAA4B,CAAC,CAAA;QACrG,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAChG,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI;YAAE,MAAM,WAAW,CAAC,oBAAoB,EAAE,GAAG,GAAG,CAAC,QAAQ,uCAAuC,CAAC,CAAA;QAC1G,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;IACpC,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dashscope-image`: Alibaba Model Studio (DashScope) image models — Qwen-Image and Wan image — on the
|
|
3
|
+
* native API, Bearer key.
|
|
4
|
+
*
|
|
5
|
+
* The provider is registered with its OpenAI-compatible base
|
|
6
|
+
* `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`; the native API lives on the same origin
|
|
7
|
+
* (the base cut after its host) under `/api/v1`. Every workflow (`create`, `edit`, `reference`) is
|
|
8
|
+
* the synchronous `POST {origin}/api/v1/services/aigc/multimodal-generation/generation`: one user
|
|
9
|
+
* message whose content is the input images (data URLs, the source first) and then the prompt. The
|
|
10
|
+
* answer points at signed image URLs on Alibaba's storage, downloaded without the key. The listing is
|
|
11
|
+
* `GET {origin}/api/v1/models?capabilities=IG`.
|
|
12
|
+
*/
|
|
13
|
+
import type { AtomicCoreError } from '../../contracts/index.js';
|
|
14
|
+
import type { LiveMediaModel } from '../catalog.js';
|
|
15
|
+
import type { ImageAdapter, ImageGenerationJob } from './types.js';
|
|
16
|
+
/** The native API's origin from the registered base: everything after the host goes. */
|
|
17
|
+
export declare function dashscopeOrigin(baseUrl: string): string;
|
|
18
|
+
/** The JSON body of a multimodal generation. */
|
|
19
|
+
export declare function dashscopeImageBody(job: ImageGenerationJob): Record<string, unknown>;
|
|
20
|
+
/** Every image URL of an answer, across all its choices. */
|
|
21
|
+
export declare function dashscopeImageUrls(json: unknown): string[];
|
|
22
|
+
/** DashScope's error body (`{code, message, request_id}`) as the closest `REMOTE_*` error. */
|
|
23
|
+
export declare function dashscopeError(provider: string, status: number, json: unknown, body?: string): AtomicCoreError;
|
|
24
|
+
/** The models of the native listing (`output.models[]`, or `data[]`), by `model` or `id`. */
|
|
25
|
+
export declare function dashscopeImageModels(json: unknown): LiveMediaModel[];
|
|
26
|
+
export declare const DASHSCOPE_IMAGE: ImageAdapter;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dashscope-image`: Alibaba Model Studio (DashScope) image models — Qwen-Image and Wan image — on the
|
|
3
|
+
* native API, Bearer key.
|
|
4
|
+
*
|
|
5
|
+
* The provider is registered with its OpenAI-compatible base
|
|
6
|
+
* `https://dashscope-intl.aliyuncs.com/compatible-mode/v1`; the native API lives on the same origin
|
|
7
|
+
* (the base cut after its host) under `/api/v1`. Every workflow (`create`, `edit`, `reference`) is
|
|
8
|
+
* the synchronous `POST {origin}/api/v1/services/aigc/multimodal-generation/generation`: one user
|
|
9
|
+
* message whose content is the input images (data URLs, the source first) and then the prompt. The
|
|
10
|
+
* answer points at signed image URLs on Alibaba's storage, downloaded without the key. The listing is
|
|
11
|
+
* `GET {origin}/api/v1/models?capabilities=IG`.
|
|
12
|
+
*/
|
|
13
|
+
import { callProvider, downloadResult, GENERATE_TIMEOUT_MS, MAX_IMAGE_BYTES, originOf, parseWxH, providerMessage, remoteError, remoteHttpError, sniffImageMime, toDataUrl, } from '../http.js';
|
|
14
|
+
const WORKFLOWS = ['create', 'edit', 'reference'];
|
|
15
|
+
const GENERATION_PATH = '/api/v1/services/aigc/multimodal-generation/generation';
|
|
16
|
+
/** Error codes (and words) DashScope uses when its content check refused the input or the output. */
|
|
17
|
+
const BLOCKED = /DataInspection|data_inspection|IPInfringement|inappropriate/i;
|
|
18
|
+
const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
19
|
+
const text = (value) => typeof value === 'string' && value !== '' ? value : undefined;
|
|
20
|
+
/** The native API's origin from the registered base: everything after the host goes. */
|
|
21
|
+
export function dashscopeOrigin(baseUrl) {
|
|
22
|
+
const origin = originOf(baseUrl);
|
|
23
|
+
if (!origin)
|
|
24
|
+
throw remoteError('REMOTE_NOT_CONFIGURED', 'The provider base URL is not a URL.', baseUrl);
|
|
25
|
+
return origin;
|
|
26
|
+
}
|
|
27
|
+
/** `size` as DashScope writes it: `W*H`, or a tier (`1K`, `2K`, `4K`) for a model that takes one. */
|
|
28
|
+
function sizeOf(job) {
|
|
29
|
+
const pixels = job.width && job.height ? { width: job.width, height: job.height } : parseWxH(job.size);
|
|
30
|
+
if (pixels)
|
|
31
|
+
return `${pixels.width}*${pixels.height}`;
|
|
32
|
+
return job.resolution || undefined;
|
|
33
|
+
}
|
|
34
|
+
/** The JSON body of a multimodal generation. */
|
|
35
|
+
export function dashscopeImageBody(job) {
|
|
36
|
+
const content = [];
|
|
37
|
+
if (job.workflow !== 'create')
|
|
38
|
+
for (const image of job.images)
|
|
39
|
+
content.push({ image: toDataUrl(image.bytes, image.mime) });
|
|
40
|
+
content.push({ text: job.prompt });
|
|
41
|
+
const parameters = { n: Math.max(1, job.n) };
|
|
42
|
+
const size = sizeOf(job);
|
|
43
|
+
if (size)
|
|
44
|
+
parameters['size'] = size;
|
|
45
|
+
if (job.negativePrompt && job.model.params.negative_prompt)
|
|
46
|
+
parameters['negative_prompt'] = job.negativePrompt;
|
|
47
|
+
parameters['prompt_extend'] = false;
|
|
48
|
+
parameters['watermark'] = false;
|
|
49
|
+
if (job.seed !== undefined && job.model.params.seed)
|
|
50
|
+
parameters['seed'] = job.seed;
|
|
51
|
+
return { model: job.model.id, input: { messages: [{ role: 'user', content }] }, parameters };
|
|
52
|
+
}
|
|
53
|
+
/** Every image URL of an answer, across all its choices. */
|
|
54
|
+
export function dashscopeImageUrls(json) {
|
|
55
|
+
const output = isObject(json) && isObject(json['output']) ? json['output'] : {};
|
|
56
|
+
const choices = Array.isArray(output['choices']) ? output['choices'] : [];
|
|
57
|
+
const urls = [];
|
|
58
|
+
for (const choice of choices) {
|
|
59
|
+
const message = isObject(choice) && isObject(choice['message']) ? choice['message'] : {};
|
|
60
|
+
const content = Array.isArray(message['content']) ? message['content'] : [];
|
|
61
|
+
for (const item of content) {
|
|
62
|
+
const url = isObject(item) ? text(item['image']) : undefined;
|
|
63
|
+
if (url)
|
|
64
|
+
urls.push(url);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return urls;
|
|
68
|
+
}
|
|
69
|
+
/** DashScope's error body (`{code, message, request_id}`) as the closest `REMOTE_*` error. */
|
|
70
|
+
export function dashscopeError(provider, status, json, body = '') {
|
|
71
|
+
const code = isObject(json) ? text(json['code']) : undefined;
|
|
72
|
+
const said = providerMessage(json, body);
|
|
73
|
+
const details = `HTTP ${status}${code ? ` ${code}` : ''}${said ? `: ${said}` : ''}`;
|
|
74
|
+
if ((code && BLOCKED.test(code)) || (said && BLOCKED.test(said)))
|
|
75
|
+
return remoteError('REMOTE_CONTENT_BLOCKED', `${provider} refused the request: ${said ?? code}`, details);
|
|
76
|
+
if (code === 'Arrearage')
|
|
77
|
+
return remoteError('REMOTE_QUOTA', `${provider} says the account is out of credit.`, details);
|
|
78
|
+
// The status decides the rest; the details keep DashScope's code.
|
|
79
|
+
const mapped = remoteHttpError(provider, status, json, body);
|
|
80
|
+
return remoteError(mapped.code, mapped.message, details);
|
|
81
|
+
}
|
|
82
|
+
/** The models of the native listing (`output.models[]`, or `data[]`), by `model` or `id`. */
|
|
83
|
+
export function dashscopeImageModels(json) {
|
|
84
|
+
const output = isObject(json) && isObject(json['output']) ? json['output'] : {};
|
|
85
|
+
const list = Array.isArray(output['models'])
|
|
86
|
+
? output['models']
|
|
87
|
+
: isObject(json) && Array.isArray(json['data'])
|
|
88
|
+
? json['data']
|
|
89
|
+
: isObject(json) && Array.isArray(json['models'])
|
|
90
|
+
? json['models']
|
|
91
|
+
: [];
|
|
92
|
+
const out = [];
|
|
93
|
+
const seen = new Set();
|
|
94
|
+
for (const item of list) {
|
|
95
|
+
if (!isObject(item))
|
|
96
|
+
continue;
|
|
97
|
+
const id = text(item['model']) ?? text(item['id']);
|
|
98
|
+
if (!id || seen.has(id))
|
|
99
|
+
continue;
|
|
100
|
+
seen.add(id);
|
|
101
|
+
const model = { id };
|
|
102
|
+
const name = text(item['name']);
|
|
103
|
+
if (name && name !== id)
|
|
104
|
+
model.name = name;
|
|
105
|
+
const description = text(item['description']);
|
|
106
|
+
if (description)
|
|
107
|
+
model.description = description;
|
|
108
|
+
out.push(model);
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
/** A file the provider pointed at, with the type its bytes say. Local: `http.ts` has no such helper. */
|
|
113
|
+
async function downloadImage(ctx, url) {
|
|
114
|
+
const file = await downloadResult(ctx, url, { maxBytes: MAX_IMAGE_BYTES, what: 'image' });
|
|
115
|
+
const mime = sniffImageMime(file.bytes);
|
|
116
|
+
if (!mime)
|
|
117
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} returned a file that is not an image.`);
|
|
118
|
+
return { bytes: file.bytes, mime };
|
|
119
|
+
}
|
|
120
|
+
export const DASHSCOPE_IMAGE = {
|
|
121
|
+
dialect: 'dashscope-image',
|
|
122
|
+
kind: 'image',
|
|
123
|
+
async listModels(ctx) {
|
|
124
|
+
const query = new URLSearchParams({ page_no: '1', page_size: '100', capabilities: 'IG' });
|
|
125
|
+
const url = `${dashscopeOrigin(ctx.baseUrl)}/api/v1/models?${query.toString()}`;
|
|
126
|
+
const answer = await callProvider(ctx, url, { accept: [400, 404] });
|
|
127
|
+
if (answer.status === 404)
|
|
128
|
+
return [];
|
|
129
|
+
if (answer.status === 400)
|
|
130
|
+
throw dashscopeError(ctx.provider, answer.status, answer.json, answer.text);
|
|
131
|
+
return dashscopeImageModels(answer.json);
|
|
132
|
+
},
|
|
133
|
+
async generate(ctx, job, report) {
|
|
134
|
+
if (!WORKFLOWS.includes(job.workflow))
|
|
135
|
+
throw remoteError('REMOTE_UNSUPPORTED', `${ctx.provider} does not support this workflow.`, job.workflow);
|
|
136
|
+
if (job.workflow !== 'create' && job.images.length === 0)
|
|
137
|
+
throw remoteError('REMOTE_UNSUPPORTED', 'This workflow needs a source image.', job.workflow);
|
|
138
|
+
const url = `${dashscopeOrigin(ctx.baseUrl)}${GENERATION_PATH}`;
|
|
139
|
+
report({ phase: 'generating' });
|
|
140
|
+
const answer = await callProvider(ctx, url, {
|
|
141
|
+
json: dashscopeImageBody(job),
|
|
142
|
+
timeoutMs: GENERATE_TIMEOUT_MS,
|
|
143
|
+
accept: [400],
|
|
144
|
+
});
|
|
145
|
+
if (answer.status === 400)
|
|
146
|
+
throw dashscopeError(ctx.provider, answer.status, answer.json, answer.text);
|
|
147
|
+
const urls = dashscopeImageUrls(answer.json);
|
|
148
|
+
if (urls.length === 0) {
|
|
149
|
+
// A 200 that carries an error code instead of images.
|
|
150
|
+
if (isObject(answer.json) && text(answer.json['code']))
|
|
151
|
+
throw dashscopeError(ctx.provider, 400, answer.json, answer.text);
|
|
152
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} answered without an image.`);
|
|
153
|
+
}
|
|
154
|
+
const out = [];
|
|
155
|
+
for (const image of urls)
|
|
156
|
+
out.push(await downloadImage(ctx, image));
|
|
157
|
+
return out;
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=dashscope-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashscope-image.js","sourceRoot":"","sources":["../../../src/media/adapters/dashscope-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dashscope-video`: Alibaba Cloud Model Studio's (DashScope) Wan video models. The provider is
|
|
3
|
+
* registered with its OpenAI-compatible base (`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,
|
|
4
|
+
* or a workspace host); video lives on DashScope's native API on the same origin, so every URL is
|
|
5
|
+
* `originOf(base)` + a native path.
|
|
6
|
+
*
|
|
7
|
+
* - submit → `POST {origin}/api/v1/services/aigc/video-generation/video-synthesis` with
|
|
8
|
+
* `X-DashScope-Async: enable` (required: the API is asynchronous only) and `{model, input:{prompt,
|
|
9
|
+
* negative_prompt, img_url | media}, parameters:{resolution | size, ratio, duration, prompt_extend,
|
|
10
|
+
* watermark, seed}}` → `{output:{task_id, task_status}}`. Wan 2.7 takes its frames as `media`
|
|
11
|
+
* (`first_frame`, `last_frame`) and `resolution` + `ratio`; older models take `img_url` and `size`
|
|
12
|
+
* (`1280*720`) or a `resolution` tier;
|
|
13
|
+
* - poll → `GET {origin}/api/v1/tasks/{task_id}` → `output.task_status` PENDING | RUNNING | SUCCEEDED |
|
|
14
|
+
* FAILED | CANCELED | UNKNOWN (expired, past 24 h), `output.video_url` once it succeeded,
|
|
15
|
+
* `output.code`/`output.message` once it failed;
|
|
16
|
+
* - download → `output.video_url`, a signed link valid for 24 h;
|
|
17
|
+
* - cancel → `POST {origin}/api/v1/tasks/{task_id}/cancel` (only a pending task; errors are ignored);
|
|
18
|
+
* - listing → `GET {origin}/api/v1/models?capabilities=VG` (`output.models[]`).
|
|
19
|
+
*
|
|
20
|
+
* DashScope names its errors by `code` (`InvalidParameter`, `DataInspectionFailed`, `Arrearage`, …);
|
|
21
|
+
* `dashscopeCodeKind` reads those before the HTTP status.
|
|
22
|
+
*/
|
|
23
|
+
import type { AtomicCoreError, DiffusionErrorCode } from '../../contracts/index.js';
|
|
24
|
+
import type { LiveMediaModel } from '../catalog.js';
|
|
25
|
+
import type { VideoAdapter, VideoGenerationJob } from './types.js';
|
|
26
|
+
type Fields = Record<string, unknown>;
|
|
27
|
+
/** DashScope's native API origin: the registered base's (`…/compatible-mode/v1` → its origin). */
|
|
28
|
+
export declare function dashscopeOrigin(baseUrl: string): string;
|
|
29
|
+
/** What a DashScope error `code` says, before the HTTP status does; `undefined` when it says nothing known. */
|
|
30
|
+
export declare function dashscopeCodeKind(code: string | undefined): DiffusionErrorCode | undefined;
|
|
31
|
+
/** A DashScope failure (an HTTP error body, a failed task's `output`) with its code and words. */
|
|
32
|
+
export declare function dashscopeError(provider: string, code: string | undefined, said: string | undefined, fallback: DiffusionErrorCode, status?: number): AtomicCoreError;
|
|
33
|
+
/** A non-2xx answer: its `code` when DashScope gave a known one, the status otherwise. */
|
|
34
|
+
export declare function dashscopeHttpError(provider: string, status: number, body: unknown, text?: string): AtomicCoreError;
|
|
35
|
+
/**
|
|
36
|
+
* The submit body: what the job set and the model offers. Prompt rewriting and the watermark are off,
|
|
37
|
+
* so the clip is what the prompt says.
|
|
38
|
+
*/
|
|
39
|
+
export declare function dashscopeVideoBody(job: VideoGenerationJob): Fields;
|
|
40
|
+
/**
|
|
41
|
+
* The video models of a `/api/v1/models` listing (`output.models[]`, tolerating `data[]`/`models[]`):
|
|
42
|
+
* those that generate video and whose id says text or image to video (a reference, editing or
|
|
43
|
+
* animation model takes inputs this adapter does not send).
|
|
44
|
+
*/
|
|
45
|
+
export declare function dashscopeVideoModels(json: unknown): LiveMediaModel[];
|
|
46
|
+
export declare const DASHSCOPE_VIDEO: VideoAdapter;
|
|
47
|
+
export {};
|