@prometheus-ai/ai 0.5.3 → 0.5.8
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/types/auth-broker/remote-store.d.ts +2 -1
- package/dist/types/auth-broker/wire-schemas.d.ts +4 -1
- package/dist/types/auth-gateway/server.d.ts +19 -0
- package/dist/types/auth-gateway/types.d.ts +9 -3
- package/dist/types/auth-retry.d.ts +119 -0
- package/dist/types/auth-storage.d.ts +217 -8
- package/dist/types/errors.d.ts +24 -0
- package/dist/types/index.d.ts +5 -9
- package/dist/types/provider-details.d.ts +1 -1
- package/dist/types/providers/amazon-bedrock.d.ts +12 -6
- package/dist/types/providers/anthropic-client.d.ts +10 -3
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +2 -2
- package/dist/types/providers/anthropic-messages-server.d.ts +3 -3
- package/dist/types/providers/anthropic-wire.d.ts +3 -3
- package/dist/types/providers/anthropic.d.ts +41 -34
- package/dist/types/providers/aws-credentials.d.ts +8 -0
- package/dist/types/providers/azure-openai-responses.d.ts +1 -0
- package/dist/types/providers/google-gemini-cli.d.ts +22 -1
- package/dist/types/providers/google-shared.d.ts +22 -0
- package/dist/types/providers/google-types.d.ts +13 -1
- package/dist/types/providers/mock.d.ts +8 -3
- package/dist/types/providers/ollama.d.ts +6 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +6 -3
- package/dist/types/providers/openai-chat-server.d.ts +3 -3
- package/dist/types/providers/openai-chat-wire.d.ts +644 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +8 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +9 -0
- package/dist/types/providers/openai-codex-responses.d.ts +31 -2
- package/dist/types/providers/openai-completions-compat.d.ts +2 -25
- package/dist/types/providers/openai-completions.d.ts +2 -10
- package/dist/types/providers/openai-responses-server-schema.d.ts +4 -4
- package/dist/types/providers/openai-responses-server.d.ts +2 -2
- package/dist/types/providers/openai-responses-shared.d.ts +49 -9
- package/dist/types/providers/openai-responses-wire.d.ts +6065 -0
- package/dist/types/providers/openai-responses.d.ts +13 -4
- package/dist/types/providers/prometheus-native-client.d.ts +9 -0
- package/dist/types/providers/prometheus-native-server.d.ts +4 -3
- package/dist/types/providers/transform-messages.d.ts +1 -2
- package/dist/types/rate-limit-utils.d.ts +3 -2
- package/dist/types/registry/aimlapi.d.ts +4 -0
- package/dist/types/registry/alibaba-coding-plan.d.ts +7 -0
- package/dist/types/registry/amazon-bedrock.d.ts +5 -0
- package/dist/types/registry/anthropic.d.ts +10 -0
- package/dist/types/{utils/oauth → registry}/api-key-login.d.ts +8 -2
- package/dist/types/{utils/oauth → registry}/api-key-validation.d.ts +15 -0
- package/dist/types/registry/cerebras.d.ts +7 -0
- package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
- package/dist/types/registry/cursor.d.ts +7 -0
- package/dist/types/registry/deepseek.d.ts +8 -0
- package/dist/types/registry/derived.d.ts +5 -0
- package/dist/types/registry/firepass.d.ts +16 -0
- package/dist/types/registry/fireworks.d.ts +7 -0
- package/dist/types/registry/github-copilot.d.ts +7 -0
- package/dist/types/registry/gitlab-duo.d.ts +9 -0
- package/dist/types/registry/google-antigravity.d.ts +9 -0
- package/dist/types/registry/google-gemini-cli.d.ts +9 -0
- package/dist/types/registry/google-vertex.d.ts +5 -0
- package/dist/types/registry/google.d.ts +4 -0
- package/dist/types/registry/groq.d.ts +4 -0
- package/dist/types/registry/huggingface.d.ts +7 -0
- package/dist/types/registry/index.d.ts +4 -0
- package/dist/types/registry/kagi.d.ts +14 -0
- package/dist/types/registry/kilo.d.ts +7 -0
- package/dist/types/registry/kimi-code.d.ts +7 -0
- package/dist/types/registry/litellm.d.ts +13 -0
- package/dist/types/registry/lm-studio.d.ts +8 -0
- package/dist/types/registry/minimax-code-cn.d.ts +6 -0
- package/dist/types/registry/minimax-code.d.ts +6 -0
- package/dist/types/registry/minimax.d.ts +4 -0
- package/dist/types/registry/mistral.d.ts +4 -0
- package/dist/types/registry/moonshot.d.ts +7 -0
- package/dist/types/registry/nanogpt.d.ts +7 -0
- package/dist/types/registry/nvidia.d.ts +7 -0
- package/dist/types/registry/oauth/__tests__/xai-oauth.test.d.ts +1 -0
- package/dist/types/{utils → registry}/oauth/anthropic.d.ts +2 -1
- package/dist/types/{utils → registry}/oauth/github-copilot.d.ts +15 -23
- package/dist/types/{utils → registry}/oauth/index.d.ts +1 -0
- package/dist/types/{utils → registry}/oauth/minimax-code.d.ts +5 -5
- package/dist/types/{utils → registry}/oauth/types.d.ts +6 -1
- package/dist/types/{utils → registry}/oauth/xai-oauth.d.ts +2 -1
- package/dist/types/registry/ollama-cloud.d.ts +7 -0
- package/dist/types/registry/ollama.d.ts +12 -0
- package/dist/types/registry/openai-codex-device.d.ts +8 -0
- package/dist/types/registry/openai-codex.d.ts +9 -0
- package/dist/types/registry/openai.d.ts +4 -0
- package/dist/types/registry/opencode-go.d.ts +6 -0
- package/dist/types/registry/opencode-zen.d.ts +6 -0
- package/dist/types/registry/openrouter.d.ts +13 -0
- package/dist/types/registry/parallel.d.ts +14 -0
- package/dist/types/registry/perplexity.d.ts +7 -0
- package/dist/types/registry/qianfan.d.ts +7 -0
- package/dist/types/registry/qwen-portal.d.ts +7 -0
- package/dist/types/registry/registry.d.ts +272 -0
- package/dist/types/registry/synthetic.d.ts +6 -0
- package/dist/types/registry/tavily.d.ts +14 -0
- package/dist/types/registry/together.d.ts +6 -0
- package/dist/types/registry/types.d.ts +51 -0
- package/dist/types/registry/venice.d.ts +13 -0
- package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
- package/dist/types/registry/vllm.d.ts +7 -0
- package/dist/types/registry/wafer-pass.d.ts +6 -0
- package/dist/types/registry/wafer-serverless.d.ts +6 -0
- package/dist/types/registry/xai-oauth.d.ts +7 -0
- package/dist/types/registry/xai.d.ts +4 -0
- package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
- package/dist/types/registry/xiaomi.d.ts +6 -0
- package/dist/types/registry/zai.d.ts +7 -0
- package/dist/types/registry/zenmux.d.ts +7 -0
- package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
- package/dist/types/stream.d.ts +9 -1
- package/dist/types/types.d.ts +56 -295
- package/dist/types/usage/google-antigravity.d.ts +15 -1
- package/dist/types/usage/openai-codex-reset.d.ts +79 -0
- package/dist/types/usage/openai-codex.d.ts +1 -0
- package/dist/types/usage.d.ts +77 -4
- package/dist/types/utils/abort.d.ts +6 -0
- package/dist/types/utils/event-stream.d.ts +2 -0
- package/dist/types/utils/http-inspector.d.ts +0 -1
- package/dist/types/utils/idle-iterator.d.ts +35 -0
- package/dist/types/utils/openai-http.d.ts +58 -0
- package/dist/types/utils/request-debug.d.ts +3 -0
- package/dist/types/utils/retry-after.d.ts +1 -0
- package/dist/types/utils/schema/fields.d.ts +5 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +7 -15
- package/dist/types/utils/sse-debug.d.ts +0 -5
- package/dist/types/utils/stream-markup-healing.d.ts +2 -0
- package/dist/types/utils.d.ts +1 -5
- package/package.json +17 -29
- package/src/auth-broker/remote-store.ts +10 -1
- package/src/auth-broker/snapshot-cache.ts +1 -1
- package/src/auth-broker/wire-schemas.ts +1 -1
- package/src/auth-gateway/http.ts +1 -1
- package/src/auth-gateway/server.ts +95 -30
- package/src/auth-gateway/types.ts +10 -2
- package/src/auth-retry.ts +238 -0
- package/src/auth-storage.ts +935 -430
- package/src/errors.ts +32 -0
- package/src/index.ts +9 -14
- package/src/provider-details.ts +1 -1
- package/src/providers/__tests__/google-auth.test.ts +144 -0
- package/src/providers/amazon-bedrock.ts +70 -40
- package/src/providers/anthropic-client.ts +15 -13
- package/src/providers/anthropic-messages-server-schema.ts +17 -7
- package/src/providers/anthropic-messages-server.ts +88 -20
- package/src/providers/anthropic-wire.ts +4 -3
- package/src/providers/anthropic.ts +1234 -621
- package/src/providers/aws-credentials.ts +47 -5
- package/src/providers/aws-eventstream.ts +5 -0
- package/src/providers/azure-openai-responses.ts +117 -67
- package/src/providers/cursor.ts +30 -30
- package/src/providers/github-copilot-headers.ts +1 -1
- package/src/providers/gitlab-duo.ts +36 -29
- package/src/providers/google-auth.ts +71 -8
- package/src/providers/google-gemini-cli.ts +118 -22
- package/src/providers/google-shared.ts +163 -43
- package/src/providers/google-types.ts +10 -1
- package/src/providers/kimi.ts +1 -1
- package/src/providers/mock.ts +11 -3
- package/src/providers/ollama.ts +64 -7
- package/src/providers/openai-anthropic-shim.ts +17 -8
- package/src/providers/openai-chat-server-schema.ts +9 -3
- package/src/providers/openai-chat-server.ts +82 -16
- package/src/providers/openai-chat-wire.ts +847 -0
- package/src/providers/openai-codex/request-transformer.ts +129 -34
- package/src/providers/openai-codex/response-handler.ts +22 -1
- package/src/providers/openai-codex-responses.ts +699 -247
- package/src/providers/openai-completions-compat.ts +8 -308
- package/src/providers/openai-completions.ts +416 -267
- package/src/providers/openai-responses-server-schema.ts +15 -9
- package/src/providers/openai-responses-server.ts +162 -114
- package/src/providers/openai-responses-shared.ts +320 -82
- package/src/providers/openai-responses-wire.ts +6391 -0
- package/src/providers/openai-responses.ts +382 -176
- package/src/providers/prometheus-native-client.ts +27 -11
- package/src/providers/prometheus-native-server.ts +44 -17
- package/src/providers/transform-messages.ts +311 -120
- package/src/providers/vision-guard.ts +5 -3
- package/src/rate-limit-utils.ts +13 -3
- package/src/registry/aimlapi.ts +6 -0
- package/src/{utils/oauth → registry}/alibaba-coding-plan.ts +8 -18
- package/src/registry/amazon-bedrock.ts +22 -0
- package/src/registry/anthropic.ts +26 -0
- package/src/{utils/oauth → registry}/api-key-login.ts +25 -3
- package/src/{utils/oauth → registry}/api-key-validation.ts +62 -2
- package/src/{utils/oauth → registry}/cerebras.ts +8 -1
- package/src/{utils/oauth → registry}/cloudflare-ai-gateway.ts +8 -12
- package/src/registry/cursor.ts +20 -0
- package/src/{utils/oauth → registry}/deepseek.ts +9 -17
- package/src/registry/derived.ts +9 -0
- package/src/{utils/oauth → registry}/firepass.ts +10 -2
- package/src/{utils/oauth → registry}/fireworks.ts +8 -1
- package/src/registry/github-copilot.ts +22 -0
- package/src/registry/gitlab-duo.ts +19 -0
- package/src/registry/google-antigravity.ts +21 -0
- package/src/registry/google-gemini-cli.ts +21 -0
- package/src/registry/google-vertex.ts +38 -0
- package/src/registry/google.ts +6 -0
- package/src/registry/groq.ts +6 -0
- package/src/{utils/oauth → registry}/huggingface.ts +8 -19
- package/src/registry/index.ts +4 -0
- package/src/{utils/oauth → registry}/kagi.ts +9 -11
- package/src/{utils/oauth → registry}/kilo.ts +11 -6
- package/src/registry/kimi-code.ts +17 -0
- package/src/{utils/oauth → registry}/litellm.ts +8 -12
- package/src/{utils/oauth → registry}/lm-studio.ts +9 -17
- package/src/registry/minimax-code-cn.ts +12 -0
- package/src/registry/minimax-code.ts +12 -0
- package/src/registry/minimax.ts +6 -0
- package/src/registry/mistral.ts +6 -0
- package/src/{utils/oauth → registry}/moonshot.ts +8 -9
- package/src/{utils/oauth → registry}/nanogpt.ts +8 -1
- package/src/{utils/oauth → registry}/nvidia.ts +8 -18
- package/src/{utils → registry}/oauth/__tests__/xai-oauth.test.ts +4 -7
- package/src/{utils → registry}/oauth/anthropic.ts +38 -17
- package/src/{utils → registry}/oauth/github-copilot.ts +79 -115
- package/src/registry/oauth/gitlab-duo.ts +198 -0
- package/src/{utils → registry}/oauth/google-antigravity.ts +1 -4
- package/src/{utils → registry}/oauth/google-gemini-cli.ts +1 -4
- package/src/registry/oauth/index.ts +164 -0
- package/src/{utils → registry}/oauth/minimax-code.ts +16 -14
- package/src/{utils → registry}/oauth/types.ts +7 -51
- package/src/{utils → registry}/oauth/wafer.ts +1 -1
- package/src/{utils → registry}/oauth/xai-oauth.ts +16 -8
- package/src/{utils → registry}/oauth/xiaomi.ts +9 -4
- package/src/{utils/oauth → registry}/ollama-cloud.ts +8 -1
- package/src/{utils/oauth → registry}/ollama.ts +8 -13
- package/src/registry/openai-codex-device.ts +18 -0
- package/src/registry/openai-codex.ts +19 -0
- package/src/registry/openai.ts +6 -0
- package/src/registry/opencode-go.ts +12 -0
- package/src/registry/opencode-zen.ts +12 -0
- package/src/{utils/oauth → registry}/openrouter.ts +10 -2
- package/src/{utils/oauth → registry}/parallel.ts +9 -11
- package/src/registry/perplexity.ts +13 -0
- package/src/{utils/oauth → registry}/qianfan.ts +8 -17
- package/src/{utils/oauth → registry}/qwen-portal.ts +8 -19
- package/src/registry/registry.ts +149 -0
- package/src/{utils/oauth → registry}/synthetic.ts +7 -1
- package/src/{utils/oauth → registry}/tavily.ts +10 -12
- package/src/{utils/oauth → registry}/together.ts +7 -1
- package/src/registry/types.ts +56 -0
- package/src/{utils/oauth → registry}/venice.ts +8 -12
- package/src/{utils/oauth → registry}/vercel-ai-gateway.ts +8 -18
- package/src/{utils/oauth → registry}/vllm.ts +9 -16
- package/src/registry/wafer-pass.ts +12 -0
- package/src/registry/wafer-serverless.ts +12 -0
- package/src/registry/xai-oauth.ts +17 -0
- package/src/registry/xai.ts +6 -0
- package/src/registry/xiaomi-token-plan-ams.ts +12 -0
- package/src/registry/xiaomi-token-plan-cn.ts +12 -0
- package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
- package/src/registry/xiaomi.ts +12 -0
- package/src/{utils/oauth → registry}/zai.ts +10 -22
- package/src/{utils/oauth → registry}/zenmux.ts +8 -1
- package/src/{utils/oauth/zhipu.ts → registry/zhipu-coding-plan.ts} +9 -21
- package/src/stream.ts +229 -199
- package/src/types.ts +63 -384
- package/src/usage/claude.ts +4 -2
- package/src/usage/github-copilot.ts +4 -2
- package/src/usage/google-antigravity.ts +196 -28
- package/src/usage/kimi.ts +1 -1
- package/src/usage/minimax-code.ts +5 -6
- package/src/usage/openai-codex-reset.ts +174 -0
- package/src/usage/openai-codex.ts +19 -2
- package/src/usage/zai.ts +2 -1
- package/src/usage.ts +93 -4
- package/src/utils/abort.ts +14 -0
- package/src/utils/event-stream.ts +17 -0
- package/src/utils/http-inspector.ts +4 -12
- package/src/utils/idle-iterator.ts +250 -79
- package/src/utils/openai-http.ts +157 -0
- package/src/utils/request-debug.ts +67 -19
- package/src/utils/retry-after.ts +1 -1
- package/src/utils/retry.ts +23 -2
- package/src/utils/schema/CONSTRAINTS.md +4 -2
- package/src/utils/schema/fields.ts +16 -0
- package/src/utils/schema/json-schema-validator.ts +19 -1
- package/src/utils/schema/normalize.ts +80 -8
- package/src/utils/schema/stamps.ts +22 -10
- package/src/utils/schema/wire.ts +2 -2
- package/src/utils/sse-debug.ts +0 -271
- package/src/utils/stream-markup-healing.ts +50 -8
- package/src/utils/validation.ts +49 -13
- package/src/utils.ts +2 -26
- package/dist/types/model-cache.d.ts +0 -17
- package/dist/types/model-manager.d.ts +0 -64
- package/dist/types/model-thinking.d.ts +0 -100
- package/dist/types/models.d.ts +0 -12
- package/dist/types/provider-models/bundled-references.d.ts +0 -4
- package/dist/types/provider-models/descriptors.d.ts +0 -50
- package/dist/types/provider-models/google.d.ts +0 -24
- package/dist/types/provider-models/index.d.ts +0 -5
- package/dist/types/provider-models/ollama.d.ts +0 -7
- package/dist/types/provider-models/openai-compat.d.ts +0 -323
- package/dist/types/provider-models/special.d.ts +0 -16
- package/dist/types/utils/discovery/antigravity.d.ts +0 -61
- package/dist/types/utils/discovery/codex.d.ts +0 -38
- package/dist/types/utils/discovery/cursor.d.ts +0 -23
- package/dist/types/utils/discovery/gemini.d.ts +0 -25
- package/dist/types/utils/discovery/index.d.ts +0 -4
- package/dist/types/utils/discovery/openai-compatible.d.ts +0 -72
- package/dist/types/utils/oauth/alibaba-coding-plan.d.ts +0 -18
- package/dist/types/utils/oauth/cerebras.d.ts +0 -1
- package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +0 -18
- package/dist/types/utils/oauth/deepseek.d.ts +0 -10
- package/dist/types/utils/oauth/firepass.d.ts +0 -1
- package/dist/types/utils/oauth/fireworks.d.ts +0 -1
- package/dist/types/utils/oauth/huggingface.d.ts +0 -19
- package/dist/types/utils/oauth/kagi.d.ts +0 -17
- package/dist/types/utils/oauth/kilo.d.ts +0 -5
- package/dist/types/utils/oauth/litellm.d.ts +0 -18
- package/dist/types/utils/oauth/lm-studio.d.ts +0 -17
- package/dist/types/utils/oauth/moonshot.d.ts +0 -1
- package/dist/types/utils/oauth/nanogpt.d.ts +0 -1
- package/dist/types/utils/oauth/nvidia.d.ts +0 -18
- package/dist/types/utils/oauth/ollama-cloud.d.ts +0 -2
- package/dist/types/utils/oauth/ollama.d.ts +0 -18
- package/dist/types/utils/oauth/openrouter.d.ts +0 -1
- package/dist/types/utils/oauth/parallel.d.ts +0 -17
- package/dist/types/utils/oauth/qianfan.d.ts +0 -17
- package/dist/types/utils/oauth/qwen-portal.d.ts +0 -19
- package/dist/types/utils/oauth/synthetic.d.ts +0 -1
- package/dist/types/utils/oauth/tavily.d.ts +0 -17
- package/dist/types/utils/oauth/together.d.ts +0 -1
- package/dist/types/utils/oauth/venice.d.ts +0 -18
- package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +0 -18
- package/dist/types/utils/oauth/vllm.d.ts +0 -16
- package/dist/types/utils/oauth/zai.d.ts +0 -18
- package/dist/types/utils/oauth/zenmux.d.ts +0 -1
- package/dist/types/utils/oauth/zhipu.d.ts +0 -18
- package/src/model-cache.ts +0 -129
- package/src/model-manager.ts +0 -469
- package/src/model-thinking.ts +0 -756
- package/src/models.json +0 -60287
- package/src/models.json.d.ts +0 -9
- package/src/models.ts +0 -56
- package/src/provider-models/bundled-references.ts +0 -38
- package/src/provider-models/descriptors.ts +0 -364
- package/src/provider-models/google.ts +0 -88
- package/src/provider-models/index.ts +0 -5
- package/src/provider-models/ollama.ts +0 -153
- package/src/provider-models/openai-compat.ts +0 -2904
- package/src/provider-models/special.ts +0 -67
- package/src/utils/discovery/antigravity.ts +0 -261
- package/src/utils/discovery/codex.ts +0 -371
- package/src/utils/discovery/cursor.ts +0 -306
- package/src/utils/discovery/gemini.ts +0 -248
- package/src/utils/discovery/index.ts +0 -4
- package/src/utils/discovery/openai-compatible.ts +0 -224
- package/src/utils/oauth/gitlab-duo.ts +0 -123
- package/src/utils/oauth/index.ts +0 -502
- /package/dist/types/{utils/oauth/__tests__/xai-oauth.test.d.ts → providers/__tests__/google-auth.test.d.ts} +0 -0
- /package/dist/types/{utils → registry}/oauth/callback-server.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/cursor.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/gitlab-duo.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/google-antigravity.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/google-gemini-cli.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/google-oauth-shared.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/kimi.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/openai-codex.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/opencode.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/perplexity.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/pkce.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/wafer.d.ts +0 -0
- /package/dist/types/{utils → registry}/oauth/xiaomi.d.ts +0 -0
- /package/src/{utils → registry}/oauth/callback-server.ts +0 -0
- /package/src/{utils → registry}/oauth/cursor.ts +0 -0
- /package/src/{utils → registry}/oauth/google-oauth-shared.ts +0 -0
- /package/src/{utils → registry}/oauth/kimi.ts +0 -0
- /package/src/{utils → registry}/oauth/oauth.html +0 -0
- /package/src/{utils → registry}/oauth/openai-codex.ts +0 -0
- /package/src/{utils → registry}/oauth/opencode.ts +0 -0
- /package/src/{utils → registry}/oauth/perplexity.ts +0 -0
- /package/src/{utils → registry}/oauth/pkce.ts +0 -0
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import type { Effort } from "
|
|
2
|
-
import { requireSupportedEffort } from "
|
|
1
|
+
import type { Effort } from "@prometheus-ai/catalog/effort";
|
|
2
|
+
import { requireSupportedEffort } from "@prometheus-ai/catalog/model-thinking";
|
|
3
3
|
import type { Api, Model } from "../../types";
|
|
4
4
|
|
|
5
|
+
/** Reasoning replay scope for the Codex Responses API (`reasoning.context`). */
|
|
6
|
+
export type CodexReasoningContext = "auto" | "current_turn" | "all_turns";
|
|
7
|
+
|
|
5
8
|
export interface ReasoningConfig {
|
|
6
9
|
effort: "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
7
10
|
summary?: "auto" | "concise" | "detailed";
|
|
11
|
+
context?: CodexReasoningContext;
|
|
8
12
|
}
|
|
9
13
|
|
|
10
14
|
export interface CodexRequestOptions {
|
|
11
15
|
reasoningEffort?: ReasoningConfig["effort"];
|
|
12
16
|
reasoningSummary?: ReasoningConfig["summary"] | null;
|
|
17
|
+
/** Explicit `reasoning.context` override. Defaults to `all_turns` under {@link CodexRequestOptions.responsesLite}, otherwise omitted (server default is `current_turn`). */
|
|
18
|
+
reasoningContext?: CodexReasoningContext;
|
|
13
19
|
textVerbosity?: "low" | "medium" | "high";
|
|
14
20
|
include?: string[];
|
|
21
|
+
/** Responses Lite transport contract: strips image detail and defaults `reasoning.context` to `all_turns`, mirroring codex-rs. */
|
|
22
|
+
responsesLite?: boolean;
|
|
15
23
|
}
|
|
16
24
|
|
|
17
25
|
export interface InputItem {
|
|
@@ -46,6 +54,7 @@ export interface RequestBody {
|
|
|
46
54
|
include?: string[];
|
|
47
55
|
prompt_cache_key?: string;
|
|
48
56
|
prompt_cache_retention?: "in_memory" | "24h";
|
|
57
|
+
client_metadata?: Record<string, string>;
|
|
49
58
|
max_output_tokens?: number;
|
|
50
59
|
max_completion_tokens?: number;
|
|
51
60
|
[key: string]: unknown;
|
|
@@ -76,6 +85,105 @@ function filterInput(input: InputItem[] | undefined): InputItem[] | undefined {
|
|
|
76
85
|
});
|
|
77
86
|
}
|
|
78
87
|
|
|
88
|
+
const CODEX_ORPHAN_OUTPUT_LIMIT = 16_000;
|
|
89
|
+
/** Placeholder output for a tool call whose result never landed in the input. */
|
|
90
|
+
const CODEX_INTERRUPTED_TOOL_OUTPUT =
|
|
91
|
+
"[No tool output recorded: the tool call was interrupted before it produced a result.]";
|
|
92
|
+
|
|
93
|
+
function orphanFunctionOutputToMessage(item: InputItem, callId: string): InputItem {
|
|
94
|
+
const itemRecord = item as unknown as Record<string, unknown>;
|
|
95
|
+
const toolName = typeof itemRecord.name === "string" ? itemRecord.name : "tool";
|
|
96
|
+
let text = "";
|
|
97
|
+
try {
|
|
98
|
+
const output = itemRecord.output;
|
|
99
|
+
text = typeof output === "string" ? output : JSON.stringify(output);
|
|
100
|
+
} catch {
|
|
101
|
+
text = String(itemRecord.output ?? "");
|
|
102
|
+
}
|
|
103
|
+
if (text.length > CODEX_ORPHAN_OUTPUT_LIMIT) {
|
|
104
|
+
text = `${text.slice(0, CODEX_ORPHAN_OUTPUT_LIMIT)}\n...[truncated]`;
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
type: "message",
|
|
108
|
+
role: "assistant",
|
|
109
|
+
content: `[Previous ${toolName} result; call_id=${callId}]: ${text}`,
|
|
110
|
+
} as InputItem;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Repair both halves of unpaired tool exchanges so the Responses input grammar
|
|
115
|
+
* stays valid — the API rejects either orphan with a 400:
|
|
116
|
+
*
|
|
117
|
+
* - `function_call_output` / `custom_tool_call_output` with no matching call →
|
|
118
|
+
* folded into an assistant message (`400 No tool call found for … output`).
|
|
119
|
+
* Regression of #472 / #1351.
|
|
120
|
+
* - `function_call` / `custom_tool_call` with no matching `*_output` → a
|
|
121
|
+
* placeholder output is synthesized immediately after the call
|
|
122
|
+
* (`400 No tool output found for function call …`). Hit when the user
|
|
123
|
+
* branches/navigates the session tree to a node that ends on a tool call (the
|
|
124
|
+
* tool-result child is dropped from the reconstructed history) or when a turn
|
|
125
|
+
* is aborted/crashes after the call streamed but before its result persisted.
|
|
126
|
+
*/
|
|
127
|
+
function repairToolCallPairs(input: InputItem[]): InputItem[] {
|
|
128
|
+
const callIds = new Set<string>();
|
|
129
|
+
const outputCallIds = new Set<string>();
|
|
130
|
+
for (const item of input) {
|
|
131
|
+
const callId = typeof item.call_id === "string" ? item.call_id : undefined;
|
|
132
|
+
if (callId === undefined) continue;
|
|
133
|
+
if (item.type === "function_call" || item.type === "custom_tool_call") callIds.add(callId);
|
|
134
|
+
else if (item.type === "function_call_output" || item.type === "custom_tool_call_output") {
|
|
135
|
+
outputCallIds.add(callId);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const repaired: InputItem[] = [];
|
|
140
|
+
for (const item of input) {
|
|
141
|
+
const callId = typeof item.call_id === "string" ? item.call_id : undefined;
|
|
142
|
+
|
|
143
|
+
if (
|
|
144
|
+
(item.type === "function_call_output" || item.type === "custom_tool_call_output") &&
|
|
145
|
+
callId !== undefined &&
|
|
146
|
+
!callIds.has(callId)
|
|
147
|
+
) {
|
|
148
|
+
repaired.push(orphanFunctionOutputToMessage(item, callId));
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
repaired.push(item);
|
|
153
|
+
|
|
154
|
+
if (
|
|
155
|
+
(item.type === "function_call" || item.type === "custom_tool_call") &&
|
|
156
|
+
callId !== undefined &&
|
|
157
|
+
!outputCallIds.has(callId)
|
|
158
|
+
) {
|
|
159
|
+
repaired.push({
|
|
160
|
+
type: item.type === "custom_tool_call" ? "custom_tool_call_output" : "function_call_output",
|
|
161
|
+
call_id: callId,
|
|
162
|
+
output: CODEX_INTERRUPTED_TOOL_OUTPUT,
|
|
163
|
+
} as InputItem);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return repaired;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Responses Lite requests must not pin image detail levels: codex-rs strips
|
|
171
|
+
* `detail` from every input image (message content and tool outputs) before
|
|
172
|
+
* sending, letting the server choose.
|
|
173
|
+
*/
|
|
174
|
+
function stripImageDetails(input: InputItem[]): void {
|
|
175
|
+
for (const item of input) {
|
|
176
|
+
for (const collection of [item.content, item.output]) {
|
|
177
|
+
if (!Array.isArray(collection)) continue;
|
|
178
|
+
for (const part of collection) {
|
|
179
|
+
if (part && typeof part === "object" && (part as { type?: unknown }).type === "input_image") {
|
|
180
|
+
delete (part as { detail?: unknown }).detail;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
79
187
|
export async function transformRequestBody(
|
|
80
188
|
body: RequestBody,
|
|
81
189
|
model: Model<Api>,
|
|
@@ -87,39 +195,8 @@ export async function transformRequestBody(
|
|
|
87
195
|
|
|
88
196
|
if (body.input && Array.isArray(body.input)) {
|
|
89
197
|
body.input = filterInput(body.input);
|
|
90
|
-
|
|
91
198
|
if (body.input) {
|
|
92
|
-
|
|
93
|
-
body.input
|
|
94
|
-
.filter(item => item.type === "function_call" && typeof item.call_id === "string")
|
|
95
|
-
.map(item => item.call_id as string),
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
body.input = body.input.map(item => {
|
|
99
|
-
if (item.type === "function_call_output" && typeof item.call_id === "string") {
|
|
100
|
-
const callId = item.call_id as string;
|
|
101
|
-
if (!functionCallIds.has(callId)) {
|
|
102
|
-
const itemRecord = item as unknown as Record<string, unknown>;
|
|
103
|
-
const toolName = typeof itemRecord.name === "string" ? itemRecord.name : "tool";
|
|
104
|
-
let text = "";
|
|
105
|
-
try {
|
|
106
|
-
const output = itemRecord.output;
|
|
107
|
-
text = typeof output === "string" ? output : JSON.stringify(output);
|
|
108
|
-
} catch {
|
|
109
|
-
text = String(itemRecord.output ?? "");
|
|
110
|
-
}
|
|
111
|
-
if (text.length > 16000) {
|
|
112
|
-
text = `${text.slice(0, 16000)}\n...[truncated]`;
|
|
113
|
-
}
|
|
114
|
-
return {
|
|
115
|
-
type: "message",
|
|
116
|
-
role: "assistant",
|
|
117
|
-
content: `[Previous ${toolName} result; call_id=${callId}]: ${text}`,
|
|
118
|
-
} as InputItem;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return item;
|
|
122
|
-
});
|
|
199
|
+
body.input = repairToolCallPairs(body.input);
|
|
123
200
|
}
|
|
124
201
|
}
|
|
125
202
|
|
|
@@ -135,12 +212,30 @@ export async function transformRequestBody(
|
|
|
135
212
|
body.input = [...developerMessages, ...body.input];
|
|
136
213
|
}
|
|
137
214
|
|
|
215
|
+
if (options.responsesLite) {
|
|
216
|
+
if (Array.isArray(body.input)) {
|
|
217
|
+
stripImageDetails(body.input);
|
|
218
|
+
}
|
|
219
|
+
// Responses Lite does not support parallel tool calling; codex-rs forces
|
|
220
|
+
// it off (`prompt.parallel_tool_calls && !use_responses_lite`).
|
|
221
|
+
if (body.tools !== undefined) {
|
|
222
|
+
body.parallel_tool_calls = false;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
138
226
|
if (options.reasoningEffort !== undefined) {
|
|
139
227
|
const reasoningConfig = getReasoningConfig(model, options);
|
|
140
228
|
body.reasoning = {
|
|
141
229
|
...body.reasoning,
|
|
142
230
|
...reasoningConfig,
|
|
143
231
|
};
|
|
232
|
+
// Responses Lite keeps reasoning replay server-side; codex-rs requests
|
|
233
|
+
// `all_turns` there and otherwise omits context so the server default
|
|
234
|
+
// (currently `current_turn`) applies.
|
|
235
|
+
const reasoningContext = options.reasoningContext ?? (options.responsesLite ? "all_turns" : undefined);
|
|
236
|
+
if (reasoningContext !== undefined) {
|
|
237
|
+
body.reasoning.context = reasoningContext;
|
|
238
|
+
}
|
|
144
239
|
} else {
|
|
145
240
|
delete body.reasoning;
|
|
146
241
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { toNumber } from "
|
|
1
|
+
import { toNumber } from "@prometheus-ai/catalog/utils";
|
|
2
|
+
import { ProviderHttpError } from "../../errors";
|
|
2
3
|
|
|
3
4
|
export type CodexRateLimit = {
|
|
4
5
|
used_percent?: number;
|
|
@@ -14,16 +15,34 @@ export type CodexRateLimits = {
|
|
|
14
15
|
export type CodexErrorInfo = {
|
|
15
16
|
message: string;
|
|
16
17
|
status: number;
|
|
18
|
+
/** Machine-readable error code (`error.code` or `error.type` from the response body), when present. */
|
|
19
|
+
code?: string;
|
|
17
20
|
friendlyMessage?: string;
|
|
18
21
|
rateLimits?: CodexRateLimits;
|
|
19
22
|
raw?: string;
|
|
20
23
|
};
|
|
21
24
|
|
|
25
|
+
/** Non-2xx response from the Codex backend, with the parsed body retained. */
|
|
26
|
+
export class CodexApiError extends ProviderHttpError {
|
|
27
|
+
readonly info: CodexErrorInfo;
|
|
28
|
+
|
|
29
|
+
constructor(info: CodexErrorInfo, headers?: Headers) {
|
|
30
|
+
super(info.friendlyMessage || info.message, info.status, { headers, code: info.code });
|
|
31
|
+
this.name = "CodexApiError";
|
|
32
|
+
this.info = info;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static async fromResponse(response: Response): Promise<CodexApiError> {
|
|
36
|
+
return new CodexApiError(await parseCodexError(response), response.headers);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
22
40
|
export async function parseCodexError(response: Response): Promise<CodexErrorInfo> {
|
|
23
41
|
const raw = await response.text();
|
|
24
42
|
let message = raw || response.statusText || "Request failed";
|
|
25
43
|
let friendlyMessage: string | undefined;
|
|
26
44
|
let rateLimits: CodexRateLimits | undefined;
|
|
45
|
+
let errorCode: string | undefined;
|
|
27
46
|
|
|
28
47
|
try {
|
|
29
48
|
const parsed = JSON.parse(raw) as { error?: Record<string, unknown> };
|
|
@@ -46,6 +65,7 @@ export async function parseCodexError(response: Response): Promise<CodexErrorInf
|
|
|
46
65
|
: undefined;
|
|
47
66
|
|
|
48
67
|
const code = String((err as { code?: string; type?: string }).code ?? (err as { type?: string }).type ?? "");
|
|
68
|
+
errorCode = code || undefined;
|
|
49
69
|
const resetsAt = (err as { resets_at?: number }).resets_at ?? primary.resets_at ?? secondary.resets_at;
|
|
50
70
|
const mins = resetsAt ? Math.max(0, Math.round((resetsAt * 1000 - Date.now()) / 60000)) : undefined;
|
|
51
71
|
|
|
@@ -68,6 +88,7 @@ export async function parseCodexError(response: Response): Promise<CodexErrorInf
|
|
|
68
88
|
return {
|
|
69
89
|
message,
|
|
70
90
|
status: response.status,
|
|
91
|
+
code: errorCode,
|
|
71
92
|
friendlyMessage,
|
|
72
93
|
rateLimits,
|
|
73
94
|
raw: raw,
|