@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,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reve Provider — exposes Reve's image API (create / edit) through the standard
|
|
3
|
+
* {@link BaseProvider} interface so Reve models work from NodeTool's generic
|
|
4
|
+
* image-generation nodes (model picker), and surfaces the `REVE_API_KEY` secret
|
|
5
|
+
* in Settings → API Keys.
|
|
6
|
+
*
|
|
7
|
+
* - textToImage → POST /v1/image/create
|
|
8
|
+
* - imageToImage → POST /v1/image/edit (one source image)
|
|
9
|
+
* → POST /v1/image/remix (two or more reference images)
|
|
10
|
+
*
|
|
11
|
+
* imageToImage routes by image count: a single source image uses the Edit
|
|
12
|
+
* endpoint (`edit_instruction` + one base64 `reference_image`); two or more use
|
|
13
|
+
* the Remix endpoint (`prompt` + a base64 `reference_images` array, capped at
|
|
14
|
+
* 6 — the only Reve endpoint that accepts more than one reference image).
|
|
15
|
+
* Remix's indexed `<img>` prompt tags remain the domain of the
|
|
16
|
+
* `@nodetool-ai/reve-nodes` `reve.RemixImage` node.
|
|
17
|
+
*
|
|
18
|
+
* These are Reve's v1 endpoints. Reve's v2 API
|
|
19
|
+
* (https://api.reve.com/console/docs/v2/) reportedly lifts the reference-image
|
|
20
|
+
* ceiling to 8 on a unified create/edit endpoint; migrating there is future
|
|
21
|
+
* work and is not wired here.
|
|
22
|
+
*
|
|
23
|
+
* Wire spec (https://api.reve.com/console/docs):
|
|
24
|
+
* - Auth: `Authorization: Bearer <api_key>`.
|
|
25
|
+
* - Body: JSON; reference images are base64-encoded strings.
|
|
26
|
+
* - Accept: `application/json` → response carries a base64 PNG in `image`.
|
|
27
|
+
*/
|
|
28
|
+
import { BaseProvider } from "./base-provider.js";
|
|
29
|
+
import type { ImageModel, ImageToImageParams, Message, ProviderStreamItem, TextToImageParams } from "./types.js";
|
|
30
|
+
export declare class ReveProvider extends BaseProvider {
|
|
31
|
+
private readonly apiKey;
|
|
32
|
+
static requiredSecrets(): string[];
|
|
33
|
+
constructor(secrets?: Record<string, unknown>);
|
|
34
|
+
getContainerEnv(): {
|
|
35
|
+
REVE_API_KEY: string;
|
|
36
|
+
};
|
|
37
|
+
private requireApiKey;
|
|
38
|
+
generateMessage(_args: Parameters<BaseProvider["generateMessage"]>[0]): Promise<Message>;
|
|
39
|
+
generateMessages(_args: Parameters<BaseProvider["generateMessages"]>[0]): AsyncGenerator<ProviderStreamItem>;
|
|
40
|
+
getAvailableImageModels(): Promise<ImageModel[]>;
|
|
41
|
+
private post;
|
|
42
|
+
textToImage(params: TextToImageParams): Promise<Uint8Array>;
|
|
43
|
+
imageToImage(images: Uint8Array[], params: ImageToImageParams): Promise<Uint8Array>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=reve-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reve-provider.d.ts","sourceRoot":"","sources":["../../src/providers/reve-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,OAAO,EACP,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAgCpB,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;IAED,YAAY,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAGhD;IAEQ,eAAe;QACb,YAAY;MACtB;IAED,OAAO,CAAC,aAAa;IAOf,eAAe,CACnB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GACpD,OAAO,CAAC,OAAO,CAAC,CAElB;IAGM,gBAAgB,CACrB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GACrD,cAAc,CAAC,kBAAkB,CAAC,CAEpC;IAEc,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAgB9D;YAEa,IAAI;IA4BH,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAQzE;IAEc,YAAY,CACzB,MAAM,EAAE,UAAU,EAAE,EACpB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC,CAuCrB;CACF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reve Provider — exposes Reve's image API (create / edit) through the standard
|
|
3
|
+
* {@link BaseProvider} interface so Reve models work from NodeTool's generic
|
|
4
|
+
* image-generation nodes (model picker), and surfaces the `REVE_API_KEY` secret
|
|
5
|
+
* in Settings → API Keys.
|
|
6
|
+
*
|
|
7
|
+
* - textToImage → POST /v1/image/create
|
|
8
|
+
* - imageToImage → POST /v1/image/edit (one source image)
|
|
9
|
+
* → POST /v1/image/remix (two or more reference images)
|
|
10
|
+
*
|
|
11
|
+
* imageToImage routes by image count: a single source image uses the Edit
|
|
12
|
+
* endpoint (`edit_instruction` + one base64 `reference_image`); two or more use
|
|
13
|
+
* the Remix endpoint (`prompt` + a base64 `reference_images` array, capped at
|
|
14
|
+
* 6 — the only Reve endpoint that accepts more than one reference image).
|
|
15
|
+
* Remix's indexed `<img>` prompt tags remain the domain of the
|
|
16
|
+
* `@nodetool-ai/reve-nodes` `reve.RemixImage` node.
|
|
17
|
+
*
|
|
18
|
+
* These are Reve's v1 endpoints. Reve's v2 API
|
|
19
|
+
* (https://api.reve.com/console/docs/v2/) reportedly lifts the reference-image
|
|
20
|
+
* ceiling to 8 on a unified create/edit endpoint; migrating there is future
|
|
21
|
+
* work and is not wired here.
|
|
22
|
+
*
|
|
23
|
+
* Wire spec (https://api.reve.com/console/docs):
|
|
24
|
+
* - Auth: `Authorization: Bearer <api_key>`.
|
|
25
|
+
* - Body: JSON; reference images are base64-encoded strings.
|
|
26
|
+
* - Accept: `application/json` → response carries a base64 PNG in `image`.
|
|
27
|
+
*/
|
|
28
|
+
import { BaseProvider } from "./base-provider.js";
|
|
29
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
30
|
+
// Stryker disable next-line StringLiteral: logger name is diagnostic, not asserted.
|
|
31
|
+
const log = createLogger("nodetool.runtime.providers.reve");
|
|
32
|
+
const REVE_API_BASE = "https://api.reve.com";
|
|
33
|
+
/** Model ids exposed to the generic image composer. */
|
|
34
|
+
const REVE_CREATE_MODEL = "reve-create";
|
|
35
|
+
const REVE_EDIT_MODEL = "reve-edit";
|
|
36
|
+
/** Max reference images accepted by the Remix endpoint. */
|
|
37
|
+
const REVE_MAX_REMIX_IMAGES = 6;
|
|
38
|
+
const VALID_ASPECT_RATIOS = new Set([
|
|
39
|
+
"16:9",
|
|
40
|
+
"9:16",
|
|
41
|
+
"3:2",
|
|
42
|
+
"2:3",
|
|
43
|
+
"4:3",
|
|
44
|
+
"3:4",
|
|
45
|
+
"1:1"
|
|
46
|
+
]);
|
|
47
|
+
export class ReveProvider extends BaseProvider {
|
|
48
|
+
apiKey;
|
|
49
|
+
static requiredSecrets() {
|
|
50
|
+
return ["REVE_API_KEY"];
|
|
51
|
+
}
|
|
52
|
+
constructor(secrets = {}) {
|
|
53
|
+
super("reve");
|
|
54
|
+
this.apiKey = secrets["REVE_API_KEY"] ?? "";
|
|
55
|
+
}
|
|
56
|
+
getContainerEnv() {
|
|
57
|
+
return { REVE_API_KEY: this.apiKey };
|
|
58
|
+
}
|
|
59
|
+
requireApiKey() {
|
|
60
|
+
if (!this.apiKey || !this.apiKey.trim()) {
|
|
61
|
+
throw new Error("REVE_API_KEY is not configured");
|
|
62
|
+
}
|
|
63
|
+
return this.apiKey;
|
|
64
|
+
}
|
|
65
|
+
async generateMessage(_args) {
|
|
66
|
+
throw new Error("reve does not support chat generation");
|
|
67
|
+
}
|
|
68
|
+
// eslint-disable-next-line require-yield
|
|
69
|
+
async *generateMessages(_args) {
|
|
70
|
+
throw new Error("reve does not support chat generation");
|
|
71
|
+
}
|
|
72
|
+
async getAvailableImageModels() {
|
|
73
|
+
if (!this.apiKey)
|
|
74
|
+
return [];
|
|
75
|
+
return [
|
|
76
|
+
{
|
|
77
|
+
id: REVE_CREATE_MODEL,
|
|
78
|
+
name: "Reve Create",
|
|
79
|
+
provider: "reve",
|
|
80
|
+
supportedTasks: ["text_to_image"]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: REVE_EDIT_MODEL,
|
|
84
|
+
name: "Reve Edit",
|
|
85
|
+
provider: "reve",
|
|
86
|
+
supportedTasks: ["image_to_image"]
|
|
87
|
+
}
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
async post(endpoint, body) {
|
|
91
|
+
const response = await fetch(`${REVE_API_BASE}/v1/image/${endpoint}`, {
|
|
92
|
+
method: "POST",
|
|
93
|
+
headers: {
|
|
94
|
+
Authorization: `Bearer ${this.requireApiKey()}`,
|
|
95
|
+
"Content-Type": "application/json",
|
|
96
|
+
Accept: "application/json"
|
|
97
|
+
},
|
|
98
|
+
body: JSON.stringify(body)
|
|
99
|
+
});
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
throw new Error(`Reve ${endpoint} failed: ${response.status} ${await response.text()}`);
|
|
102
|
+
}
|
|
103
|
+
const json = (await response.json());
|
|
104
|
+
if (json.content_violation) {
|
|
105
|
+
throw new Error("Reve flagged this request as a content policy violation");
|
|
106
|
+
}
|
|
107
|
+
if (!json.image) {
|
|
108
|
+
throw new Error(`Reve returned no image: ${JSON.stringify(json)}`);
|
|
109
|
+
}
|
|
110
|
+
return new Uint8Array(Buffer.from(json.image, "base64"));
|
|
111
|
+
}
|
|
112
|
+
async textToImage(params) {
|
|
113
|
+
const body = { prompt: params.prompt };
|
|
114
|
+
if (params.aspectRatio && VALID_ASPECT_RATIOS.has(params.aspectRatio)) {
|
|
115
|
+
body.aspect_ratio = params.aspectRatio;
|
|
116
|
+
}
|
|
117
|
+
// Stryker disable next-line StringLiteral,ObjectLiteral: diagnostic log, not asserted.
|
|
118
|
+
log.debug("Reve textToImage", { model: params.model.id });
|
|
119
|
+
return this.post("create", body);
|
|
120
|
+
}
|
|
121
|
+
async imageToImage(images, params) {
|
|
122
|
+
const sources = images.filter((b) => b && b.length > 0);
|
|
123
|
+
if (sources.length === 0) {
|
|
124
|
+
throw new Error("image must not be empty");
|
|
125
|
+
}
|
|
126
|
+
if (sources.length > REVE_MAX_REMIX_IMAGES) {
|
|
127
|
+
throw new Error(`Reve accepts at most ${REVE_MAX_REMIX_IMAGES} reference images, got ${sources.length}.`);
|
|
128
|
+
}
|
|
129
|
+
const aspectRatio = params.aspectRatio && VALID_ASPECT_RATIOS.has(params.aspectRatio)
|
|
130
|
+
? params.aspectRatio
|
|
131
|
+
: undefined;
|
|
132
|
+
// One source image uses Edit; two or more use Remix — the only Reve
|
|
133
|
+
// endpoint that accepts multiple reference images.
|
|
134
|
+
if (sources.length === 1) {
|
|
135
|
+
const body = {
|
|
136
|
+
edit_instruction: params.prompt,
|
|
137
|
+
reference_image: Buffer.from(sources[0]).toString("base64")
|
|
138
|
+
};
|
|
139
|
+
if (aspectRatio)
|
|
140
|
+
body.aspect_ratio = aspectRatio;
|
|
141
|
+
// Stryker disable next-line StringLiteral,ObjectLiteral: diagnostic log, not asserted.
|
|
142
|
+
log.debug("Reve imageToImage (edit)", { model: params.model.id });
|
|
143
|
+
return this.post("edit", body);
|
|
144
|
+
}
|
|
145
|
+
const body = {
|
|
146
|
+
prompt: params.prompt,
|
|
147
|
+
reference_images: sources.map((b) => Buffer.from(b).toString("base64"))
|
|
148
|
+
};
|
|
149
|
+
if (aspectRatio)
|
|
150
|
+
body.aspect_ratio = aspectRatio;
|
|
151
|
+
// Stryker disable next-line StringLiteral,ObjectLiteral: diagnostic log, not asserted.
|
|
152
|
+
log.debug("Reve imageToImage (remix)", {
|
|
153
|
+
model: params.model.id,
|
|
154
|
+
images: sources.length
|
|
155
|
+
});
|
|
156
|
+
return this.post("remix", body);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=reve-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reve-provider.js","sourceRoot":"","sources":["../../src/providers/reve-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,10 +17,24 @@
|
|
|
17
17
|
import { BaseProvider } from "./base-provider.js";
|
|
18
18
|
import type { ImageTo3DParams, Message, Model3D, ProviderStreamItem, TextTo3DParams } from "./types.js";
|
|
19
19
|
export declare const RODIN_3D_MODELS: Model3D[];
|
|
20
|
-
|
|
20
|
+
interface RodinProviderOptions {
|
|
21
21
|
pollIntervalMs?: number;
|
|
22
22
|
maxPollAttempts?: number;
|
|
23
23
|
}
|
|
24
|
+
interface RodinEncodedImage {
|
|
25
|
+
type: "png" | "jpeg";
|
|
26
|
+
data: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function detectImageType(image: Uint8Array): "png" | "jpeg";
|
|
29
|
+
export declare function encodeImageForRodin(image: Uint8Array): RodinEncodedImage;
|
|
30
|
+
/** Pure: normalize a requested 3D output format to Rodin's upper-cased value. */
|
|
31
|
+
export declare function rodinOutputFormat(outputFormat: string | undefined): string;
|
|
32
|
+
/** Pure: attach a non-negative `seed` to a request payload (in place). */
|
|
33
|
+
export declare function applyRodinSeed(payload: Record<string, unknown>, seed: number | null | undefined): void;
|
|
34
|
+
/** Pure: build the Rodin text-to-3D submit payload. */
|
|
35
|
+
export declare function buildRodinTextPayload(prompt: string, format: string, seed: number | null | undefined): Record<string, unknown>;
|
|
36
|
+
/** Pure: build the Rodin image-to-3D submit payload. */
|
|
37
|
+
export declare function buildRodinImagePayload(encoded: RodinEncodedImage, format: string, prompt: string | null | undefined, seed: number | null | undefined): Record<string, unknown>;
|
|
24
38
|
export declare class RodinProvider extends BaseProvider {
|
|
25
39
|
private readonly apiKey;
|
|
26
40
|
private readonly pollIntervalMs;
|
|
@@ -34,8 +48,16 @@ export declare class RodinProvider extends BaseProvider {
|
|
|
34
48
|
imageTo3D(image: Uint8Array, params: ImageTo3DParams): Promise<Uint8Array>;
|
|
35
49
|
private headers;
|
|
36
50
|
private computeMaxAttempts;
|
|
51
|
+
/**
|
|
52
|
+
* Per-call timeout signal (mirrors the gemini provider): threaded into the
|
|
53
|
+
* submit / poll / download fetches so an expired budget aborts the in-flight
|
|
54
|
+
* request instead of leaking it. The inter-poll sleep is left on the loop's
|
|
55
|
+
* own attempt cap, which surfaces the friendly "timed out" message.
|
|
56
|
+
*/
|
|
57
|
+
private timeoutSignal;
|
|
37
58
|
private submitTask;
|
|
38
59
|
private pollTaskStatus;
|
|
39
60
|
private downloadResult;
|
|
40
61
|
}
|
|
62
|
+
export {};
|
|
41
63
|
//# sourceMappingURL=rodin-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rodin-provider.d.ts","sourceRoot":"","sources":["../../src/providers/rodin-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"rodin-provider.d.ts","sourceRoot":"","sources":["../../src/providers/rodin-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,cAAc,EACf,MAAM,YAAY,CAAC;AAYpB,eAAO,MAAM,eAAe,EAAE,OAAO,EAsBpC,CAAC;AAEF,UAAU,oBAAoB;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAOD,UAAU,iBAAiB;IACzB,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CASjE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,iBAAiB,CAKxE;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE1E;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,IAAI,CAEN;AAED,uDAAuD;AACvD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,2BAQhC;AAED,wDAAwD;AACxD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,2BAShC;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,YACE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,OAAO,GAAE,oBAAyB,EAWnC;IAED,OAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;IAEK,eAAe,CACnB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GACpD,OAAO,CAAC,OAAO,CAAC,CAElB;IAGM,gBAAgB,CACrB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GACrD,cAAc,CAAC,kBAAkB,CAAC,CAEpC;IAEc,oBAAoB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAOxD;IAEc,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAiBnE;IAEc,SAAS,CACtB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,UAAU,CAAC,CAwBrB;IAID,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,kBAAkB;IAa1B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;YAQP,UAAU;YAgCV,cAAc;YA+Cd,cAAc;CAqC7B"}
|
|
@@ -15,7 +15,9 @@
|
|
|
15
15
|
* `subscription_key` from a single submit response.
|
|
16
16
|
*/
|
|
17
17
|
import { BaseProvider } from "./base-provider.js";
|
|
18
|
+
import { safeFetch } from "./safe-url.js";
|
|
18
19
|
import { createLogger } from "@nodetool-ai/config";
|
|
20
|
+
// Stryker disable next-line StringLiteral: logger name is diagnostic, not asserted.
|
|
19
21
|
const log = createLogger("nodetool.runtime.providers.rodin");
|
|
20
22
|
const RODIN_API_BASE_URL = "https://hyperhuman.deemos.com/api";
|
|
21
23
|
const DEFAULT_POLL_INTERVAL_MS = 5000;
|
|
@@ -44,32 +46,51 @@ export const RODIN_3D_MODELS = [
|
|
|
44
46
|
outputFormats: ["glb", "fbx", "obj", "usdz"]
|
|
45
47
|
}
|
|
46
48
|
];
|
|
47
|
-
function detectImageType(image) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
image[4] === 0x0d &&
|
|
54
|
-
image[5] === 0x0a &&
|
|
55
|
-
image[6] === 0x1a &&
|
|
56
|
-
image[7] === 0x0a) {
|
|
57
|
-
return "png";
|
|
58
|
-
}
|
|
59
|
-
if (image.length >= 3 &&
|
|
60
|
-
image[0] === 0xff &&
|
|
61
|
-
image[1] === 0xd8 &&
|
|
62
|
-
image[2] === 0xff) {
|
|
49
|
+
export function detectImageType(image) {
|
|
50
|
+
// JPEG starts with the SOI + marker bytes FF D8 FF. Everything else —
|
|
51
|
+
// including PNG and unknown formats — defaults to "png" (matches the Python
|
|
52
|
+
// provider's default). No explicit length guard is needed: a short input has
|
|
53
|
+
// `undefined` at the missing indices, which never equals the marker bytes.
|
|
54
|
+
if (image[0] === 0xff && image[1] === 0xd8 && image[2] === 0xff) {
|
|
63
55
|
return "jpeg";
|
|
64
56
|
}
|
|
65
|
-
return "png";
|
|
57
|
+
return "png";
|
|
66
58
|
}
|
|
67
|
-
function encodeImageForRodin(image) {
|
|
59
|
+
export function encodeImageForRodin(image) {
|
|
68
60
|
return {
|
|
69
61
|
type: detectImageType(image),
|
|
70
62
|
data: Buffer.from(image).toString("base64")
|
|
71
63
|
};
|
|
72
64
|
}
|
|
65
|
+
/** Pure: normalize a requested 3D output format to Rodin's upper-cased value. */
|
|
66
|
+
export function rodinOutputFormat(outputFormat) {
|
|
67
|
+
return (outputFormat ?? DEFAULT_OUTPUT_FORMAT).toUpperCase();
|
|
68
|
+
}
|
|
69
|
+
/** Pure: attach a non-negative `seed` to a request payload (in place). */
|
|
70
|
+
export function applyRodinSeed(payload, seed) {
|
|
71
|
+
if (seed != null && seed >= 0)
|
|
72
|
+
payload.seed = seed;
|
|
73
|
+
}
|
|
74
|
+
/** Pure: build the Rodin text-to-3D submit payload. */
|
|
75
|
+
export function buildRodinTextPayload(prompt, format, seed) {
|
|
76
|
+
const payload = {
|
|
77
|
+
prompt,
|
|
78
|
+
geometry_file_format: format
|
|
79
|
+
};
|
|
80
|
+
applyRodinSeed(payload, seed);
|
|
81
|
+
return payload;
|
|
82
|
+
}
|
|
83
|
+
/** Pure: build the Rodin image-to-3D submit payload. */
|
|
84
|
+
export function buildRodinImagePayload(encoded, format, prompt, seed) {
|
|
85
|
+
const payload = {
|
|
86
|
+
images: [encoded],
|
|
87
|
+
geometry_file_format: format
|
|
88
|
+
};
|
|
89
|
+
if (prompt)
|
|
90
|
+
payload.prompt = prompt;
|
|
91
|
+
applyRodinSeed(payload, seed);
|
|
92
|
+
return payload;
|
|
93
|
+
}
|
|
73
94
|
export class RodinProvider extends BaseProvider {
|
|
74
95
|
apiKey;
|
|
75
96
|
pollIntervalMs;
|
|
@@ -79,7 +100,9 @@ export class RodinProvider extends BaseProvider {
|
|
|
79
100
|
this.apiKey = secrets["RODIN_API_KEY"] ?? "";
|
|
80
101
|
this.pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
81
102
|
this.maxPollAttempts = options.maxPollAttempts ?? DEFAULT_MAX_POLL_ATTEMPTS;
|
|
103
|
+
// Stryker disable next-line ConditionalExpression,BooleanLiteral,BlockStatement: diagnostic warn only; missing key is enforced at call time.
|
|
82
104
|
if (!this.apiKey) {
|
|
105
|
+
// Stryker disable next-line StringLiteral: diagnostic log message.
|
|
83
106
|
log.warn("Rodin API key not configured");
|
|
84
107
|
}
|
|
85
108
|
}
|
|
@@ -89,11 +112,13 @@ export class RodinProvider extends BaseProvider {
|
|
|
89
112
|
async generateMessage(_args) {
|
|
90
113
|
throw new Error("rodin does not support chat generation");
|
|
91
114
|
}
|
|
115
|
+
// eslint-disable-next-line require-yield
|
|
92
116
|
async *generateMessages(_args) {
|
|
93
117
|
throw new Error("rodin does not support chat generation");
|
|
94
118
|
}
|
|
95
119
|
async getAvailable3DModels() {
|
|
96
120
|
if (!this.apiKey) {
|
|
121
|
+
// Stryker disable next-line StringLiteral: diagnostic log message.
|
|
97
122
|
log.debug("No Rodin API key configured, returning empty 3D model list");
|
|
98
123
|
return [];
|
|
99
124
|
}
|
|
@@ -105,17 +130,15 @@ export class RodinProvider extends BaseProvider {
|
|
|
105
130
|
if (!this.apiKey)
|
|
106
131
|
throw new Error("Rodin API key is not configured");
|
|
107
132
|
const maxAttempts = this.computeMaxAttempts(params.timeoutSeconds);
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (params.seed != null && params.seed >= 0)
|
|
114
|
-
payload.seed = params.seed;
|
|
115
|
-
const submit = await this.submitTask(payload);
|
|
133
|
+
const signal = this.timeoutSignal(params.timeoutSeconds);
|
|
134
|
+
const format = rodinOutputFormat(params.outputFormat);
|
|
135
|
+
const payload = buildRodinTextPayload(params.prompt, format, params.seed);
|
|
136
|
+
const submit = await this.submitTask(payload, signal);
|
|
137
|
+
// Stryker disable next-line StringLiteral: diagnostic log message.
|
|
116
138
|
log.debug(`Rodin text-to-3D task submitted: ${submit.uuid}`);
|
|
117
|
-
await this.pollTaskStatus(submit.subscriptionKey, maxAttempts);
|
|
118
|
-
|
|
139
|
+
await this.pollTaskStatus(submit.subscriptionKey, maxAttempts, signal);
|
|
140
|
+
this.trackUsage(params.model.id, { taskCount: 1 });
|
|
141
|
+
return this.downloadResult(submit.uuid, signal);
|
|
119
142
|
}
|
|
120
143
|
async imageTo3D(image, params) {
|
|
121
144
|
if (!image || image.length === 0)
|
|
@@ -123,20 +146,16 @@ export class RodinProvider extends BaseProvider {
|
|
|
123
146
|
if (!this.apiKey)
|
|
124
147
|
throw new Error("Rodin API key is not configured");
|
|
125
148
|
const maxAttempts = this.computeMaxAttempts(params.timeoutSeconds);
|
|
126
|
-
const
|
|
149
|
+
const signal = this.timeoutSignal(params.timeoutSeconds);
|
|
150
|
+
const format = rodinOutputFormat(params.outputFormat);
|
|
127
151
|
const encoded = encodeImageForRodin(image);
|
|
128
|
-
const payload =
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
};
|
|
132
|
-
if (params.prompt)
|
|
133
|
-
payload.prompt = params.prompt;
|
|
134
|
-
if (params.seed != null && params.seed >= 0)
|
|
135
|
-
payload.seed = params.seed;
|
|
136
|
-
const submit = await this.submitTask(payload);
|
|
152
|
+
const payload = buildRodinImagePayload(encoded, format, params.prompt, params.seed);
|
|
153
|
+
const submit = await this.submitTask(payload, signal);
|
|
154
|
+
// Stryker disable next-line StringLiteral: diagnostic log message.
|
|
137
155
|
log.debug(`Rodin image-to-3D task submitted: ${submit.uuid}`);
|
|
138
|
-
await this.pollTaskStatus(submit.subscriptionKey, maxAttempts);
|
|
139
|
-
|
|
156
|
+
await this.pollTaskStatus(submit.subscriptionKey, maxAttempts, signal);
|
|
157
|
+
this.trackUsage(params.model.id, { taskCount: 1 });
|
|
158
|
+
return this.downloadResult(submit.uuid, signal);
|
|
140
159
|
}
|
|
141
160
|
// --- internals ---
|
|
142
161
|
headers() {
|
|
@@ -146,17 +165,30 @@ export class RodinProvider extends BaseProvider {
|
|
|
146
165
|
};
|
|
147
166
|
}
|
|
148
167
|
computeMaxAttempts(timeoutSeconds) {
|
|
168
|
+
// Stryker disable next-line EqualityOperator: `<= 0` vs `< 0` is equivalent — 0 is already caught by the falsy `!timeoutSeconds` check.
|
|
149
169
|
if (!timeoutSeconds || timeoutSeconds <= 0) {
|
|
150
170
|
return this.maxPollAttempts;
|
|
151
171
|
}
|
|
152
172
|
return Math.max(1, Math.floor((timeoutSeconds * 1000) / this.pollIntervalMs));
|
|
153
173
|
}
|
|
154
|
-
|
|
174
|
+
/**
|
|
175
|
+
* Per-call timeout signal (mirrors the gemini provider): threaded into the
|
|
176
|
+
* submit / poll / download fetches so an expired budget aborts the in-flight
|
|
177
|
+
* request instead of leaking it. The inter-poll sleep is left on the loop's
|
|
178
|
+
* own attempt cap, which surfaces the friendly "timed out" message.
|
|
179
|
+
*/
|
|
180
|
+
timeoutSignal(timeoutSeconds) {
|
|
181
|
+
return timeoutSeconds && timeoutSeconds > 0
|
|
182
|
+
? AbortSignal.timeout(timeoutSeconds * 1000)
|
|
183
|
+
: undefined;
|
|
184
|
+
}
|
|
185
|
+
async submitTask(payload, signal) {
|
|
155
186
|
const url = `${RODIN_API_BASE_URL}/v2/rodin`;
|
|
156
187
|
const res = await fetch(url, {
|
|
157
188
|
method: "POST",
|
|
158
189
|
headers: this.headers(),
|
|
159
|
-
body: JSON.stringify(payload)
|
|
190
|
+
body: JSON.stringify(payload),
|
|
191
|
+
signal
|
|
160
192
|
});
|
|
161
193
|
if (res.status !== 200 && res.status !== 202) {
|
|
162
194
|
const errText = await res.text();
|
|
@@ -174,61 +206,67 @@ export class RodinProvider extends BaseProvider {
|
|
|
174
206
|
}
|
|
175
207
|
return { uuid, subscriptionKey };
|
|
176
208
|
}
|
|
177
|
-
async pollTaskStatus(subscriptionKey, maxAttempts) {
|
|
209
|
+
async pollTaskStatus(subscriptionKey, maxAttempts, signal) {
|
|
178
210
|
const url = `${RODIN_API_BASE_URL}/v2/status`;
|
|
179
211
|
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
180
212
|
const res = await fetch(url, {
|
|
181
213
|
method: "POST",
|
|
182
214
|
headers: this.headers(),
|
|
183
|
-
body: JSON.stringify({ subscription_key: subscriptionKey })
|
|
215
|
+
body: JSON.stringify({ subscription_key: subscriptionKey }),
|
|
216
|
+
signal
|
|
184
217
|
});
|
|
185
218
|
if (res.status !== 200) {
|
|
186
219
|
const errText = await res.text();
|
|
187
220
|
throw new Error(`Rodin API poll error (${res.status}): ${errText}`);
|
|
188
221
|
}
|
|
189
222
|
const data = (await res.json());
|
|
223
|
+
// Stryker disable next-line ArrayDeclaration: a non-empty fallback is equivalent — a synthetic first "job" with no status string is not terminal, so the loop polls on exactly as the empty-array path does.
|
|
190
224
|
const jobs = data.jobs ?? [];
|
|
191
225
|
const job = jobs[0];
|
|
192
226
|
if (!job) {
|
|
227
|
+
// Stryker disable next-line StringLiteral,ArithmeticOperator: diagnostic log message.
|
|
193
228
|
log.debug(`Rodin task: no jobs yet (attempt ${attempt + 1}/${maxAttempts})`);
|
|
194
229
|
await new Promise((r) => setTimeout(r, this.pollIntervalMs));
|
|
195
230
|
continue;
|
|
196
231
|
}
|
|
232
|
+
// Stryker disable next-line StringLiteral: empty fallback only applies when status is absent; any non-status string is equivalent (still not DONE/FAILED/ERROR/CANCELLED).
|
|
197
233
|
const status = String(job.status ?? "").toUpperCase();
|
|
198
234
|
if (status === "DONE")
|
|
199
235
|
return job;
|
|
200
|
-
if (status === "FAILED" ||
|
|
201
|
-
status === "ERROR" ||
|
|
202
|
-
status === "CANCELLED") {
|
|
236
|
+
if (status === "FAILED" || status === "ERROR" || status === "CANCELLED") {
|
|
203
237
|
const errMsg = job.error ?? "Unknown error";
|
|
204
238
|
throw new Error(`Rodin task failed: ${errMsg}`);
|
|
205
239
|
}
|
|
240
|
+
// Stryker disable next-line StringLiteral,ArithmeticOperator: diagnostic log message.
|
|
206
241
|
log.debug(`Rodin task status: ${status} (attempt ${attempt + 1}/${maxAttempts})`);
|
|
207
242
|
await new Promise((r) => setTimeout(r, this.pollIntervalMs));
|
|
208
243
|
}
|
|
209
244
|
throw new Error(`Rodin task timed out after ${(maxAttempts * this.pollIntervalMs) / 1000}s`);
|
|
210
245
|
}
|
|
211
|
-
async downloadResult(taskUuid) {
|
|
246
|
+
async downloadResult(taskUuid, signal) {
|
|
212
247
|
const downloadInfoRes = await fetch(`${RODIN_API_BASE_URL}/v2/download`, {
|
|
213
248
|
method: "POST",
|
|
214
249
|
headers: this.headers(),
|
|
215
|
-
body: JSON.stringify({ task_uuid: taskUuid })
|
|
250
|
+
body: JSON.stringify({ task_uuid: taskUuid }),
|
|
251
|
+
signal
|
|
216
252
|
});
|
|
217
253
|
if (downloadInfoRes.status !== 200) {
|
|
218
254
|
const errText = await downloadInfoRes.text();
|
|
219
255
|
throw new Error(`Failed to get Rodin download URL (${downloadInfoRes.status}): ${errText}`);
|
|
220
256
|
}
|
|
221
257
|
const info = (await downloadInfoRes.json());
|
|
222
|
-
const downloadUrl = info.model_url ??
|
|
258
|
+
const downloadUrl = info.model_url ??
|
|
259
|
+
info.url;
|
|
223
260
|
if (!downloadUrl) {
|
|
224
261
|
throw new Error(`No download URL in Rodin response: ${JSON.stringify(info)}`);
|
|
225
262
|
}
|
|
226
|
-
const dlRes = await
|
|
263
|
+
const dlRes = await safeFetch(downloadUrl, { signal });
|
|
227
264
|
if (!dlRes.ok) {
|
|
228
265
|
const errText = await dlRes.text().catch(() => "");
|
|
229
266
|
throw new Error(`Failed to download Rodin result (${dlRes.status}): ${errText}`);
|
|
230
267
|
}
|
|
231
268
|
const bytes = new Uint8Array(await dlRes.arrayBuffer());
|
|
269
|
+
// Stryker disable next-line StringLiteral: diagnostic log message.
|
|
232
270
|
log.debug(`Downloaded ${bytes.length} bytes of 3D model data from Rodin`);
|
|
233
271
|
return bytes;
|
|
234
272
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rodin-provider.js","sourceRoot":"","sources":["../../src/providers/rodin-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASnD,MAAM,GAAG,GAAG,YAAY,CAAC,kCAAkC,CAAC,CAAC;AAE7D,MAAM,kBAAkB,GAAG,mCAAmC,CAAC;AAE/D,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,eAAe,GAAc;IACxC;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,OAAO;QACjB,cAAc,EAAE,CAAC,aAAa,CAAC;QAC/B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;KAC7C;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,+BAA+B;QACrC,QAAQ,EAAE,OAAO;QACjB,cAAc,EAAE,CAAC,aAAa,CAAC;QAC/B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;KAC7C;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,OAAO;QACjB,cAAc,EAAE,CAAC,YAAY,CAAC;QAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;KAC7C;CACF,CAAC;AAiBF,
|
|
1
|
+
{"version":3,"file":"rodin-provider.js","sourceRoot":"","sources":["../../src/providers/rodin-provider.ts"],"names":[],"mappings":"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"}
|