@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.2
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 +29 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent-memory.d.ts +118 -0
- package/dist/agent-memory.d.ts.map +1 -0
- package/dist/agent-memory.js +186 -0
- package/dist/agent-memory.js.map +1 -0
- package/dist/async-local-storage.d.ts +20 -0
- package/dist/async-local-storage.d.ts.map +1 -0
- package/dist/async-local-storage.js +28 -0
- package/dist/async-local-storage.js.map +1 -0
- package/dist/blender-executor.d.ts +93 -0
- package/dist/blender-executor.d.ts.map +1 -0
- package/dist/blender-executor.js +294 -0
- package/dist/blender-executor.js.map +1 -0
- package/dist/comfy-executor.d.ts +23 -1
- package/dist/comfy-executor.d.ts.map +1 -1
- package/dist/comfy-executor.js +234 -55
- package/dist/comfy-executor.js.map +1 -1
- package/dist/context-packer.d.ts +1 -1
- package/dist/context-packer.d.ts.map +1 -1
- package/dist/context-packer.js +23 -25
- package/dist/context-packer.js.map +1 -1
- package/dist/context.d.ts +982 -127
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2649 -530
- package/dist/context.js.map +1 -1
- package/dist/cost-reconciler.d.ts +32 -0
- package/dist/cost-reconciler.d.ts.map +1 -0
- package/dist/cost-reconciler.js +21 -0
- package/dist/cost-reconciler.js.map +1 -0
- package/dist/entities.d.ts +33 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +43 -0
- package/dist/entities.js.map +1 -0
- package/dist/external-media-fetch.d.ts +29 -0
- package/dist/external-media-fetch.d.ts.map +1 -0
- package/dist/external-media-fetch.js +38 -0
- package/dist/external-media-fetch.js.map +1 -0
- package/dist/generation-receipt.d.ts +86 -0
- package/dist/generation-receipt.d.ts.map +1 -0
- package/dist/generation-receipt.js +137 -0
- package/dist/generation-receipt.js.map +1 -0
- package/dist/generation-registry.d.ts +75 -0
- package/dist/generation-registry.d.ts.map +1 -0
- package/dist/generation-registry.js +144 -0
- package/dist/generation-registry.js.map +1 -0
- package/dist/google/client.d.ts +196 -0
- package/dist/google/client.d.ts.map +1 -0
- package/dist/google/client.js +396 -0
- package/dist/google/client.js.map +1 -0
- package/dist/google/index.d.ts +3 -0
- package/dist/google/index.d.ts.map +1 -0
- package/dist/google/index.js +3 -0
- package/dist/google/index.js.map +1 -0
- package/dist/google/token.d.ts +15 -0
- package/dist/google/token.d.ts.map +1 -0
- package/dist/google/token.js +24 -0
- package/dist/google/token.js.map +1 -0
- package/dist/host-binaries.d.ts +106 -0
- package/dist/host-binaries.d.ts.map +1 -0
- package/dist/host-binaries.js +352 -0
- package/dist/host-binaries.js.map +1 -0
- package/dist/image-codec.d.ts +76 -0
- package/dist/image-codec.d.ts.map +1 -0
- package/dist/image-codec.js +293 -0
- package/dist/image-codec.js.map +1 -0
- package/dist/image-model-tasks.d.ts +15 -0
- package/dist/image-model-tasks.d.ts.map +1 -0
- package/dist/image-model-tasks.js +24 -0
- package/dist/image-model-tasks.js.map +1 -0
- package/dist/index.d.ts +67 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -4
- package/dist/index.js.map +1 -1
- package/dist/invocation-account.d.ts +43 -0
- package/dist/invocation-account.d.ts.map +1 -0
- package/dist/invocation-account.js +60 -0
- package/dist/invocation-account.js.map +1 -0
- package/dist/media-ref-bytes.d.ts +35 -0
- package/dist/media-ref-bytes.d.ts.map +1 -0
- package/dist/media-ref-bytes.js +191 -0
- package/dist/media-ref-bytes.js.map +1 -0
- package/dist/node-executor.d.ts +119 -2
- package/dist/node-executor.d.ts.map +1 -1
- package/dist/permission-gate.d.ts +152 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +87 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/prefixed-storage-adapter.d.ts +33 -0
- package/dist/prefixed-storage-adapter.d.ts.map +1 -0
- package/dist/prefixed-storage-adapter.js +70 -0
- package/dist/prefixed-storage-adapter.js.map +1 -0
- package/dist/prompt-asset-refs.d.ts +222 -0
- package/dist/prompt-asset-refs.d.ts.map +1 -0
- package/dist/prompt-asset-refs.js +751 -0
- package/dist/prompt-asset-refs.js.map +1 -0
- package/dist/provider-cache.d.ts +3 -0
- package/dist/provider-cache.d.ts.map +1 -0
- package/dist/provider-cache.js +8 -0
- package/dist/provider-cache.js.map +1 -0
- package/dist/providers/aki-provider.d.ts +35 -10
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +90 -77
- package/dist/providers/aki-provider.js.map +1 -1
- package/dist/providers/alibaba-provider.d.ts +39 -0
- package/dist/providers/alibaba-provider.d.ts.map +1 -0
- package/dist/providers/alibaba-provider.js +86 -0
- package/dist/providers/alibaba-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +52 -3
- package/dist/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/providers/anthropic-provider.js +1020 -338
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/atlascloud-provider.d.ts +103 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -0
- package/dist/providers/atlascloud-provider.js +1031 -0
- package/dist/providers/atlascloud-provider.js.map +1 -0
- package/dist/providers/atlascloud-transport.d.ts +100 -0
- package/dist/providers/atlascloud-transport.d.ts.map +1 -0
- package/dist/providers/atlascloud-transport.js +364 -0
- package/dist/providers/atlascloud-transport.js.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.js +104 -0
- package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
- package/dist/providers/audio-mime.d.ts +11 -0
- package/dist/providers/audio-mime.d.ts.map +1 -0
- package/dist/providers/audio-mime.js +46 -0
- package/dist/providers/audio-mime.js.map +1 -0
- package/dist/providers/base-provider.d.ts +501 -32
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +1280 -87
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/cassette-provider.d.ts +217 -0
- package/dist/providers/cassette-provider.d.ts.map +1 -0
- package/dist/providers/cassette-provider.js +502 -0
- package/dist/providers/cassette-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +6 -12
- package/dist/providers/cerebras-provider.d.ts.map +1 -1
- package/dist/providers/cerebras-provider.js +8 -33
- package/dist/providers/cerebras-provider.js.map +1 -1
- package/dist/providers/claude-agent-provider.d.ts +107 -74
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +1279 -517
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +84 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +505 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +7 -3
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +14 -2
- package/dist/providers/cohere-provider.js.map +1 -1
- package/dist/providers/comfy-cloud-provider.d.ts +30 -0
- package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
- package/dist/providers/comfy-cloud-provider.js +42 -0
- package/dist/providers/comfy-cloud-provider.js.map +1 -0
- package/dist/providers/content-filter.d.ts +46 -0
- package/dist/providers/content-filter.d.ts.map +1 -0
- package/dist/providers/content-filter.js +92 -0
- package/dist/providers/content-filter.js.map +1 -0
- package/dist/providers/context-exceeded.d.ts +37 -0
- package/dist/providers/context-exceeded.d.ts.map +1 -0
- package/dist/providers/context-exceeded.js +114 -0
- package/dist/providers/context-exceeded.js.map +1 -0
- package/dist/providers/context-window.d.ts +44 -0
- package/dist/providers/context-window.d.ts.map +1 -0
- package/dist/providers/context-window.js +145 -0
- package/dist/providers/context-window.js.map +1 -0
- package/dist/providers/contract/index.d.ts +4 -0
- package/dist/providers/contract/index.d.ts.map +1 -0
- package/dist/providers/contract/index.js +4 -0
- package/dist/providers/contract/index.js.map +1 -0
- package/dist/providers/contract/probe-manifest.d.ts +75 -0
- package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
- package/dist/providers/contract/probe-manifest.js +379 -0
- package/dist/providers/contract/probe-manifest.js.map +1 -0
- package/dist/providers/contract/probe-runner.d.ts +57 -0
- package/dist/providers/contract/probe-runner.d.ts.map +1 -0
- package/dist/providers/contract/probe-runner.js +180 -0
- package/dist/providers/contract/probe-runner.js.map +1 -0
- package/dist/providers/contract/redact.d.ts +29 -0
- package/dist/providers/contract/redact.d.ts.map +1 -0
- package/dist/providers/contract/redact.js +113 -0
- package/dist/providers/contract/redact.js.map +1 -0
- package/dist/providers/core-tools.d.ts +75 -0
- package/dist/providers/core-tools.d.ts.map +1 -0
- package/dist/providers/core-tools.js +128 -0
- package/dist/providers/core-tools.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +69 -50
- package/dist/providers/cost-calculator.d.ts.map +1 -1
- package/dist/providers/cost-calculator.js +207 -397
- package/dist/providers/cost-calculator.js.map +1 -1
- package/dist/providers/credential-check.d.ts +45 -0
- package/dist/providers/credential-check.d.ts.map +1 -0
- package/dist/providers/credential-check.js +164 -0
- package/dist/providers/credential-check.js.map +1 -0
- package/dist/providers/custom-model-kinds.d.ts +33 -0
- package/dist/providers/custom-model-kinds.d.ts.map +1 -0
- package/dist/providers/custom-model-kinds.js +96 -0
- package/dist/providers/custom-model-kinds.js.map +1 -0
- package/dist/providers/custom-openai-provider.d.ts +83 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -0
- package/dist/providers/custom-openai-provider.js +190 -0
- package/dist/providers/custom-openai-provider.js.map +1 -0
- package/dist/providers/custom-provider-registry.d.ts +19 -0
- package/dist/providers/custom-provider-registry.d.ts.map +1 -0
- package/dist/providers/custom-provider-registry.js +52 -0
- package/dist/providers/custom-provider-registry.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +8 -14
- package/dist/providers/deepseek-provider.d.ts.map +1 -1
- package/dist/providers/deepseek-provider.js +6 -35
- package/dist/providers/deepseek-provider.js.map +1 -1
- package/dist/providers/defaults.d.ts +12 -0
- package/dist/providers/defaults.d.ts.map +1 -0
- package/dist/providers/defaults.js +12 -0
- package/dist/providers/defaults.js.map +1 -0
- package/dist/providers/dreamina-models.d.ts +5 -0
- package/dist/providers/dreamina-models.d.ts.map +1 -0
- package/dist/providers/dreamina-models.js +57 -0
- package/dist/providers/dreamina-models.js.map +1 -0
- package/dist/providers/dreamina-music.d.ts +52 -0
- package/dist/providers/dreamina-music.d.ts.map +1 -0
- package/dist/providers/dreamina-music.js +115 -0
- package/dist/providers/dreamina-music.js.map +1 -0
- package/dist/providers/dreamina-provider.d.ts +62 -0
- package/dist/providers/dreamina-provider.d.ts.map +1 -0
- package/dist/providers/dreamina-provider.js +790 -0
- package/dist/providers/dreamina-provider.js.map +1 -0
- package/dist/providers/elevenlabs-provider.d.ts +50 -0
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
- package/dist/providers/elevenlabs-provider.js +147 -0
- package/dist/providers/elevenlabs-provider.js.map +1 -0
- package/dist/providers/entity-references.d.ts +31 -0
- package/dist/providers/entity-references.d.ts.map +1 -0
- package/dist/providers/entity-references.js +113 -0
- package/dist/providers/entity-references.js.map +1 -0
- package/dist/providers/evolink-provider.d.ts +40 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -0
- package/dist/providers/evolink-provider.js +312 -0
- package/dist/providers/evolink-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +74 -2
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +213 -1
- package/dist/providers/fake-provider.js.map +1 -1
- package/dist/providers/fal-generations.d.ts +106 -0
- package/dist/providers/fal-generations.d.ts.map +1 -0
- package/dist/providers/fal-generations.js +286 -0
- package/dist/providers/fal-generations.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +173 -8
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +1396 -64
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/fal-queue.d.ts +47 -0
- package/dist/providers/fal-queue.d.ts.map +1 -0
- package/dist/providers/fal-queue.js +231 -0
- package/dist/providers/fal-queue.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +150 -9
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +1515 -316
- package/dist/providers/gemini-provider.js.map +1 -1
- package/dist/providers/gmi-provider.d.ts +21 -0
- package/dist/providers/gmi-provider.d.ts.map +1 -0
- package/dist/providers/gmi-provider.js +34 -0
- package/dist/providers/gmi-provider.js.map +1 -0
- package/dist/providers/gpt-image-size.d.ts +3 -0
- package/dist/providers/gpt-image-size.d.ts.map +1 -0
- package/dist/providers/gpt-image-size.js +37 -0
- package/dist/providers/gpt-image-size.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +9 -12
- package/dist/providers/groq-provider.d.ts.map +1 -1
- package/dist/providers/groq-provider.js +19 -33
- package/dist/providers/groq-provider.js.map +1 -1
- package/dist/providers/groq-request.d.ts +38 -0
- package/dist/providers/groq-request.d.ts.map +1 -0
- package/dist/providers/groq-request.js +138 -0
- package/dist/providers/groq-request.js.map +1 -0
- package/dist/providers/higgsfield-provider.d.ts +31 -0
- package/dist/providers/higgsfield-provider.d.ts.map +1 -0
- package/dist/providers/higgsfield-provider.js +143 -0
- package/dist/providers/higgsfield-provider.js.map +1 -0
- package/dist/providers/higgsfield-transport.d.ts +106 -0
- package/dist/providers/higgsfield-transport.d.ts.map +1 -0
- package/dist/providers/higgsfield-transport.js +182 -0
- package/dist/providers/higgsfield-transport.js.map +1 -0
- package/dist/providers/http-transport.d.ts +74 -0
- package/dist/providers/http-transport.d.ts.map +1 -0
- package/dist/providers/http-transport.js +152 -0
- package/dist/providers/http-transport.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +73 -4
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +240 -34
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/image-mime.d.ts +39 -0
- package/dist/providers/image-mime.d.ts.map +1 -0
- package/dist/providers/image-mime.js +111 -0
- package/dist/providers/image-mime.js.map +1 -0
- package/dist/providers/image-ref.d.ts +21 -0
- package/dist/providers/image-ref.d.ts.map +1 -0
- package/dist/providers/image-ref.js +44 -0
- package/dist/providers/image-ref.js.map +1 -0
- package/dist/providers/index.d.ts +87 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +250 -56
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +12 -3
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +21 -7
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +172 -10
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +1190 -228
- package/dist/providers/kie-provider.js.map +1 -1
- package/dist/providers/kie-webhook-registry.d.ts +28 -0
- package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
- package/dist/providers/kie-webhook-registry.js +91 -0
- package/dist/providers/kie-webhook-registry.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +23 -36
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +50 -355
- package/dist/providers/llama-provider.js.map +1 -1
- package/dist/providers/lmstudio-provider.d.ts +4 -7
- package/dist/providers/lmstudio-provider.d.ts.map +1 -1
- package/dist/providers/lmstudio-provider.js +24 -15
- package/dist/providers/lmstudio-provider.js.map +1 -1
- package/dist/providers/loop-tracing.d.ts +17 -0
- package/dist/providers/loop-tracing.d.ts.map +1 -0
- package/dist/providers/loop-tracing.js +132 -0
- package/dist/providers/loop-tracing.js.map +1 -0
- package/dist/providers/manifest-models.d.ts +341 -1
- package/dist/providers/manifest-models.d.ts.map +1 -1
- package/dist/providers/manifest-models.js +1106 -22
- package/dist/providers/manifest-models.js.map +1 -1
- package/dist/providers/media-mime.d.ts +14 -0
- package/dist/providers/media-mime.d.ts.map +1 -0
- package/dist/providers/media-mime.js +35 -0
- package/dist/providers/media-mime.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +16 -2
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +82 -46
- package/dist/providers/meshy-provider.js.map +1 -1
- package/dist/providers/meta-provider.d.ts +22 -0
- package/dist/providers/meta-provider.d.ts.map +1 -0
- package/dist/providers/meta-provider.js +54 -0
- package/dist/providers/meta-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +27 -18
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +222 -72
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +8 -12
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +15 -34
- package/dist/providers/mistral-provider.js.map +1 -1
- package/dist/providers/moonshot-provider.d.ts +11 -15
- package/dist/providers/moonshot-provider.d.ts.map +1 -1
- package/dist/providers/moonshot-provider.js +33 -23
- package/dist/providers/moonshot-provider.js.map +1 -1
- package/dist/providers/node-llama-cpp-provider.d.ts +99 -0
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
- package/dist/providers/node-llama-cpp-provider.js +484 -0
- package/dist/providers/node-llama-cpp-provider.js.map +1 -0
- package/dist/providers/nodetool-provider.d.ts +49 -0
- package/dist/providers/nodetool-provider.d.ts.map +1 -0
- package/dist/providers/nodetool-provider.js +222 -0
- package/dist/providers/nodetool-provider.js.map +1 -0
- package/dist/providers/oauth/browser-launcher.d.ts +23 -0
- package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
- package/dist/providers/oauth/browser-launcher.js +45 -0
- package/dist/providers/oauth/browser-launcher.js.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.js +133 -0
- package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
- package/dist/providers/oauth/claude-code-login.d.ts +124 -0
- package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-login.js +230 -0
- package/dist/providers/oauth/claude-code-login.js.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
- package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
- package/dist/providers/oauth/errors.d.ts +54 -0
- package/dist/providers/oauth/errors.d.ts.map +1 -0
- package/dist/providers/oauth/errors.js +79 -0
- package/dist/providers/oauth/errors.js.map +1 -0
- package/dist/providers/oauth/index.d.ts +105 -0
- package/dist/providers/oauth/index.d.ts.map +1 -0
- package/dist/providers/oauth/index.js +167 -0
- package/dist/providers/oauth/index.js.map +1 -0
- package/dist/providers/oauth/jwt-claims.d.ts +23 -0
- package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
- package/dist/providers/oauth/jwt-claims.js +67 -0
- package/dist/providers/oauth/jwt-claims.js.map +1 -0
- package/dist/providers/oauth/local-callback-server.d.ts +60 -0
- package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
- package/dist/providers/oauth/local-callback-server.js +148 -0
- package/dist/providers/oauth/local-callback-server.js.map +1 -0
- package/dist/providers/oauth/oauth-client.d.ts +55 -0
- package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/oauth-client.js +161 -0
- package/dist/providers/oauth/oauth-client.js.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.js +265 -0
- package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
- package/dist/providers/oauth/pkce-helper.d.ts +43 -0
- package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
- package/dist/providers/oauth/pkce-helper.js +57 -0
- package/dist/providers/oauth/pkce-helper.js.map +1 -0
- package/dist/providers/oauth/redaction.d.ts +22 -0
- package/dist/providers/oauth/redaction.d.ts.map +1 -0
- package/dist/providers/oauth/redaction.js +59 -0
- package/dist/providers/oauth/redaction.js.map +1 -0
- package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
- package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
- package/dist/providers/oauth/secure-credential-store.js +73 -0
- package/dist/providers/oauth/secure-credential-store.js.map +1 -0
- package/dist/providers/oauth/token-store.d.ts +53 -0
- package/dist/providers/oauth/token-store.d.ts.map +1 -0
- package/dist/providers/oauth/token-store.js +78 -0
- package/dist/providers/oauth/token-store.js.map +1 -0
- package/dist/providers/oauth/types.d.ts +64 -0
- package/dist/providers/oauth/types.d.ts.map +1 -0
- package/dist/providers/oauth/types.js +12 -0
- package/dist/providers/oauth/types.js.map +1 -0
- package/dist/providers/object-tracking.d.ts +47 -0
- package/dist/providers/object-tracking.d.ts.map +1 -0
- package/dist/providers/object-tracking.js +46 -0
- package/dist/providers/object-tracking.js.map +1 -0
- package/dist/providers/offline-model-index.d.ts +20 -0
- package/dist/providers/offline-model-index.d.ts.map +1 -0
- package/dist/providers/offline-model-index.js +112 -0
- package/dist/providers/offline-model-index.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +30 -2
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +198 -43
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/providers/openai-compat/client.d.ts +57 -0
- package/dist/providers/openai-compat/client.d.ts.map +1 -0
- package/dist/providers/openai-compat/client.js +157 -0
- package/dist/providers/openai-compat/client.js.map +1 -0
- package/dist/providers/openai-compat/decode.d.ts +36 -0
- package/dist/providers/openai-compat/decode.d.ts.map +1 -0
- package/dist/providers/openai-compat/decode.js +55 -0
- package/dist/providers/openai-compat/decode.js.map +1 -0
- package/dist/providers/openai-compat/errors.d.ts +54 -0
- package/dist/providers/openai-compat/errors.d.ts.map +1 -0
- package/dist/providers/openai-compat/errors.js +144 -0
- package/dist/providers/openai-compat/errors.js.map +1 -0
- package/dist/providers/openai-compat/index.d.ts +8 -0
- package/dist/providers/openai-compat/index.d.ts.map +1 -0
- package/dist/providers/openai-compat/index.js +5 -0
- package/dist/providers/openai-compat/index.js.map +1 -0
- package/dist/providers/openai-compat/sse.d.ts +14 -0
- package/dist/providers/openai-compat/sse.d.ts.map +1 -0
- package/dist/providers/openai-compat/sse.js +69 -0
- package/dist/providers/openai-compat/sse.js.map +1 -0
- package/dist/providers/openai-compat/types.d.ts +75 -0
- package/dist/providers/openai-compat/types.d.ts.map +1 -0
- package/dist/providers/openai-compat/types.js +9 -0
- package/dist/providers/openai-compat/types.js.map +1 -0
- package/dist/providers/openai-compat-provider.d.ts +90 -0
- package/dist/providers/openai-compat-provider.d.ts.map +1 -0
- package/dist/providers/openai-compat-provider.js +282 -0
- package/dist/providers/openai-compat-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +98 -27
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +1037 -105
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +58 -13
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +383 -51
- package/dist/providers/openrouter-provider.js.map +1 -1
- package/dist/providers/provider-call-failure.d.ts +39 -0
- package/dist/providers/provider-call-failure.d.ts.map +1 -0
- package/dist/providers/provider-call-failure.js +132 -0
- package/dist/providers/provider-call-failure.js.map +1 -0
- package/dist/providers/provider-error.d.ts +59 -0
- package/dist/providers/provider-error.d.ts.map +1 -0
- package/dist/providers/provider-error.js +171 -0
- package/dist/providers/provider-error.js.map +1 -0
- package/dist/providers/provider-generations.d.ts +99 -0
- package/dist/providers/provider-generations.d.ts.map +1 -0
- package/dist/providers/provider-generations.js +71 -0
- package/dist/providers/provider-generations.js.map +1 -0
- package/dist/providers/provider-queue.d.ts +62 -0
- package/dist/providers/provider-queue.d.ts.map +1 -0
- package/dist/providers/provider-queue.js +28 -0
- package/dist/providers/provider-queue.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +33 -14
- package/dist/providers/provider-registry.d.ts.map +1 -1
- package/dist/providers/provider-registry.js +85 -68
- package/dist/providers/provider-registry.js.map +1 -1
- package/dist/providers/provider-request-log.d.ts +53 -0
- package/dist/providers/provider-request-log.d.ts.map +1 -0
- package/dist/providers/provider-request-log.js +168 -0
- package/dist/providers/provider-request-log.js.map +1 -0
- package/dist/providers/provider-session.d.ts +3 -0
- package/dist/providers/provider-session.d.ts.map +1 -0
- package/dist/providers/provider-session.js +10 -0
- package/dist/providers/provider-session.js.map +1 -0
- package/dist/providers/provider-transport.d.ts +11 -0
- package/dist/providers/provider-transport.d.ts.map +1 -0
- package/dist/providers/provider-transport.js +11 -0
- package/dist/providers/provider-transport.js.map +1 -0
- package/dist/providers/python-provider.d.ts +26 -13
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +204 -25
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +91 -8
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +823 -65
- package/dist/providers/replicate-provider.js.map +1 -1
- package/dist/providers/replicate-retry.d.ts +30 -0
- package/dist/providers/replicate-retry.d.ts.map +1 -0
- package/dist/providers/replicate-retry.js +97 -0
- package/dist/providers/replicate-retry.js.map +1 -0
- package/dist/providers/requesty-provider.d.ts +30 -0
- package/dist/providers/requesty-provider.d.ts.map +1 -0
- package/dist/providers/requesty-provider.js +87 -0
- package/dist/providers/requesty-provider.js.map +1 -0
- package/dist/providers/responses-api.d.ts +27 -0
- package/dist/providers/responses-api.d.ts.map +1 -0
- package/dist/providers/responses-api.js +297 -0
- package/dist/providers/responses-api.js.map +1 -0
- package/dist/providers/reve-provider.d.ts +46 -0
- package/dist/providers/reve-provider.d.ts.map +1 -0
- package/dist/providers/reve-provider.js +165 -0
- package/dist/providers/reve-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +25 -2
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +95 -51
- package/dist/providers/rodin-provider.js.map +1 -1
- package/dist/providers/safe-url.d.ts +70 -0
- package/dist/providers/safe-url.d.ts.map +1 -0
- package/dist/providers/safe-url.js +277 -0
- package/dist/providers/safe-url.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +9 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -1
- package/dist/providers/scripted-provider.js +86 -10
- package/dist/providers/scripted-provider.js.map +1 -1
- package/dist/providers/structured-output.d.ts +42 -0
- package/dist/providers/structured-output.d.ts.map +1 -0
- package/dist/providers/structured-output.js +83 -0
- package/dist/providers/structured-output.js.map +1 -0
- package/dist/providers/together-operations.d.ts +27 -0
- package/dist/providers/together-operations.d.ts.map +1 -0
- package/dist/providers/together-operations.js +95 -0
- package/dist/providers/together-operations.js.map +1 -0
- package/dist/providers/together-provider.d.ts +18 -18
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +140 -367
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +45 -0
- package/dist/providers/topaz-provider.d.ts.map +1 -0
- package/dist/providers/topaz-provider.js +244 -0
- package/dist/providers/topaz-provider.js.map +1 -0
- package/dist/providers/types.d.ts +641 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +81 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/useapi-provider.d.ts +28 -0
- package/dist/providers/useapi-provider.d.ts.map +1 -0
- package/dist/providers/useapi-provider.js +274 -0
- package/dist/providers/useapi-provider.js.map +1 -0
- package/dist/providers/video-duration.d.ts +6 -0
- package/dist/providers/video-duration.d.ts.map +1 -0
- package/dist/providers/video-duration.js +63 -0
- package/dist/providers/video-duration.js.map +1 -0
- package/dist/providers/video-frame-fallback.d.ts +39 -0
- package/dist/providers/video-frame-fallback.d.ts.map +1 -0
- package/dist/providers/video-frame-fallback.js +155 -0
- package/dist/providers/video-frame-fallback.js.map +1 -0
- package/dist/providers/video-frames.d.ts +61 -0
- package/dist/providers/video-frames.d.ts.map +1 -0
- package/dist/providers/video-frames.js +208 -0
- package/dist/providers/video-frames.js.map +1 -0
- package/dist/providers/video-mime.d.ts +14 -0
- package/dist/providers/video-mime.d.ts.map +1 -0
- package/dist/providers/video-mime.js +44 -0
- package/dist/providers/video-mime.js.map +1 -0
- package/dist/providers/video-to-audio.d.ts +34 -0
- package/dist/providers/video-to-audio.d.ts.map +1 -0
- package/dist/providers/video-to-audio.js +62 -0
- package/dist/providers/video-to-audio.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +20 -8
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +44 -23
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +12 -3
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +21 -7
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +56 -13
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +307 -22
- package/dist/providers/xai-provider.js.map +1 -1
- package/dist/python-bridge-base.d.ts +358 -0
- package/dist/python-bridge-base.d.ts.map +1 -0
- package/dist/python-bridge-base.js +1557 -0
- package/dist/python-bridge-base.js.map +1 -0
- package/dist/python-bridge-codec.d.ts +28 -0
- package/dist/python-bridge-codec.d.ts.map +1 -0
- package/dist/python-bridge-codec.js +39 -0
- package/dist/python-bridge-codec.js.map +1 -0
- package/dist/python-bridge-factory.d.ts +52 -0
- package/dist/python-bridge-factory.d.ts.map +1 -0
- package/dist/python-bridge-factory.js +69 -0
- package/dist/python-bridge-factory.js.map +1 -0
- package/dist/python-bridge-framing.d.ts +68 -0
- package/dist/python-bridge-framing.d.ts.map +1 -0
- package/dist/python-bridge-framing.js +91 -0
- package/dist/python-bridge-framing.js.map +1 -0
- package/dist/python-bridge-types.d.ts +545 -2
- package/dist/python-bridge-types.d.ts.map +1 -1
- package/dist/python-bridge-types.js +49 -1
- package/dist/python-bridge-types.js.map +1 -1
- package/dist/python-graph-resolver.d.ts +57 -0
- package/dist/python-graph-resolver.d.ts.map +1 -0
- package/dist/python-graph-resolver.js +79 -0
- package/dist/python-graph-resolver.js.map +1 -0
- package/dist/python-node-executor.d.ts +36 -4
- package/dist/python-node-executor.d.ts.map +1 -1
- package/dist/python-node-executor.js +177 -86
- package/dist/python-node-executor.js.map +1 -1
- package/dist/python-stdio-bridge.d.ts +18 -37
- package/dist/python-stdio-bridge.d.ts.map +1 -1
- package/dist/python-stdio-bridge.js +148 -475
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/python-websocket-bridge.d.ts +140 -0
- package/dist/python-websocket-bridge.d.ts.map +1 -0
- package/dist/python-websocket-bridge.js +561 -0
- package/dist/python-websocket-bridge.js.map +1 -0
- package/dist/python-worker-stderr.d.ts +4 -0
- package/dist/python-worker-stderr.d.ts.map +1 -0
- package/dist/python-worker-stderr.js +24 -0
- package/dist/python-worker-stderr.js.map +1 -0
- package/dist/recommended-models.d.ts +2 -2
- package/dist/recommended-models.d.ts.map +1 -1
- package/dist/recommended-models.js +44 -4
- package/dist/recommended-models.js.map +1 -1
- package/dist/recoverable-node-error.d.ts +31 -0
- package/dist/recoverable-node-error.d.ts.map +1 -0
- package/dist/recoverable-node-error.js +37 -0
- package/dist/recoverable-node-error.js.map +1 -0
- package/dist/redact-params.d.ts +13 -0
- package/dist/redact-params.d.ts.map +1 -0
- package/dist/redact-params.js +57 -0
- package/dist/redact-params.js.map +1 -0
- package/dist/run-context.d.ts +20 -0
- package/dist/run-context.d.ts.map +1 -0
- package/dist/run-context.js +18 -0
- package/dist/run-context.js.map +1 -0
- package/dist/run-trace-context.d.ts +30 -0
- package/dist/run-trace-context.d.ts.map +1 -0
- package/dist/run-trace-context.js +80 -0
- package/dist/run-trace-context.js.map +1 -0
- package/dist/run-trace-processor.d.ts +65 -0
- package/dist/run-trace-processor.d.ts.map +1 -0
- package/dist/run-trace-processor.js +417 -0
- package/dist/run-trace-processor.js.map +1 -0
- package/dist/run-trace-serialization.d.ts +5 -0
- package/dist/run-trace-serialization.d.ts.map +1 -0
- package/dist/run-trace-serialization.js +113 -0
- package/dist/run-trace-serialization.js.map +1 -0
- package/dist/sandbox-module-catalog.d.ts +43 -0
- package/dist/sandbox-module-catalog.d.ts.map +1 -0
- package/dist/sandbox-module-catalog.js +25 -0
- package/dist/sandbox-module-catalog.js.map +1 -0
- package/dist/storage-workspace.d.ts +62 -0
- package/dist/storage-workspace.d.ts.map +1 -0
- package/dist/storage-workspace.js +441 -0
- package/dist/storage-workspace.js.map +1 -0
- package/dist/swappable-python-bridge.d.ts +83 -0
- package/dist/swappable-python-bridge.d.ts.map +1 -0
- package/dist/swappable-python-bridge.js +246 -0
- package/dist/swappable-python-bridge.js.map +1 -0
- package/dist/telemetry.d.ts +16 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +76 -20
- package/dist/telemetry.js.map +1 -1
- package/dist/testing.d.ts +81 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +130 -0
- package/dist/testing.js.map +1 -0
- package/dist/token-counter.d.ts +30 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +156 -0
- package/dist/token-counter.js.map +1 -0
- package/dist/trace-exporters.d.ts +11 -28
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +69 -22
- package/dist/trace-exporters.js.map +1 -1
- package/dist/tracing-helpers.d.ts +60 -26
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +100 -25
- package/dist/tracing-helpers.js.map +1 -1
- package/dist/trim-video-window.d.ts +8 -0
- package/dist/trim-video-window.d.ts.map +1 -0
- package/dist/trim-video-window.js +50 -0
- package/dist/trim-video-window.js.map +1 -0
- package/dist/turn-budget.d.ts +278 -0
- package/dist/turn-budget.d.ts.map +1 -0
- package/dist/turn-budget.js +365 -0
- package/dist/turn-budget.js.map +1 -0
- package/dist/variable-channel.d.ts +48 -0
- package/dist/variable-channel.d.ts.map +1 -0
- package/dist/variable-channel.js +110 -0
- package/dist/variable-channel.js.map +1 -0
- package/dist/workspace.d.ts +119 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +112 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +121 -19
|
@@ -1,8 +1,109 @@
|
|
|
1
1
|
import Replicate from "replicate";
|
|
2
2
|
import { createLogger } from "@nodetool-ai/config";
|
|
3
|
+
import { isCallable, isObjectLike, isString } from "@nodetool-ai/protocol";
|
|
3
4
|
import { BaseProvider } from "./base-provider.js";
|
|
4
|
-
import {
|
|
5
|
+
import { safeFetch } from "./safe-url.js";
|
|
6
|
+
import { withReplicateRetry } from "./replicate-retry.js";
|
|
7
|
+
import { sniffAudioMime } from "./audio-mime.js";
|
|
8
|
+
import { sniffVideoMime } from "./video-mime.js";
|
|
9
|
+
import { detectImageMime } from "./image-mime.js";
|
|
10
|
+
import { getModelImageInputs, getModelReferenceInputs, getModelInputFields, validateReferenceInputs, getModelInputNames, loadImageModels, loadMusicModels, loadAudioToAudioModels, loadVideoModels, selectMaskImageInput, selectPrimaryImageInput } from "./manifest-models.js";
|
|
5
11
|
const log = createLogger("nodetool.runtime.providers.replicate");
|
|
12
|
+
/** A nested string counts as a locator only when it looks like one. */
|
|
13
|
+
const URL_LIKE = /^(https?:|data:)/;
|
|
14
|
+
/** The walk is over a provider's JSON, so bound how deep it goes. */
|
|
15
|
+
const MAX_OUTPUT_DEPTH = 6;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a `replicate.run()` result to the one file it carries.
|
|
18
|
+
*
|
|
19
|
+
* The SDK walks the prediction's output and swaps every `https:`/`data:`
|
|
20
|
+
* string for a `FileOutput`, objects and nested arrays included, so a model
|
|
21
|
+
* answering `{"image": <FileOutput>}` is as ordinary as one answering
|
|
22
|
+
* `["https://…"]`. Reading only `output[0]` drops the first and reports "no
|
|
23
|
+
* usable output" for a prediction that succeeded.
|
|
24
|
+
*/
|
|
25
|
+
export function decodeReplicateOutput(output) {
|
|
26
|
+
// A bare string output is itself the locator (the model's contract),
|
|
27
|
+
// whether or not it parses as a URL.
|
|
28
|
+
if (isString(output)) {
|
|
29
|
+
return output ? { kind: "url", url: output } : null;
|
|
30
|
+
}
|
|
31
|
+
return decodeOutputValue(output, 0);
|
|
32
|
+
}
|
|
33
|
+
function decodeOutputValue(value, depth) {
|
|
34
|
+
if (depth > MAX_OUTPUT_DEPTH || !isObjectLike(value))
|
|
35
|
+
return null;
|
|
36
|
+
// FileOutput extends ReadableStream, so `getReader` is on its prototype.
|
|
37
|
+
// Prefer it over `url()`: those bytes are already in flight.
|
|
38
|
+
if ("getReader" in value) {
|
|
39
|
+
return {
|
|
40
|
+
kind: "stream",
|
|
41
|
+
stream: value
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// FileOutput also exposes `url()`, and some models answer a plain `{url}`.
|
|
45
|
+
if ("url" in value) {
|
|
46
|
+
const raw = value.url;
|
|
47
|
+
const url = isCallable(raw) ? raw.call(value) : raw;
|
|
48
|
+
if (url)
|
|
49
|
+
return { kind: "url", url: String(url) };
|
|
50
|
+
}
|
|
51
|
+
const items = Array.isArray(value)
|
|
52
|
+
? value
|
|
53
|
+
: Object.values(value);
|
|
54
|
+
for (const item of items) {
|
|
55
|
+
const found = isString(item)
|
|
56
|
+
? decodeOutputLeaf(item)
|
|
57
|
+
: decodeOutputValue(item, depth + 1);
|
|
58
|
+
if (found)
|
|
59
|
+
return found;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
function decodeOutputLeaf(item) {
|
|
64
|
+
return URL_LIKE.test(item) ? { kind: "url", url: item } : null;
|
|
65
|
+
}
|
|
66
|
+
async function drainStream(stream) {
|
|
67
|
+
const reader = stream.getReader();
|
|
68
|
+
const chunks = [];
|
|
69
|
+
let total = 0;
|
|
70
|
+
while (true) {
|
|
71
|
+
const { done, value } = await reader.read();
|
|
72
|
+
if (done)
|
|
73
|
+
break;
|
|
74
|
+
chunks.push(value);
|
|
75
|
+
total += value.length;
|
|
76
|
+
}
|
|
77
|
+
const result = new Uint8Array(total);
|
|
78
|
+
let offset = 0;
|
|
79
|
+
for (const chunk of chunks) {
|
|
80
|
+
result.set(chunk, offset);
|
|
81
|
+
offset += chunk.length;
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
/** `safeFetch` speaks https only, so an inline output is decoded here. */
|
|
86
|
+
function decodeDataUri(uri) {
|
|
87
|
+
const comma = uri.indexOf(",");
|
|
88
|
+
if (comma < 0)
|
|
89
|
+
throw new Error("Malformed data URI in Replicate output");
|
|
90
|
+
const body = uri.slice(comma + 1);
|
|
91
|
+
if (uri.slice(0, comma).endsWith(";base64")) {
|
|
92
|
+
return new Uint8Array(Buffer.from(body, "base64"));
|
|
93
|
+
}
|
|
94
|
+
return new TextEncoder().encode(decodeURIComponent(body));
|
|
95
|
+
}
|
|
96
|
+
/** A short, credential-free description of an output the decoder rejected. */
|
|
97
|
+
function describeOutputShape(output) {
|
|
98
|
+
if (output == null)
|
|
99
|
+
return String(output);
|
|
100
|
+
if (Array.isArray(output))
|
|
101
|
+
return `an array of ${output.length}`;
|
|
102
|
+
if (isObjectLike(output)) {
|
|
103
|
+
return `an object with keys [${Object.keys(output).slice(0, 8).join(", ")}]`;
|
|
104
|
+
}
|
|
105
|
+
return `a ${typeof output}`;
|
|
106
|
+
}
|
|
6
107
|
/**
|
|
7
108
|
* Provider for Replicate's LLM, image, video, and audio models.
|
|
8
109
|
*
|
|
@@ -11,6 +112,28 @@ const log = createLogger("nodetool.runtime.providers.replicate");
|
|
|
11
112
|
* - Image / Video / TTS: `replicate.run()` with file output
|
|
12
113
|
*/
|
|
13
114
|
export class ReplicateProvider extends BaseProvider {
|
|
115
|
+
declaredCapabilities() {
|
|
116
|
+
return [
|
|
117
|
+
"text_to_image",
|
|
118
|
+
"image_to_image",
|
|
119
|
+
"text_to_video",
|
|
120
|
+
"image_to_video",
|
|
121
|
+
"reference_to_video",
|
|
122
|
+
"inpainting",
|
|
123
|
+
"outpaint_image",
|
|
124
|
+
"upscale_image",
|
|
125
|
+
"remove_background",
|
|
126
|
+
"relight_image",
|
|
127
|
+
"vectorize_image",
|
|
128
|
+
"video_to_video",
|
|
129
|
+
"extend_video",
|
|
130
|
+
"upscale_video",
|
|
131
|
+
"lip_sync",
|
|
132
|
+
"text_to_speech",
|
|
133
|
+
"text_to_music",
|
|
134
|
+
"audio_to_audio"
|
|
135
|
+
];
|
|
136
|
+
}
|
|
14
137
|
static requiredSecrets() {
|
|
15
138
|
return ["REPLICATE_API_TOKEN"];
|
|
16
139
|
}
|
|
@@ -23,12 +146,13 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
23
146
|
throw new Error("REPLICATE_API_TOKEN is required");
|
|
24
147
|
}
|
|
25
148
|
this.apiKey = apiKey;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
149
|
+
const replicateOptions = {
|
|
150
|
+
auth: apiKey
|
|
151
|
+
};
|
|
152
|
+
if (options.fetchFn) {
|
|
153
|
+
replicateOptions.fetch = options.fetchFn;
|
|
154
|
+
}
|
|
155
|
+
this._client = options.client ?? new Replicate(replicateOptions);
|
|
32
156
|
}
|
|
33
157
|
getContainerEnv() {
|
|
34
158
|
return { REPLICATE_API_TOKEN: this.apiKey };
|
|
@@ -37,6 +161,14 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
37
161
|
// Replicate predictions API does not support OpenAI-style tool calling
|
|
38
162
|
return false;
|
|
39
163
|
}
|
|
164
|
+
/** Create a prediction, waiting out the low-credit throttle. */
|
|
165
|
+
runModel(modelId, input, signal) {
|
|
166
|
+
signal?.throwIfAborted();
|
|
167
|
+
const options = { input };
|
|
168
|
+
if (signal)
|
|
169
|
+
options.signal = signal;
|
|
170
|
+
return withReplicateRetry(modelId, () => this._client.run(modelId, options), signal);
|
|
171
|
+
}
|
|
40
172
|
// ---------------------------------------------------------------------------
|
|
41
173
|
// Chat completions via Replicate SDK
|
|
42
174
|
// ---------------------------------------------------------------------------
|
|
@@ -48,7 +180,7 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
48
180
|
let systemPrompt = "";
|
|
49
181
|
const parts = [];
|
|
50
182
|
for (const msg of messages) {
|
|
51
|
-
const text =
|
|
183
|
+
const text = isString(msg.content)
|
|
52
184
|
? msg.content
|
|
53
185
|
: Array.isArray(msg.content)
|
|
54
186
|
? msg.content
|
|
@@ -79,13 +211,11 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
79
211
|
if (args.topP != null)
|
|
80
212
|
input.top_p = args.topP;
|
|
81
213
|
log.debug("generateMessage", { model: args.model });
|
|
82
|
-
const output = await this.
|
|
83
|
-
input
|
|
84
|
-
});
|
|
214
|
+
const output = await this.runModel(args.model, input);
|
|
85
215
|
// Replicate LLMs return output as a string, array of token strings,
|
|
86
216
|
// or a ReadableStream/FileOutput.
|
|
87
217
|
let text;
|
|
88
|
-
if (
|
|
218
|
+
if (isString(output)) {
|
|
89
219
|
text = output;
|
|
90
220
|
}
|
|
91
221
|
else if (Array.isArray(output)) {
|
|
@@ -211,6 +341,11 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
211
341
|
name: "Claude Opus 4.6",
|
|
212
342
|
provider: "replicate"
|
|
213
343
|
},
|
|
344
|
+
{
|
|
345
|
+
id: "anthropic/claude-opus-4.7",
|
|
346
|
+
name: "Claude Opus 4.7",
|
|
347
|
+
provider: "replicate"
|
|
348
|
+
},
|
|
214
349
|
{ id: "openai/gpt-4o", name: "GPT-4o", provider: "replicate" },
|
|
215
350
|
{ id: "openai/gpt-4o-mini", name: "GPT-4o Mini", provider: "replicate" },
|
|
216
351
|
{ id: "openai/gpt-4.1", name: "GPT-4.1", provider: "replicate" },
|
|
@@ -219,8 +354,14 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
219
354
|
name: "GPT-4.1 Mini",
|
|
220
355
|
provider: "replicate"
|
|
221
356
|
},
|
|
357
|
+
{
|
|
358
|
+
id: "openai/gpt-4.1-nano",
|
|
359
|
+
name: "GPT-4.1 Nano",
|
|
360
|
+
provider: "replicate"
|
|
361
|
+
},
|
|
222
362
|
{ id: "openai/gpt-5", name: "GPT-5", provider: "replicate" },
|
|
223
363
|
{ id: "openai/gpt-5-mini", name: "GPT-5 Mini", provider: "replicate" },
|
|
364
|
+
{ id: "openai/gpt-5-nano", name: "GPT-5 Nano", provider: "replicate" },
|
|
224
365
|
{ id: "openai/gpt-5.2", name: "GPT-5.2", provider: "replicate" },
|
|
225
366
|
{ id: "openai/o1", name: "O1", provider: "replicate" },
|
|
226
367
|
{ id: "openai/o4-mini", name: "O4 Mini", provider: "replicate" },
|
|
@@ -231,10 +372,136 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
231
372
|
provider: "replicate"
|
|
232
373
|
},
|
|
233
374
|
{ id: "moonshotai/kimi-k2.5", name: "Kimi K2.5", provider: "replicate" },
|
|
375
|
+
{ id: "moonshotai/kimi-k2.6", name: "Kimi K2.6", provider: "replicate" },
|
|
376
|
+
{
|
|
377
|
+
id: "ibm-granite/granite-4.1-8b",
|
|
378
|
+
name: "Granite 4.1 8B",
|
|
379
|
+
provider: "replicate"
|
|
380
|
+
},
|
|
234
381
|
{
|
|
235
382
|
id: "snowflake/snowflake-arctic-instruct",
|
|
236
383
|
name: "Snowflake Arctic Instruct",
|
|
237
384
|
provider: "replicate"
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
id: "anthropic/claude-sonnet-5",
|
|
388
|
+
name: "Claude Sonnet 5",
|
|
389
|
+
provider: "replicate"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
id: "anthropic/claude-sonnet-4.6",
|
|
393
|
+
name: "Claude Sonnet 4.6",
|
|
394
|
+
provider: "replicate"
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
id: "anthropic/claude-fable-5",
|
|
398
|
+
name: "Claude Fable 5",
|
|
399
|
+
provider: "replicate"
|
|
400
|
+
},
|
|
401
|
+
{ id: "openai/gpt-5.4", name: "GPT-5.4", provider: "replicate" },
|
|
402
|
+
{
|
|
403
|
+
id: "openai/gpt-5.6-sol",
|
|
404
|
+
name: "GPT-5.6 Sol",
|
|
405
|
+
provider: "replicate"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
id: "openai/gpt-5.6-terra",
|
|
409
|
+
name: "GPT-5.6 Terra",
|
|
410
|
+
provider: "replicate"
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
id: "openai/gpt-5.6-luna",
|
|
414
|
+
name: "GPT-5.6 Luna",
|
|
415
|
+
provider: "replicate"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
id: "google/gemini-3.5-flash",
|
|
419
|
+
name: "Gemini 3.5 Flash",
|
|
420
|
+
provider: "replicate"
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
id: "qwen/qwen3-7-plus",
|
|
424
|
+
name: "Qwen3.7 Plus",
|
|
425
|
+
provider: "replicate"
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
id: "ibm-granite/granite-vision-4.1-4b",
|
|
429
|
+
name: "Granite Vision 4.1 4B",
|
|
430
|
+
provider: "replicate"
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
id: "anthropic/claude-3.5-haiku",
|
|
434
|
+
name: "Claude 3.5 Haiku",
|
|
435
|
+
provider: "replicate"
|
|
436
|
+
},
|
|
437
|
+
{ id: "openai/gpt-5.1", name: "GPT-5.1", provider: "replicate" },
|
|
438
|
+
{ id: "openai/gpt-5-pro", name: "GPT-5 Pro", provider: "replicate" },
|
|
439
|
+
{ id: "openai/o1-mini", name: "O1 Mini", provider: "replicate" },
|
|
440
|
+
{
|
|
441
|
+
id: "openai/gpt-oss-120b",
|
|
442
|
+
name: "GPT OSS 120B",
|
|
443
|
+
provider: "replicate"
|
|
444
|
+
},
|
|
445
|
+
{ id: "openai/gpt-oss-20b", name: "GPT OSS 20B", provider: "replicate" },
|
|
446
|
+
{
|
|
447
|
+
id: "meta/llama-4-maverick-instruct",
|
|
448
|
+
name: "Llama 4 Maverick Instruct",
|
|
449
|
+
provider: "replicate"
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
id: "meta/llama-4-scout-instruct",
|
|
453
|
+
name: "Llama 4 Scout Instruct",
|
|
454
|
+
provider: "replicate"
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
id: "ibm-granite/granite-3.2-8b-instruct",
|
|
458
|
+
name: "Granite 3.2 8B Instruct",
|
|
459
|
+
provider: "replicate"
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
id: "ibm-granite/granite-3.3-8b-instruct",
|
|
463
|
+
name: "Granite 3.3 8B Instruct",
|
|
464
|
+
provider: "replicate"
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
id: "ibm-granite/granite-vision-3.3-2b",
|
|
468
|
+
name: "Granite Vision 3.3 2B",
|
|
469
|
+
provider: "replicate"
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
id: "lucataco/qwen2.5-omni-7b",
|
|
473
|
+
name: "Qwen2.5 Omni 7B",
|
|
474
|
+
provider: "replicate"
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
id: "google/gemini-3-flash",
|
|
478
|
+
name: "Gemini 3 Flash",
|
|
479
|
+
provider: "replicate"
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
id: "openai/gpt-5-structured",
|
|
483
|
+
name: "GPT-5 Structured",
|
|
484
|
+
provider: "replicate"
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
id: "moonshotai/kimi-k2-thinking",
|
|
488
|
+
name: "Kimi K2 Thinking",
|
|
489
|
+
provider: "replicate"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
id: "ibm-granite/granite-4.0-h-small",
|
|
493
|
+
name: "Granite 4.0 H Small",
|
|
494
|
+
provider: "replicate"
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
id: "nvidia/nemotron-3-nano-30b-a3b",
|
|
498
|
+
name: "Nemotron 3 Nano 30B A3B",
|
|
499
|
+
provider: "replicate"
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
id: "nvidia/nemotron-nano-v2-12b-vl",
|
|
503
|
+
name: "Nemotron Nano V2 12B VL",
|
|
504
|
+
provider: "replicate"
|
|
238
505
|
}
|
|
239
506
|
];
|
|
240
507
|
}
|
|
@@ -252,22 +519,129 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
252
519
|
name: "MiniMax Speech 2.8 HD",
|
|
253
520
|
provider: "replicate"
|
|
254
521
|
},
|
|
522
|
+
{
|
|
523
|
+
id: "minimax/speech-2.8-turbo",
|
|
524
|
+
name: "MiniMax Speech 2.8 Turbo",
|
|
525
|
+
provider: "replicate"
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
id: "google/gemini-3.1-flash-tts",
|
|
529
|
+
name: "Gemini 3.1 Flash TTS",
|
|
530
|
+
provider: "replicate"
|
|
531
|
+
},
|
|
532
|
+
{ id: "qwen/qwen3-tts", name: "Qwen3 TTS", provider: "replicate" },
|
|
533
|
+
{
|
|
534
|
+
id: "inworld/tts-1.5-max",
|
|
535
|
+
name: "Inworld TTS 1.5 Max",
|
|
536
|
+
provider: "replicate"
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
id: "inworld/tts-1.5-mini",
|
|
540
|
+
name: "Inworld TTS 1.5 Mini",
|
|
541
|
+
provider: "replicate"
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
id: "inworld/realtime-tts-2",
|
|
545
|
+
name: "Inworld Realtime TTS 2",
|
|
546
|
+
provider: "replicate"
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
id: "xai/grok-text-to-speech",
|
|
550
|
+
name: "Grok Text To Speech",
|
|
551
|
+
provider: "replicate"
|
|
552
|
+
},
|
|
255
553
|
{ id: "jaaari/kokoro-82m", name: "Kokoro 82M", provider: "replicate" },
|
|
256
554
|
{
|
|
257
555
|
id: "resemble-ai/chatterbox-pro",
|
|
258
556
|
name: "Chatterbox Pro",
|
|
259
557
|
provider: "replicate"
|
|
260
558
|
},
|
|
261
|
-
{
|
|
559
|
+
{
|
|
560
|
+
id: "resemble-ai/chatterbox-turbo",
|
|
561
|
+
name: "Chatterbox Turbo",
|
|
562
|
+
provider: "replicate"
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
id: "resemble-ai/chatterbox-multilingual",
|
|
566
|
+
name: "Chatterbox Multilingual",
|
|
567
|
+
provider: "replicate"
|
|
568
|
+
},
|
|
569
|
+
{ id: "x-lance/f5-tts", name: "F5 TTS", provider: "replicate" },
|
|
570
|
+
{
|
|
571
|
+
id: "inworld/realtime-tts-1.5-max",
|
|
572
|
+
name: "Inworld Realtime TTS 1.5 Max",
|
|
573
|
+
provider: "replicate"
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
id: "inworld/realtime-tts-1.5-mini",
|
|
577
|
+
name: "Inworld Realtime TTS 1.5 Mini",
|
|
578
|
+
provider: "replicate"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
id: "elevenlabs/v2-multilingual",
|
|
582
|
+
name: "ElevenLabs V2 Multilingual",
|
|
583
|
+
provider: "replicate"
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
id: "elevenlabs/turbo-v2.5",
|
|
587
|
+
name: "ElevenLabs Turbo V2.5",
|
|
588
|
+
provider: "replicate"
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
id: "elevenlabs/flash-v2.5",
|
|
592
|
+
name: "ElevenLabs Flash V2.5",
|
|
593
|
+
provider: "replicate"
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
id: "minimax/speech-2.6-hd",
|
|
597
|
+
name: "MiniMax Speech 2.6 HD",
|
|
598
|
+
provider: "replicate"
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
id: "minimax/speech-2.6-turbo",
|
|
602
|
+
name: "MiniMax Speech 2.6 Turbo",
|
|
603
|
+
provider: "replicate"
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
id: "resemble-ai/chatterbox",
|
|
607
|
+
name: "Chatterbox",
|
|
608
|
+
provider: "replicate"
|
|
609
|
+
}
|
|
262
610
|
];
|
|
263
611
|
}
|
|
612
|
+
async getAvailableMusicModels() {
|
|
613
|
+
return loadMusicModels("@nodetool-ai/replicate-nodes", "replicate-manifest.json", "replicate");
|
|
614
|
+
}
|
|
615
|
+
async getAvailableAudioToAudioModels() {
|
|
616
|
+
return loadAudioToAudioModels("@nodetool-ai/replicate-nodes", "replicate-manifest.json", "replicate");
|
|
617
|
+
}
|
|
264
618
|
async getAvailableASRModels() {
|
|
265
619
|
return [
|
|
620
|
+
{
|
|
621
|
+
id: "elevenlabs/scribe-v2",
|
|
622
|
+
name: "ElevenLabs Scribe V2",
|
|
623
|
+
provider: "replicate"
|
|
624
|
+
},
|
|
266
625
|
{
|
|
267
626
|
id: "openai/gpt-4o-transcribe",
|
|
268
627
|
name: "GPT-4o Transcribe",
|
|
269
628
|
provider: "replicate"
|
|
270
629
|
},
|
|
630
|
+
{
|
|
631
|
+
id: "openai/gpt-4o-mini-transcribe",
|
|
632
|
+
name: "GPT-4o Mini Transcribe",
|
|
633
|
+
provider: "replicate"
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
id: "xai/grok-speech-to-text",
|
|
637
|
+
name: "Grok Speech To Text",
|
|
638
|
+
provider: "replicate"
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
id: "nvidia/parakeet-rnnt-1.1b",
|
|
642
|
+
name: "Parakeet RNNT 1.1B",
|
|
643
|
+
provider: "replicate"
|
|
644
|
+
},
|
|
271
645
|
{
|
|
272
646
|
id: "vaibhavs10/incredibly-fast-whisper",
|
|
273
647
|
name: "Incredibly Fast Whisper",
|
|
@@ -279,6 +653,31 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
279
653
|
id: "thomasmol/whisper-diarization",
|
|
280
654
|
name: "Whisper Diarization",
|
|
281
655
|
provider: "replicate"
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
id: "rafaelgalle/whisper-diarization-advanced",
|
|
659
|
+
name: "Whisper Diarization Advanced",
|
|
660
|
+
provider: "replicate"
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
id: "ibm-granite/granite-speech-3.3-8b",
|
|
664
|
+
name: "Granite Speech 3.3 8B",
|
|
665
|
+
provider: "replicate"
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
id: "ibm-granite/granite-speech-4.1-2b",
|
|
669
|
+
name: "Granite Speech 4.1 2B",
|
|
670
|
+
provider: "replicate"
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
id: "nvidia/canary-qwen-2.5b",
|
|
674
|
+
name: "Canary Qwen 2.5B",
|
|
675
|
+
provider: "replicate"
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
id: "victor-upmeet/whisperx",
|
|
679
|
+
name: "WhisperX Large V3",
|
|
680
|
+
provider: "replicate"
|
|
282
681
|
}
|
|
283
682
|
];
|
|
284
683
|
}
|
|
@@ -314,6 +713,30 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
314
713
|
provider: "replicate",
|
|
315
714
|
dimensions: 768
|
|
316
715
|
},
|
|
716
|
+
{
|
|
717
|
+
id: "ibm-granite/granite-embedding-small-english-r2",
|
|
718
|
+
name: "Granite Embedding Small English R2",
|
|
719
|
+
provider: "replicate",
|
|
720
|
+
dimensions: 384
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
id: "adirik/e5-mistral-7b-instruct",
|
|
724
|
+
name: "E5 Mistral 7B Instruct",
|
|
725
|
+
provider: "replicate",
|
|
726
|
+
dimensions: 4096
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
id: "mark3labs/embeddings-gte-base",
|
|
730
|
+
name: "GTE Base",
|
|
731
|
+
provider: "replicate",
|
|
732
|
+
dimensions: 768
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
id: "center-for-curriculum-redesign/bge_1-5_query_embeddings",
|
|
736
|
+
name: "BGE 1.5 Query Embeddings",
|
|
737
|
+
provider: "replicate",
|
|
738
|
+
dimensions: 1024
|
|
739
|
+
},
|
|
317
740
|
{
|
|
318
741
|
id: "beautyyuyanli/multilingual-e5-large",
|
|
319
742
|
name: "Multilingual E5 Large",
|
|
@@ -343,46 +766,42 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
343
766
|
name: "ImageBind",
|
|
344
767
|
provider: "replicate",
|
|
345
768
|
dimensions: 1024
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
id: "openai/clip",
|
|
772
|
+
name: "CLIP ViT-L/14",
|
|
773
|
+
provider: "replicate",
|
|
774
|
+
dimensions: 768
|
|
775
|
+
},
|
|
776
|
+
{
|
|
777
|
+
id: "krthr/clip-embeddings",
|
|
778
|
+
name: "CLIP Embeddings",
|
|
779
|
+
provider: "replicate",
|
|
780
|
+
dimensions: 768
|
|
346
781
|
}
|
|
347
782
|
];
|
|
348
783
|
}
|
|
349
784
|
// ---------------------------------------------------------------------------
|
|
350
785
|
// Image / Video / Audio capabilities
|
|
351
786
|
// ---------------------------------------------------------------------------
|
|
352
|
-
async _fetchOutputBytes(output) {
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
// FileOutput is a ReadableStream — read it to bytes
|
|
360
|
-
if (target && typeof target === "object" && "getReader" in target) {
|
|
361
|
-
const reader = target.getReader();
|
|
362
|
-
const chunks = [];
|
|
363
|
-
while (true) {
|
|
364
|
-
const { done, value } = await reader.read();
|
|
365
|
-
if (done)
|
|
366
|
-
break;
|
|
367
|
-
chunks.push(value);
|
|
368
|
-
}
|
|
369
|
-
const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
|
|
370
|
-
const result = new Uint8Array(totalLength);
|
|
371
|
-
let offset = 0;
|
|
372
|
-
for (const chunk of chunks) {
|
|
373
|
-
result.set(chunk, offset);
|
|
374
|
-
offset += chunk.length;
|
|
375
|
-
}
|
|
376
|
-
return result;
|
|
377
|
-
}
|
|
378
|
-
// String URL — fetch the bytes
|
|
379
|
-
if (typeof target === "string") {
|
|
380
|
-
const res = await fetch(target);
|
|
381
|
-
if (!res.ok)
|
|
382
|
-
throw new Error(`Failed to fetch output: ${res.status}`);
|
|
383
|
-
return new Uint8Array(await res.arrayBuffer());
|
|
787
|
+
async _fetchOutputBytes(output, signal) {
|
|
788
|
+
signal?.throwIfAborted();
|
|
789
|
+
const target = decodeReplicateOutput(output);
|
|
790
|
+
if (!target) {
|
|
791
|
+
throw new Error("Replicate prediction returned no usable output " +
|
|
792
|
+
`(output was ${describeOutputShape(output)})`);
|
|
384
793
|
}
|
|
385
|
-
|
|
794
|
+
return target.kind === "stream"
|
|
795
|
+
? drainStream(target.stream)
|
|
796
|
+
: this._fetchUrlBytes(target.url, signal);
|
|
797
|
+
}
|
|
798
|
+
async _fetchUrlBytes(url, signal) {
|
|
799
|
+
if (url.startsWith("data:"))
|
|
800
|
+
return decodeDataUri(url);
|
|
801
|
+
const res = await safeFetch(url, signal ? { signal } : undefined);
|
|
802
|
+
if (!res.ok)
|
|
803
|
+
throw new Error(`Failed to fetch output: ${res.status}`);
|
|
804
|
+
return new Uint8Array(await res.arrayBuffer());
|
|
386
805
|
}
|
|
387
806
|
async textToImage(params) {
|
|
388
807
|
if (!params.prompt)
|
|
@@ -403,13 +822,11 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
403
822
|
if (params.scheduler)
|
|
404
823
|
input.scheduler = params.scheduler;
|
|
405
824
|
log.debug("textToImage", { model: params.model.id });
|
|
406
|
-
const output = await this.
|
|
825
|
+
const output = await this.runModel(params.model.id, input);
|
|
407
826
|
return this._fetchOutputBytes(output);
|
|
408
827
|
}
|
|
409
|
-
async imageToImage(
|
|
410
|
-
const
|
|
411
|
-
const dataUri = `data:image/png;base64,${base64}`;
|
|
412
|
-
const input = { image: dataUri };
|
|
828
|
+
async imageToImage(images, params) {
|
|
829
|
+
const input = this.imageInput(params.model.id, images);
|
|
413
830
|
if (params.prompt)
|
|
414
831
|
input.prompt = params.prompt;
|
|
415
832
|
if (params.negativePrompt)
|
|
@@ -423,7 +840,31 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
423
840
|
if (params.seed != null)
|
|
424
841
|
input.seed = params.seed;
|
|
425
842
|
log.debug("imageToImage", { model: params.model.id });
|
|
426
|
-
const output = await this.
|
|
843
|
+
const output = await this.runModel(params.model.id, input);
|
|
844
|
+
return this._fetchOutputBytes(output);
|
|
845
|
+
}
|
|
846
|
+
async inpaint(images, params) {
|
|
847
|
+
const input = this.imageInput(params.model.id, images);
|
|
848
|
+
if (params.prompt)
|
|
849
|
+
input.prompt = params.prompt;
|
|
850
|
+
if (params.negativePrompt)
|
|
851
|
+
input.negative_prompt = params.negativePrompt;
|
|
852
|
+
if (params.guidanceScale != null)
|
|
853
|
+
input.guidance_scale = params.guidanceScale;
|
|
854
|
+
if (params.numInferenceSteps != null)
|
|
855
|
+
input.num_inference_steps = params.numInferenceSteps;
|
|
856
|
+
if (params.strength != null)
|
|
857
|
+
input.strength = params.strength;
|
|
858
|
+
if (params.seed != null)
|
|
859
|
+
input.seed = params.seed;
|
|
860
|
+
if (params.mask && params.mask.length > 0) {
|
|
861
|
+
const maskUri = this.imageDataUri(params.mask);
|
|
862
|
+
const maskField = selectMaskImageInput(getModelImageInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", params.model.id));
|
|
863
|
+
const fieldName = maskField?.apiName ?? "mask_url";
|
|
864
|
+
input[fieldName] = maskField?.isList ? [maskUri] : maskUri;
|
|
865
|
+
}
|
|
866
|
+
log.debug("inpaint", { model: params.model.id });
|
|
867
|
+
const output = await this.runModel(params.model.id, input);
|
|
427
868
|
return this._fetchOutputBytes(output);
|
|
428
869
|
}
|
|
429
870
|
async textToVideo(params) {
|
|
@@ -441,13 +882,17 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
441
882
|
if (params.seed != null)
|
|
442
883
|
input.seed = params.seed;
|
|
443
884
|
log.debug("textToVideo", { model: params.model.id });
|
|
444
|
-
const output = await this.
|
|
885
|
+
const output = await this.runModel(params.model.id, input);
|
|
445
886
|
return this._fetchOutputBytes(output);
|
|
446
887
|
}
|
|
447
888
|
async imageToVideo(image, params) {
|
|
448
|
-
const
|
|
449
|
-
|
|
450
|
-
|
|
889
|
+
const model = (await this.getAvailableVideoModels()).find((item) => item.id === params.model.id);
|
|
890
|
+
if (model && !model.supportedTasks?.includes("image_to_video")) {
|
|
891
|
+
throw new Error(`Replicate model ${params.model.id} does not support image_to_video`);
|
|
892
|
+
}
|
|
893
|
+
if (image.length === 0)
|
|
894
|
+
throw new Error("Replicate image_to_video requires a start image");
|
|
895
|
+
const input = this.imageInput(params.model.id, [image]);
|
|
451
896
|
if (params.prompt)
|
|
452
897
|
input.prompt = params.prompt;
|
|
453
898
|
if (params.negativePrompt)
|
|
@@ -461,24 +906,337 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
461
906
|
if (params.seed != null)
|
|
462
907
|
input.seed = params.seed;
|
|
463
908
|
log.debug("imageToVideo", { model: params.model.id });
|
|
464
|
-
const output = await this.
|
|
909
|
+
const output = await this.runModel(params.model.id, input);
|
|
465
910
|
return this._fetchOutputBytes(output);
|
|
466
911
|
}
|
|
467
|
-
async
|
|
912
|
+
async referenceToVideo(inputs, params) {
|
|
913
|
+
const modelId = params.model.id;
|
|
914
|
+
const model = (await this.getAvailableVideoModels()).find((item) => item.id === modelId);
|
|
915
|
+
if (!model?.supportedTasks?.includes("reference_to_video")) {
|
|
916
|
+
throw new Error(`Replicate model ${modelId} does not support reference_to_video`);
|
|
917
|
+
}
|
|
918
|
+
const fields = getModelReferenceInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId);
|
|
919
|
+
const references = {
|
|
920
|
+
images: inputs.images.filter((bytes) => bytes.length > 0),
|
|
921
|
+
videos: inputs.videos.filter((bytes) => bytes.length > 0)
|
|
922
|
+
};
|
|
923
|
+
validateReferenceInputs("Replicate", modelId, references, fields);
|
|
924
|
+
const declared = getModelInputFields("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId);
|
|
925
|
+
const hasField = (name) => declared.some((field) => field.name === name);
|
|
926
|
+
if (params.useReferenceVideoAudio === true && (!hasField("use_reference_video_audio") || references.videos.length === 0)) {
|
|
927
|
+
throw new Error(`Replicate model ${modelId} does not support reference video audio for these inputs`);
|
|
928
|
+
}
|
|
929
|
+
const input = {};
|
|
930
|
+
for (const field of fields) {
|
|
931
|
+
const buffers = field.kind === "image" ? references.images : references.videos;
|
|
932
|
+
if (buffers.length === 0)
|
|
933
|
+
continue;
|
|
934
|
+
const urls = buffers.map((bytes) => field.kind === "image"
|
|
935
|
+
? this.imageDataUri(bytes)
|
|
936
|
+
: this.dataUri(bytes, sniffVideoMime(bytes)));
|
|
937
|
+
input[field.apiName] = field.isList ? urls : urls[0];
|
|
938
|
+
}
|
|
939
|
+
const options = {
|
|
940
|
+
prompt: params.prompt,
|
|
941
|
+
negative_prompt: params.negativePrompt,
|
|
942
|
+
duration: params.durationSeconds,
|
|
943
|
+
aspect_ratio: params.aspectRatio,
|
|
944
|
+
resolution: params.resolution,
|
|
945
|
+
num_frames: params.numFrames,
|
|
946
|
+
guidance_scale: params.guidanceScale,
|
|
947
|
+
seed: params.seed,
|
|
948
|
+
use_reference_video_audio: params.useReferenceVideoAudio
|
|
949
|
+
};
|
|
950
|
+
for (const [name, value] of Object.entries(options)) {
|
|
951
|
+
if (value != null && hasField(name))
|
|
952
|
+
input[name] = value;
|
|
953
|
+
}
|
|
954
|
+
const timeout = params.timeoutSeconds && params.timeoutSeconds > 0
|
|
955
|
+
? AbortSignal.timeout(params.timeoutSeconds * 1000)
|
|
956
|
+
: undefined;
|
|
957
|
+
const signal = params.signal && timeout
|
|
958
|
+
? AbortSignal.any([params.signal, timeout])
|
|
959
|
+
: params.signal ?? timeout;
|
|
960
|
+
const output = await this.runModel(modelId, input, signal);
|
|
961
|
+
return this._fetchOutputBytes(output, signal);
|
|
962
|
+
}
|
|
963
|
+
dataUri(bytes, mimeType) {
|
|
964
|
+
return `data:${mimeType};base64,${Buffer.from(bytes).toString("base64")}`;
|
|
965
|
+
}
|
|
966
|
+
// Replicate models decode by the declared type, so feeding back a WebP this
|
|
967
|
+
// provider itself produced as `image/png` fails inside the model.
|
|
968
|
+
imageDataUri(bytes) {
|
|
969
|
+
return this.dataUri(bytes, detectImageMime(bytes));
|
|
970
|
+
}
|
|
971
|
+
/**
|
|
972
|
+
* Build the image portion of a Replicate prediction input from one or more
|
|
973
|
+
* source images, using the model's declared schema (replicate-manifest) to
|
|
974
|
+
* pick the correct input field — single (`image`, `input_image`, …) vs list
|
|
975
|
+
* (`image_input`, `images`, …). Falls back to the common conventions when the
|
|
976
|
+
* model isn't in the manifest. Empty buffers are dropped.
|
|
977
|
+
*/
|
|
978
|
+
imageInput(modelId, images) {
|
|
979
|
+
const dataUris = images
|
|
980
|
+
.filter((b) => b && b.length > 0)
|
|
981
|
+
.map((b) => this.imageDataUri(b));
|
|
982
|
+
if (dataUris.length === 0)
|
|
983
|
+
return {};
|
|
984
|
+
const field = selectPrimaryImageInput(getModelImageInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId), dataUris.length);
|
|
985
|
+
if (field) {
|
|
986
|
+
return { [field.apiName]: field.isList ? dataUris : dataUris[0] };
|
|
987
|
+
}
|
|
988
|
+
// Unknown model: fall back to the common conventions.
|
|
989
|
+
return dataUris.length === 1
|
|
990
|
+
? { image: dataUris[0] }
|
|
991
|
+
: { image_input: dataUris };
|
|
992
|
+
}
|
|
993
|
+
async runWithInput(modelId, input) {
|
|
994
|
+
return this._fetchOutputBytes(await this.runModel(modelId, input));
|
|
995
|
+
}
|
|
996
|
+
async upscaleImage(image, params) {
|
|
997
|
+
const input = {
|
|
998
|
+
image: this.imageDataUri(image)
|
|
999
|
+
};
|
|
1000
|
+
if (params.scale != null)
|
|
1001
|
+
input.scale = params.scale;
|
|
1002
|
+
if (params.prompt)
|
|
1003
|
+
input.prompt = params.prompt;
|
|
1004
|
+
if (params.creativity != null)
|
|
1005
|
+
input.creativity = params.creativity;
|
|
1006
|
+
if (params.seed != null)
|
|
1007
|
+
input.seed = params.seed;
|
|
1008
|
+
log.debug("upscaleImage", { model: params.model.id });
|
|
1009
|
+
return this.runWithInput(params.model.id, input);
|
|
1010
|
+
}
|
|
1011
|
+
/**
|
|
1012
|
+
* Outpaint an image. Replicate's expand models take the target canvas rather
|
|
1013
|
+
* than per-side padding (`bria/expand-image`: `canvas_size` plus where the
|
|
1014
|
+
* original sits inside it), so the padding is turned into that geometry and
|
|
1015
|
+
* pruned to whatever the model declares.
|
|
1016
|
+
*/
|
|
1017
|
+
async outpaintImage(images, params) {
|
|
1018
|
+
const input = this.imageInput(params.model.id, images);
|
|
1019
|
+
if (params.prompt)
|
|
1020
|
+
input.prompt = params.prompt;
|
|
1021
|
+
if (params.negativePrompt)
|
|
1022
|
+
input.negative_prompt = params.negativePrompt;
|
|
1023
|
+
if (params.aspectRatio)
|
|
1024
|
+
input.aspect_ratio = params.aspectRatio;
|
|
1025
|
+
const padding = params.padding;
|
|
1026
|
+
if (padding) {
|
|
1027
|
+
const left = padding.left ?? 0;
|
|
1028
|
+
const top = padding.top ?? 0;
|
|
1029
|
+
input.expand_left = left;
|
|
1030
|
+
input.expand_right = padding.right ?? 0;
|
|
1031
|
+
input.expand_top = top;
|
|
1032
|
+
input.expand_bottom = padding.bottom ?? 0;
|
|
1033
|
+
// Where the source image lands on the expanded canvas, for the models
|
|
1034
|
+
// that place it explicitly instead of taking per-side amounts.
|
|
1035
|
+
input.original_image_location = [left, top];
|
|
1036
|
+
}
|
|
1037
|
+
if (params.seed != null)
|
|
1038
|
+
input.seed = params.seed;
|
|
1039
|
+
log.debug("outpaintImage", { model: params.model.id });
|
|
1040
|
+
return this.runWithInput(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1041
|
+
}
|
|
1042
|
+
async removeBackground(image, params) {
|
|
1043
|
+
log.debug("removeBackground", { model: params.model.id });
|
|
1044
|
+
return this.runWithInput(params.model.id, {
|
|
1045
|
+
image: this.imageDataUri(image)
|
|
1046
|
+
});
|
|
1047
|
+
}
|
|
1048
|
+
async relightImage(image, params) {
|
|
1049
|
+
const input = {
|
|
1050
|
+
image: this.imageDataUri(image)
|
|
1051
|
+
};
|
|
1052
|
+
if (params.prompt)
|
|
1053
|
+
input.prompt = params.prompt;
|
|
1054
|
+
if (params.negativePrompt)
|
|
1055
|
+
input.negative_prompt = params.negativePrompt;
|
|
1056
|
+
if (params.seed != null)
|
|
1057
|
+
input.seed = params.seed;
|
|
1058
|
+
log.debug("relightImage", { model: params.model.id });
|
|
1059
|
+
return this.runWithInput(params.model.id, input);
|
|
1060
|
+
}
|
|
1061
|
+
async vectorizeImage(image, params) {
|
|
1062
|
+
log.debug("vectorizeImage", { model: params.model.id });
|
|
1063
|
+
return this.runWithInput(params.model.id, {
|
|
1064
|
+
image: this.imageDataUri(image)
|
|
1065
|
+
});
|
|
1066
|
+
}
|
|
1067
|
+
/**
|
|
1068
|
+
* Drop input fields the model does not declare in the manifest.
|
|
1069
|
+
*
|
|
1070
|
+
* Replicate fails the whole prediction on an undeclared field instead of
|
|
1071
|
+
* ignoring it, so a generic param bag breaks any endpoint with a narrower
|
|
1072
|
+
* schema. An empty declaration set means the model is not in the manifest —
|
|
1073
|
+
* send everything rather than silently stripping the request bare.
|
|
1074
|
+
*/
|
|
1075
|
+
pruneToDeclaredInputs(modelId, input) {
|
|
1076
|
+
const declared = getModelInputNames("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId);
|
|
1077
|
+
if (declared.size === 0)
|
|
1078
|
+
return input;
|
|
1079
|
+
const pruned = {};
|
|
1080
|
+
const dropped = [];
|
|
1081
|
+
for (const [key, value] of Object.entries(input)) {
|
|
1082
|
+
if (declared.has(key))
|
|
1083
|
+
pruned[key] = value;
|
|
1084
|
+
else
|
|
1085
|
+
dropped.push(key);
|
|
1086
|
+
}
|
|
1087
|
+
if (dropped.length > 0) {
|
|
1088
|
+
log.debug("pruned undeclared inputs", { model: modelId, dropped });
|
|
1089
|
+
}
|
|
1090
|
+
return pruned;
|
|
1091
|
+
}
|
|
1092
|
+
async videoToVideo(video, params) {
|
|
1093
|
+
const images = params.referenceImages ?? [];
|
|
1094
|
+
const fields = getModelReferenceInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", params.model.id);
|
|
1095
|
+
if (images.length) {
|
|
1096
|
+
validateReferenceInputs("Replicate", params.model.id, { images, videos: [] }, fields);
|
|
1097
|
+
}
|
|
1098
|
+
params.signal?.throwIfAborted();
|
|
1099
|
+
const input = {
|
|
1100
|
+
video: this.dataUri(video, "video/mp4")
|
|
1101
|
+
};
|
|
1102
|
+
if (images.length) {
|
|
1103
|
+
const urls = images.map((image) => this.imageDataUri(image));
|
|
1104
|
+
for (const field of fields.filter((candidate) => candidate.kind === "image")) {
|
|
1105
|
+
input[field.apiName] = field.isList ? urls : urls[0];
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
if (params.prompt)
|
|
1109
|
+
input.prompt = params.prompt;
|
|
1110
|
+
if (params.negativePrompt)
|
|
1111
|
+
input.negative_prompt = params.negativePrompt;
|
|
1112
|
+
if (params.strength != null)
|
|
1113
|
+
input.strength = params.strength;
|
|
1114
|
+
if (params.seed != null)
|
|
1115
|
+
input.seed = params.seed;
|
|
1116
|
+
log.debug("videoToVideo", { model: params.model.id });
|
|
1117
|
+
return this._fetchOutputBytes(await this.runModel(params.model.id, this.pruneToDeclaredInputs(params.model.id, input), params.signal), params.signal);
|
|
1118
|
+
}
|
|
1119
|
+
async extendVideo(video, params) {
|
|
1120
|
+
if (video.length === 0) {
|
|
1121
|
+
throw new Error("video must not be empty");
|
|
1122
|
+
}
|
|
1123
|
+
const model = (await this.getAvailableVideoModels()).find((candidate) => candidate.id === params.model.id);
|
|
1124
|
+
if (!model?.supportedTasks?.includes("extend_video")) {
|
|
1125
|
+
throw new Error(`Model ${params.model.id} does not support extend_video`);
|
|
1126
|
+
}
|
|
1127
|
+
const directionTasks = model.supportedTasks.filter((task) => task.startsWith("extend_video_"));
|
|
1128
|
+
if (directionTasks.length > 0 &&
|
|
1129
|
+
!directionTasks.includes(`extend_video_${params.mode}`)) {
|
|
1130
|
+
throw new Error(`Model ${params.model.id} does not support ${params.mode} extension`);
|
|
1131
|
+
}
|
|
1132
|
+
if (!Number.isFinite(params.durationSeconds) ||
|
|
1133
|
+
params.durationSeconds <= 0) {
|
|
1134
|
+
throw new Error("Extension duration must be positive");
|
|
1135
|
+
}
|
|
1136
|
+
const input = this.pruneToDeclaredInputs(params.model.id, {
|
|
1137
|
+
video: this.dataUri(video, "video/mp4"),
|
|
1138
|
+
prompt: params.prompt,
|
|
1139
|
+
mode: params.mode,
|
|
1140
|
+
duration: params.durationSeconds
|
|
1141
|
+
});
|
|
1142
|
+
log.debug("extendVideo", { model: params.model.id, mode: params.mode });
|
|
1143
|
+
return this._fetchOutputBytes(await this.runModel(params.model.id, input));
|
|
1144
|
+
}
|
|
1145
|
+
async upscaleVideo(video, params) {
|
|
1146
|
+
const input = {
|
|
1147
|
+
video: this.dataUri(video, "video/mp4")
|
|
1148
|
+
};
|
|
1149
|
+
// One concept, four spellings across the catalog's upscalers; the prune
|
|
1150
|
+
// below drops whichever names this model does not declare.
|
|
1151
|
+
if (params.scale != null) {
|
|
1152
|
+
input.scale = params.scale;
|
|
1153
|
+
input.upscale_factor = params.scale;
|
|
1154
|
+
input.resolution = params.scale;
|
|
1155
|
+
}
|
|
1156
|
+
if (params.targetResolution) {
|
|
1157
|
+
input.target_resolution = params.targetResolution;
|
|
1158
|
+
}
|
|
1159
|
+
if (params.prompt)
|
|
1160
|
+
input.prompt = params.prompt;
|
|
1161
|
+
if (params.creativity != null)
|
|
1162
|
+
input.creativity = params.creativity;
|
|
1163
|
+
if (params.seed != null)
|
|
1164
|
+
input.seed = params.seed;
|
|
1165
|
+
log.debug("upscaleVideo", { model: params.model.id });
|
|
1166
|
+
return this.runWithInput(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1167
|
+
}
|
|
1168
|
+
async lipSync(video, params) {
|
|
1169
|
+
const input = {
|
|
1170
|
+
video: this.dataUri(video, "video/mp4"),
|
|
1171
|
+
audio: this.dataUri(params.audio, "audio/mpeg")
|
|
1172
|
+
};
|
|
1173
|
+
if (params.seed != null)
|
|
1174
|
+
input.seed = params.seed;
|
|
1175
|
+
log.debug("lipSync", { model: params.model.id });
|
|
1176
|
+
return this.runWithInput(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1177
|
+
}
|
|
1178
|
+
/**
|
|
1179
|
+
* Replicate TTS models (elevenlabs, minimax, kokoro, chatterbox, f5-tts)
|
|
1180
|
+
* return an ENCODED audio file (MP3/WAV), not raw little-endian PCM. Expose
|
|
1181
|
+
* it through the encoded path (like textToMusic / FAL) rather than overriding
|
|
1182
|
+
* the streaming-PCM textToSpeech — the previous override blindly cast the
|
|
1183
|
+
* encoded bytes to Int16Array, producing noise (MP3) or a header click +
|
|
1184
|
+
* misaligned waveform (WAV).
|
|
1185
|
+
*/
|
|
1186
|
+
async textToSpeechEncoded(args) {
|
|
468
1187
|
const input = { text: args.text };
|
|
469
1188
|
if (args.voice)
|
|
470
1189
|
input.voice = args.voice;
|
|
471
1190
|
if (args.speed != null)
|
|
472
1191
|
input.speed = args.speed;
|
|
473
|
-
log.debug("
|
|
474
|
-
const output = await this.
|
|
475
|
-
input
|
|
476
|
-
});
|
|
1192
|
+
log.debug("textToSpeechEncoded", { model: args.model });
|
|
1193
|
+
const output = await this.runModel(args.model, input);
|
|
477
1194
|
const bytes = await this._fetchOutputBytes(output);
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
1195
|
+
return { data: bytes, mimeType: sniffAudioMime(bytes) };
|
|
1196
|
+
}
|
|
1197
|
+
/**
|
|
1198
|
+
* Generate music as an encoded audio file. Replicate music models (MusicGen,
|
|
1199
|
+
* MiniMax Music, ElevenLabs Music, …) return a file URL / FileOutput, so this
|
|
1200
|
+
* runs the model and downloads the encoded audio bytes.
|
|
1201
|
+
*/
|
|
1202
|
+
async textToMusic(params) {
|
|
1203
|
+
if (!params.prompt)
|
|
1204
|
+
throw new Error("Prompt is required");
|
|
1205
|
+
const input = { prompt: params.prompt };
|
|
1206
|
+
if (params.lyrics)
|
|
1207
|
+
input.lyrics = params.lyrics;
|
|
1208
|
+
if (params.durationSeconds != null) {
|
|
1209
|
+
input.duration = Math.round(params.durationSeconds);
|
|
1210
|
+
}
|
|
1211
|
+
if (params.seed != null)
|
|
1212
|
+
input.seed = params.seed;
|
|
1213
|
+
log.debug("textToMusic", { model: params.model.id });
|
|
1214
|
+
const output = await this.runModel(params.model.id, input);
|
|
1215
|
+
const bytes = await this._fetchOutputBytes(output);
|
|
1216
|
+
return { data: bytes, mimeType: sniffAudioMime(bytes) };
|
|
1217
|
+
}
|
|
1218
|
+
/**
|
|
1219
|
+
* Rewrite a recording. Replicate's audio transforms (super-resolution, stem
|
|
1220
|
+
* separation, enhancers) take the source under `audio`; the direction fields
|
|
1221
|
+
* go through {@link pruneToDeclaredInputs} like {@link lipSync} does, so a
|
|
1222
|
+
* model that declares none of them does not get sent one.
|
|
1223
|
+
*/
|
|
1224
|
+
async audioToAudio(audio, params) {
|
|
1225
|
+
const input = {
|
|
1226
|
+
audio: this.dataUri(audio, "audio/mpeg")
|
|
481
1227
|
};
|
|
1228
|
+
if (params.prompt)
|
|
1229
|
+
input.prompt = params.prompt;
|
|
1230
|
+
if (params.voice)
|
|
1231
|
+
input.voice = params.voice;
|
|
1232
|
+
if (params.strength != null)
|
|
1233
|
+
input.strength = params.strength;
|
|
1234
|
+
if (params.seed != null)
|
|
1235
|
+
input.seed = params.seed;
|
|
1236
|
+
log.debug("audioToAudio", { model: params.model.id });
|
|
1237
|
+
const output = await this.runModel(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1238
|
+
const bytes = await this._fetchOutputBytes(output);
|
|
1239
|
+
return { data: bytes, mimeType: sniffAudioMime(bytes) };
|
|
482
1240
|
}
|
|
483
1241
|
}
|
|
484
1242
|
//# sourceMappingURL=replicate-provider.js.map
|