@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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central expansion of {@link EntityReference}s attached to modality params.
|
|
3
|
+
*
|
|
4
|
+
* Consumers (nodes, the chat WebSocket, CLI) attach `entities` to generation
|
|
5
|
+
* params; {@link BaseProvider} calls {@link applyEntityReferences} on the call
|
|
6
|
+
* arguments before the concrete provider runs, so every provider gets the same
|
|
7
|
+
* behavior without knowing entities exist:
|
|
8
|
+
*
|
|
9
|
+
* - descriptors are appended to the prompt as a `Consistency references:`
|
|
10
|
+
* block — the same shape the Apply Entities node and the runtime's
|
|
11
|
+
* entity-mention expansion produce;
|
|
12
|
+
* - on image-editing methods, reference image bytes are appended to the
|
|
13
|
+
* source-image list after the caller's own images (multi-image providers
|
|
14
|
+
* use them as references; single-image providers ignore them), and each
|
|
15
|
+
* appended image's line names its 1-based position in the final list
|
|
16
|
+
* (`- Image 2 (Harbor): …`) so the model can tell which image is which;
|
|
17
|
+
* - the `entities` field is stripped so nested delegation (e.g. the base
|
|
18
|
+
* `imageToImages` fallback calling `imageToImage`) never applies twice.
|
|
19
|
+
*/
|
|
20
|
+
import type { EntityReference } from "./types.js";
|
|
21
|
+
/** Append the entities' descriptors to a prompt as a consistency block. */
|
|
22
|
+
export declare const injectEntityDescriptors: (prompt: string, entities: EntityReference[]) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Expand `params.entities` in a modality method's call arguments. Returns the
|
|
25
|
+
* original array untouched when the method doesn't take entities or none are
|
|
26
|
+
* attached; otherwise returns a new args array with the prompt expanded, the
|
|
27
|
+
* reference images appended for image and video edits, and `entities`
|
|
28
|
+
* stripped from the params.
|
|
29
|
+
*/
|
|
30
|
+
export declare function applyEntityReferences(method: string, args: unknown[]): unknown[];
|
|
31
|
+
//# sourceMappingURL=entity-references.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-references.d.ts","sourceRoot":"","sources":["../../src/providers/entity-references.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA8ClD,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,WAC1B,MAAM,YACJ,eAAe,EAAE,KAC1B,MAMA,CAAC;AAEJ;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EAAE,GACd,OAAO,EAAE,CAmDX"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central expansion of {@link EntityReference}s attached to modality params.
|
|
3
|
+
*
|
|
4
|
+
* Consumers (nodes, the chat WebSocket, CLI) attach `entities` to generation
|
|
5
|
+
* params; {@link BaseProvider} calls {@link applyEntityReferences} on the call
|
|
6
|
+
* arguments before the concrete provider runs, so every provider gets the same
|
|
7
|
+
* behavior without knowing entities exist:
|
|
8
|
+
*
|
|
9
|
+
* - descriptors are appended to the prompt as a `Consistency references:`
|
|
10
|
+
* block — the same shape the Apply Entities node and the runtime's
|
|
11
|
+
* entity-mention expansion produce;
|
|
12
|
+
* - on image-editing methods, reference image bytes are appended to the
|
|
13
|
+
* source-image list after the caller's own images (multi-image providers
|
|
14
|
+
* use them as references; single-image providers ignore them), and each
|
|
15
|
+
* appended image's line names its 1-based position in the final list
|
|
16
|
+
* (`- Image 2 (Harbor): …`) so the model can tell which image is which;
|
|
17
|
+
* - the `entities` field is stripped so nested delegation (e.g. the base
|
|
18
|
+
* `imageToImages` fallback calling `imageToImage`) never applies twice.
|
|
19
|
+
*/
|
|
20
|
+
/** Methods whose first argument is a `Uint8Array[]` that accepts references. */
|
|
21
|
+
const IMAGE_LIST_METHODS = new Set([
|
|
22
|
+
"imageToImage",
|
|
23
|
+
"imageToImages",
|
|
24
|
+
"inpaint",
|
|
25
|
+
"inpaintImages"
|
|
26
|
+
]);
|
|
27
|
+
/**
|
|
28
|
+
* Position of the params argument per entity-bearing method. Video edits use
|
|
29
|
+
* separate reference images. Image-to-video keeps its source frame unchanged.
|
|
30
|
+
*/
|
|
31
|
+
const PARAMS_INDEX = {
|
|
32
|
+
textToImage: 0,
|
|
33
|
+
textToImages: 0,
|
|
34
|
+
imageToImage: 1,
|
|
35
|
+
imageToImages: 1,
|
|
36
|
+
inpaint: 1,
|
|
37
|
+
inpaintImages: 1,
|
|
38
|
+
textToVideo: 0,
|
|
39
|
+
imageToVideo: 1,
|
|
40
|
+
referenceToVideo: 1,
|
|
41
|
+
videoToVideo: 1
|
|
42
|
+
};
|
|
43
|
+
const hasEntityParams = (value) => !!value &&
|
|
44
|
+
typeof value === "object" &&
|
|
45
|
+
Array.isArray(value.entities);
|
|
46
|
+
const appendConsistencyBlock = (prompt, lines) => {
|
|
47
|
+
if (lines.length === 0) {
|
|
48
|
+
return prompt;
|
|
49
|
+
}
|
|
50
|
+
const block = `Consistency references:\n${lines.join("\n")}`;
|
|
51
|
+
return prompt.trim().length > 0 ? `${prompt}\n\n${block}` : block;
|
|
52
|
+
};
|
|
53
|
+
/** Append the entities' descriptors to a prompt as a consistency block. */
|
|
54
|
+
export const injectEntityDescriptors = (prompt, entities) => appendConsistencyBlock(prompt, entities
|
|
55
|
+
.filter((e) => !!e.descriptor && e.descriptor.trim().length > 0)
|
|
56
|
+
.map((e) => `- ${e.name}: ${e.descriptor.trim()}`));
|
|
57
|
+
/**
|
|
58
|
+
* Expand `params.entities` in a modality method's call arguments. Returns the
|
|
59
|
+
* original array untouched when the method doesn't take entities or none are
|
|
60
|
+
* attached; otherwise returns a new args array with the prompt expanded, the
|
|
61
|
+
* reference images appended for image and video edits, and `entities`
|
|
62
|
+
* stripped from the params.
|
|
63
|
+
*/
|
|
64
|
+
export function applyEntityReferences(method, args) {
|
|
65
|
+
const paramsIndex = PARAMS_INDEX[method];
|
|
66
|
+
if (paramsIndex === undefined)
|
|
67
|
+
return args;
|
|
68
|
+
const params = args[paramsIndex];
|
|
69
|
+
if (!hasEntityParams(params) || params.entities.length === 0)
|
|
70
|
+
return args;
|
|
71
|
+
const entities = params.entities;
|
|
72
|
+
const next = [...args];
|
|
73
|
+
let prompt;
|
|
74
|
+
if (IMAGE_LIST_METHODS.has(method)) {
|
|
75
|
+
// Appended reference images are attributed in the prompt by their 1-based
|
|
76
|
+
// position in the final image list, counting the caller's own images.
|
|
77
|
+
const images = Array.isArray(args[0]) ? args[0] : [];
|
|
78
|
+
const appended = [];
|
|
79
|
+
const lines = [];
|
|
80
|
+
for (const entity of entities) {
|
|
81
|
+
const image = entity.image instanceof Uint8Array && entity.image.length > 0
|
|
82
|
+
? entity.image
|
|
83
|
+
: null;
|
|
84
|
+
const descriptor = entity.descriptor?.trim();
|
|
85
|
+
if (image) {
|
|
86
|
+
appended.push(image);
|
|
87
|
+
const position = images.length + appended.length;
|
|
88
|
+
lines.push(`- Image ${position} (${entity.name})${descriptor ? `: ${descriptor}` : ""}`);
|
|
89
|
+
}
|
|
90
|
+
else if (descriptor) {
|
|
91
|
+
lines.push(`- ${entity.name}: ${descriptor}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
prompt = appendConsistencyBlock(params.prompt ?? "", lines);
|
|
95
|
+
if (appended.length > 0) {
|
|
96
|
+
next[0] = [...images, ...appended];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
prompt = injectEntityDescriptors(params.prompt ?? "", entities);
|
|
101
|
+
}
|
|
102
|
+
const nextParams = { ...params, prompt };
|
|
103
|
+
if (method === "videoToVideo") {
|
|
104
|
+
const images = entities.flatMap((entity) => entity.image instanceof Uint8Array && entity.image.length > 0 ? [entity.image] : []);
|
|
105
|
+
if (images.length) {
|
|
106
|
+
nextParams.referenceImages = [...(params.referenceImages ?? []), ...images];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
delete nextParams.entities;
|
|
110
|
+
next[paramsIndex] = nextParams;
|
|
111
|
+
return next;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=entity-references.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-references.js","sourceRoot":"","sources":["../../src/providers/entity-references.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,gFAAgF;AAChF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,cAAc;IACd,eAAe;IACf,SAAS;IACT,eAAe;CAChB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,YAAY,GAA2B;IAC3C,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,YAAY,EAAE,CAAC;IACf,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;IACV,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,CAAC;IACnB,YAAY,EAAE,CAAC;CAChB,CAAC;AAQF,MAAM,eAAe,GAAG,CAAC,KAAc,EAAgC,EAAE,CACvE,CAAC,CAAC,KAAK;IACP,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,CAAC,OAAO,CAAE,KAA6B,CAAC,QAAQ,CAAC,CAAC;AAEzD,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAE,KAAe,EAAU,EAAE;IACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,4BAA4B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACpE,CAAC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,MAAc,EACd,QAA2B,EACnB,EAAE,CACV,sBAAsB,CACpB,MAAM,EACN,QAAQ;KACL,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;KAC/D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,UAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CACtD,CAAC;AAEJ;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,IAAe;IAEf,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAC;IAElC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,IAAI,MAAc,CAAC;IACnB,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,CAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,YAAY,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAC3D,CAAC,CAAC,MAAM,CAAC,KAAK;gBACd,CAAC,CAAC,IAAI,CAAC;YACX,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;YAC7C,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACjD,KAAK,CAAC,IAAI,CACR,WAAW,QAAQ,KAAK,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7E,CAAC;YACJ,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,UAAU,GAAwB,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9D,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACzC,MAAM,CAAC,KAAK,YAAY,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CACpF,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,UAAU,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { OpenAICompatProvider, type OpenAICompatProviderOptions } from "./openai-compat-provider.js";
|
|
2
|
+
import type { ImageModel, ImageToImageParams, ImageToVideoParams, LanguageModel, TextToImageParams, TextToVideoParams, VideoModel } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Evolink provider. Speaks the OpenAI Chat Completions dialect against Evolink's
|
|
5
|
+
* OpenAI-compatible gateway at https://direct.evolink.ai/v1 for chat (which
|
|
6
|
+
* fronts GPT, Claude, Gemini, DeepSeek and other models behind a single API
|
|
7
|
+
* key), and Evolink's asynchronous task API at https://api.evolink.ai for
|
|
8
|
+
* image and video generation.
|
|
9
|
+
*/
|
|
10
|
+
export declare class EvolinkProvider extends OpenAICompatProvider {
|
|
11
|
+
static requiredSecrets(): string[];
|
|
12
|
+
constructor(secrets: {
|
|
13
|
+
EVOLINK_API_KEY?: string;
|
|
14
|
+
}, options?: OpenAICompatProviderOptions);
|
|
15
|
+
getContainerEnv(): {
|
|
16
|
+
EVOLINK_API_KEY: string;
|
|
17
|
+
};
|
|
18
|
+
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
19
|
+
getAvailableImageModels(): Promise<ImageModel[]>;
|
|
20
|
+
getAvailableVideoModels(): Promise<VideoModel[]>;
|
|
21
|
+
textToImage(params: TextToImageParams): Promise<Uint8Array>;
|
|
22
|
+
imageToImage(images: Uint8Array[], params: ImageToImageParams): Promise<Uint8Array>;
|
|
23
|
+
textToVideo(params: TextToVideoParams): Promise<Uint8Array>;
|
|
24
|
+
imageToVideo(image: Uint8Array, params: ImageToVideoParams): Promise<Uint8Array>;
|
|
25
|
+
private withNegativePrompt;
|
|
26
|
+
private resolveEvolinkImageSize;
|
|
27
|
+
private applyVideoParams;
|
|
28
|
+
private resolveVideoDuration;
|
|
29
|
+
private mediaHeaders;
|
|
30
|
+
/** Upload raw image bytes and return a hosted URL Evolink can reference. */
|
|
31
|
+
private uploadImage;
|
|
32
|
+
/** Submit a media task, poll until it completes, and download the result. */
|
|
33
|
+
private runMediaTask;
|
|
34
|
+
private submitMediaTask;
|
|
35
|
+
private pollMediaTask;
|
|
36
|
+
private downloadResult;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=evolink-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evolink-provider.d.ts","sourceRoot":"","sources":["../../src/providers/evolink-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAgGpB;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,oBAAoB;IACvD,OAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;IAED,YACE,OAAO,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,EACrC,OAAO,GAAE,2BAAgC,EAe1C;IAEQ,eAAe;QACb,eAAe;MACzB;IAEc,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAEpE;IAEc,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAE9D;IAEc,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAE9D;IAEc,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBzE;IAEc,YAAY,CACzB,MAAM,EAAE,UAAU,EAAE,EACpB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC,CA4BrB;IAEc,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAYzE;IAEc,YAAY,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC,CAcrB;IAED,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,YAAY;IAOpB,4EAA4E;YAC9D,WAAW;IAgCzB,6EAA6E;YAC/D,YAAY;YAcZ,eAAe;YAuBf,aAAa;YAqCb,cAAc;CAS7B"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
2
|
+
import { safeFetch } from "./safe-url.js";
|
|
3
|
+
import { detectImageMime } from "./image-mime.js";
|
|
4
|
+
import { OpenAICompatProvider } from "./openai-compat-provider.js";
|
|
5
|
+
import { isString } from "@nodetool-ai/protocol";
|
|
6
|
+
const log = createLogger("nodetool.runtime.providers.evolink");
|
|
7
|
+
// Evolink fronts two hosts: a synchronous OpenAI/Anthropic-compatible gateway
|
|
8
|
+
// for text models, and an asynchronous, task-based gateway for media. The
|
|
9
|
+
// chat path speaks Chat Completions against the gateway; image/video calls
|
|
10
|
+
// submit a task and poll for the result on the media host.
|
|
11
|
+
const EVOLINK_CHAT_BASE_URL = "https://direct.evolink.ai/v1";
|
|
12
|
+
const EVOLINK_MEDIA_BASE_URL = "https://api.evolink.ai";
|
|
13
|
+
const EVOLINK_FILE_UPLOAD_URL = "https://files-api.evolink.ai/api/v1/files/upload/base64";
|
|
14
|
+
/**
|
|
15
|
+
* Image models reachable via `POST /v1/images/generations`. Every listed
|
|
16
|
+
* model also accepts an `image_urls` array, so each supports both
|
|
17
|
+
* text-to-image and image-to-image (editing).
|
|
18
|
+
*/
|
|
19
|
+
const EVOLINK_IMAGE_MODELS = [
|
|
20
|
+
{ id: "gpt-image-2", name: "GPT Image 2" },
|
|
21
|
+
{ id: "gpt-image-1.5", name: "GPT Image 1.5" },
|
|
22
|
+
{ id: "gemini-3.1-flash-image-preview", name: "Nano Banana 2" },
|
|
23
|
+
{ id: "doubao-seedream-5.0-lite", name: "Seedream 5.0 Lite" }
|
|
24
|
+
].map((m) => ({
|
|
25
|
+
...m,
|
|
26
|
+
provider: "evolink",
|
|
27
|
+
supportedTasks: ["text_to_image", "image_to_image"]
|
|
28
|
+
}));
|
|
29
|
+
/**
|
|
30
|
+
* Video models reachable via `POST /v1/videos/generations`. Evolink uses
|
|
31
|
+
* distinct model ids per task for some families (e.g. Seedance, Wan), while
|
|
32
|
+
* others (Veo, Sora) switch task by the presence of `image_urls` — reflected
|
|
33
|
+
* in each model's `supportedTasks`.
|
|
34
|
+
*/
|
|
35
|
+
const EVOLINK_VIDEO_MODELS = [
|
|
36
|
+
{
|
|
37
|
+
id: "seedance-2.0-text-to-video",
|
|
38
|
+
name: "Seedance 2.0 (Text to Video)",
|
|
39
|
+
supportedTasks: ["text_to_video"],
|
|
40
|
+
resolutions: ["480p", "720p", "1080p"],
|
|
41
|
+
aspectRatios: ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: "seedance-2.0-image-to-video",
|
|
45
|
+
name: "Seedance 2.0 (Image to Video)",
|
|
46
|
+
supportedTasks: ["image_to_video"],
|
|
47
|
+
resolutions: ["480p", "720p", "1080p"],
|
|
48
|
+
aspectRatios: ["16:9", "9:16", "1:1", "4:3", "3:4", "21:9"]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: "wan2.6-text-to-video",
|
|
52
|
+
name: "Wan 2.6 (Text to Video)",
|
|
53
|
+
supportedTasks: ["text_to_video"],
|
|
54
|
+
resolutions: ["720p", "1080p"],
|
|
55
|
+
aspectRatios: ["16:9", "9:16", "1:1", "4:3", "3:4"]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: "wan2.6-image-to-video",
|
|
59
|
+
name: "Wan 2.6 (Image to Video)",
|
|
60
|
+
supportedTasks: ["image_to_video"],
|
|
61
|
+
resolutions: ["720p", "1080p"],
|
|
62
|
+
aspectRatios: ["16:9", "9:16", "1:1", "4:3", "3:4"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "veo3.1-pro-beta",
|
|
66
|
+
name: "Veo 3.1 Pro",
|
|
67
|
+
supportedTasks: ["text_to_video", "image_to_video"],
|
|
68
|
+
resolutions: ["720p"],
|
|
69
|
+
aspectRatios: ["auto", "16:9", "9:16"]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: "sora-2-pro-preview",
|
|
73
|
+
name: "Sora 2 Pro",
|
|
74
|
+
supportedTasks: ["text_to_video", "image_to_video"],
|
|
75
|
+
durations: [4, 8, 12],
|
|
76
|
+
resolutions: ["720p", "1080p"],
|
|
77
|
+
aspectRatios: ["16:9", "9:16"]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "grok-imagine-image-to-video-beta",
|
|
81
|
+
name: "Grok Imagine (Image to Video)",
|
|
82
|
+
supportedTasks: ["image_to_video"],
|
|
83
|
+
resolutions: ["480p", "720p"],
|
|
84
|
+
aspectRatios: ["16:9", "9:16", "1:1", "3:2", "2:3"]
|
|
85
|
+
}
|
|
86
|
+
].map((m) => ({ ...m, provider: "evolink" }));
|
|
87
|
+
/**
|
|
88
|
+
* Evolink provider. Speaks the OpenAI Chat Completions dialect against Evolink's
|
|
89
|
+
* OpenAI-compatible gateway at https://direct.evolink.ai/v1 for chat (which
|
|
90
|
+
* fronts GPT, Claude, Gemini, DeepSeek and other models behind a single API
|
|
91
|
+
* key), and Evolink's asynchronous task API at https://api.evolink.ai for
|
|
92
|
+
* image and video generation.
|
|
93
|
+
*/
|
|
94
|
+
export class EvolinkProvider extends OpenAICompatProvider {
|
|
95
|
+
static requiredSecrets() {
|
|
96
|
+
return ["EVOLINK_API_KEY"];
|
|
97
|
+
}
|
|
98
|
+
constructor(secrets, options = {}) {
|
|
99
|
+
const apiKey = secrets.EVOLINK_API_KEY;
|
|
100
|
+
if (!apiKey) {
|
|
101
|
+
throw new Error("EVOLINK_API_KEY is required");
|
|
102
|
+
}
|
|
103
|
+
super({
|
|
104
|
+
providerId: "evolink",
|
|
105
|
+
apiKey,
|
|
106
|
+
baseURL: EVOLINK_CHAT_BASE_URL
|
|
107
|
+
}, options);
|
|
108
|
+
}
|
|
109
|
+
getContainerEnv() {
|
|
110
|
+
return { EVOLINK_API_KEY: this.apiKey };
|
|
111
|
+
}
|
|
112
|
+
async getAvailableLanguageModels() {
|
|
113
|
+
return this.listCompatModels();
|
|
114
|
+
}
|
|
115
|
+
async getAvailableImageModels() {
|
|
116
|
+
return EVOLINK_IMAGE_MODELS;
|
|
117
|
+
}
|
|
118
|
+
async getAvailableVideoModels() {
|
|
119
|
+
return EVOLINK_VIDEO_MODELS;
|
|
120
|
+
}
|
|
121
|
+
async textToImage(params) {
|
|
122
|
+
if (!params.prompt) {
|
|
123
|
+
throw new Error("The input prompt cannot be empty.");
|
|
124
|
+
}
|
|
125
|
+
const body = {
|
|
126
|
+
model: params.model.id,
|
|
127
|
+
prompt: this.withNegativePrompt(params.prompt, params.negativePrompt)
|
|
128
|
+
};
|
|
129
|
+
const size = this.resolveEvolinkImageSize(params.aspectRatio, params.width, params.height);
|
|
130
|
+
if (size)
|
|
131
|
+
body.size = size;
|
|
132
|
+
if (params.resolution)
|
|
133
|
+
body.resolution = params.resolution;
|
|
134
|
+
if (params.quality)
|
|
135
|
+
body.quality = params.quality;
|
|
136
|
+
return this.runMediaTask("/v1/images/generations", body);
|
|
137
|
+
}
|
|
138
|
+
async imageToImage(images, params) {
|
|
139
|
+
const sources = images.filter((b) => b && b.length > 0);
|
|
140
|
+
if (sources.length === 0) {
|
|
141
|
+
throw new Error("image must not be empty.");
|
|
142
|
+
}
|
|
143
|
+
if (!params.prompt) {
|
|
144
|
+
throw new Error("The input prompt cannot be empty.");
|
|
145
|
+
}
|
|
146
|
+
const imageUrls = await Promise.all(sources.map((b) => this.uploadImage(b)));
|
|
147
|
+
const body = {
|
|
148
|
+
model: params.model.id,
|
|
149
|
+
prompt: this.withNegativePrompt(params.prompt, params.negativePrompt),
|
|
150
|
+
image_urls: imageUrls
|
|
151
|
+
};
|
|
152
|
+
const size = this.resolveEvolinkImageSize(params.aspectRatio, params.targetWidth ?? undefined, params.targetHeight ?? undefined);
|
|
153
|
+
if (size)
|
|
154
|
+
body.size = size;
|
|
155
|
+
if (params.resolution)
|
|
156
|
+
body.resolution = params.resolution;
|
|
157
|
+
if (params.quality)
|
|
158
|
+
body.quality = params.quality;
|
|
159
|
+
return this.runMediaTask("/v1/images/generations", body);
|
|
160
|
+
}
|
|
161
|
+
async textToVideo(params) {
|
|
162
|
+
if (!params.prompt) {
|
|
163
|
+
throw new Error("The input prompt cannot be empty.");
|
|
164
|
+
}
|
|
165
|
+
const body = {
|
|
166
|
+
model: params.model.id,
|
|
167
|
+
prompt: params.prompt
|
|
168
|
+
};
|
|
169
|
+
this.applyVideoParams(body, params);
|
|
170
|
+
return this.runMediaTask("/v1/videos/generations", body);
|
|
171
|
+
}
|
|
172
|
+
async imageToVideo(image, params) {
|
|
173
|
+
if (!image || image.length === 0) {
|
|
174
|
+
throw new Error("The input image cannot be empty.");
|
|
175
|
+
}
|
|
176
|
+
const imageUrl = await this.uploadImage(image);
|
|
177
|
+
const body = {
|
|
178
|
+
model: params.model.id,
|
|
179
|
+
prompt: params.prompt ?? "",
|
|
180
|
+
image_urls: [imageUrl]
|
|
181
|
+
};
|
|
182
|
+
this.applyVideoParams(body, params);
|
|
183
|
+
return this.runMediaTask("/v1/videos/generations", body);
|
|
184
|
+
}
|
|
185
|
+
withNegativePrompt(prompt, negativePrompt) {
|
|
186
|
+
return negativePrompt
|
|
187
|
+
? `${prompt.trim()}\n\nDo not include: ${negativePrompt.trim()}`
|
|
188
|
+
: prompt;
|
|
189
|
+
}
|
|
190
|
+
resolveEvolinkImageSize(aspectRatio, width, height) {
|
|
191
|
+
if (aspectRatio)
|
|
192
|
+
return aspectRatio;
|
|
193
|
+
if (width && height)
|
|
194
|
+
return `${width}x${height}`;
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
applyVideoParams(body, params) {
|
|
198
|
+
const duration = this.resolveVideoDuration(params);
|
|
199
|
+
if (duration)
|
|
200
|
+
body.duration = duration;
|
|
201
|
+
// Evolink expresses video resolution through the `quality` field
|
|
202
|
+
// (e.g. "720p", "1080p"), not a pixel size.
|
|
203
|
+
if (params.resolution)
|
|
204
|
+
body.quality = params.resolution;
|
|
205
|
+
if (params.aspectRatio)
|
|
206
|
+
body.aspect_ratio = params.aspectRatio;
|
|
207
|
+
}
|
|
208
|
+
resolveVideoDuration(params) {
|
|
209
|
+
if (params.durationSeconds && params.durationSeconds > 0) {
|
|
210
|
+
return Math.round(params.durationSeconds);
|
|
211
|
+
}
|
|
212
|
+
if (params.numFrames && params.numFrames > 0) {
|
|
213
|
+
return Math.max(1, Math.round(params.numFrames / 24));
|
|
214
|
+
}
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
mediaHeaders() {
|
|
218
|
+
return {
|
|
219
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
220
|
+
"Content-Type": "application/json"
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/** Upload raw image bytes and return a hosted URL Evolink can reference. */
|
|
224
|
+
async uploadImage(image,
|
|
225
|
+
// Sniff the container by default so a JPEG/WebP source isn't mislabeled as
|
|
226
|
+
// PNG (which a strict file store would reject or store with a wrong type).
|
|
227
|
+
mimeType = detectImageMime(image)) {
|
|
228
|
+
const base64 = Buffer.from(image).toString("base64");
|
|
229
|
+
const response = await this.compatFetch(EVOLINK_FILE_UPLOAD_URL, {
|
|
230
|
+
method: "POST",
|
|
231
|
+
headers: this.mediaHeaders(),
|
|
232
|
+
body: JSON.stringify({
|
|
233
|
+
base64_data: `data:${mimeType};base64,${base64}`
|
|
234
|
+
})
|
|
235
|
+
});
|
|
236
|
+
const payload = (await response
|
|
237
|
+
.json()
|
|
238
|
+
.catch(() => ({})));
|
|
239
|
+
const fileUrl = payload.data?.file_url;
|
|
240
|
+
if (!response.ok || !payload.success || !fileUrl) {
|
|
241
|
+
throw new Error(`Evolink file upload failed: ${response.status} ${payload.msg ?? ""}`.trim());
|
|
242
|
+
}
|
|
243
|
+
return fileUrl;
|
|
244
|
+
}
|
|
245
|
+
/** Submit a media task, poll until it completes, and download the result. */
|
|
246
|
+
async runMediaTask(path, body) {
|
|
247
|
+
log.debug("Evolink media task", { path, model: body.model });
|
|
248
|
+
const taskId = await this.submitMediaTask(path, body);
|
|
249
|
+
const results = await this.pollMediaTask(taskId);
|
|
250
|
+
const url = results[0];
|
|
251
|
+
if (!url) {
|
|
252
|
+
throw new Error(`Evolink task ${taskId} returned no results`);
|
|
253
|
+
}
|
|
254
|
+
return this.downloadResult(url);
|
|
255
|
+
}
|
|
256
|
+
async submitMediaTask(path, body) {
|
|
257
|
+
const response = await this.compatFetch(`${EVOLINK_MEDIA_BASE_URL}${path}`, {
|
|
258
|
+
method: "POST",
|
|
259
|
+
headers: this.mediaHeaders(),
|
|
260
|
+
body: JSON.stringify(body)
|
|
261
|
+
});
|
|
262
|
+
const payload = (await response
|
|
263
|
+
.json()
|
|
264
|
+
.catch(() => ({})));
|
|
265
|
+
if (!response.ok || !payload.id) {
|
|
266
|
+
throw new Error(`Evolink task submit failed: ${response.status} ${JSON.stringify(payload)}`);
|
|
267
|
+
}
|
|
268
|
+
return payload.id;
|
|
269
|
+
}
|
|
270
|
+
async pollMediaTask(taskId, pollIntervalMs = 3000, maxAttempts = 300) {
|
|
271
|
+
const url = `${EVOLINK_MEDIA_BASE_URL}/v1/tasks/${taskId}`;
|
|
272
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
273
|
+
const response = await this.compatFetch(url, {
|
|
274
|
+
headers: { Authorization: `Bearer ${this.apiKey}` }
|
|
275
|
+
});
|
|
276
|
+
if (!response.ok) {
|
|
277
|
+
throw new Error(`Evolink task query failed: ${response.status} (taskId: ${taskId})`);
|
|
278
|
+
}
|
|
279
|
+
const data = (await response.json());
|
|
280
|
+
if (data.status === "completed") {
|
|
281
|
+
return data.results ?? [];
|
|
282
|
+
}
|
|
283
|
+
if (data.status === "failed") {
|
|
284
|
+
const message = isString(data.error)
|
|
285
|
+
? data.error
|
|
286
|
+
: data.error?.message ?? "Unknown error";
|
|
287
|
+
throw new Error(`Evolink task failed: ${message} (taskId: ${taskId})`);
|
|
288
|
+
}
|
|
289
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
290
|
+
}
|
|
291
|
+
const timeoutSeconds = (maxAttempts * pollIntervalMs) / 1000;
|
|
292
|
+
throw new Error(`Evolink task timed out after ${timeoutSeconds}s (taskId: ${taskId})`);
|
|
293
|
+
}
|
|
294
|
+
async downloadResult(url) {
|
|
295
|
+
// url is task-result-body-controlled — gate it through safeFetch (SSRF)
|
|
296
|
+
// while still using the injected fetch impl for testability.
|
|
297
|
+
const response = await safeFetch(url, undefined, 5, this.compatFetch);
|
|
298
|
+
if (!response.ok) {
|
|
299
|
+
throw new Error(`Failed to download Evolink result: ${response.status}`);
|
|
300
|
+
}
|
|
301
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=evolink-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evolink-provider.js","sourceRoot":"","sources":["../../src/providers/evolink-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseProvider } from "./base-provider.js";
|
|
2
|
-
import type { LanguageModel, Message, ProviderStreamItem, ProviderTool, ToolCall } from "./types.js";
|
|
2
|
+
import type { ASRResult, ImageTo3DParams, ImageToImageParams, ImageToVideoParams, LanguageModel, LipSyncParams, Message, ProviderStreamItem, ProviderTool, RelightImageParams, RemoveBackgroundParams, StreamingAudioChunk, TextTo3DParams, TextToImageParams, TextToVideoParams, ToolCall, UpscaleImageParams, VectorizeImageParams, VideoToVideoParams } from "./types.js";
|
|
3
3
|
type CustomResponseFn = (messages: Message[], model: string) => string | ToolCall[];
|
|
4
4
|
export interface FakeProviderOptions {
|
|
5
5
|
textResponse?: string;
|
|
@@ -7,6 +7,30 @@ export interface FakeProviderOptions {
|
|
|
7
7
|
shouldStream?: boolean;
|
|
8
8
|
chunkSize?: number;
|
|
9
9
|
customResponseFn?: CustomResponseFn;
|
|
10
|
+
/**
|
|
11
|
+
* When set, and the caller passes a non-empty `tools` array without
|
|
12
|
+
* preset `toolCalls` or a `customResponseFn`, the provider emits this
|
|
13
|
+
* many tool calls per declared tool on its FIRST call to either
|
|
14
|
+
* `generateMessage` or `generateMessages`, then stops emitting tool
|
|
15
|
+
* calls on later invocations of either method. The two methods share
|
|
16
|
+
* the same burst counter so a `generateMessage` followed by a
|
|
17
|
+
* `generateMessages` (or vice versa) yields one burst total.
|
|
18
|
+
*
|
|
19
|
+
* This lets tool-loop-style consumers (e.g. ListGenerator's `add_item`
|
|
20
|
+
* loop, DataGenerator's `add_row` loop) exit cleanly instead of
|
|
21
|
+
* hanging.
|
|
22
|
+
*
|
|
23
|
+
* Defaults to 3. Set to 0 to disable.
|
|
24
|
+
*/
|
|
25
|
+
toolCallsPerTool?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Optional builder for the args passed to auto-emitted tool calls.
|
|
28
|
+
* Receives the tool name and the 0-based index within the burst. The
|
|
29
|
+
* default builder returns plausible defaults for well-known tools:
|
|
30
|
+
* - `add_item` → `{ item: "fake item N" }`
|
|
31
|
+
* - everything else → `{}`
|
|
32
|
+
*/
|
|
33
|
+
toolArgsBuilder?: (toolName: string, index: number) => Record<string, unknown>;
|
|
10
34
|
}
|
|
11
35
|
export declare class FakeProvider extends BaseProvider {
|
|
12
36
|
textResponse: string;
|
|
@@ -14,11 +38,16 @@ export declare class FakeProvider extends BaseProvider {
|
|
|
14
38
|
shouldStream: boolean;
|
|
15
39
|
chunkSize: number;
|
|
16
40
|
customResponseFn: CustomResponseFn | null;
|
|
41
|
+
toolCallsPerTool: number;
|
|
42
|
+
toolArgsBuilder: (toolName: string, index: number) => Record<string, unknown>;
|
|
43
|
+
/** Number of LLM invocations that have already auto-emitted tool calls. */
|
|
44
|
+
private _toolBurstsEmitted;
|
|
17
45
|
callCount: number;
|
|
18
46
|
lastMessages: Message[] | null;
|
|
19
47
|
lastModel: string | null;
|
|
20
48
|
lastTools: ProviderTool[];
|
|
21
49
|
constructor(options?: FakeProviderOptions);
|
|
50
|
+
private autoToolCalls;
|
|
22
51
|
private getResponse;
|
|
23
52
|
resetCallCount(): void;
|
|
24
53
|
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
@@ -43,6 +72,48 @@ export declare class FakeProvider extends BaseProvider {
|
|
|
43
72
|
frequencyPenalty?: number;
|
|
44
73
|
audio?: Record<string, unknown>;
|
|
45
74
|
}): AsyncGenerator<ProviderStreamItem>;
|
|
75
|
+
textToImage(_params: TextToImageParams): Promise<Uint8Array>;
|
|
76
|
+
imageToImage(_images: Uint8Array[], _params: ImageToImageParams): Promise<Uint8Array>;
|
|
77
|
+
upscaleImage(_image: Uint8Array, _params: UpscaleImageParams): Promise<Uint8Array>;
|
|
78
|
+
removeBackground(_image: Uint8Array, _params: RemoveBackgroundParams): Promise<Uint8Array>;
|
|
79
|
+
relightImage(_image: Uint8Array, _params: RelightImageParams): Promise<Uint8Array>;
|
|
80
|
+
vectorizeImage(_image: Uint8Array, _params: VectorizeImageParams): Promise<Uint8Array>;
|
|
81
|
+
textToVideo(_params: TextToVideoParams): Promise<Uint8Array>;
|
|
82
|
+
imageToVideo(_image: Uint8Array, _params: ImageToVideoParams): Promise<Uint8Array>;
|
|
83
|
+
videoToVideo(_video: Uint8Array, _params: VideoToVideoParams): Promise<Uint8Array>;
|
|
84
|
+
lipSync(_video: Uint8Array, _params: LipSyncParams): Promise<Uint8Array>;
|
|
85
|
+
textToSpeech(_args: {
|
|
86
|
+
text: string;
|
|
87
|
+
model: string;
|
|
88
|
+
voice?: string;
|
|
89
|
+
speed?: number;
|
|
90
|
+
audioFormat?: string;
|
|
91
|
+
}): AsyncGenerator<StreamingAudioChunk>;
|
|
92
|
+
textToSpeechEncoded(_args: {
|
|
93
|
+
text: string;
|
|
94
|
+
model: string;
|
|
95
|
+
voice?: string;
|
|
96
|
+
speed?: number;
|
|
97
|
+
audioFormat?: string;
|
|
98
|
+
}): Promise<{
|
|
99
|
+
data: Uint8Array;
|
|
100
|
+
mimeType: string;
|
|
101
|
+
} | null>;
|
|
102
|
+
automaticSpeechRecognition(_args: {
|
|
103
|
+
audio: Uint8Array;
|
|
104
|
+
model: string;
|
|
105
|
+
language?: string;
|
|
106
|
+
prompt?: string;
|
|
107
|
+
temperature?: number;
|
|
108
|
+
word_timestamps?: boolean;
|
|
109
|
+
}): Promise<ASRResult>;
|
|
110
|
+
generateEmbedding(args: {
|
|
111
|
+
text: string | string[];
|
|
112
|
+
model: string;
|
|
113
|
+
dimensions?: number;
|
|
114
|
+
}): Promise<number[][]>;
|
|
115
|
+
textTo3D(_params: TextTo3DParams): Promise<Uint8Array>;
|
|
116
|
+
imageTo3D(_image: Uint8Array, _params: ImageTo3DParams): Promise<Uint8Array>;
|
|
46
117
|
}
|
|
47
118
|
export declare function createFakeToolCall(name: string, args?: Record<string, unknown>, callId?: string): ToolCall;
|
|
48
119
|
export declare function createSimpleFakeProvider(responseText?: string): FakeProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake-provider.d.ts","sourceRoot":"","sources":["../../src/providers/fake-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fake-provider.d.ts","sourceRoot":"","sources":["../../src/providers/fake-provider.ts"],"names":[],"mappings":"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"}
|