@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.1
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 +954 -127
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2424 -513
- 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 +67 -0
- package/dist/generation-registry.d.ts.map +1 -0
- package/dist/generation-registry.js +126 -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 +344 -0
- package/dist/host-binaries.js.map +1 -0
- package/dist/image-codec.d.ts +74 -0
- package/dist/image-codec.d.ts.map +1 -0
- package/dist/image-codec.js +273 -0
- package/dist/image-codec.js.map +1 -0
- package/dist/index.d.ts +56 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -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 +19 -0
- package/dist/media-ref-bytes.d.ts.map +1 -0
- package/dist/media-ref-bytes.js +181 -0
- package/dist/media-ref-bytes.js.map +1 -0
- package/dist/node-executor.d.ts +113 -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 +33 -10
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +84 -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 +101 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -0
- package/dist/providers/atlascloud-provider.js +1009 -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 +481 -24
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +1259 -42
- 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 +131 -68
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +1095 -515
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +82 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +492 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +5 -2
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +9 -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 +74 -0
- package/dist/providers/core-tools.d.ts.map +1 -0
- package/dist/providers/core-tools.js +127 -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 +159 -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 +81 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -0
- package/dist/providers/custom-openai-provider.js +182 -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/elevenlabs-provider.d.ts +49 -0
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
- package/dist/providers/elevenlabs-provider.js +142 -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 +38 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -0
- package/dist/providers/evolink-provider.js +304 -0
- package/dist/providers/evolink-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +72 -1
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +203 -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 +171 -7
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +1369 -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 +148 -8
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +1500 -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 +30 -0
- package/dist/providers/higgsfield-provider.d.ts.map +1 -0
- package/dist/providers/higgsfield-provider.js +131 -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 +71 -3
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +230 -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 +84 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +239 -56
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +10 -2
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +16 -7
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +170 -9
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +1176 -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 +21 -37
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +43 -354
- 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/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 +14 -1
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +76 -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 +25 -18
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +211 -72
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +6 -12
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +10 -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 +98 -0
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
- package/dist/providers/node-llama-cpp-provider.js +479 -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 +224 -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 +28 -1
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +193 -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 +89 -26
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +990 -105
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +6 -12
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +24 -53
- 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 +165 -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 +157 -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 +20 -12
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +185 -25
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +89 -7
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +801 -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/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 +45 -0
- package/dist/providers/reve-provider.d.ts.map +1 -0
- package/dist/providers/reve-provider.js +159 -0
- package/dist/providers/reve-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +23 -1
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +89 -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-provider.d.ts +19 -16
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +103 -225
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +44 -0
- package/dist/providers/topaz-provider.d.ts.map +1 -0
- package/dist/providers/topaz-provider.js +239 -0
- package/dist/providers/topaz-provider.js.map +1 -0
- package/dist/providers/types.d.ts +603 -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 +27 -0
- package/dist/providers/useapi-provider.d.ts.map +1 -0
- package/dist/providers/useapi-provider.js +266 -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 +22 -8
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +48 -23
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +10 -2
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +16 -7
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +54 -13
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +299 -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 +24 -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/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 +59 -0
- package/dist/storage-workspace.d.ts.map +1 -0
- package/dist/storage-workspace.js +426 -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 +7 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +23 -0
- 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 +10 -0
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +59 -20
- package/dist/trace-exporters.js.map +1 -1
- package/dist/tracing-helpers.d.ts +45 -4
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +62 -19
- package/dist/tracing-helpers.js.map +1 -1
- 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 +107 -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
|
*
|
|
@@ -23,12 +124,13 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
23
124
|
throw new Error("REPLICATE_API_TOKEN is required");
|
|
24
125
|
}
|
|
25
126
|
this.apiKey = apiKey;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
127
|
+
const replicateOptions = {
|
|
128
|
+
auth: apiKey
|
|
129
|
+
};
|
|
130
|
+
if (options.fetchFn) {
|
|
131
|
+
replicateOptions.fetch = options.fetchFn;
|
|
132
|
+
}
|
|
133
|
+
this._client = options.client ?? new Replicate(replicateOptions);
|
|
32
134
|
}
|
|
33
135
|
getContainerEnv() {
|
|
34
136
|
return { REPLICATE_API_TOKEN: this.apiKey };
|
|
@@ -37,6 +139,14 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
37
139
|
// Replicate predictions API does not support OpenAI-style tool calling
|
|
38
140
|
return false;
|
|
39
141
|
}
|
|
142
|
+
/** Create a prediction, waiting out the low-credit throttle. */
|
|
143
|
+
runModel(modelId, input, signal) {
|
|
144
|
+
signal?.throwIfAborted();
|
|
145
|
+
const options = { input };
|
|
146
|
+
if (signal)
|
|
147
|
+
options.signal = signal;
|
|
148
|
+
return withReplicateRetry(modelId, () => this._client.run(modelId, options), signal);
|
|
149
|
+
}
|
|
40
150
|
// ---------------------------------------------------------------------------
|
|
41
151
|
// Chat completions via Replicate SDK
|
|
42
152
|
// ---------------------------------------------------------------------------
|
|
@@ -48,7 +158,7 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
48
158
|
let systemPrompt = "";
|
|
49
159
|
const parts = [];
|
|
50
160
|
for (const msg of messages) {
|
|
51
|
-
const text =
|
|
161
|
+
const text = isString(msg.content)
|
|
52
162
|
? msg.content
|
|
53
163
|
: Array.isArray(msg.content)
|
|
54
164
|
? msg.content
|
|
@@ -79,13 +189,11 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
79
189
|
if (args.topP != null)
|
|
80
190
|
input.top_p = args.topP;
|
|
81
191
|
log.debug("generateMessage", { model: args.model });
|
|
82
|
-
const output = await this.
|
|
83
|
-
input
|
|
84
|
-
});
|
|
192
|
+
const output = await this.runModel(args.model, input);
|
|
85
193
|
// Replicate LLMs return output as a string, array of token strings,
|
|
86
194
|
// or a ReadableStream/FileOutput.
|
|
87
195
|
let text;
|
|
88
|
-
if (
|
|
196
|
+
if (isString(output)) {
|
|
89
197
|
text = output;
|
|
90
198
|
}
|
|
91
199
|
else if (Array.isArray(output)) {
|
|
@@ -211,6 +319,11 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
211
319
|
name: "Claude Opus 4.6",
|
|
212
320
|
provider: "replicate"
|
|
213
321
|
},
|
|
322
|
+
{
|
|
323
|
+
id: "anthropic/claude-opus-4.7",
|
|
324
|
+
name: "Claude Opus 4.7",
|
|
325
|
+
provider: "replicate"
|
|
326
|
+
},
|
|
214
327
|
{ id: "openai/gpt-4o", name: "GPT-4o", provider: "replicate" },
|
|
215
328
|
{ id: "openai/gpt-4o-mini", name: "GPT-4o Mini", provider: "replicate" },
|
|
216
329
|
{ id: "openai/gpt-4.1", name: "GPT-4.1", provider: "replicate" },
|
|
@@ -219,8 +332,14 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
219
332
|
name: "GPT-4.1 Mini",
|
|
220
333
|
provider: "replicate"
|
|
221
334
|
},
|
|
335
|
+
{
|
|
336
|
+
id: "openai/gpt-4.1-nano",
|
|
337
|
+
name: "GPT-4.1 Nano",
|
|
338
|
+
provider: "replicate"
|
|
339
|
+
},
|
|
222
340
|
{ id: "openai/gpt-5", name: "GPT-5", provider: "replicate" },
|
|
223
341
|
{ id: "openai/gpt-5-mini", name: "GPT-5 Mini", provider: "replicate" },
|
|
342
|
+
{ id: "openai/gpt-5-nano", name: "GPT-5 Nano", provider: "replicate" },
|
|
224
343
|
{ id: "openai/gpt-5.2", name: "GPT-5.2", provider: "replicate" },
|
|
225
344
|
{ id: "openai/o1", name: "O1", provider: "replicate" },
|
|
226
345
|
{ id: "openai/o4-mini", name: "O4 Mini", provider: "replicate" },
|
|
@@ -231,10 +350,136 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
231
350
|
provider: "replicate"
|
|
232
351
|
},
|
|
233
352
|
{ id: "moonshotai/kimi-k2.5", name: "Kimi K2.5", provider: "replicate" },
|
|
353
|
+
{ id: "moonshotai/kimi-k2.6", name: "Kimi K2.6", provider: "replicate" },
|
|
354
|
+
{
|
|
355
|
+
id: "ibm-granite/granite-4.1-8b",
|
|
356
|
+
name: "Granite 4.1 8B",
|
|
357
|
+
provider: "replicate"
|
|
358
|
+
},
|
|
234
359
|
{
|
|
235
360
|
id: "snowflake/snowflake-arctic-instruct",
|
|
236
361
|
name: "Snowflake Arctic Instruct",
|
|
237
362
|
provider: "replicate"
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: "anthropic/claude-sonnet-5",
|
|
366
|
+
name: "Claude Sonnet 5",
|
|
367
|
+
provider: "replicate"
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
id: "anthropic/claude-sonnet-4.6",
|
|
371
|
+
name: "Claude Sonnet 4.6",
|
|
372
|
+
provider: "replicate"
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
id: "anthropic/claude-fable-5",
|
|
376
|
+
name: "Claude Fable 5",
|
|
377
|
+
provider: "replicate"
|
|
378
|
+
},
|
|
379
|
+
{ id: "openai/gpt-5.4", name: "GPT-5.4", provider: "replicate" },
|
|
380
|
+
{
|
|
381
|
+
id: "openai/gpt-5.6-sol",
|
|
382
|
+
name: "GPT-5.6 Sol",
|
|
383
|
+
provider: "replicate"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
id: "openai/gpt-5.6-terra",
|
|
387
|
+
name: "GPT-5.6 Terra",
|
|
388
|
+
provider: "replicate"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
id: "openai/gpt-5.6-luna",
|
|
392
|
+
name: "GPT-5.6 Luna",
|
|
393
|
+
provider: "replicate"
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
id: "google/gemini-3.5-flash",
|
|
397
|
+
name: "Gemini 3.5 Flash",
|
|
398
|
+
provider: "replicate"
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
id: "qwen/qwen3-7-plus",
|
|
402
|
+
name: "Qwen3.7 Plus",
|
|
403
|
+
provider: "replicate"
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
id: "ibm-granite/granite-vision-4.1-4b",
|
|
407
|
+
name: "Granite Vision 4.1 4B",
|
|
408
|
+
provider: "replicate"
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
id: "anthropic/claude-3.5-haiku",
|
|
412
|
+
name: "Claude 3.5 Haiku",
|
|
413
|
+
provider: "replicate"
|
|
414
|
+
},
|
|
415
|
+
{ id: "openai/gpt-5.1", name: "GPT-5.1", provider: "replicate" },
|
|
416
|
+
{ id: "openai/gpt-5-pro", name: "GPT-5 Pro", provider: "replicate" },
|
|
417
|
+
{ id: "openai/o1-mini", name: "O1 Mini", provider: "replicate" },
|
|
418
|
+
{
|
|
419
|
+
id: "openai/gpt-oss-120b",
|
|
420
|
+
name: "GPT OSS 120B",
|
|
421
|
+
provider: "replicate"
|
|
422
|
+
},
|
|
423
|
+
{ id: "openai/gpt-oss-20b", name: "GPT OSS 20B", provider: "replicate" },
|
|
424
|
+
{
|
|
425
|
+
id: "meta/llama-4-maverick-instruct",
|
|
426
|
+
name: "Llama 4 Maverick Instruct",
|
|
427
|
+
provider: "replicate"
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
id: "meta/llama-4-scout-instruct",
|
|
431
|
+
name: "Llama 4 Scout Instruct",
|
|
432
|
+
provider: "replicate"
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
id: "ibm-granite/granite-3.2-8b-instruct",
|
|
436
|
+
name: "Granite 3.2 8B Instruct",
|
|
437
|
+
provider: "replicate"
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
id: "ibm-granite/granite-3.3-8b-instruct",
|
|
441
|
+
name: "Granite 3.3 8B Instruct",
|
|
442
|
+
provider: "replicate"
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
id: "ibm-granite/granite-vision-3.3-2b",
|
|
446
|
+
name: "Granite Vision 3.3 2B",
|
|
447
|
+
provider: "replicate"
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
id: "lucataco/qwen2.5-omni-7b",
|
|
451
|
+
name: "Qwen2.5 Omni 7B",
|
|
452
|
+
provider: "replicate"
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
id: "google/gemini-3-flash",
|
|
456
|
+
name: "Gemini 3 Flash",
|
|
457
|
+
provider: "replicate"
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
id: "openai/gpt-5-structured",
|
|
461
|
+
name: "GPT-5 Structured",
|
|
462
|
+
provider: "replicate"
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
id: "moonshotai/kimi-k2-thinking",
|
|
466
|
+
name: "Kimi K2 Thinking",
|
|
467
|
+
provider: "replicate"
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
id: "ibm-granite/granite-4.0-h-small",
|
|
471
|
+
name: "Granite 4.0 H Small",
|
|
472
|
+
provider: "replicate"
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
id: "nvidia/nemotron-3-nano-30b-a3b",
|
|
476
|
+
name: "Nemotron 3 Nano 30B A3B",
|
|
477
|
+
provider: "replicate"
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
id: "nvidia/nemotron-nano-v2-12b-vl",
|
|
481
|
+
name: "Nemotron Nano V2 12B VL",
|
|
482
|
+
provider: "replicate"
|
|
238
483
|
}
|
|
239
484
|
];
|
|
240
485
|
}
|
|
@@ -252,22 +497,129 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
252
497
|
name: "MiniMax Speech 2.8 HD",
|
|
253
498
|
provider: "replicate"
|
|
254
499
|
},
|
|
500
|
+
{
|
|
501
|
+
id: "minimax/speech-2.8-turbo",
|
|
502
|
+
name: "MiniMax Speech 2.8 Turbo",
|
|
503
|
+
provider: "replicate"
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
id: "google/gemini-3.1-flash-tts",
|
|
507
|
+
name: "Gemini 3.1 Flash TTS",
|
|
508
|
+
provider: "replicate"
|
|
509
|
+
},
|
|
510
|
+
{ id: "qwen/qwen3-tts", name: "Qwen3 TTS", provider: "replicate" },
|
|
511
|
+
{
|
|
512
|
+
id: "inworld/tts-1.5-max",
|
|
513
|
+
name: "Inworld TTS 1.5 Max",
|
|
514
|
+
provider: "replicate"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
id: "inworld/tts-1.5-mini",
|
|
518
|
+
name: "Inworld TTS 1.5 Mini",
|
|
519
|
+
provider: "replicate"
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
id: "inworld/realtime-tts-2",
|
|
523
|
+
name: "Inworld Realtime TTS 2",
|
|
524
|
+
provider: "replicate"
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
id: "xai/grok-text-to-speech",
|
|
528
|
+
name: "Grok Text To Speech",
|
|
529
|
+
provider: "replicate"
|
|
530
|
+
},
|
|
255
531
|
{ id: "jaaari/kokoro-82m", name: "Kokoro 82M", provider: "replicate" },
|
|
256
532
|
{
|
|
257
533
|
id: "resemble-ai/chatterbox-pro",
|
|
258
534
|
name: "Chatterbox Pro",
|
|
259
535
|
provider: "replicate"
|
|
260
536
|
},
|
|
261
|
-
{
|
|
537
|
+
{
|
|
538
|
+
id: "resemble-ai/chatterbox-turbo",
|
|
539
|
+
name: "Chatterbox Turbo",
|
|
540
|
+
provider: "replicate"
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
id: "resemble-ai/chatterbox-multilingual",
|
|
544
|
+
name: "Chatterbox Multilingual",
|
|
545
|
+
provider: "replicate"
|
|
546
|
+
},
|
|
547
|
+
{ id: "x-lance/f5-tts", name: "F5 TTS", provider: "replicate" },
|
|
548
|
+
{
|
|
549
|
+
id: "inworld/realtime-tts-1.5-max",
|
|
550
|
+
name: "Inworld Realtime TTS 1.5 Max",
|
|
551
|
+
provider: "replicate"
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
id: "inworld/realtime-tts-1.5-mini",
|
|
555
|
+
name: "Inworld Realtime TTS 1.5 Mini",
|
|
556
|
+
provider: "replicate"
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
id: "elevenlabs/v2-multilingual",
|
|
560
|
+
name: "ElevenLabs V2 Multilingual",
|
|
561
|
+
provider: "replicate"
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
id: "elevenlabs/turbo-v2.5",
|
|
565
|
+
name: "ElevenLabs Turbo V2.5",
|
|
566
|
+
provider: "replicate"
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
id: "elevenlabs/flash-v2.5",
|
|
570
|
+
name: "ElevenLabs Flash V2.5",
|
|
571
|
+
provider: "replicate"
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
id: "minimax/speech-2.6-hd",
|
|
575
|
+
name: "MiniMax Speech 2.6 HD",
|
|
576
|
+
provider: "replicate"
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
id: "minimax/speech-2.6-turbo",
|
|
580
|
+
name: "MiniMax Speech 2.6 Turbo",
|
|
581
|
+
provider: "replicate"
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
id: "resemble-ai/chatterbox",
|
|
585
|
+
name: "Chatterbox",
|
|
586
|
+
provider: "replicate"
|
|
587
|
+
}
|
|
262
588
|
];
|
|
263
589
|
}
|
|
590
|
+
async getAvailableMusicModels() {
|
|
591
|
+
return loadMusicModels("@nodetool-ai/replicate-nodes", "replicate-manifest.json", "replicate");
|
|
592
|
+
}
|
|
593
|
+
async getAvailableAudioToAudioModels() {
|
|
594
|
+
return loadAudioToAudioModels("@nodetool-ai/replicate-nodes", "replicate-manifest.json", "replicate");
|
|
595
|
+
}
|
|
264
596
|
async getAvailableASRModels() {
|
|
265
597
|
return [
|
|
598
|
+
{
|
|
599
|
+
id: "elevenlabs/scribe-v2",
|
|
600
|
+
name: "ElevenLabs Scribe V2",
|
|
601
|
+
provider: "replicate"
|
|
602
|
+
},
|
|
266
603
|
{
|
|
267
604
|
id: "openai/gpt-4o-transcribe",
|
|
268
605
|
name: "GPT-4o Transcribe",
|
|
269
606
|
provider: "replicate"
|
|
270
607
|
},
|
|
608
|
+
{
|
|
609
|
+
id: "openai/gpt-4o-mini-transcribe",
|
|
610
|
+
name: "GPT-4o Mini Transcribe",
|
|
611
|
+
provider: "replicate"
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
id: "xai/grok-speech-to-text",
|
|
615
|
+
name: "Grok Speech To Text",
|
|
616
|
+
provider: "replicate"
|
|
617
|
+
},
|
|
618
|
+
{
|
|
619
|
+
id: "nvidia/parakeet-rnnt-1.1b",
|
|
620
|
+
name: "Parakeet RNNT 1.1B",
|
|
621
|
+
provider: "replicate"
|
|
622
|
+
},
|
|
271
623
|
{
|
|
272
624
|
id: "vaibhavs10/incredibly-fast-whisper",
|
|
273
625
|
name: "Incredibly Fast Whisper",
|
|
@@ -279,6 +631,31 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
279
631
|
id: "thomasmol/whisper-diarization",
|
|
280
632
|
name: "Whisper Diarization",
|
|
281
633
|
provider: "replicate"
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
id: "rafaelgalle/whisper-diarization-advanced",
|
|
637
|
+
name: "Whisper Diarization Advanced",
|
|
638
|
+
provider: "replicate"
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
id: "ibm-granite/granite-speech-3.3-8b",
|
|
642
|
+
name: "Granite Speech 3.3 8B",
|
|
643
|
+
provider: "replicate"
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
id: "ibm-granite/granite-speech-4.1-2b",
|
|
647
|
+
name: "Granite Speech 4.1 2B",
|
|
648
|
+
provider: "replicate"
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
id: "nvidia/canary-qwen-2.5b",
|
|
652
|
+
name: "Canary Qwen 2.5B",
|
|
653
|
+
provider: "replicate"
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
id: "victor-upmeet/whisperx",
|
|
657
|
+
name: "WhisperX Large V3",
|
|
658
|
+
provider: "replicate"
|
|
282
659
|
}
|
|
283
660
|
];
|
|
284
661
|
}
|
|
@@ -314,6 +691,30 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
314
691
|
provider: "replicate",
|
|
315
692
|
dimensions: 768
|
|
316
693
|
},
|
|
694
|
+
{
|
|
695
|
+
id: "ibm-granite/granite-embedding-small-english-r2",
|
|
696
|
+
name: "Granite Embedding Small English R2",
|
|
697
|
+
provider: "replicate",
|
|
698
|
+
dimensions: 384
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
id: "adirik/e5-mistral-7b-instruct",
|
|
702
|
+
name: "E5 Mistral 7B Instruct",
|
|
703
|
+
provider: "replicate",
|
|
704
|
+
dimensions: 4096
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
id: "mark3labs/embeddings-gte-base",
|
|
708
|
+
name: "GTE Base",
|
|
709
|
+
provider: "replicate",
|
|
710
|
+
dimensions: 768
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
id: "center-for-curriculum-redesign/bge_1-5_query_embeddings",
|
|
714
|
+
name: "BGE 1.5 Query Embeddings",
|
|
715
|
+
provider: "replicate",
|
|
716
|
+
dimensions: 1024
|
|
717
|
+
},
|
|
317
718
|
{
|
|
318
719
|
id: "beautyyuyanli/multilingual-e5-large",
|
|
319
720
|
name: "Multilingual E5 Large",
|
|
@@ -343,46 +744,42 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
343
744
|
name: "ImageBind",
|
|
344
745
|
provider: "replicate",
|
|
345
746
|
dimensions: 1024
|
|
747
|
+
},
|
|
748
|
+
{
|
|
749
|
+
id: "openai/clip",
|
|
750
|
+
name: "CLIP ViT-L/14",
|
|
751
|
+
provider: "replicate",
|
|
752
|
+
dimensions: 768
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
id: "krthr/clip-embeddings",
|
|
756
|
+
name: "CLIP Embeddings",
|
|
757
|
+
provider: "replicate",
|
|
758
|
+
dimensions: 768
|
|
346
759
|
}
|
|
347
760
|
];
|
|
348
761
|
}
|
|
349
762
|
// ---------------------------------------------------------------------------
|
|
350
763
|
// Image / Video / Audio capabilities
|
|
351
764
|
// ---------------------------------------------------------------------------
|
|
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;
|
|
765
|
+
async _fetchOutputBytes(output, signal) {
|
|
766
|
+
signal?.throwIfAborted();
|
|
767
|
+
const target = decodeReplicateOutput(output);
|
|
768
|
+
if (!target) {
|
|
769
|
+
throw new Error("Replicate prediction returned no usable output " +
|
|
770
|
+
`(output was ${describeOutputShape(output)})`);
|
|
377
771
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
772
|
+
return target.kind === "stream"
|
|
773
|
+
? drainStream(target.stream)
|
|
774
|
+
: this._fetchUrlBytes(target.url, signal);
|
|
775
|
+
}
|
|
776
|
+
async _fetchUrlBytes(url, signal) {
|
|
777
|
+
if (url.startsWith("data:"))
|
|
778
|
+
return decodeDataUri(url);
|
|
779
|
+
const res = await safeFetch(url, signal ? { signal } : undefined);
|
|
780
|
+
if (!res.ok)
|
|
781
|
+
throw new Error(`Failed to fetch output: ${res.status}`);
|
|
782
|
+
return new Uint8Array(await res.arrayBuffer());
|
|
386
783
|
}
|
|
387
784
|
async textToImage(params) {
|
|
388
785
|
if (!params.prompt)
|
|
@@ -403,13 +800,11 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
403
800
|
if (params.scheduler)
|
|
404
801
|
input.scheduler = params.scheduler;
|
|
405
802
|
log.debug("textToImage", { model: params.model.id });
|
|
406
|
-
const output = await this.
|
|
803
|
+
const output = await this.runModel(params.model.id, input);
|
|
407
804
|
return this._fetchOutputBytes(output);
|
|
408
805
|
}
|
|
409
|
-
async imageToImage(
|
|
410
|
-
const
|
|
411
|
-
const dataUri = `data:image/png;base64,${base64}`;
|
|
412
|
-
const input = { image: dataUri };
|
|
806
|
+
async imageToImage(images, params) {
|
|
807
|
+
const input = this.imageInput(params.model.id, images);
|
|
413
808
|
if (params.prompt)
|
|
414
809
|
input.prompt = params.prompt;
|
|
415
810
|
if (params.negativePrompt)
|
|
@@ -423,7 +818,31 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
423
818
|
if (params.seed != null)
|
|
424
819
|
input.seed = params.seed;
|
|
425
820
|
log.debug("imageToImage", { model: params.model.id });
|
|
426
|
-
const output = await this.
|
|
821
|
+
const output = await this.runModel(params.model.id, input);
|
|
822
|
+
return this._fetchOutputBytes(output);
|
|
823
|
+
}
|
|
824
|
+
async inpaint(images, params) {
|
|
825
|
+
const input = this.imageInput(params.model.id, images);
|
|
826
|
+
if (params.prompt)
|
|
827
|
+
input.prompt = params.prompt;
|
|
828
|
+
if (params.negativePrompt)
|
|
829
|
+
input.negative_prompt = params.negativePrompt;
|
|
830
|
+
if (params.guidanceScale != null)
|
|
831
|
+
input.guidance_scale = params.guidanceScale;
|
|
832
|
+
if (params.numInferenceSteps != null)
|
|
833
|
+
input.num_inference_steps = params.numInferenceSteps;
|
|
834
|
+
if (params.strength != null)
|
|
835
|
+
input.strength = params.strength;
|
|
836
|
+
if (params.seed != null)
|
|
837
|
+
input.seed = params.seed;
|
|
838
|
+
if (params.mask && params.mask.length > 0) {
|
|
839
|
+
const maskUri = this.imageDataUri(params.mask);
|
|
840
|
+
const maskField = selectMaskImageInput(getModelImageInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", params.model.id));
|
|
841
|
+
const fieldName = maskField?.apiName ?? "mask_url";
|
|
842
|
+
input[fieldName] = maskField?.isList ? [maskUri] : maskUri;
|
|
843
|
+
}
|
|
844
|
+
log.debug("inpaint", { model: params.model.id });
|
|
845
|
+
const output = await this.runModel(params.model.id, input);
|
|
427
846
|
return this._fetchOutputBytes(output);
|
|
428
847
|
}
|
|
429
848
|
async textToVideo(params) {
|
|
@@ -441,13 +860,17 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
441
860
|
if (params.seed != null)
|
|
442
861
|
input.seed = params.seed;
|
|
443
862
|
log.debug("textToVideo", { model: params.model.id });
|
|
444
|
-
const output = await this.
|
|
863
|
+
const output = await this.runModel(params.model.id, input);
|
|
445
864
|
return this._fetchOutputBytes(output);
|
|
446
865
|
}
|
|
447
866
|
async imageToVideo(image, params) {
|
|
448
|
-
const
|
|
449
|
-
|
|
450
|
-
|
|
867
|
+
const model = (await this.getAvailableVideoModels()).find((item) => item.id === params.model.id);
|
|
868
|
+
if (model && !model.supportedTasks?.includes("image_to_video")) {
|
|
869
|
+
throw new Error(`Replicate model ${params.model.id} does not support image_to_video`);
|
|
870
|
+
}
|
|
871
|
+
if (image.length === 0)
|
|
872
|
+
throw new Error("Replicate image_to_video requires a start image");
|
|
873
|
+
const input = this.imageInput(params.model.id, [image]);
|
|
451
874
|
if (params.prompt)
|
|
452
875
|
input.prompt = params.prompt;
|
|
453
876
|
if (params.negativePrompt)
|
|
@@ -461,24 +884,337 @@ export class ReplicateProvider extends BaseProvider {
|
|
|
461
884
|
if (params.seed != null)
|
|
462
885
|
input.seed = params.seed;
|
|
463
886
|
log.debug("imageToVideo", { model: params.model.id });
|
|
464
|
-
const output = await this.
|
|
887
|
+
const output = await this.runModel(params.model.id, input);
|
|
465
888
|
return this._fetchOutputBytes(output);
|
|
466
889
|
}
|
|
467
|
-
async
|
|
890
|
+
async referenceToVideo(inputs, params) {
|
|
891
|
+
const modelId = params.model.id;
|
|
892
|
+
const model = (await this.getAvailableVideoModels()).find((item) => item.id === modelId);
|
|
893
|
+
if (!model?.supportedTasks?.includes("reference_to_video")) {
|
|
894
|
+
throw new Error(`Replicate model ${modelId} does not support reference_to_video`);
|
|
895
|
+
}
|
|
896
|
+
const fields = getModelReferenceInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId);
|
|
897
|
+
const references = {
|
|
898
|
+
images: inputs.images.filter((bytes) => bytes.length > 0),
|
|
899
|
+
videos: inputs.videos.filter((bytes) => bytes.length > 0)
|
|
900
|
+
};
|
|
901
|
+
validateReferenceInputs("Replicate", modelId, references, fields);
|
|
902
|
+
const declared = getModelInputFields("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId);
|
|
903
|
+
const hasField = (name) => declared.some((field) => field.name === name);
|
|
904
|
+
if (params.useReferenceVideoAudio === true && (!hasField("use_reference_video_audio") || references.videos.length === 0)) {
|
|
905
|
+
throw new Error(`Replicate model ${modelId} does not support reference video audio for these inputs`);
|
|
906
|
+
}
|
|
907
|
+
const input = {};
|
|
908
|
+
for (const field of fields) {
|
|
909
|
+
const buffers = field.kind === "image" ? references.images : references.videos;
|
|
910
|
+
if (buffers.length === 0)
|
|
911
|
+
continue;
|
|
912
|
+
const urls = buffers.map((bytes) => field.kind === "image"
|
|
913
|
+
? this.imageDataUri(bytes)
|
|
914
|
+
: this.dataUri(bytes, sniffVideoMime(bytes)));
|
|
915
|
+
input[field.apiName] = field.isList ? urls : urls[0];
|
|
916
|
+
}
|
|
917
|
+
const options = {
|
|
918
|
+
prompt: params.prompt,
|
|
919
|
+
negative_prompt: params.negativePrompt,
|
|
920
|
+
duration: params.durationSeconds,
|
|
921
|
+
aspect_ratio: params.aspectRatio,
|
|
922
|
+
resolution: params.resolution,
|
|
923
|
+
num_frames: params.numFrames,
|
|
924
|
+
guidance_scale: params.guidanceScale,
|
|
925
|
+
seed: params.seed,
|
|
926
|
+
use_reference_video_audio: params.useReferenceVideoAudio
|
|
927
|
+
};
|
|
928
|
+
for (const [name, value] of Object.entries(options)) {
|
|
929
|
+
if (value != null && hasField(name))
|
|
930
|
+
input[name] = value;
|
|
931
|
+
}
|
|
932
|
+
const timeout = params.timeoutSeconds && params.timeoutSeconds > 0
|
|
933
|
+
? AbortSignal.timeout(params.timeoutSeconds * 1000)
|
|
934
|
+
: undefined;
|
|
935
|
+
const signal = params.signal && timeout
|
|
936
|
+
? AbortSignal.any([params.signal, timeout])
|
|
937
|
+
: params.signal ?? timeout;
|
|
938
|
+
const output = await this.runModel(modelId, input, signal);
|
|
939
|
+
return this._fetchOutputBytes(output, signal);
|
|
940
|
+
}
|
|
941
|
+
dataUri(bytes, mimeType) {
|
|
942
|
+
return `data:${mimeType};base64,${Buffer.from(bytes).toString("base64")}`;
|
|
943
|
+
}
|
|
944
|
+
// Replicate models decode by the declared type, so feeding back a WebP this
|
|
945
|
+
// provider itself produced as `image/png` fails inside the model.
|
|
946
|
+
imageDataUri(bytes) {
|
|
947
|
+
return this.dataUri(bytes, detectImageMime(bytes));
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Build the image portion of a Replicate prediction input from one or more
|
|
951
|
+
* source images, using the model's declared schema (replicate-manifest) to
|
|
952
|
+
* pick the correct input field — single (`image`, `input_image`, …) vs list
|
|
953
|
+
* (`image_input`, `images`, …). Falls back to the common conventions when the
|
|
954
|
+
* model isn't in the manifest. Empty buffers are dropped.
|
|
955
|
+
*/
|
|
956
|
+
imageInput(modelId, images) {
|
|
957
|
+
const dataUris = images
|
|
958
|
+
.filter((b) => b && b.length > 0)
|
|
959
|
+
.map((b) => this.imageDataUri(b));
|
|
960
|
+
if (dataUris.length === 0)
|
|
961
|
+
return {};
|
|
962
|
+
const field = selectPrimaryImageInput(getModelImageInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId), dataUris.length);
|
|
963
|
+
if (field) {
|
|
964
|
+
return { [field.apiName]: field.isList ? dataUris : dataUris[0] };
|
|
965
|
+
}
|
|
966
|
+
// Unknown model: fall back to the common conventions.
|
|
967
|
+
return dataUris.length === 1
|
|
968
|
+
? { image: dataUris[0] }
|
|
969
|
+
: { image_input: dataUris };
|
|
970
|
+
}
|
|
971
|
+
async runWithInput(modelId, input) {
|
|
972
|
+
return this._fetchOutputBytes(await this.runModel(modelId, input));
|
|
973
|
+
}
|
|
974
|
+
async upscaleImage(image, params) {
|
|
975
|
+
const input = {
|
|
976
|
+
image: this.imageDataUri(image)
|
|
977
|
+
};
|
|
978
|
+
if (params.scale != null)
|
|
979
|
+
input.scale = params.scale;
|
|
980
|
+
if (params.prompt)
|
|
981
|
+
input.prompt = params.prompt;
|
|
982
|
+
if (params.creativity != null)
|
|
983
|
+
input.creativity = params.creativity;
|
|
984
|
+
if (params.seed != null)
|
|
985
|
+
input.seed = params.seed;
|
|
986
|
+
log.debug("upscaleImage", { model: params.model.id });
|
|
987
|
+
return this.runWithInput(params.model.id, input);
|
|
988
|
+
}
|
|
989
|
+
/**
|
|
990
|
+
* Outpaint an image. Replicate's expand models take the target canvas rather
|
|
991
|
+
* than per-side padding (`bria/expand-image`: `canvas_size` plus where the
|
|
992
|
+
* original sits inside it), so the padding is turned into that geometry and
|
|
993
|
+
* pruned to whatever the model declares.
|
|
994
|
+
*/
|
|
995
|
+
async outpaintImage(images, params) {
|
|
996
|
+
const input = this.imageInput(params.model.id, images);
|
|
997
|
+
if (params.prompt)
|
|
998
|
+
input.prompt = params.prompt;
|
|
999
|
+
if (params.negativePrompt)
|
|
1000
|
+
input.negative_prompt = params.negativePrompt;
|
|
1001
|
+
if (params.aspectRatio)
|
|
1002
|
+
input.aspect_ratio = params.aspectRatio;
|
|
1003
|
+
const padding = params.padding;
|
|
1004
|
+
if (padding) {
|
|
1005
|
+
const left = padding.left ?? 0;
|
|
1006
|
+
const top = padding.top ?? 0;
|
|
1007
|
+
input.expand_left = left;
|
|
1008
|
+
input.expand_right = padding.right ?? 0;
|
|
1009
|
+
input.expand_top = top;
|
|
1010
|
+
input.expand_bottom = padding.bottom ?? 0;
|
|
1011
|
+
// Where the source image lands on the expanded canvas, for the models
|
|
1012
|
+
// that place it explicitly instead of taking per-side amounts.
|
|
1013
|
+
input.original_image_location = [left, top];
|
|
1014
|
+
}
|
|
1015
|
+
if (params.seed != null)
|
|
1016
|
+
input.seed = params.seed;
|
|
1017
|
+
log.debug("outpaintImage", { model: params.model.id });
|
|
1018
|
+
return this.runWithInput(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1019
|
+
}
|
|
1020
|
+
async removeBackground(image, params) {
|
|
1021
|
+
log.debug("removeBackground", { model: params.model.id });
|
|
1022
|
+
return this.runWithInput(params.model.id, {
|
|
1023
|
+
image: this.imageDataUri(image)
|
|
1024
|
+
});
|
|
1025
|
+
}
|
|
1026
|
+
async relightImage(image, params) {
|
|
1027
|
+
const input = {
|
|
1028
|
+
image: this.imageDataUri(image)
|
|
1029
|
+
};
|
|
1030
|
+
if (params.prompt)
|
|
1031
|
+
input.prompt = params.prompt;
|
|
1032
|
+
if (params.negativePrompt)
|
|
1033
|
+
input.negative_prompt = params.negativePrompt;
|
|
1034
|
+
if (params.seed != null)
|
|
1035
|
+
input.seed = params.seed;
|
|
1036
|
+
log.debug("relightImage", { model: params.model.id });
|
|
1037
|
+
return this.runWithInput(params.model.id, input);
|
|
1038
|
+
}
|
|
1039
|
+
async vectorizeImage(image, params) {
|
|
1040
|
+
log.debug("vectorizeImage", { model: params.model.id });
|
|
1041
|
+
return this.runWithInput(params.model.id, {
|
|
1042
|
+
image: this.imageDataUri(image)
|
|
1043
|
+
});
|
|
1044
|
+
}
|
|
1045
|
+
/**
|
|
1046
|
+
* Drop input fields the model does not declare in the manifest.
|
|
1047
|
+
*
|
|
1048
|
+
* Replicate fails the whole prediction on an undeclared field instead of
|
|
1049
|
+
* ignoring it, so a generic param bag breaks any endpoint with a narrower
|
|
1050
|
+
* schema. An empty declaration set means the model is not in the manifest —
|
|
1051
|
+
* send everything rather than silently stripping the request bare.
|
|
1052
|
+
*/
|
|
1053
|
+
pruneToDeclaredInputs(modelId, input) {
|
|
1054
|
+
const declared = getModelInputNames("@nodetool-ai/replicate-nodes", "replicate-manifest.json", modelId);
|
|
1055
|
+
if (declared.size === 0)
|
|
1056
|
+
return input;
|
|
1057
|
+
const pruned = {};
|
|
1058
|
+
const dropped = [];
|
|
1059
|
+
for (const [key, value] of Object.entries(input)) {
|
|
1060
|
+
if (declared.has(key))
|
|
1061
|
+
pruned[key] = value;
|
|
1062
|
+
else
|
|
1063
|
+
dropped.push(key);
|
|
1064
|
+
}
|
|
1065
|
+
if (dropped.length > 0) {
|
|
1066
|
+
log.debug("pruned undeclared inputs", { model: modelId, dropped });
|
|
1067
|
+
}
|
|
1068
|
+
return pruned;
|
|
1069
|
+
}
|
|
1070
|
+
async videoToVideo(video, params) {
|
|
1071
|
+
const images = params.referenceImages ?? [];
|
|
1072
|
+
const fields = getModelReferenceInputs("@nodetool-ai/replicate-nodes", "replicate-manifest.json", params.model.id);
|
|
1073
|
+
if (images.length) {
|
|
1074
|
+
validateReferenceInputs("Replicate", params.model.id, { images, videos: [] }, fields);
|
|
1075
|
+
}
|
|
1076
|
+
params.signal?.throwIfAborted();
|
|
1077
|
+
const input = {
|
|
1078
|
+
video: this.dataUri(video, "video/mp4")
|
|
1079
|
+
};
|
|
1080
|
+
if (images.length) {
|
|
1081
|
+
const urls = images.map((image) => this.imageDataUri(image));
|
|
1082
|
+
for (const field of fields.filter((candidate) => candidate.kind === "image")) {
|
|
1083
|
+
input[field.apiName] = field.isList ? urls : urls[0];
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
if (params.prompt)
|
|
1087
|
+
input.prompt = params.prompt;
|
|
1088
|
+
if (params.negativePrompt)
|
|
1089
|
+
input.negative_prompt = params.negativePrompt;
|
|
1090
|
+
if (params.strength != null)
|
|
1091
|
+
input.strength = params.strength;
|
|
1092
|
+
if (params.seed != null)
|
|
1093
|
+
input.seed = params.seed;
|
|
1094
|
+
log.debug("videoToVideo", { model: params.model.id });
|
|
1095
|
+
return this._fetchOutputBytes(await this.runModel(params.model.id, this.pruneToDeclaredInputs(params.model.id, input), params.signal), params.signal);
|
|
1096
|
+
}
|
|
1097
|
+
async extendVideo(video, params) {
|
|
1098
|
+
if (video.length === 0) {
|
|
1099
|
+
throw new Error("video must not be empty");
|
|
1100
|
+
}
|
|
1101
|
+
const model = (await this.getAvailableVideoModels()).find((candidate) => candidate.id === params.model.id);
|
|
1102
|
+
if (!model?.supportedTasks?.includes("extend_video")) {
|
|
1103
|
+
throw new Error(`Model ${params.model.id} does not support extend_video`);
|
|
1104
|
+
}
|
|
1105
|
+
const directionTasks = model.supportedTasks.filter((task) => task.startsWith("extend_video_"));
|
|
1106
|
+
if (directionTasks.length > 0 &&
|
|
1107
|
+
!directionTasks.includes(`extend_video_${params.mode}`)) {
|
|
1108
|
+
throw new Error(`Model ${params.model.id} does not support ${params.mode} extension`);
|
|
1109
|
+
}
|
|
1110
|
+
if (!Number.isFinite(params.durationSeconds) ||
|
|
1111
|
+
params.durationSeconds <= 0) {
|
|
1112
|
+
throw new Error("Extension duration must be positive");
|
|
1113
|
+
}
|
|
1114
|
+
const input = this.pruneToDeclaredInputs(params.model.id, {
|
|
1115
|
+
video: this.dataUri(video, "video/mp4"),
|
|
1116
|
+
prompt: params.prompt,
|
|
1117
|
+
mode: params.mode,
|
|
1118
|
+
duration: params.durationSeconds
|
|
1119
|
+
});
|
|
1120
|
+
log.debug("extendVideo", { model: params.model.id, mode: params.mode });
|
|
1121
|
+
return this._fetchOutputBytes(await this.runModel(params.model.id, input));
|
|
1122
|
+
}
|
|
1123
|
+
async upscaleVideo(video, params) {
|
|
1124
|
+
const input = {
|
|
1125
|
+
video: this.dataUri(video, "video/mp4")
|
|
1126
|
+
};
|
|
1127
|
+
// One concept, four spellings across the catalog's upscalers; the prune
|
|
1128
|
+
// below drops whichever names this model does not declare.
|
|
1129
|
+
if (params.scale != null) {
|
|
1130
|
+
input.scale = params.scale;
|
|
1131
|
+
input.upscale_factor = params.scale;
|
|
1132
|
+
input.resolution = params.scale;
|
|
1133
|
+
}
|
|
1134
|
+
if (params.targetResolution) {
|
|
1135
|
+
input.target_resolution = params.targetResolution;
|
|
1136
|
+
}
|
|
1137
|
+
if (params.prompt)
|
|
1138
|
+
input.prompt = params.prompt;
|
|
1139
|
+
if (params.creativity != null)
|
|
1140
|
+
input.creativity = params.creativity;
|
|
1141
|
+
if (params.seed != null)
|
|
1142
|
+
input.seed = params.seed;
|
|
1143
|
+
log.debug("upscaleVideo", { model: params.model.id });
|
|
1144
|
+
return this.runWithInput(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1145
|
+
}
|
|
1146
|
+
async lipSync(video, params) {
|
|
1147
|
+
const input = {
|
|
1148
|
+
video: this.dataUri(video, "video/mp4"),
|
|
1149
|
+
audio: this.dataUri(params.audio, "audio/mpeg")
|
|
1150
|
+
};
|
|
1151
|
+
if (params.seed != null)
|
|
1152
|
+
input.seed = params.seed;
|
|
1153
|
+
log.debug("lipSync", { model: params.model.id });
|
|
1154
|
+
return this.runWithInput(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1155
|
+
}
|
|
1156
|
+
/**
|
|
1157
|
+
* Replicate TTS models (elevenlabs, minimax, kokoro, chatterbox, f5-tts)
|
|
1158
|
+
* return an ENCODED audio file (MP3/WAV), not raw little-endian PCM. Expose
|
|
1159
|
+
* it through the encoded path (like textToMusic / FAL) rather than overriding
|
|
1160
|
+
* the streaming-PCM textToSpeech — the previous override blindly cast the
|
|
1161
|
+
* encoded bytes to Int16Array, producing noise (MP3) or a header click +
|
|
1162
|
+
* misaligned waveform (WAV).
|
|
1163
|
+
*/
|
|
1164
|
+
async textToSpeechEncoded(args) {
|
|
468
1165
|
const input = { text: args.text };
|
|
469
1166
|
if (args.voice)
|
|
470
1167
|
input.voice = args.voice;
|
|
471
1168
|
if (args.speed != null)
|
|
472
1169
|
input.speed = args.speed;
|
|
473
|
-
log.debug("
|
|
474
|
-
const output = await this.
|
|
475
|
-
input
|
|
476
|
-
});
|
|
1170
|
+
log.debug("textToSpeechEncoded", { model: args.model });
|
|
1171
|
+
const output = await this.runModel(args.model, input);
|
|
477
1172
|
const bytes = await this._fetchOutputBytes(output);
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
1173
|
+
return { data: bytes, mimeType: sniffAudioMime(bytes) };
|
|
1174
|
+
}
|
|
1175
|
+
/**
|
|
1176
|
+
* Generate music as an encoded audio file. Replicate music models (MusicGen,
|
|
1177
|
+
* MiniMax Music, ElevenLabs Music, …) return a file URL / FileOutput, so this
|
|
1178
|
+
* runs the model and downloads the encoded audio bytes.
|
|
1179
|
+
*/
|
|
1180
|
+
async textToMusic(params) {
|
|
1181
|
+
if (!params.prompt)
|
|
1182
|
+
throw new Error("Prompt is required");
|
|
1183
|
+
const input = { prompt: params.prompt };
|
|
1184
|
+
if (params.lyrics)
|
|
1185
|
+
input.lyrics = params.lyrics;
|
|
1186
|
+
if (params.durationSeconds != null) {
|
|
1187
|
+
input.duration = Math.round(params.durationSeconds);
|
|
1188
|
+
}
|
|
1189
|
+
if (params.seed != null)
|
|
1190
|
+
input.seed = params.seed;
|
|
1191
|
+
log.debug("textToMusic", { model: params.model.id });
|
|
1192
|
+
const output = await this.runModel(params.model.id, input);
|
|
1193
|
+
const bytes = await this._fetchOutputBytes(output);
|
|
1194
|
+
return { data: bytes, mimeType: sniffAudioMime(bytes) };
|
|
1195
|
+
}
|
|
1196
|
+
/**
|
|
1197
|
+
* Rewrite a recording. Replicate's audio transforms (super-resolution, stem
|
|
1198
|
+
* separation, enhancers) take the source under `audio`; the direction fields
|
|
1199
|
+
* go through {@link pruneToDeclaredInputs} like {@link lipSync} does, so a
|
|
1200
|
+
* model that declares none of them does not get sent one.
|
|
1201
|
+
*/
|
|
1202
|
+
async audioToAudio(audio, params) {
|
|
1203
|
+
const input = {
|
|
1204
|
+
audio: this.dataUri(audio, "audio/mpeg")
|
|
481
1205
|
};
|
|
1206
|
+
if (params.prompt)
|
|
1207
|
+
input.prompt = params.prompt;
|
|
1208
|
+
if (params.voice)
|
|
1209
|
+
input.voice = params.voice;
|
|
1210
|
+
if (params.strength != null)
|
|
1211
|
+
input.strength = params.strength;
|
|
1212
|
+
if (params.seed != null)
|
|
1213
|
+
input.seed = params.seed;
|
|
1214
|
+
log.debug("audioToAudio", { model: params.model.id });
|
|
1215
|
+
const output = await this.runModel(params.model.id, this.pruneToDeclaredInputs(params.model.id, input));
|
|
1216
|
+
const bytes = await this._fetchOutputBytes(output);
|
|
1217
|
+
return { data: bytes, mimeType: sniffAudioMime(bytes) };
|
|
482
1218
|
}
|
|
483
1219
|
}
|
|
484
1220
|
//# sourceMappingURL=replicate-provider.js.map
|