@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,502 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM record/replay ("VCR cassette") harness at the provider boundary.
|
|
3
|
+
*
|
|
4
|
+
* A {@link CassetteProvider} wraps any inner {@link BaseProvider}. In "record"
|
|
5
|
+
* mode it delegates every chat call to the inner provider and captures the
|
|
6
|
+
* request plus the full streamed response into a cassette. In "replay" mode it
|
|
7
|
+
* serves recorded responses by matching a stable hash of the request, never
|
|
8
|
+
* touching the inner provider (no API key, no network, no cost, no flakiness).
|
|
9
|
+
* "auto" replays when a matching interaction exists, otherwise records one.
|
|
10
|
+
*
|
|
11
|
+
* Only the chat surface (`generateMessage` / `generateMessages`) is recorded —
|
|
12
|
+
* that is where agent/prompt behavior lives. Every other modality (image,
|
|
13
|
+
* video, audio, embeddings) delegates straight to the inner provider.
|
|
14
|
+
*/
|
|
15
|
+
import { getNodeBuiltinSync, importNodeBuiltin } from "@nodetool-ai/config";
|
|
16
|
+
import { BaseProvider } from "./base-provider.js";
|
|
17
|
+
import { isObjectLike } from "@nodetool-ai/protocol";
|
|
18
|
+
import { createUsageSlot } from "../tracing-helpers.js";
|
|
19
|
+
const _nodeCrypto = getNodeBuiltinSync("node:crypto");
|
|
20
|
+
function sleep(ms) {
|
|
21
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
22
|
+
}
|
|
23
|
+
/** Immediate-failure faults: thrown before the cassette/inner provider is
|
|
24
|
+
* ever consulted. Returns null for faults that don't fail the call outright. */
|
|
25
|
+
async function throwImmediateFault(fault) {
|
|
26
|
+
if (fault.kind === "http-429") {
|
|
27
|
+
const err = new Error(`CassetteProvider fault: upstream rate limited (429 too many requests)` +
|
|
28
|
+
(fault.retryAfterSeconds
|
|
29
|
+
? `; retry after ${fault.retryAfterSeconds}s`
|
|
30
|
+
: ""));
|
|
31
|
+
err.status = 429;
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
if (fault.kind === "http-500") {
|
|
35
|
+
const err = new Error("CassetteProvider fault: upstream server error (500 internal server error)");
|
|
36
|
+
err.status = 500;
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
if (fault.kind === "timeout") {
|
|
40
|
+
const ms = fault.timeoutMs ?? 50;
|
|
41
|
+
await sleep(ms);
|
|
42
|
+
const err = new Error(`CassetteProvider fault: request timed out after ${ms}ms`);
|
|
43
|
+
err.code = "ETIMEDOUT";
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function createEmptyCassette() {
|
|
48
|
+
return { version: 1, interactions: [] };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Deterministic JSON with object keys sorted at every level. Arrays keep their
|
|
52
|
+
* order. Typed arrays/Buffers are encoded as a tagged base64 string so binary
|
|
53
|
+
* message content hashes stably. Circular references collapse to "[circular]".
|
|
54
|
+
*/
|
|
55
|
+
export function stableStringify(value) {
|
|
56
|
+
const seen = new WeakSet();
|
|
57
|
+
const encode = (v) => {
|
|
58
|
+
if (!isObjectLike(v)) {
|
|
59
|
+
// Normalize undefined (omitted by JSON.stringify) and functions to null
|
|
60
|
+
// so two requests differing only in an unset optional hash identically.
|
|
61
|
+
if (typeof v === "undefined" || typeof v === "function")
|
|
62
|
+
return null;
|
|
63
|
+
if (typeof v === "bigint")
|
|
64
|
+
return `__bigint__:${v.toString()}`;
|
|
65
|
+
// SAFETY: what is left is a JSON scalar — string, number, boolean, null.
|
|
66
|
+
return v;
|
|
67
|
+
}
|
|
68
|
+
if (v instanceof Uint8Array) {
|
|
69
|
+
return `__bytes__:${bytesToBase64(v)}`;
|
|
70
|
+
}
|
|
71
|
+
if (ArrayBuffer.isView(v)) {
|
|
72
|
+
const view = v;
|
|
73
|
+
return `__bytes__:${bytesToBase64(new Uint8Array(view.buffer, view.byteOffset, view.byteLength))}`;
|
|
74
|
+
}
|
|
75
|
+
if (seen.has(v))
|
|
76
|
+
return "[circular]";
|
|
77
|
+
seen.add(v);
|
|
78
|
+
try {
|
|
79
|
+
if (Array.isArray(v)) {
|
|
80
|
+
return v.map(encode);
|
|
81
|
+
}
|
|
82
|
+
const obj = v;
|
|
83
|
+
const out = {};
|
|
84
|
+
for (const key of Object.keys(obj).sort()) {
|
|
85
|
+
out[key] = encode(obj[key]);
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
seen.delete(v);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return JSON.stringify(encode(value));
|
|
94
|
+
}
|
|
95
|
+
function bytesToBase64(bytes) {
|
|
96
|
+
if (typeof Buffer !== "undefined") {
|
|
97
|
+
return Buffer.from(bytes).toString("base64");
|
|
98
|
+
}
|
|
99
|
+
let binary = "";
|
|
100
|
+
for (const b of bytes)
|
|
101
|
+
binary += String.fromCharCode(b);
|
|
102
|
+
// btoa exists in browser/worker runtimes; fall back to a hex dump otherwise.
|
|
103
|
+
const g = globalThis;
|
|
104
|
+
return g.btoa ? g.btoa(binary) : Array.from(bytes).join(",");
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* sha256 of a string via node:crypto. Falls back to a deterministic non-crypto
|
|
108
|
+
* 64-bit FNV-1a hash (hex) when crypto is unavailable, so hashing still works
|
|
109
|
+
* in restricted runtimes — collisions are astronomically unlikely for request
|
|
110
|
+
* payloads and only matter within a single cassette.
|
|
111
|
+
*/
|
|
112
|
+
export function hashString(input) {
|
|
113
|
+
if (_nodeCrypto?.createHash) {
|
|
114
|
+
return _nodeCrypto.createHash("sha256").update(input).digest("hex");
|
|
115
|
+
}
|
|
116
|
+
// FNV-1a 64-bit (BigInt) deterministic fallback.
|
|
117
|
+
let hash = 0xcbf29ce484222325n;
|
|
118
|
+
const prime = 0x100000001b3n;
|
|
119
|
+
const mask = 0xffffffffffffffffn;
|
|
120
|
+
for (let i = 0; i < input.length; i++) {
|
|
121
|
+
hash ^= BigInt(input.charCodeAt(i));
|
|
122
|
+
hash = (hash * prime) & mask;
|
|
123
|
+
}
|
|
124
|
+
return hash.toString(16).padStart(16, "0");
|
|
125
|
+
}
|
|
126
|
+
/** Build the normalized, hashable request summary from raw call args. */
|
|
127
|
+
export function normalizeRequest(args) {
|
|
128
|
+
const request = {
|
|
129
|
+
model: args.model,
|
|
130
|
+
messages: args.messages
|
|
131
|
+
};
|
|
132
|
+
if (args.tools && args.tools.length > 0) {
|
|
133
|
+
// Keep only output-affecting tool fields; drop the live `execute` closure
|
|
134
|
+
// and the `terminal` flag (loop control, not model input).
|
|
135
|
+
request.tools = args.tools.map((t) => ({
|
|
136
|
+
name: t.name,
|
|
137
|
+
description: t.description,
|
|
138
|
+
inputSchema: t.inputSchema,
|
|
139
|
+
inputExamples: t.inputExamples,
|
|
140
|
+
cacheControl: t.cacheControl,
|
|
141
|
+
strict: t.strict,
|
|
142
|
+
deferLoading: t.deferLoading,
|
|
143
|
+
allowedCallers: t.allowedCallers,
|
|
144
|
+
type: t.type
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
if (args.toolChoice !== undefined)
|
|
148
|
+
request.toolChoice = args.toolChoice;
|
|
149
|
+
if (args.maxTokens !== undefined)
|
|
150
|
+
request.maxTokens = args.maxTokens;
|
|
151
|
+
if (args.maxTurns !== undefined)
|
|
152
|
+
request.maxTurns = args.maxTurns;
|
|
153
|
+
if (args.temperature !== undefined)
|
|
154
|
+
request.temperature = args.temperature;
|
|
155
|
+
if (args.topP !== undefined)
|
|
156
|
+
request.topP = args.topP;
|
|
157
|
+
if (args.presencePenalty !== undefined) {
|
|
158
|
+
request.presencePenalty = args.presencePenalty;
|
|
159
|
+
}
|
|
160
|
+
if (args.frequencyPenalty !== undefined) {
|
|
161
|
+
request.frequencyPenalty = args.frequencyPenalty;
|
|
162
|
+
}
|
|
163
|
+
if (args.thinking !== undefined)
|
|
164
|
+
request.thinking = args.thinking;
|
|
165
|
+
if (args.effort !== undefined)
|
|
166
|
+
request.effort = args.effort;
|
|
167
|
+
if (args.audio !== undefined)
|
|
168
|
+
request.audio = args.audio;
|
|
169
|
+
return request;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Deep-copy the messages of a request that is about to be stored.
|
|
173
|
+
*
|
|
174
|
+
* {@link normalizeRequest} deliberately aliases `args.messages` — it feeds the
|
|
175
|
+
* hash, which is taken while the array still holds this call's state, and
|
|
176
|
+
* cloning the whole conversation on every replay lookup would be wasted work.
|
|
177
|
+
* A *recorded* interaction outlives the call, though, and agent loops append
|
|
178
|
+
* to that same array between calls: kept as a reference, every interaction in
|
|
179
|
+
* a saved cassette ends up showing the conversation's final state rather than
|
|
180
|
+
* what its own call was sent. Snapshot at the moment of recording.
|
|
181
|
+
*/
|
|
182
|
+
function snapshotRequest(request) {
|
|
183
|
+
return { ...request, messages: request.messages.map(cloneMessage) };
|
|
184
|
+
}
|
|
185
|
+
/** Stable hash of a request, scoped by method so the two surfaces never mix. */
|
|
186
|
+
export function hashRequest(method, request) {
|
|
187
|
+
return hashString(stableStringify({ method, request }));
|
|
188
|
+
}
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// Cassette store (disk persistence)
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
/**
|
|
193
|
+
* Load/save cassettes as pretty-printed JSON on disk. Node-only; methods throw
|
|
194
|
+
* a clear {@link Error} when `node:fs/promises` is unavailable (browser/worker),
|
|
195
|
+
* so in-memory use stays the supported path off Node.
|
|
196
|
+
*/
|
|
197
|
+
export class CassetteStore {
|
|
198
|
+
static async load(path) {
|
|
199
|
+
const fsP = await importNodeBuiltin("node:fs/promises");
|
|
200
|
+
if (!fsP) {
|
|
201
|
+
throw new Error("CassetteStore.load requires node:fs/promises");
|
|
202
|
+
}
|
|
203
|
+
const text = await fsP.readFile(path, "utf-8");
|
|
204
|
+
const parsed = JSON.parse(text);
|
|
205
|
+
if (!parsed || !Array.isArray(parsed.interactions)) {
|
|
206
|
+
throw new Error(`Invalid cassette at ${path}: missing interactions`);
|
|
207
|
+
}
|
|
208
|
+
return parsed;
|
|
209
|
+
}
|
|
210
|
+
/** Load a cassette if the file exists, otherwise return an empty one. */
|
|
211
|
+
static async loadOrEmpty(path) {
|
|
212
|
+
try {
|
|
213
|
+
return await CassetteStore.load(path);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
const code = err.code;
|
|
217
|
+
if (code === "ENOENT")
|
|
218
|
+
return createEmptyCassette();
|
|
219
|
+
throw err;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
static async save(path, cassette) {
|
|
223
|
+
const fsP = await importNodeBuiltin("node:fs/promises");
|
|
224
|
+
if (!fsP) {
|
|
225
|
+
throw new Error("CassetteStore.save requires node:fs/promises");
|
|
226
|
+
}
|
|
227
|
+
await fsP.writeFile(path, JSON.stringify(cassette, null, 2), "utf-8");
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Provider that records or replays the chat surface of an inner provider.
|
|
232
|
+
*
|
|
233
|
+
* Construct with an in-memory cassette for tests, or from disk via
|
|
234
|
+
* {@link CassetteProvider.fromFile}. The cassette grows in "record"/"auto"
|
|
235
|
+
* mode; call {@link CassetteProvider.save} to persist it.
|
|
236
|
+
*/
|
|
237
|
+
export class CassetteProvider extends BaseProvider {
|
|
238
|
+
inner;
|
|
239
|
+
mode;
|
|
240
|
+
cassette;
|
|
241
|
+
path;
|
|
242
|
+
fault;
|
|
243
|
+
/**
|
|
244
|
+
* Per-hash replay cursor. Among interactions sharing a hash, successive
|
|
245
|
+
* replays cycle through them in record order (FIFO), wrapping around so two
|
|
246
|
+
* consecutive identical requests with a single recorded interaction both
|
|
247
|
+
* return that same interaction deterministically.
|
|
248
|
+
*/
|
|
249
|
+
replayCursors = new Map();
|
|
250
|
+
constructor(inner, options = {}) {
|
|
251
|
+
// Adopt the inner provider's id so trackUsage() re-derives the exact same
|
|
252
|
+
// cost on replay via CostCalculator (it prices per provider + model).
|
|
253
|
+
super(inner.provider);
|
|
254
|
+
this.inner = inner;
|
|
255
|
+
this.mode = options.mode ?? "auto";
|
|
256
|
+
this.cassette = options.cassette ?? createEmptyCassette();
|
|
257
|
+
this.path = options.path;
|
|
258
|
+
this.fault = options.fault;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Wraps a stream (a cassette hit's recorded items or the inner provider's
|
|
262
|
+
* live generator) with the non-immediate faults: `truncated-stream` throws
|
|
263
|
+
* after `afterChunks` items (simulating a dropped connection mid-stream),
|
|
264
|
+
* `slow-drip` delays before every yield, `malformed-chunk` throws after the
|
|
265
|
+
* underlying stream ends (simulating an unparseable trailing SSE event).
|
|
266
|
+
* A no-op passthrough when no fault — or an immediate-failure fault — is set.
|
|
267
|
+
*/
|
|
268
|
+
async *applyStreamFault(items) {
|
|
269
|
+
const fault = this.fault;
|
|
270
|
+
if (!fault) {
|
|
271
|
+
yield* items;
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
const limit = fault.kind === "truncated-stream" ? (fault.afterChunks ?? 2) : null;
|
|
275
|
+
let count = 0;
|
|
276
|
+
for await (const item of items) {
|
|
277
|
+
if (limit !== null && count >= limit) {
|
|
278
|
+
throw new Error(`CassetteProvider fault: stream truncated after ${limit} chunk(s) (connection reset)`);
|
|
279
|
+
}
|
|
280
|
+
if (fault.kind === "slow-drip") {
|
|
281
|
+
await sleep(fault.delayMs ?? 10);
|
|
282
|
+
}
|
|
283
|
+
yield item;
|
|
284
|
+
count++;
|
|
285
|
+
}
|
|
286
|
+
if (fault.kind === "malformed-chunk") {
|
|
287
|
+
throw new SyntaxError("CassetteProvider fault: malformed SSE event (unparseable chunk)");
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/** `cost-omission`: usage is never tracked/reproduced, even though the
|
|
291
|
+
* underlying call (real or replayed) succeeded normally. */
|
|
292
|
+
get omitCost() {
|
|
293
|
+
return this.fault?.kind === "cost-omission";
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Build a provider backed by a cassette file. The file is loaded if present
|
|
297
|
+
* (empty cassette otherwise, for first-time recording). Pass `path` again — or
|
|
298
|
+
* omit it and call {@link save} with an explicit path — to persist.
|
|
299
|
+
*/
|
|
300
|
+
static async fromFile(inner, path, options = {}) {
|
|
301
|
+
const cassette = await CassetteStore.loadOrEmpty(path);
|
|
302
|
+
return new CassetteProvider(inner, { ...options, cassette, path });
|
|
303
|
+
}
|
|
304
|
+
/** Persist the current cassette to disk (its `path`, or an override). */
|
|
305
|
+
async save(path) {
|
|
306
|
+
const target = path ?? this.path;
|
|
307
|
+
if (!target) {
|
|
308
|
+
throw new Error("CassetteProvider.save requires a path");
|
|
309
|
+
}
|
|
310
|
+
await CassetteStore.save(target, this.cassette);
|
|
311
|
+
}
|
|
312
|
+
async getAvailableLanguageModels() {
|
|
313
|
+
return this.inner.getAvailableLanguageModels();
|
|
314
|
+
}
|
|
315
|
+
async hasToolSupport(model) {
|
|
316
|
+
return this.inner.hasToolSupport(model);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* The inner provider's answer, so a cassette over Gemini keeps sending whole
|
|
320
|
+
* clips instead of being downgraded to sampled frames by the base fallback.
|
|
321
|
+
*/
|
|
322
|
+
get supportsVideoInput() {
|
|
323
|
+
return this.inner.supportsVideoInput;
|
|
324
|
+
}
|
|
325
|
+
// -------------------------------------------------------------------------
|
|
326
|
+
// Matching
|
|
327
|
+
// -------------------------------------------------------------------------
|
|
328
|
+
/**
|
|
329
|
+
* Find a recorded interaction for this request hash, advancing the per-hash
|
|
330
|
+
* replay cursor (FIFO, wrapping). Returns null when nothing was recorded for
|
|
331
|
+
* the hash.
|
|
332
|
+
*/
|
|
333
|
+
matchInteraction(method, hash) {
|
|
334
|
+
const matches = this.cassette.interactions.filter((i) => i.method === method && i.hash === hash);
|
|
335
|
+
if (matches.length === 0)
|
|
336
|
+
return null;
|
|
337
|
+
const cursorKey = `${method}:${hash}`;
|
|
338
|
+
const cursor = this.replayCursors.get(cursorKey) ?? 0;
|
|
339
|
+
const interaction = matches[cursor % matches.length];
|
|
340
|
+
this.replayCursors.set(cursorKey, cursor + 1);
|
|
341
|
+
return interaction;
|
|
342
|
+
}
|
|
343
|
+
// -------------------------------------------------------------------------
|
|
344
|
+
// generateMessage (single-shot)
|
|
345
|
+
// -------------------------------------------------------------------------
|
|
346
|
+
async generateMessage(args) {
|
|
347
|
+
if (this.fault)
|
|
348
|
+
await throwImmediateFault(this.fault);
|
|
349
|
+
const request = normalizeRequest(args);
|
|
350
|
+
const hash = hashRequest("generateMessage", request);
|
|
351
|
+
if (this.mode === "replay" || this.mode === "auto") {
|
|
352
|
+
const hit = this.matchInteraction("generateMessage", hash);
|
|
353
|
+
if (hit) {
|
|
354
|
+
if (hit.error)
|
|
355
|
+
throw reconstructScriptedError(hit.error);
|
|
356
|
+
if (hit.usage && !this.omitCost)
|
|
357
|
+
this.trackUsage(request.model, hit.usage);
|
|
358
|
+
return cloneMessage(hit.response);
|
|
359
|
+
}
|
|
360
|
+
if (this.mode === "replay") {
|
|
361
|
+
throw new Error(`CassetteProvider replay miss: no recorded generateMessage for ` +
|
|
362
|
+
`model "${request.model}" (hash ${hash.slice(0, 12)})`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
// record / auto-miss: delegate, capturing the response and the inner
|
|
366
|
+
// provider's tracked usage so replay reproduces the same cost.
|
|
367
|
+
const { runInSlot, getUsage } = createUsageSlot();
|
|
368
|
+
const result = await runInSlot(() => this.inner.generateMessage(args));
|
|
369
|
+
const usage = this.omitCost ? undefined : usageFromSlot(getUsage());
|
|
370
|
+
if (usage)
|
|
371
|
+
this.trackUsage(request.model, usage);
|
|
372
|
+
const interaction = {
|
|
373
|
+
hash,
|
|
374
|
+
method: "generateMessage",
|
|
375
|
+
request: snapshotRequest(request),
|
|
376
|
+
response: cloneMessage(result)
|
|
377
|
+
};
|
|
378
|
+
if (usage) {
|
|
379
|
+
interaction.usage = usage;
|
|
380
|
+
}
|
|
381
|
+
this.cassette.interactions.push(interaction);
|
|
382
|
+
return result;
|
|
383
|
+
}
|
|
384
|
+
// -------------------------------------------------------------------------
|
|
385
|
+
// generateMessages (streaming primitive)
|
|
386
|
+
// -------------------------------------------------------------------------
|
|
387
|
+
async *generateMessages(args) {
|
|
388
|
+
if (this.fault)
|
|
389
|
+
await throwImmediateFault(this.fault);
|
|
390
|
+
const request = normalizeRequest(args);
|
|
391
|
+
const hash = hashRequest("generateMessages", request);
|
|
392
|
+
if (this.mode === "replay" || this.mode === "auto") {
|
|
393
|
+
const hit = this.matchInteraction("generateMessages", hash);
|
|
394
|
+
if (hit) {
|
|
395
|
+
if (hit.error)
|
|
396
|
+
throw reconstructScriptedError(hit.error);
|
|
397
|
+
const items = hit.response;
|
|
398
|
+
yield* this.applyStreamFault((async function* () {
|
|
399
|
+
for (const item of items)
|
|
400
|
+
yield cloneStreamItem(item);
|
|
401
|
+
})());
|
|
402
|
+
// Reproduce recorded usage AFTER the stream so a consumer that reads
|
|
403
|
+
// cost post-iteration (the common case) sees the same total a live run
|
|
404
|
+
// produced. trackUsage also feeds the tracing/cost slot.
|
|
405
|
+
if (hit.usage && !this.omitCost)
|
|
406
|
+
this.trackUsage(request.model, hit.usage);
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
if (this.mode === "replay") {
|
|
410
|
+
throw new Error(`CassetteProvider replay miss: no recorded generateMessages for ` +
|
|
411
|
+
`model "${request.model}" (hash ${hash.slice(0, 12)})`);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// record / auto-miss: delegate, capturing every yielded item plus the
|
|
415
|
+
// inner provider's tracked usage. A usage slot wraps each next() so the
|
|
416
|
+
// inner provider's setLastUsage() survives across the generator's yields.
|
|
417
|
+
const { runInSlot, getUsage } = createUsageSlot();
|
|
418
|
+
const captured = [];
|
|
419
|
+
const source = this.inner.generateMessages(args);
|
|
420
|
+
const faulted = this.applyStreamFault((async function* () {
|
|
421
|
+
while (true) {
|
|
422
|
+
const next = await runInSlot(() => source.next());
|
|
423
|
+
if (next.done)
|
|
424
|
+
return;
|
|
425
|
+
yield next.value;
|
|
426
|
+
}
|
|
427
|
+
})());
|
|
428
|
+
for await (const item of faulted) {
|
|
429
|
+
captured.push(cloneStreamItem(item));
|
|
430
|
+
yield item;
|
|
431
|
+
}
|
|
432
|
+
const usage = this.omitCost ? undefined : usageFromSlot(getUsage());
|
|
433
|
+
if (usage)
|
|
434
|
+
this.trackUsage(request.model, usage);
|
|
435
|
+
const interaction = {
|
|
436
|
+
hash,
|
|
437
|
+
method: "generateMessages",
|
|
438
|
+
request: snapshotRequest(request),
|
|
439
|
+
response: captured
|
|
440
|
+
};
|
|
441
|
+
if (usage) {
|
|
442
|
+
interaction.usage = usage;
|
|
443
|
+
}
|
|
444
|
+
this.cassette.interactions.push(interaction);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
// ---------------------------------------------------------------------------
|
|
448
|
+
// Helpers
|
|
449
|
+
// ---------------------------------------------------------------------------
|
|
450
|
+
/**
|
|
451
|
+
* Convert the inner provider's tracked {@link LlmUsage} (captured during
|
|
452
|
+
* recording via a usage slot) into the serializable {@link UsageInfo} stored on
|
|
453
|
+
* the interaction. On replay this is fed back through `trackUsage`, which
|
|
454
|
+
* re-derives the same cost because the cassette provider adopts the inner
|
|
455
|
+
* provider's id. Returns undefined when the inner provider tracked no usage
|
|
456
|
+
* (e.g. FakeProvider), in which case replay reports zero cost — matching the
|
|
457
|
+
* recorded run.
|
|
458
|
+
*/
|
|
459
|
+
function usageFromSlot(usage) {
|
|
460
|
+
if (!usage)
|
|
461
|
+
return undefined;
|
|
462
|
+
const info = {
|
|
463
|
+
inputTokens: usage.inputTokens,
|
|
464
|
+
outputTokens: usage.outputTokens
|
|
465
|
+
};
|
|
466
|
+
if (usage.cachedInputTokens !== undefined) {
|
|
467
|
+
info.cachedTokens = usage.cachedInputTokens;
|
|
468
|
+
}
|
|
469
|
+
if (usage.cacheWriteTokens !== undefined) {
|
|
470
|
+
info.cacheWriteTokens = usage.cacheWriteTokens;
|
|
471
|
+
}
|
|
472
|
+
return info;
|
|
473
|
+
}
|
|
474
|
+
/** Rebuild an Error from a scripted {@link CassetteInteraction.error}. */
|
|
475
|
+
function reconstructScriptedError(error) {
|
|
476
|
+
const err = new Error(error.message);
|
|
477
|
+
if (error.status !== undefined)
|
|
478
|
+
err.status = error.status;
|
|
479
|
+
return err;
|
|
480
|
+
}
|
|
481
|
+
function cloneMessage(message) {
|
|
482
|
+
return structuredCloneSafe(message);
|
|
483
|
+
}
|
|
484
|
+
function cloneStreamItem(item) {
|
|
485
|
+
return structuredCloneSafe(item);
|
|
486
|
+
}
|
|
487
|
+
/** Deep clone that tolerates typed arrays; falls back to JSON for old runtimes. */
|
|
488
|
+
function structuredCloneSafe(value) {
|
|
489
|
+
const sc = globalThis
|
|
490
|
+
.structuredClone;
|
|
491
|
+
if (sc) {
|
|
492
|
+
try {
|
|
493
|
+
return sc(value);
|
|
494
|
+
}
|
|
495
|
+
catch {
|
|
496
|
+
// Value carried something structuredClone rejects (a function); fall
|
|
497
|
+
// through to the JSON path below.
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return JSON.parse(JSON.stringify(value));
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=cassette-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cassette-provider.js","sourceRoot":"","sources":["../../src/providers/cassette-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { OpenAIProvider } from "./openai-provider.js";
|
|
1
|
+
import { OpenAICompatProvider, type OpenAICompatProviderOptions } from "./openai-compat-provider.js";
|
|
3
2
|
import type { LanguageModel } from "./types.js";
|
|
4
|
-
|
|
5
|
-
client?: OpenAI;
|
|
6
|
-
clientFactory?: (apiKey: string) => OpenAI;
|
|
7
|
-
fetchFn?: typeof fetch;
|
|
8
|
-
}
|
|
9
|
-
export declare class CerebrasProvider extends OpenAIProvider {
|
|
3
|
+
export declare class CerebrasProvider extends OpenAICompatProvider {
|
|
10
4
|
static requiredSecrets(): string[];
|
|
11
|
-
private _cerebrasFetch;
|
|
12
5
|
constructor(secrets: {
|
|
13
6
|
CEREBRAS_API_KEY?: string;
|
|
14
|
-
}, options?:
|
|
15
|
-
getContainerEnv():
|
|
7
|
+
}, options?: OpenAICompatProviderOptions);
|
|
8
|
+
getContainerEnv(): {
|
|
9
|
+
CEREBRAS_API_KEY: string;
|
|
10
|
+
};
|
|
16
11
|
hasToolSupport(_model: string): Promise<boolean>;
|
|
17
12
|
getAvailableLanguageModels(): Promise<LanguageModel[]>;
|
|
18
13
|
}
|
|
19
|
-
export {};
|
|
20
14
|
//# sourceMappingURL=cerebras-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cerebras-provider.d.ts","sourceRoot":"","sources":["../../src/providers/cerebras-provider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cerebras-provider.d.ts","sourceRoot":"","sources":["../../src/providers/cerebras-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,qBAAa,gBAAiB,SAAQ,oBAAoB;IACxD,OAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;IAED,YACE,OAAO,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,EACtC,OAAO,GAAE,2BAAgC,EAe1C;IAEQ,eAAe;QACb,gBAAgB;MAC1B;IAEc,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9D;IAEc,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAEpE;CACF"}
|
|
@@ -1,27 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export class CerebrasProvider extends OpenAIProvider {
|
|
1
|
+
import { OpenAICompatProvider } from "./openai-compat-provider.js";
|
|
2
|
+
export class CerebrasProvider extends OpenAICompatProvider {
|
|
4
3
|
static requiredSecrets() {
|
|
5
4
|
return ["CEREBRAS_API_KEY"];
|
|
6
5
|
}
|
|
7
|
-
_cerebrasFetch;
|
|
8
6
|
constructor(secrets, options = {}) {
|
|
9
7
|
const apiKey = secrets.CEREBRAS_API_KEY;
|
|
10
8
|
if (!apiKey) {
|
|
11
9
|
throw new Error("CEREBRAS_API_KEY is required");
|
|
12
10
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
apiKey: key,
|
|
19
|
-
baseURL: "https://api.cerebras.ai/v1"
|
|
20
|
-
})),
|
|
21
|
-
fetchFn
|
|
22
|
-
});
|
|
23
|
-
this.provider = "cerebras";
|
|
24
|
-
this._cerebrasFetch = fetchFn;
|
|
11
|
+
super({
|
|
12
|
+
providerId: "cerebras",
|
|
13
|
+
apiKey,
|
|
14
|
+
baseURL: "https://api.cerebras.ai/v1"
|
|
15
|
+
}, options);
|
|
25
16
|
}
|
|
26
17
|
getContainerEnv() {
|
|
27
18
|
return { CEREBRAS_API_KEY: this.apiKey };
|
|
@@ -30,23 +21,7 @@ export class CerebrasProvider extends OpenAIProvider {
|
|
|
30
21
|
return true;
|
|
31
22
|
}
|
|
32
23
|
async getAvailableLanguageModels() {
|
|
33
|
-
|
|
34
|
-
headers: {
|
|
35
|
-
Authorization: `Bearer ${this.apiKey}`
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
if (!response.ok) {
|
|
39
|
-
return [];
|
|
40
|
-
}
|
|
41
|
-
const payload = (await response.json());
|
|
42
|
-
const rows = payload.data ?? [];
|
|
43
|
-
return rows
|
|
44
|
-
.filter((row) => typeof row.id === "string" && row.id.length > 0)
|
|
45
|
-
.map((row) => ({
|
|
46
|
-
id: row.id,
|
|
47
|
-
name: row.name ?? row.id,
|
|
48
|
-
provider: "cerebras"
|
|
49
|
-
}));
|
|
24
|
+
return this.listCompatModels();
|
|
50
25
|
}
|
|
51
26
|
}
|
|
52
27
|
//# sourceMappingURL=cerebras-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cerebras-provider.js","sourceRoot":"","sources":["../../src/providers/cerebras-provider.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cerebras-provider.js","sourceRoot":"","sources":["../../src/providers/cerebras-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAErB,MAAM,6BAA6B,CAAC;AAGrC,MAAM,OAAO,gBAAiB,SAAQ,oBAAoB;IACxD,MAAM,CAAU,eAAe;QAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAED,YACE,OAAsC,EACtC,OAAO,GAAgC,EAAE;QAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,CACH;YACE,UAAU,EAAE,UAAU;YACtB,MAAM;YACN,OAAO,EAAE,4BAA4B;SACtC,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAEQ,eAAe;QACtB,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3C,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,MAAc;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;CACF"}
|