@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent-memory.d.ts +118 -0
- package/dist/agent-memory.d.ts.map +1 -0
- package/dist/agent-memory.js +186 -0
- package/dist/agent-memory.js.map +1 -0
- package/dist/async-local-storage.d.ts +20 -0
- package/dist/async-local-storage.d.ts.map +1 -0
- package/dist/async-local-storage.js +28 -0
- package/dist/async-local-storage.js.map +1 -0
- package/dist/blender-executor.d.ts +93 -0
- package/dist/blender-executor.d.ts.map +1 -0
- package/dist/blender-executor.js +294 -0
- package/dist/blender-executor.js.map +1 -0
- package/dist/comfy-executor.d.ts +23 -1
- package/dist/comfy-executor.d.ts.map +1 -1
- package/dist/comfy-executor.js +234 -55
- package/dist/comfy-executor.js.map +1 -1
- package/dist/context-packer.d.ts +1 -1
- package/dist/context-packer.d.ts.map +1 -1
- package/dist/context-packer.js +23 -25
- package/dist/context-packer.js.map +1 -1
- package/dist/context.d.ts +954 -127
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2424 -513
- package/dist/context.js.map +1 -1
- package/dist/cost-reconciler.d.ts +32 -0
- package/dist/cost-reconciler.d.ts.map +1 -0
- package/dist/cost-reconciler.js +21 -0
- package/dist/cost-reconciler.js.map +1 -0
- package/dist/entities.d.ts +33 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +43 -0
- package/dist/entities.js.map +1 -0
- package/dist/external-media-fetch.d.ts +29 -0
- package/dist/external-media-fetch.d.ts.map +1 -0
- package/dist/external-media-fetch.js +38 -0
- package/dist/external-media-fetch.js.map +1 -0
- package/dist/generation-receipt.d.ts +86 -0
- package/dist/generation-receipt.d.ts.map +1 -0
- package/dist/generation-receipt.js +137 -0
- package/dist/generation-receipt.js.map +1 -0
- package/dist/generation-registry.d.ts +67 -0
- package/dist/generation-registry.d.ts.map +1 -0
- package/dist/generation-registry.js +126 -0
- package/dist/generation-registry.js.map +1 -0
- package/dist/google/client.d.ts +196 -0
- package/dist/google/client.d.ts.map +1 -0
- package/dist/google/client.js +396 -0
- package/dist/google/client.js.map +1 -0
- package/dist/google/index.d.ts +3 -0
- package/dist/google/index.d.ts.map +1 -0
- package/dist/google/index.js +3 -0
- package/dist/google/index.js.map +1 -0
- package/dist/google/token.d.ts +15 -0
- package/dist/google/token.d.ts.map +1 -0
- package/dist/google/token.js +24 -0
- package/dist/google/token.js.map +1 -0
- package/dist/host-binaries.d.ts +106 -0
- package/dist/host-binaries.d.ts.map +1 -0
- package/dist/host-binaries.js +344 -0
- package/dist/host-binaries.js.map +1 -0
- package/dist/image-codec.d.ts +74 -0
- package/dist/image-codec.d.ts.map +1 -0
- package/dist/image-codec.js +273 -0
- package/dist/image-codec.js.map +1 -0
- package/dist/index.d.ts +56 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -4
- package/dist/index.js.map +1 -1
- package/dist/invocation-account.d.ts +43 -0
- package/dist/invocation-account.d.ts.map +1 -0
- package/dist/invocation-account.js +60 -0
- package/dist/invocation-account.js.map +1 -0
- package/dist/media-ref-bytes.d.ts +19 -0
- package/dist/media-ref-bytes.d.ts.map +1 -0
- package/dist/media-ref-bytes.js +181 -0
- package/dist/media-ref-bytes.js.map +1 -0
- package/dist/node-executor.d.ts +113 -2
- package/dist/node-executor.d.ts.map +1 -1
- package/dist/permission-gate.d.ts +152 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +87 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/prefixed-storage-adapter.d.ts +33 -0
- package/dist/prefixed-storage-adapter.d.ts.map +1 -0
- package/dist/prefixed-storage-adapter.js +70 -0
- package/dist/prefixed-storage-adapter.js.map +1 -0
- package/dist/prompt-asset-refs.d.ts +222 -0
- package/dist/prompt-asset-refs.d.ts.map +1 -0
- package/dist/prompt-asset-refs.js +751 -0
- package/dist/prompt-asset-refs.js.map +1 -0
- package/dist/provider-cache.d.ts +3 -0
- package/dist/provider-cache.d.ts.map +1 -0
- package/dist/provider-cache.js +8 -0
- package/dist/provider-cache.js.map +1 -0
- package/dist/providers/aki-provider.d.ts +33 -10
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +84 -77
- package/dist/providers/aki-provider.js.map +1 -1
- package/dist/providers/alibaba-provider.d.ts +39 -0
- package/dist/providers/alibaba-provider.d.ts.map +1 -0
- package/dist/providers/alibaba-provider.js +86 -0
- package/dist/providers/alibaba-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +52 -3
- package/dist/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/providers/anthropic-provider.js +1020 -338
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/atlascloud-provider.d.ts +101 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -0
- package/dist/providers/atlascloud-provider.js +1009 -0
- package/dist/providers/atlascloud-provider.js.map +1 -0
- package/dist/providers/atlascloud-transport.d.ts +100 -0
- package/dist/providers/atlascloud-transport.d.ts.map +1 -0
- package/dist/providers/atlascloud-transport.js +364 -0
- package/dist/providers/atlascloud-transport.js.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.js +104 -0
- package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
- package/dist/providers/audio-mime.d.ts +11 -0
- package/dist/providers/audio-mime.d.ts.map +1 -0
- package/dist/providers/audio-mime.js +46 -0
- package/dist/providers/audio-mime.js.map +1 -0
- package/dist/providers/base-provider.d.ts +481 -24
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +1259 -42
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/cassette-provider.d.ts +217 -0
- package/dist/providers/cassette-provider.d.ts.map +1 -0
- package/dist/providers/cassette-provider.js +502 -0
- package/dist/providers/cassette-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +6 -12
- package/dist/providers/cerebras-provider.d.ts.map +1 -1
- package/dist/providers/cerebras-provider.js +8 -33
- package/dist/providers/cerebras-provider.js.map +1 -1
- package/dist/providers/claude-agent-provider.d.ts +131 -68
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +1095 -515
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +82 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +492 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +5 -2
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +9 -2
- package/dist/providers/cohere-provider.js.map +1 -1
- package/dist/providers/comfy-cloud-provider.d.ts +30 -0
- package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
- package/dist/providers/comfy-cloud-provider.js +42 -0
- package/dist/providers/comfy-cloud-provider.js.map +1 -0
- package/dist/providers/content-filter.d.ts +46 -0
- package/dist/providers/content-filter.d.ts.map +1 -0
- package/dist/providers/content-filter.js +92 -0
- package/dist/providers/content-filter.js.map +1 -0
- package/dist/providers/context-exceeded.d.ts +37 -0
- package/dist/providers/context-exceeded.d.ts.map +1 -0
- package/dist/providers/context-exceeded.js +114 -0
- package/dist/providers/context-exceeded.js.map +1 -0
- package/dist/providers/context-window.d.ts +44 -0
- package/dist/providers/context-window.d.ts.map +1 -0
- package/dist/providers/context-window.js +145 -0
- package/dist/providers/context-window.js.map +1 -0
- package/dist/providers/contract/index.d.ts +4 -0
- package/dist/providers/contract/index.d.ts.map +1 -0
- package/dist/providers/contract/index.js +4 -0
- package/dist/providers/contract/index.js.map +1 -0
- package/dist/providers/contract/probe-manifest.d.ts +75 -0
- package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
- package/dist/providers/contract/probe-manifest.js +379 -0
- package/dist/providers/contract/probe-manifest.js.map +1 -0
- package/dist/providers/contract/probe-runner.d.ts +57 -0
- package/dist/providers/contract/probe-runner.d.ts.map +1 -0
- package/dist/providers/contract/probe-runner.js +180 -0
- package/dist/providers/contract/probe-runner.js.map +1 -0
- package/dist/providers/contract/redact.d.ts +29 -0
- package/dist/providers/contract/redact.d.ts.map +1 -0
- package/dist/providers/contract/redact.js +113 -0
- package/dist/providers/contract/redact.js.map +1 -0
- package/dist/providers/core-tools.d.ts +74 -0
- package/dist/providers/core-tools.d.ts.map +1 -0
- package/dist/providers/core-tools.js +127 -0
- package/dist/providers/core-tools.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +69 -50
- package/dist/providers/cost-calculator.d.ts.map +1 -1
- package/dist/providers/cost-calculator.js +207 -397
- package/dist/providers/cost-calculator.js.map +1 -1
- package/dist/providers/credential-check.d.ts +45 -0
- package/dist/providers/credential-check.d.ts.map +1 -0
- package/dist/providers/credential-check.js +159 -0
- package/dist/providers/credential-check.js.map +1 -0
- package/dist/providers/custom-model-kinds.d.ts +33 -0
- package/dist/providers/custom-model-kinds.d.ts.map +1 -0
- package/dist/providers/custom-model-kinds.js +96 -0
- package/dist/providers/custom-model-kinds.js.map +1 -0
- package/dist/providers/custom-openai-provider.d.ts +81 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -0
- package/dist/providers/custom-openai-provider.js +182 -0
- package/dist/providers/custom-openai-provider.js.map +1 -0
- package/dist/providers/custom-provider-registry.d.ts +19 -0
- package/dist/providers/custom-provider-registry.d.ts.map +1 -0
- package/dist/providers/custom-provider-registry.js +52 -0
- package/dist/providers/custom-provider-registry.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +8 -14
- package/dist/providers/deepseek-provider.d.ts.map +1 -1
- package/dist/providers/deepseek-provider.js +6 -35
- package/dist/providers/deepseek-provider.js.map +1 -1
- package/dist/providers/defaults.d.ts +12 -0
- package/dist/providers/defaults.d.ts.map +1 -0
- package/dist/providers/defaults.js +12 -0
- package/dist/providers/defaults.js.map +1 -0
- package/dist/providers/elevenlabs-provider.d.ts +49 -0
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
- package/dist/providers/elevenlabs-provider.js +142 -0
- package/dist/providers/elevenlabs-provider.js.map +1 -0
- package/dist/providers/entity-references.d.ts +31 -0
- package/dist/providers/entity-references.d.ts.map +1 -0
- package/dist/providers/entity-references.js +113 -0
- package/dist/providers/entity-references.js.map +1 -0
- package/dist/providers/evolink-provider.d.ts +38 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -0
- package/dist/providers/evolink-provider.js +304 -0
- package/dist/providers/evolink-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +72 -1
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +203 -1
- package/dist/providers/fake-provider.js.map +1 -1
- package/dist/providers/fal-generations.d.ts +106 -0
- package/dist/providers/fal-generations.d.ts.map +1 -0
- package/dist/providers/fal-generations.js +286 -0
- package/dist/providers/fal-generations.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +171 -7
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +1369 -64
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/fal-queue.d.ts +47 -0
- package/dist/providers/fal-queue.d.ts.map +1 -0
- package/dist/providers/fal-queue.js +231 -0
- package/dist/providers/fal-queue.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +148 -8
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +1500 -316
- package/dist/providers/gemini-provider.js.map +1 -1
- package/dist/providers/gmi-provider.d.ts +21 -0
- package/dist/providers/gmi-provider.d.ts.map +1 -0
- package/dist/providers/gmi-provider.js +34 -0
- package/dist/providers/gmi-provider.js.map +1 -0
- package/dist/providers/gpt-image-size.d.ts +3 -0
- package/dist/providers/gpt-image-size.d.ts.map +1 -0
- package/dist/providers/gpt-image-size.js +37 -0
- package/dist/providers/gpt-image-size.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +9 -12
- package/dist/providers/groq-provider.d.ts.map +1 -1
- package/dist/providers/groq-provider.js +19 -33
- package/dist/providers/groq-provider.js.map +1 -1
- package/dist/providers/groq-request.d.ts +38 -0
- package/dist/providers/groq-request.d.ts.map +1 -0
- package/dist/providers/groq-request.js +138 -0
- package/dist/providers/groq-request.js.map +1 -0
- package/dist/providers/higgsfield-provider.d.ts +30 -0
- package/dist/providers/higgsfield-provider.d.ts.map +1 -0
- package/dist/providers/higgsfield-provider.js +131 -0
- package/dist/providers/higgsfield-provider.js.map +1 -0
- package/dist/providers/higgsfield-transport.d.ts +106 -0
- package/dist/providers/higgsfield-transport.d.ts.map +1 -0
- package/dist/providers/higgsfield-transport.js +182 -0
- package/dist/providers/higgsfield-transport.js.map +1 -0
- package/dist/providers/http-transport.d.ts +74 -0
- package/dist/providers/http-transport.d.ts.map +1 -0
- package/dist/providers/http-transport.js +152 -0
- package/dist/providers/http-transport.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +71 -3
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +230 -34
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/image-mime.d.ts +39 -0
- package/dist/providers/image-mime.d.ts.map +1 -0
- package/dist/providers/image-mime.js +111 -0
- package/dist/providers/image-mime.js.map +1 -0
- package/dist/providers/image-ref.d.ts +21 -0
- package/dist/providers/image-ref.d.ts.map +1 -0
- package/dist/providers/image-ref.js +44 -0
- package/dist/providers/image-ref.js.map +1 -0
- package/dist/providers/index.d.ts +84 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +239 -56
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +10 -2
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +16 -7
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +170 -9
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +1176 -228
- package/dist/providers/kie-provider.js.map +1 -1
- package/dist/providers/kie-webhook-registry.d.ts +28 -0
- package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
- package/dist/providers/kie-webhook-registry.js +91 -0
- package/dist/providers/kie-webhook-registry.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +21 -37
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +43 -354
- package/dist/providers/llama-provider.js.map +1 -1
- package/dist/providers/lmstudio-provider.d.ts +4 -7
- package/dist/providers/lmstudio-provider.d.ts.map +1 -1
- package/dist/providers/lmstudio-provider.js +24 -15
- package/dist/providers/lmstudio-provider.js.map +1 -1
- package/dist/providers/manifest-models.d.ts +341 -1
- package/dist/providers/manifest-models.d.ts.map +1 -1
- package/dist/providers/manifest-models.js +1106 -22
- package/dist/providers/manifest-models.js.map +1 -1
- package/dist/providers/media-mime.d.ts +14 -0
- package/dist/providers/media-mime.d.ts.map +1 -0
- package/dist/providers/media-mime.js +35 -0
- package/dist/providers/media-mime.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +14 -1
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +76 -46
- package/dist/providers/meshy-provider.js.map +1 -1
- package/dist/providers/meta-provider.d.ts +22 -0
- package/dist/providers/meta-provider.d.ts.map +1 -0
- package/dist/providers/meta-provider.js +54 -0
- package/dist/providers/meta-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +25 -18
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +211 -72
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +6 -12
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +10 -34
- package/dist/providers/mistral-provider.js.map +1 -1
- package/dist/providers/moonshot-provider.d.ts +11 -15
- package/dist/providers/moonshot-provider.d.ts.map +1 -1
- package/dist/providers/moonshot-provider.js +33 -23
- package/dist/providers/moonshot-provider.js.map +1 -1
- package/dist/providers/node-llama-cpp-provider.d.ts +98 -0
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
- package/dist/providers/node-llama-cpp-provider.js +479 -0
- package/dist/providers/node-llama-cpp-provider.js.map +1 -0
- package/dist/providers/nodetool-provider.d.ts +49 -0
- package/dist/providers/nodetool-provider.d.ts.map +1 -0
- package/dist/providers/nodetool-provider.js +224 -0
- package/dist/providers/nodetool-provider.js.map +1 -0
- package/dist/providers/oauth/browser-launcher.d.ts +23 -0
- package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
- package/dist/providers/oauth/browser-launcher.js +45 -0
- package/dist/providers/oauth/browser-launcher.js.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.js +133 -0
- package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
- package/dist/providers/oauth/claude-code-login.d.ts +124 -0
- package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-login.js +230 -0
- package/dist/providers/oauth/claude-code-login.js.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
- package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
- package/dist/providers/oauth/errors.d.ts +54 -0
- package/dist/providers/oauth/errors.d.ts.map +1 -0
- package/dist/providers/oauth/errors.js +79 -0
- package/dist/providers/oauth/errors.js.map +1 -0
- package/dist/providers/oauth/index.d.ts +105 -0
- package/dist/providers/oauth/index.d.ts.map +1 -0
- package/dist/providers/oauth/index.js +167 -0
- package/dist/providers/oauth/index.js.map +1 -0
- package/dist/providers/oauth/jwt-claims.d.ts +23 -0
- package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
- package/dist/providers/oauth/jwt-claims.js +67 -0
- package/dist/providers/oauth/jwt-claims.js.map +1 -0
- package/dist/providers/oauth/local-callback-server.d.ts +60 -0
- package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
- package/dist/providers/oauth/local-callback-server.js +148 -0
- package/dist/providers/oauth/local-callback-server.js.map +1 -0
- package/dist/providers/oauth/oauth-client.d.ts +55 -0
- package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/oauth-client.js +161 -0
- package/dist/providers/oauth/oauth-client.js.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.js +265 -0
- package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
- package/dist/providers/oauth/pkce-helper.d.ts +43 -0
- package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
- package/dist/providers/oauth/pkce-helper.js +57 -0
- package/dist/providers/oauth/pkce-helper.js.map +1 -0
- package/dist/providers/oauth/redaction.d.ts +22 -0
- package/dist/providers/oauth/redaction.d.ts.map +1 -0
- package/dist/providers/oauth/redaction.js +59 -0
- package/dist/providers/oauth/redaction.js.map +1 -0
- package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
- package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
- package/dist/providers/oauth/secure-credential-store.js +73 -0
- package/dist/providers/oauth/secure-credential-store.js.map +1 -0
- package/dist/providers/oauth/token-store.d.ts +53 -0
- package/dist/providers/oauth/token-store.d.ts.map +1 -0
- package/dist/providers/oauth/token-store.js +78 -0
- package/dist/providers/oauth/token-store.js.map +1 -0
- package/dist/providers/oauth/types.d.ts +64 -0
- package/dist/providers/oauth/types.d.ts.map +1 -0
- package/dist/providers/oauth/types.js +12 -0
- package/dist/providers/oauth/types.js.map +1 -0
- package/dist/providers/object-tracking.d.ts +47 -0
- package/dist/providers/object-tracking.d.ts.map +1 -0
- package/dist/providers/object-tracking.js +46 -0
- package/dist/providers/object-tracking.js.map +1 -0
- package/dist/providers/offline-model-index.d.ts +20 -0
- package/dist/providers/offline-model-index.d.ts.map +1 -0
- package/dist/providers/offline-model-index.js +112 -0
- package/dist/providers/offline-model-index.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +28 -1
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +193 -43
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/providers/openai-compat/client.d.ts +57 -0
- package/dist/providers/openai-compat/client.d.ts.map +1 -0
- package/dist/providers/openai-compat/client.js +157 -0
- package/dist/providers/openai-compat/client.js.map +1 -0
- package/dist/providers/openai-compat/decode.d.ts +36 -0
- package/dist/providers/openai-compat/decode.d.ts.map +1 -0
- package/dist/providers/openai-compat/decode.js +55 -0
- package/dist/providers/openai-compat/decode.js.map +1 -0
- package/dist/providers/openai-compat/errors.d.ts +54 -0
- package/dist/providers/openai-compat/errors.d.ts.map +1 -0
- package/dist/providers/openai-compat/errors.js +144 -0
- package/dist/providers/openai-compat/errors.js.map +1 -0
- package/dist/providers/openai-compat/index.d.ts +8 -0
- package/dist/providers/openai-compat/index.d.ts.map +1 -0
- package/dist/providers/openai-compat/index.js +5 -0
- package/dist/providers/openai-compat/index.js.map +1 -0
- package/dist/providers/openai-compat/sse.d.ts +14 -0
- package/dist/providers/openai-compat/sse.d.ts.map +1 -0
- package/dist/providers/openai-compat/sse.js +69 -0
- package/dist/providers/openai-compat/sse.js.map +1 -0
- package/dist/providers/openai-compat/types.d.ts +75 -0
- package/dist/providers/openai-compat/types.d.ts.map +1 -0
- package/dist/providers/openai-compat/types.js +9 -0
- package/dist/providers/openai-compat/types.js.map +1 -0
- package/dist/providers/openai-compat-provider.d.ts +90 -0
- package/dist/providers/openai-compat-provider.d.ts.map +1 -0
- package/dist/providers/openai-compat-provider.js +282 -0
- package/dist/providers/openai-compat-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +89 -26
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +990 -105
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +6 -12
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +24 -53
- package/dist/providers/openrouter-provider.js.map +1 -1
- package/dist/providers/provider-call-failure.d.ts +39 -0
- package/dist/providers/provider-call-failure.d.ts.map +1 -0
- package/dist/providers/provider-call-failure.js +132 -0
- package/dist/providers/provider-call-failure.js.map +1 -0
- package/dist/providers/provider-error.d.ts +59 -0
- package/dist/providers/provider-error.d.ts.map +1 -0
- package/dist/providers/provider-error.js +165 -0
- package/dist/providers/provider-error.js.map +1 -0
- package/dist/providers/provider-generations.d.ts +99 -0
- package/dist/providers/provider-generations.d.ts.map +1 -0
- package/dist/providers/provider-generations.js +71 -0
- package/dist/providers/provider-generations.js.map +1 -0
- package/dist/providers/provider-queue.d.ts +62 -0
- package/dist/providers/provider-queue.d.ts.map +1 -0
- package/dist/providers/provider-queue.js +28 -0
- package/dist/providers/provider-queue.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +33 -14
- package/dist/providers/provider-registry.d.ts.map +1 -1
- package/dist/providers/provider-registry.js +85 -68
- package/dist/providers/provider-registry.js.map +1 -1
- package/dist/providers/provider-request-log.d.ts +53 -0
- package/dist/providers/provider-request-log.d.ts.map +1 -0
- package/dist/providers/provider-request-log.js +157 -0
- package/dist/providers/provider-request-log.js.map +1 -0
- package/dist/providers/provider-session.d.ts +3 -0
- package/dist/providers/provider-session.d.ts.map +1 -0
- package/dist/providers/provider-session.js +10 -0
- package/dist/providers/provider-session.js.map +1 -0
- package/dist/providers/provider-transport.d.ts +11 -0
- package/dist/providers/provider-transport.d.ts.map +1 -0
- package/dist/providers/provider-transport.js +11 -0
- package/dist/providers/provider-transport.js.map +1 -0
- package/dist/providers/python-provider.d.ts +20 -12
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +185 -25
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +89 -7
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +801 -65
- package/dist/providers/replicate-provider.js.map +1 -1
- package/dist/providers/replicate-retry.d.ts +30 -0
- package/dist/providers/replicate-retry.d.ts.map +1 -0
- package/dist/providers/replicate-retry.js +97 -0
- package/dist/providers/replicate-retry.js.map +1 -0
- package/dist/providers/responses-api.d.ts +27 -0
- package/dist/providers/responses-api.d.ts.map +1 -0
- package/dist/providers/responses-api.js +297 -0
- package/dist/providers/responses-api.js.map +1 -0
- package/dist/providers/reve-provider.d.ts +45 -0
- package/dist/providers/reve-provider.d.ts.map +1 -0
- package/dist/providers/reve-provider.js +159 -0
- package/dist/providers/reve-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +23 -1
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +89 -51
- package/dist/providers/rodin-provider.js.map +1 -1
- package/dist/providers/safe-url.d.ts +70 -0
- package/dist/providers/safe-url.d.ts.map +1 -0
- package/dist/providers/safe-url.js +277 -0
- package/dist/providers/safe-url.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +9 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -1
- package/dist/providers/scripted-provider.js +86 -10
- package/dist/providers/scripted-provider.js.map +1 -1
- package/dist/providers/structured-output.d.ts +42 -0
- package/dist/providers/structured-output.d.ts.map +1 -0
- package/dist/providers/structured-output.js +83 -0
- package/dist/providers/structured-output.js.map +1 -0
- package/dist/providers/together-provider.d.ts +19 -16
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +103 -225
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +44 -0
- package/dist/providers/topaz-provider.d.ts.map +1 -0
- package/dist/providers/topaz-provider.js +239 -0
- package/dist/providers/topaz-provider.js.map +1 -0
- package/dist/providers/types.d.ts +603 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +81 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/useapi-provider.d.ts +27 -0
- package/dist/providers/useapi-provider.d.ts.map +1 -0
- package/dist/providers/useapi-provider.js +266 -0
- package/dist/providers/useapi-provider.js.map +1 -0
- package/dist/providers/video-duration.d.ts +6 -0
- package/dist/providers/video-duration.d.ts.map +1 -0
- package/dist/providers/video-duration.js +63 -0
- package/dist/providers/video-duration.js.map +1 -0
- package/dist/providers/video-frame-fallback.d.ts +39 -0
- package/dist/providers/video-frame-fallback.d.ts.map +1 -0
- package/dist/providers/video-frame-fallback.js +155 -0
- package/dist/providers/video-frame-fallback.js.map +1 -0
- package/dist/providers/video-frames.d.ts +61 -0
- package/dist/providers/video-frames.d.ts.map +1 -0
- package/dist/providers/video-frames.js +208 -0
- package/dist/providers/video-frames.js.map +1 -0
- package/dist/providers/video-mime.d.ts +14 -0
- package/dist/providers/video-mime.d.ts.map +1 -0
- package/dist/providers/video-mime.js +44 -0
- package/dist/providers/video-mime.js.map +1 -0
- package/dist/providers/video-to-audio.d.ts +34 -0
- package/dist/providers/video-to-audio.d.ts.map +1 -0
- package/dist/providers/video-to-audio.js +62 -0
- package/dist/providers/video-to-audio.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +22 -8
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +48 -23
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +10 -2
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +16 -7
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +54 -13
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +299 -22
- package/dist/providers/xai-provider.js.map +1 -1
- package/dist/python-bridge-base.d.ts +358 -0
- package/dist/python-bridge-base.d.ts.map +1 -0
- package/dist/python-bridge-base.js +1557 -0
- package/dist/python-bridge-base.js.map +1 -0
- package/dist/python-bridge-codec.d.ts +28 -0
- package/dist/python-bridge-codec.d.ts.map +1 -0
- package/dist/python-bridge-codec.js +39 -0
- package/dist/python-bridge-codec.js.map +1 -0
- package/dist/python-bridge-factory.d.ts +52 -0
- package/dist/python-bridge-factory.d.ts.map +1 -0
- package/dist/python-bridge-factory.js +69 -0
- package/dist/python-bridge-factory.js.map +1 -0
- package/dist/python-bridge-framing.d.ts +68 -0
- package/dist/python-bridge-framing.d.ts.map +1 -0
- package/dist/python-bridge-framing.js +91 -0
- package/dist/python-bridge-framing.js.map +1 -0
- package/dist/python-bridge-types.d.ts +545 -2
- package/dist/python-bridge-types.d.ts.map +1 -1
- package/dist/python-bridge-types.js +49 -1
- package/dist/python-bridge-types.js.map +1 -1
- package/dist/python-graph-resolver.d.ts +57 -0
- package/dist/python-graph-resolver.d.ts.map +1 -0
- package/dist/python-graph-resolver.js +79 -0
- package/dist/python-graph-resolver.js.map +1 -0
- package/dist/python-node-executor.d.ts +36 -4
- package/dist/python-node-executor.d.ts.map +1 -1
- package/dist/python-node-executor.js +177 -86
- package/dist/python-node-executor.js.map +1 -1
- package/dist/python-stdio-bridge.d.ts +18 -37
- package/dist/python-stdio-bridge.d.ts.map +1 -1
- package/dist/python-stdio-bridge.js +148 -475
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/python-websocket-bridge.d.ts +140 -0
- package/dist/python-websocket-bridge.d.ts.map +1 -0
- package/dist/python-websocket-bridge.js +561 -0
- package/dist/python-websocket-bridge.js.map +1 -0
- package/dist/python-worker-stderr.d.ts +4 -0
- package/dist/python-worker-stderr.d.ts.map +1 -0
- package/dist/python-worker-stderr.js +24 -0
- package/dist/python-worker-stderr.js.map +1 -0
- package/dist/recommended-models.d.ts +2 -2
- package/dist/recommended-models.d.ts.map +1 -1
- package/dist/recommended-models.js +24 -4
- package/dist/recommended-models.js.map +1 -1
- package/dist/recoverable-node-error.d.ts +31 -0
- package/dist/recoverable-node-error.d.ts.map +1 -0
- package/dist/recoverable-node-error.js +37 -0
- package/dist/recoverable-node-error.js.map +1 -0
- package/dist/redact-params.d.ts +13 -0
- package/dist/redact-params.d.ts.map +1 -0
- package/dist/redact-params.js +57 -0
- package/dist/redact-params.js.map +1 -0
- package/dist/sandbox-module-catalog.d.ts +43 -0
- package/dist/sandbox-module-catalog.d.ts.map +1 -0
- package/dist/sandbox-module-catalog.js +25 -0
- package/dist/sandbox-module-catalog.js.map +1 -0
- package/dist/storage-workspace.d.ts +59 -0
- package/dist/storage-workspace.d.ts.map +1 -0
- package/dist/storage-workspace.js +426 -0
- package/dist/storage-workspace.js.map +1 -0
- package/dist/swappable-python-bridge.d.ts +83 -0
- package/dist/swappable-python-bridge.d.ts.map +1 -0
- package/dist/swappable-python-bridge.js +246 -0
- package/dist/swappable-python-bridge.js.map +1 -0
- package/dist/telemetry.d.ts +7 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +23 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/testing.d.ts +81 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +130 -0
- package/dist/testing.js.map +1 -0
- package/dist/token-counter.d.ts +30 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +156 -0
- package/dist/token-counter.js.map +1 -0
- package/dist/trace-exporters.d.ts +10 -0
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +59 -20
- package/dist/trace-exporters.js.map +1 -1
- package/dist/tracing-helpers.d.ts +45 -4
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +62 -19
- package/dist/tracing-helpers.js.map +1 -1
- package/dist/turn-budget.d.ts +278 -0
- package/dist/turn-budget.d.ts.map +1 -0
- package/dist/turn-budget.js +365 -0
- package/dist/turn-budget.js.map +1 -0
- package/dist/variable-channel.d.ts +48 -0
- package/dist/variable-channel.d.ts.map +1 -0
- package/dist/variable-channel.js +110 -0
- package/dist/variable-channel.js.map +1 -0
- package/dist/workspace.d.ts +119 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +112 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +107 -19
|
@@ -1,11 +1,104 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getNodeBuiltinSync } from "@nodetool-ai/config";
|
|
2
2
|
import { BaseProvider } from "./base-provider.js";
|
|
3
|
+
const _nodeCrypto = getNodeBuiltinSync("node:crypto");
|
|
4
|
+
const randomUUID = () => {
|
|
5
|
+
if (_nodeCrypto?.randomUUID)
|
|
6
|
+
return _nodeCrypto.randomUUID();
|
|
7
|
+
const g = globalThis;
|
|
8
|
+
if (g.crypto?.randomUUID)
|
|
9
|
+
return g.crypto.randomUUID();
|
|
10
|
+
return `id_${Date.now().toString(36)}_${Math.random()
|
|
11
|
+
.toString(36)
|
|
12
|
+
.slice(2, 10)}`;
|
|
13
|
+
};
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Tiny but valid asset bytes for fake media generators.
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Minimal 1×1 transparent PNG. Sufficient for any consumer that just sniffs
|
|
19
|
+
* the file signature or runs the bytes through `sharp` / Pillow / etc.
|
|
20
|
+
*/
|
|
21
|
+
const TINY_PNG = new Uint8Array([
|
|
22
|
+
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
|
|
23
|
+
0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
|
24
|
+
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
|
|
25
|
+
0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x15, 0xc4,
|
|
26
|
+
0x89, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x44, 0x41,
|
|
27
|
+
0x54, 0x78, 0x9c, 0x63, 0x00, 0x01, 0x00, 0x00,
|
|
28
|
+
0x05, 0x00, 0x01, 0x0d, 0x0a, 0x2d, 0xb4, 0x00,
|
|
29
|
+
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
|
30
|
+
0x42, 0x60, 0x82
|
|
31
|
+
]);
|
|
32
|
+
/**
|
|
33
|
+
* Minimal MP4 `ftyp` box marking the file as `isom`/`mp4`. Consumers that
|
|
34
|
+
* just sniff the container (ffprobe header check, Sharp's video detector)
|
|
35
|
+
* are satisfied; nothing decodes it.
|
|
36
|
+
*/
|
|
37
|
+
const TINY_MP4 = new Uint8Array([
|
|
38
|
+
0x00, 0x00, 0x00, 0x18, 0x66, 0x74, 0x79, 0x70,
|
|
39
|
+
0x69, 0x73, 0x6f, 0x6d, 0x00, 0x00, 0x00, 0x00,
|
|
40
|
+
0x69, 0x73, 0x6f, 0x6d, 0x6d, 0x70, 0x34, 0x32
|
|
41
|
+
]);
|
|
42
|
+
/**
|
|
43
|
+
* Tiny silent 24 kHz mono WAV (10 ms of zeros). Mirrors what the streaming
|
|
44
|
+
* TTS path produces after `encodePcm16Wav` wraps the PCM samples.
|
|
45
|
+
*/
|
|
46
|
+
function tinyWav() {
|
|
47
|
+
const sampleRate = 24000;
|
|
48
|
+
const numSamples = 240; // 10 ms
|
|
49
|
+
const dataSize = numSamples * 2;
|
|
50
|
+
const buf = new Uint8Array(44 + dataSize);
|
|
51
|
+
const view = new DataView(buf.buffer);
|
|
52
|
+
// RIFF header
|
|
53
|
+
buf.set([0x52, 0x49, 0x46, 0x46], 0); // "RIFF"
|
|
54
|
+
view.setUint32(4, 36 + dataSize, true);
|
|
55
|
+
buf.set([0x57, 0x41, 0x56, 0x45], 8); // "WAVE"
|
|
56
|
+
// fmt chunk
|
|
57
|
+
buf.set([0x66, 0x6d, 0x74, 0x20], 12); // "fmt "
|
|
58
|
+
view.setUint32(16, 16, true);
|
|
59
|
+
view.setUint16(20, 1, true); // PCM
|
|
60
|
+
view.setUint16(22, 1, true); // channels
|
|
61
|
+
view.setUint32(24, sampleRate, true);
|
|
62
|
+
view.setUint32(28, sampleRate * 2, true);
|
|
63
|
+
view.setUint16(32, 2, true);
|
|
64
|
+
view.setUint16(34, 16, true);
|
|
65
|
+
// data chunk
|
|
66
|
+
buf.set([0x64, 0x61, 0x74, 0x61], 36); // "data"
|
|
67
|
+
view.setUint32(40, dataSize, true);
|
|
68
|
+
return buf;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Minimal GLB (binary glTF) header — version 2, contentLength 12. Real glTF
|
|
72
|
+
* loaders fail on this, but consumers that just route bytes through never
|
|
73
|
+
* notice.
|
|
74
|
+
*/
|
|
75
|
+
const TINY_GLB = new Uint8Array([
|
|
76
|
+
0x67, 0x6c, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00,
|
|
77
|
+
0x0c, 0x00, 0x00, 0x00
|
|
78
|
+
]);
|
|
79
|
+
function defaultToolArgs(toolName, index) {
|
|
80
|
+
switch (toolName) {
|
|
81
|
+
case "add_item":
|
|
82
|
+
return { item: `fake item ${index + 1}` };
|
|
83
|
+
case "add_row":
|
|
84
|
+
return { row: { id: index + 1, value: `fake row ${index + 1}` } };
|
|
85
|
+
case "emit":
|
|
86
|
+
case "emit_text":
|
|
87
|
+
return { text: `fake text ${index + 1}` };
|
|
88
|
+
default:
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
3
92
|
export class FakeProvider extends BaseProvider {
|
|
4
93
|
textResponse;
|
|
5
94
|
toolCalls;
|
|
6
95
|
shouldStream;
|
|
7
96
|
chunkSize;
|
|
8
97
|
customResponseFn;
|
|
98
|
+
toolCallsPerTool;
|
|
99
|
+
toolArgsBuilder;
|
|
100
|
+
/** Number of LLM invocations that have already auto-emitted tool calls. */
|
|
101
|
+
_toolBurstsEmitted = 0;
|
|
9
102
|
callCount = 0;
|
|
10
103
|
lastMessages = null;
|
|
11
104
|
lastModel = null;
|
|
@@ -18,6 +111,29 @@ export class FakeProvider extends BaseProvider {
|
|
|
18
111
|
this.shouldStream = options.shouldStream ?? true;
|
|
19
112
|
this.chunkSize = options.chunkSize ?? 10;
|
|
20
113
|
this.customResponseFn = options.customResponseFn ?? null;
|
|
114
|
+
this.toolCallsPerTool = options.toolCallsPerTool ?? 3;
|
|
115
|
+
this.toolArgsBuilder = options.toolArgsBuilder ?? defaultToolArgs;
|
|
116
|
+
}
|
|
117
|
+
autoToolCalls(tools) {
|
|
118
|
+
if (this.toolCallsPerTool <= 0 ||
|
|
119
|
+
tools.length === 0 ||
|
|
120
|
+
this._toolBurstsEmitted > 0 ||
|
|
121
|
+
this.toolCalls.length > 0 ||
|
|
122
|
+
this.customResponseFn !== null) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const calls = [];
|
|
126
|
+
for (const t of tools) {
|
|
127
|
+
for (let i = 0; i < this.toolCallsPerTool; i++) {
|
|
128
|
+
calls.push({
|
|
129
|
+
id: randomUUID(),
|
|
130
|
+
name: t.name,
|
|
131
|
+
args: this.toolArgsBuilder(t.name, i)
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
this._toolBurstsEmitted += 1;
|
|
136
|
+
return calls;
|
|
21
137
|
}
|
|
22
138
|
getResponse(messages, model) {
|
|
23
139
|
if (this.customResponseFn) {
|
|
@@ -43,6 +159,10 @@ export class FakeProvider extends BaseProvider {
|
|
|
43
159
|
this.lastMessages = args.messages;
|
|
44
160
|
this.lastModel = args.model;
|
|
45
161
|
this.lastTools = args.tools ?? [];
|
|
162
|
+
const auto = this.autoToolCalls(args.tools ?? []);
|
|
163
|
+
if (auto) {
|
|
164
|
+
return { role: "assistant", content: [], toolCalls: auto };
|
|
165
|
+
}
|
|
46
166
|
const response = this.getResponse(args.messages, args.model);
|
|
47
167
|
if (Array.isArray(response)) {
|
|
48
168
|
return { role: "assistant", content: [], toolCalls: response };
|
|
@@ -55,6 +175,12 @@ export class FakeProvider extends BaseProvider {
|
|
|
55
175
|
this.lastMessages = args.messages;
|
|
56
176
|
this.lastModel = args.model;
|
|
57
177
|
this.lastTools = args.tools ?? [];
|
|
178
|
+
const auto = this.autoToolCalls(args.tools ?? []);
|
|
179
|
+
if (auto) {
|
|
180
|
+
for (const call of auto)
|
|
181
|
+
yield call;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
58
184
|
const response = this.getResponse(args.messages, args.model);
|
|
59
185
|
if (Array.isArray(response)) {
|
|
60
186
|
for (const toolCall of response) {
|
|
@@ -83,6 +209,82 @@ export class FakeProvider extends BaseProvider {
|
|
|
83
209
|
};
|
|
84
210
|
}
|
|
85
211
|
}
|
|
212
|
+
// -------------------------------------------------------------------------
|
|
213
|
+
// Media-generation capabilities
|
|
214
|
+
//
|
|
215
|
+
// Each method returns the smallest possible "valid-enough" payload for the
|
|
216
|
+
// requested format so downstream nodes can mime-sniff / route the bytes
|
|
217
|
+
// without performing a real decode. The point is to satisfy the contract
|
|
218
|
+
// of the surrounding workflow node, not to produce media a user can play.
|
|
219
|
+
// -------------------------------------------------------------------------
|
|
220
|
+
async textToImage(_params) {
|
|
221
|
+
this.callCount++;
|
|
222
|
+
return new Uint8Array(TINY_PNG);
|
|
223
|
+
}
|
|
224
|
+
async imageToImage(_images, _params) {
|
|
225
|
+
this.callCount++;
|
|
226
|
+
return new Uint8Array(TINY_PNG);
|
|
227
|
+
}
|
|
228
|
+
async upscaleImage(_image, _params) {
|
|
229
|
+
this.callCount++;
|
|
230
|
+
return new Uint8Array(TINY_PNG);
|
|
231
|
+
}
|
|
232
|
+
async removeBackground(_image, _params) {
|
|
233
|
+
this.callCount++;
|
|
234
|
+
return new Uint8Array(TINY_PNG);
|
|
235
|
+
}
|
|
236
|
+
async relightImage(_image, _params) {
|
|
237
|
+
this.callCount++;
|
|
238
|
+
return new Uint8Array(TINY_PNG);
|
|
239
|
+
}
|
|
240
|
+
async vectorizeImage(_image, _params) {
|
|
241
|
+
this.callCount++;
|
|
242
|
+
// Bare-minimum SVG; consumers either route bytes or parse XML.
|
|
243
|
+
return new TextEncoder().encode('<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"></svg>');
|
|
244
|
+
}
|
|
245
|
+
async textToVideo(_params) {
|
|
246
|
+
this.callCount++;
|
|
247
|
+
return new Uint8Array(TINY_MP4);
|
|
248
|
+
}
|
|
249
|
+
async imageToVideo(_image, _params) {
|
|
250
|
+
this.callCount++;
|
|
251
|
+
return new Uint8Array(TINY_MP4);
|
|
252
|
+
}
|
|
253
|
+
async videoToVideo(_video, _params) {
|
|
254
|
+
this.callCount++;
|
|
255
|
+
return new Uint8Array(TINY_MP4);
|
|
256
|
+
}
|
|
257
|
+
async lipSync(_video, _params) {
|
|
258
|
+
this.callCount++;
|
|
259
|
+
return new Uint8Array(TINY_MP4);
|
|
260
|
+
}
|
|
261
|
+
async *textToSpeech(_args) {
|
|
262
|
+
this.callCount++;
|
|
263
|
+
yield { samples: new Int16Array(240), sampleRate: 24000 };
|
|
264
|
+
}
|
|
265
|
+
async textToSpeechEncoded(_args) {
|
|
266
|
+
this.callCount++;
|
|
267
|
+
return { data: tinyWav(), mimeType: "audio/wav" };
|
|
268
|
+
}
|
|
269
|
+
async automaticSpeechRecognition(_args) {
|
|
270
|
+
this.callCount++;
|
|
271
|
+
return { text: "fake transcript", chunks: [] };
|
|
272
|
+
}
|
|
273
|
+
async generateEmbedding(args) {
|
|
274
|
+
this.callCount++;
|
|
275
|
+
const dims = args.dimensions ?? 8;
|
|
276
|
+
const items = Array.isArray(args.text) ? args.text : [args.text];
|
|
277
|
+
// Deterministic small vector per input for stable test snapshots.
|
|
278
|
+
return items.map((s, idx) => Array.from({ length: dims }, (_, d) => ((s.length + idx + d) % 7) / 10));
|
|
279
|
+
}
|
|
280
|
+
async textTo3D(_params) {
|
|
281
|
+
this.callCount++;
|
|
282
|
+
return new Uint8Array(TINY_GLB);
|
|
283
|
+
}
|
|
284
|
+
async imageTo3D(_image, _params) {
|
|
285
|
+
this.callCount++;
|
|
286
|
+
return new Uint8Array(TINY_GLB);
|
|
287
|
+
}
|
|
86
288
|
}
|
|
87
289
|
export function createFakeToolCall(name, args, callId) {
|
|
88
290
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake-provider.js","sourceRoot":"","sources":["../../src/providers/fake-provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fake-provider.js","sourceRoot":"","sources":["../../src/providers/fake-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FAL's request history, read through its Platform APIs.
|
|
3
|
+
*
|
|
4
|
+
* Two endpoints answer different halves of a generation, and this module is
|
|
5
|
+
* the one client for both (https://fal.ai/docs/api-reference/platform-apis):
|
|
6
|
+
*
|
|
7
|
+
* - `GET /v1/models/billing-events` — one record per *charge*: request id,
|
|
8
|
+
* endpoint, timestamp and the billed cost. Account-wide, so it is what a
|
|
9
|
+
* listing without an endpoint filter can use. A billing event says a call
|
|
10
|
+
* was charged, never how it ended, so those records carry
|
|
11
|
+
* `status: "unknown"` rather than an invented outcome.
|
|
12
|
+
* - `GET /v1/models/requests/by-endpoint` — one record per *request*: status
|
|
13
|
+
* code, timings, and with `expand=payloads` the input and output. It
|
|
14
|
+
* requires at least one endpoint id, so it serves a listing filtered by
|
|
15
|
+
* model and the second half of a single lookup.
|
|
16
|
+
*
|
|
17
|
+
* Both need an admin-scoped key; NodeTool reuses `FAL_API_KEY` and a key
|
|
18
|
+
* without that scope 401/403s. The caller gets that as a thrown error on a
|
|
19
|
+
* direct read, and as a `note` with null costs when only the cost half fails.
|
|
20
|
+
*/
|
|
21
|
+
import { type ProviderGeneration, type ProviderGenerationLookup, type ProviderGenerationPage, type ProviderGenerationQuery, type ProviderGenerationStatus } from "./provider-generations.js";
|
|
22
|
+
/** One file in a FAL result payload. */
|
|
23
|
+
export interface FalFile {
|
|
24
|
+
url?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The output fields FAL models publish media under. A model that names its
|
|
28
|
+
* output something else still yields a record — with no `output_urls`, which
|
|
29
|
+
* is the honest answer for a payload this does not recognize.
|
|
30
|
+
*/
|
|
31
|
+
export interface FalJsonOutput {
|
|
32
|
+
image?: FalFile;
|
|
33
|
+
images?: FalFile[];
|
|
34
|
+
video?: FalFile;
|
|
35
|
+
videos?: FalFile[];
|
|
36
|
+
audio?: FalFile;
|
|
37
|
+
audio_file?: FalFile;
|
|
38
|
+
model_mesh?: FalFile;
|
|
39
|
+
}
|
|
40
|
+
export interface FalBillingEvent {
|
|
41
|
+
request_id?: string;
|
|
42
|
+
endpoint_id?: string;
|
|
43
|
+
timestamp?: string;
|
|
44
|
+
output_units?: number | null;
|
|
45
|
+
unit_price?: number | null;
|
|
46
|
+
cost_total?: number | null;
|
|
47
|
+
cost_estimate_nano_usd?: number | null;
|
|
48
|
+
}
|
|
49
|
+
export interface FalRequestItem {
|
|
50
|
+
request_id?: string;
|
|
51
|
+
endpoint_id?: string;
|
|
52
|
+
started_at?: string | null;
|
|
53
|
+
sent_at?: string | null;
|
|
54
|
+
ended_at?: string | null;
|
|
55
|
+
status_code?: number | null;
|
|
56
|
+
duration?: number | null;
|
|
57
|
+
json_output?: FalJsonOutput;
|
|
58
|
+
}
|
|
59
|
+
/** How this module reaches FAL. Injectable so tests drive it without network. */
|
|
60
|
+
export interface FalGenerationsOptions {
|
|
61
|
+
fetchFn?: typeof fetch;
|
|
62
|
+
signal?: AbortSignal;
|
|
63
|
+
}
|
|
64
|
+
/** FAL refused the key: it is missing, invalid, or not admin-scoped. */
|
|
65
|
+
export declare class FalPlatformAuthError extends Error {
|
|
66
|
+
readonly status: number;
|
|
67
|
+
constructor(status: number);
|
|
68
|
+
}
|
|
69
|
+
/** Outputs FAL still hosts for a request, from the payloads it returns. */
|
|
70
|
+
export declare function falOutputUrls(output: FalJsonOutput | undefined): string[];
|
|
71
|
+
/**
|
|
72
|
+
* A request's outcome from its HTTP status. A request FAL has accepted but not
|
|
73
|
+
* finished has no `ended_at` and no status code yet — that is `running`, not a
|
|
74
|
+
* missing value.
|
|
75
|
+
*/
|
|
76
|
+
export declare function falRequestStatus(item: FalRequestItem): ProviderGenerationStatus;
|
|
77
|
+
/** One billing event by request id, or null when FAL has not posted one. */
|
|
78
|
+
export declare function falBillingEvent(apiKey: string, requestId: string, options?: FalGenerationsOptions): Promise<FalBillingEvent | null>;
|
|
79
|
+
/**
|
|
80
|
+
* The billed cost of one FAL request, in USD, or null when no billing event
|
|
81
|
+
* exists for it yet. The reconciler's lookup — see `fal-billing.ts` in
|
|
82
|
+
* `@nodetool-ai/fal-nodes` for the retry that surrounds it.
|
|
83
|
+
*/
|
|
84
|
+
export declare function falRequestCost(apiKey: string, requestId: string, options?: FalGenerationsOptions): Promise<{
|
|
85
|
+
cost: number;
|
|
86
|
+
currency: string;
|
|
87
|
+
quantity: number | null;
|
|
88
|
+
unit_price: number | null;
|
|
89
|
+
} | null>;
|
|
90
|
+
/**
|
|
91
|
+
* List FAL's own record of this account's generations, newest first.
|
|
92
|
+
*
|
|
93
|
+
* With a `model` filter the request history answers, so each row carries a
|
|
94
|
+
* real status and its outputs, and one billing call fills the costs in.
|
|
95
|
+
* Without one, only the account-wide billing feed can answer, so the rows
|
|
96
|
+
* carry cost but `status: "unknown"` — the `note` says so.
|
|
97
|
+
*/
|
|
98
|
+
export declare function falListGenerations(apiKey: string, query?: ProviderGenerationQuery, options?: FalGenerationsOptions): Promise<ProviderGenerationPage>;
|
|
99
|
+
/**
|
|
100
|
+
* One FAL generation by request id. The billing feed finds it account-wide and
|
|
101
|
+
* names its endpoint; the request history then adds status, timings and
|
|
102
|
+
* outputs. A caller that already knows the endpoint passes it as `model`, and
|
|
103
|
+
* the lookup works even before FAL posts the charge.
|
|
104
|
+
*/
|
|
105
|
+
export declare function falGetGeneration(apiKey: string, requestId: string, lookup?: ProviderGenerationLookup, options?: FalGenerationsOptions): Promise<ProviderGeneration | null>;
|
|
106
|
+
//# sourceMappingURL=fal-generations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fal-generations.d.ts","sourceRoot":"","sources":["../../src/providers/fal-generations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FAL's request history, read through its Platform APIs.
|
|
3
|
+
*
|
|
4
|
+
* Two endpoints answer different halves of a generation, and this module is
|
|
5
|
+
* the one client for both (https://fal.ai/docs/api-reference/platform-apis):
|
|
6
|
+
*
|
|
7
|
+
* - `GET /v1/models/billing-events` — one record per *charge*: request id,
|
|
8
|
+
* endpoint, timestamp and the billed cost. Account-wide, so it is what a
|
|
9
|
+
* listing without an endpoint filter can use. A billing event says a call
|
|
10
|
+
* was charged, never how it ended, so those records carry
|
|
11
|
+
* `status: "unknown"` rather than an invented outcome.
|
|
12
|
+
* - `GET /v1/models/requests/by-endpoint` — one record per *request*: status
|
|
13
|
+
* code, timings, and with `expand=payloads` the input and output. It
|
|
14
|
+
* requires at least one endpoint id, so it serves a listing filtered by
|
|
15
|
+
* model and the second half of a single lookup.
|
|
16
|
+
*
|
|
17
|
+
* Both need an admin-scoped key; NodeTool reuses `FAL_API_KEY` and a key
|
|
18
|
+
* without that scope 401/403s. The caller gets that as a thrown error on a
|
|
19
|
+
* direct read, and as a `note` with null costs when only the cost half fails.
|
|
20
|
+
*/
|
|
21
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
22
|
+
import { isFiniteNumber, isNumber } from "@nodetool-ai/protocol";
|
|
23
|
+
import { boundedLimit, modelFilter, providerGeneration } from "./provider-generations.js";
|
|
24
|
+
const log = createLogger("nodetool.runtime.fal-generations");
|
|
25
|
+
const FAL_PLATFORM_BASE = "https://api.fal.ai/v1";
|
|
26
|
+
const BILLING_EVENTS_PATH = "/models/billing-events";
|
|
27
|
+
const REQUESTS_PATH = "/models/requests/by-endpoint";
|
|
28
|
+
/** `limit` ceiling both endpoints document. */
|
|
29
|
+
const MAX_PAGE = 100;
|
|
30
|
+
const DEFAULT_PAGE = 50;
|
|
31
|
+
/** The window FAL keeps queryable when a request id is given. */
|
|
32
|
+
const LOOKUP_WINDOW_DAYS = 90;
|
|
33
|
+
const NANO_PER_USD = 1_000_000_000;
|
|
34
|
+
function isoDaysAgo(days) {
|
|
35
|
+
return new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
36
|
+
}
|
|
37
|
+
function buildUrl(path, params) {
|
|
38
|
+
const query = new URLSearchParams();
|
|
39
|
+
for (const [key, value] of params) {
|
|
40
|
+
if (value.length > 0)
|
|
41
|
+
query.append(key, value);
|
|
42
|
+
}
|
|
43
|
+
const suffix = query.toString();
|
|
44
|
+
return `${FAL_PLATFORM_BASE}${path}${suffix ? `?${suffix}` : ""}`;
|
|
45
|
+
}
|
|
46
|
+
/** FAL refused the key: it is missing, invalid, or not admin-scoped. */
|
|
47
|
+
export class FalPlatformAuthError extends Error {
|
|
48
|
+
status;
|
|
49
|
+
constructor(status) {
|
|
50
|
+
super(`FAL rejected the platform API key (HTTP ${status}). Reading FAL's ` +
|
|
51
|
+
`generation history needs an admin-scoped FAL_API_KEY.`);
|
|
52
|
+
this.name = "FalPlatformAuthError";
|
|
53
|
+
this.status = status;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function falGet(apiKey, url, options) {
|
|
57
|
+
const fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
58
|
+
const init = {
|
|
59
|
+
headers: { Authorization: `Key ${apiKey}` }
|
|
60
|
+
};
|
|
61
|
+
if (options.signal)
|
|
62
|
+
init.signal = options.signal;
|
|
63
|
+
const res = await fetchFn(url, init);
|
|
64
|
+
if (res.status === 401 || res.status === 403) {
|
|
65
|
+
throw new FalPlatformAuthError(res.status);
|
|
66
|
+
}
|
|
67
|
+
if (!res.ok) {
|
|
68
|
+
const body = await res.text();
|
|
69
|
+
throw new Error(`FAL platform API ${res.status} for ${url}: ${body.slice(0, 500)}`);
|
|
70
|
+
}
|
|
71
|
+
// SAFETY: each caller passes the response interface documented for the
|
|
72
|
+
// endpoint in that URL, and every field of those interfaces is optional, so
|
|
73
|
+
// a payload missing one narrows to undefined rather than lying.
|
|
74
|
+
return (await res.json());
|
|
75
|
+
}
|
|
76
|
+
function costOf(event) {
|
|
77
|
+
if (isFiniteNumber(event.cost_total))
|
|
78
|
+
return event.cost_total;
|
|
79
|
+
const nano = event.cost_estimate_nano_usd;
|
|
80
|
+
return isFiniteNumber(nano) ? nano / NANO_PER_USD : null;
|
|
81
|
+
}
|
|
82
|
+
/** Outputs FAL still hosts for a request, from the payloads it returns. */
|
|
83
|
+
export function falOutputUrls(output) {
|
|
84
|
+
if (!output)
|
|
85
|
+
return [];
|
|
86
|
+
const files = [
|
|
87
|
+
output.image,
|
|
88
|
+
output.video,
|
|
89
|
+
output.audio,
|
|
90
|
+
output.audio_file,
|
|
91
|
+
output.model_mesh,
|
|
92
|
+
...(output.images ?? []),
|
|
93
|
+
...(output.videos ?? [])
|
|
94
|
+
];
|
|
95
|
+
const urls = [];
|
|
96
|
+
for (const file of files) {
|
|
97
|
+
const url = file?.url;
|
|
98
|
+
if (url !== undefined && url.length > 0)
|
|
99
|
+
urls.push(url);
|
|
100
|
+
}
|
|
101
|
+
return urls;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* A request's outcome from its HTTP status. A request FAL has accepted but not
|
|
105
|
+
* finished has no `ended_at` and no status code yet — that is `running`, not a
|
|
106
|
+
* missing value.
|
|
107
|
+
*/
|
|
108
|
+
export function falRequestStatus(item) {
|
|
109
|
+
const code = item.status_code;
|
|
110
|
+
if (!isNumber(code)) {
|
|
111
|
+
return item.ended_at ? "unknown" : "running";
|
|
112
|
+
}
|
|
113
|
+
if (code >= 200 && code < 400)
|
|
114
|
+
return "completed";
|
|
115
|
+
if (code >= 400)
|
|
116
|
+
return "failed";
|
|
117
|
+
return "unknown";
|
|
118
|
+
}
|
|
119
|
+
/** FAL's `status` filter for the statuses it can express. */
|
|
120
|
+
function falStatusFilter(status) {
|
|
121
|
+
if (status === "completed")
|
|
122
|
+
return "success";
|
|
123
|
+
if (status === "failed")
|
|
124
|
+
return "error";
|
|
125
|
+
return "";
|
|
126
|
+
}
|
|
127
|
+
function fromBillingEvent(event) {
|
|
128
|
+
const requestId = event.request_id;
|
|
129
|
+
if (requestId === undefined || requestId.length === 0)
|
|
130
|
+
return null;
|
|
131
|
+
return providerGeneration({
|
|
132
|
+
provider: "fal_ai",
|
|
133
|
+
request_id: requestId,
|
|
134
|
+
model: event.endpoint_id ?? null,
|
|
135
|
+
// A charge is not an outcome. `by-endpoint` is what knows how it ended.
|
|
136
|
+
status: "unknown",
|
|
137
|
+
created_at: event.timestamp ?? null,
|
|
138
|
+
cost: costOf(event),
|
|
139
|
+
currency: "USD",
|
|
140
|
+
quantity: event.output_units ?? null,
|
|
141
|
+
unit_price: event.unit_price ?? null
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function fromRequestItem(item, event) {
|
|
145
|
+
const requestId = item.request_id;
|
|
146
|
+
if (requestId === undefined || requestId.length === 0)
|
|
147
|
+
return null;
|
|
148
|
+
return providerGeneration({
|
|
149
|
+
provider: "fal_ai",
|
|
150
|
+
request_id: requestId,
|
|
151
|
+
model: item.endpoint_id ?? event?.endpoint_id ?? null,
|
|
152
|
+
status: falRequestStatus(item),
|
|
153
|
+
created_at: item.started_at ?? item.sent_at ?? event?.timestamp ?? null,
|
|
154
|
+
completed_at: item.ended_at ?? null,
|
|
155
|
+
duration_seconds: item.duration ?? null,
|
|
156
|
+
cost: event ? costOf(event) : null,
|
|
157
|
+
currency: event ? "USD" : null,
|
|
158
|
+
quantity: event?.output_units ?? null,
|
|
159
|
+
unit_price: event?.unit_price ?? null,
|
|
160
|
+
output_urls: falOutputUrls(item.json_output)
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/** One billing event by request id, or null when FAL has not posted one. */
|
|
164
|
+
export async function falBillingEvent(apiKey, requestId, options = {}) {
|
|
165
|
+
const url = buildUrl(BILLING_EVENTS_PATH, [
|
|
166
|
+
["request_id", requestId],
|
|
167
|
+
["start", isoDaysAgo(LOOKUP_WINDOW_DAYS)]
|
|
168
|
+
]);
|
|
169
|
+
const body = await falGet(apiKey, url, options);
|
|
170
|
+
return ((body.billing_events ?? []).find((e) => e.request_id === requestId) ?? null);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* The billed cost of one FAL request, in USD, or null when no billing event
|
|
174
|
+
* exists for it yet. The reconciler's lookup — see `fal-billing.ts` in
|
|
175
|
+
* `@nodetool-ai/fal-nodes` for the retry that surrounds it.
|
|
176
|
+
*/
|
|
177
|
+
export async function falRequestCost(apiKey, requestId, options = {}) {
|
|
178
|
+
const event = await falBillingEvent(apiKey, requestId, options);
|
|
179
|
+
if (!event)
|
|
180
|
+
return null;
|
|
181
|
+
const cost = costOf(event);
|
|
182
|
+
if (cost === null)
|
|
183
|
+
return null;
|
|
184
|
+
return {
|
|
185
|
+
cost,
|
|
186
|
+
currency: "USD",
|
|
187
|
+
quantity: event.output_units ?? null,
|
|
188
|
+
unit_price: event.unit_price ?? null
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* List FAL's own record of this account's generations, newest first.
|
|
193
|
+
*
|
|
194
|
+
* With a `model` filter the request history answers, so each row carries a
|
|
195
|
+
* real status and its outputs, and one billing call fills the costs in.
|
|
196
|
+
* Without one, only the account-wide billing feed can answer, so the rows
|
|
197
|
+
* carry cost but `status: "unknown"` — the `note` says so.
|
|
198
|
+
*/
|
|
199
|
+
export async function falListGenerations(apiKey, query = {}, options = {}) {
|
|
200
|
+
const limit = boundedLimit(query.limit, DEFAULT_PAGE, MAX_PAGE);
|
|
201
|
+
const endpoints = modelFilter(query.model);
|
|
202
|
+
const window = [
|
|
203
|
+
["start", query.since ?? ""],
|
|
204
|
+
["end", query.until ?? ""]
|
|
205
|
+
];
|
|
206
|
+
if (endpoints.length === 0) {
|
|
207
|
+
const url = buildUrl(BILLING_EVENTS_PATH, [
|
|
208
|
+
...window,
|
|
209
|
+
["limit", String(limit)],
|
|
210
|
+
["cursor", query.cursor ?? ""]
|
|
211
|
+
]);
|
|
212
|
+
const body = await falGet(apiKey, url, options);
|
|
213
|
+
const generations = (body.billing_events ?? [])
|
|
214
|
+
.map(fromBillingEvent)
|
|
215
|
+
.filter((row) => row !== null);
|
|
216
|
+
return {
|
|
217
|
+
generations,
|
|
218
|
+
next_cursor: body.next_cursor ?? null,
|
|
219
|
+
note: "FAL lists account-wide generations through its billing feed, which " +
|
|
220
|
+
"records the charge and not the outcome. Pass a model (endpoint id) " +
|
|
221
|
+
"to read status, timings and outputs."
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
const url = buildUrl(REQUESTS_PATH, [
|
|
225
|
+
...window,
|
|
226
|
+
["endpoint_id", endpoints.join(",")],
|
|
227
|
+
["limit", String(limit)],
|
|
228
|
+
["cursor", query.cursor ?? ""],
|
|
229
|
+
["status", falStatusFilter(query.status)],
|
|
230
|
+
["expand", "payloads"]
|
|
231
|
+
]);
|
|
232
|
+
const body = await falGet(apiKey, url, options);
|
|
233
|
+
const items = body.items ?? [];
|
|
234
|
+
// The request history carries no cost, so one billing call over the same
|
|
235
|
+
// window and endpoints supplies it. A key without billing scope leaves the
|
|
236
|
+
// costs null rather than failing a listing that otherwise answered.
|
|
237
|
+
const costs = new Map();
|
|
238
|
+
let note = null;
|
|
239
|
+
if (items.length > 0) {
|
|
240
|
+
const billingUrl = buildUrl(BILLING_EVENTS_PATH, [
|
|
241
|
+
...window,
|
|
242
|
+
["endpoint_id", endpoints.join(",")],
|
|
243
|
+
["limit", String(MAX_PAGE)]
|
|
244
|
+
]);
|
|
245
|
+
try {
|
|
246
|
+
const billing = await falGet(apiKey, billingUrl, options);
|
|
247
|
+
for (const event of billing.billing_events ?? []) {
|
|
248
|
+
if (event.request_id)
|
|
249
|
+
costs.set(event.request_id, event);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
log.warn(`FAL billing lookup failed, listing without costs: ${err}`);
|
|
254
|
+
note = `Costs are missing: the FAL billing feed answered ${String(err)}.`;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const generations = items
|
|
258
|
+
.map((item) => fromRequestItem(item, costs.get(item.request_id ?? "") ?? undefined))
|
|
259
|
+
.filter((row) => row !== null);
|
|
260
|
+
return { generations, next_cursor: body.next_cursor ?? null, note };
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* One FAL generation by request id. The billing feed finds it account-wide and
|
|
264
|
+
* names its endpoint; the request history then adds status, timings and
|
|
265
|
+
* outputs. A caller that already knows the endpoint passes it as `model`, and
|
|
266
|
+
* the lookup works even before FAL posts the charge.
|
|
267
|
+
*/
|
|
268
|
+
export async function falGetGeneration(apiKey, requestId, lookup = {}, options = {}) {
|
|
269
|
+
const event = await falBillingEvent(apiKey, requestId, options);
|
|
270
|
+
const endpointId = lookup.model ?? event?.endpoint_id ?? null;
|
|
271
|
+
if (endpointId === null) {
|
|
272
|
+
return event ? fromBillingEvent(event) : null;
|
|
273
|
+
}
|
|
274
|
+
const url = buildUrl(REQUESTS_PATH, [
|
|
275
|
+
["endpoint_id", endpointId],
|
|
276
|
+
["request_id", requestId],
|
|
277
|
+
["start", isoDaysAgo(LOOKUP_WINDOW_DAYS)],
|
|
278
|
+
["expand", "payloads"]
|
|
279
|
+
]);
|
|
280
|
+
const body = await falGet(apiKey, url, options);
|
|
281
|
+
const item = (body.items ?? []).find((i) => i.request_id === requestId);
|
|
282
|
+
if (!item)
|
|
283
|
+
return event ? fromBillingEvent(event) : null;
|
|
284
|
+
return fromRequestItem(item, event ?? undefined);
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=fal-generations.js.map
|