@draht/ai 2026.7.13 → 2026.9.5-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/anthropic-messages.d.ts.map +1 -1
- package/dist/api/anthropic-messages.js +144 -65
- package/dist/api/anthropic-messages.js.map +1 -1
- package/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/dist/api/azure-openai-responses.js +28 -10
- package/dist/api/azure-openai-responses.js.map +1 -1
- package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.js +70 -25
- package/dist/api/bedrock-converse-stream.js.map +1 -1
- 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 +100 -0
- package/dist/api/constrained-sampling.js.map +1 -0
- package/dist/api/google-generative-ai.d.ts +2 -2
- package/dist/api/google-generative-ai.d.ts.map +1 -1
- package/dist/api/google-generative-ai.js +37 -27
- package/dist/api/google-generative-ai.js.map +1 -1
- package/dist/api/google-shared.d.ts +19 -5
- package/dist/api/google-shared.d.ts.map +1 -1
- package/dist/api/google-shared.js +77 -10
- package/dist/api/google-shared.js.map +1 -1
- package/dist/api/google-vertex.d.ts +2 -2
- package/dist/api/google-vertex.d.ts.map +1 -1
- package/dist/api/google-vertex.js +35 -25
- package/dist/api/google-vertex.js.map +1 -1
- package/dist/api/lazy.d.ts.map +1 -1
- package/dist/api/lazy.js +9 -10
- package/dist/api/lazy.js.map +1 -1
- package/dist/api/mistral-conversations.d.ts.map +1 -1
- package/dist/api/mistral-conversations.js +38 -21
- package/dist/api/mistral-conversations.js.map +1 -1
- package/dist/api/openai-codex-responses.d.ts +1 -0
- package/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.js +136 -68
- package/dist/api/openai-codex-responses.js.map +1 -1
- package/dist/api/openai-completions.d.ts +8 -8
- package/dist/api/openai-completions.d.ts.map +1 -1
- package/dist/api/openai-completions.js +230 -54
- package/dist/api/openai-completions.js.map +1 -1
- package/dist/api/openai-responses-shared.d.ts +8 -1
- package/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/dist/api/openai-responses-shared.js +233 -67
- package/dist/api/openai-responses-shared.js.map +1 -1
- package/dist/api/openai-responses.d.ts +1 -0
- package/dist/api/openai-responses.d.ts.map +1 -1
- package/dist/api/openai-responses.js +66 -18
- package/dist/api/openai-responses.js.map +1 -1
- package/dist/api/openrouter-images.d.ts.map +1 -1
- package/dist/api/openrouter-images.js +11 -5
- package/dist/api/openrouter-images.js.map +1 -1
- 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.map +1 -1
- package/dist/api/simple-options.js +1 -0
- package/dist/api/simple-options.js.map +1 -1
- package/dist/auth/credential-store.d.ts +2 -1
- package/dist/auth/credential-store.d.ts.map +1 -1
- package/dist/auth/credential-store.js +3 -0
- package/dist/auth/credential-store.js.map +1 -1
- package/dist/auth/helpers.d.ts +1 -0
- package/dist/auth/helpers.d.ts.map +1 -1
- package/dist/auth/helpers.js +7 -5
- package/dist/auth/helpers.js.map +1 -1
- package/dist/auth/oauth/anthropic.d.ts +9 -0
- package/dist/auth/oauth/anthropic.d.ts.map +1 -0
- package/dist/{utils → auth}/oauth/anthropic.js +51 -116
- package/dist/auth/oauth/anthropic.js.map +1 -0
- package/dist/auth/oauth/device-code.d.ts.map +1 -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/{utils → auth}/oauth/github-copilot.js +124 -107
- package/dist/auth/oauth/github-copilot.js.map +1 -0
- package/dist/auth/oauth/google-antigravity.d.ts +21 -0
- package/dist/auth/oauth/google-antigravity.d.ts.map +1 -0
- package/dist/{utils → auth}/oauth/google-antigravity.js +79 -79
- package/dist/auth/oauth/google-antigravity.js.map +1 -0
- package/dist/auth/oauth/google-gemini-cli.d.ts +21 -0
- package/dist/auth/oauth/google-gemini-cli.d.ts.map +1 -0
- package/dist/{utils → auth}/oauth/google-gemini-cli.js +79 -79
- package/dist/auth/oauth/google-gemini-cli.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 +33 -0
- package/dist/auth/oauth/load.d.ts.map +1 -0
- package/dist/auth/oauth/load.js +74 -0
- package/dist/auth/oauth/load.js.map +1 -0
- package/dist/auth/oauth/oauth-page.d.ts.map +1 -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/{utils → auth}/oauth/openai-codex.js +61 -155
- package/dist/auth/oauth/openai-codex.js.map +1 -0
- package/dist/auth/oauth/opencode-go.d.ts +14 -0
- package/dist/auth/oauth/opencode-go.d.ts.map +1 -0
- package/dist/auth/oauth/opencode-go.js +41 -0
- package/dist/auth/oauth/opencode-go.js.map +1 -0
- package/dist/auth/oauth/openrouter.d.ts +15 -0
- package/dist/auth/oauth/openrouter.d.ts.map +1 -0
- package/dist/auth/oauth/openrouter.js +277 -0
- package/dist/auth/oauth/openrouter.js.map +1 -0
- package/dist/auth/oauth/pkce.d.ts.map +1 -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 +17 -0
- package/dist/auth/oauth/xai.d.ts.map +1 -0
- package/dist/{utils → auth}/oauth/xai.js +54 -89
- package/dist/auth/oauth/xai.js.map +1 -0
- package/dist/auth/resolve.d.ts +4 -4
- package/dist/auth/resolve.d.ts.map +1 -1
- package/dist/auth/resolve.js +38 -17
- package/dist/auth/resolve.js.map +1 -1
- package/dist/auth/types.d.ts +49 -10
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/bun-oauth.d.ts +3 -0
- package/dist/bun-oauth.d.ts.map +1 -0
- package/dist/bun-oauth.js +27 -0
- package/dist/bun-oauth.js.map +1 -0
- package/dist/cli.js +58 -76
- package/dist/cli.js.map +1 -1
- package/dist/compat/extension-oauth-types.d.ts +39 -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 +2 -0
- package/dist/compat.d.ts.map +1 -1
- package/dist/compat.js +25 -8
- package/dist/compat.js.map +1 -1
- package/dist/env-api-keys.d.ts +3 -0
- package/dist/env-api-keys.d.ts.map +1 -1
- package/dist/env-api-keys.js +12 -3
- package/dist/env-api-keys.js.map +1 -1
- package/dist/image-models.generated.d.ts +75 -0
- package/dist/image-models.generated.d.ts.map +1 -1
- package/dist/image-models.generated.js +251 -176
- package/dist/image-models.generated.js.map +1 -1
- package/dist/images-models.d.ts +4 -2
- package/dist/images-models.d.ts.map +1 -1
- package/dist/images-models.js +5 -4
- package/dist/images-models.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- 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/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 +66 -30
- package/dist/models.d.ts.map +1 -1
- package/dist/models.generated.d.ts +74 -22035
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +4 -0
- package/dist/models.generated.js.map +1 -1
- package/dist/models.js +213 -29
- package/dist/models.js.map +1 -1
- package/dist/oauth.d.ts +2 -1
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +1 -1
- package/dist/oauth.js.map +1 -1
- package/dist/providers/all.d.ts +13 -6
- package/dist/providers/all.d.ts.map +1 -1
- package/dist/providers/all.js +13 -0
- package/dist/providers/all.js.map +1 -1
- package/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.js +54 -8
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/amazon-bedrock.models.d.ts +3 -1931
- package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.models.js +3 -1838
- package/dist/providers/amazon-bedrock.models.js.map +1 -1
- package/dist/providers/ant-ling.models.d.ts +3 -85
- package/dist/providers/ant-ling.models.d.ts.map +1 -1
- package/dist/providers/ant-ling.models.js +3 -57
- package/dist/providers/ant-ling.models.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +31 -4
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/anthropic.models.d.ts +3 -283
- package/dist/providers/anthropic.models.d.ts.map +1 -1
- package/dist/providers/anthropic.models.js +3 -252
- package/dist/providers/anthropic.models.js.map +1 -1
- package/dist/providers/azure-openai-responses.models.d.ts +3 -886
- package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/dist/providers/azure-openai-responses.models.js +3 -811
- package/dist/providers/azure-openai-responses.models.js.map +1 -1
- package/dist/providers/cerebras.models.d.ts +3 -65
- package/dist/providers/cerebras.models.d.ts.map +1 -1
- package/dist/providers/cerebras.models.js +3 -56
- package/dist/providers/cerebras.models.js.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.js +4 -3
- package/dist/providers/cloudflare-ai-gateway.js.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.d.ts +3 -795
- package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.js +3 -683
- package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
- package/dist/providers/cloudflare-auth.d.ts.map +1 -1
- package/dist/providers/cloudflare-auth.js +22 -26
- package/dist/providers/cloudflare-auth.js.map +1 -1
- 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.map +1 -1
- package/dist/providers/cloudflare-workers-ai.js +2 -1
- package/dist/providers/cloudflare-workers-ai.js.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.d.ts +3 -301
- package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.js +3 -236
- package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
- package/dist/providers/data/.manifest.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.models.d.ts +3 -62
- package/dist/providers/deepseek.models.d.ts.map +1 -1
- package/dist/providers/deepseek.models.js +3 -40
- package/dist/providers/deepseek.models.js.map +1 -1
- package/dist/providers/faux.d.ts.map +1 -1
- package/dist/providers/faux.js +4 -1
- package/dist/providers/faux.js.map +1 -1
- package/dist/providers/fireworks.models.d.ts +3 -380
- package/dist/providers/fireworks.models.d.ts.map +1 -1
- package/dist/providers/fireworks.models.js +3 -292
- package/dist/providers/fireworks.models.js.map +1 -1
- package/dist/providers/github-copilot.d.ts.map +1 -1
- package/dist/providers/github-copilot.js +11 -1
- package/dist/providers/github-copilot.js.map +1 -1
- package/dist/providers/github-copilot.models.d.ts +3 -790
- package/dist/providers/github-copilot.models.d.ts.map +1 -1
- package/dist/providers/github-copilot.models.js +3 -538
- package/dist/providers/github-copilot.models.js.map +1 -1
- package/dist/providers/google-vertex.d.ts.map +1 -1
- package/dist/providers/google-vertex.js +56 -5
- package/dist/providers/google-vertex.js.map +1 -1
- package/dist/providers/google-vertex.models.d.ts +3 -201
- package/dist/providers/google-vertex.models.d.ts.map +1 -1
- package/dist/providers/google-vertex.models.js +3 -179
- package/dist/providers/google-vertex.models.js.map +1 -1
- package/dist/providers/google.models.d.ts +3 -327
- package/dist/providers/google.models.d.ts.map +1 -1
- package/dist/providers/google.models.js +3 -285
- package/dist/providers/google.models.js.map +1 -1
- package/dist/providers/groq.models.d.ts +3 -127
- package/dist/providers/groq.models.d.ts.map +1 -1
- package/dist/providers/groq.models.js +3 -122
- package/dist/providers/groq.models.js.map +1 -1
- package/dist/providers/huggingface.models.d.ts +3 -982
- package/dist/providers/huggingface.models.d.ts.map +1 -1
- package/dist/providers/huggingface.models.js +3 -884
- package/dist/providers/huggingface.models.js.map +1 -1
- package/dist/providers/kimi-coding.d.ts.map +1 -1
- package/dist/providers/kimi-coding.js +10 -2
- package/dist/providers/kimi-coding.js.map +1 -1
- package/dist/providers/kimi-coding.models.d.ts +3 -62
- package/dist/providers/kimi-coding.models.d.ts.map +1 -1
- package/dist/providers/kimi-coding.models.js +3 -56
- package/dist/providers/kimi-coding.models.js.map +1 -1
- package/dist/providers/minimax-cn.models.d.ts +3 -53
- package/dist/providers/minimax-cn.models.d.ts.map +1 -1
- package/dist/providers/minimax-cn.models.js +3 -53
- package/dist/providers/minimax-cn.models.js.map +1 -1
- package/dist/providers/minimax.models.d.ts +3 -53
- package/dist/providers/minimax.models.d.ts.map +1 -1
- package/dist/providers/minimax.models.js +3 -53
- package/dist/providers/minimax.models.js.map +1 -1
- package/dist/providers/mistral.models.d.ts +3 -512
- package/dist/providers/mistral.models.d.ts.map +1 -1
- package/dist/providers/mistral.models.js +3 -512
- package/dist/providers/mistral.models.js.map +1 -1
- package/dist/providers/moonshotai-cn.models.d.ts +3 -233
- package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
- package/dist/providers/moonshotai-cn.models.js +3 -166
- package/dist/providers/moonshotai-cn.models.js.map +1 -1
- package/dist/providers/moonshotai.models.d.ts +3 -233
- package/dist/providers/moonshotai.models.d.ts.map +1 -1
- package/dist/providers/moonshotai.models.js +3 -166
- package/dist/providers/moonshotai.models.js.map +1 -1
- package/dist/providers/nvidia.models.d.ts +3 -562
- package/dist/providers/nvidia.models.d.ts.map +1 -1
- package/dist/providers/nvidia.models.js +3 -382
- package/dist/providers/nvidia.models.js.map +1 -1
- package/dist/providers/openai-codex.d.ts.map +1 -1
- package/dist/providers/openai-codex.js +1 -1
- package/dist/providers/openai-codex.js.map +1 -1
- package/dist/providers/openai-codex.models.d.ts +3 -187
- package/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/dist/providers/openai-codex.models.js +3 -133
- package/dist/providers/openai-codex.models.js.map +1 -1
- package/dist/providers/openai.models.d.ts +3 -936
- package/dist/providers/openai.models.d.ts.map +1 -1
- package/dist/providers/openai.models.js +3 -818
- package/dist/providers/openai.models.js.map +1 -1
- package/dist/providers/opencode-go.d.ts +1 -1
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +15 -3
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/opencode-go.models.d.ts +3 -308
- package/dist/providers/opencode-go.models.d.ts.map +1 -1
- package/dist/providers/opencode-go.models.js +3 -237
- package/dist/providers/opencode-go.models.js.map +1 -1
- package/dist/providers/opencode.models.d.ts +3 -1183
- package/dist/providers/opencode.models.d.ts.map +1 -1
- package/dist/providers/opencode.models.js +3 -977
- package/dist/providers/opencode.models.js.map +1 -1
- package/dist/providers/openrouter-images.d.ts.map +1 -1
- package/dist/providers/openrouter-images.js +10 -2
- package/dist/providers/openrouter-images.js.map +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +10 -2
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/openrouter.models.d.ts +3 -5705
- package/dist/providers/openrouter.models.d.ts.map +1 -1
- package/dist/providers/openrouter.models.js +3 -4873
- package/dist/providers/openrouter.models.js.map +1 -1
- 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/together.models.d.ts +3 -597
- package/dist/providers/together.models.d.ts.map +1 -1
- package/dist/providers/together.models.js +3 -377
- package/dist/providers/together.models.js.map +1 -1
- package/dist/providers/vercel-ai-gateway.models.d.ts +3 -3391
- package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/vercel-ai-gateway.models.js +3 -3327
- package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
- package/dist/providers/xai.d.ts +1 -1
- package/dist/providers/xai.d.ts.map +1 -1
- package/dist/providers/xai.js +8 -4
- package/dist/providers/xai.js.map +1 -1
- package/dist/providers/xai.models.d.ts +3 -178
- package/dist/providers/xai.models.d.ts.map +1 -1
- package/dist/providers/xai.models.js +3 -146
- package/dist/providers/xai.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts +3 -65
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.js +3 -56
- package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts +3 -65
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.js +3 -56
- package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +3 -65
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.js +3 -56
- package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
- package/dist/providers/xiaomi.models.d.ts +3 -128
- package/dist/providers/xiaomi.models.d.ts.map +1 -1
- package/dist/providers/xiaomi.models.js +3 -110
- package/dist/providers/xiaomi.models.js.map +1 -1
- package/dist/providers/zai-coding-cn.models.d.ts +3 -152
- package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
- package/dist/providers/zai-coding-cn.models.js +3 -111
- package/dist/providers/zai-coding-cn.models.js.map +1 -1
- package/dist/providers/zai.models.d.ts +3 -152
- package/dist/providers/zai.models.d.ts.map +1 -1
- package/dist/providers/zai.models.js +3 -111
- package/dist/providers/zai.models.js.map +1 -1
- package/dist/types.d.ts +77 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- 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/error-body.d.ts.map +1 -1
- package/dist/utils/error-body.js +31 -7
- package/dist/utils/error-body.js.map +1 -1
- package/dist/utils/estimate.d.ts.map +1 -1
- package/dist/utils/estimate.js +18 -5
- package/dist/utils/estimate.js.map +1 -1
- package/dist/utils/node-http-proxy.d.ts.map +1 -1
- package/dist/utils/node-http-proxy.js +53 -12
- package/dist/utils/node-http-proxy.js.map +1 -1
- package/dist/utils/overflow.d.ts +1 -0
- package/dist/utils/overflow.d.ts.map +1 -1
- package/dist/utils/overflow.js +3 -0
- package/dist/utils/overflow.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts +2 -0
- package/dist/utils/pi-user-agent.d.ts.map +1 -0
- package/dist/utils/pi-user-agent.js +12 -0
- package/dist/utils/pi-user-agent.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 +41 -0
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +84 -0
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/sleep.d.ts +2 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +15 -0
- package/dist/utils/sleep.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/uuid.d.ts +3 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +47 -0
- package/dist/utils/uuid.js.map +1 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +6 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +12 -6
- package/dist/utils/oauth/anthropic.d.ts +0 -27
- package/dist/utils/oauth/anthropic.d.ts.map +0 -1
- package/dist/utils/oauth/anthropic.js.map +0 -1
- package/dist/utils/oauth/device-code.d.ts.map +0 -1
- package/dist/utils/oauth/device-code.js.map +0 -1
- package/dist/utils/oauth/github-copilot.d.ts +0 -32
- package/dist/utils/oauth/github-copilot.d.ts.map +0 -1
- package/dist/utils/oauth/github-copilot.js.map +0 -1
- package/dist/utils/oauth/google-antigravity.d.ts +0 -26
- package/dist/utils/oauth/google-antigravity.d.ts.map +0 -1
- package/dist/utils/oauth/google-antigravity.js.map +0 -1
- package/dist/utils/oauth/google-gemini-cli.d.ts +0 -26
- package/dist/utils/oauth/google-gemini-cli.d.ts.map +0 -1
- package/dist/utils/oauth/google-gemini-cli.js.map +0 -1
- package/dist/utils/oauth/index.d.ts +0 -60
- package/dist/utils/oauth/index.d.ts.map +0 -1
- package/dist/utils/oauth/index.js +0 -130
- package/dist/utils/oauth/index.js.map +0 -1
- package/dist/utils/oauth/load.d.ts +0 -6
- package/dist/utils/oauth/load.d.ts.map +0 -1
- package/dist/utils/oauth/load.js +0 -23
- package/dist/utils/oauth/load.js.map +0 -1
- package/dist/utils/oauth/oauth-page.d.ts.map +0 -1
- package/dist/utils/oauth/oauth-page.js.map +0 -1
- package/dist/utils/oauth/openai-codex.d.ts +0 -45
- package/dist/utils/oauth/openai-codex.d.ts.map +0 -1
- package/dist/utils/oauth/openai-codex.js.map +0 -1
- package/dist/utils/oauth/opencode-go.d.ts +0 -23
- package/dist/utils/oauth/opencode-go.d.ts.map +0 -1
- package/dist/utils/oauth/opencode-go.js +0 -46
- package/dist/utils/oauth/opencode-go.js.map +0 -1
- package/dist/utils/oauth/pkce.d.ts.map +0 -1
- package/dist/utils/oauth/pkce.js.map +0 -1
- package/dist/utils/oauth/types.d.ts +0 -64
- package/dist/utils/oauth/types.d.ts.map +0 -1
- package/dist/utils/oauth/types.js +0 -2
- package/dist/utils/oauth/types.js.map +0 -1
- package/dist/utils/oauth/xai.d.ts +0 -34
- package/dist/utils/oauth/xai.d.ts.map +0 -1
- package/dist/utils/oauth/xai.js.map +0 -1
- /package/dist/{utils → auth}/oauth/device-code.d.ts +0 -0
- /package/dist/{utils → auth}/oauth/device-code.js +0 -0
- /package/dist/{utils → auth}/oauth/oauth-page.d.ts +0 -0
- /package/dist/{utils → auth}/oauth/oauth-page.js +0 -0
- /package/dist/{utils → auth}/oauth/pkce.d.ts +0 -0
- /package/dist/{utils → auth}/oauth/pkce.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../src/api/anthropic-messages.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAU1C,OAAO,KAAK,EAWX,mBAAmB,EAEnB,cAAc,EACd,aAAa,EAMb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic-messages.d.ts","sourceRoot":"","sources":["../../src/api/anthropic-messages.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAU1C,OAAO,KAAK,EAWX,mBAAmB,EAEnB,cAAc,EACd,aAAa,EAMb,MAAM,aAAa,CAAC;AAwIrB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG,SAAS,CAAC;AAkChE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACtD;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,wBAAwB,CAAC;IAC3C;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACnB;AAqOD,eAAO,MAAM,MAAM,EAAE,cAAc,CAAC,oBAAoB,EAAE,gBAAgB,CA+RzE,CAAC;AA2BF,eAAO,MAAM,YAAY,EAAE,cAAc,CAAC,oBAAoB,EAAE,mBAAmB,CA2ClF,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import Anthropic from "@anthropic-ai/sdk";
|
|
2
2
|
import { calculateCost } from "../models.js";
|
|
3
|
+
import { splitDeferredTools } from "../utils/deferred-tools.js";
|
|
3
4
|
import { AssistantMessageEventStream } from "../utils/event-stream.js";
|
|
4
5
|
import { headersToRecord } from "../utils/headers.js";
|
|
5
6
|
import { parseJsonWithRepair, parseStreamingJson } from "../utils/json-parse.js";
|
|
7
|
+
import { getPiUserAgent } from "../utils/pi-user-agent.js";
|
|
6
8
|
import { getProviderEnvValue } from "../utils/provider-env.js";
|
|
9
|
+
import { retryProviderRequest } from "../utils/provider-retry.js";
|
|
7
10
|
import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
|
|
11
|
+
import { resolveJsonSchemaStrictSampling } from "./constrained-sampling.js";
|
|
8
12
|
import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.js";
|
|
9
13
|
import { adjustMaxTokensForThinking, buildBaseOptions, clampMaxTokensToContext } from "./simple-options.js";
|
|
10
14
|
import { transformMessages } from "./transform-messages.js";
|
|
@@ -33,7 +37,7 @@ function getCacheControl(model, cacheRetention, env) {
|
|
|
33
37
|
};
|
|
34
38
|
}
|
|
35
39
|
// Stealth mode: Mimic Claude Code's tool naming exactly
|
|
36
|
-
const claudeCodeVersion = "2.1.
|
|
40
|
+
const claudeCodeVersion = "2.1.251";
|
|
37
41
|
// Claude Code 2.x tool names (canonical casing)
|
|
38
42
|
// Source: https://cchistory.mariozechner.at/data/prompts-2.1.11.md
|
|
39
43
|
// To update: https://github.com/badlogic/cchistory
|
|
@@ -114,8 +118,25 @@ function getAnthropicCompat(model) {
|
|
|
114
118
|
supportsCacheControlOnTools: model.compat?.supportsCacheControlOnTools ?? true,
|
|
115
119
|
supportsTemperature: model.compat?.supportsTemperature ?? true,
|
|
116
120
|
allowEmptySignature: model.compat?.allowEmptySignature ?? false,
|
|
121
|
+
supportsStrictTools: model.compat?.supportsStrictTools ?? false,
|
|
122
|
+
supportsToolReferences: model.compat?.supportsToolReferences ?? defaultSupportsToolReferences(model),
|
|
117
123
|
};
|
|
118
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Default for `supportsToolReferences`: first-party Anthropic models except
|
|
127
|
+
* Haiku (rejects client-side tool_reference blocks) and models that predate
|
|
128
|
+
* tool search (Claude 3.x, Opus/Sonnet 4.0, Opus 4.1).
|
|
129
|
+
*/
|
|
130
|
+
function defaultSupportsToolReferences(model) {
|
|
131
|
+
if (model.provider !== "anthropic" || model.id.includes("haiku"))
|
|
132
|
+
return false;
|
|
133
|
+
const version = model.id.match(/^claude-(?:opus|sonnet|fable)-(\d+)(?:-(\d+))?(?:-|$)/);
|
|
134
|
+
if (!version)
|
|
135
|
+
return false;
|
|
136
|
+
const major = Number(version[1]);
|
|
137
|
+
const minor = version[2] && version[2].length < 8 ? Number(version[2]) : 0;
|
|
138
|
+
return major > 4 || (major === 4 && minor >= 5);
|
|
139
|
+
}
|
|
119
140
|
function mergeHeaders(...headerSources) {
|
|
120
141
|
const merged = {};
|
|
121
142
|
for (const headers of headerSources) {
|
|
@@ -125,6 +146,9 @@ function mergeHeaders(...headerSources) {
|
|
|
125
146
|
}
|
|
126
147
|
return merged;
|
|
127
148
|
}
|
|
149
|
+
function mergeClientHeaders(...headerSources) {
|
|
150
|
+
return mergeHeaders({ "User-Agent": getPiUserAgent() }, ...headerSources);
|
|
151
|
+
}
|
|
128
152
|
function hasHeader(headers, name) {
|
|
129
153
|
if (!headers)
|
|
130
154
|
return false;
|
|
@@ -313,7 +337,7 @@ export const stream = (model, context, options) => {
|
|
|
313
337
|
totalTokens: 0,
|
|
314
338
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
315
339
|
},
|
|
316
|
-
stopReason: "
|
|
340
|
+
stopReason: "pending",
|
|
317
341
|
timestamp: Date.now(),
|
|
318
342
|
};
|
|
319
343
|
try {
|
|
@@ -336,7 +360,7 @@ export const stream = (model, context, options) => {
|
|
|
336
360
|
}
|
|
337
361
|
const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);
|
|
338
362
|
const cacheSessionId = cacheRetention === "none" ? undefined : options?.sessionId;
|
|
339
|
-
const created = createClient(model, apiKey, options?.interleavedThinking ?? true, shouldUseFineGrainedToolStreamingBeta(model, context), options?.headers, copilotDynamicHeaders, cacheSessionId);
|
|
363
|
+
const created = createClient(model, apiKey, options?.interleavedThinking ?? true, shouldUseFineGrainedToolStreamingBeta(model, context), options?.headers, options?.fetch, copilotDynamicHeaders, cacheSessionId);
|
|
340
364
|
client = created.client;
|
|
341
365
|
isOAuth = created.isOAuthToken;
|
|
342
366
|
}
|
|
@@ -348,9 +372,13 @@ export const stream = (model, context, options) => {
|
|
|
348
372
|
const requestOptions = {
|
|
349
373
|
...(options?.signal ? { signal: options.signal } : {}),
|
|
350
374
|
...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),
|
|
351
|
-
maxRetries:
|
|
375
|
+
maxRetries: 0,
|
|
352
376
|
};
|
|
353
|
-
const response = await client.messages.create({ ...params, stream: true }, requestOptions).asResponse()
|
|
377
|
+
const response = await retryProviderRequest(() => client.messages.create({ ...params, stream: true }, requestOptions).asResponse(), {
|
|
378
|
+
maxRetries: options?.maxRetries,
|
|
379
|
+
maxRetryDelayMs: options?.maxRetryDelayMs,
|
|
380
|
+
signal: options?.signal,
|
|
381
|
+
});
|
|
354
382
|
await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
|
|
355
383
|
stream.push({ type: "start", partial: output });
|
|
356
384
|
const blocks = output.content;
|
|
@@ -373,7 +401,7 @@ export const stream = (model, context, options) => {
|
|
|
373
401
|
if (event.content_block.type === "text") {
|
|
374
402
|
const block = {
|
|
375
403
|
type: "text",
|
|
376
|
-
text: "",
|
|
404
|
+
text: event.content_block.text ?? "",
|
|
377
405
|
index: event.index,
|
|
378
406
|
};
|
|
379
407
|
output.content.push(block);
|
|
@@ -382,8 +410,8 @@ export const stream = (model, context, options) => {
|
|
|
382
410
|
else if (event.content_block.type === "thinking") {
|
|
383
411
|
const block = {
|
|
384
412
|
type: "thinking",
|
|
385
|
-
thinking: "",
|
|
386
|
-
thinkingSignature: "",
|
|
413
|
+
thinking: event.content_block.thinking ?? "",
|
|
414
|
+
thinkingSignature: event.content_block.signature ?? "",
|
|
387
415
|
index: event.index,
|
|
388
416
|
};
|
|
389
417
|
output.content.push(block);
|
|
@@ -502,6 +530,7 @@ export const stream = (model, context, options) => {
|
|
|
502
530
|
}
|
|
503
531
|
else if (event.type === "message_delta") {
|
|
504
532
|
if (event.delta.stop_reason) {
|
|
533
|
+
output.rawStopReason = event.delta.stop_reason;
|
|
505
534
|
const stopReasonResult = mapStopReason(event.delta.stop_reason, event.delta.stop_details);
|
|
506
535
|
output.stopReason = stopReasonResult.stopReason;
|
|
507
536
|
if (stopReasonResult.errorMessage) {
|
|
@@ -510,25 +539,27 @@ export const stream = (model, context, options) => {
|
|
|
510
539
|
}
|
|
511
540
|
// Only update usage fields if present (not null).
|
|
512
541
|
// Preserves input_tokens from message_start when proxies omit it in message_delta.
|
|
513
|
-
if (event.usage
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
.
|
|
530
|
-
|
|
531
|
-
|
|
542
|
+
if (event.usage) {
|
|
543
|
+
if (event.usage.input_tokens != null) {
|
|
544
|
+
output.usage.input = event.usage.input_tokens;
|
|
545
|
+
}
|
|
546
|
+
if (event.usage.output_tokens != null) {
|
|
547
|
+
output.usage.output = event.usage.output_tokens;
|
|
548
|
+
}
|
|
549
|
+
if (event.usage.cache_read_input_tokens != null) {
|
|
550
|
+
output.usage.cacheRead = event.usage.cache_read_input_tokens;
|
|
551
|
+
}
|
|
552
|
+
if (event.usage.cache_creation_input_tokens != null) {
|
|
553
|
+
output.usage.cacheWrite = event.usage.cache_creation_input_tokens;
|
|
554
|
+
}
|
|
555
|
+
// Anthropic reports reasoning tokens in `output_tokens_details.thinking_tokens` on the
|
|
556
|
+
// final message_delta usage (a subset of output_tokens). SDK 0.91.1 omits the field from
|
|
557
|
+
// its Usage type, so read it through a narrow cast. Verified against the live API.
|
|
558
|
+
const thinkingTokens = event.usage
|
|
559
|
+
.output_tokens_details?.thinking_tokens;
|
|
560
|
+
if (thinkingTokens != null) {
|
|
561
|
+
output.usage.reasoning = thinkingTokens;
|
|
562
|
+
}
|
|
532
563
|
}
|
|
533
564
|
// Anthropic doesn't provide total_tokens, compute from components
|
|
534
565
|
output.usage.totalTokens =
|
|
@@ -539,6 +570,9 @@ export const stream = (model, context, options) => {
|
|
|
539
570
|
if (options?.signal?.aborted) {
|
|
540
571
|
throw new Error("Request was aborted");
|
|
541
572
|
}
|
|
573
|
+
if (output.stopReason === "pending") {
|
|
574
|
+
throw new Error("Anthropic stream ended without a stop reason");
|
|
575
|
+
}
|
|
542
576
|
if (output.stopReason === "aborted" || output.stopReason === "error") {
|
|
543
577
|
throw new Error(output.errorMessage || "An unknown error occurred");
|
|
544
578
|
}
|
|
@@ -582,7 +616,10 @@ function mapThinkingLevelToEffort(model, level) {
|
|
|
582
616
|
}
|
|
583
617
|
export const streamSimple = (model, context, options) => {
|
|
584
618
|
assertRequestAuth(model.provider, options?.apiKey, options?.headers);
|
|
585
|
-
const base =
|
|
619
|
+
const base = {
|
|
620
|
+
...buildBaseOptions(model, context, options, options?.apiKey),
|
|
621
|
+
toolChoice: options?.toolChoice,
|
|
622
|
+
};
|
|
586
623
|
if (!options?.reasoning) {
|
|
587
624
|
return stream(model, context, { ...base, thinkingEnabled: false });
|
|
588
625
|
}
|
|
@@ -610,7 +647,7 @@ export const streamSimple = (model, context, options) => {
|
|
|
610
647
|
function isOAuthToken(apiKey) {
|
|
611
648
|
return apiKey.includes("sk-ant-oat");
|
|
612
649
|
}
|
|
613
|
-
function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStreamingBeta, optionsHeaders, dynamicHeaders, sessionId) {
|
|
650
|
+
function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStreamingBeta, optionsHeaders, fetch, dynamicHeaders, sessionId) {
|
|
614
651
|
// Adaptive thinking models have interleaved thinking built in, so skip the beta header.
|
|
615
652
|
const needsInterleavedBeta = interleavedThinking && model.compat?.forceAdaptiveThinking !== true;
|
|
616
653
|
const betaFeatures = [];
|
|
@@ -627,7 +664,8 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
|
|
|
627
664
|
authToken: apiKey ?? null,
|
|
628
665
|
baseURL: model.baseUrl,
|
|
629
666
|
dangerouslyAllowBrowser: true,
|
|
630
|
-
|
|
667
|
+
fetch,
|
|
668
|
+
defaultHeaders: mergeClientHeaders({
|
|
631
669
|
accept: "application/json",
|
|
632
670
|
"anthropic-dangerous-direct-browser-access": "true",
|
|
633
671
|
...(betaFeatures.length > 0 ? { "anthropic-beta": betaFeatures.join(",") } : {}),
|
|
@@ -642,7 +680,8 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
|
|
|
642
680
|
authToken: apiKey,
|
|
643
681
|
baseURL: model.baseUrl,
|
|
644
682
|
dangerouslyAllowBrowser: true,
|
|
645
|
-
|
|
683
|
+
fetch,
|
|
684
|
+
defaultHeaders: mergeClientHeaders({
|
|
646
685
|
accept: "application/json",
|
|
647
686
|
"anthropic-dangerous-direct-browser-access": "true",
|
|
648
687
|
"anthropic-beta": ["claude-code-20250219", "oauth-2025-04-20", ...betaFeatures].join(","),
|
|
@@ -654,7 +693,7 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
|
|
|
654
693
|
}
|
|
655
694
|
// API key or header-owned auth.
|
|
656
695
|
const sessionAffinityHeaders = sessionId && getAnthropicCompat(model).sendSessionAffinityHeaders ? { "x-session-affinity": sessionId } : {};
|
|
657
|
-
const defaultHeaders =
|
|
696
|
+
const defaultHeaders = mergeClientHeaders({
|
|
658
697
|
accept: "application/json",
|
|
659
698
|
"anthropic-dangerous-direct-browser-access": "true",
|
|
660
699
|
...(betaFeatures.length > 0 ? { "anthropic-beta": betaFeatures.join(",") } : {}),
|
|
@@ -664,6 +703,7 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
|
|
|
664
703
|
authToken: null,
|
|
665
704
|
baseURL: model.baseUrl,
|
|
666
705
|
dangerouslyAllowBrowser: true,
|
|
706
|
+
fetch,
|
|
667
707
|
defaultHeaders,
|
|
668
708
|
});
|
|
669
709
|
return { client, isOAuthToken: false };
|
|
@@ -671,9 +711,19 @@ function createClient(model, apiKey, interleavedThinking, useFineGrainedToolStre
|
|
|
671
711
|
function buildParams(model, context, isOAuthToken, options) {
|
|
672
712
|
const { cacheControl } = getCacheControl(model, options?.cacheRetention, options?.env);
|
|
673
713
|
const compat = getAnthropicCompat(model);
|
|
714
|
+
const transformedMessages = transformMessages(context.messages, model, normalizeToolCallId);
|
|
715
|
+
const normalizeToolName = isOAuthToken ? toClaudeCodeName : (name) => name;
|
|
716
|
+
const toolPlacement = splitDeferredTools({ ...context, messages: transformedMessages }, compat.supportsToolReferences, normalizeToolName);
|
|
717
|
+
let immediateTools = toolPlacement.immediate;
|
|
718
|
+
let deferredTools = [...toolPlacement.deferred.values()];
|
|
719
|
+
if (immediateTools.length === 0 && deferredTools.length > 0) {
|
|
720
|
+
immediateTools = deferredTools;
|
|
721
|
+
deferredTools = [];
|
|
722
|
+
}
|
|
723
|
+
const deferredToolNames = new Set(deferredTools.map((tool) => normalizeToolName(tool.name)));
|
|
674
724
|
const params = {
|
|
675
725
|
model: model.id,
|
|
676
|
-
messages: convertMessages(
|
|
726
|
+
messages: convertMessages(transformedMessages, isOAuthToken, cacheControl, compat.allowEmptySignature, deferredToolNames, normalizeToolName),
|
|
677
727
|
max_tokens: options?.maxTokens ?? model.maxTokens,
|
|
678
728
|
stream: true,
|
|
679
729
|
};
|
|
@@ -708,8 +758,11 @@ function buildParams(model, context, isOAuthToken, options) {
|
|
|
708
758
|
if (options?.temperature !== undefined && !options?.thinkingEnabled && compat.supportsTemperature) {
|
|
709
759
|
params.temperature = options.temperature;
|
|
710
760
|
}
|
|
711
|
-
if (
|
|
712
|
-
params.tools =
|
|
761
|
+
if (immediateTools.length > 0 || deferredTools.length > 0) {
|
|
762
|
+
params.tools = [
|
|
763
|
+
...convertTools(immediateTools, isOAuthToken, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, compat.supportsCacheControlOnTools ? cacheControl : undefined),
|
|
764
|
+
...convertTools(deferredTools, isOAuthToken, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, undefined, true),
|
|
765
|
+
];
|
|
713
766
|
}
|
|
714
767
|
// Configure thinking mode: adaptive, budget-based, or explicitly disabled.
|
|
715
768
|
if (model.reasoning) {
|
|
@@ -761,10 +814,37 @@ function buildParams(model, context, isOAuthToken, options) {
|
|
|
761
814
|
function normalizeToolCallId(id) {
|
|
762
815
|
return id.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 64);
|
|
763
816
|
}
|
|
764
|
-
function
|
|
817
|
+
function convertToolResult(msg, isOAuthToken, deferredToolNames, loadedToolNames, normalizeToolName) {
|
|
818
|
+
const references = [];
|
|
819
|
+
for (const name of msg.addedToolNames ?? []) {
|
|
820
|
+
const normalizedName = normalizeToolName(name);
|
|
821
|
+
if (!deferredToolNames.has(normalizedName) || loadedToolNames.has(normalizedName))
|
|
822
|
+
continue;
|
|
823
|
+
loadedToolNames.add(normalizedName);
|
|
824
|
+
references.push({
|
|
825
|
+
type: "tool_reference",
|
|
826
|
+
tool_name: isOAuthToken ? toClaudeCodeName(name) : name,
|
|
827
|
+
});
|
|
828
|
+
}
|
|
829
|
+
const convertedContent = convertContentBlocks(msg.content);
|
|
830
|
+
// Anthropic rejects tool references mixed with ordinary tool-result content.
|
|
831
|
+
return {
|
|
832
|
+
toolResult: {
|
|
833
|
+
type: "tool_result",
|
|
834
|
+
tool_use_id: msg.toolCallId,
|
|
835
|
+
content: references.length > 0 ? references : convertedContent,
|
|
836
|
+
is_error: msg.isError,
|
|
837
|
+
},
|
|
838
|
+
siblingContent: references.length === 0
|
|
839
|
+
? []
|
|
840
|
+
: typeof convertedContent === "string"
|
|
841
|
+
? [{ type: "text", text: convertedContent }]
|
|
842
|
+
: convertedContent,
|
|
843
|
+
};
|
|
844
|
+
}
|
|
845
|
+
function convertMessages(transformedMessages, isOAuthToken, cacheControl, allowEmptySignature = false, deferredToolNames = new Set(), normalizeToolName = (name) => name) {
|
|
765
846
|
const params = [];
|
|
766
|
-
|
|
767
|
-
const transformedMessages = transformMessages(messages, model, normalizeToolCallId);
|
|
847
|
+
const loadedToolNames = new Set();
|
|
768
848
|
for (let i = 0; i < transformedMessages.length; i++) {
|
|
769
849
|
const msg = transformedMessages[i];
|
|
770
850
|
if (msg.role === "user") {
|
|
@@ -873,33 +953,22 @@ function convertMessages(messages, model, isOAuthToken, cacheControl, allowEmpty
|
|
|
873
953
|
});
|
|
874
954
|
}
|
|
875
955
|
else if (msg.role === "toolResult") {
|
|
876
|
-
// Collect all consecutive toolResult messages, needed for z.ai Anthropic endpoint
|
|
956
|
+
// Collect all consecutive toolResult messages, needed for z.ai Anthropic endpoint.
|
|
877
957
|
const toolResults = [];
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
type: "tool_result",
|
|
881
|
-
tool_use_id: msg.toolCallId,
|
|
882
|
-
content: convertContentBlocks(msg.content),
|
|
883
|
-
is_error: msg.isError,
|
|
884
|
-
});
|
|
885
|
-
// Look ahead for consecutive toolResult messages
|
|
886
|
-
let j = i + 1;
|
|
958
|
+
const siblingContent = [];
|
|
959
|
+
let j = i;
|
|
887
960
|
while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") {
|
|
888
|
-
const
|
|
889
|
-
toolResults.push(
|
|
890
|
-
|
|
891
|
-
tool_use_id: nextMsg.toolCallId,
|
|
892
|
-
content: convertContentBlocks(nextMsg.content),
|
|
893
|
-
is_error: nextMsg.isError,
|
|
894
|
-
});
|
|
961
|
+
const converted = convertToolResult(transformedMessages[j], isOAuthToken, deferredToolNames, loadedToolNames, normalizeToolName);
|
|
962
|
+
toolResults.push(converted.toolResult);
|
|
963
|
+
siblingContent.push(...converted.siblingContent);
|
|
895
964
|
j++;
|
|
896
965
|
}
|
|
897
|
-
// Skip the messages we've already processed
|
|
966
|
+
// Skip the messages we've already processed.
|
|
898
967
|
i = j - 1;
|
|
899
|
-
//
|
|
968
|
+
// Displaced reference-bearing results must follow every tool_result block.
|
|
900
969
|
params.push({
|
|
901
970
|
role: "user",
|
|
902
|
-
content: toolResults,
|
|
971
|
+
content: [...toolResults, ...siblingContent],
|
|
903
972
|
});
|
|
904
973
|
}
|
|
905
974
|
}
|
|
@@ -930,20 +999,30 @@ function convertMessages(messages, model, isOAuthToken, cacheControl, allowEmpty
|
|
|
930
999
|
function shouldUseFineGrainedToolStreamingBeta(model, context) {
|
|
931
1000
|
return !!context.tools?.length && !getAnthropicCompat(model).supportsEagerToolInputStreaming;
|
|
932
1001
|
}
|
|
933
|
-
function convertTools(tools, isOAuthToken, supportsEagerToolInputStreaming, cacheControl) {
|
|
1002
|
+
function convertTools(tools, isOAuthToken, supportsEagerToolInputStreaming, supportsStrictTools, cacheControl, deferLoading = false) {
|
|
934
1003
|
if (!tools)
|
|
935
1004
|
return [];
|
|
936
1005
|
return tools.map((tool, index) => {
|
|
1006
|
+
const strict = resolveJsonSchemaStrictSampling(tool, supportsStrictTools);
|
|
937
1007
|
const schema = tool.parameters;
|
|
1008
|
+
const legacyInputSchema = {
|
|
1009
|
+
type: "object",
|
|
1010
|
+
properties: schema.properties ?? {},
|
|
1011
|
+
required: schema.required ?? [],
|
|
1012
|
+
};
|
|
1013
|
+
const inputSchema = strict === true
|
|
1014
|
+
? {
|
|
1015
|
+
...tool.parameters,
|
|
1016
|
+
...legacyInputSchema,
|
|
1017
|
+
}
|
|
1018
|
+
: legacyInputSchema;
|
|
938
1019
|
return {
|
|
939
1020
|
name: isOAuthToken ? toClaudeCodeName(tool.name) : tool.name,
|
|
940
1021
|
description: tool.description,
|
|
941
1022
|
...(supportsEagerToolInputStreaming ? { eager_input_streaming: true } : {}),
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
required: schema.required ?? [],
|
|
946
|
-
},
|
|
1023
|
+
...(strict === true ? { strict: true } : {}),
|
|
1024
|
+
input_schema: inputSchema,
|
|
1025
|
+
...(deferLoading ? { defer_loading: true } : {}),
|
|
947
1026
|
...(cacheControl && index === tools.length - 1 ? { cache_control: cacheControl } : {}),
|
|
948
1027
|
};
|
|
949
1028
|
});
|
|
@@ -966,7 +1045,7 @@ function mapStopReason(reason, stopDetails) {
|
|
|
966
1045
|
case "stop_sequence":
|
|
967
1046
|
return { stopReason: "stop" }; // We don't supply stop sequences, so this should never happen
|
|
968
1047
|
case "sensitive": // Content flagged by safety filters (not yet in SDK types)
|
|
969
|
-
return { stopReason: "error" };
|
|
1048
|
+
return { stopReason: "error", errorMessage: "Provider stopped with: sensitive" };
|
|
970
1049
|
default:
|
|
971
1050
|
// Handle unknown stop reasons gracefully (API may add new values)
|
|
972
1051
|
throw new Error(`Unhandled stop reason: ${reason}`);
|