@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
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
function loadNodeOs() {
|
|
2
|
-
if (typeof process === "undefined" || !(process.versions?.node || process.versions?.bun)) {
|
|
3
|
-
return null;
|
|
4
|
-
}
|
|
5
|
-
return process.getBuiltinModule?.("node:os") ?? null;
|
|
6
|
-
}
|
|
7
|
-
// NEVER convert to top-level runtime imports - breaks browser/Vite builds
|
|
8
|
-
const _os = loadNodeOs();
|
|
9
1
|
import { clampThinkingLevel } from "../models.js";
|
|
10
2
|
import { registerSessionResourceCleanup } from "../session-resources.js";
|
|
11
3
|
import { combineAbortSignals } from "../utils/abort-signals.js";
|
|
12
|
-
import { splitDeferredTools } from "../utils/deferred-tools.js";
|
|
13
4
|
import { appendAssistantMessageDiagnostic, createAssistantMessageDiagnostic, formatThrownValue, } from "../utils/diagnostics.js";
|
|
5
|
+
import { getDrahtUserAgent } from "../utils/draht-user-agent.js";
|
|
14
6
|
import { formatProviderError, normalizeProviderError } from "../utils/error-body.js";
|
|
15
7
|
import { AssistantMessageEventStream } from "../utils/event-stream.js";
|
|
16
8
|
import { headersToRecord } from "../utils/headers.js";
|
|
17
9
|
import { resolveHttpProxyUrlForTarget } from "../utils/node-http-proxy.js";
|
|
10
|
+
import { getSystemMessageText } from "../utils/text.js";
|
|
11
|
+
import { getDeclaredTools, getInitialSystemMessage, normalizeContext, resolveTranscript, resolveTranscriptTools, } from "../utils/transcript.js";
|
|
18
12
|
import { uuidv7 } from "../utils/uuid.js";
|
|
19
13
|
import { createGrammarToolInputProperties } from "./constrained-sampling.js";
|
|
20
14
|
import { clampOpenAIPromptCacheKey } from "./openai-prompt-cache.js";
|
|
@@ -152,6 +146,7 @@ function compressRequestBodyZstd(bodyJson) {
|
|
|
152
146
|
// ============================================================================
|
|
153
147
|
export const stream = (model, context, options) => {
|
|
154
148
|
const stream = new AssistantMessageEventStream();
|
|
149
|
+
const normalizedContext = resolveTranscript(context, model.compat?.supportsMidConvoSystemMessages);
|
|
155
150
|
(async () => {
|
|
156
151
|
const output = {
|
|
157
152
|
role: "assistant",
|
|
@@ -176,10 +171,10 @@ export const stream = (model, context, options) => {
|
|
|
176
171
|
throw new Error(`No API key for provider: ${model.provider}`);
|
|
177
172
|
}
|
|
178
173
|
const accountId = extractAccountId(apiKey);
|
|
179
|
-
const grammarToolInputProperties = createGrammarToolInputProperties(
|
|
174
|
+
const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), model.compat?.supportsOpenAIGrammarTools ?? false);
|
|
180
175
|
const cacheSessionId = options?.cacheRetention === "none" ? undefined : options?.sessionId;
|
|
181
176
|
const codexSessionId = clampOpenAIPromptCacheKey(cacheSessionId);
|
|
182
|
-
let body = buildRequestBody(model,
|
|
177
|
+
let body = buildRequestBody(model, normalizedContext, options, codexSessionId, grammarToolInputProperties);
|
|
183
178
|
const nextBody = await options?.onPayload?.(body, model);
|
|
184
179
|
if (nextBody !== undefined) {
|
|
185
180
|
body = nextBody;
|
|
@@ -209,7 +204,7 @@ export const stream = (model, context, options) => {
|
|
|
209
204
|
startEmitted = true;
|
|
210
205
|
stream.push({ type: "start", partial: output });
|
|
211
206
|
}
|
|
212
|
-
}, httpTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, grammarToolInputProperties, options);
|
|
207
|
+
}, httpTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, accountId, grammarToolInputProperties, options);
|
|
213
208
|
if (options?.signal?.aborted) {
|
|
214
209
|
throw new Error("Request was aborted");
|
|
215
210
|
}
|
|
@@ -239,7 +234,7 @@ export const stream = (model, context, options) => {
|
|
|
239
234
|
}
|
|
240
235
|
appendAssistantMessageDiagnostic(output, createAssistantMessageDiagnostic("provider_transport_failure", error, {
|
|
241
236
|
configuredTransport: transport,
|
|
242
|
-
|
|
237
|
+
...(websocketStarted ? {} : { fallbackTransport: "sse" }),
|
|
243
238
|
eventsEmitted: websocketStarted,
|
|
244
239
|
phase: websocketStarted ? "after_message_stream_start" : "before_message_stream_start",
|
|
245
240
|
requestBytes: new TextEncoder().encode(bodyJson).byteLength,
|
|
@@ -365,7 +360,10 @@ export const streamSimple = (model, context, options) => {
|
|
|
365
360
|
if (!apiKey) {
|
|
366
361
|
throw new Error(`No API key for provider: ${model.provider}`);
|
|
367
362
|
}
|
|
368
|
-
const base =
|
|
363
|
+
const base = {
|
|
364
|
+
...buildBaseOptions(model, context, options, apiKey),
|
|
365
|
+
toolChoice: options?.toolChoice,
|
|
366
|
+
};
|
|
369
367
|
const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined;
|
|
370
368
|
const reasoningEffort = clampedReasoning === "off" ? undefined : clampedReasoning;
|
|
371
369
|
return stream(model, context, {
|
|
@@ -376,25 +374,27 @@ export const streamSimple = (model, context, options) => {
|
|
|
376
374
|
// ============================================================================
|
|
377
375
|
// Request Building
|
|
378
376
|
// ============================================================================
|
|
379
|
-
function buildRequestBody(model, context, options, cacheSessionId, grammarToolInputProperties = createGrammarToolInputProperties(context.
|
|
377
|
+
function buildRequestBody(model, context, options, cacheSessionId, grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), model.compat?.supportsOpenAIGrammarTools ?? false)) {
|
|
380
378
|
const supportsStrictMode = model.compat?.supportsStrictMode ?? true;
|
|
381
379
|
const supportsOpenAIGrammarTools = model.compat?.supportsOpenAIGrammarTools ?? false;
|
|
382
|
-
const
|
|
380
|
+
const supportsAdditionalTools = model.compat?.supportsAdditionalTools ?? false;
|
|
381
|
+
const supportsToolSearch = model.compat?.supportsToolSearch ?? false;
|
|
382
|
+
const transcriptTools = resolveTranscriptTools(context.messages, supportsAdditionalTools || supportsToolSearch);
|
|
383
383
|
const messages = convertResponsesMessages(model, context, CODEX_TOOL_CALL_PROVIDERS, {
|
|
384
384
|
includeSystemPrompt: false,
|
|
385
385
|
grammarToolInputProperties,
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
supportsOpenAIGrammarTools,
|
|
391
|
-
},
|
|
386
|
+
supportsMidConvoSystemMessages: model.compat?.supportsMidConvoSystemMessages ?? false,
|
|
387
|
+
supportsAdditionalTools,
|
|
388
|
+
supportsToolSearch,
|
|
389
|
+
toolOptions: { strict: null, supportsStrictMode, supportsOpenAIGrammarTools },
|
|
392
390
|
});
|
|
391
|
+
const initialSystemMessage = getInitialSystemMessage(context.messages);
|
|
392
|
+
const instructions = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : "";
|
|
393
393
|
const body = {
|
|
394
394
|
model: model.id,
|
|
395
395
|
store: false,
|
|
396
396
|
stream: true,
|
|
397
|
-
instructions:
|
|
397
|
+
instructions: instructions || "You are a helpful assistant.",
|
|
398
398
|
input: messages,
|
|
399
399
|
text: { verbosity: options?.textVerbosity || "low" },
|
|
400
400
|
include: ["reasoning.encrypted_content"],
|
|
@@ -408,8 +408,8 @@ function buildRequestBody(model, context, options, cacheSessionId, grammarToolIn
|
|
|
408
408
|
if (options?.serviceTier !== undefined) {
|
|
409
409
|
body.service_tier = options.serviceTier;
|
|
410
410
|
}
|
|
411
|
-
if (
|
|
412
|
-
body.tools = convertResponsesTools(
|
|
411
|
+
if (transcriptTools.requestTools.length > 0) {
|
|
412
|
+
body.tools = convertResponsesTools(transcriptTools.requestTools, {
|
|
413
413
|
strict: null,
|
|
414
414
|
supportsStrictMode,
|
|
415
415
|
supportsOpenAIGrammarTools,
|
|
@@ -417,7 +417,9 @@ function buildRequestBody(model, context, options, cacheSessionId, grammarToolIn
|
|
|
417
417
|
}
|
|
418
418
|
if (options?.reasoningEffort !== undefined) {
|
|
419
419
|
const effort = options.reasoningEffort === "none"
|
|
420
|
-
?
|
|
420
|
+
? model.thinkingLevelMap?.off === undefined
|
|
421
|
+
? "none"
|
|
422
|
+
: model.thinkingLevelMap.off
|
|
421
423
|
: (model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort);
|
|
422
424
|
if (effort !== null) {
|
|
423
425
|
body.reasoning = {
|
|
@@ -426,6 +428,9 @@ function buildRequestBody(model, context, options, cacheSessionId, grammarToolIn
|
|
|
426
428
|
};
|
|
427
429
|
}
|
|
428
430
|
}
|
|
431
|
+
else if (model.reasoning && model.thinkingLevelMap?.off !== null) {
|
|
432
|
+
body.reasoning = { effort: model.thinkingLevelMap?.off ?? "none" };
|
|
433
|
+
}
|
|
429
434
|
return body;
|
|
430
435
|
}
|
|
431
436
|
function getServiceTierCostMultiplier(model, serviceTier) {
|
|
@@ -475,7 +480,7 @@ function resolveCodexWebSocketUrl(baseUrl) {
|
|
|
475
480
|
// Response Processing
|
|
476
481
|
// ============================================================================
|
|
477
482
|
async function processStream(response, output, stream, model, grammarToolInputProperties, options) {
|
|
478
|
-
await processResponsesStream(mapCodexEvents(parseSSE(response, options?.signal)), output, stream, model, {
|
|
483
|
+
await processResponsesStream(mapCodexEvents(parseSSE(response, options?.signal), output, model, options?.onProviderStreamEvent), output, stream, model, {
|
|
479
484
|
serviceTier: options?.serviceTier,
|
|
480
485
|
grammarToolInputProperties,
|
|
481
486
|
resolveServiceTier: resolveCodexServiceTier,
|
|
@@ -483,6 +488,8 @@ async function processStream(response, output, stream, model, grammarToolInputPr
|
|
|
483
488
|
});
|
|
484
489
|
}
|
|
485
490
|
class CodexApiError extends Error {
|
|
491
|
+
code;
|
|
492
|
+
payload;
|
|
486
493
|
constructor(message, options) {
|
|
487
494
|
super(message);
|
|
488
495
|
this.name = "CodexApiError";
|
|
@@ -492,6 +499,7 @@ class CodexApiError extends Error {
|
|
|
492
499
|
}
|
|
493
500
|
}
|
|
494
501
|
class CodexProtocolError extends Error {
|
|
502
|
+
payload;
|
|
495
503
|
constructor(message, options) {
|
|
496
504
|
super(message);
|
|
497
505
|
this.name = "CodexProtocolError";
|
|
@@ -499,8 +507,17 @@ class CodexProtocolError extends Error {
|
|
|
499
507
|
this.cause = options?.cause;
|
|
500
508
|
}
|
|
501
509
|
}
|
|
510
|
+
class ProviderStreamEventCallbackError extends Error {
|
|
511
|
+
constructor(cause) {
|
|
512
|
+
super(formatThrownValue(cause));
|
|
513
|
+
this.name = "ProviderStreamEventCallbackError";
|
|
514
|
+
this.cause = cause;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
502
517
|
function isCodexNonTransportError(error) {
|
|
503
|
-
return error instanceof CodexApiError ||
|
|
518
|
+
return (error instanceof CodexApiError ||
|
|
519
|
+
error instanceof CodexProtocolError ||
|
|
520
|
+
error instanceof ProviderStreamEventCallbackError);
|
|
504
521
|
}
|
|
505
522
|
function isWebSocketConnectionLimitReachedError(error) {
|
|
506
523
|
return error instanceof CodexApiError && error.code === WEBSOCKET_CONNECTION_LIMIT_REACHED_CODE;
|
|
@@ -519,8 +536,15 @@ function extractCodexEventError(event) {
|
|
|
519
536
|
: undefined,
|
|
520
537
|
};
|
|
521
538
|
}
|
|
522
|
-
async function* mapCodexEvents(events) {
|
|
539
|
+
async function* mapCodexEvents(events, output, model, onProviderStreamEvent) {
|
|
523
540
|
for await (const event of events) {
|
|
541
|
+
try {
|
|
542
|
+
await onProviderStreamEvent?.(event, model);
|
|
543
|
+
}
|
|
544
|
+
catch (error) {
|
|
545
|
+
// Keep callback failures out of Codex's WebSocket retry and SSE fallback path.
|
|
546
|
+
throw new ProviderStreamEventCallbackError(error);
|
|
547
|
+
}
|
|
524
548
|
const type = typeof event.type === "string" ? event.type : undefined;
|
|
525
549
|
if (!type)
|
|
526
550
|
continue;
|
|
@@ -539,6 +563,9 @@ async function* mapCodexEvents(events) {
|
|
|
539
563
|
}
|
|
540
564
|
if (type === "response.done" || type === "response.completed" || type === "response.incomplete") {
|
|
541
565
|
const response = event.response;
|
|
566
|
+
if (typeof response?.end_turn === "boolean") {
|
|
567
|
+
output.endTurn = response.end_turn;
|
|
568
|
+
}
|
|
542
569
|
const normalizedResponse = response
|
|
543
570
|
? { ...response, status: normalizeCodexStatus(response.status) }
|
|
544
571
|
: response;
|
|
@@ -575,9 +602,10 @@ async function* parseSSE(response, signal) {
|
|
|
575
602
|
if (signal?.aborted) {
|
|
576
603
|
throw new Error("Request was aborted");
|
|
577
604
|
}
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
605
|
+
buffer += done ? decoder.decode() : decoder.decode(value, { stream: true });
|
|
606
|
+
// Treat EOF as terminating the residual SSE frame.
|
|
607
|
+
if (done && buffer.trim())
|
|
608
|
+
buffer += "\n\n";
|
|
581
609
|
let idx = buffer.indexOf("\n\n");
|
|
582
610
|
while (idx !== -1) {
|
|
583
611
|
const chunk = buffer.slice(0, idx);
|
|
@@ -602,6 +630,8 @@ async function* parseSSE(response, signal) {
|
|
|
602
630
|
}
|
|
603
631
|
idx = buffer.indexOf("\n\n");
|
|
604
632
|
}
|
|
633
|
+
if (done)
|
|
634
|
+
break;
|
|
605
635
|
}
|
|
606
636
|
}
|
|
607
637
|
finally {
|
|
@@ -664,14 +694,14 @@ export function closeOpenAICodexWebSocketSessions(sessionId) {
|
|
|
664
694
|
closeWebSocketSilently(entry.socket, 1000, "debug_close");
|
|
665
695
|
};
|
|
666
696
|
if (sessionId) {
|
|
667
|
-
const entry
|
|
668
|
-
if (entry)
|
|
697
|
+
for (const entry of websocketSessionCache.get(sessionId)?.values() ?? [])
|
|
669
698
|
closeEntry(entry);
|
|
670
699
|
websocketSessionCache.delete(sessionId);
|
|
671
700
|
return;
|
|
672
701
|
}
|
|
673
|
-
for (const
|
|
674
|
-
|
|
702
|
+
for (const accountEntries of websocketSessionCache.values()) {
|
|
703
|
+
for (const entry of accountEntries.values())
|
|
704
|
+
closeEntry(entry);
|
|
675
705
|
}
|
|
676
706
|
websocketSessionCache.clear();
|
|
677
707
|
}
|
|
@@ -726,6 +756,9 @@ async function getWebSocketConstructor(env) {
|
|
|
726
756
|
return ctor;
|
|
727
757
|
}
|
|
728
758
|
class WebSocketCloseError extends Error {
|
|
759
|
+
code;
|
|
760
|
+
reason;
|
|
761
|
+
wasClean;
|
|
729
762
|
constructor(message, options) {
|
|
730
763
|
super(message);
|
|
731
764
|
this.name = "WebSocketCloseError";
|
|
@@ -752,7 +785,7 @@ function closeWebSocketSilently(socket, code = 1000, reason = "done") {
|
|
|
752
785
|
}
|
|
753
786
|
catch { }
|
|
754
787
|
}
|
|
755
|
-
function scheduleSessionWebSocketExpiry(sessionId, entry) {
|
|
788
|
+
function scheduleSessionWebSocketExpiry(sessionId, accountId, entry) {
|
|
756
789
|
if (entry.idleTimer) {
|
|
757
790
|
clearTimeout(entry.idleTimer);
|
|
758
791
|
}
|
|
@@ -760,7 +793,11 @@ function scheduleSessionWebSocketExpiry(sessionId, entry) {
|
|
|
760
793
|
if (entry.busy)
|
|
761
794
|
return;
|
|
762
795
|
closeWebSocketSilently(entry.socket, 1000, "idle_timeout");
|
|
763
|
-
websocketSessionCache.
|
|
796
|
+
const accountEntries = websocketSessionCache.get(sessionId);
|
|
797
|
+
if (accountEntries?.get(accountId) === entry)
|
|
798
|
+
accountEntries.delete(accountId);
|
|
799
|
+
if (accountEntries?.size === 0)
|
|
800
|
+
websocketSessionCache.delete(sessionId);
|
|
764
801
|
}, SESSION_WEBSOCKET_CACHE_TTL_MS);
|
|
765
802
|
}
|
|
766
803
|
async function connectWebSocket(url, headers, signal, connectTimeoutMs = DEFAULT_WEBSOCKET_CONNECT_TIMEOUT_MS, env) {
|
|
@@ -831,7 +868,7 @@ async function connectWebSocket(url, headers, signal, connectTimeoutMs = DEFAULT
|
|
|
831
868
|
}
|
|
832
869
|
});
|
|
833
870
|
}
|
|
834
|
-
async function acquireWebSocket(url, headers, sessionId, signal, connectTimeoutMs, env) {
|
|
871
|
+
async function acquireWebSocket(url, headers, sessionId, accountId, signal, connectTimeoutMs, env) {
|
|
835
872
|
if (!sessionId) {
|
|
836
873
|
const socket = await connectWebSocket(url, headers, signal, connectTimeoutMs, env);
|
|
837
874
|
return {
|
|
@@ -840,7 +877,8 @@ async function acquireWebSocket(url, headers, sessionId, signal, connectTimeoutM
|
|
|
840
877
|
release: () => closeWebSocketSilently(socket),
|
|
841
878
|
};
|
|
842
879
|
}
|
|
843
|
-
|
|
880
|
+
let accountEntries = websocketSessionCache.get(sessionId);
|
|
881
|
+
const cached = accountEntries?.get(accountId);
|
|
844
882
|
if (cached) {
|
|
845
883
|
if (cached.idleTimer) {
|
|
846
884
|
clearTimeout(cached.idleTimer);
|
|
@@ -848,7 +886,9 @@ async function acquireWebSocket(url, headers, sessionId, signal, connectTimeoutM
|
|
|
848
886
|
}
|
|
849
887
|
if (!cached.busy && isWebSocketSessionExpired(cached)) {
|
|
850
888
|
closeWebSocketSilently(cached.socket, 1000, "connection_age_limit");
|
|
851
|
-
|
|
889
|
+
accountEntries?.delete(accountId);
|
|
890
|
+
if (accountEntries?.size === 0)
|
|
891
|
+
websocketSessionCache.delete(sessionId);
|
|
852
892
|
}
|
|
853
893
|
else if (!cached.busy && isWebSocketReusable(cached.socket)) {
|
|
854
894
|
cached.busy = true;
|
|
@@ -859,11 +899,15 @@ async function acquireWebSocket(url, headers, sessionId, signal, connectTimeoutM
|
|
|
859
899
|
release: ({ keep } = {}) => {
|
|
860
900
|
if (!keep || !isWebSocketReusable(cached.socket)) {
|
|
861
901
|
closeWebSocketSilently(cached.socket);
|
|
862
|
-
websocketSessionCache.
|
|
902
|
+
const currentEntries = websocketSessionCache.get(sessionId);
|
|
903
|
+
if (currentEntries?.get(accountId) === cached)
|
|
904
|
+
currentEntries.delete(accountId);
|
|
905
|
+
if (currentEntries?.size === 0)
|
|
906
|
+
websocketSessionCache.delete(sessionId);
|
|
863
907
|
return;
|
|
864
908
|
}
|
|
865
909
|
cached.busy = false;
|
|
866
|
-
scheduleSessionWebSocketExpiry(sessionId, cached);
|
|
910
|
+
scheduleSessionWebSocketExpiry(sessionId, accountId, cached);
|
|
867
911
|
},
|
|
868
912
|
};
|
|
869
913
|
}
|
|
@@ -879,12 +923,19 @@ async function acquireWebSocket(url, headers, sessionId, signal, connectTimeoutM
|
|
|
879
923
|
}
|
|
880
924
|
if (!isWebSocketReusable(cached.socket)) {
|
|
881
925
|
closeWebSocketSilently(cached.socket);
|
|
882
|
-
|
|
926
|
+
accountEntries?.delete(accountId);
|
|
927
|
+
if (accountEntries?.size === 0)
|
|
928
|
+
websocketSessionCache.delete(sessionId);
|
|
883
929
|
}
|
|
884
930
|
}
|
|
885
931
|
const socket = await connectWebSocket(url, headers, signal, connectTimeoutMs, env);
|
|
886
932
|
const entry = { socket, busy: true, createdAt: Date.now() };
|
|
887
|
-
websocketSessionCache.
|
|
933
|
+
accountEntries = websocketSessionCache.get(sessionId);
|
|
934
|
+
if (!accountEntries) {
|
|
935
|
+
accountEntries = new Map();
|
|
936
|
+
websocketSessionCache.set(sessionId, accountEntries);
|
|
937
|
+
}
|
|
938
|
+
accountEntries.set(accountId, entry);
|
|
888
939
|
return {
|
|
889
940
|
socket,
|
|
890
941
|
entry,
|
|
@@ -894,13 +945,15 @@ async function acquireWebSocket(url, headers, sessionId, signal, connectTimeoutM
|
|
|
894
945
|
closeWebSocketSilently(entry.socket);
|
|
895
946
|
if (entry.idleTimer)
|
|
896
947
|
clearTimeout(entry.idleTimer);
|
|
897
|
-
|
|
948
|
+
const currentEntries = websocketSessionCache.get(sessionId);
|
|
949
|
+
if (currentEntries?.get(accountId) === entry)
|
|
950
|
+
currentEntries.delete(accountId);
|
|
951
|
+
if (currentEntries?.size === 0)
|
|
898
952
|
websocketSessionCache.delete(sessionId);
|
|
899
|
-
}
|
|
900
953
|
return;
|
|
901
954
|
}
|
|
902
955
|
entry.busy = false;
|
|
903
|
-
scheduleSessionWebSocketExpiry(sessionId, entry);
|
|
956
|
+
scheduleSessionWebSocketExpiry(sessionId, accountId, entry);
|
|
904
957
|
},
|
|
905
958
|
};
|
|
906
959
|
}
|
|
@@ -1120,8 +1173,8 @@ async function* startWebSocketOutputOnFirstEvent(events, onStart) {
|
|
|
1120
1173
|
yield event;
|
|
1121
1174
|
}
|
|
1122
1175
|
}
|
|
1123
|
-
async function processWebSocketStream(url, body, headers, output, stream, model, onStart, idleTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, grammarToolInputProperties, options) {
|
|
1124
|
-
const { socket, entry, reused, release } = await acquireWebSocket(url, headers, cacheSessionId, options?.signal, websocketConnectTimeoutMs, options?.env);
|
|
1176
|
+
async function processWebSocketStream(url, body, headers, output, stream, model, onStart, idleTimeoutMs, websocketConnectTimeoutMs, cacheSessionId, accountId, grammarToolInputProperties, options) {
|
|
1177
|
+
const { socket, entry, reused, release } = await acquireWebSocket(url, headers, cacheSessionId, accountId, options?.signal, websocketConnectTimeoutMs, options?.env);
|
|
1125
1178
|
let keepConnection = true;
|
|
1126
1179
|
const useCachedContext = options?.transport === "websocket-cached" || options?.transport === "auto";
|
|
1127
1180
|
// ChatGPT Codex Responses rejects `store: true` ("Store must be set to false").
|
|
@@ -1153,7 +1206,7 @@ async function processWebSocketStream(url, body, headers, output, stream, model,
|
|
|
1153
1206
|
}
|
|
1154
1207
|
try {
|
|
1155
1208
|
socket.send(JSON.stringify({ type: "response.create", ...requestBody }));
|
|
1156
|
-
await processResponsesStream(startWebSocketOutputOnFirstEvent(mapCodexEvents(parseWebSocket(socket, options?.signal, idleTimeoutMs)), onStart), output, stream, model, {
|
|
1209
|
+
await processResponsesStream(startWebSocketOutputOnFirstEvent(mapCodexEvents(parseWebSocket(socket, options?.signal, idleTimeoutMs), output, model, options?.onProviderStreamEvent), onStart), output, stream, model, {
|
|
1157
1210
|
serviceTier: options?.serviceTier,
|
|
1158
1211
|
grammarToolInputProperties,
|
|
1159
1212
|
resolveServiceTier: resolveCodexServiceTier,
|
|
@@ -1163,7 +1216,7 @@ async function processWebSocketStream(url, body, headers, output, stream, model,
|
|
|
1163
1216
|
keepConnection = false;
|
|
1164
1217
|
}
|
|
1165
1218
|
else if (useCachedContext && entry && output.responseId) {
|
|
1166
|
-
const responseItems = convertResponsesMessages(model, { messages: [output] }, CODEX_TOOL_CALL_PROVIDERS, {
|
|
1219
|
+
const responseItems = convertResponsesMessages(model, normalizeContext({ messages: [output] }), CODEX_TOOL_CALL_PROVIDERS, {
|
|
1167
1220
|
includeSystemPrompt: false,
|
|
1168
1221
|
grammarToolInputProperties,
|
|
1169
1222
|
}).filter((item) => item.type !== "function_call_output" && item.type !== "custom_tool_call_output");
|
|
@@ -1241,9 +1294,8 @@ function buildBaseCodexHeaders(initHeaders, additionalHeaders, accountId, token)
|
|
|
1241
1294
|
}
|
|
1242
1295
|
headers.set("Authorization", `Bearer ${token}`);
|
|
1243
1296
|
headers.set("chatgpt-account-id", accountId);
|
|
1244
|
-
headers.set("originator", "
|
|
1245
|
-
|
|
1246
|
-
headers.set("User-Agent", userAgent);
|
|
1297
|
+
headers.set("originator", "draht");
|
|
1298
|
+
headers.set("User-Agent", getDrahtUserAgent());
|
|
1247
1299
|
return headers;
|
|
1248
1300
|
}
|
|
1249
1301
|
function buildSSEHeaders(initHeaders, additionalHeaders, accountId, token, sessionId) {
|