@nodetool-ai/runtime 0.7.0-rc.22 → 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,138 @@
|
|
|
1
|
+
import { isRecord, isString } from "@nodetool-ai/protocol";
|
|
2
|
+
import { countTokens } from "../token-counter.js";
|
|
3
|
+
const failureMessages = new WeakMap();
|
|
4
|
+
/** Safe diagnostic generated from request counts, without upstream error text. */
|
|
5
|
+
export function groqRequestFailureMessage(error) {
|
|
6
|
+
return error instanceof Error ? (failureMessages.get(error) ?? null) : null;
|
|
7
|
+
}
|
|
8
|
+
function serializedTokenCount(value) {
|
|
9
|
+
let serialized;
|
|
10
|
+
try {
|
|
11
|
+
serialized = JSON.stringify(value);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return 0;
|
|
15
|
+
}
|
|
16
|
+
return serialized === undefined ? 0 : countTokens(serialized);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Estimate the final converted request, after message and tool serialization.
|
|
20
|
+
* This is a cl100k proxy, not a Groq billing or model tokenizer count.
|
|
21
|
+
*/
|
|
22
|
+
export function estimateGroqRequestTokens(request) {
|
|
23
|
+
let systemTokens = 0;
|
|
24
|
+
let messageTokens = 0;
|
|
25
|
+
for (const message of request.messages) {
|
|
26
|
+
const tokens = serializedTokenCount(message);
|
|
27
|
+
if (message.role === "system") {
|
|
28
|
+
systemTokens += tokens;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
messageTokens += tokens;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const toolTokens = Array.isArray(request.tools) && request.tools.length > 0
|
|
35
|
+
? serializedTokenCount(request.tools)
|
|
36
|
+
: 0;
|
|
37
|
+
return {
|
|
38
|
+
inputTokens: systemTokens + messageTokens + toolTokens,
|
|
39
|
+
systemTokens,
|
|
40
|
+
messageTokens,
|
|
41
|
+
toolTokens
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function errorText(error) {
|
|
45
|
+
if (!isRecord(error)) {
|
|
46
|
+
return String(error);
|
|
47
|
+
}
|
|
48
|
+
const message = isString(error.message) ? error.message : "";
|
|
49
|
+
if (message) {
|
|
50
|
+
return message;
|
|
51
|
+
}
|
|
52
|
+
const body = isRecord(error.body) ? error.body : null;
|
|
53
|
+
const nested = body && isRecord(body.error) ? body.error : body;
|
|
54
|
+
return nested && isString(nested.message) ? nested.message : "";
|
|
55
|
+
}
|
|
56
|
+
function errorCode(error) {
|
|
57
|
+
if (!isRecord(error)) {
|
|
58
|
+
return "";
|
|
59
|
+
}
|
|
60
|
+
if (isString(error.code)) {
|
|
61
|
+
return error.code;
|
|
62
|
+
}
|
|
63
|
+
const body = isRecord(error.body) ? error.body : null;
|
|
64
|
+
const nested = body && isRecord(body.error) ? body.error : body;
|
|
65
|
+
return nested && isString(nested.code) ? nested.code : "";
|
|
66
|
+
}
|
|
67
|
+
function reportedCount(text, label) {
|
|
68
|
+
const match = text.match(new RegExp(`${label}\\s*[:=]?\\s*([0-9][0-9,]*)`, "i"));
|
|
69
|
+
if (!match) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const value = Number(match[1].replaceAll(",", ""));
|
|
73
|
+
return Number.isSafeInteger(value) ? value : null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Recognize Groq's request-size and TPM errors without treating every 429 as
|
|
77
|
+
* a prompt overflow. The comparison uses the vendor's reported counts when
|
|
78
|
+
* present, preserving the distinction between one oversized request and a
|
|
79
|
+
* temporarily exhausted per-minute allowance.
|
|
80
|
+
*/
|
|
81
|
+
export function groqRequestFailureDiagnostic(error, estimate) {
|
|
82
|
+
const text = errorText(error);
|
|
83
|
+
const hasRequestSizeSignal = /request\s+too\s+large|prompt\s+too\s+large/i.test(text);
|
|
84
|
+
const hasTpmSignal = /tokens?\s+per\s+minute|\b(?:tpm|itpm)\b/i.test(text);
|
|
85
|
+
if (!hasRequestSizeSignal && !hasTpmSignal) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const limitTokens = reportedCount(text, "limit");
|
|
89
|
+
const requestedTokens = reportedCount(text, "requested");
|
|
90
|
+
if (!hasRequestSizeSignal &&
|
|
91
|
+
(limitTokens === null || requestedTokens === null)) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const countsShowRequestOverLimit = limitTokens !== null &&
|
|
95
|
+
requestedTokens !== null &&
|
|
96
|
+
requestedTokens > limitTokens;
|
|
97
|
+
const countsShowTemporaryExhaustion = limitTokens !== null &&
|
|
98
|
+
requestedTokens !== null &&
|
|
99
|
+
requestedTokens <= limitTokens;
|
|
100
|
+
const kind = countsShowRequestOverLimit ||
|
|
101
|
+
(hasRequestSizeSignal && !countsShowTemporaryExhaustion)
|
|
102
|
+
? "request_too_large"
|
|
103
|
+
: "quota_exhausted";
|
|
104
|
+
return { kind, estimate, limitTokens, requestedTokens };
|
|
105
|
+
}
|
|
106
|
+
function formatted(value) {
|
|
107
|
+
return value.toLocaleString("en-US");
|
|
108
|
+
}
|
|
109
|
+
/** Add bounded, actionable context while retaining the original Error object. */
|
|
110
|
+
export function annotateGroqRequestFailure(error, diagnostic) {
|
|
111
|
+
if (!(error instanceof Error)) {
|
|
112
|
+
return error;
|
|
113
|
+
}
|
|
114
|
+
const requested = diagnostic.requestedTokens ?? diagnostic.estimate.inputTokens;
|
|
115
|
+
const limit = diagnostic.limitTokens;
|
|
116
|
+
const counts = diagnostic.requestedTokens === null
|
|
117
|
+
? `estimated ${formatted(requested)} input tokens`
|
|
118
|
+
: limit === null
|
|
119
|
+
? `requested ${formatted(requested)} input tokens`
|
|
120
|
+
: `requested ${formatted(requested)} input tokens against a ${formatted(limit)} token limit`;
|
|
121
|
+
const estimate = `local estimate ${formatted(diagnostic.estimate.inputTokens)} ` +
|
|
122
|
+
`(system ${formatted(diagnostic.estimate.systemTokens)}, messages ${formatted(diagnostic.estimate.messageTokens)}, tools ${formatted(diagnostic.estimate.toolTokens)})`;
|
|
123
|
+
const guidance = diagnostic.kind === "request_too_large"
|
|
124
|
+
? `Groq rejected an oversized request (${counts}; ${estimate}). Please reduce the prompt, conversation history, or tool definitions, or use a plan with a higher limit.`
|
|
125
|
+
: `Groq's token allowance is temporarily exhausted (${counts}; ${estimate}). Please retry after the current minute or check the Groq plan limit.`;
|
|
126
|
+
failureMessages.set(error, guidance);
|
|
127
|
+
error.message = `${error.message} — ${guidance}`;
|
|
128
|
+
return error;
|
|
129
|
+
}
|
|
130
|
+
export function groqContextExceeded(error) {
|
|
131
|
+
const text = errorText(error);
|
|
132
|
+
if (/tokens?\s+per\s+minute|\b(?:tpm|itpm)\b|(?:request|prompt)\s+too\s+large/i.test(text)) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
return (errorCode(error) === "context_length_exceeded" ||
|
|
136
|
+
/context_length_exceeded|maximum context length|context window/i.test(text));
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=groq-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groq-request.js","sourceRoot":"","sources":["../../src/providers/groq-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseProvider } from "./base-provider.js";
|
|
2
|
+
import { type ProviderGeneration, type ProviderGenerationLookup } from "./provider-generations.js";
|
|
3
|
+
import type { ExtendVideoParams, ImageModel, ImageToImageParams, ImageToVideoParams, Message, ProviderStreamItem, ReferenceToVideoInputs, ReferenceToVideoParams, TextToImageParams, TextToVideoParams, VideoModel, VideoToVideoParams } from "./types.js";
|
|
4
|
+
import { type HiggsfieldEstimate } from "./higgsfield-transport.js";
|
|
5
|
+
export declare class HiggsfieldProvider extends BaseProvider {
|
|
6
|
+
private readonly credentials;
|
|
7
|
+
static requiredSecrets(): string[];
|
|
8
|
+
constructor(secrets?: Record<string, unknown>);
|
|
9
|
+
getContainerEnv(): Record<string, string>;
|
|
10
|
+
generateMessage(_args: Parameters<BaseProvider["generateMessage"]>[0]): Promise<Message>;
|
|
11
|
+
generateMessages(_args: Parameters<BaseProvider["generateMessages"]>[0]): AsyncGenerator<ProviderStreamItem>;
|
|
12
|
+
getAvailableImageModels(): Promise<ImageModel[]>;
|
|
13
|
+
getAvailableVideoModels(): Promise<VideoModel[]>;
|
|
14
|
+
getGeneration(requestId: string, options?: ProviderGenerationLookup): Promise<ProviderGeneration | null>;
|
|
15
|
+
cancel(requestId: string, signal?: AbortSignal): Promise<void>;
|
|
16
|
+
estimate(modelId: string, input: Record<string, unknown>, signal?: AbortSignal): Promise<HiggsfieldEstimate>;
|
|
17
|
+
private run;
|
|
18
|
+
textToImage(params: TextToImageParams): Promise<Uint8Array>;
|
|
19
|
+
imageToImage(images: Uint8Array[], params: ImageToImageParams): Promise<Uint8Array>;
|
|
20
|
+
textToVideo(params: TextToVideoParams): Promise<Uint8Array>;
|
|
21
|
+
imageToVideo(image: Uint8Array, params: ImageToVideoParams): Promise<Uint8Array>;
|
|
22
|
+
referenceToVideo(inputs: ReferenceToVideoInputs, params: ReferenceToVideoParams): Promise<Uint8Array>;
|
|
23
|
+
videoToVideo(video: Uint8Array, params: VideoToVideoParams): Promise<Uint8Array>;
|
|
24
|
+
extendVideo(video: Uint8Array, params: ExtendVideoParams): Promise<Uint8Array>;
|
|
25
|
+
private uploadImages;
|
|
26
|
+
private uploadVideo;
|
|
27
|
+
private uploadVideos;
|
|
28
|
+
private uploadAudios;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=higgsfield-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"higgsfield-provider.d.ts","sourceRoot":"","sources":["../../src/providers/higgsfield-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAsB,KAAK,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACvH,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC3P,OAAO,EAA0P,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAuB5T,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAgB,eAAe,IAAI,MAAM,EAAE,CAAmE;IAC9G,YAAY,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAgF;IACxH,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAkH;IAC9J,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAoE;IAE3J,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAoE;IACxK,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAA2J;IAC3M,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAA2J;IAE3M,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAY1H;IAEK,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;IAEK,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEjH;YAEa,GAAG;IAYF,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzE;IACc,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAMjG;IACc,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAGzE;IACc,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAK9F;IACc,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAOnH;IACc,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAM9F;IACc,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAK5F;YACa,YAAY;YAMZ,WAAW;YAIX,YAAY;YAGZ,YAAY;CAM3B"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { loadPackageAssetJson, createLogger } from "@nodetool-ai/config";
|
|
2
|
+
import { PROVIDER_IDS } from "@nodetool-ai/protocol";
|
|
3
|
+
import { recordGenerationReceiptAsync } from "../generation-receipt.js";
|
|
4
|
+
import { BaseProvider } from "./base-provider.js";
|
|
5
|
+
import { providerGeneration } from "./provider-generations.js";
|
|
6
|
+
import { higgsfieldAwaitResult, higgsfieldCancelByRequestId, higgsfieldCreateUploadUrl, higgsfieldDownloadResult, higgsfieldEstimate, higgsfieldGetStatusByRequestId, higgsfieldOutputUrls, higgsfieldSubmit, higgsfieldUploadMedia } from "./higgsfield-transport.js";
|
|
7
|
+
const log = createLogger("nodetool.runtime.providers.higgsfield");
|
|
8
|
+
function manifest() {
|
|
9
|
+
return loadPackageAssetJson({ pkg: "@nodetool-ai/higgsfield-nodes", path: "higgsfield-manifest.json" }, import.meta.url);
|
|
10
|
+
}
|
|
11
|
+
function asCredentials(secrets) {
|
|
12
|
+
const keyId = typeof secrets.HIGGSFIELD_API_KEY_ID === "string" ? secrets.HIGGSFIELD_API_KEY_ID : "";
|
|
13
|
+
const secret = typeof secrets.HIGGSFIELD_API_KEY_SECRET === "string" ? secrets.HIGGSFIELD_API_KEY_SECRET : "";
|
|
14
|
+
if (!keyId || !secret)
|
|
15
|
+
throw new Error("HIGGSFIELD_API_KEY_ID and HIGGSFIELD_API_KEY_SECRET are required");
|
|
16
|
+
return { keyId, secret };
|
|
17
|
+
}
|
|
18
|
+
function model(id, task, title, supportedTasks) {
|
|
19
|
+
return { id, name: title, provider: PROVIDER_IDS.HIGGSFIELD, supportedTasks: supportedTasks ?? [task] };
|
|
20
|
+
}
|
|
21
|
+
function clean(input) {
|
|
22
|
+
return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined && value !== null));
|
|
23
|
+
}
|
|
24
|
+
export class HiggsfieldProvider extends BaseProvider {
|
|
25
|
+
credentials;
|
|
26
|
+
static requiredSecrets() { return ["HIGGSFIELD_API_KEY_ID", "HIGGSFIELD_API_KEY_SECRET"]; }
|
|
27
|
+
constructor(secrets = {}) { super(PROVIDER_IDS.HIGGSFIELD); this.credentials = asCredentials(secrets); }
|
|
28
|
+
getContainerEnv() { return { HIGGSFIELD_API_KEY_ID: this.credentials.keyId, HIGGSFIELD_API_KEY_SECRET: this.credentials.secret }; }
|
|
29
|
+
async generateMessage(_args) { throw new Error("higgsfield does not support chat generation"); }
|
|
30
|
+
// eslint-disable-next-line require-yield
|
|
31
|
+
async *generateMessages(_args) { throw new Error("higgsfield does not support chat generation"); }
|
|
32
|
+
async getAvailableImageModels() { return manifest().filter((entry) => entry.outputType === "image").map((entry) => model(entry.modelId, entry.task, entry.title, entry.supportedTasks)); }
|
|
33
|
+
async getAvailableVideoModels() { return manifest().filter((entry) => entry.outputType === "video").map((entry) => model(entry.modelId, entry.task, entry.title, entry.supportedTasks)); }
|
|
34
|
+
async getGeneration(requestId, options = {}) {
|
|
35
|
+
const result = await higgsfieldGetStatusByRequestId(this.credentials, requestId, options.signal);
|
|
36
|
+
if (!result)
|
|
37
|
+
return null;
|
|
38
|
+
const status = result.status === "completed" ? "completed" : result.status === "canceled" ? "cancelled" : result.status === "failed" || result.status === "nsfw" ? "failed" : "running";
|
|
39
|
+
return providerGeneration({
|
|
40
|
+
provider: PROVIDER_IDS.HIGGSFIELD,
|
|
41
|
+
request_id: requestId,
|
|
42
|
+
model: options.model ?? null,
|
|
43
|
+
status,
|
|
44
|
+
output_urls: higgsfieldOutputUrls(result),
|
|
45
|
+
error: result.error ?? null
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async cancel(requestId, signal) {
|
|
49
|
+
await higgsfieldCancelByRequestId(this.credentials, requestId, signal);
|
|
50
|
+
}
|
|
51
|
+
async estimate(modelId, input, signal) {
|
|
52
|
+
return higgsfieldEstimate(this.credentials, modelId, input, signal);
|
|
53
|
+
}
|
|
54
|
+
async run(modelId, input, signal, timeoutSeconds) {
|
|
55
|
+
const entry = manifest().find((candidate) => candidate.modelId === modelId);
|
|
56
|
+
if (!entry)
|
|
57
|
+
throw new Error(`Unknown Higgsfield model: ${modelId}`);
|
|
58
|
+
const submission = await higgsfieldSubmit(this.credentials, modelId, input, signal);
|
|
59
|
+
await recordGenerationReceiptAsync({ provider_request_id: submission.request_id });
|
|
60
|
+
const result = await higgsfieldAwaitResult(this.credentials, submission.status_url, { signal, timeoutMs: (timeoutSeconds ?? entry.timeoutSeconds) * 1000 });
|
|
61
|
+
const url = higgsfieldOutputUrls(result)[0];
|
|
62
|
+
if (!url)
|
|
63
|
+
throw new Error(`Higgsfield ${modelId} completed without a result URL`);
|
|
64
|
+
log.debug("Higgsfield generation completed", { model: modelId, requestId: submission.request_id });
|
|
65
|
+
return higgsfieldDownloadResult(url, signal);
|
|
66
|
+
}
|
|
67
|
+
async textToImage(params) {
|
|
68
|
+
return this.run(params.model.id, clean({ prompt: params.prompt, aspect_ratio: params.aspectRatio, resolution: params.resolution, quality: params.quality, seed: params.seed }), params.signal);
|
|
69
|
+
}
|
|
70
|
+
async imageToImage(images, params) {
|
|
71
|
+
const urls = await Promise.all(images.map(async (bytes) => {
|
|
72
|
+
const upload = await higgsfieldCreateUploadUrl(this.credentials, "image/png", params.signal);
|
|
73
|
+
return higgsfieldUploadMedia(upload, bytes, "image/png", params.signal);
|
|
74
|
+
}));
|
|
75
|
+
return this.run(params.model.id, clean({ prompt: params.prompt, image_urls: urls, aspect_ratio: params.aspectRatio, resolution: params.resolution, quality: params.quality, seed: params.seed }), params.signal);
|
|
76
|
+
}
|
|
77
|
+
async textToVideo(params) {
|
|
78
|
+
const isKling = params.model.id.startsWith("kling-video/");
|
|
79
|
+
return this.run(params.model.id, clean({ prompt: params.prompt, duration: params.durationSeconds, aspect_ratio: params.aspectRatio, resolution: params.resolution, sound: isKling ? "on" : undefined, cfg_scale: isKling ? params.guidanceScale : undefined }), params.signal, params.timeoutSeconds ?? undefined);
|
|
80
|
+
}
|
|
81
|
+
async imageToVideo(image, params) {
|
|
82
|
+
const upload = await higgsfieldCreateUploadUrl(this.credentials, "image/png", params.signal);
|
|
83
|
+
const imageUrl = await higgsfieldUploadMedia(upload, image, "image/png", params.signal);
|
|
84
|
+
const isKling = params.model.id.startsWith("kling-video/");
|
|
85
|
+
return this.run(params.model.id, clean({ prompt: params.prompt, image_url: imageUrl, duration: params.durationSeconds, aspect_ratio: params.aspectRatio, resolution: params.resolution, sound: isKling ? "on" : undefined, cfg_scale: isKling ? params.guidanceScale : undefined }), params.signal, params.timeoutSeconds ?? undefined);
|
|
86
|
+
}
|
|
87
|
+
async referenceToVideo(inputs, params) {
|
|
88
|
+
const images = await this.uploadImages(inputs.images, params.signal);
|
|
89
|
+
const videos = await this.uploadVideos(inputs.videos, params.signal);
|
|
90
|
+
const audios = await this.uploadAudios(inputs.audios ?? [], params.signal);
|
|
91
|
+
const isGrokImagine = params.model.id === "xai/grok-imagine-video/v1.5/reference-to-video";
|
|
92
|
+
if (isGrokImagine && videos.length > 0)
|
|
93
|
+
throw new Error("Grok Imagine Video 1.5 does not accept video reference inputs");
|
|
94
|
+
return this.run(params.model.id, clean({ prompt: params.prompt, image_urls: images, video_urls: isGrokImagine ? undefined : videos, audio_urls: isGrokImagine ? undefined : audios, audio_url: isGrokImagine && audios.length === 1 ? audios[0] : undefined, duration: params.durationSeconds, aspect_ratio: params.aspectRatio, resolution: params.resolution, generate_audio: params.useReferenceVideoAudio }), params.signal, params.timeoutSeconds ?? undefined);
|
|
95
|
+
}
|
|
96
|
+
async videoToVideo(video, params) {
|
|
97
|
+
const [videoUrl, referenceImages] = await Promise.all([
|
|
98
|
+
this.uploadVideo(video, params.signal),
|
|
99
|
+
this.uploadImages(params.referenceImages ?? [], params.signal)
|
|
100
|
+
]);
|
|
101
|
+
return this.run(params.model.id, clean({ prompt: params.prompt, video_url: videoUrl, image_urls: referenceImages, resolution: params.resolution }), params.signal);
|
|
102
|
+
}
|
|
103
|
+
async extendVideo(video, params) {
|
|
104
|
+
if (params.mode !== "end")
|
|
105
|
+
throw new Error("Higgsfield video extension currently supports mode=end only");
|
|
106
|
+
if (!Number.isInteger(params.durationSeconds) || params.durationSeconds < 4 || params.durationSeconds > 30)
|
|
107
|
+
throw new Error("Higgsfield video extension duration must be an integer between 4 and 30 seconds");
|
|
108
|
+
const videoUrl = await this.uploadVideo(video, params.signal);
|
|
109
|
+
return this.run(params.model.id, { prompt: params.prompt, video_url: videoUrl, duration: params.durationSeconds }, params.signal);
|
|
110
|
+
}
|
|
111
|
+
async uploadImages(images, signal) {
|
|
112
|
+
return Promise.all(images.map(async (bytes) => {
|
|
113
|
+
const upload = await higgsfieldCreateUploadUrl(this.credentials, "image/png", signal);
|
|
114
|
+
return higgsfieldUploadMedia(upload, bytes, "image/png", signal);
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
async uploadVideo(video, signal) {
|
|
118
|
+
const upload = await higgsfieldCreateUploadUrl(this.credentials, "video/mp4", signal);
|
|
119
|
+
return higgsfieldUploadMedia(upload, video, "video/mp4", signal);
|
|
120
|
+
}
|
|
121
|
+
async uploadVideos(videos, signal) {
|
|
122
|
+
return Promise.all(videos.map((video) => this.uploadVideo(video, signal)));
|
|
123
|
+
}
|
|
124
|
+
async uploadAudios(audios, signal) {
|
|
125
|
+
return Promise.all(audios.map(async (bytes) => {
|
|
126
|
+
const upload = await higgsfieldCreateUploadUrl(this.credentials, "audio/wav", signal);
|
|
127
|
+
return higgsfieldUploadMedia(upload, bytes, "audio/wav", signal);
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=higgsfield-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"higgsfield-provider.js","sourceRoot":"","sources":["../../src/providers/higgsfield-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const HIGGSFIELD_BASE = "https://api.higgsfield.ai";
|
|
3
|
+
declare const statusSchema: z.ZodObject<{
|
|
4
|
+
request_id: z.ZodOptional<z.ZodString>;
|
|
5
|
+
status: z.ZodEnum<{
|
|
6
|
+
canceled: "canceled";
|
|
7
|
+
completed: "completed";
|
|
8
|
+
failed: "failed";
|
|
9
|
+
in_progress: "in_progress";
|
|
10
|
+
nsfw: "nsfw";
|
|
11
|
+
queued: "queued";
|
|
12
|
+
}>;
|
|
13
|
+
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
14
|
+
images: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
15
|
+
url: z.ZodString;
|
|
16
|
+
}, z.core.$loose>]>>>;
|
|
17
|
+
video: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
18
|
+
url: z.ZodString;
|
|
19
|
+
}, z.core.$loose>]>>;
|
|
20
|
+
audio: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
21
|
+
url: z.ZodString;
|
|
22
|
+
}, z.core.$loose>]>>;
|
|
23
|
+
audios: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
24
|
+
url: z.ZodString;
|
|
25
|
+
}, z.core.$loose>]>>>;
|
|
26
|
+
outputs: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
27
|
+
url: z.ZodString;
|
|
28
|
+
}, z.core.$loose>]>>>;
|
|
29
|
+
output: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
30
|
+
url: z.ZodString;
|
|
31
|
+
}, z.core.$loose>]>>;
|
|
32
|
+
zip: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
33
|
+
url: z.ZodString;
|
|
34
|
+
}, z.core.$loose>]>>;
|
|
35
|
+
mov: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
36
|
+
url: z.ZodString;
|
|
37
|
+
}, z.core.$loose>]>>;
|
|
38
|
+
jsx: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
39
|
+
url: z.ZodString;
|
|
40
|
+
}, z.core.$loose>]>>;
|
|
41
|
+
fbx: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
42
|
+
url: z.ZodString;
|
|
43
|
+
}, z.core.$loose>]>>;
|
|
44
|
+
ply: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
45
|
+
url: z.ZodString;
|
|
46
|
+
}, z.core.$loose>]>>;
|
|
47
|
+
}, z.core.$loose>;
|
|
48
|
+
declare const submissionSchema: z.ZodObject<{
|
|
49
|
+
request_id: z.ZodString;
|
|
50
|
+
status_url: z.ZodString;
|
|
51
|
+
cancel_url: z.ZodString;
|
|
52
|
+
}, z.core.$loose>;
|
|
53
|
+
declare const uploadSchema: z.ZodPipe<z.ZodObject<{
|
|
54
|
+
upload_url: z.ZodString;
|
|
55
|
+
public_url: z.ZodString;
|
|
56
|
+
upload_headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
57
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
58
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
59
|
+
upload_url: string;
|
|
60
|
+
public_url: string;
|
|
61
|
+
headers: Record<string, string>;
|
|
62
|
+
}, {
|
|
63
|
+
upload_url: string;
|
|
64
|
+
public_url: string;
|
|
65
|
+
upload_headers?: Record<string, string> | undefined;
|
|
66
|
+
headers?: Record<string, string> | undefined;
|
|
67
|
+
}>>;
|
|
68
|
+
declare const estimateSchema: z.ZodObject<{
|
|
69
|
+
credits: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
70
|
+
usd: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
71
|
+
}, z.core.$loose>;
|
|
72
|
+
export type HiggsfieldStatus = z.infer<typeof statusSchema>;
|
|
73
|
+
export type HiggsfieldSubmission = z.infer<typeof submissionSchema>;
|
|
74
|
+
export type HiggsfieldUpload = z.infer<typeof uploadSchema>;
|
|
75
|
+
export type HiggsfieldEstimate = z.infer<typeof estimateSchema>;
|
|
76
|
+
export declare class HiggsfieldApiError extends Error {
|
|
77
|
+
readonly status: number;
|
|
78
|
+
readonly correlationId: string | null;
|
|
79
|
+
readonly requestId: string | null;
|
|
80
|
+
constructor(message: string, fields: {
|
|
81
|
+
status: number;
|
|
82
|
+
correlationId?: string | null;
|
|
83
|
+
requestId?: string | null;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export interface HiggsfieldCredentials {
|
|
87
|
+
readonly keyId: string;
|
|
88
|
+
readonly secret: string;
|
|
89
|
+
}
|
|
90
|
+
export declare function higgsfieldSubmit(credentials: HiggsfieldCredentials, modelId: string, input: Record<string, unknown>, signal?: AbortSignal): Promise<HiggsfieldSubmission>;
|
|
91
|
+
export declare function higgsfieldGetStatus(credentials: HiggsfieldCredentials, url: string, signal?: AbortSignal): Promise<HiggsfieldStatus>;
|
|
92
|
+
export declare function higgsfieldGetStatusByRequestId(credentials: HiggsfieldCredentials, requestIdValue: string, signal?: AbortSignal): Promise<HiggsfieldStatus | null>;
|
|
93
|
+
export declare function higgsfieldAwaitResult(credentials: HiggsfieldCredentials, statusUrl: string, options?: {
|
|
94
|
+
signal?: AbortSignal;
|
|
95
|
+
timeoutMs?: number;
|
|
96
|
+
initialDelayMs?: number;
|
|
97
|
+
}): Promise<HiggsfieldStatus>;
|
|
98
|
+
export declare function higgsfieldCancel(credentials: HiggsfieldCredentials, url: string, signal?: AbortSignal): Promise<void>;
|
|
99
|
+
export declare function higgsfieldCancelByRequestId(credentials: HiggsfieldCredentials, requestIdValue: string, signal?: AbortSignal): Promise<void>;
|
|
100
|
+
export declare function higgsfieldEstimate(credentials: HiggsfieldCredentials, modelId: string, input: Record<string, unknown>, signal?: AbortSignal): Promise<HiggsfieldEstimate>;
|
|
101
|
+
export declare function higgsfieldCreateUploadUrl(credentials: HiggsfieldCredentials, mimeType: string, signal?: AbortSignal): Promise<HiggsfieldUpload>;
|
|
102
|
+
export declare function higgsfieldUploadMedia(upload: HiggsfieldUpload, bytes: Uint8Array, mimeType: string, signal?: AbortSignal): Promise<string>;
|
|
103
|
+
export declare function higgsfieldOutputUrls(result: HiggsfieldStatus): string[];
|
|
104
|
+
export declare function higgsfieldDownloadResult(url: string, signal?: AbortSignal): Promise<Uint8Array>;
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=higgsfield-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"higgsfield-transport.d.ts","sourceRoot":"","sources":["../../src/providers/higgsfield-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { fetchWithRetry, sleep } from "./http-transport.js";
|
|
3
|
+
import { safeFetch } from "./safe-url.js";
|
|
4
|
+
export const HIGGSFIELD_BASE = "https://api.higgsfield.ai";
|
|
5
|
+
const requestId = z.string().uuid();
|
|
6
|
+
const mediaUrl = z.string().url();
|
|
7
|
+
const mediaReference = z.union([mediaUrl, z.object({ url: mediaUrl }).passthrough()]);
|
|
8
|
+
const statusSchema = z.object({
|
|
9
|
+
request_id: requestId.optional(),
|
|
10
|
+
status: z.enum(["queued", "in_progress", "completed", "failed", "nsfw", "canceled"]),
|
|
11
|
+
error: z.string().nullable().optional(),
|
|
12
|
+
images: z.array(mediaReference).optional(),
|
|
13
|
+
video: mediaReference.optional(),
|
|
14
|
+
audio: mediaReference.optional(),
|
|
15
|
+
audios: z.array(mediaReference).optional(),
|
|
16
|
+
outputs: z.array(mediaReference).optional(),
|
|
17
|
+
output: mediaReference.optional(),
|
|
18
|
+
zip: mediaReference.optional(),
|
|
19
|
+
mov: mediaReference.optional(),
|
|
20
|
+
jsx: mediaReference.optional(),
|
|
21
|
+
fbx: mediaReference.optional(),
|
|
22
|
+
ply: mediaReference.optional()
|
|
23
|
+
}).passthrough();
|
|
24
|
+
const submissionSchema = z.object({
|
|
25
|
+
request_id: requestId,
|
|
26
|
+
status_url: z.string().url(),
|
|
27
|
+
cancel_url: z.string().url()
|
|
28
|
+
}).passthrough();
|
|
29
|
+
const uploadSchema = z.object({
|
|
30
|
+
upload_url: z.string().url(),
|
|
31
|
+
public_url: z.string().url(),
|
|
32
|
+
upload_headers: z.record(z.string(), z.string()).optional(),
|
|
33
|
+
headers: z.record(z.string(), z.string()).optional()
|
|
34
|
+
}).transform(({ upload_headers, headers, ...fields }) => ({
|
|
35
|
+
...fields,
|
|
36
|
+
headers: upload_headers ?? headers ?? {}
|
|
37
|
+
}));
|
|
38
|
+
const estimateSchema = z.object({ credits: z.coerce.number().optional(), usd: z.coerce.number().optional() }).passthrough();
|
|
39
|
+
export class HiggsfieldApiError extends Error {
|
|
40
|
+
status;
|
|
41
|
+
correlationId;
|
|
42
|
+
requestId;
|
|
43
|
+
constructor(message, fields) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.name = "HiggsfieldApiError";
|
|
46
|
+
this.status = fields.status;
|
|
47
|
+
this.correlationId = fields.correlationId ?? null;
|
|
48
|
+
this.requestId = fields.requestId ?? null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function headers(credentials) {
|
|
52
|
+
return {
|
|
53
|
+
Authorization: `Key ${credentials.keyId}:${credentials.secret}`,
|
|
54
|
+
"Content-Type": "application/json"
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async function parse(response, schema, requestIdValue) {
|
|
58
|
+
const text = await response.text();
|
|
59
|
+
let body = null;
|
|
60
|
+
try {
|
|
61
|
+
body = JSON.parse(text);
|
|
62
|
+
}
|
|
63
|
+
catch { /* handled below */ }
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
const message = typeof body === "object" && body !== null && "error" in body ? String(body.error) : text.slice(0, 500);
|
|
66
|
+
throw new HiggsfieldApiError(`Higgsfield request failed: HTTP ${response.status}: ${message}`, {
|
|
67
|
+
status: response.status,
|
|
68
|
+
correlationId: response.headers.get("X-Correlation-ID"),
|
|
69
|
+
requestId: requestIdValue
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const parsed = schema.safeParse(body);
|
|
73
|
+
if (!parsed.success)
|
|
74
|
+
throw new Error(`Invalid Higgsfield response: ${parsed.error.message}`);
|
|
75
|
+
return parsed.data;
|
|
76
|
+
}
|
|
77
|
+
export async function higgsfieldSubmit(credentials, modelId, input, signal) {
|
|
78
|
+
const init = { method: "POST", headers: headers(credentials), body: JSON.stringify(input) };
|
|
79
|
+
if (signal)
|
|
80
|
+
init.signal = signal;
|
|
81
|
+
const response = await fetch(`${HIGGSFIELD_BASE}/${modelId}`, init);
|
|
82
|
+
return parse(response, submissionSchema);
|
|
83
|
+
}
|
|
84
|
+
export async function higgsfieldGetStatus(credentials, url, signal) {
|
|
85
|
+
const init = { headers: headers(credentials) };
|
|
86
|
+
if (signal)
|
|
87
|
+
init.signal = signal;
|
|
88
|
+
const response = await fetchWithRetry(url, init, { fetchImpl: (input, requestInit) => safeFetch(String(input), requestInit) });
|
|
89
|
+
return parse(response, statusSchema);
|
|
90
|
+
}
|
|
91
|
+
function requestPath(requestIdValue, suffix) {
|
|
92
|
+
const parsed = requestId.safeParse(requestIdValue);
|
|
93
|
+
if (!parsed.success)
|
|
94
|
+
throw new Error("Higgsfield request id must be a UUID");
|
|
95
|
+
return `${HIGGSFIELD_BASE}/requests/${encodeURIComponent(requestIdValue)}/${suffix}`;
|
|
96
|
+
}
|
|
97
|
+
export async function higgsfieldGetStatusByRequestId(credentials, requestIdValue, signal) {
|
|
98
|
+
const init = { headers: headers(credentials) };
|
|
99
|
+
if (signal)
|
|
100
|
+
init.signal = signal;
|
|
101
|
+
const response = await safeFetch(requestPath(requestIdValue, "status"), init);
|
|
102
|
+
if (response.status === 404)
|
|
103
|
+
return null;
|
|
104
|
+
return parse(response, statusSchema, requestIdValue);
|
|
105
|
+
}
|
|
106
|
+
export async function higgsfieldAwaitResult(credentials, statusUrl, options = {}) {
|
|
107
|
+
const deadline = Date.now() + (options.timeoutMs ?? 900_000);
|
|
108
|
+
let delay = options.initialDelayMs ?? 2_000;
|
|
109
|
+
while (Date.now() < deadline) {
|
|
110
|
+
await sleep(delay, options.signal);
|
|
111
|
+
const result = await higgsfieldGetStatus(credentials, statusUrl, options.signal);
|
|
112
|
+
if (result.status === "completed")
|
|
113
|
+
return result;
|
|
114
|
+
if (result.status === "failed" || result.status === "nsfw") {
|
|
115
|
+
throw new Error(`Higgsfield generation ${result.status}: ${result.error ?? "provider rejected the request"}`);
|
|
116
|
+
}
|
|
117
|
+
if (result.status === "canceled")
|
|
118
|
+
throw new Error("Higgsfield generation was canceled");
|
|
119
|
+
delay = Math.min(10_000, Math.round(delay * 1.5));
|
|
120
|
+
}
|
|
121
|
+
throw new Error("Higgsfield generation timed out");
|
|
122
|
+
}
|
|
123
|
+
export async function higgsfieldCancel(credentials, url, signal) {
|
|
124
|
+
const init = { method: "POST", headers: headers(credentials) };
|
|
125
|
+
if (signal)
|
|
126
|
+
init.signal = signal;
|
|
127
|
+
const response = await safeFetch(url, init);
|
|
128
|
+
if (response.status === 202)
|
|
129
|
+
return;
|
|
130
|
+
await parse(response, z.object({}).passthrough());
|
|
131
|
+
}
|
|
132
|
+
export async function higgsfieldCancelByRequestId(credentials, requestIdValue, signal) {
|
|
133
|
+
return higgsfieldCancel(credentials, requestPath(requestIdValue, "cancel"), signal);
|
|
134
|
+
}
|
|
135
|
+
export async function higgsfieldEstimate(credentials, modelId, input, signal) {
|
|
136
|
+
const init = { method: "POST", headers: headers(credentials), body: JSON.stringify(input) };
|
|
137
|
+
if (signal)
|
|
138
|
+
init.signal = signal;
|
|
139
|
+
return parse(await fetch(`${HIGGSFIELD_BASE}/estimate/${modelId}`, init), estimateSchema);
|
|
140
|
+
}
|
|
141
|
+
export async function higgsfieldCreateUploadUrl(credentials, mimeType, signal) {
|
|
142
|
+
const init = { method: "POST", headers: headers(credentials), body: JSON.stringify({ content_type: mimeType }) };
|
|
143
|
+
if (signal)
|
|
144
|
+
init.signal = signal;
|
|
145
|
+
return parse(await fetch(`${HIGGSFIELD_BASE}/files/generate-upload-url`, init), uploadSchema);
|
|
146
|
+
}
|
|
147
|
+
export async function higgsfieldUploadMedia(upload, bytes, mimeType, signal) {
|
|
148
|
+
if (bytes.length === 0)
|
|
149
|
+
throw new Error("Higgsfield upload must not be empty");
|
|
150
|
+
const init = { method: "PUT", headers: { "Content-Type": mimeType, ...upload.headers }, body: new Uint8Array(bytes) };
|
|
151
|
+
if (signal)
|
|
152
|
+
init.signal = signal;
|
|
153
|
+
const response = await safeFetch(upload.upload_url, init);
|
|
154
|
+
if (!response.ok)
|
|
155
|
+
throw new Error(`Higgsfield upload failed: HTTP ${response.status}`);
|
|
156
|
+
return upload.public_url;
|
|
157
|
+
}
|
|
158
|
+
export function higgsfieldOutputUrls(result) {
|
|
159
|
+
const url = (value) => typeof value === "string" ? value : value.url;
|
|
160
|
+
const urls = [
|
|
161
|
+
...(result.images ?? []).map(url),
|
|
162
|
+
...(result.video ? [url(result.video)] : []),
|
|
163
|
+
...(result.audio ? [url(result.audio)] : []),
|
|
164
|
+
...(result.audios ?? []).map(url),
|
|
165
|
+
...(result.outputs ?? []).map(url),
|
|
166
|
+
...(result.output ? [url(result.output)] : []),
|
|
167
|
+
...(result.zip ? [url(result.zip)] : []),
|
|
168
|
+
...(result.mov ? [url(result.mov)] : []),
|
|
169
|
+
...(result.jsx ? [url(result.jsx)] : []),
|
|
170
|
+
...(result.fbx ? [url(result.fbx)] : []),
|
|
171
|
+
...(result.ply ? [url(result.ply)] : [])
|
|
172
|
+
];
|
|
173
|
+
return [...new Set(urls)];
|
|
174
|
+
}
|
|
175
|
+
export async function higgsfieldDownloadResult(url, signal) {
|
|
176
|
+
const init = signal ? { signal } : {};
|
|
177
|
+
const response = await fetchWithRetry(url, init, { fetchImpl: (input, requestInit) => safeFetch(String(input), requestInit) });
|
|
178
|
+
if (!response.ok)
|
|
179
|
+
throw new Error(`Higgsfield result download failed: HTTP ${response.status}`);
|
|
180
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=higgsfield-transport.js.map
|