@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,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `gemini-veo`: Google's Veo through the Gemini API. The provider is registered with Gemini's
|
|
3
|
+
* OpenAI-compatible base (`https://generativelanguage.googleapis.com/v1beta/openai`); Veo lives on
|
|
4
|
+
* the native API next to it, so `{native}` is that base without its trailing `/openai`
|
|
5
|
+
* (`.../v1beta`). The key goes as `x-goog-api-key`.
|
|
6
|
+
*
|
|
7
|
+
* - submit: `POST {native}/models/{model}:predictLongRunning`, JSON `{instances: [{prompt, image,
|
|
8
|
+
* lastFrame}], parameters: {aspectRatio, resolution, durationSeconds, seed, negativePrompt,
|
|
9
|
+
* numberOfVideos: 1}}` → `{name: 'models/…/operations/…'}`. Frames go as `{inlineData: {mimeType,
|
|
10
|
+
* data}}`. Veo renders 1080p and 4k at 8 seconds only, so a shorter clip at those sizes is asked
|
|
11
|
+
* for at 8. `durationSeconds` goes as a number (the SDKs' form); a model whose
|
|
12
|
+
* `options.duration_as_string` is true sends the docs table's string (`"8"`).
|
|
13
|
+
* - poll: `GET {native}/{name}` → `{done, error: {code, message}, response: {generateVideoResponse:
|
|
14
|
+
* {generatedSamples: [{video: {uri}}], raiMediaFilteredCount, raiMediaFilteredReasons}}}`. A done
|
|
15
|
+
* operation without samples that names filter reasons is `REMOTE_CONTENT_BLOCKED`.
|
|
16
|
+
* - download: the sample's `uri`, on the API's own host, so with the key; it redirects to storage,
|
|
17
|
+
* where `downloadResult` leaves the key behind.
|
|
18
|
+
* - models: `GET {native}/models?pageSize=1000`, the `veo-` models that offer `predictLongRunning`.
|
|
19
|
+
*
|
|
20
|
+
* No cancel: the Gemini API cannot cancel a Veo operation.
|
|
21
|
+
*/
|
|
22
|
+
import { callProvider, downloadResult, joinUrl, MAX_VIDEO_BYTES, remoteError, sniffVideoMime, } from '../http.js';
|
|
23
|
+
const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
24
|
+
const BLOCKED = /moderation|content[ _-]?polic|safety|nsfw|sensitive|prohibited|blocked|flagged|filtered|responsible ai|usage guidelines/i;
|
|
25
|
+
/** Resolutions Veo renders at 8 seconds only. */
|
|
26
|
+
const EIGHT_SECONDS_ONLY = /^(1080p|4k)$/i;
|
|
27
|
+
/** `{base}` of the Gemini API's native routes: the registered base without its `/openai`. */
|
|
28
|
+
export function veoNativeBase(baseUrl) {
|
|
29
|
+
return baseUrl.replace(/\/+$/, '').replace(/\/openai$/, '');
|
|
30
|
+
}
|
|
31
|
+
/** The clip length to ask for: 8 seconds whenever the resolution allows nothing else. */
|
|
32
|
+
export function veoDuration(resolution, seconds) {
|
|
33
|
+
if (seconds === undefined)
|
|
34
|
+
return undefined;
|
|
35
|
+
return resolution && EIGHT_SECONDS_ONLY.test(resolution) && seconds < 8 ? 8 : seconds;
|
|
36
|
+
}
|
|
37
|
+
function inline(input) {
|
|
38
|
+
return { inlineData: { mimeType: input.mime, data: input.bytes.toString('base64') } };
|
|
39
|
+
}
|
|
40
|
+
/** The `predictLongRunning` body: each parameter only when the job set it and the model offers it. */
|
|
41
|
+
export function veoRequest(job, provider = 'Google') {
|
|
42
|
+
const params = job.model.params;
|
|
43
|
+
const instance = { prompt: job.prompt };
|
|
44
|
+
if (job.workflow === 'image-to-video') {
|
|
45
|
+
if (!job.firstFrame)
|
|
46
|
+
throw remoteError('REMOTE_UNSUPPORTED', 'Image to video needs a first frame.', job.workflow);
|
|
47
|
+
instance['image'] = inline(job.firstFrame);
|
|
48
|
+
if (job.lastFrame) {
|
|
49
|
+
if (!params.last_frame)
|
|
50
|
+
throw remoteError('REMOTE_UNSUPPORTED', `${provider} takes no last frame for this model.`, job.model.id);
|
|
51
|
+
instance['lastFrame'] = inline(job.lastFrame);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const parameters = { numberOfVideos: 1 };
|
|
55
|
+
if (job.aspectRatio && params.aspect_ratios)
|
|
56
|
+
parameters['aspectRatio'] = job.aspectRatio;
|
|
57
|
+
const resolution = job.resolution && params.resolutions ? job.resolution : undefined;
|
|
58
|
+
if (resolution)
|
|
59
|
+
parameters['resolution'] = resolution;
|
|
60
|
+
const seconds = params.durations ? veoDuration(resolution, job.durationSecs) : undefined;
|
|
61
|
+
if (seconds !== undefined)
|
|
62
|
+
parameters['durationSeconds'] =
|
|
63
|
+
job.model.options?.['duration_as_string'] === true ? String(seconds) : seconds;
|
|
64
|
+
if (job.seed !== undefined && params.seed)
|
|
65
|
+
parameters['seed'] = job.seed;
|
|
66
|
+
if (job.negativePrompt && params.negative_prompt)
|
|
67
|
+
parameters['negativePrompt'] = job.negativePrompt;
|
|
68
|
+
return { instances: [instance], parameters };
|
|
69
|
+
}
|
|
70
|
+
/** An operation's `error: {code, message}` (google.rpc codes) as the closest `REMOTE_*` code. */
|
|
71
|
+
export function veoError(provider, error) {
|
|
72
|
+
const fields = isObject(error) ? error : {};
|
|
73
|
+
const code = typeof fields['code'] === 'number' ? fields['code'] : undefined;
|
|
74
|
+
const said = typeof fields['message'] === 'string' && fields['message'].trim() !== '' ? fields['message'].trim() : '';
|
|
75
|
+
const details = [code, said].filter((part) => part !== undefined && part !== '').join(': ') || undefined;
|
|
76
|
+
if (BLOCKED.test(said))
|
|
77
|
+
return remoteError('REMOTE_CONTENT_BLOCKED', `${provider} refused the request: ${said}`, details);
|
|
78
|
+
switch (code) {
|
|
79
|
+
case 3: // INVALID_ARGUMENT
|
|
80
|
+
case 9: // FAILED_PRECONDITION
|
|
81
|
+
return remoteError('REMOTE_REJECTED', said ? `${provider}: ${said}` : `${provider} refused the request.`, details);
|
|
82
|
+
case 7: // PERMISSION_DENIED
|
|
83
|
+
case 16: // UNAUTHENTICATED
|
|
84
|
+
return remoteError('REMOTE_AUTH_FAILED', `${provider} refused the API key or the model.`, details);
|
|
85
|
+
case 8: // RESOURCE_EXHAUSTED
|
|
86
|
+
return remoteError('REMOTE_RATE_LIMITED', `${provider} is rate-limiting requests.`, details);
|
|
87
|
+
case 4: // DEADLINE_EXCEEDED
|
|
88
|
+
return remoteError('REMOTE_TIMEOUT', `${provider} took too long to make the clip.`, details);
|
|
89
|
+
default:
|
|
90
|
+
return remoteError('REMOTE_UNAVAILABLE', said ? `${provider} failed to make the clip: ${said}` : `${provider} failed to make the clip.`, details);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** One operation (`GET {native}/{name}`) as a poll result. */
|
|
94
|
+
export function readVeoOperation(provider, json) {
|
|
95
|
+
const fields = isObject(json) ? json : {};
|
|
96
|
+
if (isObject(fields['error']))
|
|
97
|
+
return { state: 'failed', error: veoError(provider, fields['error']) };
|
|
98
|
+
if (fields['done'] !== true)
|
|
99
|
+
return { state: 'running' };
|
|
100
|
+
const response = isObject(fields['response']) ? fields['response'] : {};
|
|
101
|
+
const generated = isObject(response['generateVideoResponse']) ? response['generateVideoResponse'] : response;
|
|
102
|
+
const samples = generated['generatedSamples'] ?? generated['generatedVideos'];
|
|
103
|
+
for (const sample of Array.isArray(samples) ? samples : []) {
|
|
104
|
+
const video = isObject(sample) && isObject(sample['video']) ? sample['video'] : {};
|
|
105
|
+
if (typeof video['uri'] === 'string' && video['uri'] !== '')
|
|
106
|
+
return { state: 'completed', result: { url: video['uri'] } };
|
|
107
|
+
}
|
|
108
|
+
const reasons = Array.isArray(generated['raiMediaFilteredReasons'])
|
|
109
|
+
? generated['raiMediaFilteredReasons'].filter((r) => typeof r === 'string' && r !== '')
|
|
110
|
+
: [];
|
|
111
|
+
const filtered = typeof generated['raiMediaFilteredCount'] === 'number' ? generated['raiMediaFilteredCount'] : 0;
|
|
112
|
+
if (reasons.length > 0 || filtered > 0)
|
|
113
|
+
return {
|
|
114
|
+
state: 'failed',
|
|
115
|
+
error: remoteError('REMOTE_CONTENT_BLOCKED', reasons.length > 0
|
|
116
|
+
? `${provider} withheld the clip by its safety filter: ${reasons.join(' ')}`
|
|
117
|
+
: `${provider} withheld the clip by its safety filter.`, reasons.join(' | ') || `${filtered} filtered`),
|
|
118
|
+
};
|
|
119
|
+
return { state: 'failed', error: remoteError('REMOTE_UNAVAILABLE', `${provider} finished without a clip.`) };
|
|
120
|
+
}
|
|
121
|
+
/** The Veo models of a native `GET /models` answer. */
|
|
122
|
+
export function veoModels(json) {
|
|
123
|
+
const data = isObject(json) ? json['models'] : undefined;
|
|
124
|
+
const out = [];
|
|
125
|
+
const seen = new Set();
|
|
126
|
+
for (const item of Array.isArray(data) ? data : []) {
|
|
127
|
+
if (!isObject(item) || typeof item['name'] !== 'string')
|
|
128
|
+
continue;
|
|
129
|
+
const id = item['name'].replace(/^models\//, '');
|
|
130
|
+
const methods = item['supportedGenerationMethods'];
|
|
131
|
+
if (!id.includes('veo-') ||
|
|
132
|
+
!Array.isArray(methods) ||
|
|
133
|
+
!methods.includes('predictLongRunning') ||
|
|
134
|
+
seen.has(id))
|
|
135
|
+
continue;
|
|
136
|
+
seen.add(id);
|
|
137
|
+
const name = typeof item['displayName'] === 'string' && item['displayName'] !== '' ? item['displayName'] : undefined;
|
|
138
|
+
out.push(name ? { id, name } : { id });
|
|
139
|
+
}
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
/** An operation name the API gave, as a path under `{native}`; anything else is refused. */
|
|
143
|
+
function operationPath(provider, name) {
|
|
144
|
+
if (typeof name !== 'string' ||
|
|
145
|
+
!/^[A-Za-z0-9][A-Za-z0-9._\-/]*$/.test(name) ||
|
|
146
|
+
name.split('/').includes('..'))
|
|
147
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${provider} answered without a usable operation name.`, String(name));
|
|
148
|
+
return `/${name}`;
|
|
149
|
+
}
|
|
150
|
+
export const GEMINI_VEO = {
|
|
151
|
+
dialect: 'gemini-veo',
|
|
152
|
+
kind: 'video',
|
|
153
|
+
pollIntervalMs: { first: 10_000, max: 20_000 },
|
|
154
|
+
async listModels(ctx) {
|
|
155
|
+
const answer = await callProvider(ctx, joinUrl(veoNativeBase(ctx.baseUrl), '/models?pageSize=1000'), {
|
|
156
|
+
auth: 'goog',
|
|
157
|
+
});
|
|
158
|
+
return veoModels(answer.json);
|
|
159
|
+
},
|
|
160
|
+
async submit(ctx, job) {
|
|
161
|
+
const body = veoRequest(job, ctx.provider);
|
|
162
|
+
const asked = job.durationSecs;
|
|
163
|
+
const sent = body['parameters']['durationSeconds'];
|
|
164
|
+
if (asked !== undefined && sent !== undefined && Number(sent) !== asked)
|
|
165
|
+
ctx.log('info', `${ctx.provider} renders ${job.resolution} at 8 seconds only; asking for 8 instead of ${asked}.`);
|
|
166
|
+
const model = encodeURIComponent(job.model.id.replace(/^models\//, ''));
|
|
167
|
+
const answer = await callProvider(ctx, joinUrl(veoNativeBase(ctx.baseUrl), `/models/${model}:predictLongRunning`), {
|
|
168
|
+
json: body,
|
|
169
|
+
auth: 'goog',
|
|
170
|
+
});
|
|
171
|
+
const fields = isObject(answer.json) ? answer.json : {};
|
|
172
|
+
if (isObject(fields['error']))
|
|
173
|
+
throw veoError(ctx.provider, fields['error']);
|
|
174
|
+
operationPath(ctx.provider, fields['name']);
|
|
175
|
+
return { id: fields['name'] };
|
|
176
|
+
},
|
|
177
|
+
async poll(ctx, submission) {
|
|
178
|
+
const url = joinUrl(veoNativeBase(ctx.baseUrl), operationPath(ctx.provider, submission.id));
|
|
179
|
+
const answer = await callProvider(ctx, url, { auth: 'goog' });
|
|
180
|
+
return readVeoOperation(ctx.provider, answer.json);
|
|
181
|
+
},
|
|
182
|
+
async download(ctx, _submission, result) {
|
|
183
|
+
if (!result.url)
|
|
184
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} gave no clip to download.`);
|
|
185
|
+
const file = await downloadResult(ctx, result.url, {
|
|
186
|
+
maxBytes: MAX_VIDEO_BYTES,
|
|
187
|
+
what: 'video',
|
|
188
|
+
auth: 'goog',
|
|
189
|
+
});
|
|
190
|
+
const mime = sniffVideoMime(file.bytes);
|
|
191
|
+
if (!mime)
|
|
192
|
+
throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} returned a file that is not a video.`);
|
|
193
|
+
return { bytes: file.bytes, mime };
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=gemini-veo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-veo.js","sourceRoot":"","sources":["../../../src/media/adapters/gemini-veo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `hf-images`: Hugging Face Inference Providers through the HF router. The registered base is
|
|
3
|
+
* `https://router.huggingface.co/v1`; the router root is that base without its trailing `/v1`, and
|
|
4
|
+
* every request below goes to a path under it. Each catalog model names the provider that serves it
|
|
5
|
+
* in `options.hf_provider`:
|
|
6
|
+
*
|
|
7
|
+
* - `hf-inference` (also a model without the option): `POST {router}/hf-inference/models/{model.id}`
|
|
8
|
+
* with `{inputs: prompt, parameters}` answers the image bytes, one image per call. `transform`
|
|
9
|
+
* sends the source as `inputs` (base64) and the prompt in `parameters.prompt`.
|
|
10
|
+
* - `fal-ai`: fal's queue through the router, the way huggingface.js
|
|
11
|
+
* (`packages/inference/src/providers/fal-ai.ts`) does it: submit to
|
|
12
|
+
* `{router}/fal-ai/{options.provider_model}?_subdomain=queue`, poll the request's `/status`, then
|
|
13
|
+
* read the result (`{images: [{url}]}`). The images are on fal's CDN and are downloaded bare.
|
|
14
|
+
*
|
|
15
|
+
* The live listing is the Hub's public model search on `https://huggingface.co` — a different host,
|
|
16
|
+
* asked only when the registered base is the real router, and without the key or custom headers.
|
|
17
|
+
*/
|
|
18
|
+
import type { AtomicCoreError } from '../../contracts/index.js';
|
|
19
|
+
import type { LiveMediaModel } from '../catalog.js';
|
|
20
|
+
import type { MediaContext, PollOptions } from '../http.js';
|
|
21
|
+
import type { ImageAdapter, RemoteProgress } from './types.js';
|
|
22
|
+
/**
|
|
23
|
+
* One request in fal's queue, as {@link falSubmit} answered it. Plain data, so a video job can keep
|
|
24
|
+
* it on disk and follow the request after a restart. The URLs are fal's own words
|
|
25
|
+
* (`https://queue.fal.run/...`); only their paths are used — every request goes to the router
|
|
26
|
+
* derived from `ctx.baseUrl` at call time, so a stored handle can never send the key elsewhere.
|
|
27
|
+
*/
|
|
28
|
+
export interface FalHandle {
|
|
29
|
+
requestId: string;
|
|
30
|
+
/** fal's `status_url`, when it gave one. */
|
|
31
|
+
statusUrl?: string;
|
|
32
|
+
/** fal's `response_url` (the result), when it gave one. */
|
|
33
|
+
responseUrl?: string;
|
|
34
|
+
/** The fal model id the request went to (`fal-ai/flux/schnell`): the paths' fallback. */
|
|
35
|
+
providerModel?: string;
|
|
36
|
+
}
|
|
37
|
+
/** One look at a fal request. A failure carries the `REMOTE_*` error it maps to. */
|
|
38
|
+
export type FalStatus = {
|
|
39
|
+
state: 'queued';
|
|
40
|
+
position?: number;
|
|
41
|
+
} | {
|
|
42
|
+
state: 'running';
|
|
43
|
+
} | {
|
|
44
|
+
state: 'completed';
|
|
45
|
+
} | {
|
|
46
|
+
state: 'failed';
|
|
47
|
+
error: AtomicCoreError;
|
|
48
|
+
};
|
|
49
|
+
/** How {@link falWait} polls: 1 s first, growing to 5 s, for at most 15 minutes. */
|
|
50
|
+
export declare const FAL_POLL: PollOptions;
|
|
51
|
+
/**
|
|
52
|
+
* Submits `input` to fal model `providerModel` (`fal-ai/flux/schnell`) through the HF router:
|
|
53
|
+
* `POST {router}/fal-ai/{providerModel}?_subdomain=queue` with the HF key. Starts a generation, so
|
|
54
|
+
* it is never retried. Answers the handle {@link falStatus}, {@link falResult}, {@link falWait} and
|
|
55
|
+
* {@link falCancel} take.
|
|
56
|
+
*/
|
|
57
|
+
export declare function falSubmit(ctx: MediaContext, providerModel: string, input: Record<string, unknown>): Promise<FalHandle>;
|
|
58
|
+
/**
|
|
59
|
+
* One look at a fal request: `GET {router}/fal-ai/{request path}/status?_subdomain=queue`.
|
|
60
|
+
* `IN_QUEUE` → `queued` (with fal's queue position), `IN_PROGRESS` → `running`, `COMPLETED` →
|
|
61
|
+
* `completed`, or `failed` when fal reports an `error` on it. An unknown status counts as running.
|
|
62
|
+
*/
|
|
63
|
+
export declare function falStatus(ctx: MediaContext, handle: FalHandle): Promise<FalStatus>;
|
|
64
|
+
/**
|
|
65
|
+
* The result of a completed fal request: `GET {router}/fal-ai/{request path}?_subdomain=queue`.
|
|
66
|
+
* The JSON is the model's own (`{images: [{url}]}`, `{video: {url}}`); a content refusal is
|
|
67
|
+
* `REMOTE_CONTENT_BLOCKED`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function falResult(ctx: MediaContext, handle: FalHandle): Promise<unknown>;
|
|
70
|
+
/**
|
|
71
|
+
* Polls a fal request until it completes ({@link FAL_POLL} unless `poll` says otherwise), telling
|
|
72
|
+
* `report` whether it is queued or generating, then answers its result ({@link falResult}). Throws
|
|
73
|
+
* the request's `REMOTE_*` error when it failed, `CANCELLED` when the job was cancelled (the caller
|
|
74
|
+
* may then {@link falCancel} it), `REMOTE_TIMEOUT` past the poll's limit.
|
|
75
|
+
*/
|
|
76
|
+
export declare function falWait(ctx: MediaContext, handle: FalHandle, report?: (progress: RemoteProgress) => void, poll?: PollOptions): Promise<unknown>;
|
|
77
|
+
/**
|
|
78
|
+
* Asks fal to drop a request: `PUT {router}/fal-ai/{request path}/cancel?_subdomain=queue`. A
|
|
79
|
+
* queued request goes at once; a running one may still finish. A request already finished or gone
|
|
80
|
+
* is not an error. Pass a context whose signal has not fired (the job's own one has, on cancel).
|
|
81
|
+
*/
|
|
82
|
+
export declare function falCancel(ctx: MediaContext, handle: FalHandle): Promise<void>;
|
|
83
|
+
/** The models of a Hub listing a provider here serves live, with the provider and its model id. */
|
|
84
|
+
export declare function liveModelsFromHub(json: unknown): LiveMediaModel[];
|
|
85
|
+
export declare const HF_IMAGES: ImageAdapter;
|