@vib-rato/ai 0.16.0
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/CHANGELOG.md +3354 -0
- package/README.md +1194 -0
- package/dist/types/adapter-internals/provider-safety-stop.d.ts +45 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +80 -0
- package/dist/types/auth-broker/index.d.ts +5 -0
- package/dist/types/auth-broker/redact.d.ts +7 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +153 -0
- package/dist/types/auth-broker/server.d.ts +32 -0
- package/dist/types/auth-broker/types.d.ts +132 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +555 -0
- package/dist/types/auth-gateway/http.d.ts +40 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +70 -0
- package/dist/types/auth-gateway/types.d.ts +129 -0
- package/dist/types/auth-storage.d.ts +1074 -0
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/codex-tools.d.ts +4 -0
- package/dist/types/context-cap-policy.d.ts +68 -0
- package/dist/types/core.d.ts +35 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/model-cache.d.ts +24 -0
- package/dist/types/model-manager.d.ts +77 -0
- package/dist/types/model-pricing.d.ts +3 -0
- package/dist/types/model-retirements.d.ts +6 -0
- package/dist/types/model-thinking.d.ts +100 -0
- package/dist/types/models.d.ts +21 -0
- package/dist/types/openai-completions-compat.d.ts +34 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/provider-models/bundled-references.d.ts +4 -0
- package/dist/types/provider-models/descriptors.d.ts +48 -0
- package/dist/types/provider-models/google.d.ts +20 -0
- package/dist/types/provider-models/index.d.ts +5 -0
- package/dist/types/provider-models/ollama.d.ts +7 -0
- package/dist/types/provider-models/openai-compat.d.ts +293 -0
- package/dist/types/provider-models/special.d.ts +29 -0
- package/dist/types/providers/amazon-bedrock.d.ts +60 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic.d.ts +280 -0
- package/dist/types/providers/aws-credential-config.d.ts +19 -0
- package/dist/types/providers/aws-credentials.d.ts +43 -0
- package/dist/types/providers/aws-eventstream.d.ts +38 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +22 -0
- package/dist/types/providers/composer-discipline.d.ts +32 -0
- package/dist/types/providers/cursor/client-version.d.ts +10 -0
- package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
- package/dist/types/providers/cursor/gen/agent_pb.d.ts +16769 -0
- package/dist/types/providers/cursor-pi-args.d.ts +119 -0
- package/dist/types/providers/cursor.d.ts +72 -0
- package/dist/types/providers/dashscope-token-plan-headers.d.ts +57 -0
- package/dist/types/providers/error-message.d.ts +27 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +26 -0
- package/dist/types/providers/google-gemini-cli.d.ts +75 -0
- package/dist/types/providers/google-gemini-headers.d.ts +43 -0
- package/dist/types/providers/google-shared.d.ts +183 -0
- package/dist/types/providers/google-types.d.ts +138 -0
- package/dist/types/providers/google-vertex.d.ts +11 -0
- package/dist/types/providers/google.d.ts +4 -0
- package/dist/types/providers/grammar.d.ts +1 -0
- package/dist/types/providers/kimi.d.ts +27 -0
- package/dist/types/providers/kiro-api-key.d.ts +50 -0
- package/dist/types/providers/kiro-codewhisperer.d.ts +11 -0
- package/dist/types/providers/mock.d.ts +189 -0
- package/dist/types/providers/ollama.d.ts +41 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-bounded-rate-limits.d.ts +3 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +1733 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-codex/constants.d.ts +26 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +50 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +18 -0
- package/dist/types/providers/openai-codex-responses.d.ts +71 -0
- package/dist/types/providers/openai-completions-compat.d.ts +6 -0
- package/dist/types/providers/openai-completions.d.ts +35 -0
- package/dist/types/providers/openai-opencodex-responses.d.ts +10 -0
- package/dist/types/providers/openai-request-transform.d.ts +4 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-shared.d.ts +106 -0
- package/dist/types/providers/openai-responses.d.ts +37 -0
- package/dist/types/providers/pi-native-client.d.ts +29 -0
- package/dist/types/providers/pi-native-server.d.ts +60 -0
- package/dist/types/providers/register-builtins.d.ts +59 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +33 -0
- package/dist/types/providers/vision-guard.d.ts +8 -0
- package/dist/types/rate-limit-utils.d.ts +19 -0
- package/dist/types/stream.d.ts +45 -0
- package/dist/types/types.d.ts +1073 -0
- package/dist/types/usage/claude.d.ts +3 -0
- package/dist/types/usage/gemini.d.ts +2 -0
- package/dist/types/usage/github-copilot.d.ts +7 -0
- package/dist/types/usage/google-antigravity.d.ts +2 -0
- package/dist/types/usage/grok-cli.d.ts +17 -0
- package/dist/types/usage/kimi.d.ts +4 -0
- package/dist/types/usage/minimax-code.d.ts +2 -0
- package/dist/types/usage/openai-codex.d.ts +3 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/zai.d.ts +2 -0
- package/dist/types/usage.d.ts +264 -0
- package/dist/types/utils/abort.d.ts +19 -0
- package/dist/types/utils/anthropic-auth.d.ts +39 -0
- package/dist/types/utils/block-symbols.d.ts +6 -0
- package/dist/types/utils/discovery/antigravity.d.ts +67 -0
- package/dist/types/utils/discovery/codex.d.ts +38 -0
- package/dist/types/utils/discovery/cursor.d.ts +49 -0
- package/dist/types/utils/discovery/gemini.d.ts +25 -0
- package/dist/types/utils/discovery/index.d.ts +4 -0
- package/dist/types/utils/discovery/openai-compatible.d.ts +81 -0
- package/dist/types/utils/event-stream.d.ts +41 -0
- package/dist/types/utils/fallback-transport.d.ts +110 -0
- package/dist/types/utils/fireworks-model-id.d.ts +10 -0
- package/dist/types/utils/foundry.d.ts +11 -0
- package/dist/types/utils/h2-fetch.d.ts +22 -0
- package/dist/types/utils/http-inspector.d.ts +59 -0
- package/dist/types/utils/idle-iterator.d.ts +122 -0
- package/dist/types/utils/json-parse.d.ts +98 -0
- package/dist/types/utils/oauth/alibaba-token-plan.d.ts +19 -0
- package/dist/types/utils/oauth/anthropic.d.ts +41 -0
- package/dist/types/utils/oauth/api-key-login.d.ts +38 -0
- package/dist/types/utils/oauth/api-key-validation.d.ts +39 -0
- package/dist/types/utils/oauth/bizrouter.d.ts +1 -0
- package/dist/types/utils/oauth/callback-server.d.ts +80 -0
- package/dist/types/utils/oauth/cerebras.d.ts +1 -0
- package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/commandcode.d.ts +1 -0
- package/dist/types/utils/oauth/cursor.d.ts +15 -0
- package/dist/types/utils/oauth/deepinfra.d.ts +1 -0
- package/dist/types/utils/oauth/deepseek.d.ts +10 -0
- package/dist/types/utils/oauth/firepass.d.ts +1 -0
- package/dist/types/utils/oauth/fireworks.d.ts +1 -0
- package/dist/types/utils/oauth/fugu.d.ts +1 -0
- package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
- package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/utils/oauth/glm-zcode.d.ts +71 -0
- package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
- package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
- package/dist/types/utils/oauth/huggingface.d.ts +19 -0
- package/dist/types/utils/oauth/index.d.ts +39 -0
- package/dist/types/utils/oauth/kagi.d.ts +17 -0
- package/dist/types/utils/oauth/kilo.d.ts +5 -0
- package/dist/types/utils/oauth/kimi.d.ts +17 -0
- package/dist/types/utils/oauth/kiro.d.ts +71 -0
- package/dist/types/utils/oauth/litellm.d.ts +18 -0
- package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
- package/dist/types/utils/oauth/mara.d.ts +1 -0
- package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
- package/dist/types/utils/oauth/moonshot.d.ts +1 -0
- package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
- package/dist/types/utils/oauth/nvidia.d.ts +18 -0
- package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
- package/dist/types/utils/oauth/ollama.d.ts +18 -0
- package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
- package/dist/types/utils/oauth/opencode.d.ts +18 -0
- package/dist/types/utils/oauth/opengateway.d.ts +1 -0
- package/dist/types/utils/oauth/openrouter.d.ts +1 -0
- package/dist/types/utils/oauth/parallel.d.ts +17 -0
- package/dist/types/utils/oauth/perplexity.d.ts +4 -0
- package/dist/types/utils/oauth/pkce.d.ts +8 -0
- package/dist/types/utils/oauth/qianfan.d.ts +17 -0
- package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
- package/dist/types/utils/oauth/sglang.d.ts +16 -0
- package/dist/types/utils/oauth/synthetic.d.ts +1 -0
- package/dist/types/utils/oauth/tavily.d.ts +17 -0
- package/dist/types/utils/oauth/together.d.ts +1 -0
- package/dist/types/utils/oauth/types.d.ts +56 -0
- package/dist/types/utils/oauth/venice.d.ts +18 -0
- package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/vllm.d.ts +16 -0
- package/dist/types/utils/oauth/xai.d.ts +30 -0
- package/dist/types/utils/oauth/xiaomi.d.ts +25 -0
- package/dist/types/utils/oauth/zai.d.ts +18 -0
- package/dist/types/utils/oauth/zenmux.d.ts +1 -0
- package/dist/types/utils/overflow.d.ts +14 -0
- package/dist/types/utils/parse-bind.d.ts +26 -0
- package/dist/types/utils/provider-response.d.ts +6 -0
- package/dist/types/utils/provider-safety-stop.d.ts +8 -0
- package/dist/types/utils/proxy.d.ts +7 -0
- package/dist/types/utils/retry-after.d.ts +3 -0
- package/dist/types/utils/retry-budget.d.ts +1 -0
- package/dist/types/utils/retry.d.ts +29 -0
- package/dist/types/utils/schema/adapt.d.ts +24 -0
- package/dist/types/utils/schema/compatibility.d.ts +30 -0
- package/dist/types/utils/schema/dereference.d.ts +11 -0
- package/dist/types/utils/schema/draft.d.ts +10 -0
- package/dist/types/utils/schema/equality.d.ts +4 -0
- package/dist/types/utils/schema/fields.d.ts +49 -0
- package/dist/types/utils/schema/index.d.ts +14 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +93 -0
- package/dist/types/utils/schema/root-combinator.d.ts +12 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +25 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/wire.d.ts +54 -0
- package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
- package/dist/types/utils/sse-debug.d.ts +10 -0
- package/dist/types/utils/tool-call-healing.d.ts +80 -0
- package/dist/types/utils/tool-choice-capability.d.ts +57 -0
- package/dist/types/utils/tool-choice.d.ts +50 -0
- package/dist/types/utils/validation.d.ts +17 -0
- package/dist/types/utils.d.ts +117 -0
- package/package.json +152 -0
- package/src/adapter-internals/provider-safety-stop.d.ts +45 -0
- package/src/adapter-internals/provider-safety-stop.ts +156 -0
- package/src/api-registry.d.ts +30 -0
- package/src/api-registry.ts +96 -0
- package/src/auth-broker/client.ts +444 -0
- package/src/auth-broker/index.ts +5 -0
- package/src/auth-broker/redact.ts +39 -0
- package/src/auth-broker/refresher.ts +130 -0
- package/src/auth-broker/remote-store.ts +1576 -0
- package/src/auth-broker/server.ts +764 -0
- package/src/auth-broker/types.ts +164 -0
- package/src/auth-broker/wire-schemas.ts +261 -0
- package/src/auth-gateway/http.ts +198 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +1315 -0
- package/src/auth-gateway/types.ts +160 -0
- package/src/auth-storage.ts +7312 -0
- package/src/cli.ts +269 -0
- package/src/codex-tools.d.ts +4 -0
- package/src/codex-tools.ts +24 -0
- package/src/context-cap-policy.d.ts +68 -0
- package/src/context-cap-policy.ts +123 -0
- package/src/core.ts +44 -0
- package/src/index.ts +61 -0
- package/src/model-cache.ts +236 -0
- package/src/model-manager.ts +744 -0
- package/src/model-pricing.d.ts +3 -0
- package/src/model-pricing.ts +68 -0
- package/src/model-retirements.d.ts +6 -0
- package/src/model-retirements.ts +19 -0
- package/src/model-thinking.d.ts +100 -0
- package/src/model-thinking.ts +1054 -0
- package/src/models.d.ts +21 -0
- package/src/models.json +94672 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +126 -0
- package/src/openai-completions-compat.d.ts +34 -0
- package/src/openai-completions-compat.ts +383 -0
- package/src/prompts/composer-bash-policy-recovery.md +1 -0
- package/src/prompts/cursor-composer-bash-policy-recovery.md +1 -0
- package/src/prompts/cursor-composer-edit-discipline.md +7 -0
- package/src/prompts/turn-aborted-guidance.md +4 -0
- package/src/provider-details.ts +90 -0
- package/src/provider-models/bundled-references.ts +38 -0
- package/src/provider-models/descriptors.ts +392 -0
- package/src/provider-models/google.ts +92 -0
- package/src/provider-models/index.ts +5 -0
- package/src/provider-models/ollama.ts +159 -0
- package/src/provider-models/openai-compat.ts +2920 -0
- package/src/provider-models/special.ts +185 -0
- package/src/providers/amazon-bedrock.d.ts +60 -0
- package/src/providers/amazon-bedrock.ts +939 -0
- package/src/providers/anthropic-messages-server-schema.ts +229 -0
- package/src/providers/anthropic-messages-server.ts +839 -0
- package/src/providers/anthropic.d.ts +280 -0
- package/src/providers/anthropic.ts +4421 -0
- package/src/providers/aws-credential-config.d.ts +19 -0
- package/src/providers/aws-credential-config.ts +179 -0
- package/src/providers/aws-credentials.d.ts +43 -0
- package/src/providers/aws-credentials.ts +457 -0
- package/src/providers/aws-eventstream.d.ts +38 -0
- package/src/providers/aws-eventstream.ts +185 -0
- package/src/providers/aws-sigv4.d.ts +55 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.d.ts +22 -0
- package/src/providers/azure-openai-responses.ts +447 -0
- package/src/providers/composer-discipline.d.ts +32 -0
- package/src/providers/composer-discipline.ts +95 -0
- package/src/providers/cursor/client-version.d.ts +10 -0
- package/src/providers/cursor/client-version.ts +10 -0
- package/src/providers/cursor/exec-modern.d.ts +98 -0
- package/src/providers/cursor/exec-modern.ts +497 -0
- package/src/providers/cursor/gen/agent_pb.d.ts +16769 -0
- package/src/providers/cursor/gen/agent_pb.ts +19780 -0
- package/src/providers/cursor/proto/agent.proto +4533 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor-pi-args.d.ts +119 -0
- package/src/providers/cursor-pi-args.ts +187 -0
- package/src/providers/cursor.d.ts +72 -0
- package/src/providers/cursor.ts +3396 -0
- package/src/providers/dashscope-token-plan-headers.d.ts +57 -0
- package/src/providers/dashscope-token-plan-headers.ts +84 -0
- package/src/providers/error-message.d.ts +27 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.d.ts +40 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.d.ts +27 -0
- package/src/providers/gitlab-duo.ts +393 -0
- package/src/providers/google-auth.d.ts +26 -0
- package/src/providers/google-auth.ts +262 -0
- package/src/providers/google-gemini-cli.d.ts +75 -0
- package/src/providers/google-gemini-cli.ts +969 -0
- package/src/providers/google-gemini-headers.d.ts +43 -0
- package/src/providers/google-gemini-headers.ts +100 -0
- package/src/providers/google-shared.d.ts +183 -0
- package/src/providers/google-shared.ts +1105 -0
- package/src/providers/google-types.d.ts +138 -0
- package/src/providers/google-types.ts +167 -0
- package/src/providers/google-vertex.d.ts +11 -0
- package/src/providers/google-vertex.ts +124 -0
- package/src/providers/google.d.ts +4 -0
- package/src/providers/google.ts +41 -0
- package/src/providers/grammar.d.ts +1 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.d.ts +27 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/kiro-api-key.d.ts +50 -0
- package/src/providers/kiro-api-key.ts +786 -0
- package/src/providers/kiro-codewhisperer.d.ts +11 -0
- package/src/providers/kiro-codewhisperer.ts +600 -0
- package/src/providers/mock.ts +526 -0
- package/src/providers/ollama.d.ts +41 -0
- package/src/providers/ollama.ts +645 -0
- package/src/providers/openai-anthropic-shim.d.ts +31 -0
- package/src/providers/openai-anthropic-shim.ts +156 -0
- package/src/providers/openai-bounded-rate-limits.d.ts +3 -0
- package/src/providers/openai-bounded-rate-limits.ts +57 -0
- package/src/providers/openai-chat-server-schema.ts +254 -0
- package/src/providers/openai-chat-server.ts +724 -0
- package/src/providers/openai-codex/constants.d.ts +26 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.d.ts +50 -0
- package/src/providers/openai-codex/request-transformer.ts +219 -0
- package/src/providers/openai-codex/response-handler.d.ts +18 -0
- package/src/providers/openai-codex/response-handler.ts +111 -0
- package/src/providers/openai-codex-responses.d.ts +71 -0
- package/src/providers/openai-codex-responses.ts +3288 -0
- package/src/providers/openai-completions-compat.d.ts +6 -0
- package/src/providers/openai-completions-compat.ts +6 -0
- package/src/providers/openai-completions.d.ts +35 -0
- package/src/providers/openai-completions.ts +2294 -0
- package/src/providers/openai-opencodex-responses.ts +174 -0
- package/src/providers/openai-request-transform.d.ts +4 -0
- package/src/providers/openai-request-transform.ts +136 -0
- package/src/providers/openai-responses-server-schema.ts +290 -0
- package/src/providers/openai-responses-server.ts +1268 -0
- package/src/providers/openai-responses-shared.d.ts +106 -0
- package/src/providers/openai-responses-shared.ts +1253 -0
- package/src/providers/openai-responses.d.ts +37 -0
- package/src/providers/openai-responses.ts +989 -0
- package/src/providers/pi-native-client.d.ts +29 -0
- package/src/providers/pi-native-client.ts +243 -0
- package/src/providers/pi-native-server.ts +488 -0
- package/src/providers/register-builtins.d.ts +59 -0
- package/src/providers/register-builtins.ts +544 -0
- package/src/providers/synthetic.d.ts +26 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.d.ts +33 -0
- package/src/providers/transform-messages.ts +408 -0
- package/src/providers/vision-guard.d.ts +8 -0
- package/src/providers/vision-guard.ts +31 -0
- package/src/rate-limit-utils.d.ts +19 -0
- package/src/rate-limit-utils.ts +102 -0
- package/src/stream.d.ts +45 -0
- package/src/stream.ts +1306 -0
- package/src/types.d.ts +1073 -0
- package/src/types.ts +1305 -0
- package/src/usage/claude.ts +449 -0
- package/src/usage/gemini.ts +250 -0
- package/src/usage/github-copilot.ts +421 -0
- package/src/usage/google-antigravity.ts +201 -0
- package/src/usage/grok-cli.ts +259 -0
- package/src/usage/kimi.ts +285 -0
- package/src/usage/minimax-code.ts +31 -0
- package/src/usage/openai-codex.ts +503 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/zai.ts +247 -0
- package/src/usage.ts +190 -0
- package/src/utils/abort.d.ts +19 -0
- package/src/utils/abort.ts +51 -0
- package/src/utils/anthropic-auth.ts +95 -0
- package/src/utils/block-symbols.d.ts +6 -0
- package/src/utils/block-symbols.ts +11 -0
- package/src/utils/discovery/antigravity.ts +275 -0
- package/src/utils/discovery/codex.ts +362 -0
- package/src/utils/discovery/cursor.ts +388 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +4 -0
- package/src/utils/discovery/openai-compatible.ts +379 -0
- package/src/utils/event-stream.d.ts +41 -0
- package/src/utils/event-stream.ts +269 -0
- package/src/utils/fallback-transport.d.ts +110 -0
- package/src/utils/fallback-transport.ts +411 -0
- package/src/utils/fireworks-model-id.d.ts +10 -0
- package/src/utils/fireworks-model-id.ts +30 -0
- package/src/utils/foundry.d.ts +11 -0
- package/src/utils/foundry.ts +18 -0
- package/src/utils/h2-fetch.ts +60 -0
- package/src/utils/http-inspector.d.ts +59 -0
- package/src/utils/http-inspector.ts +380 -0
- package/src/utils/idle-iterator.d.ts +122 -0
- package/src/utils/idle-iterator.ts +410 -0
- package/src/utils/json-parse.d.ts +98 -0
- package/src/utils/json-parse.ts +607 -0
- package/src/utils/oauth/alibaba-token-plan.ts +60 -0
- package/src/utils/oauth/anthropic.ts +233 -0
- package/src/utils/oauth/api-key-login.ts +98 -0
- package/src/utils/oauth/api-key-validation.ts +344 -0
- package/src/utils/oauth/bizrouter.ts +15 -0
- package/src/utils/oauth/callback-server.d.ts +80 -0
- package/src/utils/oauth/callback-server.ts +359 -0
- package/src/utils/oauth/cerebras.ts +16 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/commandcode.ts +17 -0
- package/src/utils/oauth/cursor.ts +157 -0
- package/src/utils/oauth/deepinfra.ts +15 -0
- package/src/utils/oauth/deepseek.ts +53 -0
- package/src/utils/oauth/firepass.ts +24 -0
- package/src/utils/oauth/fireworks.ts +15 -0
- package/src/utils/oauth/fugu.ts +15 -0
- package/src/utils/oauth/github-copilot.d.ts +38 -0
- package/src/utils/oauth/github-copilot.ts +362 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -0
- package/src/utils/oauth/glm-zcode.d.ts +71 -0
- package/src/utils/oauth/glm-zcode.ts +433 -0
- package/src/utils/oauth/google-antigravity.ts +200 -0
- package/src/utils/oauth/google-gemini-cli.ts +256 -0
- package/src/utils/oauth/google-oauth-shared.ts +110 -0
- package/src/utils/oauth/huggingface.ts +62 -0
- package/src/utils/oauth/index.ts +558 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.d.ts +17 -0
- package/src/utils/oauth/kimi.ts +275 -0
- package/src/utils/oauth/kiro.ts +448 -0
- package/src/utils/oauth/litellm.ts +47 -0
- package/src/utils/oauth/lm-studio.ts +38 -0
- package/src/utils/oauth/mara.ts +16 -0
- package/src/utils/oauth/minimax-code.ts +78 -0
- package/src/utils/oauth/moonshot.ts +16 -0
- package/src/utils/oauth/nanogpt.ts +15 -0
- package/src/utils/oauth/nvidia.ts +70 -0
- package/src/utils/oauth/oauth.html +199 -0
- package/src/utils/oauth/ollama-cloud.ts +28 -0
- package/src/utils/oauth/ollama.ts +47 -0
- package/src/utils/oauth/openai-codex.ts +299 -0
- package/src/utils/oauth/opencode.ts +49 -0
- package/src/utils/oauth/opengateway.ts +15 -0
- package/src/utils/oauth/openrouter.ts +16 -0
- package/src/utils/oauth/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +225 -0
- package/src/utils/oauth/pkce.ts +18 -0
- package/src/utils/oauth/qianfan.ts +58 -0
- package/src/utils/oauth/qwen-portal.ts +60 -0
- package/src/utils/oauth/sglang.ts +42 -0
- package/src/utils/oauth/synthetic.ts +15 -0
- package/src/utils/oauth/tavily.ts +46 -0
- package/src/utils/oauth/together.ts +16 -0
- package/src/utils/oauth/types.d.ts +56 -0
- package/src/utils/oauth/types.ts +122 -0
- package/src/utils/oauth/venice.ts +59 -0
- package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
- package/src/utils/oauth/vllm.ts +42 -0
- package/src/utils/oauth/xai.ts +246 -0
- package/src/utils/oauth/xiaomi.ts +199 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +15 -0
- package/src/utils/overflow.ts +275 -0
- package/src/utils/parse-bind.ts +81 -0
- package/src/utils/provider-response.d.ts +6 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/provider-safety-stop.ts +8 -0
- package/src/utils/proxy.d.ts +7 -0
- package/src/utils/proxy.ts +652 -0
- package/src/utils/retry-after.d.ts +3 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry-budget.d.ts +1 -0
- package/src/utils/retry-budget.ts +4 -0
- package/src/utils/retry.d.ts +29 -0
- package/src/utils/retry.ts +67 -0
- package/src/utils/schema/CONSTRAINTS.md +164 -0
- package/src/utils/schema/adapt.d.ts +24 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.d.ts +30 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.d.ts +11 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.d.ts +10 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.d.ts +4 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.d.ts +49 -0
- package/src/utils/schema/fields.ts +190 -0
- package/src/utils/schema/index.d.ts +14 -0
- package/src/utils/schema/index.ts +14 -0
- package/src/utils/schema/json-schema-validator.d.ts +12 -0
- package/src/utils/schema/json-schema-validator.ts +577 -0
- package/src/utils/schema/meta-validator.d.ts +2 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.d.ts +93 -0
- package/src/utils/schema/normalize.ts +1588 -0
- package/src/utils/schema/root-combinator.d.ts +12 -0
- package/src/utils/schema/root-combinator.ts +143 -0
- package/src/utils/schema/spill.d.ts +8 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.d.ts +25 -0
- package/src/utils/schema/stamps.ts +97 -0
- package/src/utils/schema/types.d.ts +4 -0
- package/src/utils/schema/types.ts +11 -0
- package/src/utils/schema/wire.d.ts +54 -0
- package/src/utils/schema/wire.ts +213 -0
- package/src/utils/schema/zod-decontaminate.d.ts +31 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -0
- package/src/utils/sse-debug.d.ts +10 -0
- package/src/utils/sse-debug.ts +289 -0
- package/src/utils/tool-call-healing.d.ts +80 -0
- package/src/utils/tool-call-healing.ts +298 -0
- package/src/utils/tool-choice-capability.d.ts +57 -0
- package/src/utils/tool-choice-capability.ts +633 -0
- package/src/utils/tool-choice.d.ts +50 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1080 -0
- package/src/utils.d.ts +117 -0
- package/src/utils.ts +523 -0
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy provider module loading.
|
|
3
|
+
*
|
|
4
|
+
* Each provider module is loaded only when its stream function is first called.
|
|
5
|
+
* This avoids eagerly importing heavy SDK dependencies (e.g., @anthropic-ai/sdk,
|
|
6
|
+
* openai) at startup. The loaded module promise is cached so subsequent calls
|
|
7
|
+
* reuse the same import.
|
|
8
|
+
*
|
|
9
|
+
* stream.ts imports its provider stream functions from this module (see the
|
|
10
|
+
* lazy wrappers below), so this file IS the main streaming path's provider
|
|
11
|
+
* loader: heavy SDKs stay out of the CLI startup parse graph.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type {
|
|
15
|
+
Api,
|
|
16
|
+
AssistantMessage,
|
|
17
|
+
AssistantMessageEvent,
|
|
18
|
+
AssistantMessageEventStream,
|
|
19
|
+
Context,
|
|
20
|
+
Model,
|
|
21
|
+
OptionsForApi,
|
|
22
|
+
} from "../types";
|
|
23
|
+
import { type AbortSourceTracker, createAbortSourceTracker } from "../utils/abort";
|
|
24
|
+
import { AssistantMessageEventStream as EventStreamImpl } from "../utils/event-stream";
|
|
25
|
+
import { transportFailureFacts } from "../utils/fallback-transport";
|
|
26
|
+
import {
|
|
27
|
+
FirstEventTimeoutError,
|
|
28
|
+
getProviderFirstEventTimeoutFallbackMs,
|
|
29
|
+
getStreamFirstEventTimeoutMs,
|
|
30
|
+
getStreamIdleTimeoutMs,
|
|
31
|
+
iterateWithIdleTimeout,
|
|
32
|
+
} from "../utils/idle-iterator";
|
|
33
|
+
import type { BedrockOptions } from "./amazon-bedrock";
|
|
34
|
+
import type { AnthropicOptions } from "./anthropic";
|
|
35
|
+
import type { AzureOpenAIResponsesOptions } from "./azure-openai-responses";
|
|
36
|
+
import type { CursorOptions } from "./cursor";
|
|
37
|
+
import type { GoogleOptions } from "./google";
|
|
38
|
+
import type { GoogleGeminiCliOptions } from "./google-gemini-cli";
|
|
39
|
+
import type { GoogleVertexOptions } from "./google-vertex";
|
|
40
|
+
import type { KiroCodeWhispererOptions } from "./kiro-codewhisperer";
|
|
41
|
+
import type { OllamaChatOptions } from "./ollama";
|
|
42
|
+
import type { OpenAICodexResponsesOptions } from "./openai-codex-responses";
|
|
43
|
+
import type { OpenAICompletionsOptions } from "./openai-completions";
|
|
44
|
+
import type { OpenAIResponsesOptions } from "./openai-responses";
|
|
45
|
+
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Lazy provider module shape
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
interface LazyProviderModule<TApi extends Api> {
|
|
51
|
+
stream: (model: Model<TApi>, context: Context, options: OptionsForApi<TApi>) => AsyncIterable<AssistantMessageEvent>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Lazy runtime descriptor for a built-in provider implementation.
|
|
56
|
+
*
|
|
57
|
+
* The registry stores descriptors with an erased module type because each
|
|
58
|
+
* provider's stream options are intentionally different. Callers narrow the
|
|
59
|
+
* loaded module at the single API dispatch boundary instead of forcing
|
|
60
|
+
* distributive variance through the collection type.
|
|
61
|
+
*/
|
|
62
|
+
export interface ProviderRuntimeDescriptor<TApi extends Api = Api, TModule = unknown> {
|
|
63
|
+
readonly api: TApi;
|
|
64
|
+
readonly load: () => Promise<TModule>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
type ErasedProviderRuntimeDescriptor = ProviderRuntimeDescriptor<Api, any>;
|
|
68
|
+
|
|
69
|
+
interface AnthropicProviderModule {
|
|
70
|
+
streamAnthropic: (
|
|
71
|
+
model: Model<"anthropic-messages">,
|
|
72
|
+
context: Context,
|
|
73
|
+
options: AnthropicOptions,
|
|
74
|
+
) => AssistantMessageEventStream;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
interface AzureOpenAIResponsesProviderModule {
|
|
78
|
+
streamAzureOpenAIResponses: (
|
|
79
|
+
model: Model<"azure-openai-responses">,
|
|
80
|
+
context: Context,
|
|
81
|
+
options: AzureOpenAIResponsesOptions,
|
|
82
|
+
) => AssistantMessageEventStream;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface GoogleProviderModule {
|
|
86
|
+
streamGoogle: (
|
|
87
|
+
model: Model<"google-generative-ai">,
|
|
88
|
+
context: Context,
|
|
89
|
+
options: GoogleOptions,
|
|
90
|
+
) => AssistantMessageEventStream;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
interface GoogleGeminiCliProviderModule {
|
|
94
|
+
streamGoogleGeminiCli: (
|
|
95
|
+
model: Model<"google-gemini-cli">,
|
|
96
|
+
context: Context,
|
|
97
|
+
options: GoogleGeminiCliOptions,
|
|
98
|
+
) => AssistantMessageEventStream;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
interface GoogleVertexProviderModule {
|
|
102
|
+
streamGoogleVertex: (
|
|
103
|
+
model: Model<"google-vertex">,
|
|
104
|
+
context: Context,
|
|
105
|
+
options: GoogleVertexOptions,
|
|
106
|
+
) => AssistantMessageEventStream;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
interface OpenAICodexResponsesProviderModule {
|
|
110
|
+
streamOpenAICodexResponses: (
|
|
111
|
+
model: Model<"openai-codex-responses">,
|
|
112
|
+
context: Context,
|
|
113
|
+
options: OpenAICodexResponsesOptions,
|
|
114
|
+
) => AssistantMessageEventStream;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface OpenAICompletionsProviderModule {
|
|
118
|
+
streamOpenAICompletions: (
|
|
119
|
+
model: Model<"openai-completions">,
|
|
120
|
+
context: Context,
|
|
121
|
+
options: OpenAICompletionsOptions,
|
|
122
|
+
) => AssistantMessageEventStream;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
interface OpenAIResponsesProviderModule {
|
|
126
|
+
streamOpenAIResponses: (
|
|
127
|
+
model: Model<"openai-responses">,
|
|
128
|
+
context: Context,
|
|
129
|
+
options: OpenAIResponsesOptions,
|
|
130
|
+
) => AssistantMessageEventStream;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
interface OllamaProviderModule {
|
|
134
|
+
streamOllama: (
|
|
135
|
+
model: Model<"ollama-chat">,
|
|
136
|
+
context: Context,
|
|
137
|
+
options: OllamaChatOptions,
|
|
138
|
+
) => AssistantMessageEventStream;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
interface CursorProviderModule {
|
|
142
|
+
streamCursor: (
|
|
143
|
+
model: Model<"cursor-agent">,
|
|
144
|
+
context: Context,
|
|
145
|
+
options: CursorOptions,
|
|
146
|
+
) => AssistantMessageEventStream;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
interface BedrockProviderModule {
|
|
150
|
+
streamBedrock: (
|
|
151
|
+
model: Model<"bedrock-converse-stream">,
|
|
152
|
+
context: Context,
|
|
153
|
+
options: BedrockOptions,
|
|
154
|
+
) => AssistantMessageEventStream;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
interface KiroCodeWhispererProviderModule {
|
|
158
|
+
streamKiroCodeWhisperer: (
|
|
159
|
+
model: Model<"kiro-codewhisperer-stream">,
|
|
160
|
+
context: Context,
|
|
161
|
+
options: KiroCodeWhispererOptions,
|
|
162
|
+
) => AssistantMessageEventStream;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
// Module-level lazy promise caches
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
let anthropicProviderModulePromise: Promise<LazyProviderModule<"anthropic-messages">> | undefined;
|
|
170
|
+
let azureOpenAIResponsesProviderModulePromise: Promise<LazyProviderModule<"azure-openai-responses">> | undefined;
|
|
171
|
+
let googleProviderModulePromise: Promise<LazyProviderModule<"google-generative-ai">> | undefined;
|
|
172
|
+
let googleGeminiCliProviderModulePromise: Promise<LazyProviderModule<"google-gemini-cli">> | undefined;
|
|
173
|
+
let googleVertexProviderModulePromise: Promise<LazyProviderModule<"google-vertex">> | undefined;
|
|
174
|
+
let openAICodexResponsesProviderModulePromise: Promise<LazyProviderModule<"openai-codex-responses">> | undefined;
|
|
175
|
+
let openAICompletionsProviderModulePromise: Promise<LazyProviderModule<"openai-completions">> | undefined;
|
|
176
|
+
let openAIResponsesProviderModulePromise: Promise<LazyProviderModule<"openai-responses">> | undefined;
|
|
177
|
+
let ollamaProviderModulePromise: Promise<LazyProviderModule<"ollama-chat">> | undefined;
|
|
178
|
+
let cursorProviderModulePromise: Promise<LazyProviderModule<"cursor-agent">> | undefined;
|
|
179
|
+
let bedrockProviderModuleOverride: LazyProviderModule<"bedrock-converse-stream"> | undefined;
|
|
180
|
+
let kiroCodeWhispererProviderModulePromise: Promise<LazyProviderModule<"kiro-codewhisperer-stream">> | undefined;
|
|
181
|
+
let bedrockProviderModulePromise: Promise<LazyProviderModule<"bedrock-converse-stream">> | undefined;
|
|
182
|
+
|
|
183
|
+
export function setBedrockProviderModule(module: BedrockProviderModule): void {
|
|
184
|
+
bedrockProviderModuleOverride = {
|
|
185
|
+
stream: module.streamBedrock,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
// Stream forwarding / error helpers
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
|
|
193
|
+
const LAZY_STREAM_IDLE_TIMEOUT_ERROR = "Provider stream stalled while waiting for the next event";
|
|
194
|
+
const LAZY_STREAM_FIRST_EVENT_TIMEOUT_ERROR = "Provider stream timed out while waiting for the first event";
|
|
195
|
+
const LAZY_STREAM_NON_PROGRESS_EVENT_TYPES = new Set(["start", "toolChoiceIncapability"]);
|
|
196
|
+
|
|
197
|
+
function hasFinalResult(
|
|
198
|
+
source: AsyncIterable<AssistantMessageEvent>,
|
|
199
|
+
): source is AsyncIterable<AssistantMessageEvent> & { result(): Promise<AssistantMessage> } {
|
|
200
|
+
return typeof (source as { result?: unknown }).result === "function";
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Per-provider default overrides for the lazy stream watchdogs. These widen the
|
|
205
|
+
* floor used when neither caller option nor env var pins a value. The env vars
|
|
206
|
+
* (`PI_STREAM_FIRST_EVENT_TIMEOUT_MS`, `PI_STREAM_IDLE_TIMEOUT_MS`) still take
|
|
207
|
+
* precedence; `StreamOptions.streamFirstEventTimeoutMs` / `streamIdleTimeoutMs`
|
|
208
|
+
* still trump everything.
|
|
209
|
+
*/
|
|
210
|
+
interface LazyStreamLimits {
|
|
211
|
+
defaultFirstEventTimeoutMs?: number;
|
|
212
|
+
defaultIdleTimeoutMs?: number;
|
|
213
|
+
/** The provider already watches raw transport events, which this normalized wrapper cannot observe. */
|
|
214
|
+
providerOwnsWatchdog?: boolean;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const PROVIDER_OWNED_STREAM_WATCHDOG: LazyStreamLimits = {
|
|
218
|
+
providerOwnsWatchdog: true,
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Cloud Code Assist (google-gemini-cli / google-antigravity) routinely takes
|
|
223
|
+
* longer than the global 100s default to emit its first SSE event when serving
|
|
224
|
+
* the heavier Gemini 3.x Pro tiers at high thinking levels. Bump the first-event
|
|
225
|
+
* floor to five minutes so duke et al. stop seeing spurious "stream timed out
|
|
226
|
+
* while waiting for the first event" aborts on legitimate cold reasoning starts.
|
|
227
|
+
* The steady-state idle watchdog stays on the global default since the upstream
|
|
228
|
+
* emits thinking tokens frequently once it gets going.
|
|
229
|
+
*/
|
|
230
|
+
const GOOGLE_GEMINI_CLI_LAZY_STREAM_LIMITS: LazyStreamLimits = {
|
|
231
|
+
defaultFirstEventTimeoutMs: 300_000,
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Resolves the first-event timeout fallback for the outer lazy-stream watchdog.
|
|
236
|
+
* A configured wrapper-specific fallback (from `LazyStreamLimits`) always wins;
|
|
237
|
+
* otherwise providers known to have slow first events use the same centralized
|
|
238
|
+
* fallback as their inner provider-level watchdog. Returns `undefined` for
|
|
239
|
+
* providers that should use the shared default.
|
|
240
|
+
*/
|
|
241
|
+
export function resolveLazyStreamFirstEventFallbackMs(
|
|
242
|
+
provider: string,
|
|
243
|
+
configuredFallbackMs?: number,
|
|
244
|
+
): number | undefined {
|
|
245
|
+
if (configuredFallbackMs !== undefined) return configuredFallbackMs;
|
|
246
|
+
return getProviderFirstEventTimeoutFallbackMs(provider);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function forwardStream<TApi extends Api>(
|
|
250
|
+
target: EventStreamImpl,
|
|
251
|
+
source: AsyncIterable<AssistantMessageEvent>,
|
|
252
|
+
model: Model<TApi>,
|
|
253
|
+
options: OptionsForApi<TApi>,
|
|
254
|
+
abortTracker: AbortSourceTracker,
|
|
255
|
+
onStreamCreated?: () => void,
|
|
256
|
+
limits?: LazyStreamLimits,
|
|
257
|
+
): void {
|
|
258
|
+
(async () => {
|
|
259
|
+
try {
|
|
260
|
+
let admitted = false;
|
|
261
|
+
const markAdmission = (): void => {
|
|
262
|
+
if (admitted) return;
|
|
263
|
+
admitted = true;
|
|
264
|
+
onStreamCreated?.();
|
|
265
|
+
};
|
|
266
|
+
let watchedSource = source;
|
|
267
|
+
if (!limits?.providerOwnsWatchdog) {
|
|
268
|
+
const idleTimeoutMs = options.streamIdleTimeoutMs ?? getStreamIdleTimeoutMs(limits?.defaultIdleTimeoutMs);
|
|
269
|
+
const firstEventFallbackMs = resolveLazyStreamFirstEventFallbackMs(
|
|
270
|
+
model.provider,
|
|
271
|
+
limits?.defaultFirstEventTimeoutMs,
|
|
272
|
+
);
|
|
273
|
+
watchedSource = iterateWithIdleTimeout(source, {
|
|
274
|
+
idleTimeoutMs,
|
|
275
|
+
firstItemTimeoutMs:
|
|
276
|
+
options.streamFirstEventTimeoutMs ??
|
|
277
|
+
getStreamFirstEventTimeoutMs(idleTimeoutMs, firstEventFallbackMs),
|
|
278
|
+
errorMessage: LAZY_STREAM_IDLE_TIMEOUT_ERROR,
|
|
279
|
+
firstItemErrorMessage: LAZY_STREAM_FIRST_EVENT_TIMEOUT_ERROR,
|
|
280
|
+
onIdle: () => abortTracker.abortLocally(new Error(LAZY_STREAM_IDLE_TIMEOUT_ERROR)),
|
|
281
|
+
onFirstItemTimeout: () =>
|
|
282
|
+
abortTracker.abortLocally(new FirstEventTimeoutError(LAZY_STREAM_FIRST_EVENT_TIMEOUT_ERROR)),
|
|
283
|
+
abortSignal: options.signal,
|
|
284
|
+
// Synthetic starts and tool-capability negotiation are control-plane events,
|
|
285
|
+
// not model progress. Keep the first-event window active until assistant output
|
|
286
|
+
// arrives instead of switching early to the shorter idle timeout.
|
|
287
|
+
isProgressItem: event => {
|
|
288
|
+
if (!event || typeof event !== "object") return true;
|
|
289
|
+
const eventType = (event as { type?: unknown }).type;
|
|
290
|
+
return typeof eventType !== "string" || !LAZY_STREAM_NON_PROGRESS_EVENT_TYPES.has(eventType);
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
for await (const event of watchedSource) {
|
|
296
|
+
if (event.type !== "start") markAdmission();
|
|
297
|
+
target.push(event);
|
|
298
|
+
}
|
|
299
|
+
if (hasFinalResult(source)) {
|
|
300
|
+
target.end(await source.result());
|
|
301
|
+
} else {
|
|
302
|
+
target.end();
|
|
303
|
+
}
|
|
304
|
+
} catch (error) {
|
|
305
|
+
const stopReason = abortTracker.wasCallerAbort() ? "aborted" : "error";
|
|
306
|
+
const message = createLazyLoadErrorMessage(model, error, stopReason);
|
|
307
|
+
target.push({ type: "error", reason: stopReason, error: message });
|
|
308
|
+
target.end(message);
|
|
309
|
+
}
|
|
310
|
+
})();
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function createLazyLoadErrorMessage<TApi extends Api>(
|
|
314
|
+
model: Model<TApi>,
|
|
315
|
+
error: unknown,
|
|
316
|
+
stopReason: Extract<AssistantMessage["stopReason"], "aborted" | "error"> = "error",
|
|
317
|
+
): AssistantMessage {
|
|
318
|
+
const transportFailure = transportFailureFacts(error);
|
|
319
|
+
return {
|
|
320
|
+
role: "assistant",
|
|
321
|
+
content: [],
|
|
322
|
+
api: model.api,
|
|
323
|
+
provider: model.provider,
|
|
324
|
+
model: model.id,
|
|
325
|
+
usage: {
|
|
326
|
+
input: 0,
|
|
327
|
+
output: 0,
|
|
328
|
+
cacheRead: 0,
|
|
329
|
+
cacheWrite: 0,
|
|
330
|
+
totalTokens: 0,
|
|
331
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
|
|
332
|
+
},
|
|
333
|
+
stopReason,
|
|
334
|
+
errorMessage:
|
|
335
|
+
stopReason === "aborted" ? "Request was aborted" : error instanceof Error ? error.message : String(error),
|
|
336
|
+
...(transportFailure ? { transportFailure } : {}),
|
|
337
|
+
timestamp: Date.now(),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// ---------------------------------------------------------------------------
|
|
342
|
+
// Generic lazy stream factory
|
|
343
|
+
// ---------------------------------------------------------------------------
|
|
344
|
+
|
|
345
|
+
function createLazyStream<TApi extends Api>(
|
|
346
|
+
loadModule: () => Promise<LazyProviderModule<TApi>>,
|
|
347
|
+
limits?: LazyStreamLimits,
|
|
348
|
+
): (
|
|
349
|
+
model: Model<TApi>,
|
|
350
|
+
context: Context,
|
|
351
|
+
options: OptionsForApi<TApi>,
|
|
352
|
+
onStreamCreated?: () => void,
|
|
353
|
+
) => EventStreamImpl {
|
|
354
|
+
return (model, context, options, onStreamCreated) => {
|
|
355
|
+
let abortTracker: AbortSourceTracker | undefined;
|
|
356
|
+
const outer = new EventStreamImpl(() =>
|
|
357
|
+
abortTracker?.abortLocally(new Error("Provider stream consumer stopped before completion")),
|
|
358
|
+
);
|
|
359
|
+
const streamOptions = (options ?? {}) as OptionsForApi<TApi>;
|
|
360
|
+
|
|
361
|
+
loadModule()
|
|
362
|
+
.then(module => {
|
|
363
|
+
abortTracker = createAbortSourceTracker(streamOptions.signal);
|
|
364
|
+
const providerOptions = { ...streamOptions, signal: abortTracker.requestSignal } as OptionsForApi<TApi>;
|
|
365
|
+
const inner = module.stream(model, context, providerOptions);
|
|
366
|
+
forwardStream(outer, inner, model, streamOptions, abortTracker, onStreamCreated, limits);
|
|
367
|
+
})
|
|
368
|
+
.catch(error => {
|
|
369
|
+
const message = createLazyLoadErrorMessage(model, error);
|
|
370
|
+
outer.push({ type: "error", reason: "error", error: message });
|
|
371
|
+
outer.end(message);
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
return outer;
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// ---------------------------------------------------------------------------
|
|
379
|
+
// Module loaders (one per provider, cached via ||=)
|
|
380
|
+
// ---------------------------------------------------------------------------
|
|
381
|
+
|
|
382
|
+
function loadAnthropicProviderModule(): Promise<LazyProviderModule<"anthropic-messages">> {
|
|
383
|
+
anthropicProviderModulePromise ||= Promise.resolve().then(() => {
|
|
384
|
+
const provider = require("./anthropic") as AnthropicProviderModule;
|
|
385
|
+
return { stream: provider.streamAnthropic };
|
|
386
|
+
});
|
|
387
|
+
return anthropicProviderModulePromise;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
function loadAzureOpenAIResponsesProviderModule(): Promise<LazyProviderModule<"azure-openai-responses">> {
|
|
391
|
+
azureOpenAIResponsesProviderModulePromise ||= Promise.resolve().then(() => {
|
|
392
|
+
const provider = require("./azure-openai-responses") as AzureOpenAIResponsesProviderModule;
|
|
393
|
+
return { stream: provider.streamAzureOpenAIResponses };
|
|
394
|
+
});
|
|
395
|
+
return azureOpenAIResponsesProviderModulePromise;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function loadGoogleProviderModule(): Promise<LazyProviderModule<"google-generative-ai">> {
|
|
399
|
+
googleProviderModulePromise ||= Promise.resolve().then(() => {
|
|
400
|
+
const provider = require("./google") as GoogleProviderModule;
|
|
401
|
+
return { stream: provider.streamGoogle };
|
|
402
|
+
});
|
|
403
|
+
return googleProviderModulePromise;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
function loadGoogleGeminiCliProviderModule(): Promise<LazyProviderModule<"google-gemini-cli">> {
|
|
407
|
+
googleGeminiCliProviderModulePromise ||= Promise.resolve().then(() => {
|
|
408
|
+
const provider = require("./google-gemini-cli") as GoogleGeminiCliProviderModule;
|
|
409
|
+
return { stream: provider.streamGoogleGeminiCli };
|
|
410
|
+
});
|
|
411
|
+
return googleGeminiCliProviderModulePromise;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
function loadGoogleVertexProviderModule(): Promise<LazyProviderModule<"google-vertex">> {
|
|
415
|
+
googleVertexProviderModulePromise ||= Promise.resolve().then(() => {
|
|
416
|
+
const provider = require("./google-vertex") as GoogleVertexProviderModule;
|
|
417
|
+
return { stream: provider.streamGoogleVertex };
|
|
418
|
+
});
|
|
419
|
+
return googleVertexProviderModulePromise;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
function loadOpenAICodexResponsesProviderModule(): Promise<LazyProviderModule<"openai-codex-responses">> {
|
|
423
|
+
openAICodexResponsesProviderModulePromise ||= Promise.resolve().then(() => {
|
|
424
|
+
const provider = require("./openai-codex-responses") as OpenAICodexResponsesProviderModule;
|
|
425
|
+
return { stream: provider.streamOpenAICodexResponses };
|
|
426
|
+
});
|
|
427
|
+
return openAICodexResponsesProviderModulePromise;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
function loadOpenAICompletionsProviderModule(): Promise<LazyProviderModule<"openai-completions">> {
|
|
431
|
+
openAICompletionsProviderModulePromise ||= Promise.resolve().then(() => {
|
|
432
|
+
const provider = require("./openai-completions") as OpenAICompletionsProviderModule;
|
|
433
|
+
return { stream: provider.streamOpenAICompletions };
|
|
434
|
+
});
|
|
435
|
+
return openAICompletionsProviderModulePromise;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
function loadOpenAIResponsesProviderModule(): Promise<LazyProviderModule<"openai-responses">> {
|
|
439
|
+
openAIResponsesProviderModulePromise ||= Promise.resolve().then(() => {
|
|
440
|
+
const provider = require("./openai-responses") as OpenAIResponsesProviderModule;
|
|
441
|
+
return { stream: provider.streamOpenAIResponses };
|
|
442
|
+
});
|
|
443
|
+
return openAIResponsesProviderModulePromise;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
function loadOllamaProviderModule(): Promise<LazyProviderModule<"ollama-chat">> {
|
|
447
|
+
ollamaProviderModulePromise ||= Promise.resolve().then(() => {
|
|
448
|
+
const provider = require("./ollama") as OllamaProviderModule;
|
|
449
|
+
return { stream: provider.streamOllama };
|
|
450
|
+
});
|
|
451
|
+
return ollamaProviderModulePromise;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
function loadCursorProviderModule(): Promise<LazyProviderModule<"cursor-agent">> {
|
|
455
|
+
cursorProviderModulePromise ||= Promise.resolve().then(() => {
|
|
456
|
+
const provider = require("./cursor") as CursorProviderModule;
|
|
457
|
+
return { stream: provider.streamCursor };
|
|
458
|
+
});
|
|
459
|
+
return cursorProviderModulePromise;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
function loadBedrockProviderModule(): Promise<LazyProviderModule<"bedrock-converse-stream">> {
|
|
463
|
+
if (bedrockProviderModuleOverride) {
|
|
464
|
+
return Promise.resolve(bedrockProviderModuleOverride);
|
|
465
|
+
}
|
|
466
|
+
bedrockProviderModulePromise ||= Promise.resolve().then(() => {
|
|
467
|
+
const provider = require("./amazon-bedrock") as BedrockProviderModule;
|
|
468
|
+
return { stream: provider.streamBedrock };
|
|
469
|
+
});
|
|
470
|
+
return bedrockProviderModulePromise;
|
|
471
|
+
}
|
|
472
|
+
function loadKiroCodeWhispererProviderModule(): Promise<LazyProviderModule<"kiro-codewhisperer-stream">> {
|
|
473
|
+
kiroCodeWhispererProviderModulePromise ||= Promise.resolve().then(() => {
|
|
474
|
+
const provider = require("./kiro-codewhisperer") as KiroCodeWhispererProviderModule;
|
|
475
|
+
return { stream: provider.streamKiroCodeWhisperer };
|
|
476
|
+
});
|
|
477
|
+
return kiroCodeWhispererProviderModulePromise;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Lazy provider descriptors used by core consumers that need to inspect or
|
|
482
|
+
* prewarm a provider without importing its implementation at startup.
|
|
483
|
+
*/
|
|
484
|
+
export const PROVIDER_RUNTIME_DESCRIPTORS: readonly ProviderRuntimeDescriptor<Api, unknown>[] = [
|
|
485
|
+
{ api: "anthropic-messages", load: loadAnthropicProviderModule },
|
|
486
|
+
{ api: "azure-openai-responses", load: loadAzureOpenAIResponsesProviderModule },
|
|
487
|
+
{ api: "google-generative-ai", load: loadGoogleProviderModule },
|
|
488
|
+
{ api: "google-gemini-cli", load: loadGoogleGeminiCliProviderModule },
|
|
489
|
+
{ api: "google-vertex", load: loadGoogleVertexProviderModule },
|
|
490
|
+
{ api: "openai-codex-responses", load: loadOpenAICodexResponsesProviderModule },
|
|
491
|
+
{ api: "openai-completions", load: loadOpenAICompletionsProviderModule },
|
|
492
|
+
{ api: "openai-responses", load: loadOpenAIResponsesProviderModule },
|
|
493
|
+
{ api: "ollama-chat", load: loadOllamaProviderModule },
|
|
494
|
+
{ api: "cursor-agent", load: loadCursorProviderModule },
|
|
495
|
+
{ api: "kiro-codewhisperer-stream", load: loadKiroCodeWhispererProviderModule },
|
|
496
|
+
{ api: "bedrock-converse-stream", load: loadBedrockProviderModule },
|
|
497
|
+
] as readonly ErasedProviderRuntimeDescriptor[];
|
|
498
|
+
|
|
499
|
+
const providerRuntimeDescriptorMap = new Map<Api, ErasedProviderRuntimeDescriptor>(
|
|
500
|
+
PROVIDER_RUNTIME_DESCRIPTORS.map(descriptor => [descriptor.api, descriptor]),
|
|
501
|
+
);
|
|
502
|
+
|
|
503
|
+
/** Return the lazy descriptor for a built-in API, if one is registered. */
|
|
504
|
+
export function getProviderRuntimeDescriptor<TApi extends Api>(
|
|
505
|
+
api: TApi,
|
|
506
|
+
): ProviderRuntimeDescriptor<TApi, unknown> | undefined {
|
|
507
|
+
return providerRuntimeDescriptorMap.get(api) as ProviderRuntimeDescriptor<TApi, unknown> | undefined;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// ---------------------------------------------------------------------------
|
|
511
|
+
// Lazy stream function exports
|
|
512
|
+
//
|
|
513
|
+
// Provider registry code imports these wrappers so the concrete provider modules
|
|
514
|
+
// are loaded on first use instead of during package initialization.
|
|
515
|
+
// ---------------------------------------------------------------------------
|
|
516
|
+
|
|
517
|
+
export const streamAnthropic = createLazyStream(loadAnthropicProviderModule, PROVIDER_OWNED_STREAM_WATCHDOG);
|
|
518
|
+
export const streamAzureOpenAIResponses = createLazyStream(
|
|
519
|
+
loadAzureOpenAIResponsesProviderModule,
|
|
520
|
+
PROVIDER_OWNED_STREAM_WATCHDOG,
|
|
521
|
+
);
|
|
522
|
+
export const streamGoogle = createLazyStream(loadGoogleProviderModule);
|
|
523
|
+
export const streamGoogleGeminiCli = createLazyStream(
|
|
524
|
+
loadGoogleGeminiCliProviderModule,
|
|
525
|
+
GOOGLE_GEMINI_CLI_LAZY_STREAM_LIMITS,
|
|
526
|
+
);
|
|
527
|
+
export const streamGoogleVertex = createLazyStream(loadGoogleVertexProviderModule);
|
|
528
|
+
export const streamOpenAICodexResponses = createLazyStream(
|
|
529
|
+
loadOpenAICodexResponsesProviderModule,
|
|
530
|
+
PROVIDER_OWNED_STREAM_WATCHDOG,
|
|
531
|
+
);
|
|
532
|
+
export const streamOpenAICompletions = createLazyStream(
|
|
533
|
+
loadOpenAICompletionsProviderModule,
|
|
534
|
+
PROVIDER_OWNED_STREAM_WATCHDOG,
|
|
535
|
+
);
|
|
536
|
+
export const streamOpenAIResponses = createLazyStream(
|
|
537
|
+
loadOpenAIResponsesProviderModule,
|
|
538
|
+
PROVIDER_OWNED_STREAM_WATCHDOG,
|
|
539
|
+
);
|
|
540
|
+
export const streamCursor = createLazyStream(loadCursorProviderModule);
|
|
541
|
+
export const streamOllama = createLazyStream(loadOllamaProviderModule);
|
|
542
|
+
|
|
543
|
+
export const streamBedrock = createLazyStream(loadBedrockProviderModule);
|
|
544
|
+
export const streamKiroCodeWhisperer = createLazyStream(loadKiroCodeWhispererProviderModule);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthetic provider - wraps OpenAI or Anthropic API based on format setting.
|
|
3
|
+
*
|
|
4
|
+
* Synthetic offers both OpenAI-compatible and Anthropic-compatible APIs:
|
|
5
|
+
* - OpenAI: https://api.synthetic.new/openai/v1/chat/completions
|
|
6
|
+
* - Anthropic: https://api.synthetic.new/anthropic/v1/messages
|
|
7
|
+
*
|
|
8
|
+
* @see https://dev.synthetic.new/docs/api/overview
|
|
9
|
+
*/
|
|
10
|
+
import type { Api, Context, Model } from "../types";
|
|
11
|
+
import type { AssistantMessageEventStream } from "../utils/event-stream";
|
|
12
|
+
import { type OpenAIAnthropicApiFormat, type OpenAIAnthropicShimOptions } from "./openai-anthropic-shim";
|
|
13
|
+
export type SyntheticApiFormat = OpenAIAnthropicApiFormat;
|
|
14
|
+
export interface SyntheticOptions extends OpenAIAnthropicShimOptions {
|
|
15
|
+
/** API format: "openai" or "anthropic". Default: "openai" */
|
|
16
|
+
format?: SyntheticApiFormat;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Stream from Synthetic, routing to either OpenAI or Anthropic API based on format.
|
|
20
|
+
* Returns synchronously like other providers - async processing happens internally.
|
|
21
|
+
*/
|
|
22
|
+
export declare function streamSynthetic(model: Model<"openai-completions">, context: Context, options?: SyntheticOptions): AssistantMessageEventStream;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a model is a Synthetic model.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isSyntheticModel(model: Model<Api>): boolean;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthetic provider - wraps OpenAI or Anthropic API based on format setting.
|
|
3
|
+
*
|
|
4
|
+
* Synthetic offers both OpenAI-compatible and Anthropic-compatible APIs:
|
|
5
|
+
* - OpenAI: https://api.synthetic.new/openai/v1/chat/completions
|
|
6
|
+
* - Anthropic: https://api.synthetic.new/anthropic/v1/messages
|
|
7
|
+
*
|
|
8
|
+
* @see https://dev.synthetic.new/docs/api/overview
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { Api, Context, Model } from "../types";
|
|
12
|
+
import type { AssistantMessageEventStream } from "../utils/event-stream";
|
|
13
|
+
import {
|
|
14
|
+
type OpenAIAnthropicApiFormat,
|
|
15
|
+
type OpenAIAnthropicShimOptions,
|
|
16
|
+
streamOpenAIAnthropicShim,
|
|
17
|
+
} from "./openai-anthropic-shim";
|
|
18
|
+
|
|
19
|
+
export type SyntheticApiFormat = OpenAIAnthropicApiFormat;
|
|
20
|
+
|
|
21
|
+
const SYNTHETIC_NEW_BASE_URL = "https://api.synthetic.new/openai/v1";
|
|
22
|
+
const SYNTHETIC_NEW_ANTHROPIC_BASE_URL = "https://api.synthetic.new/anthropic";
|
|
23
|
+
|
|
24
|
+
export interface SyntheticOptions extends OpenAIAnthropicShimOptions {
|
|
25
|
+
/** API format: "openai" or "anthropic". Default: "openai" */
|
|
26
|
+
format?: SyntheticApiFormat;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Stream from Synthetic, routing to either OpenAI or Anthropic API based on format.
|
|
31
|
+
* Returns synchronously like other providers - async processing happens internally.
|
|
32
|
+
*/
|
|
33
|
+
export function streamSynthetic(
|
|
34
|
+
model: Model<"openai-completions">,
|
|
35
|
+
context: Context,
|
|
36
|
+
options?: SyntheticOptions,
|
|
37
|
+
): AssistantMessageEventStream {
|
|
38
|
+
return streamOpenAIAnthropicShim(model, context, options, {
|
|
39
|
+
anthropicBaseUrl: SYNTHETIC_NEW_ANTHROPIC_BASE_URL,
|
|
40
|
+
openaiBaseUrl: SYNTHETIC_NEW_BASE_URL,
|
|
41
|
+
defaultFormat: "openai",
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Check if a model is a Synthetic model.
|
|
47
|
+
*/
|
|
48
|
+
export function isSyntheticModel(model: Model<Api>): boolean {
|
|
49
|
+
return model.provider === "synthetic";
|
|
50
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Api, AssistantMessage, Message, Model } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Normalize tool call ID for cross-provider compatibility.
|
|
4
|
+
* OpenAI Responses API generates IDs that are 450+ chars with special characters like `|`.
|
|
5
|
+
* Anthropic APIs require IDs matching ^[a-zA-Z0-9_-]+$ (max 64 chars).
|
|
6
|
+
*
|
|
7
|
+
* For aborted/errored turns, this function:
|
|
8
|
+
* - Preserves tool call structure (unlike converting to text summaries)
|
|
9
|
+
* - Injects synthetic "aborted" tool results
|
|
10
|
+
* - Adds a <turn-aborted> guidance marker for the model
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Detect directly adjacent private thinking blocks inside one assistant message's
|
|
14
|
+
* content. `thinking` and `redacted_thinking` are one adjacency class: the
|
|
15
|
+
* Anthropic wire contract rejects a replayed assistant turn where two such blocks
|
|
16
|
+
* sit next to each other with no intervening `tool_use`/`text` block (#4416).
|
|
17
|
+
*
|
|
18
|
+
* This is a pure, allocation-free predicate used by defense-in-depth diagnostics
|
|
19
|
+
* (issue #4443): the write-time transcript assertion (coding-agent persistence)
|
|
20
|
+
* and the stream-assembler SSE diagnostic (anthropic stream completion). It never
|
|
21
|
+
* inspects block payloads — only the block-type sequence — so it cannot leak
|
|
22
|
+
* thinking text, signatures, or credentials.
|
|
23
|
+
*
|
|
24
|
+
* Blocks separated by any non-private block (`tool_use`, `text`, …) are ordinary
|
|
25
|
+
* interleaved-thinking shape and return `false`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function hasAdjacentPrivateThinkingBlocks(content: {
|
|
28
|
+
type: string;
|
|
29
|
+
}[]): boolean;
|
|
30
|
+
export declare function transformMessages<TApi extends Api>(messages: Message[], model: Model<TApi>, normalizeToolCallId?: (id: string, model: Model<TApi>, source: AssistantMessage) => string, options?: {
|
|
31
|
+
repairLatestAssistantThinking?: boolean;
|
|
32
|
+
repairAllAssistantThinking?: boolean;
|
|
33
|
+
}): Message[];
|