@code-yeongyu/senpi-ai 2026.7.25-2
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 +1663 -0
- package/dist/api/anthropic-messages.d.ts +71 -0
- package/dist/api/anthropic-messages.d.ts.map +1 -0
- package/dist/api/anthropic-messages.js +1626 -0
- package/dist/api/anthropic-messages.js.map +1 -0
- package/dist/api/anthropic-messages.lazy.d.ts +3 -0
- package/dist/api/anthropic-messages.lazy.d.ts.map +1 -0
- package/dist/api/anthropic-messages.lazy.js +3 -0
- package/dist/api/anthropic-messages.lazy.js.map +1 -0
- package/dist/api/azure-openai-responses.d.ts +15 -0
- package/dist/api/azure-openai-responses.d.ts.map +1 -0
- package/dist/api/azure-openai-responses.js +242 -0
- package/dist/api/azure-openai-responses.js.map +1 -0
- package/dist/api/azure-openai-responses.lazy.d.ts +3 -0
- package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -0
- package/dist/api/azure-openai-responses.lazy.js +3 -0
- package/dist/api/azure-openai-responses.lazy.js.map +1 -0
- package/dist/api/bedrock-converse-stream.d.ts +38 -0
- package/dist/api/bedrock-converse-stream.d.ts.map +1 -0
- package/dist/api/bedrock-converse-stream.js +939 -0
- package/dist/api/bedrock-converse-stream.js.map +1 -0
- package/dist/api/bedrock-converse-stream.lazy.d.ts +9 -0
- package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -0
- package/dist/api/bedrock-converse-stream.lazy.js +30 -0
- package/dist/api/bedrock-converse-stream.lazy.js.map +1 -0
- package/dist/api/cloudflare.d.ts +12 -0
- package/dist/api/cloudflare.d.ts.map +1 -0
- package/dist/api/cloudflare.js +22 -0
- package/dist/api/cloudflare.js.map +1 -0
- package/dist/api/constrained-sampling.d.ts +17 -0
- package/dist/api/constrained-sampling.d.ts.map +1 -0
- package/dist/api/constrained-sampling.js +104 -0
- package/dist/api/constrained-sampling.js.map +1 -0
- package/dist/api/github-copilot-headers.d.ts +8 -0
- package/dist/api/github-copilot-headers.d.ts.map +1 -0
- package/dist/api/github-copilot-headers.js +29 -0
- package/dist/api/github-copilot-headers.js.map +1 -0
- package/dist/api/google-generative-ai.d.ts +13 -0
- package/dist/api/google-generative-ai.d.ts.map +1 -0
- package/dist/api/google-generative-ai.js +440 -0
- package/dist/api/google-generative-ai.js.map +1 -0
- package/dist/api/google-generative-ai.lazy.d.ts +3 -0
- package/dist/api/google-generative-ai.lazy.d.ts.map +1 -0
- package/dist/api/google-generative-ai.lazy.js +3 -0
- package/dist/api/google-generative-ai.lazy.js.map +1 -0
- package/dist/api/google-shared.d.ts +70 -0
- package/dist/api/google-shared.d.ts.map +1 -0
- package/dist/api/google-shared.js +360 -0
- package/dist/api/google-shared.js.map +1 -0
- package/dist/api/google-vertex.d.ts +15 -0
- package/dist/api/google-vertex.d.ts.map +1 -0
- package/dist/api/google-vertex.js +485 -0
- package/dist/api/google-vertex.js.map +1 -0
- package/dist/api/google-vertex.lazy.d.ts +3 -0
- package/dist/api/google-vertex.lazy.d.ts.map +1 -0
- package/dist/api/google-vertex.lazy.js +3 -0
- package/dist/api/google-vertex.lazy.js.map +1 -0
- package/dist/api/lazy.d.ts +15 -0
- package/dist/api/lazy.d.ts.map +1 -0
- package/dist/api/lazy.js +85 -0
- package/dist/api/lazy.js.map +1 -0
- package/dist/api/mistral-conversations.d.ts +25 -0
- package/dist/api/mistral-conversations.d.ts.map +1 -0
- package/dist/api/mistral-conversations.js +566 -0
- package/dist/api/mistral-conversations.js.map +1 -0
- package/dist/api/mistral-conversations.lazy.d.ts +3 -0
- package/dist/api/mistral-conversations.lazy.d.ts.map +1 -0
- package/dist/api/mistral-conversations.lazy.js +3 -0
- package/dist/api/mistral-conversations.lazy.js.map +1 -0
- package/dist/api/openai-codex-responses.d.ts +31 -0
- package/dist/api/openai-codex-responses.d.ts.map +1 -0
- package/dist/api/openai-codex-responses.js +1326 -0
- package/dist/api/openai-codex-responses.js.map +1 -0
- package/dist/api/openai-codex-responses.lazy.d.ts +3 -0
- package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -0
- package/dist/api/openai-codex-responses.lazy.js +3 -0
- package/dist/api/openai-codex-responses.lazy.js.map +1 -0
- package/dist/api/openai-completions.d.ts +22 -0
- package/dist/api/openai-completions.d.ts.map +1 -0
- package/dist/api/openai-completions.js +1384 -0
- package/dist/api/openai-completions.js.map +1 -0
- package/dist/api/openai-completions.lazy.d.ts +3 -0
- package/dist/api/openai-completions.lazy.d.ts.map +1 -0
- package/dist/api/openai-completions.lazy.js +3 -0
- package/dist/api/openai-completions.lazy.js.map +1 -0
- package/dist/api/openai-prompt-cache.d.ts +3 -0
- package/dist/api/openai-prompt-cache.d.ts.map +1 -0
- package/dist/api/openai-prompt-cache.js +10 -0
- package/dist/api/openai-prompt-cache.js.map +1 -0
- package/dist/api/openai-responses-shared.d.ts +29 -0
- package/dist/api/openai-responses-shared.d.ts.map +1 -0
- package/dist/api/openai-responses-shared.js +730 -0
- package/dist/api/openai-responses-shared.js.map +1 -0
- package/dist/api/openai-responses.d.ts +14 -0
- package/dist/api/openai-responses.d.ts.map +1 -0
- package/dist/api/openai-responses.js +696 -0
- package/dist/api/openai-responses.js.map +1 -0
- package/dist/api/openai-responses.lazy.d.ts +3 -0
- package/dist/api/openai-responses.lazy.d.ts.map +1 -0
- package/dist/api/openai-responses.lazy.js +3 -0
- package/dist/api/openai-responses.lazy.js.map +1 -0
- package/dist/api/openrouter-images.d.ts +3 -0
- package/dist/api/openrouter-images.d.ts.map +1 -0
- package/dist/api/openrouter-images.js +131 -0
- package/dist/api/openrouter-images.js.map +1 -0
- package/dist/api/openrouter-images.lazy.d.ts +3 -0
- package/dist/api/openrouter-images.lazy.d.ts.map +1 -0
- package/dist/api/openrouter-images.lazy.js +4 -0
- package/dist/api/openrouter-images.lazy.js.map +1 -0
- package/dist/api/pi-messages.d.ts +97 -0
- package/dist/api/pi-messages.d.ts.map +1 -0
- package/dist/api/pi-messages.js +305 -0
- package/dist/api/pi-messages.js.map +1 -0
- package/dist/api/pi-messages.lazy.d.ts +3 -0
- package/dist/api/pi-messages.lazy.d.ts.map +1 -0
- package/dist/api/pi-messages.lazy.js +3 -0
- package/dist/api/pi-messages.lazy.js.map +1 -0
- package/dist/api/simple-options.d.ts +33 -0
- package/dist/api/simple-options.d.ts.map +1 -0
- package/dist/api/simple-options.js +177 -0
- package/dist/api/simple-options.js.map +1 -0
- package/dist/api/transform-messages.d.ts +23 -0
- package/dist/api/transform-messages.d.ts.map +1 -0
- package/dist/api/transform-messages.js +255 -0
- package/dist/api/transform-messages.js.map +1 -0
- package/dist/api-registry.d.ts +34 -0
- package/dist/api-registry.d.ts.map +1 -0
- package/dist/api-registry.js +96 -0
- package/dist/api-registry.js.map +1 -0
- package/dist/auth/context.d.ts +7 -0
- package/dist/auth/context.d.ts.map +1 -0
- package/dist/auth/context.js +42 -0
- package/dist/auth/context.js.map +1 -0
- package/dist/auth/credential-store.d.ts +17 -0
- package/dist/auth/credential-store.d.ts.map +1 -0
- package/dist/auth/credential-store.js +42 -0
- package/dist/auth/credential-store.js.map +1 -0
- package/dist/auth/helpers.d.ts +21 -0
- package/dist/auth/helpers.d.ts.map +1 -0
- package/dist/auth/helpers.js +48 -0
- package/dist/auth/helpers.js.map +1 -0
- package/dist/auth/oauth/anthropic.d.ts +9 -0
- package/dist/auth/oauth/anthropic.d.ts.map +1 -0
- package/dist/auth/oauth/anthropic.js +302 -0
- package/dist/auth/oauth/anthropic.js.map +1 -0
- package/dist/auth/oauth/device-code.d.ts +23 -0
- package/dist/auth/oauth/device-code.d.ts.map +1 -0
- package/dist/auth/oauth/device-code.js +69 -0
- package/dist/auth/oauth/device-code.js.map +1 -0
- package/dist/auth/oauth/github-copilot.d.ts +6 -0
- package/dist/auth/oauth/github-copilot.d.ts.map +1 -0
- package/dist/auth/oauth/github-copilot.js +312 -0
- package/dist/auth/oauth/github-copilot.js.map +1 -0
- package/dist/auth/oauth/kimi-coding.d.ts +10 -0
- package/dist/auth/oauth/kimi-coding.d.ts.map +1 -0
- package/dist/auth/oauth/kimi-coding.js +249 -0
- package/dist/auth/oauth/kimi-coding.js.map +1 -0
- package/dist/auth/oauth/load.d.ts +27 -0
- package/dist/auth/oauth/load.d.ts.map +1 -0
- package/dist/auth/oauth/load.js +59 -0
- package/dist/auth/oauth/load.js.map +1 -0
- package/dist/auth/oauth/oauth-page.d.ts +3 -0
- package/dist/auth/oauth/oauth-page.d.ts.map +1 -0
- package/dist/auth/oauth/oauth-page.js +105 -0
- package/dist/auth/oauth/oauth-page.js.map +1 -0
- package/dist/auth/oauth/openai-codex.d.ts +9 -0
- package/dist/auth/oauth/openai-codex.d.ts.map +1 -0
- package/dist/auth/oauth/openai-codex.js +427 -0
- package/dist/auth/oauth/openai-codex.js.map +1 -0
- package/dist/auth/oauth/openrouter.d.ts +13 -0
- package/dist/auth/oauth/openrouter.d.ts.map +1 -0
- package/dist/auth/oauth/openrouter.js +222 -0
- package/dist/auth/oauth/openrouter.js.map +1 -0
- package/dist/auth/oauth/pkce.d.ts +13 -0
- package/dist/auth/oauth/pkce.d.ts.map +1 -0
- package/dist/auth/oauth/pkce.js +31 -0
- package/dist/auth/oauth/pkce.js.map +1 -0
- package/dist/auth/oauth/radius.d.ts +17 -0
- package/dist/auth/oauth/radius.d.ts.map +1 -0
- package/dist/auth/oauth/radius.js +318 -0
- package/dist/auth/oauth/radius.js.map +1 -0
- package/dist/auth/oauth/xai.d.ts +6 -0
- package/dist/auth/oauth/xai.d.ts.map +1 -0
- package/dist/auth/oauth/xai.js +189 -0
- package/dist/auth/oauth/xai.js.map +1 -0
- package/dist/auth/resolve.d.ts +24 -0
- package/dist/auth/resolve.d.ts.map +1 -0
- package/dist/auth/resolve.js +112 -0
- package/dist/auth/resolve.js.map +1 -0
- package/dist/auth/types.d.ts +219 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/bedrock-provider.d.ts +5 -0
- package/dist/bedrock-provider.d.ts.map +1 -0
- package/dist/bedrock-provider.js +6 -0
- package/dist/bedrock-provider.js.map +1 -0
- package/dist/bun-oauth.d.ts +3 -0
- package/dist/bun-oauth.d.ts.map +1 -0
- package/dist/bun-oauth.js +21 -0
- package/dist/bun-oauth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +112 -0
- package/dist/cli.js.map +1 -0
- package/dist/compat/extension-oauth-types.d.ts +42 -0
- package/dist/compat/extension-oauth-types.d.ts.map +1 -0
- package/dist/compat/extension-oauth-types.js +2 -0
- package/dist/compat/extension-oauth-types.js.map +1 -0
- package/dist/compat.d.ts +53 -0
- package/dist/compat.d.ts.map +1 -0
- package/dist/compat.js +176 -0
- package/dist/compat.js.map +1 -0
- package/dist/context-provenance.d.ts +16 -0
- package/dist/context-provenance.d.ts.map +1 -0
- package/dist/context-provenance.js +32 -0
- package/dist/context-provenance.js.map +1 -0
- package/dist/env-api-keys.d.ts +21 -0
- package/dist/env-api-keys.d.ts.map +1 -0
- package/dist/env-api-keys.js +155 -0
- package/dist/env-api-keys.js.map +1 -0
- package/dist/image-models.d.ts +10 -0
- package/dist/image-models.d.ts.map +1 -0
- package/dist/image-models.generated.d.ts +605 -0
- package/dist/image-models.generated.d.ts.map +1 -0
- package/dist/image-models.generated.js +607 -0
- package/dist/image-models.generated.js.map +1 -0
- package/dist/image-models.js +23 -0
- package/dist/image-models.js.map +1 -0
- package/dist/images-api-registry.d.ts +31 -0
- package/dist/images-api-registry.d.ts.map +1 -0
- package/dist/images-api-registry.js +87 -0
- package/dist/images-api-registry.js.map +1 -0
- package/dist/images-models.d.ts +95 -0
- package/dist/images-models.d.ts.map +1 -0
- package/dist/images-models.js +140 -0
- package/dist/images-models.js.map +1 -0
- package/dist/images.d.ts +4 -0
- package/dist/images.d.ts.map +1 -0
- package/dist/images.js +14 -0
- package/dist/images.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy-api-aliases.d.ts +42 -0
- package/dist/legacy-api-aliases.d.ts.map +1 -0
- package/dist/legacy-api-aliases.js +49 -0
- package/dist/legacy-api-aliases.js.map +1 -0
- package/dist/model-catalog.d.ts +17 -0
- package/dist/model-catalog.d.ts.map +1 -0
- package/dist/model-catalog.js +4 -0
- package/dist/model-catalog.js.map +1 -0
- package/dist/model.d.ts +27 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -0
- package/dist/models-store.d.ts +32 -0
- package/dist/models-store.d.ts.map +1 -0
- package/dist/models-store.js +16 -0
- package/dist/models-store.js.map +1 -0
- package/dist/models.d.ts +179 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.generated.d.ts +79 -0
- package/dist/models.generated.d.ts.map +1 -0
- package/dist/models.generated.js +81 -0
- package/dist/models.generated.js.map +1 -0
- package/dist/models.js +449 -0
- package/dist/models.js.map +1 -0
- package/dist/node/provider-scope.d.ts +12 -0
- package/dist/node/provider-scope.d.ts.map +1 -0
- package/dist/node/provider-scope.js +34 -0
- package/dist/node/provider-scope.js.map +1 -0
- package/dist/oauth.d.ts +3 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +2 -0
- package/dist/oauth.js.map +1 -0
- package/dist/providers/alibaba-token-plan.d.ts +3 -0
- package/dist/providers/alibaba-token-plan.d.ts.map +1 -0
- package/dist/providers/alibaba-token-plan.js +15 -0
- package/dist/providers/alibaba-token-plan.js.map +1 -0
- package/dist/providers/alibaba-token-plan.models.d.ts +4 -0
- package/dist/providers/alibaba-token-plan.models.d.ts.map +1 -0
- package/dist/providers/alibaba-token-plan.models.js +6 -0
- package/dist/providers/alibaba-token-plan.models.js.map +1 -0
- package/dist/providers/all.d.ts +28 -0
- package/dist/providers/all.d.ts.map +1 -0
- package/dist/providers/all.js +162 -0
- package/dist/providers/all.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +3 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +85 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/amazon-bedrock.models.d.ts +4 -0
- package/dist/providers/amazon-bedrock.models.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.models.js +6 -0
- package/dist/providers/amazon-bedrock.models.js.map +1 -0
- package/dist/providers/ant-ling.d.ts +3 -0
- package/dist/providers/ant-ling.d.ts.map +1 -0
- package/dist/providers/ant-ling.js +15 -0
- package/dist/providers/ant-ling.js.map +1 -0
- package/dist/providers/ant-ling.models.d.ts +4 -0
- package/dist/providers/ant-ling.models.d.ts.map +1 -0
- package/dist/providers/ant-ling.models.js +6 -0
- package/dist/providers/ant-ling.models.js.map +1 -0
- package/dist/providers/anthropic.d.ts +7 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +50 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/anthropic.models.d.ts +4 -0
- package/dist/providers/anthropic.models.d.ts.map +1 -0
- package/dist/providers/anthropic.models.js +6 -0
- package/dist/providers/anthropic.models.js.map +1 -0
- package/dist/providers/azure-openai-responses.d.ts +3 -0
- package/dist/providers/azure-openai-responses.d.ts.map +1 -0
- package/dist/providers/azure-openai-responses.js +14 -0
- package/dist/providers/azure-openai-responses.js.map +1 -0
- package/dist/providers/azure-openai-responses.models.d.ts +4 -0
- package/dist/providers/azure-openai-responses.models.d.ts.map +1 -0
- package/dist/providers/azure-openai-responses.models.js +6 -0
- package/dist/providers/azure-openai-responses.models.js.map +1 -0
- package/dist/providers/cerebras.d.ts +3 -0
- package/dist/providers/cerebras.d.ts.map +1 -0
- package/dist/providers/cerebras.js +15 -0
- package/dist/providers/cerebras.js.map +1 -0
- package/dist/providers/cerebras.models.d.ts +4 -0
- package/dist/providers/cerebras.models.d.ts.map +1 -0
- package/dist/providers/cerebras.models.js +6 -0
- package/dist/providers/cerebras.models.js.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.d.ts +3 -0
- package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.js +21 -0
- package/dist/providers/cloudflare-ai-gateway.js.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -0
- package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -0
- package/dist/providers/cloudflare-ai-gateway.models.js +6 -0
- package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -0
- package/dist/providers/cloudflare-auth.d.ts +4 -0
- package/dist/providers/cloudflare-auth.d.ts.map +1 -0
- package/dist/providers/cloudflare-auth.js +81 -0
- package/dist/providers/cloudflare-auth.js.map +1 -0
- package/dist/providers/cloudflare-stream.d.ts +8 -0
- package/dist/providers/cloudflare-stream.d.ts.map +1 -0
- package/dist/providers/cloudflare-stream.js +21 -0
- package/dist/providers/cloudflare-stream.js.map +1 -0
- package/dist/providers/cloudflare-workers-ai.d.ts +3 -0
- package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -0
- package/dist/providers/cloudflare-workers-ai.js +15 -0
- package/dist/providers/cloudflare-workers-ai.js.map +1 -0
- package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -0
- package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -0
- package/dist/providers/cloudflare-workers-ai.models.js +6 -0
- package/dist/providers/cloudflare-workers-ai.models.js.map +1 -0
- package/dist/providers/data/.manifest.json +1 -0
- package/dist/providers/data/alibaba-token-plan.json +1 -0
- package/dist/providers/data/amazon-bedrock.json +1 -0
- package/dist/providers/data/ant-ling.json +1 -0
- package/dist/providers/data/anthropic.json +1 -0
- package/dist/providers/data/azure-openai-responses.json +1 -0
- package/dist/providers/data/cerebras.json +1 -0
- package/dist/providers/data/cloudflare-ai-gateway.json +1 -0
- package/dist/providers/data/cloudflare-workers-ai.json +1 -0
- package/dist/providers/data/deepseek.json +1 -0
- package/dist/providers/data/fireworks.json +1 -0
- package/dist/providers/data/github-copilot.json +1 -0
- package/dist/providers/data/google-vertex.json +1 -0
- package/dist/providers/data/google.json +1 -0
- package/dist/providers/data/groq.json +1 -0
- package/dist/providers/data/huggingface.json +1 -0
- package/dist/providers/data/kimi-coding.json +1 -0
- package/dist/providers/data/minimax-cn.json +1 -0
- package/dist/providers/data/minimax.json +1 -0
- package/dist/providers/data/mistral.json +1 -0
- package/dist/providers/data/moonshotai-cn.json +1 -0
- package/dist/providers/data/moonshotai.json +1 -0
- package/dist/providers/data/nvidia.json +1 -0
- package/dist/providers/data/openai-codex.json +1 -0
- package/dist/providers/data/openai.json +1 -0
- package/dist/providers/data/opencode-go.json +1 -0
- package/dist/providers/data/opencode.json +1 -0
- package/dist/providers/data/openrouter.json +1 -0
- package/dist/providers/data/qwen-token-plan-cn.json +1 -0
- package/dist/providers/data/qwen-token-plan.json +1 -0
- package/dist/providers/data/together.json +1 -0
- package/dist/providers/data/vercel-ai-gateway.json +1 -0
- package/dist/providers/data/xai.json +1 -0
- package/dist/providers/data/xiaomi-token-plan-ams.json +1 -0
- package/dist/providers/data/xiaomi-token-plan-cn.json +1 -0
- package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -0
- package/dist/providers/data/xiaomi.json +1 -0
- package/dist/providers/data/zai-coding-cn.json +1 -0
- package/dist/providers/data/zai.json +1 -0
- package/dist/providers/deepseek.d.ts +3 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +15 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/deepseek.models.d.ts +4 -0
- package/dist/providers/deepseek.models.d.ts.map +1 -0
- package/dist/providers/deepseek.models.js +6 -0
- package/dist/providers/deepseek.models.js.map +1 -0
- package/dist/providers/faux.d.ts +116 -0
- package/dist/providers/faux.d.ts.map +1 -0
- package/dist/providers/faux.js +466 -0
- package/dist/providers/faux.js.map +1 -0
- package/dist/providers/fireworks.d.ts +3 -0
- package/dist/providers/fireworks.d.ts.map +1 -0
- package/dist/providers/fireworks.js +19 -0
- package/dist/providers/fireworks.js.map +1 -0
- package/dist/providers/fireworks.models.d.ts +4 -0
- package/dist/providers/fireworks.models.d.ts.map +1 -0
- package/dist/providers/fireworks.models.js +6 -0
- package/dist/providers/fireworks.models.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +3 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +35 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/github-copilot.models.d.ts +4 -0
- package/dist/providers/github-copilot.models.d.ts.map +1 -0
- package/dist/providers/github-copilot.models.js +6 -0
- package/dist/providers/github-copilot.models.js.map +1 -0
- package/dist/providers/google-shared.d.ts +2 -0
- package/dist/providers/google-shared.d.ts.map +1 -0
- package/dist/providers/google-shared.js +2 -0
- package/dist/providers/google-shared.js.map +1 -0
- package/dist/providers/google-vertex.d.ts +7 -0
- package/dist/providers/google-vertex.d.ts.map +1 -0
- package/dist/providers/google-vertex.js +89 -0
- package/dist/providers/google-vertex.js.map +1 -0
- package/dist/providers/google-vertex.models.d.ts +4 -0
- package/dist/providers/google-vertex.models.d.ts.map +1 -0
- package/dist/providers/google-vertex.models.js +6 -0
- package/dist/providers/google-vertex.models.js.map +1 -0
- package/dist/providers/google.d.ts +7 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +18 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/google.models.d.ts +4 -0
- package/dist/providers/google.models.d.ts.map +1 -0
- package/dist/providers/google.models.js +6 -0
- package/dist/providers/google.models.js.map +1 -0
- package/dist/providers/groq.d.ts +3 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +15 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/groq.models.d.ts +4 -0
- package/dist/providers/groq.models.d.ts.map +1 -0
- package/dist/providers/groq.models.js +6 -0
- package/dist/providers/groq.models.js.map +1 -0
- package/dist/providers/huggingface.d.ts +3 -0
- package/dist/providers/huggingface.d.ts.map +1 -0
- package/dist/providers/huggingface.js +15 -0
- package/dist/providers/huggingface.js.map +1 -0
- package/dist/providers/huggingface.models.d.ts +4 -0
- package/dist/providers/huggingface.models.d.ts.map +1 -0
- package/dist/providers/huggingface.models.js +6 -0
- package/dist/providers/huggingface.models.js.map +1 -0
- package/dist/providers/images/register-builtins.d.ts +4 -0
- package/dist/providers/images/register-builtins.d.ts.map +1 -0
- package/dist/providers/images/register-builtins.js +34 -0
- package/dist/providers/images/register-builtins.js.map +1 -0
- package/dist/providers/kimi-coding.d.ts +3 -0
- package/dist/providers/kimi-coding.d.ts.map +1 -0
- package/dist/providers/kimi-coding.js +23 -0
- package/dist/providers/kimi-coding.js.map +1 -0
- package/dist/providers/kimi-coding.models.d.ts +4 -0
- package/dist/providers/kimi-coding.models.d.ts.map +1 -0
- package/dist/providers/kimi-coding.models.js +6 -0
- package/dist/providers/kimi-coding.models.js.map +1 -0
- package/dist/providers/minimax-cn.d.ts +3 -0
- package/dist/providers/minimax-cn.d.ts.map +1 -0
- package/dist/providers/minimax-cn.js +15 -0
- package/dist/providers/minimax-cn.js.map +1 -0
- package/dist/providers/minimax-cn.models.d.ts +4 -0
- package/dist/providers/minimax-cn.models.d.ts.map +1 -0
- package/dist/providers/minimax-cn.models.js +6 -0
- package/dist/providers/minimax-cn.models.js.map +1 -0
- package/dist/providers/minimax.d.ts +3 -0
- package/dist/providers/minimax.d.ts.map +1 -0
- package/dist/providers/minimax.js +15 -0
- package/dist/providers/minimax.js.map +1 -0
- package/dist/providers/minimax.models.d.ts +4 -0
- package/dist/providers/minimax.models.d.ts.map +1 -0
- package/dist/providers/minimax.models.js +6 -0
- package/dist/providers/minimax.models.js.map +1 -0
- package/dist/providers/mistral.d.ts +3 -0
- package/dist/providers/mistral.d.ts.map +1 -0
- package/dist/providers/mistral.js +15 -0
- package/dist/providers/mistral.js.map +1 -0
- package/dist/providers/mistral.models.d.ts +4 -0
- package/dist/providers/mistral.models.d.ts.map +1 -0
- package/dist/providers/mistral.models.js +6 -0
- package/dist/providers/mistral.models.js.map +1 -0
- package/dist/providers/moonshotai-cn.d.ts +3 -0
- package/dist/providers/moonshotai-cn.d.ts.map +1 -0
- package/dist/providers/moonshotai-cn.js +15 -0
- package/dist/providers/moonshotai-cn.js.map +1 -0
- package/dist/providers/moonshotai-cn.models.d.ts +4 -0
- package/dist/providers/moonshotai-cn.models.d.ts.map +1 -0
- package/dist/providers/moonshotai-cn.models.js +6 -0
- package/dist/providers/moonshotai-cn.models.js.map +1 -0
- package/dist/providers/moonshotai.d.ts +3 -0
- package/dist/providers/moonshotai.d.ts.map +1 -0
- package/dist/providers/moonshotai.js +15 -0
- package/dist/providers/moonshotai.js.map +1 -0
- package/dist/providers/moonshotai.models.d.ts +4 -0
- package/dist/providers/moonshotai.models.d.ts.map +1 -0
- package/dist/providers/moonshotai.models.js +6 -0
- package/dist/providers/moonshotai.models.js.map +1 -0
- package/dist/providers/nvidia.d.ts +3 -0
- package/dist/providers/nvidia.d.ts.map +1 -0
- package/dist/providers/nvidia.js +15 -0
- package/dist/providers/nvidia.js.map +1 -0
- package/dist/providers/nvidia.models.d.ts +4 -0
- package/dist/providers/nvidia.models.d.ts.map +1 -0
- package/dist/providers/nvidia.models.js +6 -0
- package/dist/providers/nvidia.models.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +3 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +18 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/providers/openai-codex.models.d.ts +4 -0
- package/dist/providers/openai-codex.models.d.ts.map +1 -0
- package/dist/providers/openai-codex.models.js +6 -0
- package/dist/providers/openai-codex.models.js.map +1 -0
- package/dist/providers/openai-completions.d.ts +3 -0
- package/dist/providers/openai-completions.d.ts.map +1 -0
- package/dist/providers/openai-completions.js +2 -0
- package/dist/providers/openai-completions.js.map +1 -0
- package/dist/providers/openai-responses-shared.d.ts +2 -0
- package/dist/providers/openai-responses-shared.d.ts.map +1 -0
- package/dist/providers/openai-responses-shared.js +2 -0
- package/dist/providers/openai-responses-shared.js.map +1 -0
- package/dist/providers/openai-responses.d.ts +3 -0
- package/dist/providers/openai-responses.d.ts.map +1 -0
- package/dist/providers/openai-responses.js +2 -0
- package/dist/providers/openai-responses.js.map +1 -0
- package/dist/providers/openai.d.ts +3 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +15 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openai.models.d.ts +4 -0
- package/dist/providers/openai.models.d.ts.map +1 -0
- package/dist/providers/openai.models.js +6 -0
- package/dist/providers/openai.models.js.map +1 -0
- package/dist/providers/opencode-go.d.ts +3 -0
- package/dist/providers/opencode-go.d.ts.map +1 -0
- package/dist/providers/opencode-go.js +20 -0
- package/dist/providers/opencode-go.js.map +1 -0
- package/dist/providers/opencode-go.models.d.ts +4 -0
- package/dist/providers/opencode-go.models.d.ts.map +1 -0
- package/dist/providers/opencode-go.models.js +6 -0
- package/dist/providers/opencode-go.models.js.map +1 -0
- package/dist/providers/opencode.d.ts +3 -0
- package/dist/providers/opencode.d.ts.map +1 -0
- package/dist/providers/opencode.js +22 -0
- package/dist/providers/opencode.js.map +1 -0
- package/dist/providers/opencode.models.d.ts +4 -0
- package/dist/providers/opencode.models.d.ts.map +1 -0
- package/dist/providers/opencode.models.js +6 -0
- package/dist/providers/opencode.models.js.map +1 -0
- package/dist/providers/openrouter-images.d.ts +3 -0
- package/dist/providers/openrouter-images.d.ts.map +1 -0
- package/dist/providers/openrouter-images.js +22 -0
- package/dist/providers/openrouter-images.js.map +1 -0
- package/dist/providers/openrouter.d.ts +3 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +23 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/openrouter.models.d.ts +4 -0
- package/dist/providers/openrouter.models.d.ts.map +1 -0
- package/dist/providers/openrouter.models.js +6 -0
- package/dist/providers/openrouter.models.js.map +1 -0
- package/dist/providers/qwen-token-plan-cn.d.ts +3 -0
- package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan-cn.js +15 -0
- package/dist/providers/qwen-token-plan-cn.js.map +1 -0
- package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -0
- package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan-cn.models.js +6 -0
- package/dist/providers/qwen-token-plan-cn.models.js.map +1 -0
- package/dist/providers/qwen-token-plan.d.ts +3 -0
- package/dist/providers/qwen-token-plan.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan.js +15 -0
- package/dist/providers/qwen-token-plan.js.map +1 -0
- package/dist/providers/qwen-token-plan.models.d.ts +4 -0
- package/dist/providers/qwen-token-plan.models.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan.models.js +6 -0
- package/dist/providers/qwen-token-plan.models.js.map +1 -0
- package/dist/providers/radius-config.d.ts +26 -0
- package/dist/providers/radius-config.d.ts.map +1 -0
- package/dist/providers/radius-config.js +63 -0
- package/dist/providers/radius-config.js.map +1 -0
- package/dist/providers/radius.d.ts +9 -0
- package/dist/providers/radius.d.ts.map +1 -0
- package/dist/providers/radius.js +54 -0
- package/dist/providers/radius.js.map +1 -0
- package/dist/providers/register-builtins.d.ts +2 -0
- package/dist/providers/register-builtins.d.ts.map +1 -0
- package/dist/providers/register-builtins.js +2 -0
- package/dist/providers/register-builtins.js.map +1 -0
- package/dist/providers/together.d.ts +3 -0
- package/dist/providers/together.d.ts.map +1 -0
- package/dist/providers/together.js +15 -0
- package/dist/providers/together.js.map +1 -0
- package/dist/providers/together.models.d.ts +4 -0
- package/dist/providers/together.models.d.ts.map +1 -0
- package/dist/providers/together.models.js +6 -0
- package/dist/providers/together.models.js.map +1 -0
- package/dist/providers/vercel-ai-gateway.d.ts +3 -0
- package/dist/providers/vercel-ai-gateway.d.ts.map +1 -0
- package/dist/providers/vercel-ai-gateway.js +15 -0
- package/dist/providers/vercel-ai-gateway.js.map +1 -0
- package/dist/providers/vercel-ai-gateway.models.d.ts +4 -0
- package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -0
- package/dist/providers/vercel-ai-gateway.models.js +6 -0
- package/dist/providers/vercel-ai-gateway.models.js.map +1 -0
- package/dist/providers/xai.d.ts +3 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +27 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/providers/xai.models.d.ts +4 -0
- package/dist/providers/xai.models.d.ts.map +1 -0
- package/dist/providers/xai.models.js +6 -0
- package/dist/providers/xai.models.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.d.ts +3 -0
- package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.js +15 -0
- package/dist/providers/xiaomi-token-plan-ams.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -0
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-ams.models.js +6 -0
- package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.d.ts +3 -0
- package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.js +15 -0
- package/dist/providers/xiaomi-token-plan-cn.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -0
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-cn.models.js +6 -0
- package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.d.ts +3 -0
- package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.js +15 -0
- package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.js +6 -0
- package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -0
- package/dist/providers/xiaomi.d.ts +3 -0
- package/dist/providers/xiaomi.d.ts.map +1 -0
- package/dist/providers/xiaomi.js +15 -0
- package/dist/providers/xiaomi.js.map +1 -0
- package/dist/providers/xiaomi.models.d.ts +4 -0
- package/dist/providers/xiaomi.models.d.ts.map +1 -0
- package/dist/providers/xiaomi.models.js +6 -0
- package/dist/providers/xiaomi.models.js.map +1 -0
- package/dist/providers/zai-coding-cn.d.ts +3 -0
- package/dist/providers/zai-coding-cn.d.ts.map +1 -0
- package/dist/providers/zai-coding-cn.js +15 -0
- package/dist/providers/zai-coding-cn.js.map +1 -0
- package/dist/providers/zai-coding-cn.models.d.ts +4 -0
- package/dist/providers/zai-coding-cn.models.d.ts.map +1 -0
- package/dist/providers/zai-coding-cn.models.js +6 -0
- package/dist/providers/zai-coding-cn.models.js.map +1 -0
- package/dist/providers/zai.d.ts +3 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +15 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/providers/zai.models.d.ts +4 -0
- package/dist/providers/zai.models.d.ts.map +1 -0
- package/dist/providers/zai.models.js +6 -0
- package/dist/providers/zai.models.js.map +1 -0
- package/dist/session-resources.d.ts +4 -0
- package/dist/session-resources.d.ts.map +1 -0
- package/dist/session-resources.js +22 -0
- package/dist/session-resources.js.map +1 -0
- package/dist/stream.d.ts +2 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +2 -0
- package/dist/stream.js.map +1 -0
- package/dist/tool-call-middleware/context-transformer.d.ts +22 -0
- package/dist/tool-call-middleware/context-transformer.d.ts.map +1 -0
- package/dist/tool-call-middleware/context-transformer.js +182 -0
- package/dist/tool-call-middleware/context-transformer.js.map +1 -0
- package/dist/tool-call-middleware/index.d.ts +14 -0
- package/dist/tool-call-middleware/index.d.ts.map +1 -0
- package/dist/tool-call-middleware/index.js +37 -0
- package/dist/tool-call-middleware/index.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.d.ts +9 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.js +92 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/coerce-parameters.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.js +54 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/format.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.js +4 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/index.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.js +16 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-match.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.d.ts +19 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.js +8 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-protocol.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.d.ts +20 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.js +79 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-stream-helpers.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts +14 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js +42 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-scanner.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.d.ts +38 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.js +210 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/invoke-tag-syntax.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.d.ts +6 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.js +49 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/parse.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.d.ts +9 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.js +231 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts +38 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.js +84 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/recovery-wrapper-state.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.d.ts +13 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.js +107 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream-boundary.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.js +214 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.js +17 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/tool-resolver.js.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.d.ts +5 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.js +34 -0
- package/dist/tool-call-middleware/protocols/anthropic-xml/xml-entities.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.d.ts +15 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.js +198 -0
- package/dist/tool-call-middleware/protocols/antml/coerce-parameters.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/config.d.ts +3 -0
- package/dist/tool-call-middleware/protocols/antml/config.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/config.js +8 -0
- package/dist/tool-call-middleware/protocols/antml/config.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/format.d.ts +6 -0
- package/dist/tool-call-middleware/protocols/antml/format.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/format.js +33 -0
- package/dist/tool-call-middleware/protocols/antml/format.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/index.d.ts +7 -0
- package/dist/tool-call-middleware/protocols/antml/index.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/index.js +7 -0
- package/dist/tool-call-middleware/protocols/antml/index.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/parse.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/antml/parse.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/parse.js +6 -0
- package/dist/tool-call-middleware/protocols/antml/parse.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.d.ts +5 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.js +6 -0
- package/dist/tool-call-middleware/protocols/antml/recovery-stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/repair.d.ts +12 -0
- package/dist/tool-call-middleware/protocols/antml/repair.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/repair.js +46 -0
- package/dist/tool-call-middleware/protocols/antml/repair.js.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/stream.d.ts +4 -0
- package/dist/tool-call-middleware/protocols/antml/stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/antml/stream.js +6 -0
- package/dist/tool-call-middleware/protocols/antml/stream.js.map +1 -0
- package/dist/tool-call-middleware/protocols/gemma4.d.ts +28 -0
- package/dist/tool-call-middleware/protocols/gemma4.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/gemma4.js +663 -0
- package/dist/tool-call-middleware/protocols/gemma4.js.map +1 -0
- package/dist/tool-call-middleware/protocols/hermes.d.ts +21 -0
- package/dist/tool-call-middleware/protocols/hermes.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/hermes.js +69 -0
- package/dist/tool-call-middleware/protocols/hermes.js.map +1 -0
- package/dist/tool-call-middleware/protocols/json-mix.d.ts +12 -0
- package/dist/tool-call-middleware/protocols/json-mix.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/json-mix.js +704 -0
- package/dist/tool-call-middleware/protocols/json-mix.js.map +1 -0
- package/dist/tool-call-middleware/protocols/morph-xml.d.ts +15 -0
- package/dist/tool-call-middleware/protocols/morph-xml.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/morph-xml.js +957 -0
- package/dist/tool-call-middleware/protocols/morph-xml.js.map +1 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts +14 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js +54 -0
- package/dist/tool-call-middleware/protocols/xml-tool-tag-scanner.js.map +1 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.d.ts +8 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.d.ts.map +1 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.js +328 -0
- package/dist/tool-call-middleware/protocols/yaml-xml.js.map +1 -0
- package/dist/tool-call-middleware/recovery-code-mask.d.ts +19 -0
- package/dist/tool-call-middleware/recovery-code-mask.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-code-mask.js +185 -0
- package/dist/tool-call-middleware/recovery-code-mask.js.map +1 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.d.ts +11 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.js +24 -0
- package/dist/tool-call-middleware/recovery-content-lifecycle.js.map +1 -0
- package/dist/tool-call-middleware/recovery-diagnostics.d.ts +4 -0
- package/dist/tool-call-middleware/recovery-diagnostics.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-diagnostics.js +13 -0
- package/dist/tool-call-middleware/recovery-diagnostics.js.map +1 -0
- package/dist/tool-call-middleware/recovery-event-stream.d.ts +15 -0
- package/dist/tool-call-middleware/recovery-event-stream.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-event-stream.js +37 -0
- package/dist/tool-call-middleware/recovery-event-stream.js.map +1 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.d.ts +4 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.js +61 -0
- package/dist/tool-call-middleware/recovery-message-snapshot.js.map +1 -0
- package/dist/tool-call-middleware/recovery-native-projection.d.ts +29 -0
- package/dist/tool-call-middleware/recovery-native-projection.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-native-projection.js +148 -0
- package/dist/tool-call-middleware/recovery-native-projection.js.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-failure.d.ts +5 -0
- package/dist/tool-call-middleware/recovery-stream-failure.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-failure.js +36 -0
- package/dist/tool-call-middleware/recovery-stream-failure.js.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.d.ts +15 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.js +88 -0
- package/dist/tool-call-middleware/recovery-stream-terminal.js.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.d.ts +3 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.js +233 -0
- package/dist/tool-call-middleware/recovery-stream-wrapper.js.map +1 -0
- package/dist/tool-call-middleware/recovery-text-projection.d.ts +23 -0
- package/dist/tool-call-middleware/recovery-text-projection.d.ts.map +1 -0
- package/dist/tool-call-middleware/recovery-text-projection.js +77 -0
- package/dist/tool-call-middleware/recovery-text-projection.js.map +1 -0
- package/dist/tool-call-middleware/stream-message-metadata.d.ts +5 -0
- package/dist/tool-call-middleware/stream-message-metadata.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-message-metadata.js +63 -0
- package/dist/tool-call-middleware/stream-message-metadata.js.map +1 -0
- package/dist/tool-call-middleware/stream-thinking-projection.d.ts +13 -0
- package/dist/tool-call-middleware/stream-thinking-projection.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-thinking-projection.js +52 -0
- package/dist/tool-call-middleware/stream-thinking-projection.js.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.d.ts +41 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.js +209 -0
- package/dist/tool-call-middleware/stream-wrapper-shared.js.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper.d.ts +4 -0
- package/dist/tool-call-middleware/stream-wrapper.d.ts.map +1 -0
- package/dist/tool-call-middleware/stream-wrapper.js +121 -0
- package/dist/tool-call-middleware/stream-wrapper.js.map +1 -0
- package/dist/tool-call-middleware/types.d.ts +109 -0
- package/dist/tool-call-middleware/types.d.ts.map +1 -0
- package/dist/tool-call-middleware/types.js +2 -0
- package/dist/tool-call-middleware/types.js.map +1 -0
- package/dist/types.d.ts +762 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/abort-signals.d.ts +6 -0
- package/dist/utils/abort-signals.d.ts.map +1 -0
- package/dist/utils/abort-signals.js +34 -0
- package/dist/utils/abort-signals.js.map +1 -0
- package/dist/utils/deferred-tools.d.ts +9 -0
- package/dist/utils/deferred-tools.d.ts.map +1 -0
- package/dist/utils/deferred-tools.js +36 -0
- package/dist/utils/deferred-tools.js.map +1 -0
- package/dist/utils/diagnostics.d.ts +19 -0
- package/dist/utils/diagnostics.d.ts.map +1 -0
- package/dist/utils/diagnostics.js +25 -0
- package/dist/utils/diagnostics.js.map +1 -0
- package/dist/utils/error-body.d.ts +25 -0
- package/dist/utils/error-body.d.ts.map +1 -0
- package/dist/utils/error-body.js +114 -0
- package/dist/utils/error-body.js.map +1 -0
- package/dist/utils/estimate.d.ts +17 -0
- package/dist/utils/estimate.d.ts.map +1 -0
- package/dist/utils/estimate.js +119 -0
- package/dist/utils/estimate.js.map +1 -0
- package/dist/utils/event-stream.d.ts +24 -0
- package/dist/utils/event-stream.d.ts.map +1 -0
- package/dist/utils/event-stream.js +117 -0
- package/dist/utils/event-stream.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +14 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/headers.d.ts +4 -0
- package/dist/utils/headers.d.ts.map +1 -0
- package/dist/utils/headers.js +18 -0
- package/dist/utils/headers.js.map +1 -0
- package/dist/utils/json-parse.d.ts +16 -0
- package/dist/utils/json-parse.d.ts.map +1 -0
- package/dist/utils/json-parse.js +113 -0
- package/dist/utils/json-parse.js.map +1 -0
- package/dist/utils/node-http-proxy.d.ts +4 -0
- package/dist/utils/node-http-proxy.d.ts.map +1 -0
- package/dist/utils/node-http-proxy.js +92 -0
- package/dist/utils/node-http-proxy.js.map +1 -0
- package/dist/utils/openai-codex-auth.d.ts +11 -0
- package/dist/utils/openai-codex-auth.d.ts.map +1 -0
- package/dist/utils/openai-codex-auth.js +30 -0
- package/dist/utils/openai-codex-auth.js.map +1 -0
- package/dist/utils/overflow.d.ts +55 -0
- package/dist/utils/overflow.d.ts.map +1 -0
- package/dist/utils/overflow.js +155 -0
- package/dist/utils/overflow.js.map +1 -0
- package/dist/utils/provider-env.d.ts +7 -0
- package/dist/utils/provider-env.d.ts.map +1 -0
- package/dist/utils/provider-env.js +44 -0
- package/dist/utils/provider-env.js.map +1 -0
- package/dist/utils/provider-retry.d.ts +16 -0
- package/dist/utils/provider-retry.d.ts.map +1 -0
- package/dist/utils/provider-retry.js +94 -0
- package/dist/utils/provider-retry.js.map +1 -0
- package/dist/utils/retry.d.ts +53 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +177 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/sanitize-unicode.d.ts +22 -0
- package/dist/utils/sanitize-unicode.d.ts.map +1 -0
- package/dist/utils/sanitize-unicode.js +26 -0
- package/dist/utils/sanitize-unicode.js.map +1 -0
- package/dist/utils/server-fallback-receipt.d.ts +30 -0
- package/dist/utils/server-fallback-receipt.d.ts.map +1 -0
- package/dist/utils/server-fallback-receipt.js +70 -0
- package/dist/utils/server-fallback-receipt.js.map +1 -0
- package/dist/utils/stop-details.d.ts +4 -0
- package/dist/utils/stop-details.d.ts.map +1 -0
- package/dist/utils/stop-details.js +6 -0
- package/dist/utils/stop-details.js.map +1 -0
- package/dist/utils/text.d.ts +6 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +10 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/tool-choice-fallback.d.ts +5 -0
- package/dist/utils/tool-choice-fallback.d.ts.map +1 -0
- package/dist/utils/tool-choice-fallback.js +41 -0
- package/dist/utils/tool-choice-fallback.js.map +1 -0
- package/dist/utils/tool-pair-repair.d.ts +5 -0
- package/dist/utils/tool-pair-repair.d.ts.map +1 -0
- package/dist/utils/tool-pair-repair.js +70 -0
- package/dist/utils/tool-pair-repair.js.map +1 -0
- package/dist/utils/tool-schema-compat.d.ts +19 -0
- package/dist/utils/tool-schema-compat.d.ts.map +1 -0
- package/dist/utils/tool-schema-compat.js +215 -0
- package/dist/utils/tool-schema-compat.js.map +1 -0
- package/dist/utils/typebox-helpers.d.ts +17 -0
- package/dist/utils/typebox-helpers.d.ts.map +1 -0
- package/dist/utils/typebox-helpers.js +21 -0
- package/dist/utils/typebox-helpers.js.map +1 -0
- package/dist/utils/uuid.d.ts +3 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +50 -0
- package/dist/utils/uuid.js.map +1 -0
- package/dist/utils/validation.d.ts +18 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +269 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
function buildProviderErrorPattern(patterns) {
|
|
2
|
+
return new RegExp(patterns.join("|"), "i");
|
|
3
|
+
}
|
|
4
|
+
const NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN = buildProviderErrorPattern([
|
|
5
|
+
// OpenCode Go/free-tier limits returned as 429 JSON error types by OpenCode's
|
|
6
|
+
// Zen API. These are subscription/account limits, not transient throttles.
|
|
7
|
+
"GoUsageLimitError",
|
|
8
|
+
"FreeUsageLimitError",
|
|
9
|
+
// OpenCode Go subscription-limit text asks users to enable available-balance
|
|
10
|
+
// usage after rolling/weekly/monthly limits are reached.
|
|
11
|
+
"Monthly usage limit reached",
|
|
12
|
+
"available balance",
|
|
13
|
+
// Generic quota/budget/billing exhaustion. `insufficient_quota` is OpenAI's
|
|
14
|
+
// quota/billing error code; the other strings cover common gateway wording.
|
|
15
|
+
"insufficient_quota",
|
|
16
|
+
"out of budget",
|
|
17
|
+
"quota exceeded",
|
|
18
|
+
"billing",
|
|
19
|
+
]);
|
|
20
|
+
const RETRYABLE_PROVIDER_ERROR_PATTERN = buildProviderErrorPattern([
|
|
21
|
+
// Generic provider load, HTTP status, and server-side transient failures.
|
|
22
|
+
"overloaded",
|
|
23
|
+
"rate.?limit",
|
|
24
|
+
"too many requests",
|
|
25
|
+
"429",
|
|
26
|
+
"500",
|
|
27
|
+
"502",
|
|
28
|
+
"503",
|
|
29
|
+
"504",
|
|
30
|
+
"524",
|
|
31
|
+
"service.?unavailable",
|
|
32
|
+
"server.?error",
|
|
33
|
+
"internal.?error",
|
|
34
|
+
// Wrapper/provider text for transient upstream failures, including OpenRouter
|
|
35
|
+
// "Provider returned error" responses (#2264).
|
|
36
|
+
"provider.?returned.?error",
|
|
37
|
+
// Network, proxy, and fetch transport failures. This includes OpenAI Codex
|
|
38
|
+
// raw-fetch failures such as "upstream connect", "connection refused", and
|
|
39
|
+
// "reset before headers" (#733), plus OpenRouter connection drops (#3317).
|
|
40
|
+
"network.?error",
|
|
41
|
+
"connection.?error",
|
|
42
|
+
"connection.?refused",
|
|
43
|
+
"connection.?lost",
|
|
44
|
+
"other side closed",
|
|
45
|
+
"fetch failed",
|
|
46
|
+
"getaddrinfo",
|
|
47
|
+
"ENOTFOUND",
|
|
48
|
+
"EAI_AGAIN",
|
|
49
|
+
"upstream.?connect",
|
|
50
|
+
"reset before headers",
|
|
51
|
+
"socket hang up",
|
|
52
|
+
"socket connection was closed",
|
|
53
|
+
"timed? out",
|
|
54
|
+
"timeout",
|
|
55
|
+
"terminated",
|
|
56
|
+
// WebSocket transports can report close/error text instead of HTTP/fetch text.
|
|
57
|
+
"websocket.?closed",
|
|
58
|
+
"websocket.?error",
|
|
59
|
+
// Premature stream endings from SDKs and transports. Anthropic can throw
|
|
60
|
+
// "stream ended without ..." and "Anthropic stream ended before message_stop"
|
|
61
|
+
// (#4433); Bedrock/Smithy can throw an HTTP/2 no-response error (#3594).
|
|
62
|
+
"ended without",
|
|
63
|
+
"stream ended before message_stop",
|
|
64
|
+
"stream ended before a terminal response event",
|
|
65
|
+
"http2 request did not get a response",
|
|
66
|
+
// Provider-requested retry delay cap failures should flow through the outer
|
|
67
|
+
// retry policy so callers can surface/abort the backoff (#1123).
|
|
68
|
+
"retry delay",
|
|
69
|
+
// Explicit retry guidance emitted mid-stream by OpenAI Responses and Bedrock
|
|
70
|
+
// stream exceptions (#6019).
|
|
71
|
+
"you can retry your request",
|
|
72
|
+
"try your request again",
|
|
73
|
+
"please retry your request",
|
|
74
|
+
// gRPC based providers (e.g. NVIDIA NIM)
|
|
75
|
+
"ResourceExhausted",
|
|
76
|
+
]);
|
|
77
|
+
class RetrySleepAbortError extends Error {
|
|
78
|
+
constructor() {
|
|
79
|
+
super("Aborted");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function sleep(ms, signal) {
|
|
83
|
+
return new Promise((resolve, reject) => {
|
|
84
|
+
if (signal?.aborted) {
|
|
85
|
+
reject(new RetrySleepAbortError());
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const timeout = setTimeout(resolve, ms);
|
|
89
|
+
signal?.addEventListener("abort", () => {
|
|
90
|
+
clearTimeout(timeout);
|
|
91
|
+
reject(new RetrySleepAbortError());
|
|
92
|
+
}, { once: true });
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Run a single assistant-producing call with bounded retry on transient errors.
|
|
97
|
+
*
|
|
98
|
+
* Behavior:
|
|
99
|
+
* - A successful response is returned immediately. Aborts are terminal and never
|
|
100
|
+
* retried, but reported as unsuccessful if they happen after a retry was scheduled.
|
|
101
|
+
* Aborts during the backoff sleep are normalized to an aborted `AssistantMessage`
|
|
102
|
+
* too, so callers do not need to care when cancellation happened.
|
|
103
|
+
* - A non-retryable error (per {@link isRetryableAssistantError}, including quota/
|
|
104
|
+
* billing exhaustion) is returned immediately so deterministic errors fail fast.
|
|
105
|
+
* - Otherwise retries up to `maxRetries` times with exponential backoff, emitting
|
|
106
|
+
* `onRetryScheduled` before each sleep, `onRetryAttemptStart` after each sleep before
|
|
107
|
+
* the retried call starts, and `onRetryFinished` once at the end (whether the loop
|
|
108
|
+
* ends in success, exhausted retries, or an aborted backoff).
|
|
109
|
+
*
|
|
110
|
+
* When `policy` is undefined or disabled, the first response is returned unchanged
|
|
111
|
+
* (equivalent to calling `produce()` directly).
|
|
112
|
+
*/
|
|
113
|
+
export async function retryAssistantCall(produce, policy, signal, callbacks) {
|
|
114
|
+
const maxAttempts = policy?.enabled ? policy.maxRetries : 0;
|
|
115
|
+
let attempt = 0;
|
|
116
|
+
let lastRetry;
|
|
117
|
+
for (;;) {
|
|
118
|
+
const response = await produce();
|
|
119
|
+
// Abort: terminal but not successful. Never retry an aborted message.
|
|
120
|
+
if (response.stopReason === "aborted") {
|
|
121
|
+
if (lastRetry)
|
|
122
|
+
await callbacks?.onRetryFinished?.(false, lastRetry.attempt);
|
|
123
|
+
return response;
|
|
124
|
+
}
|
|
125
|
+
// Success: non-error, non-abort responses return as-is.
|
|
126
|
+
if (response.stopReason !== "error") {
|
|
127
|
+
if (lastRetry)
|
|
128
|
+
await callbacks?.onRetryFinished?.(true, lastRetry.attempt);
|
|
129
|
+
return response;
|
|
130
|
+
}
|
|
131
|
+
// Non-retryable, or budget exhausted: return the final error message.
|
|
132
|
+
if (attempt >= maxAttempts || !isRetryableAssistantError(response)) {
|
|
133
|
+
if (lastRetry)
|
|
134
|
+
await callbacks?.onRetryFinished?.(false, lastRetry.attempt, response.errorMessage);
|
|
135
|
+
return response;
|
|
136
|
+
}
|
|
137
|
+
attempt++;
|
|
138
|
+
lastRetry = { attempt, errorMessage: response.errorMessage || "Unknown error" };
|
|
139
|
+
const delayMs = policy.baseDelayMs * 2 ** (attempt - 1);
|
|
140
|
+
await callbacks?.onRetryScheduled?.(attempt, maxAttempts, delayMs, lastRetry.errorMessage);
|
|
141
|
+
// Normalize aborts during retry backoff to the same AssistantMessage shape as
|
|
142
|
+
// provider stream aborts, so callers do not need to care when cancellation happened.
|
|
143
|
+
try {
|
|
144
|
+
await sleep(delayMs, signal);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
await callbacks?.onRetryFinished?.(false, attempt, lastRetry.errorMessage);
|
|
148
|
+
if (error instanceof RetrySleepAbortError) {
|
|
149
|
+
return { ...response, stopReason: "aborted", errorMessage: undefined };
|
|
150
|
+
}
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
await callbacks?.onRetryAttemptStart?.();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Classifies whether a failed assistant message looks like a transient provider
|
|
158
|
+
* or transport error, so callers can decide if the last assistant turn should be
|
|
159
|
+
* restarted.
|
|
160
|
+
*
|
|
161
|
+
* This does not implement retry policy. Callers should first handle context
|
|
162
|
+
* overflow separately, then apply their own retry budget, backoff, and reporting
|
|
163
|
+
* before restarting the assistant turn.
|
|
164
|
+
*/
|
|
165
|
+
export function isRetryableAssistantError(message) {
|
|
166
|
+
if (message.stopReason !== "error" ||
|
|
167
|
+
message.stopDetails?.type === "refusal" ||
|
|
168
|
+
message.stopDetails?.type === "sensitive" ||
|
|
169
|
+
!message.errorMessage) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
const errorMessage = message.errorMessage;
|
|
173
|
+
if (NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN.test(errorMessage))
|
|
174
|
+
return false;
|
|
175
|
+
return RETRYABLE_PROVIDER_ERROR_PATTERN.test(errorMessage);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage } from \"../types.ts\";\n\nfunction buildProviderErrorPattern(patterns: readonly string[]): RegExp {\n\treturn new RegExp(patterns.join(\"|\"), \"i\");\n}\n\nconst NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN = buildProviderErrorPattern([\n\t// OpenCode Go/free-tier limits returned as 429 JSON error types by OpenCode's\n\t// Zen API. These are subscription/account limits, not transient throttles.\n\t\"GoUsageLimitError\",\n\t\"FreeUsageLimitError\",\n\n\t// OpenCode Go subscription-limit text asks users to enable available-balance\n\t// usage after rolling/weekly/monthly limits are reached.\n\t\"Monthly usage limit reached\",\n\t\"available balance\",\n\n\t// Generic quota/budget/billing exhaustion. `insufficient_quota` is OpenAI's\n\t// quota/billing error code; the other strings cover common gateway wording.\n\t\"insufficient_quota\",\n\t\"out of budget\",\n\t\"quota exceeded\",\n\t\"billing\",\n]);\n\nconst RETRYABLE_PROVIDER_ERROR_PATTERN = buildProviderErrorPattern([\n\t// Generic provider load, HTTP status, and server-side transient failures.\n\t\"overloaded\",\n\t\"rate.?limit\",\n\t\"too many requests\",\n\t\"429\",\n\t\"500\",\n\t\"502\",\n\t\"503\",\n\t\"504\",\n\t\"524\",\n\t\"service.?unavailable\",\n\t\"server.?error\",\n\t\"internal.?error\",\n\n\t// Wrapper/provider text for transient upstream failures, including OpenRouter\n\t// \"Provider returned error\" responses (#2264).\n\t\"provider.?returned.?error\",\n\n\t// Network, proxy, and fetch transport failures. This includes OpenAI Codex\n\t// raw-fetch failures such as \"upstream connect\", \"connection refused\", and\n\t// \"reset before headers\" (#733), plus OpenRouter connection drops (#3317).\n\t\"network.?error\",\n\t\"connection.?error\",\n\t\"connection.?refused\",\n\t\"connection.?lost\",\n\t\"other side closed\",\n\t\"fetch failed\",\n\t\"getaddrinfo\",\n\t\"ENOTFOUND\",\n\t\"EAI_AGAIN\",\n\t\"upstream.?connect\",\n\t\"reset before headers\",\n\t\"socket hang up\",\n\t\"socket connection was closed\",\n\t\"timed? out\",\n\t\"timeout\",\n\t\"terminated\",\n\n\t// WebSocket transports can report close/error text instead of HTTP/fetch text.\n\t\"websocket.?closed\",\n\t\"websocket.?error\",\n\n\t// Premature stream endings from SDKs and transports. Anthropic can throw\n\t// \"stream ended without ...\" and \"Anthropic stream ended before message_stop\"\n\t// (#4433); Bedrock/Smithy can throw an HTTP/2 no-response error (#3594).\n\t\"ended without\",\n\t\"stream ended before message_stop\",\n\t\"stream ended before a terminal response event\",\n\t\"http2 request did not get a response\",\n\n\t// Provider-requested retry delay cap failures should flow through the outer\n\t// retry policy so callers can surface/abort the backoff (#1123).\n\t\"retry delay\",\n\n\t// Explicit retry guidance emitted mid-stream by OpenAI Responses and Bedrock\n\t// stream exceptions (#6019).\n\t\"you can retry your request\",\n\t\"try your request again\",\n\t\"please retry your request\",\n\n\t// gRPC based providers (e.g. NVIDIA NIM)\n\t\"ResourceExhausted\",\n]);\n\n/**\n * Retry policy: bounded attempts with exponential backoff (`baseDelayMs * 2^(attempt-1)`).\n * Matches `settings.retry` (`enabled`, `maxRetries`, `baseDelayMs`) in coding-agent; kept\n * here so the classifier and the policy-driven retry loop live together and stay reusable\n * by the SDK and other callers.\n */\nexport interface RetryPolicy {\n\tenabled: boolean;\n\t/** Max retry attempts (0 = no retries). The initial call never counts as a retry. */\n\tmaxRetries: number;\n\t/** Base delay in ms. Per-attempt delay is `baseDelayMs * 2^(attempt-1)` before jitter. */\n\tbaseDelayMs: number;\n}\n\n/** Optional callbacks emitted by {@link retryAssistantCall} around each retry. */\nexport interface RetryCallbacks {\n\t/** Emitted before the backoff sleep of each retry attempt (1-indexed). */\n\tonRetryScheduled?: (\n\t\tattempt: number,\n\t\tmaxAttempts: number,\n\t\tdelayMs: number,\n\t\terrorMessage: string,\n\t) => void | Promise<void>;\n\t/** Emitted after the backoff sleep, immediately before the retried call starts. */\n\tonRetryAttemptStart?: () => void | Promise<void>;\n\t/** Emitted once when the loop ends: success if a later call completed normally. */\n\tonRetryFinished?: (success: boolean, attempt: number, finalError?: string) => void | Promise<void>;\n}\n\nclass RetrySleepAbortError extends Error {\n\tconstructor() {\n\t\tsuper(\"Aborted\");\n\t}\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new RetrySleepAbortError());\n\t\t\treturn;\n\t\t}\n\t\tconst timeout = setTimeout(resolve, ms);\n\t\tsignal?.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\treject(new RetrySleepAbortError());\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\n/**\n * Run a single assistant-producing call with bounded retry on transient errors.\n *\n * Behavior:\n * - A successful response is returned immediately. Aborts are terminal and never\n * retried, but reported as unsuccessful if they happen after a retry was scheduled.\n * Aborts during the backoff sleep are normalized to an aborted `AssistantMessage`\n * too, so callers do not need to care when cancellation happened.\n * - A non-retryable error (per {@link isRetryableAssistantError}, including quota/\n * billing exhaustion) is returned immediately so deterministic errors fail fast.\n * - Otherwise retries up to `maxRetries` times with exponential backoff, emitting\n * `onRetryScheduled` before each sleep, `onRetryAttemptStart` after each sleep before\n * the retried call starts, and `onRetryFinished` once at the end (whether the loop\n * ends in success, exhausted retries, or an aborted backoff).\n *\n * When `policy` is undefined or disabled, the first response is returned unchanged\n * (equivalent to calling `produce()` directly).\n */\nexport async function retryAssistantCall(\n\tproduce: () => Promise<AssistantMessage>,\n\tpolicy: RetryPolicy | undefined,\n\tsignal: AbortSignal | undefined,\n\tcallbacks?: RetryCallbacks,\n): Promise<AssistantMessage> {\n\tconst maxAttempts = policy?.enabled ? policy.maxRetries : 0;\n\n\tlet attempt = 0;\n\tlet lastRetry: { attempt: number; errorMessage: string } | undefined;\n\tfor (;;) {\n\t\tconst response = await produce();\n\n\t\t// Abort: terminal but not successful. Never retry an aborted message.\n\t\tif (response.stopReason === \"aborted\") {\n\t\t\tif (lastRetry) await callbacks?.onRetryFinished?.(false, lastRetry.attempt);\n\t\t\treturn response;\n\t\t}\n\n\t\t// Success: non-error, non-abort responses return as-is.\n\t\tif (response.stopReason !== \"error\") {\n\t\t\tif (lastRetry) await callbacks?.onRetryFinished?.(true, lastRetry.attempt);\n\t\t\treturn response;\n\t\t}\n\n\t\t// Non-retryable, or budget exhausted: return the final error message.\n\t\tif (attempt >= maxAttempts || !isRetryableAssistantError(response)) {\n\t\t\tif (lastRetry) await callbacks?.onRetryFinished?.(false, lastRetry.attempt, response.errorMessage);\n\t\t\treturn response;\n\t\t}\n\n\t\tattempt++;\n\t\tlastRetry = { attempt, errorMessage: response.errorMessage || \"Unknown error\" };\n\t\tconst delayMs = policy!.baseDelayMs * 2 ** (attempt - 1);\n\t\tawait callbacks?.onRetryScheduled?.(attempt, maxAttempts, delayMs, lastRetry.errorMessage);\n\n\t\t// Normalize aborts during retry backoff to the same AssistantMessage shape as\n\t\t// provider stream aborts, so callers do not need to care when cancellation happened.\n\t\ttry {\n\t\t\tawait sleep(delayMs, signal);\n\t\t} catch (error) {\n\t\t\tawait callbacks?.onRetryFinished?.(false, attempt, lastRetry.errorMessage);\n\t\t\tif (error instanceof RetrySleepAbortError) {\n\t\t\t\treturn { ...response, stopReason: \"aborted\", errorMessage: undefined };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tawait callbacks?.onRetryAttemptStart?.();\n\t}\n}\n\n/**\n * Classifies whether a failed assistant message looks like a transient provider\n * or transport error, so callers can decide if the last assistant turn should be\n * restarted.\n *\n * This does not implement retry policy. Callers should first handle context\n * overflow separately, then apply their own retry budget, backoff, and reporting\n * before restarting the assistant turn.\n */\nexport function isRetryableAssistantError(message: AssistantMessage): boolean {\n\tif (\n\t\tmessage.stopReason !== \"error\" ||\n\t\tmessage.stopDetails?.type === \"refusal\" ||\n\t\tmessage.stopDetails?.type === \"sensitive\" ||\n\t\t!message.errorMessage\n\t) {\n\t\treturn false;\n\t}\n\tconst errorMessage = message.errorMessage;\n\tif (NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN.test(errorMessage)) return false;\n\treturn RETRYABLE_PROVIDER_ERROR_PATTERN.test(errorMessage);\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes unpaired Unicode surrogate characters from a string.
|
|
3
|
+
*
|
|
4
|
+
* Unpaired surrogates (high surrogates 0xD800-0xDBFF without matching low surrogates 0xDC00-0xDFFF,
|
|
5
|
+
* or vice versa) cause JSON serialization errors in many API providers.
|
|
6
|
+
*
|
|
7
|
+
* Valid emoji and other characters outside the Basic Multilingual Plane use properly paired
|
|
8
|
+
* surrogates and will NOT be affected by this function.
|
|
9
|
+
*
|
|
10
|
+
* @param text - The text to sanitize
|
|
11
|
+
* @returns The sanitized text with unpaired surrogates removed
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Valid emoji (properly paired surrogates) are preserved
|
|
15
|
+
* sanitizeSurrogates("Hello 🙈 World") // => "Hello 🙈 World"
|
|
16
|
+
*
|
|
17
|
+
* // Unpaired high surrogate is removed
|
|
18
|
+
* const unpaired = String.fromCharCode(0xD83D); // high surrogate without low
|
|
19
|
+
* sanitizeSurrogates(`Text ${unpaired} here`) // => "Text here"
|
|
20
|
+
*/
|
|
21
|
+
export declare function sanitizeSurrogates(text: string): string;
|
|
22
|
+
//# sourceMappingURL=sanitize-unicode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-unicode.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize-unicode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIvD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes unpaired Unicode surrogate characters from a string.
|
|
3
|
+
*
|
|
4
|
+
* Unpaired surrogates (high surrogates 0xD800-0xDBFF without matching low surrogates 0xDC00-0xDFFF,
|
|
5
|
+
* or vice versa) cause JSON serialization errors in many API providers.
|
|
6
|
+
*
|
|
7
|
+
* Valid emoji and other characters outside the Basic Multilingual Plane use properly paired
|
|
8
|
+
* surrogates and will NOT be affected by this function.
|
|
9
|
+
*
|
|
10
|
+
* @param text - The text to sanitize
|
|
11
|
+
* @returns The sanitized text with unpaired surrogates removed
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Valid emoji (properly paired surrogates) are preserved
|
|
15
|
+
* sanitizeSurrogates("Hello 🙈 World") // => "Hello 🙈 World"
|
|
16
|
+
*
|
|
17
|
+
* // Unpaired high surrogate is removed
|
|
18
|
+
* const unpaired = String.fromCharCode(0xD83D); // high surrogate without low
|
|
19
|
+
* sanitizeSurrogates(`Text ${unpaired} here`) // => "Text here"
|
|
20
|
+
*/
|
|
21
|
+
export function sanitizeSurrogates(text) {
|
|
22
|
+
// Replace unpaired high surrogates (0xD800-0xDBFF not followed by low surrogate)
|
|
23
|
+
// Replace unpaired low surrogates (0xDC00-0xDFFF not preceded by high surrogate)
|
|
24
|
+
return text.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g, "");
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=sanitize-unicode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-unicode.js","sourceRoot":"","sources":["../../src/utils/sanitize-unicode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,iFAAiF;IACjF,iFAAiF;IACjF,OAAO,IAAI,CAAC,OAAO,CAAC,yEAAyE,EAAE,EAAE,CAAC,CAAC;AACpG,CAAC","sourcesContent":["/**\n * Removes unpaired Unicode surrogate characters from a string.\n *\n * Unpaired surrogates (high surrogates 0xD800-0xDBFF without matching low surrogates 0xDC00-0xDFFF,\n * or vice versa) cause JSON serialization errors in many API providers.\n *\n * Valid emoji and other characters outside the Basic Multilingual Plane use properly paired\n * surrogates and will NOT be affected by this function.\n *\n * @param text - The text to sanitize\n * @returns The sanitized text with unpaired surrogates removed\n *\n * @example\n * // Valid emoji (properly paired surrogates) are preserved\n * sanitizeSurrogates(\"Hello 🙈 World\") // => \"Hello 🙈 World\"\n *\n * // Unpaired high surrogate is removed\n * const unpaired = String.fromCharCode(0xD83D); // high surrogate without low\n * sanitizeSurrogates(`Text ${unpaired} here`) // => \"Text here\"\n */\nexport function sanitizeSurrogates(text: string): string {\n\t// Replace unpaired high surrogates (0xD800-0xDBFF not followed by low surrogate)\n\t// Replace unpaired low surrogates (0xDC00-0xDFFF not preceded by high surrogate)\n\treturn text.replace(/[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/g, \"\");\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { AssistantMessage } from "../types.ts";
|
|
2
|
+
export declare const SERVER_FALLBACK_ABORTED_DIAGNOSTIC = "server_fallback_aborted";
|
|
3
|
+
export declare const BILLING_INCOMPLETE_DIAGNOSTIC = "billing_incomplete_after_client_abort";
|
|
4
|
+
export interface ServerFallbackReceipt {
|
|
5
|
+
readonly from: string;
|
|
6
|
+
readonly to: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Anthropic marks a classifier handoff with `{type:"fallback", from:{model}, to:{model}}`
|
|
10
|
+
* (`server-side-fallback-*` betas). Returns undefined for anything else, so an
|
|
11
|
+
* unrelated or malformed provider-native block falls through to normal handling.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseServerFallbackReceipt(block: unknown): ServerFallbackReceipt | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Sticky routing serves later turns of a fallen-back conversation from the
|
|
16
|
+
* substitute model with no `fallback` block at all; a `fallback_message` entry
|
|
17
|
+
* in `usage.iterations` is the documented signal. A served-model string
|
|
18
|
+
* comparison is deliberately NOT used: gateways and Bedrock-style endpoints
|
|
19
|
+
* rewrite model ids, so a mismatch is not evidence of a fallback.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseStickyFallbackReceipt(usage: unknown, requestedModel: string, servedModel?: string): ServerFallbackReceipt | undefined;
|
|
22
|
+
export declare function serverFallbackRefusalExplanation(receipt: ServerFallbackReceipt): string;
|
|
23
|
+
/**
|
|
24
|
+
* Rewrites an aborted turn into the same shape a pre-output classifier refusal
|
|
25
|
+
* has, so `isClassifierRefusal()` routes it through the caller's fallback chain.
|
|
26
|
+
* Content is dropped: the substitute model's partial output was never requested,
|
|
27
|
+
* and replaying a half-turn containing a fallback marker breaks Anthropic replay.
|
|
28
|
+
*/
|
|
29
|
+
export declare function applyServerFallbackAbort(message: AssistantMessage, receipt: ServerFallbackReceipt): void;
|
|
30
|
+
//# sourceMappingURL=server-fallback-receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-fallback-receipt.d.ts","sourceRoot":"","sources":["../../src/utils/server-fallback-receipt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,kCAAkC,4BAA4B,CAAC;AAC5E,eAAO,MAAM,6BAA6B,0CAA0C,CAAC;AAErF,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACpB;AAWD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAK5F;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,GAClB,qBAAqB,GAAG,SAAS,CAUnC;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAEvF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAgBxG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { appendAssistantMessageDiagnostic } from "./diagnostics.js";
|
|
2
|
+
export const SERVER_FALLBACK_ABORTED_DIAGNOSTIC = "server_fallback_aborted";
|
|
3
|
+
export const BILLING_INCOMPLETE_DIAGNOSTIC = "billing_incomplete_after_client_abort";
|
|
4
|
+
function isRecord(value) {
|
|
5
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
function readModel(value) {
|
|
8
|
+
if (!isRecord(value))
|
|
9
|
+
return undefined;
|
|
10
|
+
return typeof value.model === "string" && value.model.length > 0 ? value.model : undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Anthropic marks a classifier handoff with `{type:"fallback", from:{model}, to:{model}}`
|
|
14
|
+
* (`server-side-fallback-*` betas). Returns undefined for anything else, so an
|
|
15
|
+
* unrelated or malformed provider-native block falls through to normal handling.
|
|
16
|
+
*/
|
|
17
|
+
export function parseServerFallbackReceipt(block) {
|
|
18
|
+
if (!isRecord(block) || block.type !== "fallback")
|
|
19
|
+
return undefined;
|
|
20
|
+
const from = readModel(block.from);
|
|
21
|
+
const to = readModel(block.to);
|
|
22
|
+
return from !== undefined && to !== undefined ? { from, to } : undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Sticky routing serves later turns of a fallen-back conversation from the
|
|
26
|
+
* substitute model with no `fallback` block at all; a `fallback_message` entry
|
|
27
|
+
* in `usage.iterations` is the documented signal. A served-model string
|
|
28
|
+
* comparison is deliberately NOT used: gateways and Bedrock-style endpoints
|
|
29
|
+
* rewrite model ids, so a mismatch is not evidence of a fallback.
|
|
30
|
+
*/
|
|
31
|
+
export function parseStickyFallbackReceipt(usage, requestedModel, servedModel) {
|
|
32
|
+
if (!isRecord(usage) || !Array.isArray(usage.iterations))
|
|
33
|
+
return undefined;
|
|
34
|
+
for (let index = usage.iterations.length - 1; index >= 0; index--) {
|
|
35
|
+
const entry = usage.iterations[index];
|
|
36
|
+
if (!isRecord(entry) || entry.type !== "fallback_message")
|
|
37
|
+
continue;
|
|
38
|
+
const entryModel = typeof entry.model === "string" && entry.model.length > 0 ? entry.model : undefined;
|
|
39
|
+
const to = entryModel ?? servedModel;
|
|
40
|
+
return to !== undefined ? { from: requestedModel, to } : undefined;
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
export function serverFallbackRefusalExplanation(receipt) {
|
|
45
|
+
return `Server-side fallback (${receipt.from} -> ${receipt.to}) aborted by client policy`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Rewrites an aborted turn into the same shape a pre-output classifier refusal
|
|
49
|
+
* has, so `isClassifierRefusal()` routes it through the caller's fallback chain.
|
|
50
|
+
* Content is dropped: the substitute model's partial output was never requested,
|
|
51
|
+
* and replaying a half-turn containing a fallback marker breaks Anthropic replay.
|
|
52
|
+
*/
|
|
53
|
+
export function applyServerFallbackAbort(message, receipt) {
|
|
54
|
+
const explanation = serverFallbackRefusalExplanation(receipt);
|
|
55
|
+
message.content = [];
|
|
56
|
+
message.stopReason = "error";
|
|
57
|
+
message.stopDetails = { type: "refusal", explanation };
|
|
58
|
+
message.errorMessage = explanation;
|
|
59
|
+
appendAssistantMessageDiagnostic(message, {
|
|
60
|
+
type: SERVER_FALLBACK_ABORTED_DIAGNOSTIC,
|
|
61
|
+
timestamp: Date.now(),
|
|
62
|
+
details: { from: receipt.from, to: receipt.to },
|
|
63
|
+
});
|
|
64
|
+
appendAssistantMessageDiagnostic(message, {
|
|
65
|
+
type: BILLING_INCOMPLETE_DIAGNOSTIC,
|
|
66
|
+
timestamp: Date.now(),
|
|
67
|
+
details: { reason: "per-attempt usage does not arrive after a client abort" },
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=server-fallback-receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-fallback-receipt.js","sourceRoot":"","sources":["../../src/utils/server-fallback-receipt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,CAAC,MAAM,kCAAkC,GAAG,yBAAyB,CAAC;AAC5E,MAAM,CAAC,MAAM,6BAA6B,GAAG,uCAAuC,CAAC;AAOrF,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACzC,KAAc,EACd,cAAsB,EACtB,WAAoB;IAEpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,MAAM,KAAK,GAAY,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB;YAAE,SAAS;QACpE,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,MAAM,EAAE,GAAG,UAAU,IAAI,WAAW,CAAC;QACrC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAA8B;IAC9E,OAAO,yBAAyB,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,EAAE,4BAA4B,CAAC;AAC3F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAyB,EAAE,OAA8B;IACjG,MAAM,WAAW,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC9D,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;IACrB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC;IAC7B,OAAO,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IACvD,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC;IACnC,gCAAgC,CAAC,OAAO,EAAE;QACzC,IAAI,EAAE,kCAAkC;QACxC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;KAC/C,CAAC,CAAC;IACH,gCAAgC,CAAC,OAAO,EAAE;QACzC,IAAI,EAAE,6BAA6B;QACnC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO,EAAE,EAAE,MAAM,EAAE,wDAAwD,EAAE;KAC7E,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { AssistantMessage } from \"../types.ts\";\nimport { appendAssistantMessageDiagnostic } from \"./diagnostics.ts\";\n\nexport const SERVER_FALLBACK_ABORTED_DIAGNOSTIC = \"server_fallback_aborted\";\nexport const BILLING_INCOMPLETE_DIAGNOSTIC = \"billing_incomplete_after_client_abort\";\n\nexport interface ServerFallbackReceipt {\n\treadonly from: string;\n\treadonly to: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readModel(value: unknown): string | undefined {\n\tif (!isRecord(value)) return undefined;\n\treturn typeof value.model === \"string\" && value.model.length > 0 ? value.model : undefined;\n}\n\n/**\n * Anthropic marks a classifier handoff with `{type:\"fallback\", from:{model}, to:{model}}`\n * (`server-side-fallback-*` betas). Returns undefined for anything else, so an\n * unrelated or malformed provider-native block falls through to normal handling.\n */\nexport function parseServerFallbackReceipt(block: unknown): ServerFallbackReceipt | undefined {\n\tif (!isRecord(block) || block.type !== \"fallback\") return undefined;\n\tconst from = readModel(block.from);\n\tconst to = readModel(block.to);\n\treturn from !== undefined && to !== undefined ? { from, to } : undefined;\n}\n\n/**\n * Sticky routing serves later turns of a fallen-back conversation from the\n * substitute model with no `fallback` block at all; a `fallback_message` entry\n * in `usage.iterations` is the documented signal. A served-model string\n * comparison is deliberately NOT used: gateways and Bedrock-style endpoints\n * rewrite model ids, so a mismatch is not evidence of a fallback.\n */\nexport function parseStickyFallbackReceipt(\n\tusage: unknown,\n\trequestedModel: string,\n\tservedModel?: string,\n): ServerFallbackReceipt | undefined {\n\tif (!isRecord(usage) || !Array.isArray(usage.iterations)) return undefined;\n\tfor (let index = usage.iterations.length - 1; index >= 0; index--) {\n\t\tconst entry: unknown = usage.iterations[index];\n\t\tif (!isRecord(entry) || entry.type !== \"fallback_message\") continue;\n\t\tconst entryModel = typeof entry.model === \"string\" && entry.model.length > 0 ? entry.model : undefined;\n\t\tconst to = entryModel ?? servedModel;\n\t\treturn to !== undefined ? { from: requestedModel, to } : undefined;\n\t}\n\treturn undefined;\n}\n\nexport function serverFallbackRefusalExplanation(receipt: ServerFallbackReceipt): string {\n\treturn `Server-side fallback (${receipt.from} -> ${receipt.to}) aborted by client policy`;\n}\n\n/**\n * Rewrites an aborted turn into the same shape a pre-output classifier refusal\n * has, so `isClassifierRefusal()` routes it through the caller's fallback chain.\n * Content is dropped: the substitute model's partial output was never requested,\n * and replaying a half-turn containing a fallback marker breaks Anthropic replay.\n */\nexport function applyServerFallbackAbort(message: AssistantMessage, receipt: ServerFallbackReceipt): void {\n\tconst explanation = serverFallbackRefusalExplanation(receipt);\n\tmessage.content = [];\n\tmessage.stopReason = \"error\";\n\tmessage.stopDetails = { type: \"refusal\", explanation };\n\tmessage.errorMessage = explanation;\n\tappendAssistantMessageDiagnostic(message, {\n\t\ttype: SERVER_FALLBACK_ABORTED_DIAGNOSTIC,\n\t\ttimestamp: Date.now(),\n\t\tdetails: { from: receipt.from, to: receipt.to },\n\t});\n\tappendAssistantMessageDiagnostic(message, {\n\t\ttype: BILLING_INCOMPLETE_DIAGNOSTIC,\n\t\ttimestamp: Date.now(),\n\t\tdetails: { reason: \"per-attempt usage does not arrive after a client abort\" },\n\t});\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-details.d.ts","sourceRoot":"","sources":["../../src/utils/stop-details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAKtE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Returns true when an assistant error was classified as a refusal or sensitive stop. */
|
|
2
|
+
export function isClassifierRefusal(message) {
|
|
3
|
+
return (message.stopReason === "error" &&
|
|
4
|
+
(message.stopDetails?.type === "refusal" || message.stopDetails?.type === "sensitive"));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=stop-details.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-details.js","sourceRoot":"","sources":["../../src/utils/stop-details.ts"],"names":[],"mappings":"AAEA,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CAAC,OAAyB;IAC5D,OAAO,CACN,OAAO,CAAC,UAAU,KAAK,OAAO;QAC9B,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,KAAK,WAAW,CAAC,CACtF,CAAC;AACH,CAAC","sourcesContent":["import type { AssistantMessage } from \"../types.ts\";\n\n/** Returns true when an assistant error was classified as a refusal or sensitive stop. */\nexport function isClassifierRefusal(message: AssistantMessage): boolean {\n\treturn (\n\t\tmessage.stopReason === \"error\" &&\n\t\t(message.stopDetails?.type === \"refusal\" || message.stopDetails?.type === \"sensitive\")\n\t);\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ImageContent, ProviderNativeContent, TextContent, ThinkingContent, ToolCall } from "../types.ts";
|
|
2
|
+
type Content = TextContent | ImageContent | ThinkingContent | ToolCall | ProviderNativeContent;
|
|
3
|
+
/** Extract and join text from message content. */
|
|
4
|
+
export declare function contentText(content: string | readonly Content[], separator?: string): string;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE/G,KAAK,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,eAAe,GAAG,QAAQ,GAAG,qBAAqB,CAAC;AAE/F,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,EAAE,SAAS,SAAO,GAAG,MAAM,CAM1F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Extract and join text from message content. */
|
|
2
|
+
export function contentText(content, separator = "\n") {
|
|
3
|
+
if (typeof content === "string")
|
|
4
|
+
return content;
|
|
5
|
+
return content
|
|
6
|
+
.filter((block) => block.type === "text")
|
|
7
|
+
.map((block) => block.text)
|
|
8
|
+
.join(separator);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAIA,kDAAkD;AAClD,MAAM,UAAU,WAAW,CAAC,OAAoC,EAAE,SAAS,GAAG,IAAI;IACjF,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,OAAO,OAAO;SACZ,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,SAAS,CAAC,CAAC;AACnB,CAAC","sourcesContent":["import type { ImageContent, ProviderNativeContent, TextContent, ThinkingContent, ToolCall } from \"../types.ts\";\n\ntype Content = TextContent | ImageContent | ThinkingContent | ToolCall | ProviderNativeContent;\n\n/** Extract and join text from message content. */\nexport function contentText(content: string | readonly Content[], separator = \"\\n\"): string {\n\tif (typeof content === \"string\") return content;\n\treturn content\n\t\t.filter((block) => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(separator);\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function isForcedToolChoiceUnsupportedError(error: unknown, sentForcedToolChoice: boolean): boolean;
|
|
2
|
+
export declare function omitToolChoiceParam<TParams extends {
|
|
3
|
+
tool_choice?: unknown;
|
|
4
|
+
}>(params: TParams): TParams;
|
|
5
|
+
//# sourceMappingURL=tool-choice-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-choice-fallback.d.ts","sourceRoot":"","sources":["../../src/utils/tool-choice-fallback.ts"],"names":[],"mappings":"AAgCA,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAWzG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,SAAS;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAIvG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return typeof value === "object" && value !== null;
|
|
3
|
+
}
|
|
4
|
+
function extractHttpStatus(error) {
|
|
5
|
+
if (!isRecord(error)) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const status = error.status;
|
|
9
|
+
if (typeof status === "number") {
|
|
10
|
+
return status;
|
|
11
|
+
}
|
|
12
|
+
const response = error.response;
|
|
13
|
+
if (isRecord(response) && typeof response.status === "number") {
|
|
14
|
+
return response.status;
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
function errorMessage(error) {
|
|
19
|
+
if (error instanceof Error) {
|
|
20
|
+
return error.message;
|
|
21
|
+
}
|
|
22
|
+
if (typeof error === "string") {
|
|
23
|
+
return error;
|
|
24
|
+
}
|
|
25
|
+
return String(error);
|
|
26
|
+
}
|
|
27
|
+
export function isForcedToolChoiceUnsupportedError(error, sentForcedToolChoice) {
|
|
28
|
+
if (!sentForcedToolChoice || extractHttpStatus(error) !== 400) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const message = errorMessage(error);
|
|
32
|
+
return (/tool[_\s-]?choices?\b.*?(not\s+compatible|incompatible|not\s+supported|unsupported)/is.test(message) ||
|
|
33
|
+
/forces?\s+tool\s+use.*?(not\s+compatible|incompatible|not\s+supported|unsupported)/is.test(message) ||
|
|
34
|
+
/does\s+not\s+support\s+forced\s+tool[_\s-]?choices?/is.test(message));
|
|
35
|
+
}
|
|
36
|
+
export function omitToolChoiceParam(params) {
|
|
37
|
+
const nextParams = { ...params };
|
|
38
|
+
delete nextParams.tool_choice;
|
|
39
|
+
return nextParams;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=tool-choice-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-choice-fallback.js","sourceRoot":"","sources":["../../src/utils/tool-choice-fallback.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/D,OAAO,QAAQ,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IACnC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,KAAc,EAAE,oBAA6B;IAC/F,IAAI,CAAC,oBAAoB,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,CACN,uFAAuF,CAAC,IAAI,CAAC,OAAO,CAAC;QACrG,sFAAsF,CAAC,IAAI,CAAC,OAAO,CAAC;QACpG,uDAAuD,CAAC,IAAI,CAAC,OAAO,CAAC,CACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAA4C,MAAe;IAC7F,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IACjC,OAAO,UAAU,CAAC,WAAW,CAAC;IAC9B,OAAO,UAAU,CAAC;AACnB,CAAC","sourcesContent":["function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction extractHttpStatus(error: unknown): number | undefined {\n\tif (!isRecord(error)) {\n\t\treturn undefined;\n\t}\n\n\tconst status = error.status;\n\tif (typeof status === \"number\") {\n\t\treturn status;\n\t}\n\n\tconst response = error.response;\n\tif (isRecord(response) && typeof response.status === \"number\") {\n\t\treturn response.status;\n\t}\n\n\treturn undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\tif (typeof error === \"string\") {\n\t\treturn error;\n\t}\n\treturn String(error);\n}\n\nexport function isForcedToolChoiceUnsupportedError(error: unknown, sentForcedToolChoice: boolean): boolean {\n\tif (!sentForcedToolChoice || extractHttpStatus(error) !== 400) {\n\t\treturn false;\n\t}\n\n\tconst message = errorMessage(error);\n\treturn (\n\t\t/tool[_\\s-]?choices?\\b.*?(not\\s+compatible|incompatible|not\\s+supported|unsupported)/is.test(message) ||\n\t\t/forces?\\s+tool\\s+use.*?(not\\s+compatible|incompatible|not\\s+supported|unsupported)/is.test(message) ||\n\t\t/does\\s+not\\s+support\\s+forced\\s+tool[_\\s-]?choices?/is.test(message)\n\t);\n}\n\nexport function omitToolChoiceParam<TParams extends { tool_choice?: unknown }>(params: TParams): TParams {\n\tconst nextParams = { ...params };\n\tdelete nextParams.tool_choice;\n\treturn nextParams;\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Message } from "../types.ts";
|
|
2
|
+
export declare const TOOL_RESULT_PLACEHOLDER = "Tool output unavailable (context compacted)";
|
|
3
|
+
/** Repairs orphaned tool results and dangling tool calls. */
|
|
4
|
+
export declare function repairOrphanedToolResults(messages: Message[]): Message[];
|
|
5
|
+
//# sourceMappingURL=tool-pair-repair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-pair-repair.d.ts","sourceRoot":"","sources":["../../src/utils/tool-pair-repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAExD,eAAO,MAAM,uBAAuB,gDAAgD,CAAC;AAgBrF,6DAA6D;AAC7D,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAqDxE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export const TOOL_RESULT_PLACEHOLDER = "Tool output unavailable (context compacted)";
|
|
2
|
+
/**
|
|
3
|
+
* Retry diagnostic for a dangling tool call flagged `incomplete` by the text
|
|
4
|
+
* tool-call middleware (truncated and unrecoverable at stream end). Tells the
|
|
5
|
+
* model the call never ran and should be re-issued with complete arguments.
|
|
6
|
+
* Duplicated verbatim in the sibling pair-repair copy — the two packages
|
|
7
|
+
* intentionally do not share this constant (no new cross-package dependency).
|
|
8
|
+
*/
|
|
9
|
+
function incompleteToolCallRetryText(name, errorMessage) {
|
|
10
|
+
if (errorMessage !== undefined) {
|
|
11
|
+
return `${errorMessage}${errorMessage.endsWith(".") ? "" : "."} Re-issue the tool call with complete arguments.`;
|
|
12
|
+
}
|
|
13
|
+
return `Tool call "${name}" was not executed: the response ended before the tool call was complete. Re-issue the tool call with complete arguments.`;
|
|
14
|
+
}
|
|
15
|
+
/** Repairs orphaned tool results and dangling tool calls. */
|
|
16
|
+
export function repairOrphanedToolResults(messages) {
|
|
17
|
+
const toolCallIds = new Set();
|
|
18
|
+
const toolResultIds = new Set();
|
|
19
|
+
for (const message of messages) {
|
|
20
|
+
if (message.role === "assistant") {
|
|
21
|
+
for (const block of message.content) {
|
|
22
|
+
if (block.type === "toolCall")
|
|
23
|
+
toolCallIds.add(block.id);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (message.role === "toolResult")
|
|
27
|
+
toolResultIds.add(message.toolCallId);
|
|
28
|
+
}
|
|
29
|
+
const output = [];
|
|
30
|
+
const dangling = new Set([...toolCallIds].filter((id) => !toolResultIds.has(id)));
|
|
31
|
+
for (const message of messages) {
|
|
32
|
+
if (message.role === "toolResult") {
|
|
33
|
+
if (!toolCallIds.has(message.toolCallId)) {
|
|
34
|
+
output.push({
|
|
35
|
+
...message,
|
|
36
|
+
content: [{ type: "text", text: TOOL_RESULT_PLACEHOLDER }],
|
|
37
|
+
});
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
output.push(message);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
output.push(message);
|
|
44
|
+
if (message.role === "assistant") {
|
|
45
|
+
// Errored/aborted assistants are dropped downstream by transformMessages;
|
|
46
|
+
// synthesizing results for their calls would only create orphans there.
|
|
47
|
+
if (message.stopReason === "error" || message.stopReason === "aborted")
|
|
48
|
+
continue;
|
|
49
|
+
for (const block of message.content) {
|
|
50
|
+
if (block.type !== "toolCall" || !dangling.has(block.id))
|
|
51
|
+
continue;
|
|
52
|
+
const incomplete = block.incomplete === true;
|
|
53
|
+
const text = incomplete
|
|
54
|
+
? incompleteToolCallRetryText(block.name, block.errorMessage)
|
|
55
|
+
: TOOL_RESULT_PLACEHOLDER;
|
|
56
|
+
output.push({
|
|
57
|
+
role: "toolResult",
|
|
58
|
+
toolCallId: block.id,
|
|
59
|
+
toolName: block.name,
|
|
60
|
+
content: [{ type: "text", text }],
|
|
61
|
+
isError: incomplete,
|
|
62
|
+
timestamp: message.timestamp ? message.timestamp + 1 : Date.now(),
|
|
63
|
+
});
|
|
64
|
+
dangling.delete(block.id);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return output;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=tool-pair-repair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-pair-repair.js","sourceRoot":"","sources":["../../src/utils/tool-pair-repair.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,6CAA6C,CAAC;AAErF;;;;;;GAMG;AACH,SAAS,2BAA2B,CAAC,IAAY,EAAE,YAAqB;IACvE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,kDAAkD,CAAC;IAClH,CAAC;IACD,OAAO,cAAc,IAAI,2HAA2H,CAAC;AACtJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,yBAAyB,CAAC,QAAmB;IAC5D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1D,CAAC;QACF,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;YAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAElF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC;oBACX,GAAG,OAAO;oBACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAyB;iBAClF,CAAC,CAAC;gBACH,SAAS;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACV,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;gBAAE,SAAS;YACjF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACnE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;gBAC7C,MAAM,IAAI,GAAG,UAAU;oBACtB,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;oBAC7D,CAAC,CAAC,uBAAuB,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,KAAK,CAAC,EAAE;oBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI;oBACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjC,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;iBACjE,CAAC,CAAC;gBACH,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC","sourcesContent":["import type { Message, TextContent } from \"../types.ts\";\n\nexport const TOOL_RESULT_PLACEHOLDER = \"Tool output unavailable (context compacted)\";\n\n/**\n * Retry diagnostic for a dangling tool call flagged `incomplete` by the text\n * tool-call middleware (truncated and unrecoverable at stream end). Tells the\n * model the call never ran and should be re-issued with complete arguments.\n * Duplicated verbatim in the sibling pair-repair copy — the two packages\n * intentionally do not share this constant (no new cross-package dependency).\n */\nfunction incompleteToolCallRetryText(name: string, errorMessage?: string): string {\n\tif (errorMessage !== undefined) {\n\t\treturn `${errorMessage}${errorMessage.endsWith(\".\") ? \"\" : \".\"} Re-issue the tool call with complete arguments.`;\n\t}\n\treturn `Tool call \"${name}\" was not executed: the response ended before the tool call was complete. Re-issue the tool call with complete arguments.`;\n}\n\n/** Repairs orphaned tool results and dangling tool calls. */\nexport function repairOrphanedToolResults(messages: Message[]): Message[] {\n\tconst toolCallIds = new Set<string>();\n\tconst toolResultIds = new Set<string>();\n\tfor (const message of messages) {\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type === \"toolCall\") toolCallIds.add(block.id);\n\t\t\t}\n\t\t}\n\t\tif (message.role === \"toolResult\") toolResultIds.add(message.toolCallId);\n\t}\n\n\tconst output: Message[] = [];\n\tconst dangling = new Set([...toolCallIds].filter((id) => !toolResultIds.has(id)));\n\n\tfor (const message of messages) {\n\t\tif (message.role === \"toolResult\") {\n\t\t\tif (!toolCallIds.has(message.toolCallId)) {\n\t\t\t\toutput.push({\n\t\t\t\t\t...message,\n\t\t\t\t\tcontent: [{ type: \"text\", text: TOOL_RESULT_PLACEHOLDER }] satisfies TextContent[],\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\toutput.push(message);\n\t\t\tcontinue;\n\t\t}\n\n\t\toutput.push(message);\n\t\tif (message.role === \"assistant\") {\n\t\t\t// Errored/aborted assistants are dropped downstream by transformMessages;\n\t\t\t// synthesizing results for their calls would only create orphans there.\n\t\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") continue;\n\t\t\tfor (const block of message.content) {\n\t\t\t\tif (block.type !== \"toolCall\" || !dangling.has(block.id)) continue;\n\t\t\t\tconst incomplete = block.incomplete === true;\n\t\t\t\tconst text = incomplete\n\t\t\t\t\t? incompleteToolCallRetryText(block.name, block.errorMessage)\n\t\t\t\t\t: TOOL_RESULT_PLACEHOLDER;\n\t\t\t\toutput.push({\n\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\ttoolCallId: block.id,\n\t\t\t\t\ttoolName: block.name,\n\t\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\t\tisError: incomplete,\n\t\t\t\t\ttimestamp: message.timestamp ? message.timestamp + 1 : Date.now(),\n\t\t\t\t});\n\t\t\t\tdangling.delete(block.id);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema normalization for tool parameters sent to OpenAI-compatible
|
|
3
|
+
* backends. Some gateways (e.g. Apitopia → Kimi / Moonshot) enforce a stricter
|
|
4
|
+
* subset that rejects a sibling `type` keyword on schemas that also declare
|
|
5
|
+
* `anyOf` / `oneOf` / `allOf`. This helper removes that redundancy while
|
|
6
|
+
* preserving the schema's semantics.
|
|
7
|
+
*/
|
|
8
|
+
export type ToolSchemaFlavor = "moonshot-mfjs";
|
|
9
|
+
/**
|
|
10
|
+
* Return a deep-normalized copy of a tool's JSON Schema parameters, suitable
|
|
11
|
+
* for OpenAI-compatible Chat Completions backends.
|
|
12
|
+
*/
|
|
13
|
+
export declare function normalizeToolParametersForOpenAICompat(schema: Record<string, unknown>): Record<string, unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* Moonshot-flavored JSON Schema subset: in addition to the OpenAI-compatible
|
|
16
|
+
* normalization, drop non-structural annotation keywords that Moonshot rejects.
|
|
17
|
+
*/
|
|
18
|
+
export declare function normalizeToolParametersForMoonshot(schema: Record<string, unknown>): Record<string, unknown>;
|
|
19
|
+
//# sourceMappingURL=tool-schema-compat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-schema-compat.d.ts","sourceRoot":"","sources":["../../src/utils/tool-schema-compat.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AA4K/C;;;GAGG;AACH,wBAAgB,sCAAsC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE/G;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAG3G"}
|