@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent-memory.d.ts +118 -0
- package/dist/agent-memory.d.ts.map +1 -0
- package/dist/agent-memory.js +186 -0
- package/dist/agent-memory.js.map +1 -0
- package/dist/async-local-storage.d.ts +20 -0
- package/dist/async-local-storage.d.ts.map +1 -0
- package/dist/async-local-storage.js +28 -0
- package/dist/async-local-storage.js.map +1 -0
- package/dist/blender-executor.d.ts +93 -0
- package/dist/blender-executor.d.ts.map +1 -0
- package/dist/blender-executor.js +294 -0
- package/dist/blender-executor.js.map +1 -0
- package/dist/comfy-executor.d.ts +23 -1
- package/dist/comfy-executor.d.ts.map +1 -1
- package/dist/comfy-executor.js +234 -55
- package/dist/comfy-executor.js.map +1 -1
- package/dist/context-packer.d.ts +1 -1
- package/dist/context-packer.d.ts.map +1 -1
- package/dist/context-packer.js +23 -25
- package/dist/context-packer.js.map +1 -1
- package/dist/context.d.ts +954 -127
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2424 -513
- package/dist/context.js.map +1 -1
- package/dist/cost-reconciler.d.ts +32 -0
- package/dist/cost-reconciler.d.ts.map +1 -0
- package/dist/cost-reconciler.js +21 -0
- package/dist/cost-reconciler.js.map +1 -0
- package/dist/entities.d.ts +33 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +43 -0
- package/dist/entities.js.map +1 -0
- package/dist/external-media-fetch.d.ts +29 -0
- package/dist/external-media-fetch.d.ts.map +1 -0
- package/dist/external-media-fetch.js +38 -0
- package/dist/external-media-fetch.js.map +1 -0
- package/dist/generation-receipt.d.ts +86 -0
- package/dist/generation-receipt.d.ts.map +1 -0
- package/dist/generation-receipt.js +137 -0
- package/dist/generation-receipt.js.map +1 -0
- package/dist/generation-registry.d.ts +67 -0
- package/dist/generation-registry.d.ts.map +1 -0
- package/dist/generation-registry.js +126 -0
- package/dist/generation-registry.js.map +1 -0
- package/dist/google/client.d.ts +196 -0
- package/dist/google/client.d.ts.map +1 -0
- package/dist/google/client.js +396 -0
- package/dist/google/client.js.map +1 -0
- package/dist/google/index.d.ts +3 -0
- package/dist/google/index.d.ts.map +1 -0
- package/dist/google/index.js +3 -0
- package/dist/google/index.js.map +1 -0
- package/dist/google/token.d.ts +15 -0
- package/dist/google/token.d.ts.map +1 -0
- package/dist/google/token.js +24 -0
- package/dist/google/token.js.map +1 -0
- package/dist/host-binaries.d.ts +106 -0
- package/dist/host-binaries.d.ts.map +1 -0
- package/dist/host-binaries.js +344 -0
- package/dist/host-binaries.js.map +1 -0
- package/dist/image-codec.d.ts +74 -0
- package/dist/image-codec.d.ts.map +1 -0
- package/dist/image-codec.js +273 -0
- package/dist/image-codec.js.map +1 -0
- package/dist/index.d.ts +56 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -4
- package/dist/index.js.map +1 -1
- package/dist/invocation-account.d.ts +43 -0
- package/dist/invocation-account.d.ts.map +1 -0
- package/dist/invocation-account.js +60 -0
- package/dist/invocation-account.js.map +1 -0
- package/dist/media-ref-bytes.d.ts +19 -0
- package/dist/media-ref-bytes.d.ts.map +1 -0
- package/dist/media-ref-bytes.js +181 -0
- package/dist/media-ref-bytes.js.map +1 -0
- package/dist/node-executor.d.ts +113 -2
- package/dist/node-executor.d.ts.map +1 -1
- package/dist/permission-gate.d.ts +152 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +87 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/prefixed-storage-adapter.d.ts +33 -0
- package/dist/prefixed-storage-adapter.d.ts.map +1 -0
- package/dist/prefixed-storage-adapter.js +70 -0
- package/dist/prefixed-storage-adapter.js.map +1 -0
- package/dist/prompt-asset-refs.d.ts +222 -0
- package/dist/prompt-asset-refs.d.ts.map +1 -0
- package/dist/prompt-asset-refs.js +751 -0
- package/dist/prompt-asset-refs.js.map +1 -0
- package/dist/provider-cache.d.ts +3 -0
- package/dist/provider-cache.d.ts.map +1 -0
- package/dist/provider-cache.js +8 -0
- package/dist/provider-cache.js.map +1 -0
- package/dist/providers/aki-provider.d.ts +33 -10
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +84 -77
- package/dist/providers/aki-provider.js.map +1 -1
- package/dist/providers/alibaba-provider.d.ts +39 -0
- package/dist/providers/alibaba-provider.d.ts.map +1 -0
- package/dist/providers/alibaba-provider.js +86 -0
- package/dist/providers/alibaba-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +52 -3
- package/dist/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/providers/anthropic-provider.js +1020 -338
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/atlascloud-provider.d.ts +101 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -0
- package/dist/providers/atlascloud-provider.js +1009 -0
- package/dist/providers/atlascloud-provider.js.map +1 -0
- package/dist/providers/atlascloud-transport.d.ts +100 -0
- package/dist/providers/atlascloud-transport.d.ts.map +1 -0
- package/dist/providers/atlascloud-transport.js +364 -0
- package/dist/providers/atlascloud-transport.js.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.js +104 -0
- package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
- package/dist/providers/audio-mime.d.ts +11 -0
- package/dist/providers/audio-mime.d.ts.map +1 -0
- package/dist/providers/audio-mime.js +46 -0
- package/dist/providers/audio-mime.js.map +1 -0
- package/dist/providers/base-provider.d.ts +481 -24
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +1259 -42
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/cassette-provider.d.ts +217 -0
- package/dist/providers/cassette-provider.d.ts.map +1 -0
- package/dist/providers/cassette-provider.js +502 -0
- package/dist/providers/cassette-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +6 -12
- package/dist/providers/cerebras-provider.d.ts.map +1 -1
- package/dist/providers/cerebras-provider.js +8 -33
- package/dist/providers/cerebras-provider.js.map +1 -1
- package/dist/providers/claude-agent-provider.d.ts +131 -68
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +1095 -515
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +82 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +492 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +5 -2
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +9 -2
- package/dist/providers/cohere-provider.js.map +1 -1
- package/dist/providers/comfy-cloud-provider.d.ts +30 -0
- package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
- package/dist/providers/comfy-cloud-provider.js +42 -0
- package/dist/providers/comfy-cloud-provider.js.map +1 -0
- package/dist/providers/content-filter.d.ts +46 -0
- package/dist/providers/content-filter.d.ts.map +1 -0
- package/dist/providers/content-filter.js +92 -0
- package/dist/providers/content-filter.js.map +1 -0
- package/dist/providers/context-exceeded.d.ts +37 -0
- package/dist/providers/context-exceeded.d.ts.map +1 -0
- package/dist/providers/context-exceeded.js +114 -0
- package/dist/providers/context-exceeded.js.map +1 -0
- package/dist/providers/context-window.d.ts +44 -0
- package/dist/providers/context-window.d.ts.map +1 -0
- package/dist/providers/context-window.js +145 -0
- package/dist/providers/context-window.js.map +1 -0
- package/dist/providers/contract/index.d.ts +4 -0
- package/dist/providers/contract/index.d.ts.map +1 -0
- package/dist/providers/contract/index.js +4 -0
- package/dist/providers/contract/index.js.map +1 -0
- package/dist/providers/contract/probe-manifest.d.ts +75 -0
- package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
- package/dist/providers/contract/probe-manifest.js +379 -0
- package/dist/providers/contract/probe-manifest.js.map +1 -0
- package/dist/providers/contract/probe-runner.d.ts +57 -0
- package/dist/providers/contract/probe-runner.d.ts.map +1 -0
- package/dist/providers/contract/probe-runner.js +180 -0
- package/dist/providers/contract/probe-runner.js.map +1 -0
- package/dist/providers/contract/redact.d.ts +29 -0
- package/dist/providers/contract/redact.d.ts.map +1 -0
- package/dist/providers/contract/redact.js +113 -0
- package/dist/providers/contract/redact.js.map +1 -0
- package/dist/providers/core-tools.d.ts +74 -0
- package/dist/providers/core-tools.d.ts.map +1 -0
- package/dist/providers/core-tools.js +127 -0
- package/dist/providers/core-tools.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +69 -50
- package/dist/providers/cost-calculator.d.ts.map +1 -1
- package/dist/providers/cost-calculator.js +207 -397
- package/dist/providers/cost-calculator.js.map +1 -1
- package/dist/providers/credential-check.d.ts +45 -0
- package/dist/providers/credential-check.d.ts.map +1 -0
- package/dist/providers/credential-check.js +159 -0
- package/dist/providers/credential-check.js.map +1 -0
- package/dist/providers/custom-model-kinds.d.ts +33 -0
- package/dist/providers/custom-model-kinds.d.ts.map +1 -0
- package/dist/providers/custom-model-kinds.js +96 -0
- package/dist/providers/custom-model-kinds.js.map +1 -0
- package/dist/providers/custom-openai-provider.d.ts +81 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -0
- package/dist/providers/custom-openai-provider.js +182 -0
- package/dist/providers/custom-openai-provider.js.map +1 -0
- package/dist/providers/custom-provider-registry.d.ts +19 -0
- package/dist/providers/custom-provider-registry.d.ts.map +1 -0
- package/dist/providers/custom-provider-registry.js +52 -0
- package/dist/providers/custom-provider-registry.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +8 -14
- package/dist/providers/deepseek-provider.d.ts.map +1 -1
- package/dist/providers/deepseek-provider.js +6 -35
- package/dist/providers/deepseek-provider.js.map +1 -1
- package/dist/providers/defaults.d.ts +12 -0
- package/dist/providers/defaults.d.ts.map +1 -0
- package/dist/providers/defaults.js +12 -0
- package/dist/providers/defaults.js.map +1 -0
- package/dist/providers/elevenlabs-provider.d.ts +49 -0
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
- package/dist/providers/elevenlabs-provider.js +142 -0
- package/dist/providers/elevenlabs-provider.js.map +1 -0
- package/dist/providers/entity-references.d.ts +31 -0
- package/dist/providers/entity-references.d.ts.map +1 -0
- package/dist/providers/entity-references.js +113 -0
- package/dist/providers/entity-references.js.map +1 -0
- package/dist/providers/evolink-provider.d.ts +38 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -0
- package/dist/providers/evolink-provider.js +304 -0
- package/dist/providers/evolink-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +72 -1
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +203 -1
- package/dist/providers/fake-provider.js.map +1 -1
- package/dist/providers/fal-generations.d.ts +106 -0
- package/dist/providers/fal-generations.d.ts.map +1 -0
- package/dist/providers/fal-generations.js +286 -0
- package/dist/providers/fal-generations.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +171 -7
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +1369 -64
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/fal-queue.d.ts +47 -0
- package/dist/providers/fal-queue.d.ts.map +1 -0
- package/dist/providers/fal-queue.js +231 -0
- package/dist/providers/fal-queue.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +148 -8
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +1500 -316
- package/dist/providers/gemini-provider.js.map +1 -1
- package/dist/providers/gmi-provider.d.ts +21 -0
- package/dist/providers/gmi-provider.d.ts.map +1 -0
- package/dist/providers/gmi-provider.js +34 -0
- package/dist/providers/gmi-provider.js.map +1 -0
- package/dist/providers/gpt-image-size.d.ts +3 -0
- package/dist/providers/gpt-image-size.d.ts.map +1 -0
- package/dist/providers/gpt-image-size.js +37 -0
- package/dist/providers/gpt-image-size.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +9 -12
- package/dist/providers/groq-provider.d.ts.map +1 -1
- package/dist/providers/groq-provider.js +19 -33
- package/dist/providers/groq-provider.js.map +1 -1
- package/dist/providers/groq-request.d.ts +38 -0
- package/dist/providers/groq-request.d.ts.map +1 -0
- package/dist/providers/groq-request.js +138 -0
- package/dist/providers/groq-request.js.map +1 -0
- package/dist/providers/higgsfield-provider.d.ts +30 -0
- package/dist/providers/higgsfield-provider.d.ts.map +1 -0
- package/dist/providers/higgsfield-provider.js +131 -0
- package/dist/providers/higgsfield-provider.js.map +1 -0
- package/dist/providers/higgsfield-transport.d.ts +106 -0
- package/dist/providers/higgsfield-transport.d.ts.map +1 -0
- package/dist/providers/higgsfield-transport.js +182 -0
- package/dist/providers/higgsfield-transport.js.map +1 -0
- package/dist/providers/http-transport.d.ts +74 -0
- package/dist/providers/http-transport.d.ts.map +1 -0
- package/dist/providers/http-transport.js +152 -0
- package/dist/providers/http-transport.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +71 -3
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +230 -34
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/image-mime.d.ts +39 -0
- package/dist/providers/image-mime.d.ts.map +1 -0
- package/dist/providers/image-mime.js +111 -0
- package/dist/providers/image-mime.js.map +1 -0
- package/dist/providers/image-ref.d.ts +21 -0
- package/dist/providers/image-ref.d.ts.map +1 -0
- package/dist/providers/image-ref.js +44 -0
- package/dist/providers/image-ref.js.map +1 -0
- package/dist/providers/index.d.ts +84 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +239 -56
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +10 -2
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +16 -7
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +170 -9
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +1176 -228
- package/dist/providers/kie-provider.js.map +1 -1
- package/dist/providers/kie-webhook-registry.d.ts +28 -0
- package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
- package/dist/providers/kie-webhook-registry.js +91 -0
- package/dist/providers/kie-webhook-registry.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +21 -37
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +43 -354
- package/dist/providers/llama-provider.js.map +1 -1
- package/dist/providers/lmstudio-provider.d.ts +4 -7
- package/dist/providers/lmstudio-provider.d.ts.map +1 -1
- package/dist/providers/lmstudio-provider.js +24 -15
- package/dist/providers/lmstudio-provider.js.map +1 -1
- package/dist/providers/manifest-models.d.ts +341 -1
- package/dist/providers/manifest-models.d.ts.map +1 -1
- package/dist/providers/manifest-models.js +1106 -22
- package/dist/providers/manifest-models.js.map +1 -1
- package/dist/providers/media-mime.d.ts +14 -0
- package/dist/providers/media-mime.d.ts.map +1 -0
- package/dist/providers/media-mime.js +35 -0
- package/dist/providers/media-mime.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +14 -1
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +76 -46
- package/dist/providers/meshy-provider.js.map +1 -1
- package/dist/providers/meta-provider.d.ts +22 -0
- package/dist/providers/meta-provider.d.ts.map +1 -0
- package/dist/providers/meta-provider.js +54 -0
- package/dist/providers/meta-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +25 -18
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +211 -72
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +6 -12
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +10 -34
- package/dist/providers/mistral-provider.js.map +1 -1
- package/dist/providers/moonshot-provider.d.ts +11 -15
- package/dist/providers/moonshot-provider.d.ts.map +1 -1
- package/dist/providers/moonshot-provider.js +33 -23
- package/dist/providers/moonshot-provider.js.map +1 -1
- package/dist/providers/node-llama-cpp-provider.d.ts +98 -0
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
- package/dist/providers/node-llama-cpp-provider.js +479 -0
- package/dist/providers/node-llama-cpp-provider.js.map +1 -0
- package/dist/providers/nodetool-provider.d.ts +49 -0
- package/dist/providers/nodetool-provider.d.ts.map +1 -0
- package/dist/providers/nodetool-provider.js +224 -0
- package/dist/providers/nodetool-provider.js.map +1 -0
- package/dist/providers/oauth/browser-launcher.d.ts +23 -0
- package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
- package/dist/providers/oauth/browser-launcher.js +45 -0
- package/dist/providers/oauth/browser-launcher.js.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.js +133 -0
- package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
- package/dist/providers/oauth/claude-code-login.d.ts +124 -0
- package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-login.js +230 -0
- package/dist/providers/oauth/claude-code-login.js.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
- package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
- package/dist/providers/oauth/errors.d.ts +54 -0
- package/dist/providers/oauth/errors.d.ts.map +1 -0
- package/dist/providers/oauth/errors.js +79 -0
- package/dist/providers/oauth/errors.js.map +1 -0
- package/dist/providers/oauth/index.d.ts +105 -0
- package/dist/providers/oauth/index.d.ts.map +1 -0
- package/dist/providers/oauth/index.js +167 -0
- package/dist/providers/oauth/index.js.map +1 -0
- package/dist/providers/oauth/jwt-claims.d.ts +23 -0
- package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
- package/dist/providers/oauth/jwt-claims.js +67 -0
- package/dist/providers/oauth/jwt-claims.js.map +1 -0
- package/dist/providers/oauth/local-callback-server.d.ts +60 -0
- package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
- package/dist/providers/oauth/local-callback-server.js +148 -0
- package/dist/providers/oauth/local-callback-server.js.map +1 -0
- package/dist/providers/oauth/oauth-client.d.ts +55 -0
- package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/oauth-client.js +161 -0
- package/dist/providers/oauth/oauth-client.js.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.js +265 -0
- package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
- package/dist/providers/oauth/pkce-helper.d.ts +43 -0
- package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
- package/dist/providers/oauth/pkce-helper.js +57 -0
- package/dist/providers/oauth/pkce-helper.js.map +1 -0
- package/dist/providers/oauth/redaction.d.ts +22 -0
- package/dist/providers/oauth/redaction.d.ts.map +1 -0
- package/dist/providers/oauth/redaction.js +59 -0
- package/dist/providers/oauth/redaction.js.map +1 -0
- package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
- package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
- package/dist/providers/oauth/secure-credential-store.js +73 -0
- package/dist/providers/oauth/secure-credential-store.js.map +1 -0
- package/dist/providers/oauth/token-store.d.ts +53 -0
- package/dist/providers/oauth/token-store.d.ts.map +1 -0
- package/dist/providers/oauth/token-store.js +78 -0
- package/dist/providers/oauth/token-store.js.map +1 -0
- package/dist/providers/oauth/types.d.ts +64 -0
- package/dist/providers/oauth/types.d.ts.map +1 -0
- package/dist/providers/oauth/types.js +12 -0
- package/dist/providers/oauth/types.js.map +1 -0
- package/dist/providers/object-tracking.d.ts +47 -0
- package/dist/providers/object-tracking.d.ts.map +1 -0
- package/dist/providers/object-tracking.js +46 -0
- package/dist/providers/object-tracking.js.map +1 -0
- package/dist/providers/offline-model-index.d.ts +20 -0
- package/dist/providers/offline-model-index.d.ts.map +1 -0
- package/dist/providers/offline-model-index.js +112 -0
- package/dist/providers/offline-model-index.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +28 -1
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +193 -43
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/providers/openai-compat/client.d.ts +57 -0
- package/dist/providers/openai-compat/client.d.ts.map +1 -0
- package/dist/providers/openai-compat/client.js +157 -0
- package/dist/providers/openai-compat/client.js.map +1 -0
- package/dist/providers/openai-compat/decode.d.ts +36 -0
- package/dist/providers/openai-compat/decode.d.ts.map +1 -0
- package/dist/providers/openai-compat/decode.js +55 -0
- package/dist/providers/openai-compat/decode.js.map +1 -0
- package/dist/providers/openai-compat/errors.d.ts +54 -0
- package/dist/providers/openai-compat/errors.d.ts.map +1 -0
- package/dist/providers/openai-compat/errors.js +144 -0
- package/dist/providers/openai-compat/errors.js.map +1 -0
- package/dist/providers/openai-compat/index.d.ts +8 -0
- package/dist/providers/openai-compat/index.d.ts.map +1 -0
- package/dist/providers/openai-compat/index.js +5 -0
- package/dist/providers/openai-compat/index.js.map +1 -0
- package/dist/providers/openai-compat/sse.d.ts +14 -0
- package/dist/providers/openai-compat/sse.d.ts.map +1 -0
- package/dist/providers/openai-compat/sse.js +69 -0
- package/dist/providers/openai-compat/sse.js.map +1 -0
- package/dist/providers/openai-compat/types.d.ts +75 -0
- package/dist/providers/openai-compat/types.d.ts.map +1 -0
- package/dist/providers/openai-compat/types.js +9 -0
- package/dist/providers/openai-compat/types.js.map +1 -0
- package/dist/providers/openai-compat-provider.d.ts +90 -0
- package/dist/providers/openai-compat-provider.d.ts.map +1 -0
- package/dist/providers/openai-compat-provider.js +282 -0
- package/dist/providers/openai-compat-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +89 -26
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +990 -105
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +6 -12
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +24 -53
- package/dist/providers/openrouter-provider.js.map +1 -1
- package/dist/providers/provider-call-failure.d.ts +39 -0
- package/dist/providers/provider-call-failure.d.ts.map +1 -0
- package/dist/providers/provider-call-failure.js +132 -0
- package/dist/providers/provider-call-failure.js.map +1 -0
- package/dist/providers/provider-error.d.ts +59 -0
- package/dist/providers/provider-error.d.ts.map +1 -0
- package/dist/providers/provider-error.js +165 -0
- package/dist/providers/provider-error.js.map +1 -0
- package/dist/providers/provider-generations.d.ts +99 -0
- package/dist/providers/provider-generations.d.ts.map +1 -0
- package/dist/providers/provider-generations.js +71 -0
- package/dist/providers/provider-generations.js.map +1 -0
- package/dist/providers/provider-queue.d.ts +62 -0
- package/dist/providers/provider-queue.d.ts.map +1 -0
- package/dist/providers/provider-queue.js +28 -0
- package/dist/providers/provider-queue.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +33 -14
- package/dist/providers/provider-registry.d.ts.map +1 -1
- package/dist/providers/provider-registry.js +85 -68
- package/dist/providers/provider-registry.js.map +1 -1
- package/dist/providers/provider-request-log.d.ts +53 -0
- package/dist/providers/provider-request-log.d.ts.map +1 -0
- package/dist/providers/provider-request-log.js +157 -0
- package/dist/providers/provider-request-log.js.map +1 -0
- package/dist/providers/provider-session.d.ts +3 -0
- package/dist/providers/provider-session.d.ts.map +1 -0
- package/dist/providers/provider-session.js +10 -0
- package/dist/providers/provider-session.js.map +1 -0
- package/dist/providers/provider-transport.d.ts +11 -0
- package/dist/providers/provider-transport.d.ts.map +1 -0
- package/dist/providers/provider-transport.js +11 -0
- package/dist/providers/provider-transport.js.map +1 -0
- package/dist/providers/python-provider.d.ts +20 -12
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +185 -25
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +89 -7
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +801 -65
- package/dist/providers/replicate-provider.js.map +1 -1
- package/dist/providers/replicate-retry.d.ts +30 -0
- package/dist/providers/replicate-retry.d.ts.map +1 -0
- package/dist/providers/replicate-retry.js +97 -0
- package/dist/providers/replicate-retry.js.map +1 -0
- package/dist/providers/responses-api.d.ts +27 -0
- package/dist/providers/responses-api.d.ts.map +1 -0
- package/dist/providers/responses-api.js +297 -0
- package/dist/providers/responses-api.js.map +1 -0
- package/dist/providers/reve-provider.d.ts +45 -0
- package/dist/providers/reve-provider.d.ts.map +1 -0
- package/dist/providers/reve-provider.js +159 -0
- package/dist/providers/reve-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +23 -1
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +89 -51
- package/dist/providers/rodin-provider.js.map +1 -1
- package/dist/providers/safe-url.d.ts +70 -0
- package/dist/providers/safe-url.d.ts.map +1 -0
- package/dist/providers/safe-url.js +277 -0
- package/dist/providers/safe-url.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +9 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -1
- package/dist/providers/scripted-provider.js +86 -10
- package/dist/providers/scripted-provider.js.map +1 -1
- package/dist/providers/structured-output.d.ts +42 -0
- package/dist/providers/structured-output.d.ts.map +1 -0
- package/dist/providers/structured-output.js +83 -0
- package/dist/providers/structured-output.js.map +1 -0
- package/dist/providers/together-provider.d.ts +19 -16
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +103 -225
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +44 -0
- package/dist/providers/topaz-provider.d.ts.map +1 -0
- package/dist/providers/topaz-provider.js +239 -0
- package/dist/providers/topaz-provider.js.map +1 -0
- package/dist/providers/types.d.ts +603 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +81 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/useapi-provider.d.ts +27 -0
- package/dist/providers/useapi-provider.d.ts.map +1 -0
- package/dist/providers/useapi-provider.js +266 -0
- package/dist/providers/useapi-provider.js.map +1 -0
- package/dist/providers/video-duration.d.ts +6 -0
- package/dist/providers/video-duration.d.ts.map +1 -0
- package/dist/providers/video-duration.js +63 -0
- package/dist/providers/video-duration.js.map +1 -0
- package/dist/providers/video-frame-fallback.d.ts +39 -0
- package/dist/providers/video-frame-fallback.d.ts.map +1 -0
- package/dist/providers/video-frame-fallback.js +155 -0
- package/dist/providers/video-frame-fallback.js.map +1 -0
- package/dist/providers/video-frames.d.ts +61 -0
- package/dist/providers/video-frames.d.ts.map +1 -0
- package/dist/providers/video-frames.js +208 -0
- package/dist/providers/video-frames.js.map +1 -0
- package/dist/providers/video-mime.d.ts +14 -0
- package/dist/providers/video-mime.d.ts.map +1 -0
- package/dist/providers/video-mime.js +44 -0
- package/dist/providers/video-mime.js.map +1 -0
- package/dist/providers/video-to-audio.d.ts +34 -0
- package/dist/providers/video-to-audio.d.ts.map +1 -0
- package/dist/providers/video-to-audio.js +62 -0
- package/dist/providers/video-to-audio.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +22 -8
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +48 -23
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +10 -2
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +16 -7
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +54 -13
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +299 -22
- package/dist/providers/xai-provider.js.map +1 -1
- package/dist/python-bridge-base.d.ts +358 -0
- package/dist/python-bridge-base.d.ts.map +1 -0
- package/dist/python-bridge-base.js +1557 -0
- package/dist/python-bridge-base.js.map +1 -0
- package/dist/python-bridge-codec.d.ts +28 -0
- package/dist/python-bridge-codec.d.ts.map +1 -0
- package/dist/python-bridge-codec.js +39 -0
- package/dist/python-bridge-codec.js.map +1 -0
- package/dist/python-bridge-factory.d.ts +52 -0
- package/dist/python-bridge-factory.d.ts.map +1 -0
- package/dist/python-bridge-factory.js +69 -0
- package/dist/python-bridge-factory.js.map +1 -0
- package/dist/python-bridge-framing.d.ts +68 -0
- package/dist/python-bridge-framing.d.ts.map +1 -0
- package/dist/python-bridge-framing.js +91 -0
- package/dist/python-bridge-framing.js.map +1 -0
- package/dist/python-bridge-types.d.ts +545 -2
- package/dist/python-bridge-types.d.ts.map +1 -1
- package/dist/python-bridge-types.js +49 -1
- package/dist/python-bridge-types.js.map +1 -1
- package/dist/python-graph-resolver.d.ts +57 -0
- package/dist/python-graph-resolver.d.ts.map +1 -0
- package/dist/python-graph-resolver.js +79 -0
- package/dist/python-graph-resolver.js.map +1 -0
- package/dist/python-node-executor.d.ts +36 -4
- package/dist/python-node-executor.d.ts.map +1 -1
- package/dist/python-node-executor.js +177 -86
- package/dist/python-node-executor.js.map +1 -1
- package/dist/python-stdio-bridge.d.ts +18 -37
- package/dist/python-stdio-bridge.d.ts.map +1 -1
- package/dist/python-stdio-bridge.js +148 -475
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/python-websocket-bridge.d.ts +140 -0
- package/dist/python-websocket-bridge.d.ts.map +1 -0
- package/dist/python-websocket-bridge.js +561 -0
- package/dist/python-websocket-bridge.js.map +1 -0
- package/dist/python-worker-stderr.d.ts +4 -0
- package/dist/python-worker-stderr.d.ts.map +1 -0
- package/dist/python-worker-stderr.js +24 -0
- package/dist/python-worker-stderr.js.map +1 -0
- package/dist/recommended-models.d.ts +2 -2
- package/dist/recommended-models.d.ts.map +1 -1
- package/dist/recommended-models.js +24 -4
- package/dist/recommended-models.js.map +1 -1
- package/dist/recoverable-node-error.d.ts +31 -0
- package/dist/recoverable-node-error.d.ts.map +1 -0
- package/dist/recoverable-node-error.js +37 -0
- package/dist/recoverable-node-error.js.map +1 -0
- package/dist/redact-params.d.ts +13 -0
- package/dist/redact-params.d.ts.map +1 -0
- package/dist/redact-params.js +57 -0
- package/dist/redact-params.js.map +1 -0
- package/dist/sandbox-module-catalog.d.ts +43 -0
- package/dist/sandbox-module-catalog.d.ts.map +1 -0
- package/dist/sandbox-module-catalog.js +25 -0
- package/dist/sandbox-module-catalog.js.map +1 -0
- package/dist/storage-workspace.d.ts +59 -0
- package/dist/storage-workspace.d.ts.map +1 -0
- package/dist/storage-workspace.js +426 -0
- package/dist/storage-workspace.js.map +1 -0
- package/dist/swappable-python-bridge.d.ts +83 -0
- package/dist/swappable-python-bridge.d.ts.map +1 -0
- package/dist/swappable-python-bridge.js +246 -0
- package/dist/swappable-python-bridge.js.map +1 -0
- package/dist/telemetry.d.ts +7 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +23 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/testing.d.ts +81 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +130 -0
- package/dist/testing.js.map +1 -0
- package/dist/token-counter.d.ts +30 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +156 -0
- package/dist/token-counter.js.map +1 -0
- package/dist/trace-exporters.d.ts +10 -0
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +59 -20
- package/dist/trace-exporters.js.map +1 -1
- package/dist/tracing-helpers.d.ts +45 -4
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +62 -19
- package/dist/tracing-helpers.js.map +1 -1
- package/dist/turn-budget.d.ts +278 -0
- package/dist/turn-budget.d.ts.map +1 -0
- package/dist/turn-budget.js +365 -0
- package/dist/turn-budget.js.map +1 -0
- package/dist/variable-channel.d.ts +48 -0
- package/dist/variable-channel.d.ts.map +1 -0
- package/dist/variable-channel.js +110 -0
- package/dist/variable-channel.js.map +1 -0
- package/dist/workspace.d.ts +119 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +112 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +107 -19
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accurate token counting via js-tiktoken.
|
|
3
|
+
*
|
|
4
|
+
* All token counting in the codebase routes through this module so estimates
|
|
5
|
+
* match the BPE tokenization real models use instead of char- or word-based
|
|
6
|
+
* approximations. Uses the `cl100k_base` encoding (GPT-3.5/4 family), a good
|
|
7
|
+
* general-purpose proxy across providers for budgeting, packing and eviction.
|
|
8
|
+
*
|
|
9
|
+
* The encoder is built once and cached — `getEncoding` bundles the BPE ranks,
|
|
10
|
+
* so there is no I/O after the first call.
|
|
11
|
+
*/
|
|
12
|
+
import { getEncoding } from "js-tiktoken";
|
|
13
|
+
let cachedEncoder = null;
|
|
14
|
+
function getEncoder() {
|
|
15
|
+
if (cachedEncoder === null) {
|
|
16
|
+
cachedEncoder = getEncoding("cl100k_base");
|
|
17
|
+
}
|
|
18
|
+
return cachedEncoder;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* js-tiktoken's pure-JS BPE is O(n²) within a single regex "piece", so a long
|
|
22
|
+
* run of characters with no internal whitespace (a hash, base64 blob, or a
|
|
23
|
+
* `"x".repeat(20000)` tool result) can take tens of seconds to encode.
|
|
24
|
+
*
|
|
25
|
+
* To bound that, the input is split *before* each whitespace run so every piece
|
|
26
|
+
* keeps its leading whitespace — these boundaries coincide with cl100k's own
|
|
27
|
+
* regex-piece boundaries, so summing the per-piece counts is exact for normal
|
|
28
|
+
* text. Whitespace-delimited pieces are then packed up to {@link PACK_LIMIT}
|
|
29
|
+
* chars to keep the number of `encode` calls small; a single boundary-free run
|
|
30
|
+
* longer than {@link RUN_LIMIT} is hard-split, capping the worst case (~0.4s
|
|
31
|
+
* for a 50k-char unbroken run instead of minutes).
|
|
32
|
+
*/
|
|
33
|
+
const PACK_LIMIT = 4096;
|
|
34
|
+
const RUN_LIMIT = 128;
|
|
35
|
+
/**
|
|
36
|
+
* Split text into bounded pieces for encoding. Splitting *before* each
|
|
37
|
+
* whitespace run keeps the leading whitespace with each piece, so the cut
|
|
38
|
+
* points coincide with cl100k's own regex-piece boundaries — per-piece token
|
|
39
|
+
* counts therefore sum exactly for normal text. Whitespace-delimited pieces are
|
|
40
|
+
* packed up to {@link PACK_LIMIT} chars to keep the `encode` call count low; a
|
|
41
|
+
* single boundary-free run longer than {@link RUN_LIMIT} is hard-split.
|
|
42
|
+
*/
|
|
43
|
+
function* encodingPieces(text) {
|
|
44
|
+
let buf = "";
|
|
45
|
+
for (const segment of text.split(/(?=\s)/)) {
|
|
46
|
+
if (segment.length > RUN_LIMIT) {
|
|
47
|
+
// A boundary-free run — hard-split it to bound the per-piece BPE cost.
|
|
48
|
+
if (buf) {
|
|
49
|
+
yield buf;
|
|
50
|
+
buf = "";
|
|
51
|
+
}
|
|
52
|
+
for (let i = 0; i < segment.length;) {
|
|
53
|
+
let end = Math.min(i + RUN_LIMIT, segment.length);
|
|
54
|
+
// Never cut between a surrogate pair: if the last code unit of the
|
|
55
|
+
// slice is a high surrogate, back off by one so the astral character
|
|
56
|
+
// stays whole. Splitting it would encode each half as U+FFFD, both
|
|
57
|
+
// overcounting tokens and leaving a replacement char in truncated text.
|
|
58
|
+
if (end < segment.length &&
|
|
59
|
+
segment.charCodeAt(end - 1) >= 0xd800 &&
|
|
60
|
+
segment.charCodeAt(end - 1) <= 0xdbff) {
|
|
61
|
+
end -= 1;
|
|
62
|
+
}
|
|
63
|
+
yield segment.slice(i, end);
|
|
64
|
+
i = end;
|
|
65
|
+
}
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (buf.length + segment.length > PACK_LIMIT) {
|
|
69
|
+
yield buf;
|
|
70
|
+
buf = segment;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
buf += segment;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (buf) {
|
|
77
|
+
yield buf;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Count BPE tokens in a string. Returns 0 for empty/nullish input.
|
|
82
|
+
*/
|
|
83
|
+
export function countTokens(text) {
|
|
84
|
+
if (!text)
|
|
85
|
+
return 0;
|
|
86
|
+
const encoder = getEncoder();
|
|
87
|
+
let total = 0;
|
|
88
|
+
for (const piece of encodingPieces(text)) {
|
|
89
|
+
total += encoder.encode(piece, [], []).length;
|
|
90
|
+
}
|
|
91
|
+
return total;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Truncate text to at most `maxTokens` BPE tokens, decoding the kept prefix
|
|
95
|
+
* back to a string. Returns "" when `maxTokens <= 0`.
|
|
96
|
+
*
|
|
97
|
+
* Encodes piece-by-piece (same splitting as {@link countTokens}) and stops once
|
|
98
|
+
* the budget is reached, so it never feeds a huge boundary-free run to `encode`
|
|
99
|
+
* in one shot — the input is bounded the same way the count is.
|
|
100
|
+
*
|
|
101
|
+
* A token boundary can fall in the middle of a multi-byte UTF-8 character, so
|
|
102
|
+
* decoding the kept prefix can leave a trailing U+FFFD replacement character or
|
|
103
|
+
* a lone UTF-16 surrogate. Any such trailing partial character is stripped so
|
|
104
|
+
* the result is always well-formed text.
|
|
105
|
+
*/
|
|
106
|
+
export function truncateToTokens(text, maxTokens) {
|
|
107
|
+
if (maxTokens <= 0)
|
|
108
|
+
return "";
|
|
109
|
+
const encoder = getEncoder();
|
|
110
|
+
const kept = [];
|
|
111
|
+
let truncated = false;
|
|
112
|
+
for (const piece of encodingPieces(text)) {
|
|
113
|
+
for (const token of encoder.encode(piece, [], [])) {
|
|
114
|
+
if (kept.length >= maxTokens) {
|
|
115
|
+
truncated = true;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
kept.push(token);
|
|
119
|
+
}
|
|
120
|
+
if (truncated)
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
// Within budget: return the original text untouched (no decode round-trip).
|
|
124
|
+
if (!truncated)
|
|
125
|
+
return text;
|
|
126
|
+
return stripTrailingPartialChar(encoder.decode(kept));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Drop a trailing partial character left by cutting at a token boundary: a
|
|
130
|
+
* U+FFFD replacement char (an incomplete UTF-8 sequence), a lone high surrogate
|
|
131
|
+
* (an incomplete UTF-16 pair), or a lone low surrogate not preceded by a high
|
|
132
|
+
* surrogate (a dangling second half of a pair).
|
|
133
|
+
*/
|
|
134
|
+
function stripTrailingPartialChar(text) {
|
|
135
|
+
let end = text.length;
|
|
136
|
+
while (end > 0) {
|
|
137
|
+
const code = text.charCodeAt(end - 1);
|
|
138
|
+
if (code === 0xfffd || (code >= 0xd800 && code <= 0xdbff)) {
|
|
139
|
+
end -= 1;
|
|
140
|
+
}
|
|
141
|
+
else if (code >= 0xdc00 && code <= 0xdfff) {
|
|
142
|
+
// Trailing low surrogate: only a valid pair if preceded by a high
|
|
143
|
+
// surrogate. If it is, leave the pair intact; otherwise strip the lone
|
|
144
|
+
// low surrogate.
|
|
145
|
+
const prev = end >= 2 ? text.charCodeAt(end - 2) : 0;
|
|
146
|
+
if (prev >= 0xd800 && prev <= 0xdbff)
|
|
147
|
+
break;
|
|
148
|
+
end -= 1;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return end === text.length ? text : text.slice(0, end);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=token-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* Both produce the same structured shape, so an analyzer agent reading either
|
|
9
9
|
* file or stdout output gets identical fields.
|
|
10
10
|
*/
|
|
11
|
+
type WriteStream = ReturnType<typeof import("node:fs").createWriteStream>;
|
|
11
12
|
import type { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-base";
|
|
12
13
|
import { type ExportResult } from "@opentelemetry/core";
|
|
13
14
|
/**
|
|
@@ -57,6 +58,14 @@ export declare class JsonlFileSpanExporter implements SpanExporter {
|
|
|
57
58
|
shutdown(): Promise<void>;
|
|
58
59
|
forceFlush(): Promise<void>;
|
|
59
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Write a single line to a WriteStream, respecting backpressure.
|
|
63
|
+
*
|
|
64
|
+
* Resolves once the write callback has fired AND the stream has drained
|
|
65
|
+
* (if `write()` returned false). Rejects on any stream error during the
|
|
66
|
+
* write — caller is responsible for re-attaching listeners afterwards.
|
|
67
|
+
*/
|
|
68
|
+
export declare function writeLine(stream: WriteStream, line: string): Promise<void>;
|
|
60
69
|
export type StdoutFormat = "pretty" | "json";
|
|
61
70
|
/**
|
|
62
71
|
* Write spans to stdout. `format: "json"` emits JSONL; `format: "pretty"`
|
|
@@ -69,4 +78,5 @@ export declare class StdoutSpanExporter implements SpanExporter {
|
|
|
69
78
|
shutdown(): Promise<void>;
|
|
70
79
|
forceFlush(): Promise<void>;
|
|
71
80
|
}
|
|
81
|
+
export {};
|
|
72
82
|
//# sourceMappingURL=trace-exporters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-exporters.d.ts","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"trace-exporters.d.ts","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,KAAK,WAAW,GAAG,UAAU,CAAC,cAAc,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAiC1E,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAgBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CA2B5D;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACxD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAgB;IAEnC,YAAY,QAAQ,EAAE,MAAM,EAK3B;IAED,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAkBN;IAGK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAS9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAEzC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,GAAE,YAAuB,EAAI;IAEhE,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAcN;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF"}
|
package/dist/trace-exporters.js
CHANGED
|
@@ -8,9 +8,38 @@
|
|
|
8
8
|
* Both produce the same structured shape, so an analyzer agent reading either
|
|
9
9
|
* file or stdout output gets identical fields.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
import { getNodeBuiltinSync } from "@nodetool-ai/config";
|
|
12
|
+
// Trace-exporter file/stream APIs require Node — lazy-load so this
|
|
13
|
+
// module loads on non-Node runtimes (where file exporters are unused).
|
|
14
|
+
const nodeFs = getNodeBuiltinSync("node:fs");
|
|
15
|
+
const nodeFsP = getNodeBuiltinSync("node:fs/promises");
|
|
16
|
+
const nodePath = getNodeBuiltinSync("node:path");
|
|
17
|
+
// The `!node*` guards below only fire in a non-Node runtime (browser/edge),
|
|
18
|
+
// which the test environment never is — unreachable here, so suppressed.
|
|
19
|
+
function createWriteStream(...args) {
|
|
20
|
+
// Stryker disable all
|
|
21
|
+
if (!nodeFs) {
|
|
22
|
+
throw new Error("JsonlFileSpanExporter requires node:fs (Node-only feature)");
|
|
23
|
+
}
|
|
24
|
+
// Stryker restore all
|
|
25
|
+
return nodeFs.createWriteStream(...args);
|
|
26
|
+
}
|
|
27
|
+
async function mkdir(...args) {
|
|
28
|
+
// Stryker disable all
|
|
29
|
+
if (!nodeFsP) {
|
|
30
|
+
throw new Error("File span exporter requires node:fs/promises");
|
|
31
|
+
}
|
|
32
|
+
// Stryker restore all
|
|
33
|
+
return nodeFsP.mkdir(...args);
|
|
34
|
+
}
|
|
35
|
+
function dirname(p) {
|
|
36
|
+
// Stryker disable all
|
|
37
|
+
if (!nodePath) {
|
|
38
|
+
throw new Error("File span exporter requires node:path");
|
|
39
|
+
}
|
|
40
|
+
// Stryker restore all
|
|
41
|
+
return nodePath.dirname(p);
|
|
42
|
+
}
|
|
14
43
|
import { ExportResultCode } from "@opentelemetry/core";
|
|
15
44
|
const SPAN_KINDS = ["INTERNAL", "SERVER", "CLIENT", "PRODUCER", "CONSUMER"];
|
|
16
45
|
const STATUS_CODES = ["UNSET", "OK", "ERROR"];
|
|
@@ -28,6 +57,10 @@ export function spanToRecord(span) {
|
|
|
28
57
|
const ctx = span.spanContext();
|
|
29
58
|
const startMs = hrTimeToMs(span.startTime);
|
|
30
59
|
const endMs = hrTimeToMs(span.endTime);
|
|
60
|
+
const statusCode = { code: STATUS_CODES[span.status.code] ?? "UNSET" };
|
|
61
|
+
const status = span.status.message
|
|
62
|
+
? { ...statusCode, message: span.status.message }
|
|
63
|
+
: statusCode;
|
|
31
64
|
return {
|
|
32
65
|
trace_id: ctx.traceId,
|
|
33
66
|
span_id: ctx.spanId,
|
|
@@ -37,16 +70,14 @@ export function spanToRecord(span) {
|
|
|
37
70
|
start_time_ms: startMs,
|
|
38
71
|
end_time_ms: endMs,
|
|
39
72
|
duration_ms: endMs - startMs,
|
|
40
|
-
status
|
|
41
|
-
code: STATUS_CODES[span.status.code] ?? "UNSET",
|
|
42
|
-
...(span.status.message ? { message: span.status.message } : {})
|
|
43
|
-
},
|
|
73
|
+
status,
|
|
44
74
|
attributes: { ...span.attributes },
|
|
45
|
-
events: span.events.map((e) =>
|
|
46
|
-
name: e.name,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
75
|
+
events: span.events.map((e) => {
|
|
76
|
+
const event = { name: e.name, time_ms: hrTimeToMs(e.time) };
|
|
77
|
+
return e.attributes
|
|
78
|
+
? { ...event, attributes: { ...e.attributes } }
|
|
79
|
+
: event;
|
|
80
|
+
}),
|
|
50
81
|
resource: { ...span.resource.attributes }
|
|
51
82
|
};
|
|
52
83
|
}
|
|
@@ -72,6 +103,9 @@ export class JsonlFileSpanExporter {
|
|
|
72
103
|
export(spans, resultCallback) {
|
|
73
104
|
void this.streamReady
|
|
74
105
|
.then(async () => {
|
|
106
|
+
// Unreachable: streamReady only resolves after `this.stream` is assigned;
|
|
107
|
+
// if init failed it rejects and we go to .catch instead. Defensive guard.
|
|
108
|
+
// Stryker disable next-line ConditionalExpression,StringLiteral
|
|
75
109
|
if (!this.stream)
|
|
76
110
|
throw new Error("trace stream not initialized");
|
|
77
111
|
for (const span of spans) {
|
|
@@ -83,9 +117,13 @@ export class JsonlFileSpanExporter {
|
|
|
83
117
|
resultCallback({ code: ExportResultCode.FAILED, error: err });
|
|
84
118
|
});
|
|
85
119
|
}
|
|
120
|
+
// Stryker disable next-line BlockStatement: shutdown only closes the stream; writeLine already flushed every line to the fd, so emptying it doesn't change observable file output (resource cleanup, not behaviour).
|
|
86
121
|
async shutdown() {
|
|
87
122
|
await this.streamReady;
|
|
88
123
|
await new Promise((resolve) => {
|
|
124
|
+
// Unreachable in practice: if streamReady resolved, the stream is set; if it
|
|
125
|
+
// rejected, the await above already threw. Defensive guard.
|
|
126
|
+
// Stryker disable next-line ConditionalExpression,BooleanLiteral
|
|
89
127
|
if (!this.stream)
|
|
90
128
|
return resolve();
|
|
91
129
|
this.stream.end(resolve);
|
|
@@ -102,7 +140,7 @@ export class JsonlFileSpanExporter {
|
|
|
102
140
|
* (if `write()` returned false). Rejects on any stream error during the
|
|
103
141
|
* write — caller is responsible for re-attaching listeners afterwards.
|
|
104
142
|
*/
|
|
105
|
-
function writeLine(stream, line) {
|
|
143
|
+
export function writeLine(stream, line) {
|
|
106
144
|
return new Promise((resolve, reject) => {
|
|
107
145
|
let written = false;
|
|
108
146
|
let drained = false;
|
|
@@ -118,6 +156,7 @@ function writeLine(stream, line) {
|
|
|
118
156
|
const maybeDone = () => {
|
|
119
157
|
if (written && (!needsDrain || drained)) {
|
|
120
158
|
stream.off("error", onError);
|
|
159
|
+
// Stryker disable next-line StringLiteral: redundant — resolving under backpressure means the once("drain") listener already fired and auto-removed itself, so there is never a drain listener to remove here.
|
|
121
160
|
stream.off("drain", onDrain);
|
|
122
161
|
resolve();
|
|
123
162
|
}
|
|
@@ -141,6 +180,7 @@ function writeLine(stream, line) {
|
|
|
141
180
|
*/
|
|
142
181
|
export class StdoutSpanExporter {
|
|
143
182
|
format;
|
|
183
|
+
// Stryker disable next-line StringLiteral: only `=== "json"` is checked, so any non-"json" default (incl. "") yields pretty — the default value is equivalent.
|
|
144
184
|
constructor(format = "pretty") {
|
|
145
185
|
this.format = format;
|
|
146
186
|
}
|
|
@@ -172,8 +212,10 @@ const COLOR = {
|
|
|
172
212
|
dim: "\x1b[2m",
|
|
173
213
|
red: "\x1b[31m",
|
|
174
214
|
yellow: "\x1b[33m",
|
|
215
|
+
// Stryker disable next-line StringLiteral: `green`/`bold` are part of the palette but unused by formatPretty; kept for completeness.
|
|
175
216
|
green: "\x1b[32m",
|
|
176
217
|
cyan: "\x1b[36m",
|
|
218
|
+
// Stryker disable next-line StringLiteral: see above.
|
|
177
219
|
bold: "\x1b[1m",
|
|
178
220
|
reset: "\x1b[0m"
|
|
179
221
|
};
|
|
@@ -181,12 +223,9 @@ function colorize(s, color) {
|
|
|
181
223
|
return process.stdout.isTTY ? `${COLOR[color]}${s}${COLOR.reset}` : s;
|
|
182
224
|
}
|
|
183
225
|
function formatPretty(r) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
: r.status.code === "OK"
|
|
188
|
-
? "green"
|
|
189
|
-
: "dim";
|
|
226
|
+
// duration_ms is already integer-rounded by hrTimeToMs, so toFixed(1) only
|
|
227
|
+
// ever appended a meaningless ".0".
|
|
228
|
+
const dur = `${r.duration_ms}ms`;
|
|
190
229
|
const tags = [];
|
|
191
230
|
// Surface the most useful attributes inline, in priority order.
|
|
192
231
|
const inlineKeys = [
|
|
@@ -206,7 +245,7 @@ function formatPretty(r) {
|
|
|
206
245
|
}
|
|
207
246
|
}
|
|
208
247
|
const status = r.status.code === "ERROR"
|
|
209
|
-
? colorize(`[${r.status.code}${r.status.message ? `: ${r.status.message}` : ""}]`,
|
|
248
|
+
? colorize(`[${r.status.code}${r.status.message ? `: ${r.status.message}` : ""}]`, "red")
|
|
210
249
|
: "";
|
|
211
250
|
return `${colorize(r.name, "cyan")} ${colorize(dur, "yellow")} ${tags.join(" ")} ${status}`.trimEnd();
|
|
212
251
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-exporters.js","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"trace-exporters.js","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,20 +26,58 @@ export interface LlmUsage {
|
|
|
26
26
|
inputTokens: number;
|
|
27
27
|
outputTokens: number;
|
|
28
28
|
cachedInputTokens?: number;
|
|
29
|
-
|
|
29
|
+
cacheWriteTokens?: number;
|
|
30
|
+
/** Cost of the call in US dollars. */
|
|
30
31
|
cost?: number;
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
34
|
+
* Per-call slot carrying the in-flight LLM call's side state: token usage and
|
|
35
|
+
* the exact request payload sent to the provider.
|
|
36
|
+
*
|
|
37
|
+
* Providers' `trackUsage` adds usage via {@link setLastUsage}; providers'
|
|
38
|
+
* `recordRequestPayload` writes the wire payload via {@link setLastRequest}.
|
|
39
|
+
* The traced wrapper reads both back ({@link consumeLastUsage},
|
|
40
|
+
* {@link peekLastRequest}) so it can attach usage to its span and, on failure,
|
|
41
|
+
* log precisely what was sent. Repeated writes in one call are summed so
|
|
42
|
+
* continuation requests keep their full token and cost totals.
|
|
43
|
+
*
|
|
44
|
+
* We use AsyncLocalStorage rather than an instance field so concurrent calls
|
|
45
|
+
* on the same provider instance don't clobber each other.
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* The exact body a provider sent, held only so a failure log can sanitize and
|
|
49
|
+
* print it. Every provider records an object (its SDK's request params).
|
|
50
|
+
*/
|
|
51
|
+
export type RecordedRequestPayload = object | null;
|
|
52
|
+
/**
|
|
53
|
+
* Run `fn` inside a fresh per-call slot. `consumeLastUsage()` /
|
|
54
|
+
* `peekLastRequest()` afterwards return whatever the deepest provider hook
|
|
55
|
+
* wrote.
|
|
35
56
|
*/
|
|
36
57
|
export declare function withUsageCapture<T>(fn: () => Promise<T>): Promise<T>;
|
|
37
|
-
/** Provider hook:
|
|
58
|
+
/** Provider hook: add token usage for the in-flight LLM call. */
|
|
38
59
|
export declare function setLastUsage(usage: LlmUsage): void;
|
|
39
60
|
/** Read and clear the most recent usage recorded in this async context. */
|
|
40
61
|
export declare function consumeLastUsage(): LlmUsage | null;
|
|
41
62
|
/** Read (without clearing) the most recent usage in this async context. */
|
|
42
63
|
export declare function peekLastUsage(): LlmUsage | null;
|
|
64
|
+
/**
|
|
65
|
+
* Provider hook: record the exact payload sent to the provider for the
|
|
66
|
+
* in-flight LLM call. The traced wrapper reads this back via
|
|
67
|
+
* {@link peekLastRequest} to log precisely what was sent on failure.
|
|
68
|
+
*/
|
|
69
|
+
export declare function setLastRequest(request: unknown): void;
|
|
70
|
+
/** Read (without clearing) the request payload recorded in this async context. */
|
|
71
|
+
export declare function peekLastRequest(): RecordedRequestPayload;
|
|
72
|
+
/**
|
|
73
|
+
* Run a non-chat modality call (image/video/audio/3D/embedding) inside a fresh
|
|
74
|
+
* per-call slot so `recordRequestPayload` and `peekLastRequest` work the same
|
|
75
|
+
* way they do for chat. `fn` receives whether a modality capture was already
|
|
76
|
+
* active in this async context: nested calls (a batch helper delegating to its
|
|
77
|
+
* singular method) reuse the parent slot and pass `true`, so the caller can log
|
|
78
|
+
* a failure exactly once — at the outermost call.
|
|
79
|
+
*/
|
|
80
|
+
export declare function withModalityCapture<T>(fn: (alreadyActive: boolean) => Promise<T>): Promise<T>;
|
|
43
81
|
/**
|
|
44
82
|
* Create a per-call usage slot that survives across async-generator yields.
|
|
45
83
|
*
|
|
@@ -51,7 +89,10 @@ export declare function peekLastUsage(): LlmUsage | null;
|
|
|
51
89
|
export declare function createUsageSlot(): {
|
|
52
90
|
runInSlot: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
53
91
|
getUsage: () => LlmUsage | null;
|
|
92
|
+
getRequest: () => RecordedRequestPayload;
|
|
54
93
|
};
|
|
94
|
+
/** Wrap a function in an OTel span; pass-through if telemetry is disabled. */
|
|
95
|
+
export declare function withSpan<T>(name: string, attributes: Record<string, unknown>, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
55
96
|
/**
|
|
56
97
|
* Wrap an async generator in an OTel span. Each `next()` call runs in the
|
|
57
98
|
* span's context, so any spans created inside `genFactory` nest under it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing-helpers.d.ts","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"tracing-helpers.d.ts","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/tracing-helpers.js
CHANGED
|
@@ -19,31 +19,40 @@
|
|
|
19
19
|
* Child spans nest automatically because OTel's `startActiveSpan` makes the
|
|
20
20
|
* span active in AsyncLocalStorage for the duration of the callback.
|
|
21
21
|
*/
|
|
22
|
-
|
|
22
|
+
// `node:async_hooks` is Node-only; in browser/Edge this is a mutable holder,
|
|
23
|
+
// so usage tracking loses concurrency safety there but stays functional.
|
|
24
|
+
import { AsyncLocalStorage } from "./async-local-storage.js";
|
|
23
25
|
import { SpanStatusCode, context as otelContext, trace as otelTrace } from "@opentelemetry/api";
|
|
24
26
|
import { getTracer } from "./telemetry.js";
|
|
25
|
-
|
|
26
|
-
* Per-call usage slot. Providers' `trackUsage` writes into the active slot
|
|
27
|
-
* via {@link setLastUsage}, and the traced wrapper reads it via
|
|
28
|
-
* {@link consumeLastUsage} so it can attach the numbers to its span and
|
|
29
|
-
* `llm_call` event.
|
|
30
|
-
*
|
|
31
|
-
* We use AsyncLocalStorage rather than an instance field so concurrent calls
|
|
32
|
-
* on the same provider instance don't clobber each other.
|
|
33
|
-
*/
|
|
27
|
+
import { recordInvocationCost } from "./invocation-account.js";
|
|
34
28
|
const usageStore = new AsyncLocalStorage();
|
|
35
29
|
/**
|
|
36
|
-
* Run `fn` inside a fresh
|
|
37
|
-
* whatever the deepest
|
|
30
|
+
* Run `fn` inside a fresh per-call slot. `consumeLastUsage()` /
|
|
31
|
+
* `peekLastRequest()` afterwards return whatever the deepest provider hook
|
|
32
|
+
* wrote.
|
|
38
33
|
*/
|
|
39
34
|
export function withUsageCapture(fn) {
|
|
40
|
-
return usageStore.run({ usage: null }, fn);
|
|
35
|
+
return usageStore.run({ usage: null, request: null }, fn);
|
|
41
36
|
}
|
|
42
|
-
/** Provider hook:
|
|
37
|
+
/** Provider hook: add token usage for the in-flight LLM call. */
|
|
43
38
|
export function setLastUsage(usage) {
|
|
39
|
+
// Charge the enclosing node invocation before the slot check: an LLM call
|
|
40
|
+
// made outside a capture slot still cost money, and retry safety turns on
|
|
41
|
+
// whether this invocation spent anything.
|
|
42
|
+
recordInvocationCost(usage.cost);
|
|
44
43
|
const slot = usageStore.getStore();
|
|
45
|
-
if (slot)
|
|
46
|
-
|
|
44
|
+
if (!slot)
|
|
45
|
+
return;
|
|
46
|
+
const previous = slot.usage;
|
|
47
|
+
slot.usage = previous
|
|
48
|
+
? {
|
|
49
|
+
inputTokens: previous.inputTokens + usage.inputTokens,
|
|
50
|
+
outputTokens: previous.outputTokens + usage.outputTokens,
|
|
51
|
+
cachedInputTokens: (previous.cachedInputTokens ?? 0) + (usage.cachedInputTokens ?? 0),
|
|
52
|
+
cacheWriteTokens: (previous.cacheWriteTokens ?? 0) + (usage.cacheWriteTokens ?? 0),
|
|
53
|
+
cost: (previous.cost ?? 0) + (usage.cost ?? 0)
|
|
54
|
+
}
|
|
55
|
+
: usage;
|
|
47
56
|
}
|
|
48
57
|
/** Read and clear the most recent usage recorded in this async context. */
|
|
49
58
|
export function consumeLastUsage() {
|
|
@@ -58,6 +67,39 @@ export function consumeLastUsage() {
|
|
|
58
67
|
export function peekLastUsage() {
|
|
59
68
|
return usageStore.getStore()?.usage ?? null;
|
|
60
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Provider hook: record the exact payload sent to the provider for the
|
|
72
|
+
* in-flight LLM call. The traced wrapper reads this back via
|
|
73
|
+
* {@link peekLastRequest} to log precisely what was sent on failure.
|
|
74
|
+
*/
|
|
75
|
+
export function setLastRequest(request) {
|
|
76
|
+
const slot = usageStore.getStore();
|
|
77
|
+
// SAFETY: every provider records its SDK's request-params object here.
|
|
78
|
+
// HOLDOUT (anti-slop/no-unknown-parameters): the honest type is
|
|
79
|
+
// `RecordedRequestPayload` (`object | null`), which the enforced
|
|
80
|
+
// `no-object-parameters` rule refuses; no named union covers every
|
|
81
|
+
// provider SDK's request-params type.
|
|
82
|
+
if (slot)
|
|
83
|
+
slot.request = request;
|
|
84
|
+
}
|
|
85
|
+
/** Read (without clearing) the request payload recorded in this async context. */
|
|
86
|
+
export function peekLastRequest() {
|
|
87
|
+
return usageStore.getStore()?.request ?? null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Run a non-chat modality call (image/video/audio/3D/embedding) inside a fresh
|
|
91
|
+
* per-call slot so `recordRequestPayload` and `peekLastRequest` work the same
|
|
92
|
+
* way they do for chat. `fn` receives whether a modality capture was already
|
|
93
|
+
* active in this async context: nested calls (a batch helper delegating to its
|
|
94
|
+
* singular method) reuse the parent slot and pass `true`, so the caller can log
|
|
95
|
+
* a failure exactly once — at the outermost call.
|
|
96
|
+
*/
|
|
97
|
+
export function withModalityCapture(fn) {
|
|
98
|
+
const existing = usageStore.getStore();
|
|
99
|
+
if (existing?.modality)
|
|
100
|
+
return fn(true);
|
|
101
|
+
return usageStore.run({ usage: null, request: null, modality: true }, () => fn(false));
|
|
102
|
+
}
|
|
61
103
|
/**
|
|
62
104
|
* Create a per-call usage slot that survives across async-generator yields.
|
|
63
105
|
*
|
|
@@ -67,14 +109,15 @@ export function peekLastUsage() {
|
|
|
67
109
|
* `setLastUsage()` call wrote.
|
|
68
110
|
*/
|
|
69
111
|
export function createUsageSlot() {
|
|
70
|
-
const slot = { usage: null };
|
|
112
|
+
const slot = { usage: null, request: null };
|
|
71
113
|
return {
|
|
72
114
|
runInSlot: (fn) => usageStore.run(slot, fn),
|
|
73
|
-
getUsage: () => slot.usage
|
|
115
|
+
getUsage: () => slot.usage,
|
|
116
|
+
getRequest: () => slot.request
|
|
74
117
|
};
|
|
75
118
|
}
|
|
76
119
|
/** Wrap a function in an OTel span; pass-through if telemetry is disabled. */
|
|
77
|
-
async function withSpan(name, attributes, fn) {
|
|
120
|
+
export async function withSpan(name, attributes, fn) {
|
|
78
121
|
const tracer = getTracer();
|
|
79
122
|
if (!tracer)
|
|
80
123
|
return fn(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing-helpers.js","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"tracing-helpers.js","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"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"}
|