@prometheus-ai/ai 0.5.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 +7 -0
- package/README.md +1184 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +66 -0
- package/dist/types/auth-broker/index.d.ts +6 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +101 -0
- package/dist/types/auth-broker/server.d.ts +32 -0
- package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
- package/dist/types/auth-broker/types.d.ts +107 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +412 -0
- package/dist/types/auth-gateway/http.d.ts +39 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +36 -0
- package/dist/types/auth-gateway/types.d.ts +117 -0
- package/dist/types/auth-storage.d.ts +762 -0
- package/dist/types/index.d.ts +49 -0
- package/dist/types/model-cache.d.ts +17 -0
- package/dist/types/model-manager.d.ts +64 -0
- package/dist/types/model-thinking.d.ts +100 -0
- package/dist/types/models.d.ts +12 -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 +50 -0
- package/dist/types/provider-models/google.d.ts +24 -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 +323 -0
- package/dist/types/provider-models/special.d.ts +16 -0
- package/dist/types/providers/amazon-bedrock.d.ts +38 -0
- package/dist/types/providers/anthropic-client.d.ts +99 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +465 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic-wire.d.ts +262 -0
- package/dist/types/providers/anthropic.d.ts +206 -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 +15 -0
- package/dist/types/providers/cursor/gen/agent_pb.d.ts +13022 -0
- package/dist/types/providers/cursor.d.ts +43 -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 +24 -0
- package/dist/types/providers/google-gemini-cli.d.ts +81 -0
- package/dist/types/providers/google-gemini-headers.d.ts +18 -0
- package/dist/types/providers/google-shared.d.ts +171 -0
- package/dist/types/providers/google-types.d.ts +138 -0
- package/dist/types/providers/google-vertex.d.ts +7 -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/mock.d.ts +173 -0
- package/dist/types/providers/ollama.d.ts +6 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +817 -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 +49 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +17 -0
- package/dist/types/providers/openai-codex-responses.d.ts +67 -0
- package/dist/types/providers/openai-completions-compat.d.ts +27 -0
- package/dist/types/providers/openai-completions.d.ts +54 -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 +105 -0
- package/dist/types/providers/openai-responses.d.ts +66 -0
- package/dist/types/providers/prometheus-native-client.d.ts +13 -0
- package/dist/types/providers/prometheus-native-server.d.ts +68 -0
- package/dist/types/providers/register-builtins.d.ts +31 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +12 -0
- package/dist/types/providers/vision-guard.d.ts +20 -0
- package/dist/types/providers/xai-responses.d.ts +23 -0
- package/dist/types/rate-limit-utils.d.ts +19 -0
- package/dist/types/stream.d.ts +28 -0
- package/dist/types/types.d.ts +819 -0
- package/dist/types/usage/claude.d.ts +4 -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/kimi.d.ts +2 -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 +260 -0
- package/dist/types/utils/abort.d.ts +19 -0
- package/dist/types/utils/abortable-iterator.d.ts +4 -0
- package/dist/types/utils/anthropic-auth.d.ts +35 -0
- package/dist/types/utils/discovery/antigravity.d.ts +61 -0
- package/dist/types/utils/discovery/codex.d.ts +38 -0
- package/dist/types/utils/discovery/cursor.d.ts +23 -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 +72 -0
- package/dist/types/utils/event-stream.d.ts +28 -0
- package/dist/types/utils/fireworks-model-id.d.ts +10 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/http-inspector.d.ts +31 -0
- package/dist/types/utils/idle-iterator.d.ts +78 -0
- package/dist/types/utils/json-parse.d.ts +37 -0
- package/dist/types/utils/oauth/__tests__/xai-oauth.test.d.ts +1 -0
- package/dist/types/utils/oauth/alibaba-coding-plan.d.ts +18 -0
- package/dist/types/utils/oauth/anthropic.d.ts +22 -0
- package/dist/types/utils/oauth/api-key-login.d.ts +35 -0
- package/dist/types/utils/oauth/api-key-validation.d.ts +27 -0
- package/dist/types/utils/oauth/callback-server.d.ts +57 -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/cursor.d.ts +15 -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/github-copilot.d.ts +38 -0
- package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -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 +38 -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 +21 -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/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/openrouter.d.ts +1 -0
- package/dist/types/utils/oauth/parallel.d.ts +17 -0
- package/dist/types/utils/oauth/perplexity.d.ts +9 -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/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 +44 -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/wafer.d.ts +2 -0
- package/dist/types/utils/oauth/xai-oauth.d.ts +60 -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/oauth/zhipu.d.ts +18 -0
- package/dist/types/utils/overflow.d.ts +54 -0
- package/dist/types/utils/parse-bind.d.ts +23 -0
- package/dist/types/utils/provider-response.d.ts +3 -0
- package/dist/types/utils/request-debug.d.ts +29 -0
- package/dist/types/utils/retry-after.d.ts +3 -0
- package/dist/types/utils/retry.d.ts +26 -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 +13 -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/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 +53 -0
- package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
- package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
- package/dist/types/utils/sse-debug.d.ts +10 -0
- package/dist/types/utils/stream-markup-healing.d.ts +80 -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 +28 -0
- package/package.json +142 -0
- package/src/api-registry.ts +96 -0
- package/src/auth-broker/client.ts +358 -0
- package/src/auth-broker/index.ts +6 -0
- package/src/auth-broker/refresher.ts +117 -0
- package/src/auth-broker/remote-store.ts +637 -0
- package/src/auth-broker/server.ts +644 -0
- package/src/auth-broker/snapshot-cache.ts +174 -0
- package/src/auth-broker/types.ts +130 -0
- package/src/auth-broker/wire-schemas.ts +200 -0
- package/src/auth-gateway/http.ts +194 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +822 -0
- package/src/auth-gateway/types.ts +143 -0
- package/src/auth-storage.ts +4608 -0
- package/src/index.ts +54 -0
- package/src/model-cache.ts +129 -0
- package/src/model-manager.ts +469 -0
- package/src/model-thinking.ts +756 -0
- package/src/models.json +60287 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +56 -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 +364 -0
- package/src/provider-models/google.ts +88 -0
- package/src/provider-models/index.ts +5 -0
- package/src/provider-models/ollama.ts +153 -0
- package/src/provider-models/openai-compat.ts +2904 -0
- package/src/provider-models/special.ts +67 -0
- package/src/providers/amazon-bedrock.ts +873 -0
- package/src/providers/anthropic-client.ts +318 -0
- package/src/providers/anthropic-messages-server-schema.ts +243 -0
- package/src/providers/anthropic-messages-server.ts +681 -0
- package/src/providers/anthropic-wire.ts +268 -0
- package/src/providers/anthropic.ts +3106 -0
- package/src/providers/aws-credentials.ts +501 -0
- package/src/providers/aws-eventstream.ts +185 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +361 -0
- package/src/providers/cursor/gen/agent_pb.ts +15274 -0
- package/src/providers/cursor/proto/agent.proto +3526 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor.ts +2621 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.ts +372 -0
- package/src/providers/google-auth.ts +252 -0
- package/src/providers/google-gemini-cli.ts +809 -0
- package/src/providers/google-gemini-headers.ts +41 -0
- package/src/providers/google-shared.ts +917 -0
- package/src/providers/google-types.ts +167 -0
- package/src/providers/google-vertex.ts +91 -0
- package/src/providers/google.ts +41 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/mock.ts +496 -0
- package/src/providers/ollama.ts +644 -0
- package/src/providers/openai-anthropic-shim.ts +138 -0
- package/src/providers/openai-chat-server-schema.ts +252 -0
- package/src/providers/openai-chat-server.ts +647 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.ts +161 -0
- package/src/providers/openai-codex/response-handler.ts +81 -0
- package/src/providers/openai-codex-responses.ts +3027 -0
- package/src/providers/openai-completions-compat.ts +320 -0
- package/src/providers/openai-completions.ts +2002 -0
- package/src/providers/openai-responses-server-schema.ts +290 -0
- package/src/providers/openai-responses-server.ts +1183 -0
- package/src/providers/openai-responses-shared.ts +956 -0
- package/src/providers/openai-responses.ts +679 -0
- package/src/providers/prometheus-native-client.ts +228 -0
- package/src/providers/prometheus-native-server.ts +212 -0
- package/src/providers/register-builtins.ts +457 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +382 -0
- package/src/providers/vision-guard.ts +52 -0
- package/src/providers/xai-responses.ts +82 -0
- package/src/rate-limit-utils.ts +91 -0
- package/src/stream.ts +1068 -0
- package/src/types.ts +965 -0
- package/src/usage/claude.ts +482 -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/kimi.ts +271 -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 +185 -0
- package/src/utils/abort.ts +51 -0
- package/src/utils/abortable-iterator.ts +69 -0
- package/src/utils/anthropic-auth.ts +93 -0
- package/src/utils/discovery/antigravity.ts +261 -0
- package/src/utils/discovery/codex.ts +371 -0
- package/src/utils/discovery/cursor.ts +306 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +4 -0
- package/src/utils/discovery/openai-compatible.ts +224 -0
- package/src/utils/event-stream.ts +142 -0
- package/src/utils/fireworks-model-id.ts +30 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/http-inspector.ts +176 -0
- package/src/utils/idle-iterator.ts +273 -0
- package/src/utils/json-parse.ts +182 -0
- package/src/utils/oauth/__tests__/xai-oauth.test.ts +107 -0
- package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
- package/src/utils/oauth/anthropic.ts +273 -0
- package/src/utils/oauth/api-key-login.ts +87 -0
- package/src/utils/oauth/api-key-validation.ts +92 -0
- package/src/utils/oauth/callback-server.ts +276 -0
- package/src/utils/oauth/cerebras.ts +16 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/cursor.ts +157 -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/github-copilot.ts +362 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -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 +502 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.ts +254 -0
- package/src/utils/oauth/litellm.ts +47 -0
- package/src/utils/oauth/lm-studio.ts +38 -0
- package/src/utils/oauth/minimax-code.ts +80 -0
- package/src/utils/oauth/moonshot.ts +23 -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/openrouter.ts +20 -0
- package/src/utils/oauth/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +206 -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/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.ts +102 -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 +40 -0
- package/src/utils/oauth/wafer.ts +50 -0
- package/src/utils/oauth/xai-oauth.ts +342 -0
- package/src/utils/oauth/xiaomi.ts +194 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +15 -0
- package/src/utils/oauth/zhipu.ts +60 -0
- package/src/utils/overflow.ts +137 -0
- package/src/utils/parse-bind.ts +54 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/request-debug.ts +336 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry.ts +54 -0
- package/src/utils/schema/CONSTRAINTS.md +164 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.ts +191 -0
- package/src/utils/schema/index.ts +13 -0
- package/src/utils/schema/json-schema-validator.ts +577 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +1588 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +97 -0
- package/src/utils/schema/types.ts +10 -0
- package/src/utils/schema/wire.ts +293 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -0
- package/src/utils/sdk-stream-timeout.ts +43 -0
- package/src/utils/sse-debug.ts +289 -0
- package/src/utils/stream-markup-healing.ts +612 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1024 -0
- package/src/utils.ts +166 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Responses HTTP wire-format ↔ prometheus Context bridge for the auth-gateway.
|
|
3
|
+
*
|
|
4
|
+
* Inbound: parses `POST /v1/responses` request bodies into a {@link ParsedRequest}.
|
|
5
|
+
* Outbound: encodes prometheus's {@link AssistantMessage} (and event stream) back into
|
|
6
|
+
* the documented `response.*` SSE taxonomy or the non-streaming JSON shape.
|
|
7
|
+
*
|
|
8
|
+
* Spec: https://platform.openai.com/docs/api-reference/responses
|
|
9
|
+
* Inverse direction (source-of-truth for item shapes): ../../providers/openai-responses.ts
|
|
10
|
+
*/
|
|
11
|
+
import type { AuthGatewayParsedRequest as ParsedRequest } from "../auth-gateway/types";
|
|
12
|
+
import type { AssistantMessage, AssistantMessageEventStream } from "../types";
|
|
13
|
+
export type { ParsedRequest };
|
|
14
|
+
export declare function parseRequest(body: unknown, headers?: Headers): ParsedRequest;
|
|
15
|
+
export declare function formatError(status: number, type: string, message: string): Response;
|
|
16
|
+
export declare function encodeResponse(message: AssistantMessage, requestedModelId: string): Record<string, unknown>;
|
|
17
|
+
export declare function encodeStream(events: AssistantMessageEventStream, requestedModelId: string): ReadableStream<Uint8Array>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type OpenAI from "openai";
|
|
2
|
+
import type { ResponseInput, ResponseInputContent, ResponseOutputItem } from "openai/resources/responses/responses";
|
|
3
|
+
import { type Api, type AssistantMessage, type ImageContent, type Model, type ServiceTier, type StopReason, type StreamOptions, type TextContent, type TextSignatureV1, type ToolResultMessage } from "../types";
|
|
4
|
+
import type { AssistantMessageEventStream } from "../utils/event-stream";
|
|
5
|
+
export declare const OPENAI_RESPONSES_PROGRESS_EVENT_TYPES: ReadonlySet<string>;
|
|
6
|
+
export declare function isOpenAIResponsesProgressEvent(event: unknown): boolean;
|
|
7
|
+
export declare function encodeTextSignatureV1(id: string, phase?: TextSignatureV1["phase"]): string;
|
|
8
|
+
export declare function parseTextSignature(signature: string | undefined): {
|
|
9
|
+
id: string;
|
|
10
|
+
phase?: TextSignatureV1["phase"];
|
|
11
|
+
} | undefined;
|
|
12
|
+
export declare function encodeResponsesToolCallId(callId: string, itemId: string | null | undefined): string;
|
|
13
|
+
export declare function normalizeResponsesToolCallIdForTransform(id: string, model?: Model<Api>, source?: AssistantMessage): string;
|
|
14
|
+
export declare function collectKnownCallIds(messages: ResponseInput): Set<string>;
|
|
15
|
+
/** Scan replay items for call_ids that were originally custom tool calls. */
|
|
16
|
+
export declare function collectCustomCallIds(messages: ResponseInput): Set<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Convert orphan `function_call_output` / `custom_tool_call_output` items —
|
|
19
|
+
* those whose `call_id` has no matching preceding `function_call` /
|
|
20
|
+
* `custom_tool_call` in the same input — into assistant text notes.
|
|
21
|
+
*
|
|
22
|
+
* The Responses API rejects unpaired outputs with
|
|
23
|
+
* `400 No tool call found for function call output with call_id …`. Orphans
|
|
24
|
+
* sneak in through two paths today:
|
|
25
|
+
*
|
|
26
|
+
* - A previous turn's `providerPayload` snapshot replaces the input array via
|
|
27
|
+
* the `dt: false` splice (see {@link convertConversationMessages}), wiping
|
|
28
|
+
* the matching `function_call` while leaving the matching
|
|
29
|
+
* `function_call_output` queued in a later `toolResult`.
|
|
30
|
+
* - A locally-rejected tool call (argument-validation failure, hook reject,
|
|
31
|
+
* aborted turn before the call streamed) produces a tool result without a
|
|
32
|
+
* `function_call` ever landing in any persisted provider payload.
|
|
33
|
+
*
|
|
34
|
+
* Dropping the result loses information the model needs to recover; sending
|
|
35
|
+
* it as-is 400s the request. Folding it into an assistant `message` preserves
|
|
36
|
+
* the payload (call_id + truncated output) while staying within the Responses
|
|
37
|
+
* input grammar. Matches the behavior of {@link transformRequestBody} in the
|
|
38
|
+
* codex provider — issue #1351 / regression of #472.
|
|
39
|
+
*/
|
|
40
|
+
export declare function repairOrphanResponsesToolOutputs(input: ResponseInput): ResponseInput;
|
|
41
|
+
export declare function convertResponsesInputContent(content: string | Array<TextContent | ImageContent>, supportsImages: boolean): ResponseInputContent[] | undefined;
|
|
42
|
+
export declare function convertResponsesAssistantMessage<TApi extends Api>(assistantMsg: AssistantMessage, model: Model<TApi>, msgIndex: number, knownCallIds: Set<string>, includeThinkingSignatures?: boolean, customCallIds?: Set<string>): ResponseInput;
|
|
43
|
+
export declare function appendResponsesToolResultMessages<TApi extends Api>(messages: ResponseInput, toolResult: ToolResultMessage, model: Model<TApi>, strictResponsesPairing: boolean, knownCallIds: ReadonlySet<string>, customCallIds?: ReadonlySet<string>): void;
|
|
44
|
+
export interface ProcessResponsesStreamOptions {
|
|
45
|
+
onFirstToken?: () => void;
|
|
46
|
+
onOutputItemDone?: (item: ResponseOutputItem) => void;
|
|
47
|
+
}
|
|
48
|
+
export declare function processResponsesStream<TApi extends Api>(openaiStream: AsyncIterable<OpenAI.Responses.ResponseStreamEvent>, output: AssistantMessage, stream: AssistantMessageEventStream, model: Model<TApi>, options?: ProcessResponsesStreamOptions): Promise<void>;
|
|
49
|
+
export declare function mapOpenAIResponsesStopReason(status: OpenAI.Responses.ResponseStatus | undefined): StopReason;
|
|
50
|
+
/** Initial empty `AssistantMessage` that streaming providers accumulate into. */
|
|
51
|
+
export declare function createInitialResponsesAssistantMessage(api: Api, provider: string, modelId: string): AssistantMessage;
|
|
52
|
+
/** Extension fields we add on top of `ResponseCreateParamsStreaming` across the Responses-family providers. */
|
|
53
|
+
export type ResponsesSamplingParamsExtras = {
|
|
54
|
+
top_p?: number;
|
|
55
|
+
top_k?: number;
|
|
56
|
+
min_p?: number;
|
|
57
|
+
presence_penalty?: number;
|
|
58
|
+
repetition_penalty?: number;
|
|
59
|
+
};
|
|
60
|
+
type CommonResponsesParams = OpenAI.Responses.ResponseCreateParamsStreaming & ResponsesSamplingParamsExtras;
|
|
61
|
+
type CommonSamplingOptions = Pick<StreamOptions, "temperature" | "topP" | "topK" | "minP" | "presencePenalty" | "repetitionPenalty" | "maxTokens"> & {
|
|
62
|
+
serviceTier?: ServiceTier;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Apply the common `StreamOptions` → Responses sampling-parameter mapping (max output tokens,
|
|
66
|
+
* temperature, top-p/k, min-p, presence/repetition penalties, service tier). Mutates `params`.
|
|
67
|
+
*
|
|
68
|
+
* `max_output_tokens` is suppressed when {@link Model.omitMaxOutputTokens} is `true`, so
|
|
69
|
+
* proxies (notably Ollama) that forward to upstream APIs with an unknown output-token cap
|
|
70
|
+
* can let the upstream apply its own default instead of 400-ing on `maxTokens` values that
|
|
71
|
+
* reflect the model's context window rather than the upstream output limit.
|
|
72
|
+
*/
|
|
73
|
+
export declare function applyCommonResponsesSamplingParams<P extends CommonResponsesParams>(params: P, options: CommonSamplingOptions | undefined, model: Pick<Model, "provider" | "omitMaxOutputTokens">): void;
|
|
74
|
+
type ReasoningOptions = {
|
|
75
|
+
reasoning?: string;
|
|
76
|
+
reasoningSummary?: "auto" | "detailed" | "concise" | null;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Apply reasoning-related Responses parameters: enable encrypted reasoning content for replay,
|
|
80
|
+
* set effort/summary when requested, and otherwise inject the GPT-5 "Juice: 0" no-reasoning hack.
|
|
81
|
+
* Mutates `params` and may push a developer message into `messages`.
|
|
82
|
+
*
|
|
83
|
+
* @param omitReasoningEffort - When `true`, suppresses `params.reasoning.effort` from the wire
|
|
84
|
+
* body. Set by `xai-responses.ts` via {@link OpenAIResponsesOptions.omitReasoningEffort} for
|
|
85
|
+
* xAI Grok models that return HTTP 400 on any `reasoning.effort` value (e.g. grok-build,
|
|
86
|
+
* grok-4.20-0309-reasoning). When `true` and `options.reasoning` is set but
|
|
87
|
+
* `options.reasoningSummary` is absent, `params.reasoning` is intentionally omitted from the
|
|
88
|
+
* wire body entirely — these models reason natively at their own internal default effort level
|
|
89
|
+
* without needing explicit activation. Callers that pass `options.reasoning` for such models
|
|
90
|
+
* should expect this documented downgrade: the model will reason, but at its default effort.
|
|
91
|
+
*/
|
|
92
|
+
export declare function applyResponsesReasoningParams<P extends OpenAI.Responses.ResponseCreateParamsStreaming>(params: P, model: Model<Api>, options: ReasoningOptions | undefined, messages: ResponseInput, mapEffort?: (effort: string) => string, includeEncryptedReasoning?: boolean, omitReasoningEffort?: boolean): void;
|
|
93
|
+
/** Populate `output.usage` from a Responses-API `response.usage` payload. Does not invoke `calculateCost`. */
|
|
94
|
+
export declare function populateResponsesUsageFromResponse(output: AssistantMessage, usage: {
|
|
95
|
+
input_tokens?: number | null;
|
|
96
|
+
output_tokens?: number | null;
|
|
97
|
+
total_tokens?: number | null;
|
|
98
|
+
input_tokens_details?: {
|
|
99
|
+
cached_tokens?: number | null;
|
|
100
|
+
} | null;
|
|
101
|
+
output_tokens_details?: {
|
|
102
|
+
reasoning_tokens?: number | null;
|
|
103
|
+
} | null;
|
|
104
|
+
} | null | undefined): void;
|
|
105
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Tool as OpenAITool } from "openai/resources/responses/responses";
|
|
2
|
+
import type { Model, ServiceTier, StreamFunction, StreamOptions, Tool, ToolChoice } from "../types";
|
|
3
|
+
import { type OpenAIResponsesToolChoice } from "../utils/tool-choice";
|
|
4
|
+
export declare function normalizeOpenAIResponsesPromptCacheKey(sessionId: string | undefined): string | undefined;
|
|
5
|
+
export interface OpenAIResponsesOptions extends StreamOptions {
|
|
6
|
+
reasoning?: "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
7
|
+
reasoningSummary?: "auto" | "detailed" | "concise" | null;
|
|
8
|
+
serviceTier?: ServiceTier;
|
|
9
|
+
toolChoice?: ToolChoice;
|
|
10
|
+
/**
|
|
11
|
+
* Enforce strict tool call/result pairing when building Responses API inputs.
|
|
12
|
+
* Azure OpenAI and GitHub Copilot Responses paths require tool results to match prior tool calls.
|
|
13
|
+
*/
|
|
14
|
+
strictResponsesPairing?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Pass `include: ["reasoning.encrypted_content"]` on requests when the
|
|
17
|
+
* model supports reasoning. Default: true (preserves current behavior).
|
|
18
|
+
* Set to false when the upstream Responses endpoint rejects replayed
|
|
19
|
+
* encrypted reasoning (e.g., xAI Grok under SuperGrok OAuth).
|
|
20
|
+
*/
|
|
21
|
+
includeEncryptedReasoning?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Strip `type: "reasoning"` items from replayed conversation history
|
|
24
|
+
* before they hit the wire. Default: false (preserves current behavior).
|
|
25
|
+
* Set to true when the upstream rejects replayed reasoning wrappers.
|
|
26
|
+
*/
|
|
27
|
+
filterReasoningHistory?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Suppress the `reasoning.effort` wire param when set, even if
|
|
30
|
+
* `options.reasoning` is requested. Default: false. xAI Grok models
|
|
31
|
+
* outside the effort-capable allowlist 400 with "Model X does not
|
|
32
|
+
* support parameter reasoningEffort" — the xAI Responses adapter sets
|
|
33
|
+
* this when the target model is not in GROK_EFFORT_CAPABLE_PREFIXES.
|
|
34
|
+
*/
|
|
35
|
+
omitReasoningEffort?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Extra request headers merged onto the underlying client's
|
|
38
|
+
* defaultHeaders. Used by adapter wrappers to inject provider-specific
|
|
39
|
+
* routing or cache hints.
|
|
40
|
+
*/
|
|
41
|
+
headers?: Record<string, string>;
|
|
42
|
+
/**
|
|
43
|
+
* Extra body fields merged into the Responses request payload. Used by
|
|
44
|
+
* adapter wrappers to inject provider-specific body keys (e.g.,
|
|
45
|
+
* prompt_cache_key for prompt-cache routing).
|
|
46
|
+
*/
|
|
47
|
+
extraBody?: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generate function for OpenAI Responses API
|
|
51
|
+
*/
|
|
52
|
+
export declare const streamOpenAIResponses: StreamFunction<"openai-responses">;
|
|
53
|
+
export declare function getOpenAIResponsesCacheSessionId(options: Pick<OpenAIResponsesOptions, "cacheRetention" | "sessionId" | "promptCacheKey"> | undefined): string | undefined;
|
|
54
|
+
export declare function supportsDeveloperRole(modelOrBaseUrl: Pick<Model, "provider" | "baseUrl"> | string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Whether this model should get the OpenAI custom-tool grammar variant
|
|
57
|
+
* for `apply_patch`. The generated model catalog sets
|
|
58
|
+
* `model.applyPatchToolType` for first-party GPT-5 Responses models; this
|
|
59
|
+
* runtime path only consumes that metadata.
|
|
60
|
+
* @internal Exported for tests.
|
|
61
|
+
*/
|
|
62
|
+
export declare function supportsFreeformApplyPatch(model: Model<"openai-responses">): boolean;
|
|
63
|
+
/** @internal Exported for tests. */
|
|
64
|
+
export declare function mapOpenAIResponsesToolChoiceForTools(choice: ToolChoice | undefined, tools: Tool[], model: Model<"openai-responses">): OpenAIResponsesToolChoice;
|
|
65
|
+
/** @internal Exported for tests. */
|
|
66
|
+
export declare function convertTools(tools: Tool[], strictMode: boolean, model: Model<"openai-responses">): OpenAITool[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Api, AssistantMessageEventStream as AssistantMessageEventStreamType, Context, Model, SimpleStreamOptions } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Stream a turn through an `prometheus auth-gateway` over the prometheus-native protocol.
|
|
4
|
+
*
|
|
5
|
+
* The returned {@link AssistantMessageEventStream} receives each parsed
|
|
6
|
+
* `AssistantMessageEvent` verbatim from the gateway; the terminal `done` /
|
|
7
|
+
* `error` event resolves `.result()` automatically via the base class's
|
|
8
|
+
* completion check. Non-streaming consumers just call `.result()` and pay
|
|
9
|
+
* for SSE framing they don't use — that overhead is dominated by provider
|
|
10
|
+
* latency, so we always stream rather than maintaining a parallel
|
|
11
|
+
* non-streaming path.
|
|
12
|
+
*/
|
|
13
|
+
export declare function streamPrometheusNative<TApi extends Api>(model: Model<TApi>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStreamType;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prometheus-native wire format for the auth-gateway.
|
|
3
|
+
*
|
|
4
|
+
* Where the OpenAI / Anthropic / Responses route modules translate foreign
|
|
5
|
+
* wire shapes through Prometheus AI's canonical {@link Context}, this module accepts
|
|
6
|
+
* the canonical shape *directly* — for clients that already speak Prometheus AI
|
|
7
|
+
* (containerized prometheus, the swarm extension, roboprometheus's sidecar auth-gateway).
|
|
8
|
+
* Skipping the wire-format → Context → wire-format round-trip cuts
|
|
9
|
+
* per-request CPU but, more importantly, avoids the quantization that those
|
|
10
|
+
* translations impose on first-class Prometheus AI fields (service tier, cache
|
|
11
|
+
* markers, thinking budgets, tool-choice variants, …).
|
|
12
|
+
*
|
|
13
|
+
* The streaming wire is {@link AssistantMessageEvent} serialized verbatim and
|
|
14
|
+
* SSE-framed. Same type Prometheus AI already produces internally; the client feeds
|
|
15
|
+
* each parsed event straight into `AssistantMessageEventStream.push()` with
|
|
16
|
+
* no translation. Including `partial: AssistantMessage` on every delta is
|
|
17
|
+
* O(N²) in turn length on the wire — acceptable for the loopback / sidecar
|
|
18
|
+
* topology this transport is designed for; provider latency dominates the
|
|
19
|
+
* actual cost.
|
|
20
|
+
*
|
|
21
|
+
* Endpoint contract:
|
|
22
|
+
* POST /v1/prometheus/stream
|
|
23
|
+
* body: { modelId, context, options?, stream? } // `stream` defaults to true
|
|
24
|
+
* 200 SSE: stream of `AssistantMessageEvent` (terminated by `data: [DONE]`)
|
|
25
|
+
* 200 JSON (stream=false): { message: AssistantMessage }
|
|
26
|
+
* 4xx/5xx: { error: { type, message } }
|
|
27
|
+
*/
|
|
28
|
+
import type { AssistantMessageEventStream, Context, SimpleStreamOptions } from "../types";
|
|
29
|
+
export interface PrometheusNativeParsedRequest {
|
|
30
|
+
modelId: string;
|
|
31
|
+
context: Context;
|
|
32
|
+
options: SimpleStreamOptions;
|
|
33
|
+
stream: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Parse a prometheus-native request body. Validation is intentionally minimal — only
|
|
37
|
+
* the shape the gateway itself reads is checked (`modelId`, `context.messages`
|
|
38
|
+
* array, options is an object). Everything downstream is the canonical Prometheus AI
|
|
39
|
+
* type surface; mis-shaped values surface as a `502 upstream_error` from
|
|
40
|
+
* `streamSimple` rather than being re-validated here.
|
|
41
|
+
*
|
|
42
|
+
* Accepts both `{ modelId: string }` and `{ model: { id: string } }` so the
|
|
43
|
+
* existing `streamProxy` client (which sends the full Model object) can target
|
|
44
|
+
* the gateway with only a URL swap.
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseRequest(body: unknown, _headers?: Headers): PrometheusNativeParsedRequest;
|
|
47
|
+
/**
|
|
48
|
+
* Ship every {@link AssistantMessageEvent} verbatim, SSE-framed.
|
|
49
|
+
*
|
|
50
|
+
* No per-event re-shaping: the prometheus-native client is Prometheus AI itself, so the
|
|
51
|
+
* canonical event type IS the wire type. Including the rolling
|
|
52
|
+
* `partial: AssistantMessage` on every delta is quadratic in turn length
|
|
53
|
+
* on the wire, but for the loopback / sidecar topology this transport
|
|
54
|
+
* targets (containerized prometheus → host gateway, roboprometheus slot → prometheus-auth-gateway
|
|
55
|
+
* sidecar) the bandwidth cost is negligible compared to provider latency —
|
|
56
|
+
* and the client gets to feed the events straight into its existing
|
|
57
|
+
* `AssistantMessageEventStream.push()` plumbing with zero translation.
|
|
58
|
+
*/
|
|
59
|
+
export declare function encodeStream(events: AssistantMessageEventStream): ReadableStream<Uint8Array>;
|
|
60
|
+
/**
|
|
61
|
+
* Prometheus-native error envelope:
|
|
62
|
+
* `{ error: { type, message } }`
|
|
63
|
+
*
|
|
64
|
+
* Mirrors OpenAI's outer shape (which clients/SDKs already parse) without the
|
|
65
|
+
* provider-specific status taxonomy — prometheus-native callers consume `type`
|
|
66
|
+
* directly.
|
|
67
|
+
*/
|
|
68
|
+
export declare function formatError(status: number, type: string, message: string): Response;
|
|
@@ -0,0 +1,31 @@
|
|
|
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., openai) at
|
|
6
|
+
* startup. The loaded module promise is cached so subsequent calls
|
|
7
|
+
* reuse the same import.
|
|
8
|
+
*
|
|
9
|
+
* NOTE: stream.ts currently imports providers directly, so this file is not yet
|
|
10
|
+
* wired into the main streaming path. It provides the infrastructure for lazy
|
|
11
|
+
* loading that can be integrated when stream.ts is refactored.
|
|
12
|
+
*/
|
|
13
|
+
import type { AssistantMessageEventStream, Context, Model, OptionsForApi } from "../types";
|
|
14
|
+
import { AssistantMessageEventStream as EventStreamImpl } from "../utils/event-stream";
|
|
15
|
+
import type { BedrockOptions } from "./amazon-bedrock";
|
|
16
|
+
interface BedrockProviderModule {
|
|
17
|
+
streamBedrock: (model: Model<"bedrock-converse-stream">, context: Context, options: BedrockOptions) => AssistantMessageEventStream;
|
|
18
|
+
}
|
|
19
|
+
export declare function setBedrockProviderModule(module: BedrockProviderModule): void;
|
|
20
|
+
export declare const streamAnthropic: (model: Model<"anthropic-messages">, context: Context, options: OptionsForApi<"anthropic-messages">) => EventStreamImpl;
|
|
21
|
+
export declare const streamAzureOpenAIResponses: (model: Model<"azure-openai-responses">, context: Context, options: OptionsForApi<"azure-openai-responses">) => EventStreamImpl;
|
|
22
|
+
export declare const streamGoogle: (model: Model<"google-generative-ai">, context: Context, options: OptionsForApi<"google-generative-ai">) => EventStreamImpl;
|
|
23
|
+
export declare const streamGoogleGeminiCli: (model: Model<"google-gemini-cli">, context: Context, options: OptionsForApi<"google-gemini-cli">) => EventStreamImpl;
|
|
24
|
+
export declare const streamGoogleVertex: (model: Model<"google-vertex">, context: Context, options: OptionsForApi<"google-vertex">) => EventStreamImpl;
|
|
25
|
+
export declare const streamOpenAICodexResponses: (model: Model<"openai-codex-responses">, context: Context, options: OptionsForApi<"openai-codex-responses">) => EventStreamImpl;
|
|
26
|
+
export declare const streamOpenAICompletions: (model: Model<"openai-completions">, context: Context, options: OptionsForApi<"openai-completions">) => EventStreamImpl;
|
|
27
|
+
export declare const streamOpenAIResponses: (model: Model<"openai-responses">, context: Context, options: OptionsForApi<"openai-responses">) => EventStreamImpl;
|
|
28
|
+
export declare const streamCursor: (model: Model<"cursor-agent">, context: Context, options: OptionsForApi<"cursor-agent">) => EventStreamImpl;
|
|
29
|
+
export declare const streamOllama: (model: Model<"ollama-chat">, context: Context, options: OptionsForApi<"ollama-chat">) => EventStreamImpl;
|
|
30
|
+
export declare const streamBedrock: (model: Model<"bedrock-converse-stream">, context: Context, options: OptionsForApi<"bedrock-converse-stream">) => EventStreamImpl;
|
|
31
|
+
export {};
|
|
@@ -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,12 @@
|
|
|
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
|
+
export declare function transformMessages<TApi extends Api>(messages: Message[], model: Model<TApi>, normalizeToolCallId?: (id: string, model: Model<TApi>, source: AssistantMessage) => string): Message[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ImageContent, Model, TextContent } from "../types";
|
|
2
|
+
export declare const NON_VISION_IMAGE_PLACEHOLDER = "[image omitted: model does not support vision]";
|
|
3
|
+
export declare function partitionVisionContent(content: ReadonlyArray<TextContent | ImageContent>, supportsImages: boolean): {
|
|
4
|
+
textBlocks: TextContent[];
|
|
5
|
+
imageBlocks: ImageContent[];
|
|
6
|
+
omittedImages: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function joinTextWithImagePlaceholder(text: string, omittedImages: boolean): string;
|
|
9
|
+
/**
|
|
10
|
+
* Detect known text-only Qwen models served via Alibaba DashScope's consumer
|
|
11
|
+
* `compatible-mode` endpoint that the upstream chat-completions API rejects
|
|
12
|
+
* multimodal content arrays for. The compatible-mode endpoint also serves
|
|
13
|
+
* multimodal Qwen SKUs without `vl` in the id (e.g. `qwen3.7-plus`), so this
|
|
14
|
+
* guard only covers families verified to be text-only for issue #1859:
|
|
15
|
+
* `qwen*-max` and `qwen*-coder*`.
|
|
16
|
+
*
|
|
17
|
+
* Used as a defensive override in `convertMessages` so a misconfigured custom
|
|
18
|
+
* provider (issue #1859) can't drive the request into an unrecoverable 400.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isDashscopeCompatibleModeTextOnlyQwen(model: Model<"openai-completions">): boolean;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { StreamFunction } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* xAI Grok Responses adapter (SuperGrok OAuth path).
|
|
4
|
+
*
|
|
5
|
+
* Three xAI-specific behaviors vs the generic OpenAI Responses adapter:
|
|
6
|
+
*
|
|
7
|
+
* 1. `x-grok-conv-id` header + body `prompt_cache_key` route prompt-cache
|
|
8
|
+
* hits on xAI's edge. Hermes uses both (agent/transports/codex.py:182-193).
|
|
9
|
+
* The header is undocumented by xAI; `previous_response_id` is the
|
|
10
|
+
* documented alternative — switch if xAI deprecates the header.
|
|
11
|
+
* 2. includeEncryptedReasoning=false — xAI's /v1/responses rejects replayed
|
|
12
|
+
* `encrypted_content` blobs minted under SuperGrok OAuth.
|
|
13
|
+
* 3. filterReasoningHistory=true — strip `type: "reasoning"` items from
|
|
14
|
+
* replayed conversation history; the blob inside is non-replayable under
|
|
15
|
+
* OAuth and the wrapper item 404s without it (store=false; server cannot
|
|
16
|
+
* resolve by id).
|
|
17
|
+
*
|
|
18
|
+
* Everything else is the generic OpenAI Responses transport. The xAI bearer
|
|
19
|
+
* token arrives in `options.apiKey` via AuthStorage.getApiKey() upstream, and
|
|
20
|
+
* the xAI base URL (`https://api.x.ai/v1`) arrives via `model.baseUrl` from
|
|
21
|
+
* the provider registry — not routed through this wrapper.
|
|
22
|
+
*/
|
|
23
|
+
export declare const streamXAIResponses: StreamFunction<"openai-responses">;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate limit reason classification and backoff calculation utilities.
|
|
3
|
+
* Ported from opencode-antigravity-auth plugin for consistency.
|
|
4
|
+
*/
|
|
5
|
+
export type RateLimitReason = "QUOTA_EXHAUSTED" | "RATE_LIMIT_EXCEEDED" | "MODEL_CAPACITY_EXHAUSTED" | "SERVER_ERROR" | "UNKNOWN";
|
|
6
|
+
/**
|
|
7
|
+
* Classify a rate-limit error message into a reason category.
|
|
8
|
+
* Priority order: MODEL_CAPACITY > RATE_LIMIT > QUOTA > SERVER_ERROR > UNKNOWN.
|
|
9
|
+
*
|
|
10
|
+
* "resource exhausted" maps to MODEL_CAPACITY (transient, short wait)
|
|
11
|
+
* "quota exceeded" maps to QUOTA_EXHAUSTED (long wait, switch account)
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseRateLimitReason(errorMessage: string): RateLimitReason;
|
|
14
|
+
/**
|
|
15
|
+
* Calculate backoff delay in ms for a given rate limit reason.
|
|
16
|
+
* MODEL_CAPACITY gets jitter to prevent thundering herd.
|
|
17
|
+
*/
|
|
18
|
+
export declare function calculateRateLimitBackoffMs(reason: RateLimitReason): number;
|
|
19
|
+
export declare function isUsageLimitError(errorMessage: string): boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Effort } from "./model-thinking";
|
|
2
|
+
import type { AnthropicOptions } from "./providers/anthropic";
|
|
3
|
+
import type { GoogleOptions } from "./providers/google";
|
|
4
|
+
import type { GoogleGeminiCliOptions } from "./providers/google-gemini-cli";
|
|
5
|
+
import type { GoogleVertexOptions } from "./providers/google-vertex";
|
|
6
|
+
import type { Api, AssistantMessage, Context, Model, OptionsForApi, SimpleStreamOptions, ToolChoice } from "./types";
|
|
7
|
+
import { AssistantMessageEventStream } from "./utils/event-stream";
|
|
8
|
+
/**
|
|
9
|
+
* Get API key for provider from known environment variables, e.g. OPENAI_API_KEY.
|
|
10
|
+
*
|
|
11
|
+
* Will not return API keys for providers that require OAuth tokens.
|
|
12
|
+
* Checks Bun.env, then cwd/.env, then ~/.env.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getEnvApiKey(provider: string): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Enumerate every provider that has an env-var fallback for `getEnvApiKey`.
|
|
17
|
+
* Used by `prometheus auth-broker migrate --include-env` to discover env-sourced keys
|
|
18
|
+
* that should be uploaded to the broker.
|
|
19
|
+
*/
|
|
20
|
+
export declare function listProvidersWithEnvKey(): string[];
|
|
21
|
+
export declare function stream<TApi extends Api>(model: Model<TApi>, context: Context, options?: OptionsForApi<TApi>): AssistantMessageEventStream;
|
|
22
|
+
export declare function complete<TApi extends Api>(model: Model<TApi>, context: Context, options?: OptionsForApi<TApi>): Promise<AssistantMessage>;
|
|
23
|
+
export declare function streamSimple<TApi extends Api>(model: Model<TApi>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;
|
|
24
|
+
export declare function completeSimple<TApi extends Api>(model: Model<TApi>, context: Context, options?: SimpleStreamOptions): Promise<AssistantMessage>;
|
|
25
|
+
export declare const OUTPUT_FALLBACK_BUFFER = 4000;
|
|
26
|
+
export declare const ANTHROPIC_THINKING: Record<Effort, number>;
|
|
27
|
+
export declare function mapAnthropicToolChoice(choice?: ToolChoice): AnthropicOptions["toolChoice"];
|
|
28
|
+
export declare function mapGoogleToolChoice(choice?: ToolChoice): GoogleOptions["toolChoice"] | GoogleGeminiCliOptions["toolChoice"] | GoogleVertexOptions["toolChoice"];
|