@draht/ai 2026.7.30 → 2026.10.4-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/dist/api/anthropic-messages.d.ts.map +1 -1
- package/dist/api/anthropic-messages.js +404 -142
- package/dist/api/anthropic-messages.js.map +1 -1
- package/dist/api/azure-openai-responses.d.ts +2 -0
- package/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/dist/api/azure-openai-responses.js +34 -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 +210 -24
- package/dist/api/bedrock-converse-stream.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 +43 -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/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-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/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/openai-codex-responses.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.js +107 -55
- package/dist/api/openai-codex-responses.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 +241 -129
- package/dist/api/openai-completions.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 +109 -58
- 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 +62 -24
- package/dist/api/openai-responses.js.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 +13 -4
- package/dist/api/pi-messages.js.map +1 -1
- package/dist/api/simple-options.d.ts +9 -3
- package/dist/api/simple-options.d.ts.map +1 -1
- package/dist/api/simple-options.js +22 -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/credential-store.d.ts +6 -6
- package/dist/auth/credential-store.d.ts.map +1 -1
- package/dist/auth/credential-store.js +24 -15
- 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 +28 -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/google-antigravity.d.ts +3 -3
- package/dist/auth/oauth/google-antigravity.d.ts.map +1 -1
- package/dist/auth/oauth/google-antigravity.js +17 -9
- package/dist/auth/oauth/google-antigravity.js.map +1 -1
- package/dist/auth/oauth/google-gemini-cli.d.ts +3 -3
- package/dist/auth/oauth/google-gemini-cli.d.ts.map +1 -1
- package/dist/auth/oauth/google-gemini-cli.js +18 -10
- package/dist/auth/oauth/google-gemini-cli.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 +266 -0
- package/dist/auth/oauth/openai-chatgpt.js.map +1 -0
- 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 +33 -130
- 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 +26 -145
- package/dist/auth/oauth/openrouter.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 +28 -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 +13 -12
- package/dist/auth/oauth/xai.js.map +1 -1
- package/dist/auth/resolve.d.ts +3 -8
- package/dist/auth/resolve.d.ts.map +1 -1
- package/dist/auth/resolve.js +27 -31
- 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/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.js +4 -1
- package/dist/cli.js.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 +9 -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/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 +7 -6
- 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 +135 -37
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +135 -37
- package/dist/models.generated.js.map +1 -1
- package/dist/models.js +391 -99
- package/dist/models.js.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 +31 -21
- 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.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-openai-responses.models.d.ts +4 -2
- package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/dist/providers/azure-openai-responses.models.js +4 -2
- package/dist/providers/azure-openai-responses.models.js.map +1 -1
- 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.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-openai-responses.json +1 -1
- 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.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.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.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.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.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.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.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.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.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.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.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.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.d.ts.map +1 -1
- package/dist/providers/openai-codex.js +6 -2
- 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 +4 -3
- 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.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.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.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.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.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.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.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.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.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.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/types.d.ts +411 -127
- package/dist/types.d.ts.map +1 -1
- package/dist/types.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/draht-user-agent.d.ts +2 -0
- package/dist/utils/draht-user-agent.d.ts.map +1 -0
- package/dist/utils/draht-user-agent.js +12 -0
- package/dist/utils/draht-user-agent.js.map +1 -0
- 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 +30 -8
- package/dist/utils/event-stream.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/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/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/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 +19 -2
- 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 +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 +84 -0
- package/dist/utils/transcript.d.ts.map +1 -0
- package/dist/utils/transcript.js +204 -0
- package/dist/utils/transcript.js.map +1 -0
- package/dist/utils/uuid.d.ts +2 -2
- package/dist/utils/uuid.d.ts.map +1 -1
- package/dist/utils/uuid.js +35 -40
- package/dist/utils/uuid.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +40 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +19 -13
- 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 -140
- package/dist/images-models.js.map +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
- /package/dist/{auth/oauth → utils}/oauth-page.js +0 -0
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TelemetryContext } from "@draht/telemetry";
|
|
1
2
|
import type { AnthropicOptions } from "./api/anthropic-messages.ts";
|
|
2
3
|
import type { AzureOpenAIResponsesOptions } from "./api/azure-openai-responses.ts";
|
|
3
4
|
import type { BedrockOptions } from "./api/bedrock-converse-stream.ts";
|
|
@@ -13,19 +14,22 @@ import type { AssistantMessageEventStream } from "./utils/event-stream.ts";
|
|
|
13
14
|
export type { AssistantMessageEventStream } from "./utils/event-stream.ts";
|
|
14
15
|
export type KnownApi = "openai-completions" | "mistral-conversations" | "openai-responses" | "azure-openai-responses" | "openai-codex-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-vertex" | "pi-messages";
|
|
15
16
|
export type Api = KnownApi | (string & {});
|
|
16
|
-
export type
|
|
17
|
-
export type
|
|
18
|
-
export type
|
|
17
|
+
export type KnownImageApi = "openrouter-images";
|
|
18
|
+
export type ImageApi = KnownImageApi | (string & {});
|
|
19
|
+
export type KnownClassifierApi = "typesafe-system-one" | "cloudflare-workers-ai-system-one" | "llama-cpp-classify";
|
|
20
|
+
export type ClassifierApi = KnownClassifierApi | (string & {});
|
|
21
|
+
export type KnownProvider = "amazon-bedrock" | "ant-ling" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "radius" | "typesafe" | "nvidia" | "deepseek" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "baseten" | "opencode" | "opencode-go" | "kimi-coding" | "meta" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "qwen-token-plan" | "qwen-token-plan-cn" | "qwen-token-plan-individual" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp";
|
|
19
22
|
export type ProviderId = KnownProvider | string;
|
|
20
|
-
export type
|
|
21
|
-
export type ImagesProviderId = KnownImagesProvider | string;
|
|
23
|
+
export type ToolChoice = "auto" | "none";
|
|
22
24
|
export type ThinkingLevel = "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
23
25
|
export type ModelThinkingLevel = "off" | ThinkingLevel;
|
|
24
26
|
export type ThinkingLevelMap = Partial<Record<ModelThinkingLevel, string | null>>;
|
|
25
27
|
export type ChatTemplateKwargValue = string | number | boolean | null | {
|
|
26
|
-
$var: "thinking.enabled" | "thinking.effort";
|
|
28
|
+
$var: "thinking.enabled" | "thinking.effort" | "thinking.budget";
|
|
27
29
|
omitWhenOff?: boolean;
|
|
28
30
|
};
|
|
31
|
+
/** Top-level request field used to cap reasoning tokens on OpenAI-compatible servers. */
|
|
32
|
+
export type ThinkingTokenBudgetField = "thinking_token_budget" | "thinking_budget" | "thinking_budget_tokens";
|
|
29
33
|
/** Token budgets for each thinking level (token-based providers only) */
|
|
30
34
|
export interface ThinkingBudgets {
|
|
31
35
|
minimal?: number;
|
|
@@ -34,6 +38,11 @@ export interface ThinkingBudgets {
|
|
|
34
38
|
high?: number;
|
|
35
39
|
}
|
|
36
40
|
export type CacheRetention = "none" | "short" | "long";
|
|
41
|
+
/**
|
|
42
|
+
* Best-effort prompt cache lifetime in seconds for each retention tier a request can ask for.
|
|
43
|
+
* A missing tier means the lifetime is unknown; draht does not warm such caches.
|
|
44
|
+
*/
|
|
45
|
+
export type ModelPromptCache = Partial<Record<Exclude<CacheRetention, "none">, number>>;
|
|
37
46
|
export type Transport = "sse" | "websocket" | "websocket-cached" | "auto";
|
|
38
47
|
/** Provider-scoped environment overrides. Values take precedence over process.env. */
|
|
39
48
|
export type ProviderEnv = Record<string, string>;
|
|
@@ -44,10 +53,11 @@ export interface ProviderResponse {
|
|
|
44
53
|
status: number;
|
|
45
54
|
headers: Record<string, string>;
|
|
46
55
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
maxTokens?: number;
|
|
56
|
+
/** Authentication, HTTP transport, and lifecycle callbacks shared by provider requests. */
|
|
57
|
+
export interface ProviderRequestOptions<TModel = Model<Api>> {
|
|
50
58
|
signal?: AbortSignal;
|
|
59
|
+
/** Explicit parent context for telemetry produced by this logical request. */
|
|
60
|
+
telemetryContext?: TelemetryContext;
|
|
51
61
|
apiKey?: string;
|
|
52
62
|
/**
|
|
53
63
|
* Optional fetch implementation for provider HTTP requests.
|
|
@@ -56,31 +66,20 @@ export interface StreamOptions {
|
|
|
56
66
|
*/
|
|
57
67
|
fetch?: FetchFunction;
|
|
58
68
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
|
|
62
|
-
transport?: Transport;
|
|
63
|
-
/**
|
|
64
|
-
* Prompt cache retention preference. Providers map this to their supported values.
|
|
65
|
-
* Default: "short".
|
|
66
|
-
*/
|
|
67
|
-
cacheRetention?: CacheRetention;
|
|
68
|
-
/**
|
|
69
|
-
* Optional session identifier for providers that support session-based caching.
|
|
70
|
-
* Providers can use this to enable prompt caching, request routing, or other
|
|
71
|
-
* session-aware features. Ignored by providers that don't support it.
|
|
69
|
+
* Provider-scoped environment values. These take precedence over process.env for
|
|
70
|
+
* provider configuration such as regional settings, endpoint placeholders, and
|
|
71
|
+
* proxy variables.
|
|
72
72
|
*/
|
|
73
|
-
|
|
73
|
+
env?: ProviderEnv;
|
|
74
74
|
/**
|
|
75
75
|
* Optional callback for inspecting or replacing provider payloads before sending.
|
|
76
76
|
* Return undefined to keep the payload unchanged.
|
|
77
77
|
*/
|
|
78
|
-
onPayload?: (payload: unknown, model:
|
|
78
|
+
onPayload?: (payload: unknown, model: TModel) => unknown | undefined | Promise<unknown | undefined>;
|
|
79
79
|
/**
|
|
80
|
-
* Optional callback invoked after an HTTP response is received
|
|
81
|
-
* its body stream is consumed.
|
|
80
|
+
* Optional callback invoked after an HTTP response is received.
|
|
82
81
|
*/
|
|
83
|
-
onResponse?: (response: ProviderResponse, model:
|
|
82
|
+
onResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>;
|
|
84
83
|
/**
|
|
85
84
|
* Optional custom HTTP headers to include in API requests.
|
|
86
85
|
* Merged with provider defaults; caller values override default headers.
|
|
@@ -95,12 +94,6 @@ export interface StreamOptions {
|
|
|
95
94
|
* For example, OpenAI and Anthropic SDK clients default to 10 minutes.
|
|
96
95
|
*/
|
|
97
96
|
timeoutMs?: number;
|
|
98
|
-
/**
|
|
99
|
-
* WebSocket connect timeout in milliseconds for providers that support
|
|
100
|
-
* WebSocket transports. This covers the connection/open handshake only;
|
|
101
|
-
* stream idleness after connection uses timeoutMs.
|
|
102
|
-
*/
|
|
103
|
-
websocketConnectTimeoutMs?: number;
|
|
104
97
|
/**
|
|
105
98
|
* Maximum retry attempts for providers/SDKs that support client-side retries.
|
|
106
99
|
* For example, OpenAI and Anthropic SDK clients default to 2.
|
|
@@ -114,20 +107,68 @@ export interface StreamOptions {
|
|
|
114
107
|
* Default: 60000 (60 seconds). Set to 0 to disable the cap.
|
|
115
108
|
*/
|
|
116
109
|
maxRetryDelayMs?: number;
|
|
110
|
+
}
|
|
111
|
+
export interface StreamOptions extends ProviderRequestOptions<Model<Api>> {
|
|
112
|
+
/**
|
|
113
|
+
* Optional callback invoked after an HTTP response is received and before
|
|
114
|
+
* its body stream is consumed.
|
|
115
|
+
*/
|
|
116
|
+
onResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Optional observer for each parsed provider stream event before draht normalization.
|
|
119
|
+
* Event data is adapter-owned and must be treated as read-only.
|
|
120
|
+
* Adapter support is explicit; unsupported adapters do not invoke it.
|
|
121
|
+
*/
|
|
122
|
+
onProviderStreamEvent?: (data: unknown, model: Model<Api>) => void | Promise<void>;
|
|
123
|
+
temperature?: number;
|
|
124
|
+
/**
|
|
125
|
+
* Arbitrary sampling parameters merged into the request body as-is, after the named request
|
|
126
|
+
* fields, so keys here override them. Lets custom OpenAI-compatible servers (llama.cpp, vLLM,
|
|
127
|
+
* SGLang, ...) receive parameters pi does not model, e.g. `top_p`, `top_k`, `min_p`,
|
|
128
|
+
* `repetition_penalty`. Merged over `Model.samplingParams` per key. Only applied by
|
|
129
|
+
* OpenAI-compatible adapters (completions, responses, Azure responses); other APIs ignore it.
|
|
130
|
+
*/
|
|
131
|
+
samplingParams?: Record<string, unknown>;
|
|
132
|
+
maxTokens?: number;
|
|
133
|
+
/**
|
|
134
|
+
* Preferred transport for providers that support multiple transports.
|
|
135
|
+
* Providers that do not support this option ignore it.
|
|
136
|
+
*/
|
|
137
|
+
transport?: Transport;
|
|
138
|
+
/**
|
|
139
|
+
* Prompt cache retention preference. Providers map this to their supported values.
|
|
140
|
+
* Default: "short".
|
|
141
|
+
*/
|
|
142
|
+
cacheRetention?: CacheRetention;
|
|
143
|
+
/**
|
|
144
|
+
* Optional session identifier for providers that support session-based caching.
|
|
145
|
+
* Providers can use this to enable prompt caching, request routing, or other
|
|
146
|
+
* session-aware features. Ignored by providers that don't support it.
|
|
147
|
+
*/
|
|
148
|
+
sessionId?: string;
|
|
149
|
+
/**
|
|
150
|
+
* WebSocket connect timeout in milliseconds for providers that support
|
|
151
|
+
* WebSocket transports. This covers the connection/open handshake only;
|
|
152
|
+
* stream idleness after connection uses timeoutMs.
|
|
153
|
+
*/
|
|
154
|
+
websocketConnectTimeoutMs?: number;
|
|
117
155
|
/**
|
|
118
156
|
* Optional metadata to include in API requests.
|
|
119
157
|
* Providers extract the fields they understand and ignore the rest.
|
|
120
158
|
* For example, Anthropic uses `user_id` for abuse tracking and rate limiting.
|
|
121
159
|
*/
|
|
122
160
|
metadata?: Record<string, unknown>;
|
|
161
|
+
}
|
|
162
|
+
export type ProviderStreamOptions = StreamOptions & Record<string, unknown>;
|
|
163
|
+
export interface DeferredFetchOptions extends ProviderRequestOptions<Model<Api>> {
|
|
123
164
|
/**
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* proxy variables.
|
|
165
|
+
* Maximum provider long-poll duration in milliseconds.
|
|
166
|
+
* Defaults to 0, which performs one status check.
|
|
127
167
|
*/
|
|
128
|
-
|
|
168
|
+
wait?: number;
|
|
129
169
|
}
|
|
130
|
-
|
|
170
|
+
/** Request options for best-effort deferred-response cancellation. */
|
|
171
|
+
export type DeferredCancelOptions = ProviderRequestOptions<Model<Api>>;
|
|
131
172
|
/**
|
|
132
173
|
* Maps known APIs to their full provider-specific stream option types.
|
|
133
174
|
* Type-only imports from API implementation modules are erased at emit, so
|
|
@@ -152,66 +193,40 @@ export interface ApiOptionsMap {
|
|
|
152
193
|
export type ApiStreamOptions<TApi extends Api> = TApi extends keyof ApiOptionsMap ? ApiOptionsMap[TApi] : StreamOptions & Record<string, unknown>;
|
|
153
194
|
/**
|
|
154
195
|
* The uniform stream contract of an API implementation module: every module
|
|
155
|
-
* under `src/api/` exports
|
|
156
|
-
*
|
|
196
|
+
* under `src/api/` exports `stream` and `streamSimple`; capable modules may also
|
|
197
|
+
* export deferred-response methods. Lazy wrappers (`lazyApi()`) and provider
|
|
157
198
|
* factories pass these around as values. This is the untyped dispatch shape;
|
|
158
199
|
* per-API option typing lives on the implementation modules themselves and on
|
|
159
200
|
* `Provider.stream()` via `ApiStreamOptions`.
|
|
160
201
|
*/
|
|
161
202
|
export interface ProviderStreams {
|
|
162
|
-
stream(model: Model<Api>, context:
|
|
163
|
-
streamSimple(model: Model<Api>, context:
|
|
203
|
+
stream(model: Model<Api>, context: TranscriptContext, options?: StreamOptions): AssistantMessageEventStream;
|
|
204
|
+
streamSimple(model: Model<Api>, context: TranscriptContext, options?: SimpleStreamOptions): AssistantMessageEventStream;
|
|
205
|
+
fetchDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredFetchOptions): AssistantMessageEventStream;
|
|
206
|
+
cancelDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;
|
|
164
207
|
}
|
|
165
208
|
/**
|
|
166
209
|
* The uniform contract of an image-generation API implementation module:
|
|
167
210
|
* every image API module under `src/api/` exports exactly `generateImages`,
|
|
168
|
-
* so the module itself satisfies this interface. Lazy wrappers and
|
|
169
|
-
*
|
|
211
|
+
* so the module itself satisfies this interface. Lazy wrappers and
|
|
212
|
+
* `createProvider({ images })` pass these around as values.
|
|
170
213
|
*/
|
|
171
214
|
export interface ProviderImages {
|
|
172
|
-
generateImages(model:
|
|
215
|
+
generateImages(model: ImageModel<ImageApi>, context: ImagesContext, options?: ImagesOptions): Promise<AssistantImages>;
|
|
173
216
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Provider-scoped environment values. These take precedence over process.env for
|
|
181
|
-
* provider configuration such as endpoint placeholders and proxy variables.
|
|
182
|
-
*/
|
|
183
|
-
env?: ProviderEnv;
|
|
184
|
-
/**
|
|
185
|
-
* Optional callback for inspecting or replacing provider payloads before sending.
|
|
186
|
-
* Return undefined to keep the payload unchanged.
|
|
187
|
-
*/
|
|
188
|
-
onPayload?: (payload: unknown, model: ImagesModel<ImagesApi>) => unknown | undefined | Promise<unknown | undefined>;
|
|
189
|
-
/**
|
|
190
|
-
* Optional callback invoked after an HTTP response is received.
|
|
191
|
-
*/
|
|
192
|
-
onResponse?: (response: ProviderResponse, model: ImagesModel<ImagesApi>) => void | Promise<void>;
|
|
193
|
-
/**
|
|
194
|
-
* Optional custom HTTP headers to include in API requests.
|
|
195
|
-
* Merged with provider defaults; can override default headers.
|
|
196
|
-
* A null value suppresses a provider/API default header with the same name.
|
|
197
|
-
*/
|
|
198
|
-
headers?: ProviderHeaders;
|
|
199
|
-
/**
|
|
200
|
-
* HTTP request timeout in milliseconds for providers/SDKs that support it.
|
|
201
|
-
*/
|
|
202
|
-
timeoutMs?: number;
|
|
203
|
-
/**
|
|
204
|
-
* Maximum retry attempts for providers/SDKs that support client-side retries.
|
|
205
|
-
*/
|
|
206
|
-
maxRetries?: number;
|
|
217
|
+
/** The uniform contract implemented by classifier API modules. */
|
|
218
|
+
export interface ProviderClassifier {
|
|
219
|
+
classify(model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: ClassifierOptions): Promise<ClassifierResult>;
|
|
220
|
+
}
|
|
221
|
+
export interface ClassifierOptions extends ProviderRequestOptions<ClassifierModel<ClassifierApi>> {
|
|
207
222
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
* to handle it with user visibility.
|
|
212
|
-
* Default: 60000 (60 seconds). Set to 0 to disable the cap.
|
|
223
|
+
* Divides the answer logits by this value before they are normalized into probabilities.
|
|
224
|
+
* Values above 1 soften the distribution; values below 1 sharpen it. Must be positive.
|
|
225
|
+
* APIs that cannot apply it ignore it.
|
|
213
226
|
*/
|
|
214
|
-
|
|
227
|
+
temperature?: number;
|
|
228
|
+
}
|
|
229
|
+
export interface ImagesOptions extends ProviderRequestOptions<ImageModel<ImageApi>> {
|
|
215
230
|
/**
|
|
216
231
|
* Optional metadata to include in API requests.
|
|
217
232
|
* Providers extract the fields they understand and ignore the rest.
|
|
@@ -219,13 +234,25 @@ export interface ImagesOptions {
|
|
|
219
234
|
metadata?: Record<string, unknown>;
|
|
220
235
|
}
|
|
221
236
|
export type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;
|
|
237
|
+
export interface AnthropicAllowedFallbackModel {
|
|
238
|
+
provider: ProviderId;
|
|
239
|
+
model: string;
|
|
240
|
+
cost: ModelCost;
|
|
241
|
+
}
|
|
222
242
|
export interface SimpleStreamOptions extends StreamOptions {
|
|
243
|
+
/** Provider-neutral tool selection for simple requests. When omitted, adapters use provider-specific behavior. */
|
|
244
|
+
toolChoice?: ToolChoice;
|
|
223
245
|
reasoning?: ThinkingLevel;
|
|
246
|
+
/** Ask a capable provider to return a durable handle and continue the request asynchronously. */
|
|
247
|
+
deferred?: boolean | {
|
|
248
|
+
window?: "15m" | "1h" | "24h";
|
|
249
|
+
};
|
|
224
250
|
/** Custom token budgets for thinking levels (token-based providers only) */
|
|
225
251
|
thinkingBudgets?: ThinkingBudgets;
|
|
226
252
|
}
|
|
227
|
-
export type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (model: Model<TApi>, context:
|
|
228
|
-
export type ImagesFunction<
|
|
253
|
+
export type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (model: Model<TApi>, context: TranscriptContext, options?: TOptions) => AssistantMessageEventStream;
|
|
254
|
+
export type ImagesFunction<TOptions extends ImagesOptions = ImagesOptions> = (model: ImageModel<ImageApi>, context: ImagesContext, options?: TOptions) => Promise<AssistantImages>;
|
|
255
|
+
export type ClassifierFunction<TOptions extends ClassifierOptions = ClassifierOptions> = (model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: TOptions) => Promise<ClassifierResult>;
|
|
229
256
|
export interface TextSignatureV1 {
|
|
230
257
|
v: 1;
|
|
231
258
|
id: string;
|
|
@@ -254,8 +281,10 @@ export interface ToolCall {
|
|
|
254
281
|
type: "toolCall";
|
|
255
282
|
id: string;
|
|
256
283
|
name: string;
|
|
257
|
-
arguments:
|
|
284
|
+
arguments: JsonObject;
|
|
258
285
|
thoughtSignature?: string;
|
|
286
|
+
/** OpenAI Responses namespace for calls to dynamically loaded or namespaced tools. */
|
|
287
|
+
namespace?: string;
|
|
259
288
|
}
|
|
260
289
|
export interface Usage {
|
|
261
290
|
input: number;
|
|
@@ -279,7 +308,62 @@ export interface Usage {
|
|
|
279
308
|
total: number;
|
|
280
309
|
};
|
|
281
310
|
}
|
|
282
|
-
export type StopReason = "pending" | "stop" | "length" | "toolUse" | "error" | "aborted";
|
|
311
|
+
export type StopReason = "pending" | "stop" | "length" | "toolUse" | "error" | "aborted" | "deferred";
|
|
312
|
+
export type JsonValue = null | boolean | number | string | readonly JsonValue[] | JsonObject;
|
|
313
|
+
export type JsonObject = {
|
|
314
|
+
[key: string]: JsonValue;
|
|
315
|
+
};
|
|
316
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
317
|
+
type IsExactlyJsonValue<T> = [T] extends [JsonValue] ? ([JsonValue] extends [T] ? true : false) : false;
|
|
318
|
+
type IsJsonProperty<T> = IsAny<T> extends true ? false : unknown extends T ? false : [Exclude<T, undefined>] extends [never] ? true : IsJsonCompatible<Exclude<T, undefined>>;
|
|
319
|
+
type InvalidJsonKeys<T extends object> = {
|
|
320
|
+
[TKey in keyof T]-?: TKey extends string | number ? (IsJsonProperty<T[TKey]> extends true ? never : TKey) : TKey;
|
|
321
|
+
}[keyof T];
|
|
322
|
+
type IsJsonCompatible<T> = IsAny<T> extends true ? false : unknown extends T ? false : IsExactlyJsonValue<T> extends true ? true : T extends null | boolean | number | string ? true : T extends undefined ? false : T extends readonly (infer TItem)[] ? IsJsonCompatible<TItem> : T extends (...args: never[]) => unknown ? false : T extends object ? [InvalidJsonKeys<T>] extends [never] ? true : false : false;
|
|
323
|
+
/** The JSON representation of a typed in-memory value. Optional object properties remain optional. */
|
|
324
|
+
export type JsonRepresentation<T> = IsAny<T> extends true ? JsonValue : unknown extends T ? JsonValue : [T] extends [JsonValue] ? T : T extends readonly unknown[] ? {
|
|
325
|
+
[TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>>;
|
|
326
|
+
} : T extends object ? {
|
|
327
|
+
[TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>>;
|
|
328
|
+
} : never;
|
|
329
|
+
export interface DeferredHandle {
|
|
330
|
+
provider: string;
|
|
331
|
+
modelId: string;
|
|
332
|
+
api: string;
|
|
333
|
+
/** Provider token, such as a response id or batch id plus row id. */
|
|
334
|
+
id: string;
|
|
335
|
+
expiresAt?: number;
|
|
336
|
+
pollAfterMs?: number;
|
|
337
|
+
/** Provider conversion data required to reconstruct the final assistant message. */
|
|
338
|
+
data?: JsonValue;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* System instructions and tool declarations at one point in the transcript.
|
|
342
|
+
*
|
|
343
|
+
* The leading system message is the system prompt. Later system messages change it:
|
|
344
|
+
* `content` adds instructions from that point on, `sections` replace or remove named
|
|
345
|
+
* prompt sections, and `toolsAdded`/`toolsRemoved` change the tool set. Replaying
|
|
346
|
+
* every system message in order yields the current prompt and tools. Providers that
|
|
347
|
+
* accept system messages mid-conversation send each one in place; other providers
|
|
348
|
+
* rebuild the leading system message from the replayed state.
|
|
349
|
+
*/
|
|
350
|
+
export interface SystemMessage {
|
|
351
|
+
role: "system";
|
|
352
|
+
/** Instruction text. On the leading message this is the base prompt; later, additional instructions. */
|
|
353
|
+
content: string | TextContent[];
|
|
354
|
+
/**
|
|
355
|
+
* Named, ordered prompt sections rendered verbatim after `content`. The leading message
|
|
356
|
+
* declares them; later messages replace sections by name, and `null` removes one. Keep
|
|
357
|
+
* each section self-delimiting (a tag, a heading) so the model can relate an update to
|
|
358
|
+
* the original. Avoid integer-like names; JSON objects reorder those.
|
|
359
|
+
*/
|
|
360
|
+
sections?: Record<string, string | null>;
|
|
361
|
+
/** Complete definitions of tools that become available at this point. */
|
|
362
|
+
toolsAdded?: Tool[];
|
|
363
|
+
/** Tools that stop being available at this point. */
|
|
364
|
+
toolsRemoved?: ToolReference[];
|
|
365
|
+
timestamp: number;
|
|
366
|
+
}
|
|
283
367
|
export interface UserMessage {
|
|
284
368
|
role: "user";
|
|
285
369
|
content: string | (TextContent | ImageContent)[];
|
|
@@ -293,31 +377,57 @@ export interface AssistantMessage {
|
|
|
293
377
|
model: string;
|
|
294
378
|
responseModel?: string;
|
|
295
379
|
responseId?: string;
|
|
380
|
+
/** Exact provider-native effort level used for this response. Absent for legacy or unmanaged responses. */
|
|
381
|
+
providerThinkingLevel?: string;
|
|
382
|
+
/** draht thinking level the agent loop requested for this response. Absent outside the agent loop and for legacy responses. */
|
|
383
|
+
thinkingLevel?: ModelThinkingLevel;
|
|
296
384
|
diagnostics?: AssistantMessageDiagnostic[];
|
|
297
385
|
usage: Usage;
|
|
298
386
|
stopReason: StopReason;
|
|
387
|
+
deferred?: DeferredHandle;
|
|
299
388
|
errorMessage?: string;
|
|
300
389
|
rawStopReason?: string;
|
|
390
|
+
/**
|
|
391
|
+
* Provider indication of whether the model explicitly ended its turn.
|
|
392
|
+
* Preserved for debugging and does not currently affect agent control flow.
|
|
393
|
+
*/
|
|
394
|
+
endTurn?: boolean;
|
|
301
395
|
timestamp: number;
|
|
302
396
|
}
|
|
303
|
-
|
|
397
|
+
/** A tool call that another tool made while it ran, for example from a codemode script. */
|
|
398
|
+
export interface NestedToolCallRecord {
|
|
399
|
+
id: string;
|
|
400
|
+
name: string;
|
|
401
|
+
/** Omitted when over the size limits; `argumentsBytes` then gives their size. */
|
|
402
|
+
arguments?: JsonObject;
|
|
403
|
+
/** UTF-8 size of the arguments as JSON, set when `arguments` is omitted. */
|
|
404
|
+
argumentsBytes?: number;
|
|
405
|
+
/** `unfinished`: the call was still running when the calling tool finished. */
|
|
406
|
+
status: "ok" | "error" | "unfinished";
|
|
407
|
+
durationMs?: number;
|
|
408
|
+
/** Error text, truncated. */
|
|
409
|
+
error?: string;
|
|
410
|
+
}
|
|
411
|
+
/** Bounded record of the nested calls a tool made. Results are not recorded. */
|
|
412
|
+
export interface NestedToolCalls {
|
|
413
|
+
calls: NestedToolCallRecord[];
|
|
414
|
+
/** False when calls were dropped, arguments omitted, or calls had not finished. */
|
|
415
|
+
complete: boolean;
|
|
416
|
+
}
|
|
417
|
+
export type ToolResultMessage<TDetails = JsonValue> = IsJsonCompatible<TDetails> extends true ? {
|
|
304
418
|
role: "toolResult";
|
|
305
419
|
toolCallId: string;
|
|
306
420
|
toolName: string;
|
|
307
421
|
content: (TextContent | ImageContent)[];
|
|
308
|
-
details?: TDetails
|
|
422
|
+
details?: JsonRepresentation<TDetails>;
|
|
309
423
|
/** Usage from the tool execution itself, if available. Not part of main LLM context accounting. */
|
|
310
424
|
usage?: Usage;
|
|
311
|
-
/**
|
|
312
|
-
|
|
313
|
-
* Providers with native deferred tool loading use this as the load point;
|
|
314
|
-
* other providers ignore it and use `Context.tools` normally.
|
|
315
|
-
*/
|
|
316
|
-
addedToolNames?: string[];
|
|
425
|
+
/** Calls this tool made to other tools. Kept for the session record; not sent to the model. */
|
|
426
|
+
nestedCalls?: NestedToolCalls;
|
|
317
427
|
isError: boolean;
|
|
318
428
|
timestamp: number;
|
|
319
|
-
}
|
|
320
|
-
export type Message = UserMessage | AssistantMessage | ToolResultMessage;
|
|
429
|
+
} : never;
|
|
430
|
+
export type Message = SystemMessage | UserMessage | AssistantMessage | ToolResultMessage;
|
|
321
431
|
export type ImagesInputContent = TextContent | ImageContent;
|
|
322
432
|
export type ImagesOutputContent = TextContent | ImageContent;
|
|
323
433
|
export interface ImagesContext {
|
|
@@ -325,8 +435,8 @@ export interface ImagesContext {
|
|
|
325
435
|
}
|
|
326
436
|
export type ImagesStopReason = "stop" | "error" | "aborted";
|
|
327
437
|
export interface AssistantImages {
|
|
328
|
-
api:
|
|
329
|
-
provider:
|
|
438
|
+
api: ImageApi;
|
|
439
|
+
provider: ProviderId;
|
|
330
440
|
model: string;
|
|
331
441
|
output: ImagesOutputContent[];
|
|
332
442
|
responseId?: string;
|
|
@@ -335,6 +445,57 @@ export interface AssistantImages {
|
|
|
335
445
|
errorMessage?: string;
|
|
336
446
|
timestamp: number;
|
|
337
447
|
}
|
|
448
|
+
export interface ClassifierChoiceQuestion {
|
|
449
|
+
type: "choice";
|
|
450
|
+
instructions: string;
|
|
451
|
+
criteria: Record<string, string>;
|
|
452
|
+
}
|
|
453
|
+
export interface ClassifierScoreQuestion {
|
|
454
|
+
type: "score";
|
|
455
|
+
instructions: string;
|
|
456
|
+
criteria: string[];
|
|
457
|
+
}
|
|
458
|
+
export interface ClassifierBoolQuestion {
|
|
459
|
+
type: "bool";
|
|
460
|
+
instructions: string;
|
|
461
|
+
criteria: {
|
|
462
|
+
true: string;
|
|
463
|
+
false: string;
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
export type ClassifierQuestion = ClassifierChoiceQuestion | ClassifierScoreQuestion | ClassifierBoolQuestion;
|
|
467
|
+
export interface ClassifierContext {
|
|
468
|
+
state: JsonObject;
|
|
469
|
+
questions: Record<string, ClassifierQuestion>;
|
|
470
|
+
}
|
|
471
|
+
export interface ClassifierChoiceAnswer {
|
|
472
|
+
type: "choice";
|
|
473
|
+
choice: string;
|
|
474
|
+
probabilities: Record<string, number>;
|
|
475
|
+
confidence: number;
|
|
476
|
+
}
|
|
477
|
+
export interface ClassifierScoreAnswer {
|
|
478
|
+
type: "score";
|
|
479
|
+
score: number;
|
|
480
|
+
confidence: number;
|
|
481
|
+
}
|
|
482
|
+
export interface ClassifierBoolAnswer {
|
|
483
|
+
type: "bool";
|
|
484
|
+
probability: number;
|
|
485
|
+
}
|
|
486
|
+
export type ClassifierAnswer = ClassifierChoiceAnswer | ClassifierScoreAnswer | ClassifierBoolAnswer;
|
|
487
|
+
export type ClassifierStopReason = "stop" | "error" | "aborted";
|
|
488
|
+
export interface ClassifierResult {
|
|
489
|
+
api: ClassifierApi;
|
|
490
|
+
provider: ProviderId;
|
|
491
|
+
model: string;
|
|
492
|
+
answers: Record<string, ClassifierAnswer>;
|
|
493
|
+
/** Token usage and its cost at the model's catalog price, when the service reports token counts. */
|
|
494
|
+
usage?: Usage;
|
|
495
|
+
stopReason: ClassifierStopReason;
|
|
496
|
+
errorMessage?: string;
|
|
497
|
+
timestamp: number;
|
|
498
|
+
}
|
|
338
499
|
import type { TSchema } from "typebox";
|
|
339
500
|
/** OpenAI grammar variants for constrained sampling. */
|
|
340
501
|
export type GrammarFormat = "openai_lark" | "openai_regex";
|
|
@@ -359,18 +520,46 @@ export interface Tool<TParameters extends TSchema = TSchema> {
|
|
|
359
520
|
parameters: TParameters;
|
|
360
521
|
constrainedSampling?: false | ConstrainedSamplingConfig;
|
|
361
522
|
}
|
|
523
|
+
export interface ToolReference {
|
|
524
|
+
name: string;
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Request input accepted by the public stream entry points (`Models.stream()`,
|
|
528
|
+
* `streamSimple()`, ...). `systemPrompt` and `tools` are shorthand for a leading
|
|
529
|
+
* system message; `normalizeContext()` folds them into one before the request
|
|
530
|
+
* reaches a provider.
|
|
531
|
+
*/
|
|
362
532
|
export interface Context {
|
|
363
533
|
systemPrompt?: string;
|
|
364
534
|
messages: Message[];
|
|
365
535
|
tools?: Tool[];
|
|
366
536
|
}
|
|
537
|
+
declare const transcriptContextBrand: unique symbol;
|
|
538
|
+
/**
|
|
539
|
+
* Normalized request context passed to providers and API implementations. The
|
|
540
|
+
* prompt and tool declarations are carried by the transcript's system messages.
|
|
541
|
+
* Only `normalizeContext()` produces this type, so a raw `Context` cannot reach
|
|
542
|
+
* provider code by accident.
|
|
543
|
+
*/
|
|
544
|
+
export type TranscriptContext = {
|
|
545
|
+
messages: Message[];
|
|
546
|
+
readonly [transcriptContextBrand]: true;
|
|
547
|
+
};
|
|
367
548
|
/**
|
|
368
549
|
* Event protocol for AssistantMessageEventStream.
|
|
369
550
|
*
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
*
|
|
551
|
+
* Successful streams emit `start` before partial updates and terminate with
|
|
552
|
+
* `done`. A stream may terminate directly with `error` when request setup fails
|
|
553
|
+
* before generation starts; after `start`, failures also terminate with `error`.
|
|
554
|
+
* Direct `streamSimple()` calls throw synchronously when request auth is missing.
|
|
555
|
+
* Updates and `done` must never appear before `start`.
|
|
556
|
+
*
|
|
557
|
+
* `partial` is the shared live response-so-far helper, not an event-time
|
|
558
|
+
* snapshot. Text and thinking blocks are empty when their `*_start` event is
|
|
559
|
+
* emitted and grow only through their corresponding `*_delta` events until the
|
|
560
|
+
* authoritative `*_end`. Redacted thinking may be complete at start and emit no
|
|
561
|
+
* deltas. Tool-call arguments at `toolcall_start` are provider-specific;
|
|
562
|
+
* `toolcall_delta` carries subsequent JSON updates.
|
|
374
563
|
*/
|
|
375
564
|
export type AssistantMessageEvent = {
|
|
376
565
|
type: "start";
|
|
@@ -419,7 +608,7 @@ export type AssistantMessageEvent = {
|
|
|
419
608
|
partial: AssistantMessage;
|
|
420
609
|
} | {
|
|
421
610
|
type: "done";
|
|
422
|
-
reason: Extract<StopReason, "stop" | "length" | "toolUse">;
|
|
611
|
+
reason: Extract<StopReason, "stop" | "length" | "toolUse" | "deferred">;
|
|
423
612
|
message: AssistantMessage;
|
|
424
613
|
} | {
|
|
425
614
|
type: "error";
|
|
@@ -439,6 +628,8 @@ export interface OpenAICompletionsCompat {
|
|
|
439
628
|
supportsReasoningEffort?: boolean;
|
|
440
629
|
/** Whether the provider supports `stream_options: { include_usage: true }` for token usage in streaming responses. Default: true. */
|
|
441
630
|
supportsUsageInStreaming?: boolean;
|
|
631
|
+
/** Whether streamed responses include `finish_reason`. When false, pi infers `stop` or `toolUse` when the stream ends. Default: true. */
|
|
632
|
+
supportsFinishReason?: boolean;
|
|
442
633
|
/** Which field to use for max tokens. Default: auto-detected from URL. */
|
|
443
634
|
maxTokensField?: "max_completion_tokens" | "max_tokens";
|
|
444
635
|
/** Whether tool results require the `name` field. Default: auto-detected from URL. */
|
|
@@ -449,47 +640,74 @@ export interface OpenAICompletionsCompat {
|
|
|
449
640
|
requiresThinkingAsText?: boolean;
|
|
450
641
|
/** Whether all replayed assistant messages must include an empty reasoning_content field when reasoning is enabled. Default: auto-detected from URL. */
|
|
451
642
|
requiresReasoningContentOnAssistantMessages?: boolean;
|
|
452
|
-
/** Format for reasoning/thinking parameter. "openai" uses reasoning_effort, "openrouter" uses reasoning: { effort }, "deepseek" uses thinking: { type } plus reasoning_effort when supported, "together" uses reasoning: { enabled } plus reasoning_effort when supported, "zai" uses thinking: { type }, "qwen" uses top-level enable_thinking: boolean, "qwen-chat-template" uses chat_template_kwargs.enable_thinking and preserve_thinking, "chat-template" uses configurable chat_template_kwargs, "string-thinking" uses top-level thinking: string, and "ant-ling" uses reasoning: { effort } only when the mapped effort is non-null. Default: "openai". */
|
|
453
|
-
thinkingFormat?: "openai" | "openrouter" | "deepseek" | "together" | "zai" | "qwen" | "chat-template" | "qwen-chat-template" | "string-thinking" | "ant-ling";
|
|
454
|
-
/** Kwargs to send as `chat_template_kwargs` when `thinkingFormat` is `chat-template`. Use `{ "$var": "thinking.enabled" }` or `{ "$var": "thinking.
|
|
643
|
+
/** Format for reasoning/thinking parameter. "openai" uses reasoning_effort, "openrouter" uses reasoning: { effort }, "deepseek" uses thinking: { type } plus reasoning_effort when supported, "together" uses reasoning: { enabled } plus reasoning_effort when supported, "baseten" uses configurable chat_template_args plus reasoning_effort when supported, "zai" uses thinking: { type }, "qwen" uses top-level enable_thinking: boolean, "qwen-chat-template" uses chat_template_kwargs.enable_thinking and preserve_thinking, "chat-template" uses configurable chat_template_kwargs, "string-thinking" uses top-level thinking: string, and "ant-ling" uses reasoning: { effort } only when the mapped effort is non-null. Default: "openai". */
|
|
644
|
+
thinkingFormat?: "openai" | "openrouter" | "deepseek" | "together" | "baseten" | "zai" | "qwen" | "chat-template" | "qwen-chat-template" | "string-thinking" | "ant-ling";
|
|
645
|
+
/** Kwargs to send as `chat_template_kwargs` when `thinkingFormat` is `chat-template`. Use `{ "$var": "thinking.enabled" }`, `{ "$var": "thinking.effort" }`, or `{ "$var": "thinking.budget" }` for pi-controlled thinking values. */
|
|
455
646
|
chatTemplateKwargs?: Record<string, ChatTemplateKwargValue>;
|
|
647
|
+
/** Arguments to send as `chat_template_args` when `thinkingFormat` is `baseten`. Use `{ "$var": "thinking.enabled" }`, `{ "$var": "thinking.effort" }`, or `{ "$var": "thinking.budget" }` for pi-controlled thinking values. */
|
|
648
|
+
chatTemplateArgs?: Record<string, ChatTemplateKwargValue>;
|
|
456
649
|
/** OpenRouter-compatible routing preferences sent as the `provider` request field. */
|
|
457
650
|
openRouterRouting?: OpenRouterRouting;
|
|
458
651
|
/** Vercel AI Gateway routing preferences. Only used when baseUrl points to Vercel AI Gateway. */
|
|
459
652
|
vercelGatewayRouting?: VercelGatewayRouting;
|
|
460
653
|
/** Whether z.ai supports top-level `tool_stream: true` for streaming tool call deltas. Default: false. */
|
|
461
654
|
zaiToolStream?: boolean;
|
|
655
|
+
/**
|
|
656
|
+
* Top-level request field used to cap reasoning tokens from `thinkingBudgets`.
|
|
657
|
+
* Reasoning and the answer share `max_tokens` on these endpoints, so without a budget a
|
|
658
|
+
* reasoning-heavy turn can consume the whole response and emit no answer.
|
|
659
|
+
* `"thinking_token_budget"` is vLLM, `"thinking_budget"` is Qwen/DashScope/SGLang,
|
|
660
|
+
* `"thinking_budget_tokens"` is llama.cpp. Off by default; not set on the generated catalog.
|
|
661
|
+
*/
|
|
662
|
+
thinkingTokenBudgetField?: ThinkingTokenBudgetField;
|
|
663
|
+
/** Alias for `thinkingTokenBudgetField: "thinking_token_budget"` (vLLM). Prefer `thinkingTokenBudgetField`. Default: false. */
|
|
664
|
+
supportsThinkingTokenBudget?: boolean;
|
|
462
665
|
/** Whether the provider supports OpenAI custom tools with Lark/regex grammar formats. When false, grammar-constrained tools fall back to normal function tools. Default: false; the generated model catalog enables it for capable models. */
|
|
463
666
|
supportsOpenAIGrammarTools?: boolean;
|
|
464
|
-
/** Whether the
|
|
667
|
+
/** Whether the exact model accepts system or developer messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false; the generated model catalog enables it for verified models. */
|
|
668
|
+
supportsMidConvoSystemMessages?: boolean;
|
|
669
|
+
/** Whether system messages can introduce additional tools mid-conversation. Requires `supportsMidConvoSystemMessages`. Default: false; the generated model catalog enables it for capable models. */
|
|
670
|
+
supportsMidConvoToolAdditions?: boolean;
|
|
671
|
+
/** Whether the provider supports the `strict` field in tool definitions. Default: false; generated capable models enable it explicitly. */
|
|
465
672
|
supportsStrictMode?: boolean;
|
|
466
673
|
/** Cache control convention for prompt caching. "anthropic" applies Anthropic-style `cache_control` markers to the system prompt, last tool definition, and last user, assistant, or tool-result text content. */
|
|
467
674
|
cacheControlFormat?: "anthropic";
|
|
468
|
-
/** Whether to send session-affinity data from `options.sessionId`. Default: false. */
|
|
675
|
+
/** Whether to send session-affinity data from `options.sessionId`. Default: true for OpenRouter endpoints, false otherwise. */
|
|
469
676
|
sendSessionAffinityHeaders?: boolean;
|
|
470
|
-
/** Provider-specific deferred tool serialization mode. */
|
|
471
|
-
deferredToolsMode?: "kimi";
|
|
472
677
|
/** Session-affinity header format: `openai` sends `session_id`, `x-client-request-id`, and `x-session-affinity`; `openai-nosession` sends `x-client-request-id` and `x-session-affinity`; `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param, which is governed by cache retention. Default: auto-detected. */
|
|
473
678
|
sessionAffinityFormat?: SessionAffinityFormat;
|
|
474
679
|
/** Whether the provider supports long prompt cache retention (`prompt_cache_retention: "24h"` or Anthropic-style `cache_control.ttl: "1h"`, depending on format). Default: true. */
|
|
475
680
|
supportsLongCacheRetention?: boolean;
|
|
681
|
+
/**
|
|
682
|
+
* vLLM scheduler priority sent as the top-level `priority` request field (lower values are
|
|
683
|
+
* handled earlier; server default 0). Only meaningful when vLLM runs with
|
|
684
|
+
* `--scheduling-policy priority`; useful for keeping background/batch work from stalling
|
|
685
|
+
* interactive sessions. Off by default; not set on the generated catalog.
|
|
686
|
+
*/
|
|
687
|
+
vllmPriority?: number;
|
|
476
688
|
}
|
|
477
689
|
/** Compatibility settings for OpenAI Responses APIs. */
|
|
478
690
|
export interface OpenAIResponsesCompat {
|
|
479
691
|
/** Whether the provider supports the `developer` role (vs `system`). Default: true. */
|
|
480
692
|
supportsDeveloperRole?: boolean;
|
|
693
|
+
/** Whether the exact model accepts developer or system messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false; the generated model catalog enables it for verified models. */
|
|
694
|
+
supportsMidConvoSystemMessages?: boolean;
|
|
481
695
|
/** Session-affinity header format: `openai` sends `session_id` and `x-client-request-id`; `openai-nosession` sends `x-client-request-id`; `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param, which is governed by cache retention. Default: auto-detected. */
|
|
482
696
|
sessionAffinityFormat?: SessionAffinityFormat;
|
|
483
|
-
/** Whether the provider supports `prompt_cache_retention: "24h"
|
|
697
|
+
/** Whether the provider supports long prompt cache retention. This uses `prompt_cache_options.ttl: "30m"` on GPT-5.6+ and `prompt_cache_retention: "24h"` on earlier models. Default: true. */
|
|
484
698
|
supportsLongCacheRetention?: boolean;
|
|
485
699
|
/** Whether the provider supports strict JSON-schema function tools. Defaults are API-specific; generated OpenAI models enable it explicitly. */
|
|
486
700
|
supportsStrictMode?: boolean;
|
|
487
701
|
/** Whether to emit OpenAI custom tools with Lark/regex grammar formats. When false, grammar-constrained tools fall back to normal function tools. Default: false; the generated model catalog enables it for capable models. */
|
|
488
702
|
supportsOpenAIGrammarTools?: boolean;
|
|
489
|
-
/** Whether the model supports
|
|
703
|
+
/** Whether the model supports message-anchored `additional_tools` input items. Default: false. */
|
|
704
|
+
supportsAdditionalTools?: boolean;
|
|
705
|
+
/** Whether the model supports client-executed tool search for transcript-anchored additions. Default: false. */
|
|
490
706
|
supportsToolSearch?: boolean;
|
|
491
|
-
/** Whether the model accepts `prompt_cache_options` (OpenAI GPT-5.6+
|
|
707
|
+
/** Whether the model accepts `prompt_cache_options` (OpenAI GPT-5.6+ prompt caching). Older OpenAI models reject the parameter. Default: false. */
|
|
492
708
|
supportsExplicitPromptCacheMode?: boolean;
|
|
709
|
+
/** Whether the provider accepts the `max_output_tokens` parameter. Some Codex-protocol gateways reject it. Default: true. */
|
|
710
|
+
supportsMaxOutputTokens?: boolean;
|
|
493
711
|
}
|
|
494
712
|
/** Compatibility settings for Anthropic Messages-compatible APIs. */
|
|
495
713
|
export interface AnthropicMessagesCompat {
|
|
@@ -511,6 +729,8 @@ export interface AnthropicMessagesCompat {
|
|
|
511
729
|
* Default: false.
|
|
512
730
|
*/
|
|
513
731
|
sendSessionAffinityHeaders?: boolean;
|
|
732
|
+
/** Session-affinity format. `"openrouter"` sends `x-session-id`; when unset, sends `x-session-affinity`. */
|
|
733
|
+
sessionAffinityFormat?: "openrouter";
|
|
514
734
|
/**
|
|
515
735
|
* Whether the provider supports Anthropic-style `cache_control` markers on
|
|
516
736
|
* tool definitions. When false, `cache_control` is omitted from tool params.
|
|
@@ -539,18 +759,30 @@ export interface AnthropicMessagesCompat {
|
|
|
539
759
|
allowEmptySignature?: boolean;
|
|
540
760
|
/** Whether the provider supports Anthropic strict tool schemas. Default: false; generated Anthropic models enable it explicitly. */
|
|
541
761
|
supportsStrictTools?: boolean;
|
|
762
|
+
/** Whether the exact model transport supports effort-only system messages and thinking binding controls. Default: false. */
|
|
763
|
+
supportsMidConvoEffort?: boolean;
|
|
764
|
+
/** Whether the exact model accepts system-role messages inside the conversation. When false, later system messages are folded into the top-level system prompt. Default: false. */
|
|
765
|
+
supportsMidConvoSystemMessages?: boolean;
|
|
766
|
+
/** Whether the exact model accepts mid-conversation `tool_addition` and `tool_removal` blocks. Requires `supportsMidConvoSystemMessages`. Default: false. */
|
|
767
|
+
supportsMidConvoToolChanges?: boolean;
|
|
542
768
|
/**
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
*
|
|
769
|
+
* Models Anthropic accepts in `fallbacks` for server-side refusal fallback,
|
|
770
|
+
* with local pricing metadata for returned fallback responses. When absent or
|
|
771
|
+
* empty, callers must omit `fallbacks`; Anthropic rejects the field for models
|
|
772
|
+
* with no permitted fallback targets.
|
|
546
773
|
*/
|
|
547
|
-
|
|
774
|
+
allowedFallbackModels?: AnthropicAllowedFallbackModel[];
|
|
548
775
|
}
|
|
549
776
|
/** Compatibility settings for Amazon Bedrock models. */
|
|
550
777
|
export interface BedrockCompat {
|
|
551
778
|
/** Whether the model supports Bedrock strict tool schemas. Default: false. */
|
|
552
779
|
supportsStrictMode?: boolean;
|
|
553
780
|
}
|
|
781
|
+
/** Compatibility settings for the Mistral chat API. */
|
|
782
|
+
export interface MistralConversationsCompat {
|
|
783
|
+
/** Whether the exact model accepts system messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false. */
|
|
784
|
+
supportsMidConvoSystemMessages?: boolean;
|
|
785
|
+
}
|
|
554
786
|
/**
|
|
555
787
|
* OpenRouter provider routing preferences.
|
|
556
788
|
* Controls which upstream providers OpenRouter routes requests to.
|
|
@@ -644,29 +876,81 @@ export interface ModelCost extends ModelCostRates {
|
|
|
644
876
|
/** Request-wide pricing tiers. The highest matching input threshold applies to the full request. */
|
|
645
877
|
tiers?: ModelCostTier[];
|
|
646
878
|
}
|
|
647
|
-
export interface
|
|
879
|
+
export interface ModelImageResizeOptions {
|
|
880
|
+
maxWidth?: number;
|
|
881
|
+
maxHeight?: number;
|
|
882
|
+
/** Maximum base64-encoded payload size in bytes. */
|
|
883
|
+
maxBytes?: number;
|
|
884
|
+
jpegQuality?: number;
|
|
885
|
+
}
|
|
886
|
+
export interface ModelImageInputLimits {
|
|
887
|
+
/** Cache-safe resize profile applied before a new image enters conversation history. */
|
|
888
|
+
resize?: ModelImageResizeOptions;
|
|
889
|
+
/** Maximum images accepted in one provider message. */
|
|
890
|
+
maxPerMessage?: number;
|
|
891
|
+
/** Maximum images accepted across one provider request. */
|
|
892
|
+
maxPerRequest?: number;
|
|
893
|
+
}
|
|
894
|
+
export interface ModelInputLimits {
|
|
895
|
+
/** Maximum serialized provider request size in bytes. */
|
|
896
|
+
maxRequestBytes?: number;
|
|
897
|
+
images?: ModelImageInputLimits;
|
|
898
|
+
}
|
|
899
|
+
/** Fields shared by every catalog entry, regardless of what you can do with it. */
|
|
900
|
+
export interface BaseModel<TApi extends string> {
|
|
648
901
|
id: string;
|
|
649
902
|
name: string;
|
|
650
903
|
api: TApi;
|
|
651
904
|
provider: ProviderId;
|
|
652
905
|
baseUrl: string;
|
|
906
|
+
input: ("text" | "image")[];
|
|
907
|
+
/** Provider input limits and cache-safe preprocessing metadata. */
|
|
908
|
+
inputLimits?: ModelInputLimits;
|
|
909
|
+
cost: ModelCost;
|
|
910
|
+
headers?: Record<string, string>;
|
|
911
|
+
}
|
|
912
|
+
/** Chat model: usable with `stream()` and friends. */
|
|
913
|
+
export interface Model<TApi extends Api> extends BaseModel<TApi> {
|
|
914
|
+
/**
|
|
915
|
+
* Optional: chat is the default model type, so models without `type` are chat
|
|
916
|
+
* models. Narrow mixed model lists with `isModelType()` instead of comparing
|
|
917
|
+
* `type` directly.
|
|
918
|
+
*/
|
|
919
|
+
type?: "chat";
|
|
653
920
|
reasoning: boolean;
|
|
654
921
|
/**
|
|
655
922
|
* Maps pi thinking levels to provider/model-specific values.
|
|
656
923
|
* Missing keys use provider defaults. null marks a level as unsupported.
|
|
657
924
|
*/
|
|
658
925
|
thinkingLevelMap?: ThinkingLevelMap;
|
|
659
|
-
|
|
660
|
-
|
|
926
|
+
/** Prompt cache lifetimes per retention tier. Unset when the provider's cache behavior is unknown. */
|
|
927
|
+
promptCache?: ModelPromptCache;
|
|
661
928
|
contextWindow: number;
|
|
662
929
|
maxTokens: number;
|
|
663
|
-
|
|
930
|
+
/** Default sampling parameters for this model. See {@link StreamOptions.samplingParams}; per-request keys override these. */
|
|
931
|
+
samplingParams?: Record<string, unknown>;
|
|
664
932
|
/** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */
|
|
665
|
-
compat?: TApi extends "openai-completions" ? OpenAICompletionsCompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? OpenAIResponsesCompat : TApi extends "anthropic-messages" ? AnthropicMessagesCompat : TApi extends "bedrock-converse-stream" ? BedrockCompat : never;
|
|
933
|
+
compat?: TApi extends "openai-completions" ? OpenAICompletionsCompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? OpenAIResponsesCompat : TApi extends "anthropic-messages" ? AnthropicMessagesCompat : TApi extends "bedrock-converse-stream" ? BedrockCompat : TApi extends "mistral-conversations" ? MistralConversationsCompat : never;
|
|
666
934
|
}
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
935
|
+
/** Image-generation model: usable with `generateImages()` only. */
|
|
936
|
+
export interface ImageModel<TApi extends ImageApi> extends BaseModel<TApi> {
|
|
937
|
+
type: "image";
|
|
938
|
+
/** Output modalities. Always includes `"image"`; `"text"` means the model can also return text blocks. */
|
|
670
939
|
output: ("text" | "image")[];
|
|
671
940
|
}
|
|
941
|
+
/** Structured classifier model: usable with `classify()` only. */
|
|
942
|
+
export interface ClassifierModel<TApi extends ClassifierApi> extends BaseModel<TApi> {
|
|
943
|
+
type: "classifier";
|
|
944
|
+
contextWindow: number;
|
|
945
|
+
}
|
|
946
|
+
/** Model shape for each model type. */
|
|
947
|
+
export interface ModelTypeMap {
|
|
948
|
+
chat: Model<Api>;
|
|
949
|
+
image: ImageModel<ImageApi>;
|
|
950
|
+
classifier: ClassifierModel<ClassifierApi>;
|
|
951
|
+
}
|
|
952
|
+
/** What a catalog entry is for. Decides which `Models` operation accepts it. */
|
|
953
|
+
export type ModelType = keyof ModelTypeMap;
|
|
954
|
+
/** Anything a provider can list. Narrow with `isModelType()`. */
|
|
955
|
+
export type AnyModel = ModelTypeMap[ModelType];
|
|
672
956
|
//# sourceMappingURL=types.d.ts.map
|