@fractaal/pi-ai 0.85.4 → 0.86.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 +322 -46
- package/dist/api/anthropic-messages.d.ts.map +1 -1
- package/dist/api/anthropic-messages.js +403 -140
- package/dist/api/anthropic-messages.js.map +1 -1
- package/dist/api/anthropic-messages.lazy.d.ts.map +1 -1
- package/dist/api/azure-openai-config.d.ts +15 -0
- package/dist/api/azure-openai-config.d.ts.map +1 -0
- package/dist/api/azure-openai-config.js +76 -0
- package/dist/api/azure-openai-config.js.map +1 -0
- package/dist/api/azure-openai-responses.d.ts +5 -6
- package/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/dist/api/azure-openai-responses.js +42 -86
- package/dist/api/azure-openai-responses.js.map +1 -1
- package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.js +233 -24
- package/dist/api/bedrock-converse-stream.js.map +1 -1
- package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
- package/dist/api/cloudflare-ai-binding.d.ts +77 -0
- package/dist/api/cloudflare-ai-binding.d.ts.map +1 -0
- package/dist/api/cloudflare-ai-binding.js +72 -0
- package/dist/api/cloudflare-ai-binding.js.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
- package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.js +48 -0
- package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
- package/dist/api/cloudflare.d.ts +2 -0
- package/dist/api/cloudflare.d.ts.map +1 -1
- package/dist/api/cloudflare.js +2 -0
- package/dist/api/cloudflare.js.map +1 -1
- package/dist/api/constrained-sampling.d.ts +10 -1
- package/dist/api/constrained-sampling.d.ts.map +1 -1
- package/dist/api/constrained-sampling.js +137 -4
- package/dist/api/constrained-sampling.js.map +1 -1
- package/dist/api/github-copilot-headers.d.ts.map +1 -1
- package/dist/api/github-copilot-headers.js.map +1 -1
- 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 +39 -82
- package/dist/api/google-generative-ai.js.map +1 -1
- package/dist/api/google-generative-ai.lazy.d.ts.map +1 -1
- package/dist/api/google-shared.d.ts +27 -5
- package/dist/api/google-shared.d.ts.map +1 -1
- package/dist/api/google-shared.js +126 -18
- 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 +42 -73
- package/dist/api/google-vertex.js.map +1 -1
- package/dist/api/google-vertex.lazy.d.ts.map +1 -1
- package/dist/api/lazy.d.ts +5 -1
- package/dist/api/lazy.d.ts.map +1 -1
- package/dist/api/lazy.js +19 -7
- package/dist/api/lazy.js.map +1 -1
- package/dist/api/llama-cpp-classify.d.ts +33 -0
- package/dist/api/llama-cpp-classify.d.ts.map +1 -0
- package/dist/api/llama-cpp-classify.js +365 -0
- package/dist/api/llama-cpp-classify.js.map +1 -0
- package/dist/api/llama-cpp-classify.lazy.d.ts +3 -0
- package/dist/api/llama-cpp-classify.lazy.d.ts.map +1 -0
- package/dist/api/llama-cpp-classify.lazy.js +4 -0
- package/dist/api/llama-cpp-classify.lazy.js.map +1 -0
- package/dist/api/mistral-conversations.d.ts +2 -2
- package/dist/api/mistral-conversations.d.ts.map +1 -1
- package/dist/api/mistral-conversations.js +250 -69
- package/dist/api/mistral-conversations.js.map +1 -1
- package/dist/api/mistral-conversations.lazy.d.ts.map +1 -1
- package/dist/api/openai-codex-compaction-history.d.ts +2 -2
- package/dist/api/openai-codex-compaction-history.d.ts.map +1 -1
- package/dist/api/openai-codex-compaction-history.js +1 -2
- package/dist/api/openai-codex-compaction-history.js.map +1 -1
- package/dist/api/openai-codex-responses.d.ts +1 -1
- package/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.js +107 -60
- package/dist/api/openai-codex-responses.js.map +1 -1
- package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.lazy.js.map +1 -1
- package/dist/api/openai-completions.d.ts +11 -4
- package/dist/api/openai-completions.d.ts.map +1 -1
- package/dist/api/openai-completions.js +250 -134
- package/dist/api/openai-completions.js.map +1 -1
- package/dist/api/openai-completions.lazy.d.ts.map +1 -1
- package/dist/api/openai-prompt-cache.d.ts.map +1 -1
- package/dist/api/openai-prompt-cache.js.map +1 -1
- package/dist/api/openai-responses-shared.d.ts +8 -4
- package/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/dist/api/openai-responses-shared.js +114 -62
- package/dist/api/openai-responses-shared.js.map +1 -1
- package/dist/api/openai-responses.d.ts.map +1 -1
- package/dist/api/openai-responses.js +55 -23
- package/dist/api/openai-responses.js.map +1 -1
- package/dist/api/openai-responses.lazy.d.ts.map +1 -1
- package/dist/api/openrouter-images.d.ts +2 -1
- package/dist/api/openrouter-images.d.ts.map +1 -1
- package/dist/api/openrouter-images.js +1 -0
- package/dist/api/openrouter-images.js.map +1 -1
- package/dist/api/openrouter-images.lazy.d.ts.map +1 -1
- package/dist/api/openrouter-images.lazy.js.map +1 -1
- package/dist/api/pi-messages.d.ts +5 -3
- package/dist/api/pi-messages.d.ts.map +1 -1
- package/dist/api/pi-messages.js +10 -3
- package/dist/api/pi-messages.js.map +1 -1
- package/dist/api/pi-messages.lazy.d.ts.map +1 -1
- package/dist/api/simple-options.d.ts +10 -3
- package/dist/api/simple-options.d.ts.map +1 -1
- package/dist/api/simple-options.js +31 -11
- package/dist/api/simple-options.js.map +1 -1
- package/dist/api/system-one-shared.d.ts +23 -0
- package/dist/api/system-one-shared.d.ts.map +1 -0
- package/dist/api/system-one-shared.js +183 -0
- package/dist/api/system-one-shared.js.map +1 -0
- package/dist/api/transform-messages.d.ts.map +1 -1
- package/dist/api/transform-messages.js +21 -7
- package/dist/api/transform-messages.js.map +1 -1
- package/dist/api/typesafe-system-one.d.ts +4 -0
- package/dist/api/typesafe-system-one.d.ts.map +1 -0
- package/dist/api/typesafe-system-one.js +19 -0
- package/dist/api/typesafe-system-one.js.map +1 -0
- package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
- package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
- package/dist/api/typesafe-system-one.lazy.js +4 -0
- package/dist/api/typesafe-system-one.lazy.js.map +1 -0
- package/dist/auth/context.d.ts.map +1 -1
- package/dist/auth/context.js.map +1 -1
- package/dist/auth/credential-store.d.ts +6 -6
- package/dist/auth/credential-store.d.ts.map +1 -1
- package/dist/auth/credential-store.js +22 -11
- 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 +8 -3
- package/dist/auth/helpers.js.map +1 -1
- package/dist/auth/oauth/anthropic.d.ts.map +1 -1
- package/dist/auth/oauth/anthropic.js +78 -131
- package/dist/auth/oauth/anthropic.js.map +1 -1
- package/dist/auth/oauth/callback-server.d.ts +55 -0
- package/dist/auth/oauth/callback-server.d.ts.map +1 -0
- package/dist/auth/oauth/callback-server.js +146 -0
- package/dist/auth/oauth/callback-server.js.map +1 -0
- package/dist/auth/oauth/device-code.d.ts +2 -1
- package/dist/auth/oauth/device-code.d.ts.map +1 -1
- package/dist/auth/oauth/device-code.js +5 -5
- package/dist/auth/oauth/device-code.js.map +1 -1
- package/dist/auth/oauth/github-copilot.d.ts.map +1 -1
- package/dist/auth/oauth/github-copilot.js +121 -41
- package/dist/auth/oauth/github-copilot.js.map +1 -1
- package/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
- package/dist/auth/oauth/kimi-coding.js +5 -6
- package/dist/auth/oauth/kimi-coding.js.map +1 -1
- package/dist/auth/oauth/load.d.ts +4 -0
- package/dist/auth/oauth/load.d.ts.map +1 -1
- package/dist/auth/oauth/load.js +10 -0
- package/dist/auth/oauth/load.js.map +1 -1
- package/dist/auth/oauth/meta.d.ts +17 -0
- package/dist/auth/oauth/meta.d.ts.map +1 -0
- package/dist/auth/oauth/meta.js +190 -0
- package/dist/auth/oauth/meta.js.map +1 -0
- package/dist/auth/oauth/openai-chatgpt.d.ts +9 -0
- package/dist/auth/oauth/openai-chatgpt.d.ts.map +1 -0
- package/dist/auth/oauth/openai-chatgpt.js +263 -0
- package/dist/auth/oauth/openai-chatgpt.js.map +1 -0
- package/dist/auth/oauth/openai-codex-errors.d.ts.map +1 -1
- package/dist/auth/oauth/openai-codex-errors.js.map +1 -1
- package/dist/auth/oauth/openai-codex.d.ts +1 -1
- package/dist/auth/oauth/openai-codex.d.ts.map +1 -1
- package/dist/auth/oauth/openai-codex.js +23 -152
- package/dist/auth/oauth/openai-codex.js.map +1 -1
- package/dist/auth/oauth/openrouter.d.ts +1 -1
- package/dist/auth/oauth/openrouter.d.ts.map +1 -1
- package/dist/auth/oauth/openrouter.js +25 -144
- package/dist/auth/oauth/openrouter.js.map +1 -1
- package/dist/auth/oauth/pkce.d.ts.map +1 -1
- package/dist/auth/oauth/pkce.js.map +1 -1
- package/dist/auth/oauth/radius.d.ts +1 -1
- package/dist/auth/oauth/radius.d.ts.map +1 -1
- package/dist/auth/oauth/radius.js +26 -93
- package/dist/auth/oauth/radius.js.map +1 -1
- package/dist/auth/oauth/xai.d.ts.map +1 -1
- package/dist/auth/oauth/xai.js +3 -2
- package/dist/auth/oauth/xai.js.map +1 -1
- package/dist/auth/resolve.d.ts +19 -9
- package/dist/auth/resolve.d.ts.map +1 -1
- package/dist/auth/resolve.js +72 -53
- package/dist/auth/resolve.js.map +1 -1
- package/dist/auth/types.d.ts +29 -8
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/bedrock-provider.d.ts.map +1 -1
- package/dist/bun-oauth.d.ts.map +1 -1
- package/dist/bun-oauth.js +4 -0
- package/dist/bun-oauth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/compat/extension-oauth-types.d.ts.map +1 -1
- package/dist/compat.d.ts +3 -3
- package/dist/compat.d.ts.map +1 -1
- package/dist/compat.js +9 -6
- package/dist/compat.js.map +1 -1
- package/dist/env-api-keys.d.ts +5 -0
- package/dist/env-api-keys.d.ts.map +1 -1
- package/dist/env-api-keys.js +10 -1
- package/dist/env-api-keys.js.map +1 -1
- package/dist/image-models.d.ts +19 -8
- package/dist/image-models.d.ts.map +1 -1
- package/dist/image-models.js +14 -13
- package/dist/image-models.js.map +1 -1
- package/dist/images-api-registry.d.ts +7 -7
- package/dist/images-api-registry.d.ts.map +1 -1
- package/dist/images-api-registry.js.map +1 -1
- package/dist/images.d.ts +7 -2
- package/dist/images.d.ts.map +1 -1
- package/dist/images.js +5 -0
- package/dist/images.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy-api-aliases.d.ts.map +1 -1
- package/dist/model-catalog.d.ts +25 -9
- package/dist/model-catalog.d.ts.map +1 -1
- package/dist/model-catalog.js +14 -2
- package/dist/model-catalog.js.map +1 -1
- package/dist/models-store.d.ts +12 -14
- package/dist/models-store.d.ts.map +1 -1
- package/dist/models-store.js +6 -3
- package/dist/models-store.js.map +1 -1
- package/dist/models.d.ts +138 -47
- package/dist/models.d.ts.map +1 -1
- package/dist/models.generated.d.ts +136 -38
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +136 -38
- package/dist/models.generated.js.map +1 -1
- package/dist/models.js +390 -104
- package/dist/models.js.map +1 -1
- package/dist/oauth.d.ts.map +1 -1
- package/dist/providers/all.d.ts +19 -13
- package/dist/providers/all.d.ts.map +1 -1
- package/dist/providers/all.js +33 -23
- package/dist/providers/all.js.map +1 -1
- package/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.js +15 -7
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/amazon-bedrock.models.d.ts +4 -2
- package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.models.js +4 -2
- package/dist/providers/amazon-bedrock.models.js.map +1 -1
- package/dist/providers/ant-ling.d.ts.map +1 -1
- package/dist/providers/ant-ling.js.map +1 -1
- package/dist/providers/ant-ling.models.d.ts +4 -2
- package/dist/providers/ant-ling.models.d.ts.map +1 -1
- package/dist/providers/ant-ling.models.js +4 -2
- package/dist/providers/ant-ling.models.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +39 -8
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/anthropic.models.d.ts +4 -2
- package/dist/providers/anthropic.models.d.ts.map +1 -1
- package/dist/providers/anthropic.models.js +4 -2
- package/dist/providers/anthropic.models.js.map +1 -1
- package/dist/providers/azure.d.ts +3 -0
- package/dist/providers/azure.d.ts.map +1 -0
- package/dist/providers/azure.js +46 -0
- package/dist/providers/azure.js.map +1 -0
- package/dist/providers/azure.models.d.ts +6 -0
- package/dist/providers/azure.models.d.ts.map +1 -0
- package/dist/providers/azure.models.js +8 -0
- package/dist/providers/azure.models.js.map +1 -0
- package/dist/providers/baseten.d.ts +3 -0
- package/dist/providers/baseten.d.ts.map +1 -0
- package/dist/providers/baseten.js +15 -0
- package/dist/providers/baseten.js.map +1 -0
- package/dist/providers/baseten.models.d.ts +6 -0
- package/dist/providers/baseten.models.d.ts.map +1 -0
- package/dist/providers/baseten.models.js +8 -0
- package/dist/providers/baseten.models.js.map +1 -0
- package/dist/providers/cerebras.d.ts.map +1 -1
- package/dist/providers/cerebras.js.map +1 -1
- package/dist/providers/cerebras.models.d.ts +4 -2
- package/dist/providers/cerebras.models.d.ts.map +1 -1
- package/dist/providers/cerebras.models.js +4 -2
- package/dist/providers/cerebras.models.js.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.d.ts +3 -1
- package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.js +4 -0
- package/dist/providers/cloudflare-ai-gateway.js.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -2
- package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.js +4 -2
- 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 +15 -10
- package/dist/providers/cloudflare-auth.js.map +1 -1
- package/dist/providers/cloudflare-stream.d.ts +6 -2
- package/dist/providers/cloudflare-stream.d.ts.map +1 -1
- package/dist/providers/cloudflare-stream.js +6 -0
- package/dist/providers/cloudflare-stream.js.map +1 -1
- package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
- package/dist/providers/cloudflare-workers-ai.js +10 -3
- package/dist/providers/cloudflare-workers-ai.js.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -2
- package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.js +4 -2
- package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
- package/dist/providers/data/.manifest.json +1 -1
- package/dist/providers/data/amazon-bedrock.json +1 -1
- package/dist/providers/data/ant-ling.json +1 -1
- package/dist/providers/data/anthropic.json +1 -1
- package/dist/providers/data/azure.json +1 -0
- package/dist/providers/data/baseten.json +1 -0
- package/dist/providers/data/cerebras.json +1 -1
- package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/dist/providers/data/deepseek.json +1 -1
- package/dist/providers/data/fireworks.json +1 -1
- package/dist/providers/data/github-copilot.json +1 -1
- package/dist/providers/data/google-vertex.json +1 -1
- package/dist/providers/data/google.json +1 -1
- package/dist/providers/data/groq.json +1 -1
- package/dist/providers/data/huggingface.json +1 -1
- package/dist/providers/data/kimi-coding.json +1 -1
- package/dist/providers/data/meta.json +1 -0
- package/dist/providers/data/minimax-cn.json +1 -1
- package/dist/providers/data/minimax.json +1 -1
- package/dist/providers/data/mistral.json +1 -1
- package/dist/providers/data/moonshotai-cn.json +1 -1
- package/dist/providers/data/moonshotai.json +1 -1
- package/dist/providers/data/nvidia.json +1 -1
- package/dist/providers/data/openai-codex.json +1 -1
- package/dist/providers/data/openai.json +1 -1
- package/dist/providers/data/opencode-go.json +1 -1
- package/dist/providers/data/opencode.json +1 -1
- package/dist/providers/data/openrouter.json +1 -1
- package/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/dist/providers/data/qwen-token-plan-individual.json +1 -0
- package/dist/providers/data/qwen-token-plan.json +1 -1
- package/dist/providers/data/radius.json +1 -0
- package/dist/providers/data/together.json +1 -1
- package/dist/providers/data/typesafe.json +1 -0
- package/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/dist/providers/data/xai.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
- package/dist/providers/data/xiaomi.json +1 -1
- package/dist/providers/data/zai-coding-cn.json +1 -1
- package/dist/providers/data/zai.json +1 -1
- package/dist/providers/deepseek.d.ts.map +1 -1
- package/dist/providers/deepseek.js.map +1 -1
- package/dist/providers/deepseek.models.d.ts +4 -2
- package/dist/providers/deepseek.models.d.ts.map +1 -1
- package/dist/providers/deepseek.models.js +4 -2
- package/dist/providers/deepseek.models.js.map +1 -1
- package/dist/providers/faux.d.ts +19 -13
- package/dist/providers/faux.d.ts.map +1 -1
- package/dist/providers/faux.js +109 -18
- package/dist/providers/faux.js.map +1 -1
- package/dist/providers/fireworks.d.ts.map +1 -1
- package/dist/providers/fireworks.js.map +1 -1
- package/dist/providers/fireworks.models.d.ts +4 -2
- package/dist/providers/fireworks.models.d.ts.map +1 -1
- package/dist/providers/fireworks.models.js +4 -2
- 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 +1 -1
- package/dist/providers/github-copilot.js.map +1 -1
- package/dist/providers/github-copilot.models.d.ts +4 -2
- package/dist/providers/github-copilot.models.d.ts.map +1 -1
- package/dist/providers/github-copilot.models.js +4 -2
- 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 +15 -7
- package/dist/providers/google-vertex.js.map +1 -1
- package/dist/providers/google-vertex.models.d.ts +4 -2
- package/dist/providers/google-vertex.models.d.ts.map +1 -1
- package/dist/providers/google-vertex.models.js +4 -2
- package/dist/providers/google-vertex.models.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/google.models.d.ts +4 -2
- package/dist/providers/google.models.d.ts.map +1 -1
- package/dist/providers/google.models.js +4 -2
- package/dist/providers/google.models.js.map +1 -1
- package/dist/providers/groq.d.ts.map +1 -1
- package/dist/providers/groq.js.map +1 -1
- package/dist/providers/groq.models.d.ts +4 -2
- package/dist/providers/groq.models.d.ts.map +1 -1
- package/dist/providers/groq.models.js +4 -2
- package/dist/providers/groq.models.js.map +1 -1
- package/dist/providers/huggingface.d.ts.map +1 -1
- package/dist/providers/huggingface.js.map +1 -1
- package/dist/providers/huggingface.models.d.ts +4 -2
- package/dist/providers/huggingface.models.d.ts.map +1 -1
- package/dist/providers/huggingface.models.js +4 -2
- package/dist/providers/huggingface.models.js.map +1 -1
- package/dist/providers/images/register-builtins.d.ts +1 -1
- package/dist/providers/images/register-builtins.d.ts.map +1 -1
- package/dist/providers/images/register-builtins.js.map +1 -1
- package/dist/providers/kimi-coding.d.ts.map +1 -1
- package/dist/providers/kimi-coding.js +1 -0
- package/dist/providers/kimi-coding.js.map +1 -1
- package/dist/providers/kimi-coding.models.d.ts +4 -2
- package/dist/providers/kimi-coding.models.d.ts.map +1 -1
- package/dist/providers/kimi-coding.models.js +4 -2
- package/dist/providers/kimi-coding.models.js.map +1 -1
- package/dist/providers/meta.d.ts +3 -0
- package/dist/providers/meta.d.ts.map +1 -0
- package/dist/providers/meta.js +24 -0
- package/dist/providers/meta.js.map +1 -0
- package/dist/providers/meta.models.d.ts +6 -0
- package/dist/providers/meta.models.d.ts.map +1 -0
- package/dist/providers/meta.models.js +8 -0
- package/dist/providers/meta.models.js.map +1 -0
- package/dist/providers/minimax-cn.d.ts.map +1 -1
- package/dist/providers/minimax-cn.js.map +1 -1
- package/dist/providers/minimax-cn.models.d.ts +4 -2
- package/dist/providers/minimax-cn.models.d.ts.map +1 -1
- package/dist/providers/minimax-cn.models.js +4 -2
- package/dist/providers/minimax-cn.models.js.map +1 -1
- package/dist/providers/minimax.d.ts.map +1 -1
- package/dist/providers/minimax.js.map +1 -1
- package/dist/providers/minimax.models.d.ts +4 -2
- package/dist/providers/minimax.models.d.ts.map +1 -1
- package/dist/providers/minimax.models.js +4 -2
- package/dist/providers/minimax.models.js.map +1 -1
- package/dist/providers/mistral.d.ts.map +1 -1
- package/dist/providers/mistral.js.map +1 -1
- package/dist/providers/mistral.models.d.ts +4 -2
- package/dist/providers/mistral.models.d.ts.map +1 -1
- package/dist/providers/mistral.models.js +4 -2
- package/dist/providers/mistral.models.js.map +1 -1
- package/dist/providers/moonshotai-cn.d.ts.map +1 -1
- package/dist/providers/moonshotai-cn.js.map +1 -1
- package/dist/providers/moonshotai-cn.models.d.ts +4 -2
- package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
- package/dist/providers/moonshotai-cn.models.js +4 -2
- package/dist/providers/moonshotai-cn.models.js.map +1 -1
- package/dist/providers/moonshotai.d.ts.map +1 -1
- package/dist/providers/moonshotai.js.map +1 -1
- package/dist/providers/moonshotai.models.d.ts +4 -2
- package/dist/providers/moonshotai.models.d.ts.map +1 -1
- package/dist/providers/moonshotai.models.js +4 -2
- package/dist/providers/moonshotai.models.js.map +1 -1
- package/dist/providers/nvidia.d.ts.map +1 -1
- package/dist/providers/nvidia.js.map +1 -1
- package/dist/providers/nvidia.models.d.ts +4 -2
- package/dist/providers/nvidia.models.d.ts.map +1 -1
- package/dist/providers/nvidia.models.js +4 -2
- package/dist/providers/nvidia.models.js.map +1 -1
- package/dist/providers/openai-codex-catalog.d.ts +1 -0
- package/dist/providers/openai-codex-catalog.d.ts.map +1 -1
- package/dist/providers/openai-codex-catalog.js +19 -10
- package/dist/providers/openai-codex-catalog.js.map +1 -1
- package/dist/providers/openai-codex.d.ts.map +1 -1
- package/dist/providers/openai-codex.js +5 -1
- package/dist/providers/openai-codex.js.map +1 -1
- package/dist/providers/openai-codex.models.d.ts +4 -2
- package/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/dist/providers/openai-codex.models.js +4 -2
- package/dist/providers/openai-codex.models.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +11 -2
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openai.models.d.ts +4 -2
- package/dist/providers/openai.models.d.ts.map +1 -1
- package/dist/providers/openai.models.js +4 -2
- package/dist/providers/openai.models.js.map +1 -1
- package/dist/providers/opencode-go.d.ts.map +1 -1
- package/dist/providers/opencode-go.js +5 -4
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/opencode-go.models.d.ts +4 -2
- package/dist/providers/opencode-go.models.d.ts.map +1 -1
- package/dist/providers/opencode-go.models.js +4 -2
- package/dist/providers/opencode-go.models.js.map +1 -1
- package/dist/providers/opencode-headers.d.ts +4 -0
- package/dist/providers/opencode-headers.d.ts.map +1 -0
- package/dist/providers/opencode-headers.js +22 -0
- package/dist/providers/opencode-headers.js.map +1 -0
- package/dist/providers/opencode.d.ts +3 -1
- package/dist/providers/opencode.d.ts.map +1 -1
- package/dist/providers/opencode.js +10 -6
- package/dist/providers/opencode.js.map +1 -1
- package/dist/providers/opencode.models.d.ts +4 -2
- package/dist/providers/opencode.models.d.ts.map +1 -1
- package/dist/providers/opencode.models.js +4 -2
- package/dist/providers/opencode.models.js.map +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +16 -3
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/openrouter.models.d.ts +4 -2
- package/dist/providers/openrouter.models.d.ts.map +1 -1
- package/dist/providers/openrouter.models.js +4 -2
- package/dist/providers/openrouter.models.js.map +1 -1
- package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-cn.js.map +1 -1
- package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -2
- package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-cn.models.js +4 -2
- package/dist/providers/qwen-token-plan-cn.models.js.map +1 -1
- package/dist/providers/qwen-token-plan-individual.d.ts +3 -0
- package/dist/providers/qwen-token-plan-individual.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan-individual.js +15 -0
- package/dist/providers/qwen-token-plan-individual.js.map +1 -0
- package/dist/providers/qwen-token-plan-individual.models.d.ts +6 -0
- package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -0
- package/dist/providers/qwen-token-plan-individual.models.js +8 -0
- package/dist/providers/qwen-token-plan-individual.models.js.map +1 -0
- package/dist/providers/qwen-token-plan.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan.js.map +1 -1
- package/dist/providers/qwen-token-plan.models.d.ts +4 -2
- package/dist/providers/qwen-token-plan.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan.models.js +4 -2
- package/dist/providers/qwen-token-plan.models.js.map +1 -1
- package/dist/providers/radius-config.d.ts.map +1 -1
- package/dist/providers/radius-config.js.map +1 -1
- package/dist/providers/radius.d.ts.map +1 -1
- package/dist/providers/radius.js +53 -29
- package/dist/providers/radius.js.map +1 -1
- package/dist/providers/radius.models.d.ts +6 -0
- package/dist/providers/radius.models.d.ts.map +1 -0
- package/dist/providers/radius.models.js +8 -0
- package/dist/providers/radius.models.js.map +1 -0
- package/dist/providers/together.d.ts.map +1 -1
- package/dist/providers/together.js.map +1 -1
- package/dist/providers/together.models.d.ts +4 -2
- package/dist/providers/together.models.d.ts.map +1 -1
- package/dist/providers/together.models.js +4 -2
- package/dist/providers/together.models.js.map +1 -1
- package/dist/providers/typesafe.d.ts +3 -0
- package/dist/providers/typesafe.d.ts.map +1 -0
- package/dist/providers/typesafe.js +18 -0
- package/dist/providers/typesafe.js.map +1 -0
- package/dist/providers/typesafe.models.d.ts +6 -0
- package/dist/providers/typesafe.models.d.ts.map +1 -0
- package/dist/providers/typesafe.models.js +8 -0
- package/dist/providers/typesafe.models.js.map +1 -0
- package/dist/providers/vercel-ai-gateway.d.ts.map +1 -1
- package/dist/providers/vercel-ai-gateway.js +5 -2
- package/dist/providers/vercel-ai-gateway.js.map +1 -1
- package/dist/providers/vercel-ai-gateway.models.d.ts +4 -2
- package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/vercel-ai-gateway.models.js +4 -2
- 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 +2 -5
- package/dist/providers/xai.js.map +1 -1
- package/dist/providers/xai.models.d.ts +4 -2
- package/dist/providers/xai.models.d.ts.map +1 -1
- package/dist/providers/xai.models.js +4 -2
- package/dist/providers/xai.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -2
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -2
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -2
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
- package/dist/providers/xiaomi.d.ts.map +1 -1
- package/dist/providers/xiaomi.js.map +1 -1
- package/dist/providers/xiaomi.models.d.ts +4 -2
- package/dist/providers/xiaomi.models.d.ts.map +1 -1
- package/dist/providers/xiaomi.models.js +4 -2
- package/dist/providers/xiaomi.models.js.map +1 -1
- package/dist/providers/zai-coding-cn.d.ts.map +1 -1
- package/dist/providers/zai-coding-cn.js.map +1 -1
- package/dist/providers/zai-coding-cn.models.d.ts +4 -2
- package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
- package/dist/providers/zai-coding-cn.models.js +4 -2
- package/dist/providers/zai-coding-cn.models.js.map +1 -1
- package/dist/providers/zai.d.ts.map +1 -1
- package/dist/providers/zai.js.map +1 -1
- package/dist/providers/zai.models.d.ts +4 -2
- package/dist/providers/zai.models.d.ts.map +1 -1
- package/dist/providers/zai.models.js +4 -2
- package/dist/providers/zai.models.js.map +1 -1
- package/dist/session-resources.d.ts.map +1 -1
- package/dist/session-resources.js.map +1 -1
- package/dist/types.d.ts +414 -126
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/abort-signals.d.ts.map +1 -1
- package/dist/utils/abort-signals.js.map +1 -1
- package/dist/utils/abort.d.ts +8 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +49 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/assistant-message-frame.d.ts +77 -0
- package/dist/utils/assistant-message-frame.d.ts.map +1 -0
- package/dist/utils/assistant-message-frame.js +425 -0
- package/dist/utils/assistant-message-frame.js.map +1 -0
- package/dist/utils/diagnostics.d.ts +3 -2
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/error-body.d.ts.map +1 -1
- package/dist/utils/error-body.js +23 -4
- package/dist/utils/error-body.js.map +1 -1
- package/dist/utils/estimate.d.ts +2 -2
- package/dist/utils/estimate.d.ts.map +1 -1
- package/dist/utils/estimate.js +8 -29
- package/dist/utils/estimate.js.map +1 -1
- package/dist/utils/event-stream.d.ts.map +1 -1
- package/dist/utils/event-stream.js +25 -7
- package/dist/utils/event-stream.js.map +1 -1
- package/dist/utils/hash.d.ts.map +1 -1
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/headers.d.ts +1 -1
- package/dist/utils/headers.d.ts.map +1 -1
- package/dist/utils/headers.js +10 -8
- package/dist/utils/headers.js.map +1 -1
- package/dist/utils/json-parse.d.ts.map +1 -1
- package/dist/utils/json-parse.js.map +1 -1
- package/dist/utils/model-operations.d.ts +11 -0
- package/dist/utils/model-operations.d.ts.map +1 -0
- package/dist/utils/model-operations.js +47 -0
- package/dist/utils/model-operations.js.map +1 -0
- package/dist/utils/models-error.d.ts +8 -0
- package/dist/utils/models-error.d.ts.map +1 -0
- package/dist/utils/models-error.js +19 -0
- package/dist/utils/models-error.js.map +1 -0
- 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/oauth-page.d.ts.map +1 -0
- package/dist/{auth/oauth → utils}/oauth-page.js +1 -1
- package/dist/utils/oauth-page.js.map +1 -0
- package/dist/utils/overflow.d.ts +11 -1
- package/dist/utils/overflow.d.ts.map +1 -1
- package/dist/utils/overflow.js +24 -6
- 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-env.d.ts.map +1 -1
- package/dist/utils/provider-env.js.map +1 -1
- package/dist/utils/provider-retry.d.ts.map +1 -1
- package/dist/utils/provider-retry.js +3 -2
- package/dist/utils/provider-retry.js.map +1 -1
- package/dist/utils/retry.d.ts +6 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +23 -2
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/sanitize-unicode.d.ts.map +1 -1
- package/dist/utils/sanitize-unicode.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 +9 -1
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/text.js +26 -0
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/transcript.d.ts +87 -0
- package/dist/utils/transcript.d.ts.map +1 -0
- package/dist/utils/transcript.js +207 -0
- package/dist/utils/transcript.js.map +1 -0
- package/dist/utils/typebox-helpers.d.ts.map +1 -1
- package/dist/utils/typebox-helpers.js.map +1 -1
- package/dist/utils/uuid.d.ts +2 -2
- package/dist/utils/uuid.d.ts.map +1 -1
- package/dist/utils/uuid.js +35 -39
- package/dist/utils/uuid.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +224 -13
- package/dist/utils/validation.js.map +1 -1
- package/package.json +21 -15
- package/dist/auth/oauth/oauth-page.d.ts.map +0 -1
- package/dist/auth/oauth/oauth-page.js.map +0 -1
- package/dist/image-models.generated.d.ts +0 -605
- package/dist/image-models.generated.d.ts.map +0 -1
- package/dist/image-models.generated.js +0 -607
- package/dist/image-models.generated.js.map +0 -1
- package/dist/images-models.d.ts +0 -95
- package/dist/images-models.d.ts.map +0 -1
- package/dist/images-models.js +0 -142
- package/dist/images-models.js.map +0 -1
- package/dist/providers/azure-openai-responses.d.ts +0 -3
- package/dist/providers/azure-openai-responses.d.ts.map +0 -1
- package/dist/providers/azure-openai-responses.js +0 -14
- package/dist/providers/azure-openai-responses.js.map +0 -1
- package/dist/providers/azure-openai-responses.models.d.ts +0 -4
- package/dist/providers/azure-openai-responses.models.d.ts.map +0 -1
- package/dist/providers/azure-openai-responses.models.js +0 -6
- package/dist/providers/azure-openai-responses.models.js.map +0 -1
- package/dist/providers/data/azure-openai-responses.json +0 -1
- package/dist/providers/openrouter-images.d.ts +0 -3
- package/dist/providers/openrouter-images.d.ts.map +0 -1
- package/dist/providers/openrouter-images.js +0 -22
- package/dist/providers/openrouter-images.js.map +0 -1
- package/dist/utils/deferred-tools.d.ts +0 -9
- package/dist/utils/deferred-tools.d.ts.map +0 -1
- package/dist/utils/deferred-tools.js +0 -36
- package/dist/utils/deferred-tools.js.map +0 -1
- /package/dist/{auth/oauth → utils}/oauth-page.d.ts +0 -0
|
@@ -3,6 +3,7 @@ import { NodeHttpHandler } from "@smithy/node-http-handler";
|
|
|
3
3
|
import { HttpProxyAgent } from "http-proxy-agent";
|
|
4
4
|
import { HttpsProxyAgent } from "https-proxy-agent";
|
|
5
5
|
import { calculateCost } from "../models.js";
|
|
6
|
+
import { appendAssistantMessageDiagnostic } from "../utils/diagnostics.js";
|
|
6
7
|
import { normalizeProviderError } from "../utils/error-body.js";
|
|
7
8
|
import { AssistantMessageEventStream } from "../utils/event-stream.js";
|
|
8
9
|
import { providerHeadersToRecord } from "../utils/headers.js";
|
|
@@ -10,12 +11,19 @@ import { parseStreamingJson } from "../utils/json-parse.js";
|
|
|
10
11
|
import { resolveHttpProxyUrlForTarget } from "../utils/node-http-proxy.js";
|
|
11
12
|
import { getProviderEnvValue } from "../utils/provider-env.js";
|
|
12
13
|
import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
|
|
13
|
-
import {
|
|
14
|
+
import { getSystemMessageText } from "../utils/text.js";
|
|
15
|
+
import { collapseSystemMessages, getCurrentTools, getInitialSystemMessage, withoutInitialSystemMessage, } from "../utils/transcript.js";
|
|
16
|
+
import { getJsonSchemaToolParameters, resolveJsonSchemaStrictSampling } from "./constrained-sampling.js";
|
|
14
17
|
import { adjustMaxTokensForThinking, buildBaseOptions, clampMaxTokensToContext, clampReasoning, } from "./simple-options.js";
|
|
15
18
|
import { transformMessages } from "./transform-messages.js";
|
|
16
19
|
const EMPTY_TEXT_PLACEHOLDER = "<empty>";
|
|
20
|
+
const THINKING_BINDING_CONTROLS_BETA = "thinking-binding-controls-2026-08-01";
|
|
21
|
+
/** Matches the placeholder the Anthropic API path uses for redacted thinking. */
|
|
22
|
+
const REDACTED_THINKING_PLACEHOLDER = "[Reasoning redacted]";
|
|
17
23
|
export const stream = (model, context, options = {}) => {
|
|
18
24
|
const stream = new AssistantMessageEventStream();
|
|
25
|
+
// Bedrock has no mid-conversation system messages; fold them into the leading prompt.
|
|
26
|
+
const normalizedContext = collapseSystemMessages(context);
|
|
19
27
|
(async () => {
|
|
20
28
|
const output = {
|
|
21
29
|
role: "assistant",
|
|
@@ -115,23 +123,35 @@ export const stream = (model, context, options = {}) => {
|
|
|
115
123
|
config.token = { token: bearerToken };
|
|
116
124
|
config.authSchemePreference = ["httpBearerAuth"];
|
|
117
125
|
}
|
|
126
|
+
// Kept outside the try so the catch can still correlate a mid-stream failure:
|
|
127
|
+
// exceptions delivered as stream events carry no HTTP metadata of their own.
|
|
128
|
+
let responseRequestId;
|
|
118
129
|
try {
|
|
130
|
+
const supportsStrictMode = model.compat?.supportsStrictMode ?? false;
|
|
119
131
|
const client = new BedrockRuntimeClient(config);
|
|
132
|
+
let observedRawResponse = false;
|
|
133
|
+
if (options.onResponse) {
|
|
134
|
+
addResponseHeadersMiddleware(client, options.onResponse, model, () => {
|
|
135
|
+
observedRawResponse = true;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
120
138
|
const customHeaders = providerHeadersToRecord(options.headers);
|
|
121
139
|
if (customHeaders) {
|
|
122
140
|
addCustomHeadersMiddleware(client, customHeaders);
|
|
123
141
|
}
|
|
124
142
|
const cacheRetention = resolveCacheRetention(options.cacheRetention, options.env);
|
|
125
143
|
const inferenceMaxTokens = options.maxTokens ?? (isAnthropicClaudeModel(model) ? model.maxTokens : undefined);
|
|
144
|
+
const initialSystemMessage = getInitialSystemMessage(normalizedContext.messages);
|
|
145
|
+
const initialSystemPrompt = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : undefined;
|
|
126
146
|
let commandInput = {
|
|
127
147
|
modelId: model.id,
|
|
128
|
-
messages: convertMessages(
|
|
129
|
-
system: buildSystemPrompt(
|
|
148
|
+
messages: convertMessages(normalizedContext, model, cacheRetention, options.env),
|
|
149
|
+
system: buildSystemPrompt(initialSystemPrompt, model, cacheRetention, options.env),
|
|
130
150
|
inferenceConfig: {
|
|
131
151
|
...(inferenceMaxTokens !== undefined && { maxTokens: inferenceMaxTokens }),
|
|
132
152
|
...(options.temperature !== undefined && { temperature: options.temperature }),
|
|
133
153
|
},
|
|
134
|
-
toolConfig: convertToolConfig(
|
|
154
|
+
toolConfig: convertToolConfig(getCurrentTools(normalizedContext.messages), options.toolChoice, supportsStrictMode),
|
|
135
155
|
additionalModelRequestFields: buildAdditionalModelRequestFields(model, options),
|
|
136
156
|
...(options.requestMetadata !== undefined && { requestMetadata: options.requestMetadata }),
|
|
137
157
|
};
|
|
@@ -141,7 +161,8 @@ export const stream = (model, context, options = {}) => {
|
|
|
141
161
|
}
|
|
142
162
|
const command = new ConverseStreamCommand(commandInput);
|
|
143
163
|
const response = await client.send(command, { abortSignal: options.signal });
|
|
144
|
-
|
|
164
|
+
responseRequestId = normalizeDiagnosticValue(response.$metadata.requestId);
|
|
165
|
+
if (!observedRawResponse && response.$metadata.httpStatusCode !== undefined) {
|
|
145
166
|
const responseHeaders = {};
|
|
146
167
|
if (response.$metadata.requestId) {
|
|
147
168
|
responseHeaders["x-amzn-requestid"] = response.$metadata.requestId;
|
|
@@ -149,6 +170,7 @@ export const stream = (model, context, options = {}) => {
|
|
|
149
170
|
await options?.onResponse?.({ status: response.$metadata.httpStatusCode, headers: responseHeaders }, model);
|
|
150
171
|
}
|
|
151
172
|
for await (const item of response.stream) {
|
|
173
|
+
await options.onProviderStreamEvent?.(item, model);
|
|
152
174
|
if (item.messageStart) {
|
|
153
175
|
if (item.messageStart.role !== ConversationRole.ASSISTANT) {
|
|
154
176
|
throw new Error("Unexpected assistant message start but got user message start instead");
|
|
@@ -200,17 +222,21 @@ export const stream = (model, context, options = {}) => {
|
|
|
200
222
|
if (output.stopReason === "error" || output.stopReason === "aborted") {
|
|
201
223
|
throw new Error(output.errorMessage || "An unknown error occurred");
|
|
202
224
|
}
|
|
225
|
+
// A stream can settle without stopping every block, so finalize here too.
|
|
226
|
+
for (const block of output.content)
|
|
227
|
+
finalizeStreamingBlock(block);
|
|
203
228
|
stream.push({ type: "done", reason: output.stopReason, message: output });
|
|
204
229
|
stream.end();
|
|
205
230
|
}
|
|
206
231
|
catch (error) {
|
|
207
232
|
for (const block of output.content) {
|
|
208
|
-
|
|
209
|
-
// partialJson is only a streaming scratch buffer; never persist it.
|
|
210
|
-
delete block.partialJson;
|
|
233
|
+
finalizeStreamingBlock(block);
|
|
211
234
|
}
|
|
212
235
|
output.stopReason = options.signal?.aborted ? "aborted" : "error";
|
|
213
236
|
output.errorMessage = formatBedrockError(error);
|
|
237
|
+
if (output.stopReason === "error") {
|
|
238
|
+
appendBedrockFailureDiagnostic(output, error, responseRequestId);
|
|
239
|
+
}
|
|
214
240
|
stream.push({ type: "error", reason: output.stopReason, error: output });
|
|
215
241
|
stream.end();
|
|
216
242
|
}
|
|
@@ -260,6 +286,46 @@ function formatBedrockError(error) {
|
|
|
260
286
|
}
|
|
261
287
|
return `${core}${dataRetentionHint}`;
|
|
262
288
|
}
|
|
289
|
+
/** Over-long header values are dropped rather than truncated: a truncated request id is not a request id. */
|
|
290
|
+
const MAX_BEDROCK_DIAGNOSTIC_VALUE_CHARS = 200;
|
|
291
|
+
function normalizeDiagnosticValue(value) {
|
|
292
|
+
if (typeof value !== "string")
|
|
293
|
+
return undefined;
|
|
294
|
+
const trimmed = value.trim();
|
|
295
|
+
if (trimmed.length === 0 || trimmed.length > MAX_BEDROCK_DIAGNOSTIC_VALUE_CHARS)
|
|
296
|
+
return undefined;
|
|
297
|
+
return trimmed;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* The SDK puts the modeled code on `error.name` for service exceptions and unmodeled stream errors alike, so
|
|
301
|
+
* do not narrow to `BedrockRuntimeServiceException`. Modeled Bedrock errors all end in `Exception`, unlike
|
|
302
|
+
* transport names such as `TimeoutError`.
|
|
303
|
+
*/
|
|
304
|
+
function extractBedrockErrorCode(error) {
|
|
305
|
+
if (!(error instanceof Error) || !error.name.endsWith("Exception"))
|
|
306
|
+
return undefined;
|
|
307
|
+
return normalizeDiagnosticValue(error.name);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Structured metadata alongside `errorMessage`, which stays byte-identical because `isRetryableAssistantError`
|
|
311
|
+
* matches against it. Unknown fields are omitted, never guessed: a modeled mid-stream exception reaches us as
|
|
312
|
+
* a bare object literal, leaving only `fallbackRequestId`. `details` only, as the throw is not always `Error`.
|
|
313
|
+
*/
|
|
314
|
+
function appendBedrockFailureDiagnostic(output, error, fallbackRequestId) {
|
|
315
|
+
const metadata = error?.$metadata;
|
|
316
|
+
const details = {};
|
|
317
|
+
if (typeof metadata?.httpStatusCode === "number")
|
|
318
|
+
details.status = metadata.httpStatusCode;
|
|
319
|
+
const errorCode = extractBedrockErrorCode(error);
|
|
320
|
+
if (errorCode !== undefined)
|
|
321
|
+
details.errorCode = errorCode;
|
|
322
|
+
const requestId = normalizeDiagnosticValue(metadata?.requestId) ?? fallbackRequestId;
|
|
323
|
+
if (requestId !== undefined)
|
|
324
|
+
details.requestId = requestId;
|
|
325
|
+
if (Object.keys(details).length === 0)
|
|
326
|
+
return;
|
|
327
|
+
appendAssistantMessageDiagnostic(output, { type: "bedrock_response_failure", timestamp: Date.now(), details });
|
|
328
|
+
}
|
|
263
329
|
/**
|
|
264
330
|
* Header keys that must never be overwritten by caller-supplied headers.
|
|
265
331
|
* `host` and `x-amz-*` participate in the SigV4 canonical request; `authorization`
|
|
@@ -293,8 +359,40 @@ function addCustomHeadersMiddleware(client, headers) {
|
|
|
293
359
|
};
|
|
294
360
|
client.middlewareStack.add(middleware, { step: "build", name: "pi-ai-custom-headers", priority: "low" });
|
|
295
361
|
}
|
|
362
|
+
function isSmithyHttpResponse(response) {
|
|
363
|
+
if (!response || typeof response !== "object")
|
|
364
|
+
return false;
|
|
365
|
+
const candidate = response;
|
|
366
|
+
return typeof candidate.statusCode === "number" && !!candidate.headers && typeof candidate.headers === "object";
|
|
367
|
+
}
|
|
368
|
+
function toProviderResponse(response) {
|
|
369
|
+
if (!isSmithyHttpResponse(response))
|
|
370
|
+
return undefined;
|
|
371
|
+
return { status: response.statusCode, headers: { ...response.headers } };
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Bedrock's modeled `$metadata` only preserves selected HTTP metadata (for example
|
|
375
|
+
* requestId), so custom gateway headers are otherwise lost before callers see
|
|
376
|
+
* `onResponse`. Capture the raw Smithy HTTP response at the deserialize step,
|
|
377
|
+
* after the SDK receives the response but before the event stream is consumed.
|
|
378
|
+
*/
|
|
379
|
+
function addResponseHeadersMiddleware(client, onResponse, model, onObserved) {
|
|
380
|
+
const middleware = (next) => async (args) => {
|
|
381
|
+
const result = await next(args);
|
|
382
|
+
const providerResponse = toProviderResponse(result.response);
|
|
383
|
+
if (providerResponse) {
|
|
384
|
+
onObserved();
|
|
385
|
+
await onResponse(providerResponse, model);
|
|
386
|
+
}
|
|
387
|
+
return result;
|
|
388
|
+
};
|
|
389
|
+
client.middlewareStack.add(middleware, { step: "deserialize", name: "pi-ai-response-headers" });
|
|
390
|
+
}
|
|
296
391
|
export const streamSimple = (model, context, options) => {
|
|
297
|
-
const base =
|
|
392
|
+
const base = {
|
|
393
|
+
...buildBaseOptions(model, context, options, undefined),
|
|
394
|
+
toolChoice: options?.toolChoice,
|
|
395
|
+
};
|
|
298
396
|
if (!options?.reasoning) {
|
|
299
397
|
return stream(model, context, { ...base, reasoning: undefined });
|
|
300
398
|
}
|
|
@@ -386,19 +484,61 @@ function handleContentBlockDelta(event, blocks, output, stream) {
|
|
|
386
484
|
partial: output,
|
|
387
485
|
});
|
|
388
486
|
}
|
|
389
|
-
|
|
487
|
+
// `thinkingSignature` holds either an Anthropic signature or an opaque redacted
|
|
488
|
+
// payload, never both: mixing them would corrupt whichever arrived first.
|
|
489
|
+
if (delta.reasoningContent.signature && !thinkingBlock.redacted) {
|
|
390
490
|
thinkingBlock.thinkingSignature =
|
|
391
491
|
(thinkingBlock.thinkingSignature || "") + delta.reasoningContent.signature;
|
|
392
492
|
}
|
|
493
|
+
if (delta.reasoningContent.redactedContent?.length) {
|
|
494
|
+
// Encrypted reasoning from non-Anthropic models on Bedrock (e.g. OpenAI GPT-5.6).
|
|
495
|
+
// The payload is opaque, so keep it verbatim in `thinkingSignature` the way the
|
|
496
|
+
// Anthropic path stores redacted thinking, and replay it on the next turn.
|
|
497
|
+
if (!thinkingBlock.redacted) {
|
|
498
|
+
thinkingBlock.redacted = true;
|
|
499
|
+
thinkingBlock.thinkingSignature = "";
|
|
500
|
+
thinkingBlock.thinking += REDACTED_THINKING_PLACEHOLDER;
|
|
501
|
+
stream.push({
|
|
502
|
+
type: "thinking_delta",
|
|
503
|
+
contentIndex: thinkingIndex,
|
|
504
|
+
delta: REDACTED_THINKING_PLACEHOLDER,
|
|
505
|
+
partial: output,
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
thinkingBlock.redactedChunks ??= [];
|
|
509
|
+
thinkingBlock.redactedChunks.push(delta.reasoningContent.redactedContent);
|
|
510
|
+
}
|
|
393
511
|
}
|
|
394
512
|
}
|
|
395
513
|
}
|
|
514
|
+
/**
|
|
515
|
+
* Encodes buffered encrypted reasoning into `thinkingSignature` and drops the scratch
|
|
516
|
+
* buffer, which must never reach a persisted message: `Uint8Array` serializes to an
|
|
517
|
+
* index-keyed object roughly ten times the size of the base64 payload.
|
|
518
|
+
*/
|
|
519
|
+
function flushRedactedContent(block) {
|
|
520
|
+
if (block.type !== "thinking" || !block.redactedChunks)
|
|
521
|
+
return;
|
|
522
|
+
block.thinkingSignature = bytesToBase64(block.redactedChunks);
|
|
523
|
+
delete block.redactedChunks;
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Strips every streaming scratch field. Runs from the terminal paths as well as
|
|
527
|
+
* `contentBlockStop`, because a stream can settle without stopping each block.
|
|
528
|
+
*/
|
|
529
|
+
function finalizeStreamingBlock(block) {
|
|
530
|
+
delete block.index;
|
|
531
|
+
// partialJson is only a streaming scratch buffer; never persist it.
|
|
532
|
+
delete block.partialJson;
|
|
533
|
+
flushRedactedContent(block);
|
|
534
|
+
}
|
|
396
535
|
function handleMetadata(event, model, output) {
|
|
397
536
|
if (event.usage) {
|
|
398
537
|
output.usage.input = event.usage.inputTokens || 0;
|
|
399
538
|
output.usage.output = event.usage.outputTokens || 0;
|
|
400
539
|
output.usage.cacheRead = event.usage.cacheReadInputTokens || 0;
|
|
401
540
|
output.usage.cacheWrite = event.usage.cacheWriteInputTokens || 0;
|
|
541
|
+
output.usage.cacheWrite1h = event.usage.cacheDetails?.reduce((total, detail) => total + (detail.ttl === CacheTTL.ONE_HOUR ? (detail.inputTokens ?? 0) : 0), 0);
|
|
402
542
|
output.usage.totalTokens = event.usage.totalTokens || output.usage.input + output.usage.output;
|
|
403
543
|
calculateCost(model, output.usage);
|
|
404
544
|
}
|
|
@@ -414,6 +554,7 @@ function handleContentBlockStop(event, blocks, output, stream) {
|
|
|
414
554
|
stream.push({ type: "text_end", contentIndex: index, content: block.text, partial: output });
|
|
415
555
|
break;
|
|
416
556
|
case "thinking":
|
|
557
|
+
flushRedactedContent(block);
|
|
417
558
|
stream.push({ type: "thinking_end", contentIndex: index, content: block.thinking, partial: output });
|
|
418
559
|
break;
|
|
419
560
|
case "toolCall":
|
|
@@ -455,6 +596,18 @@ function supportsNativeXhighEffort(model) {
|
|
|
455
596
|
s.includes("sonnet-5") ||
|
|
456
597
|
s.includes("fable-5"));
|
|
457
598
|
}
|
|
599
|
+
/**
|
|
600
|
+
* Check if the model accepts `thinking.block_binding`. Opus 4.6 and Sonnet 4.6 reject it with
|
|
601
|
+
* "thinking.adaptive.block_binding: Extra inputs are not permitted".
|
|
602
|
+
*/
|
|
603
|
+
function supportsThinkingBlockBinding(model) {
|
|
604
|
+
const candidates = getModelMatchCandidates(model.id, model.name);
|
|
605
|
+
return candidates.some((s) => s.includes("opus-4-7") ||
|
|
606
|
+
s.includes("opus-4-8") ||
|
|
607
|
+
s.includes("opus-5") ||
|
|
608
|
+
s.includes("sonnet-5") ||
|
|
609
|
+
s.includes("fable-5"));
|
|
610
|
+
}
|
|
458
611
|
function mapThinkingLevelToEffort(model, level) {
|
|
459
612
|
if (level === "xhigh" && supportsNativeXhighEffort(model))
|
|
460
613
|
return "xhigh";
|
|
@@ -570,6 +723,17 @@ function createNonBlankTextBlock(text) {
|
|
|
570
723
|
function createRequiredTextBlock(text) {
|
|
571
724
|
return createNonBlankTextBlock(text) ?? { text: EMPTY_TEXT_PLACEHOLDER };
|
|
572
725
|
}
|
|
726
|
+
function sanitizeBedrockDocument(value) {
|
|
727
|
+
if (Array.isArray(value)) {
|
|
728
|
+
return value.map(sanitizeBedrockDocument);
|
|
729
|
+
}
|
|
730
|
+
if (value !== null && typeof value === "object") {
|
|
731
|
+
return Object.fromEntries(Object.entries(value)
|
|
732
|
+
.filter(([key]) => key.length > 0)
|
|
733
|
+
.map(([key, nestedValue]) => [key, sanitizeBedrockDocument(nestedValue)]));
|
|
734
|
+
}
|
|
735
|
+
return value;
|
|
736
|
+
}
|
|
573
737
|
function convertToolResultContent(content) {
|
|
574
738
|
const result = [];
|
|
575
739
|
for (const c of content) {
|
|
@@ -588,7 +752,7 @@ function convertToolResultContent(content) {
|
|
|
588
752
|
}
|
|
589
753
|
function convertMessages(context, model, cacheRetention, env) {
|
|
590
754
|
const result = [];
|
|
591
|
-
const transformedMessages = transformMessages(context.messages, model, normalizeToolCallId);
|
|
755
|
+
const transformedMessages = transformMessages(withoutInitialSystemMessage(context.messages), model, normalizeToolCallId);
|
|
592
756
|
for (let i = 0; i < transformedMessages.length; i++) {
|
|
593
757
|
const m = transformedMessages[i];
|
|
594
758
|
switch (m.role) {
|
|
@@ -616,10 +780,7 @@ function convertMessages(context, model, cacheRetention, env) {
|
|
|
616
780
|
if (content.length === 0)
|
|
617
781
|
content.push({ text: EMPTY_TEXT_PLACEHOLDER });
|
|
618
782
|
}
|
|
619
|
-
result.push({
|
|
620
|
-
role: ConversationRole.USER,
|
|
621
|
-
content,
|
|
622
|
-
});
|
|
783
|
+
result.push({ role: ConversationRole.USER, content });
|
|
623
784
|
break;
|
|
624
785
|
}
|
|
625
786
|
case "assistant": {
|
|
@@ -641,10 +802,19 @@ function convertMessages(context, model, cacheRetention, env) {
|
|
|
641
802
|
}
|
|
642
803
|
case "toolCall":
|
|
643
804
|
contentBlocks.push({
|
|
644
|
-
toolUse: { toolUseId: c.id, name: c.name, input: c.arguments },
|
|
805
|
+
toolUse: { toolUseId: c.id, name: c.name, input: sanitizeBedrockDocument(c.arguments) },
|
|
645
806
|
});
|
|
646
807
|
break;
|
|
647
808
|
case "thinking": {
|
|
809
|
+
// Encrypted reasoning is opaque: replay the stored payload as the
|
|
810
|
+
// `redactedContent` member instead of lowering it to reasoning text.
|
|
811
|
+
if (c.redacted) {
|
|
812
|
+
const redactedContent = decodeRedactedContent(c.thinkingSignature);
|
|
813
|
+
if (redactedContent?.length) {
|
|
814
|
+
contentBlocks.push({ reasoningContent: { redactedContent } });
|
|
815
|
+
}
|
|
816
|
+
continue;
|
|
817
|
+
}
|
|
648
818
|
// Skip empty thinking blocks
|
|
649
819
|
const thinking = sanitizeSurrogates(c.thinking);
|
|
650
820
|
if (thinking.trim().length === 0)
|
|
@@ -720,10 +890,7 @@ function convertMessages(context, model, cacheRetention, env) {
|
|
|
720
890
|
}
|
|
721
891
|
// Skip the messages we've already processed
|
|
722
892
|
i = j - 1;
|
|
723
|
-
result.push({
|
|
724
|
-
role: ConversationRole.USER,
|
|
725
|
-
content: toolResults,
|
|
726
|
-
});
|
|
893
|
+
result.push({ role: ConversationRole.USER, content: toolResults });
|
|
727
894
|
break;
|
|
728
895
|
}
|
|
729
896
|
default:
|
|
@@ -755,7 +922,7 @@ function convertToolConfig(tools, toolChoice, supportsStrictMode) {
|
|
|
755
922
|
toolSpec: {
|
|
756
923
|
name: tool.name,
|
|
757
924
|
description: tool.description,
|
|
758
|
-
inputSchema: { json: tool
|
|
925
|
+
inputSchema: { json: getJsonSchemaToolParameters(tool, strict) },
|
|
759
926
|
...(strict === true ? { strict: true } : {}),
|
|
760
927
|
},
|
|
761
928
|
};
|
|
@@ -845,11 +1012,21 @@ function buildAdditionalModelRequestFields(model, options) {
|
|
|
845
1012
|
if (isAnthropicClaudeModel(model)) {
|
|
846
1013
|
// GovCloud Bedrock currently rejects the Claude thinking.display field.
|
|
847
1014
|
// Omit it there until the GovCloud Converse schema catches up.
|
|
848
|
-
const
|
|
1015
|
+
const isGovCloud = isGovCloudBedrockTarget(model, options);
|
|
1016
|
+
const display = isGovCloud ? undefined : (options.thinkingDisplay ?? "summarized");
|
|
1017
|
+
// Replayed signed thinking blocks are bound to the system prompt and tools they were
|
|
1018
|
+
// created with. Bedrock 400s on replay after either changes unless stale blocks are
|
|
1019
|
+
// dropped, matching the Anthropic provider. Skipped on GovCloud like display.
|
|
1020
|
+
const useBlockBinding = !isGovCloud && supportsThinkingBlockBinding(model);
|
|
849
1021
|
const result = supportsAdaptiveThinking(model.id, model.name)
|
|
850
1022
|
? {
|
|
851
|
-
thinking: {
|
|
1023
|
+
thinking: {
|
|
1024
|
+
type: "adaptive",
|
|
1025
|
+
...(display !== undefined ? { display } : {}),
|
|
1026
|
+
...(useBlockBinding ? { block_binding: { prefix_mismatch_behavior: "drop_block" } } : {}),
|
|
1027
|
+
},
|
|
852
1028
|
output_config: { effort: mapThinkingLevelToEffort(model, options.reasoning) },
|
|
1029
|
+
...(useBlockBinding ? { anthropic_beta: [THINKING_BINDING_CONTROLS_BETA] } : {}),
|
|
853
1030
|
}
|
|
854
1031
|
: (() => {
|
|
855
1032
|
const defaultBudgets = {
|
|
@@ -897,11 +1074,43 @@ function createImageBlock(mimeType, data) {
|
|
|
897
1074
|
default:
|
|
898
1075
|
throw new Error(`Unknown image type: ${mimeType}`);
|
|
899
1076
|
}
|
|
1077
|
+
return { source: { bytes: base64ToBytes(data) }, format };
|
|
1078
|
+
}
|
|
1079
|
+
function base64ToBytes(data) {
|
|
900
1080
|
const binaryString = atob(data);
|
|
901
1081
|
const bytes = new Uint8Array(binaryString.length);
|
|
902
1082
|
for (let i = 0; i < binaryString.length; i++) {
|
|
903
1083
|
bytes[i] = binaryString.charCodeAt(i);
|
|
904
1084
|
}
|
|
905
|
-
return
|
|
1085
|
+
return bytes;
|
|
1086
|
+
}
|
|
1087
|
+
/**
|
|
1088
|
+
* Decodes a stored redacted payload. The AWS SDK hands the blob over as bytes, but a
|
|
1089
|
+
* persisted session carries it as base64. A hand-edited or externally produced session
|
|
1090
|
+
* can hold a signature that is not base64; drop that block instead of failing the
|
|
1091
|
+
* whole request.
|
|
1092
|
+
*/
|
|
1093
|
+
function decodeRedactedContent(signature) {
|
|
1094
|
+
if (!signature)
|
|
1095
|
+
return undefined;
|
|
1096
|
+
try {
|
|
1097
|
+
return base64ToBytes(signature);
|
|
1098
|
+
}
|
|
1099
|
+
catch {
|
|
1100
|
+
return undefined;
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
function bytesToBase64(chunks) {
|
|
1104
|
+
// Encrypted reasoning runs to tens of KB, so build the binary string in slices
|
|
1105
|
+
// rather than one concatenation per byte. The window stays under the engine's
|
|
1106
|
+
// argument-count limit for spread calls.
|
|
1107
|
+
const WINDOW = 0x8000;
|
|
1108
|
+
let binary = "";
|
|
1109
|
+
for (const chunk of chunks) {
|
|
1110
|
+
for (let i = 0; i < chunk.length; i += WINDOW) {
|
|
1111
|
+
binary += String.fromCharCode(...chunk.subarray(i, i + WINDOW));
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
return btoa(binary);
|
|
906
1115
|
}
|
|
907
1116
|
//# sourceMappingURL=bedrock-converse-stream.js.map
|