jeopi-ai 16.2.13
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 +4347 -0
- package/README.md +1193 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +73 -0
- package/dist/types/auth-broker/discover.d.ts +35 -0
- package/dist/types/auth-broker/index.d.ts +7 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +102 -0
- package/dist/types/auth-broker/server.d.ts +43 -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 +411 -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 +123 -0
- package/dist/types/auth-retry.d.ts +124 -0
- package/dist/types/auth-storage.d.ts +1026 -0
- package/dist/types/dialect/anthropic.d.ts +15 -0
- package/dist/types/dialect/catalog.d.ts +3 -0
- package/dist/types/dialect/coercion.d.ts +23 -0
- package/dist/types/dialect/deepseek.d.ts +14 -0
- package/dist/types/dialect/demotion.d.ts +23 -0
- package/dist/types/dialect/examples.d.ts +2 -0
- package/dist/types/dialect/factory.d.ts +3 -0
- package/dist/types/dialect/fenced-thinking.d.ts +53 -0
- package/dist/types/dialect/gemini.d.ts +17 -0
- package/dist/types/dialect/gemma.d.ts +15 -0
- package/dist/types/dialect/glm.d.ts +9 -0
- package/dist/types/dialect/harmony.d.ts +8 -0
- package/dist/types/dialect/hermes.d.ts +9 -0
- package/dist/types/dialect/history.d.ts +3 -0
- package/dist/types/dialect/index.d.ts +11 -0
- package/dist/types/dialect/inventory.d.ts +12 -0
- package/dist/types/dialect/kimi.d.ts +14 -0
- package/dist/types/dialect/minimax.d.ts +3 -0
- package/dist/types/dialect/owned-stream.d.ts +4 -0
- package/dist/types/dialect/qwen3.d.ts +9 -0
- package/dist/types/dialect/rendering.d.ts +45 -0
- package/dist/types/dialect/thinking.d.ts +6 -0
- package/dist/types/dialect/types.d.ts +69 -0
- package/dist/types/dialect/xml.d.ts +9 -0
- package/dist/types/error/abort.d.ts +14 -0
- package/dist/types/error/auth-classify.d.ts +16 -0
- package/dist/types/error/auth.d.ts +27 -0
- package/dist/types/error/aws.d.ts +23 -0
- package/dist/types/error/classes.d.ts +102 -0
- package/dist/types/error/finalize.d.ts +39 -0
- package/dist/types/error/flags.d.ts +79 -0
- package/dist/types/error/format.d.ts +20 -0
- package/dist/types/error/gateway.d.ts +20 -0
- package/dist/types/error/index.d.ts +13 -0
- package/dist/types/error/oauth.d.ts +43 -0
- package/dist/types/error/provider.d.ts +42 -0
- package/dist/types/error/rate-limit.d.ts +59 -0
- package/dist/types/error/retryable.d.ts +27 -0
- package/dist/types/error/validation.d.ts +32 -0
- package/dist/types/index.d.ts +49 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/providers/__tests__/google-auth.test.d.ts +1 -0
- package/dist/types/providers/__tests__/kimi-code-thinking.test.d.ts +1 -0
- package/dist/types/providers/__tests__/openai-codex-error.test.d.ts +1 -0
- package/dist/types/providers/amazon-bedrock.d.ts +39 -0
- package/dist/types/providers/anthropic-client.d.ts +94 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +497 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic-wire.d.ts +318 -0
- package/dist/types/providers/anthropic.d.ts +248 -0
- package/dist/types/providers/aws-credentials.d.ts +53 -0
- package/dist/types/providers/aws-eventstream.d.ts +39 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +16 -0
- package/dist/types/providers/cursor.d.ts +91 -0
- package/dist/types/providers/devin.d.ts +12 -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-workflow.d.ts +254 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +32 -0
- package/dist/types/providers/google-gemini-cli.d.ts +118 -0
- package/dist/types/providers/google-interactions.d.ts +65 -0
- package/dist/types/providers/google-shared.d.ts +203 -0
- package/dist/types/providers/google-types.d.ts +155 -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 +178 -0
- package/dist/types/providers/ollama.d.ts +7 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +695 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-chat-wire.d.ts +644 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +54 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
- package/dist/types/providers/openai-codex-responses.d.ts +108 -0
- package/dist/types/providers/openai-completions.d.ts +45 -0
- package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +349 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-wire.d.ts +6065 -0
- package/dist/types/providers/openai-responses.d.ts +126 -0
- package/dist/types/providers/openai-shared.d.ts +506 -0
- package/dist/types/providers/pi-native-client.d.ts +13 -0
- package/dist/types/providers/pi-native-server.d.ts +69 -0
- package/dist/types/providers/register-builtins.d.ts +32 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +11 -0
- package/dist/types/providers/vision-guard.d.ts +20 -0
- package/dist/types/registry/aimlapi.d.ts +4 -0
- package/dist/types/registry/alibaba-coding-plan.d.ts +8 -0
- package/dist/types/registry/amazon-bedrock.d.ts +5 -0
- package/dist/types/registry/anthropic.d.ts +10 -0
- package/dist/types/registry/api-key-login.d.ts +42 -0
- package/dist/types/registry/api-key-validation.d.ts +43 -0
- package/dist/types/registry/azure.d.ts +4 -0
- package/dist/types/registry/cerebras.d.ts +7 -0
- package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
- package/dist/types/registry/coreweave.d.ts +7 -0
- package/dist/types/registry/cursor.d.ts +7 -0
- package/dist/types/registry/deepseek.d.ts +8 -0
- package/dist/types/registry/derived.d.ts +5 -0
- package/dist/types/registry/devin.d.ts +8 -0
- package/dist/types/registry/firepass.d.ts +16 -0
- package/dist/types/registry/fireworks.d.ts +7 -0
- package/dist/types/registry/github-copilot.d.ts +7 -0
- package/dist/types/registry/gitlab-duo-workflow.d.ts +10 -0
- package/dist/types/registry/gitlab-duo.d.ts +9 -0
- package/dist/types/registry/google-antigravity.d.ts +9 -0
- package/dist/types/registry/google-gemini-cli.d.ts +9 -0
- package/dist/types/registry/google-vertex.d.ts +5 -0
- package/dist/types/registry/google.d.ts +4 -0
- package/dist/types/registry/groq.d.ts +4 -0
- package/dist/types/registry/huggingface.d.ts +7 -0
- package/dist/types/registry/index.d.ts +4 -0
- package/dist/types/registry/kagi.d.ts +14 -0
- package/dist/types/registry/kilo.d.ts +7 -0
- package/dist/types/registry/kimi-code.d.ts +7 -0
- package/dist/types/registry/litellm.d.ts +13 -0
- package/dist/types/registry/llama-cpp.d.ts +8 -0
- package/dist/types/registry/lm-studio.d.ts +8 -0
- package/dist/types/registry/minimax-code-cn.d.ts +6 -0
- package/dist/types/registry/minimax-code.d.ts +6 -0
- package/dist/types/registry/minimax.d.ts +4 -0
- package/dist/types/registry/mistral.d.ts +4 -0
- package/dist/types/registry/moonshot.d.ts +7 -0
- package/dist/types/registry/nanogpt.d.ts +7 -0
- package/dist/types/registry/nvidia.d.ts +7 -0
- package/dist/types/registry/oauth/__tests__/xai-oauth.test.d.ts +1 -0
- package/dist/types/registry/oauth/anthropic.d.ts +23 -0
- package/dist/types/registry/oauth/callback-server.d.ts +72 -0
- package/dist/types/registry/oauth/cursor.d.ts +15 -0
- package/dist/types/registry/oauth/devin.d.ts +5 -0
- package/dist/types/registry/oauth/github-copilot.d.ts +30 -0
- package/dist/types/registry/oauth/gitlab-duo-workflow.d.ts +6 -0
- package/dist/types/registry/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/registry/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/registry/oauth/google-gemini-cli.d.ts +10 -0
- package/dist/types/registry/oauth/google-oauth-shared.d.ts +22 -0
- package/dist/types/registry/oauth/index.d.ts +64 -0
- package/dist/types/registry/oauth/kimi.d.ts +21 -0
- package/dist/types/registry/oauth/minimax-code.d.ts +27 -0
- package/dist/types/registry/oauth/openai-codex.d.ts +33 -0
- package/dist/types/registry/oauth/opencode.d.ts +18 -0
- package/dist/types/registry/oauth/perplexity.d.ts +9 -0
- package/dist/types/registry/oauth/pkce.d.ts +8 -0
- package/dist/types/registry/oauth/types.d.ts +56 -0
- package/dist/types/registry/oauth/wafer.d.ts +1 -0
- package/dist/types/registry/oauth/xai-oauth.d.ts +52 -0
- package/dist/types/registry/oauth/xiaomi.d.ts +25 -0
- package/dist/types/registry/ollama-cloud.d.ts +7 -0
- package/dist/types/registry/ollama.d.ts +12 -0
- package/dist/types/registry/openai-codex-device.d.ts +8 -0
- package/dist/types/registry/openai-codex.d.ts +9 -0
- package/dist/types/registry/openai.d.ts +4 -0
- package/dist/types/registry/opencode-go.d.ts +6 -0
- package/dist/types/registry/opencode-zen.d.ts +6 -0
- package/dist/types/registry/openrouter.d.ts +13 -0
- package/dist/types/registry/parallel.d.ts +14 -0
- package/dist/types/registry/perplexity.d.ts +7 -0
- package/dist/types/registry/qianfan.d.ts +7 -0
- package/dist/types/registry/qwen-portal.d.ts +7 -0
- package/dist/types/registry/registry.d.ts +303 -0
- package/dist/types/registry/sakana.d.ts +7 -0
- package/dist/types/registry/synthetic.d.ts +6 -0
- package/dist/types/registry/tavily.d.ts +14 -0
- package/dist/types/registry/together.d.ts +6 -0
- package/dist/types/registry/types.d.ts +51 -0
- package/dist/types/registry/umans.d.ts +7 -0
- package/dist/types/registry/venice.d.ts +13 -0
- package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
- package/dist/types/registry/vllm.d.ts +7 -0
- package/dist/types/registry/wafer-serverless.d.ts +6 -0
- package/dist/types/registry/xai-oauth.d.ts +7 -0
- package/dist/types/registry/xai.d.ts +4 -0
- package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
- package/dist/types/registry/xiaomi.d.ts +6 -0
- package/dist/types/registry/zai.d.ts +7 -0
- package/dist/types/registry/zenmux.d.ts +7 -0
- package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
- package/dist/types/stream.d.ts +44 -0
- package/dist/types/types.d.ts +715 -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 +15 -0
- package/dist/types/usage/kimi.d.ts +2 -0
- package/dist/types/usage/minimax-code.d.ts +2 -0
- package/dist/types/usage/ollama.d.ts +5 -0
- package/dist/types/usage/openai-codex-base-url.d.ts +18 -0
- package/dist/types/usage/openai-codex-reset.d.ts +79 -0
- package/dist/types/usage/openai-codex.d.ts +3 -0
- package/dist/types/usage/opencode-go.d.ts +2 -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 +346 -0
- package/dist/types/utils/abort.d.ts +25 -0
- package/dist/types/utils/anthropic-auth.d.ts +35 -0
- package/dist/types/utils/block-symbols.d.ts +20 -0
- package/dist/types/utils/deterministic-id.d.ts +16 -0
- package/dist/types/utils/empty-completion-retry.d.ts +21 -0
- package/dist/types/utils/event-stream.d.ts +30 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/google-validation.d.ts +2 -0
- package/dist/types/utils/harmony-leak.d.ts +118 -0
- package/dist/types/utils/http-inspector.d.ts +30 -0
- package/dist/types/utils/idle-iterator.d.ts +137 -0
- package/dist/types/utils/leaked-thinking-stream.d.ts +29 -0
- package/dist/types/utils/openai-http.d.ts +54 -0
- package/dist/types/utils/openrouter-headers.d.ts +1 -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/proxy.d.ts +29 -0
- package/dist/types/utils/request-debug.d.ts +29 -0
- package/dist/types/utils/retry-after.d.ts +4 -0
- package/dist/types/utils/retry.d.ts +14 -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 +54 -0
- package/dist/types/utils/schema/index.d.ts +15 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +20 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +124 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +17 -0
- package/dist/types/utils/schema/strict-tool-validation.d.ts +16 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/typescript.d.ts +18 -0
- package/dist/types/utils/schema/wire.d.ts +92 -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 +5 -0
- package/dist/types/utils/stream-markup-healing.d.ts +87 -0
- package/dist/types/utils/thinking-loop.d.ts +102 -0
- package/dist/types/utils/tool-call-loop-guard.d.ts +26 -0
- package/dist/types/utils/tool-choice.d.ts +50 -0
- package/dist/types/utils/validation.d.ts +42 -0
- package/dist/types/utils.d.ts +24 -0
- package/package.json +139 -0
- package/src/api-registry.ts +109 -0
- package/src/auth-broker/client.ts +359 -0
- package/src/auth-broker/discover.ts +222 -0
- package/src/auth-broker/index.ts +7 -0
- package/src/auth-broker/refresher.ts +117 -0
- package/src/auth-broker/remote-store.ts +657 -0
- package/src/auth-broker/server.ts +646 -0
- package/src/auth-broker/snapshot-cache.ts +191 -0
- package/src/auth-broker/types.ts +130 -0
- package/src/auth-broker/wire-schemas.ts +249 -0
- package/src/auth-gateway/http.ts +194 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +802 -0
- package/src/auth-gateway/types.ts +151 -0
- package/src/auth-retry.ts +250 -0
- package/src/auth-storage.ts +5576 -0
- package/src/dialect/anthropic.md +31 -0
- package/src/dialect/anthropic.ts +608 -0
- package/src/dialect/catalog.ts +29 -0
- package/src/dialect/coercion.ts +136 -0
- package/src/dialect/deepseek.md +24 -0
- package/src/dialect/deepseek.ts +609 -0
- package/src/dialect/demotion.ts +36 -0
- package/src/dialect/examples.ts +33 -0
- package/src/dialect/factory.ts +34 -0
- package/src/dialect/fenced-thinking.ts +184 -0
- package/src/dialect/gemini.md +44 -0
- package/src/dialect/gemini.ts +597 -0
- package/src/dialect/gemma.md +33 -0
- package/src/dialect/gemma.ts +387 -0
- package/src/dialect/glm.md +32 -0
- package/src/dialect/glm.ts +456 -0
- package/src/dialect/harmony.md +31 -0
- package/src/dialect/harmony.ts +346 -0
- package/src/dialect/hermes.md +25 -0
- package/src/dialect/hermes.ts +206 -0
- package/src/dialect/history.ts +81 -0
- package/src/dialect/index.ts +15 -0
- package/src/dialect/inventory.ts +73 -0
- package/src/dialect/kimi.md +24 -0
- package/src/dialect/kimi.ts +340 -0
- package/src/dialect/minimax.md +31 -0
- package/src/dialect/minimax.ts +95 -0
- package/src/dialect/owned-stream.ts +470 -0
- package/src/dialect/prompt-template.md +12 -0
- package/src/dialect/qwen3.md +28 -0
- package/src/dialect/qwen3.ts +240 -0
- package/src/dialect/rendering.ts +249 -0
- package/src/dialect/thinking.ts +122 -0
- package/src/dialect/types.ts +57 -0
- package/src/dialect/xml.md +22 -0
- package/src/dialect/xml.ts +90 -0
- package/src/error/abort.ts +18 -0
- package/src/error/auth-classify.ts +30 -0
- package/src/error/auth.ts +48 -0
- package/src/error/aws.ts +31 -0
- package/src/error/classes.ts +186 -0
- package/src/error/finalize.ts +69 -0
- package/src/error/flags.ts +506 -0
- package/src/error/format.ts +45 -0
- package/src/error/gateway.ts +96 -0
- package/src/error/index.ts +13 -0
- package/src/error/oauth.ts +58 -0
- package/src/error/provider.ts +62 -0
- package/src/error/rate-limit.ts +161 -0
- package/src/error/retryable.ts +70 -0
- package/src/error/validation.ts +44 -0
- package/src/index.ts +49 -0
- package/src/provider-details.ts +90 -0
- package/src/providers/__tests__/google-auth.test.ts +144 -0
- package/src/providers/__tests__/kimi-code-thinking.test.ts +112 -0
- package/src/providers/__tests__/openai-codex-error.test.ts +84 -0
- package/src/providers/amazon-bedrock.ts +1042 -0
- package/src/providers/anthropic-client.ts +295 -0
- package/src/providers/anthropic-messages-server-schema.ts +252 -0
- package/src/providers/anthropic-messages-server.ts +756 -0
- package/src/providers/anthropic-wire.ts +318 -0
- package/src/providers/anthropic.ts +4078 -0
- package/src/providers/aws-credentials.ts +586 -0
- package/src/providers/aws-eventstream.ts +181 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +382 -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 +2695 -0
- package/src/providers/devin/proto/buf/validate/validate.proto +468 -0
- package/src/providers/devin/proto/buf.gen.yaml +33 -0
- package/src/providers/devin/proto/buf.yaml +17 -0
- package/src/providers/devin/proto/cel/expr/checked.proto +103 -0
- package/src/providers/devin/proto/cel/expr/eval.proto +38 -0
- package/src/providers/devin/proto/cel/expr/explain.proto +15 -0
- package/src/providers/devin/proto/cel/expr/syntax.proto +113 -0
- package/src/providers/devin/proto/cel/expr/value.proto +41 -0
- package/src/providers/devin/proto/connectext/grpc/status/v1/status.proto +11 -0
- package/src/providers/devin/proto/errorspb/errors.proto +56 -0
- package/src/providers/devin/proto/errorspb/hintdetail.proto +7 -0
- package/src/providers/devin/proto/errorspb/markers.proto +10 -0
- package/src/providers/devin/proto/errorspb/tags.proto +12 -0
- package/src/providers/devin/proto/errorspb/testing.proto +6 -0
- package/src/providers/devin/proto/exa/analytics_pb/analytics.proto +188 -0
- package/src/providers/devin/proto/exa/api_server_pb/api_server.proto +2461 -0
- package/src/providers/devin/proto/exa/auth_pb/auth.proto +19 -0
- package/src/providers/devin/proto/exa/auto_cascade_common_pb/auto_cascade_common.proto +79 -0
- package/src/providers/devin/proto/exa/browser_preview_pb/browser_preview.proto +32 -0
- package/src/providers/devin/proto/exa/bug_checker_pb/bug_checker.proto +22 -0
- package/src/providers/devin/proto/exa/cascade_plugins_pb/cascade_plugins.proto +262 -0
- package/src/providers/devin/proto/exa/chat_client_server_pb/chat_client_server.proto +57 -0
- package/src/providers/devin/proto/exa/chat_pb/chat.proto +449 -0
- package/src/providers/devin/proto/exa/code_edit/code_edit_pb/code_edit.proto +186 -0
- package/src/providers/devin/proto/exa/codeium_common_pb/codeium_common.proto +4157 -0
- package/src/providers/devin/proto/exa/context_module_pb/context_module.proto +175 -0
- package/src/providers/devin/proto/exa/cortex_pb/cortex.proto +3268 -0
- package/src/providers/devin/proto/exa/dev_pb/dev.proto +26 -0
- package/src/providers/devin/proto/exa/diff_action_pb/diff_action.proto +75 -0
- package/src/providers/devin/proto/exa/eval/pr_eval/datasets_pb/datasets.proto +103 -0
- package/src/providers/devin/proto/exa/eval_pb/eval.proto +1315 -0
- package/src/providers/devin/proto/exa/extension_server_pb/extension_server.proto +556 -0
- package/src/providers/devin/proto/exa/file_system_provider_pb/file_system_provider.proto +75 -0
- package/src/providers/devin/proto/exa/index_pb/index.proto +461 -0
- package/src/providers/devin/proto/exa/knowledge_base_pb/knowledge_base.proto +144 -0
- package/src/providers/devin/proto/exa/language_server_pb/language_server.proto +2385 -0
- package/src/providers/devin/proto/exa/model_management_pb/model_management.proto +186 -0
- package/src/providers/devin/proto/exa/opensearch_clients_pb/opensearch_clients.proto +503 -0
- package/src/providers/devin/proto/exa/product_analytics_pb/product_analytics.proto +37 -0
- package/src/providers/devin/proto/exa/prompt_pb/prompt.proto +92 -0
- package/src/providers/devin/proto/exa/reactive_component_pb/reactive_component.proto +96 -0
- package/src/providers/devin/proto/exa/seat_management_pb/seat_management.proto +2680 -0
- package/src/providers/devin/proto/exa/tokenizer_pb/tokenizer.proto +37 -0
- package/src/providers/devin/proto/exa/trainer_pb/config.proto +647 -0
- package/src/providers/devin/proto/exa/tree_sitter/language_data_pb/language_data.proto +14 -0
- package/src/providers/devin/proto/exa/trust_pb/trust.proto +157 -0
- package/src/providers/devin/proto/exa/user_analytics_pb/user_analytics.proto +519 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/base/api_base.proto +28 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/datastore/datastore_v3.proto +484 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/log/log_service.proto +136 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/remote_api/remote_api.proto +42 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +61 -0
- package/src/providers/devin/proto/grpc/binlog/v1/binarylog.proto +84 -0
- package/src/providers/devin/proto/io/prometheus/client/metrics.proto +98 -0
- package/src/providers/devin.ts +577 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.ts +141 -0
- package/src/providers/gitlab-duo-workflow-chatml-note.md +1 -0
- package/src/providers/gitlab-duo-workflow.ts +3058 -0
- package/src/providers/gitlab-duo.ts +395 -0
- package/src/providers/google-auth.ts +350 -0
- package/src/providers/google-gemini-cli.ts +1362 -0
- package/src/providers/google-interactions.ts +753 -0
- package/src/providers/google-shared.ts +1103 -0
- package/src/providers/google-types.ts +180 -0
- package/src/providers/google-vertex.ts +183 -0
- package/src/providers/google.ts +87 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/mock.ts +507 -0
- package/src/providers/ollama.ts +773 -0
- package/src/providers/openai-anthropic-shim.ts +152 -0
- package/src/providers/openai-chat-server-schema.ts +242 -0
- package/src/providers/openai-chat-server.ts +715 -0
- package/src/providers/openai-chat-wire.ts +847 -0
- package/src/providers/openai-codex/request-transformer.ts +295 -0
- package/src/providers/openai-codex/response-handler.ts +102 -0
- package/src/providers/openai-codex-responses.ts +3468 -0
- package/src/providers/openai-completions.ts +2173 -0
- package/src/providers/openai-reasoning-fallback.ts +269 -0
- package/src/providers/openai-responses-reasoning-suppression.md +1 -0
- package/src/providers/openai-responses-server-schema.ts +282 -0
- package/src/providers/openai-responses-server.ts +1280 -0
- package/src/providers/openai-responses-wire.ts +6391 -0
- package/src/providers/openai-responses.ts +1022 -0
- package/src/providers/openai-shared.ts +2648 -0
- package/src/providers/pi-native-client.ts +266 -0
- package/src/providers/pi-native-server.ts +242 -0
- package/src/providers/register-builtins.ts +475 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +787 -0
- package/src/providers/vision-guard.ts +54 -0
- package/src/registry/aimlapi.ts +6 -0
- package/src/registry/alibaba-coding-plan.ts +95 -0
- package/src/registry/amazon-bedrock.ts +22 -0
- package/src/registry/anthropic.ts +26 -0
- package/src/registry/api-key-login.ts +112 -0
- package/src/registry/api-key-validation.ts +161 -0
- package/src/registry/azure.ts +6 -0
- package/src/registry/cerebras.ts +23 -0
- package/src/registry/cloudflare-ai-gateway.ts +45 -0
- package/src/registry/coreweave.ts +40 -0
- package/src/registry/cursor.ts +20 -0
- package/src/registry/deepseek.ts +46 -0
- package/src/registry/derived.ts +9 -0
- package/src/registry/devin.ts +15 -0
- package/src/registry/firepass.ts +32 -0
- package/src/registry/fireworks.ts +28 -0
- package/src/registry/github-copilot.ts +22 -0
- package/src/registry/gitlab-duo-workflow.ts +20 -0
- package/src/registry/gitlab-duo.ts +19 -0
- package/src/registry/google-antigravity.ts +22 -0
- package/src/registry/google-gemini-cli.ts +22 -0
- package/src/registry/google-vertex.ts +38 -0
- package/src/registry/google.ts +6 -0
- package/src/registry/groq.ts +6 -0
- package/src/registry/huggingface.ts +29 -0
- package/src/registry/index.ts +4 -0
- package/src/registry/kagi.ts +46 -0
- package/src/registry/kilo.ts +114 -0
- package/src/registry/kimi-code.ts +17 -0
- package/src/registry/litellm.ts +45 -0
- package/src/registry/llama-cpp.ts +35 -0
- package/src/registry/lm-studio.ts +31 -0
- package/src/registry/minimax-code-cn.ts +12 -0
- package/src/registry/minimax-code.ts +12 -0
- package/src/registry/minimax.ts +6 -0
- package/src/registry/mistral.ts +6 -0
- package/src/registry/moonshot.ts +22 -0
- package/src/registry/nanogpt.ts +22 -0
- package/src/registry/nvidia.ts +61 -0
- package/src/registry/oauth/__tests__/xai-oauth.test.ts +104 -0
- package/src/registry/oauth/anthropic.ts +311 -0
- package/src/registry/oauth/callback-server.ts +315 -0
- package/src/registry/oauth/cursor.ts +171 -0
- package/src/registry/oauth/devin.ts +124 -0
- package/src/registry/oauth/github-copilot.ts +369 -0
- package/src/registry/oauth/gitlab-duo-workflow.ts +146 -0
- package/src/registry/oauth/gitlab-duo.ts +222 -0
- package/src/registry/oauth/google-antigravity.ts +209 -0
- package/src/registry/oauth/google-gemini-cli.ts +273 -0
- package/src/registry/oauth/google-oauth-shared.ts +125 -0
- package/src/registry/oauth/index.ts +269 -0
- package/src/registry/oauth/kimi.ts +289 -0
- package/src/registry/oauth/minimax-code.ts +53 -0
- package/src/registry/oauth/oauth.html +311 -0
- package/src/registry/oauth/openai-codex.ts +364 -0
- package/src/registry/oauth/opencode.ts +50 -0
- package/src/registry/oauth/perplexity.ts +228 -0
- package/src/registry/oauth/pkce.ts +18 -0
- package/src/registry/oauth/types.ts +65 -0
- package/src/registry/oauth/wafer.ts +24 -0
- package/src/registry/oauth/xai-oauth.ts +394 -0
- package/src/registry/oauth/xiaomi.ts +211 -0
- package/src/registry/ollama-cloud.ts +36 -0
- package/src/registry/ollama.ts +43 -0
- package/src/registry/openai-codex-device.ts +18 -0
- package/src/registry/openai-codex.ts +19 -0
- package/src/registry/openai.ts +6 -0
- package/src/registry/opencode-go.ts +12 -0
- package/src/registry/opencode-zen.ts +12 -0
- package/src/registry/openrouter.ts +28 -0
- package/src/registry/parallel.ts +45 -0
- package/src/registry/perplexity.ts +13 -0
- package/src/registry/qianfan.ts +27 -0
- package/src/registry/qwen-portal.ts +50 -0
- package/src/registry/registry.ts +161 -0
- package/src/registry/sakana.ts +22 -0
- package/src/registry/synthetic.ts +21 -0
- package/src/registry/tavily.ts +45 -0
- package/src/registry/together.ts +22 -0
- package/src/registry/types.ts +56 -0
- package/src/registry/umans.ts +23 -0
- package/src/registry/venice.ts +33 -0
- package/src/registry/vercel-ai-gateway.ts +38 -0
- package/src/registry/vllm.ts +34 -0
- package/src/registry/wafer-serverless.ts +12 -0
- package/src/registry/xai-oauth.ts +17 -0
- package/src/registry/xai.ts +6 -0
- package/src/registry/xiaomi-token-plan-ams.ts +12 -0
- package/src/registry/xiaomi-token-plan-cn.ts +12 -0
- package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
- package/src/registry/xiaomi.ts +12 -0
- package/src/registry/zai.ts +27 -0
- package/src/registry/zenmux.ts +22 -0
- package/src/registry/zhipu-coding-plan.ts +27 -0
- package/src/stream.ts +1778 -0
- package/src/types.ts +856 -0
- package/src/usage/claude.ts +485 -0
- package/src/usage/gemini.ts +258 -0
- package/src/usage/github-copilot.ts +424 -0
- package/src/usage/google-antigravity.ts +497 -0
- package/src/usage/kimi.ts +271 -0
- package/src/usage/minimax-code.ts +30 -0
- package/src/usage/ollama.ts +41 -0
- package/src/usage/openai-codex-base-url.ts +35 -0
- package/src/usage/openai-codex-reset.ts +174 -0
- package/src/usage/openai-codex.ts +535 -0
- package/src/usage/opencode-go.ts +89 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/zai.ts +321 -0
- package/src/usage.ts +333 -0
- package/src/utils/abort.ts +67 -0
- package/src/utils/anthropic-auth.ts +93 -0
- package/src/utils/block-symbols.ts +32 -0
- package/src/utils/deterministic-id.ts +20 -0
- package/src/utils/empty-completion-retry.ts +159 -0
- package/src/utils/event-stream.ts +171 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/google-validation.ts +25 -0
- package/src/utils/harmony-leak.ts +456 -0
- package/src/utils/http-inspector.ts +168 -0
- package/src/utils/idle-iterator.ts +473 -0
- package/src/utils/leaked-thinking-stream.ts +294 -0
- package/src/utils/openai-http.ts +122 -0
- package/src/utils/openrouter-headers.ts +12 -0
- package/src/utils/parse-bind.ts +56 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/proxy.ts +240 -0
- package/src/utils/request-debug.ts +351 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry.ts +59 -0
- package/src/utils/schema/CONSTRAINTS.md +166 -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 +207 -0
- package/src/utils/schema/index.ts +15 -0
- package/src/utils/schema/json-schema-validator.ts +595 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +1901 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +109 -0
- package/src/utils/schema/strict-tool-validation.ts +117 -0
- package/src/utils/schema/types.ts +10 -0
- package/src/utils/schema/typescript.ts +198 -0
- package/src/utils/schema/wire.ts +789 -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 +18 -0
- package/src/utils/stream-markup-healing.ts +247 -0
- package/src/utils/thinking-loop.ts +552 -0
- package/src/utils/tool-call-loop-guard.ts +107 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1507 -0
- package/src/utils.ts +171 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local mirror of the subset of `@google/genai` types this package consumes.
|
|
3
|
+
*
|
|
4
|
+
* Field shapes match Gemini / Vertex AI wire format 1:1. Enum-shaped values are
|
|
5
|
+
* modelled as string literal unions so they pass through `JSON.stringify` and
|
|
6
|
+
* `JSON.parse` unchanged.
|
|
7
|
+
*
|
|
8
|
+
* Keep this file in sync with the actual request/response surface of:
|
|
9
|
+
* - `POST {generativelanguage,aiplatform}.googleapis.com/.../models/{model}:streamGenerateContent?alt=sse`
|
|
10
|
+
* - The Cloud Code Assist endpoint used by `google-gemini-cli.ts`
|
|
11
|
+
*/
|
|
12
|
+
/** Mirror of `@google/genai`'s `FinishReason` string enum. */
|
|
13
|
+
export type FinishReason =
|
|
14
|
+
| "FINISH_REASON_UNSPECIFIED"
|
|
15
|
+
| "STOP"
|
|
16
|
+
| "MAX_TOKENS"
|
|
17
|
+
| "SAFETY"
|
|
18
|
+
| "RECITATION"
|
|
19
|
+
| "LANGUAGE"
|
|
20
|
+
| "OTHER"
|
|
21
|
+
| "BLOCKLIST"
|
|
22
|
+
| "PROHIBITED_CONTENT"
|
|
23
|
+
| "SPII"
|
|
24
|
+
| "MALFORMED_FUNCTION_CALL"
|
|
25
|
+
| "IMAGE_SAFETY"
|
|
26
|
+
| "IMAGE_PROHIBITED_CONTENT"
|
|
27
|
+
| "IMAGE_RECITATION"
|
|
28
|
+
| "IMAGE_OTHER"
|
|
29
|
+
| "UNEXPECTED_TOOL_CALL"
|
|
30
|
+
| "NO_IMAGE";
|
|
31
|
+
|
|
32
|
+
/** Mirror of `@google/genai`'s `FunctionCallingConfigMode` string enum. */
|
|
33
|
+
export type FunctionCallingConfigMode = "MODE_UNSPECIFIED" | "AUTO" | "NONE" | "ANY" | "VALIDATED";
|
|
34
|
+
|
|
35
|
+
/** Mirror of `@google/genai`'s `ThinkingLevel` string enum. */
|
|
36
|
+
export type ThinkingLevel = "THINKING_LEVEL_UNSPECIFIED" | "MINIMAL" | "LOW" | "MEDIUM" | "HIGH";
|
|
37
|
+
|
|
38
|
+
/** Inline base64-encoded data part. */
|
|
39
|
+
export interface InlineDataPart {
|
|
40
|
+
mimeType: string;
|
|
41
|
+
data: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Function call emitted by the model. */
|
|
45
|
+
export interface FunctionCallPart {
|
|
46
|
+
name?: string;
|
|
47
|
+
args?: Record<string, unknown>;
|
|
48
|
+
id?: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Tool execution result fed back to the model. */
|
|
52
|
+
export interface FunctionResponsePart {
|
|
53
|
+
name: string;
|
|
54
|
+
response: Record<string, unknown>;
|
|
55
|
+
parts?: Part[];
|
|
56
|
+
id?: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A single piece of a `Content` message. Mirrors the SDK's union by keeping
|
|
61
|
+
* every optional field — the model and the wire treat shape as discriminator.
|
|
62
|
+
*/
|
|
63
|
+
export interface Part {
|
|
64
|
+
text?: string;
|
|
65
|
+
thought?: boolean;
|
|
66
|
+
thoughtSignature?: string;
|
|
67
|
+
inlineData?: InlineDataPart;
|
|
68
|
+
functionCall?: FunctionCallPart;
|
|
69
|
+
functionResponse?: FunctionResponsePart;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Conversation turn. Roles: `"user"`, `"model"`, optionally absent for system instructions. */
|
|
73
|
+
export interface Content {
|
|
74
|
+
role?: string;
|
|
75
|
+
parts?: Part[];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Thinking/reasoning configuration shared by Gemini 2.x and 3.x models. */
|
|
79
|
+
export interface ThinkingConfig {
|
|
80
|
+
includeThoughts?: boolean;
|
|
81
|
+
thinkingBudget?: number;
|
|
82
|
+
thinkingLevel?: ThinkingLevel;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Function declaration entry inside `tools[].functionDeclarations`. */
|
|
86
|
+
export interface FunctionDeclaration {
|
|
87
|
+
name: string;
|
|
88
|
+
description?: string;
|
|
89
|
+
parameters?: Record<string, unknown>;
|
|
90
|
+
parametersJsonSchema?: Record<string, unknown>;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Tool group as accepted at the request top level. */
|
|
94
|
+
export interface ToolDeclaration {
|
|
95
|
+
functionDeclarations: Record<string, unknown>[];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Tool selection mode container. */
|
|
99
|
+
export interface ToolConfig {
|
|
100
|
+
functionCallingConfig?: {
|
|
101
|
+
mode: FunctionCallingConfigMode;
|
|
102
|
+
allowedFunctionNames?: string[];
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Generation/sampling and request-shape options passed via the SDK's `config`.
|
|
108
|
+
*
|
|
109
|
+
* Fields that the wire format places at the request body root (systemInstruction,
|
|
110
|
+
* tools, toolConfig, safetySettings, cachedContent) live here too — the
|
|
111
|
+
* transformer in `google-shared.ts` lifts them out when serializing.
|
|
112
|
+
*/
|
|
113
|
+
export interface GenerateContentConfig {
|
|
114
|
+
temperature?: number;
|
|
115
|
+
maxOutputTokens?: number;
|
|
116
|
+
topP?: number;
|
|
117
|
+
topK?: number;
|
|
118
|
+
candidateCount?: number;
|
|
119
|
+
stopSequences?: string[];
|
|
120
|
+
presencePenalty?: number;
|
|
121
|
+
frequencyPenalty?: number;
|
|
122
|
+
seed?: number;
|
|
123
|
+
responseMimeType?: string;
|
|
124
|
+
responseSchema?: Record<string, unknown>;
|
|
125
|
+
responseJsonSchema?: Record<string, unknown>;
|
|
126
|
+
responseModalities?: string[];
|
|
127
|
+
systemInstruction?: Content | { role?: string; parts: { text: string }[] };
|
|
128
|
+
tools?: ToolDeclaration[];
|
|
129
|
+
toolConfig?: ToolConfig;
|
|
130
|
+
safetySettings?: Array<Record<string, unknown>>;
|
|
131
|
+
cachedContent?: string;
|
|
132
|
+
thinkingConfig?: ThinkingConfig;
|
|
133
|
+
/**
|
|
134
|
+
* Gemini/Vertex serving tier. Serialized to the request body root as
|
|
135
|
+
* `serviceTier` (camelCase) by the transformer in `google-shared.ts`.
|
|
136
|
+
*/
|
|
137
|
+
serviceTier?: "auto" | "default" | "flex" | "scale" | "priority";
|
|
138
|
+
abortSignal?: AbortSignal;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Top-level argument to `generateContentStream`. */
|
|
142
|
+
export interface GenerateContentParameters {
|
|
143
|
+
model: string;
|
|
144
|
+
contents: Content[];
|
|
145
|
+
config?: GenerateContentConfig;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Per-stream candidate envelope. */
|
|
149
|
+
export interface Candidate {
|
|
150
|
+
content?: Content;
|
|
151
|
+
finishReason?: FinishReason;
|
|
152
|
+
index?: number;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** Cumulative token accounting attached to the trailing chunk. */
|
|
156
|
+
export interface UsageMetadata {
|
|
157
|
+
promptTokenCount?: number;
|
|
158
|
+
candidatesTokenCount?: number;
|
|
159
|
+
thoughtsTokenCount?: number;
|
|
160
|
+
totalTokenCount?: number;
|
|
161
|
+
cachedContentTokenCount?: number;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Prompt-level safety feedback; `blockReason` is set (with no candidates) when the prompt is blocked. */
|
|
165
|
+
export interface PromptFeedback {
|
|
166
|
+
blockReason?: string;
|
|
167
|
+
blockReasonMessage?: string;
|
|
168
|
+
[key: string]: unknown;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Single SSE chunk's parsed JSON body. */
|
|
172
|
+
export interface GenerateContentResponse {
|
|
173
|
+
candidates?: Candidate[];
|
|
174
|
+
usageMetadata?: UsageMetadata;
|
|
175
|
+
modelVersion?: string;
|
|
176
|
+
responseId?: string;
|
|
177
|
+
promptFeedback?: PromptFeedback;
|
|
178
|
+
/** In-band stream failure (quota, internal error) delivered as a final JSON event. */
|
|
179
|
+
error?: { code?: number; message?: string; status?: string };
|
|
180
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { $env } from "jeopi-utils";
|
|
2
|
+
import * as AIError from "../error";
|
|
3
|
+
import type { Context, Model, StreamFunction } from "../types";
|
|
4
|
+
import type { AssistantMessageEventStream } from "../utils/event-stream";
|
|
5
|
+
import { getVertexAccessToken, hasVertexBearerCredentialsHint } from "./google-auth";
|
|
6
|
+
import {
|
|
7
|
+
type GoogleInteractionsPlan,
|
|
8
|
+
modelSupportsInteractions,
|
|
9
|
+
resolveInteractionDispatch,
|
|
10
|
+
streamGoogleInteractions,
|
|
11
|
+
} from "./google-interactions";
|
|
12
|
+
import {
|
|
13
|
+
buildGoogleGenerateContentParams,
|
|
14
|
+
type GoogleGenAIRequestPlan,
|
|
15
|
+
type GoogleSharedStreamOptions,
|
|
16
|
+
streamGoogleGenAI,
|
|
17
|
+
} from "./google-shared";
|
|
18
|
+
|
|
19
|
+
export interface GoogleVertexOptions extends GoogleSharedStreamOptions {
|
|
20
|
+
project?: string;
|
|
21
|
+
location?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const API_VERSION = "v1";
|
|
25
|
+
const INTERACTIONS_API_VERSION = "v1beta1";
|
|
26
|
+
const INTERACTIONS_API_REVISION = "2026-05-20";
|
|
27
|
+
|
|
28
|
+
export const streamGoogleVertex: StreamFunction<"google-vertex"> = (
|
|
29
|
+
model: Model<"google-vertex">,
|
|
30
|
+
context: Context,
|
|
31
|
+
options?: GoogleVertexOptions,
|
|
32
|
+
): AssistantMessageEventStream => {
|
|
33
|
+
const runGenerateContent = (): AssistantMessageEventStream =>
|
|
34
|
+
streamGoogleGenAI({
|
|
35
|
+
model,
|
|
36
|
+
options,
|
|
37
|
+
api: "google-vertex",
|
|
38
|
+
retainTextSignature: true,
|
|
39
|
+
prepare: async (): Promise<GoogleGenAIRequestPlan> => {
|
|
40
|
+
const apiKey = resolveApiKey(options);
|
|
41
|
+
const params = buildGoogleGenerateContentParams(model, context, options ?? {});
|
|
42
|
+
params.config ||= {};
|
|
43
|
+
if (!params.config.safetySettings) {
|
|
44
|
+
params.config.safetySettings = [
|
|
45
|
+
{
|
|
46
|
+
category: "HARM_CATEGORY_HATE_SPEECH",
|
|
47
|
+
threshold: "OFF",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
category: "HARM_CATEGORY_DANGEROUS_CONTENT",
|
|
51
|
+
threshold: "OFF",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
|
|
55
|
+
threshold: "OFF",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
category: "HARM_CATEGORY_HARASSMENT",
|
|
59
|
+
threshold: "OFF",
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
const baseHeaders: Record<string, string> = {
|
|
64
|
+
...(model.headers ?? {}),
|
|
65
|
+
...(options?.headers ?? {}),
|
|
66
|
+
};
|
|
67
|
+
// Vertex AI ignores a `serviceTier` request-body field (unlike the direct
|
|
68
|
+
// Gemini API); priority must travel as a request header. Only `priority`
|
|
69
|
+
// has a documented Vertex request control — `flex` has none, so it's a no-op.
|
|
70
|
+
if (options?.serviceTier === "priority") {
|
|
71
|
+
baseHeaders["X-Vertex-AI-LLM-Shared-Request-Type"] = "priority";
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (apiKey) {
|
|
75
|
+
// Explicit `location` is a deliberate residency choice: honor it and let
|
|
76
|
+
// a 404 surface. An ambient env-derived region falls back to the global
|
|
77
|
+
// endpoint so a stray GOOGLE_*_LOCATION never breaks a previously-working
|
|
78
|
+
// global-only request.
|
|
79
|
+
const explicitLocation = options?.location;
|
|
80
|
+
const location = explicitLocation ?? resolveAmbientLocation() ?? "global";
|
|
81
|
+
const host = resolveEndpointHost(location);
|
|
82
|
+
const path = `${API_VERSION}/publishers/google/models/${model.id}:streamGenerateContent?alt=sse`;
|
|
83
|
+
const useGlobalFallback = !explicitLocation && host !== "aiplatform.googleapis.com";
|
|
84
|
+
return {
|
|
85
|
+
params,
|
|
86
|
+
url: `https://${host}/${path}`,
|
|
87
|
+
fallbackUrl: useGlobalFallback ? `https://aiplatform.googleapis.com/${path}` : undefined,
|
|
88
|
+
headers: {
|
|
89
|
+
...baseHeaders,
|
|
90
|
+
"x-goog-api-key": apiKey,
|
|
91
|
+
},
|
|
92
|
+
fetch: options?.fetch,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const project = resolveProject(options);
|
|
97
|
+
const location = resolveLocation(options);
|
|
98
|
+
const accessToken = await getVertexAccessToken({ signal: options?.signal, fetch: options?.fetch });
|
|
99
|
+
const host = resolveEndpointHost(location);
|
|
100
|
+
const url = `https://${host}/${API_VERSION}/projects/${project}/locations/${location}/publishers/google/models/${model.id}:streamGenerateContent?alt=sse`;
|
|
101
|
+
return {
|
|
102
|
+
params,
|
|
103
|
+
url,
|
|
104
|
+
headers: { ...baseHeaders, Authorization: `Bearer ${accessToken}` },
|
|
105
|
+
fetch: options?.fetch,
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// Default Gemini 3+ onto Interactions whenever a bearer credential source exists (ADC file,
|
|
111
|
+
// `GOOGLE_APPLICATION_CREDENTIALS`, or an explicit access-token env). Interactions needs bearer
|
|
112
|
+
// auth, so express API-key-only setups stay on generateContent — and an express key, when
|
|
113
|
+
// present, still serves the generateContent fallback. Interactions always targets the official
|
|
114
|
+
// global `aiplatform` host; the fallback also recovers ids the endpoint rejects.
|
|
115
|
+
const { useInteractions, auto, anchor, state } = resolveInteractionDispatch({
|
|
116
|
+
context,
|
|
117
|
+
options,
|
|
118
|
+
provider: model.provider,
|
|
119
|
+
autoEligible: modelSupportsInteractions(model) && hasVertexBearerCredentialsHint(),
|
|
120
|
+
});
|
|
121
|
+
if (!useInteractions) return runGenerateContent();
|
|
122
|
+
|
|
123
|
+
return streamGoogleInteractions({
|
|
124
|
+
model,
|
|
125
|
+
context,
|
|
126
|
+
options,
|
|
127
|
+
api: "google-vertex",
|
|
128
|
+
anchor,
|
|
129
|
+
state,
|
|
130
|
+
prepare: async (): Promise<GoogleInteractionsPlan> => {
|
|
131
|
+
const project = resolveProject(options);
|
|
132
|
+
const accessToken = await getVertexAccessToken({ signal: options?.signal, fetch: options?.fetch });
|
|
133
|
+
return {
|
|
134
|
+
url: `https://aiplatform.googleapis.com/${INTERACTIONS_API_VERSION}/projects/${project}/locations/global/interactions`,
|
|
135
|
+
headers: {
|
|
136
|
+
...(model.headers ?? {}),
|
|
137
|
+
...(options?.headers ?? {}),
|
|
138
|
+
Authorization: `Bearer ${accessToken}`,
|
|
139
|
+
"Api-Revision": INTERACTIONS_API_REVISION,
|
|
140
|
+
},
|
|
141
|
+
fetch: options?.fetch,
|
|
142
|
+
};
|
|
143
|
+
},
|
|
144
|
+
fallback: auto ? runGenerateContent : undefined,
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
function resolveApiKey(options?: GoogleVertexOptions): string | undefined {
|
|
149
|
+
// options.apiKey may contain sentinel values like "<authenticated>" or "N/A"
|
|
150
|
+
// leaked from the agent loop — only use it if it looks like a real API key.
|
|
151
|
+
const optKey = options?.apiKey;
|
|
152
|
+
const realKey = optKey && !optKey.startsWith("<") && optKey !== "N/A" ? optKey : undefined;
|
|
153
|
+
return realKey || $env.GOOGLE_CLOUD_API_KEY;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function resolveProject(options?: GoogleVertexOptions): string {
|
|
157
|
+
const project = options?.project || $env.GOOGLE_CLOUD_PROJECT || $env.GCP_PROJECT || $env.GCLOUD_PROJECT;
|
|
158
|
+
if (!project) {
|
|
159
|
+
throw new AIError.ConfigurationError(
|
|
160
|
+
"Vertex AI requires a project ID. Set GOOGLE_CLOUD_PROJECT/GCP_PROJECT/GCLOUD_PROJECT or pass project in options.",
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
return project;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function resolveEndpointHost(location: string): string {
|
|
167
|
+
return location === "global" ? "aiplatform.googleapis.com" : `${location}-aiplatform.googleapis.com`;
|
|
168
|
+
}
|
|
169
|
+
function resolveAmbientLocation(): string | undefined {
|
|
170
|
+
return $env.GOOGLE_VERTEX_LOCATION || $env.GOOGLE_CLOUD_LOCATION || $env.VERTEX_LOCATION || undefined;
|
|
171
|
+
}
|
|
172
|
+
function resolveOptionalLocation(options?: GoogleVertexOptions): string | undefined {
|
|
173
|
+
return options?.location || resolveAmbientLocation();
|
|
174
|
+
}
|
|
175
|
+
function resolveLocation(options?: GoogleVertexOptions): string {
|
|
176
|
+
const location = resolveOptionalLocation(options);
|
|
177
|
+
if (!location) {
|
|
178
|
+
throw new AIError.ConfigurationError(
|
|
179
|
+
"Vertex AI requires a location. Set GOOGLE_VERTEX_LOCATION/GOOGLE_CLOUD_LOCATION/VERTEX_LOCATION or pass location in options.",
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
return location;
|
|
183
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as AIError from "../error";
|
|
2
|
+
import { getEnvApiKey } from "../stream";
|
|
3
|
+
import type { Context, Model, StreamFunction } from "../types";
|
|
4
|
+
import type { AssistantMessageEventStream } from "../utils/event-stream";
|
|
5
|
+
import { modelSupportsInteractions, resolveInteractionDispatch, streamGoogleInteractions } from "./google-interactions";
|
|
6
|
+
import {
|
|
7
|
+
buildGoogleGenerateContentParams,
|
|
8
|
+
type GoogleGenAIRequestPlan,
|
|
9
|
+
type GoogleSharedStreamOptions,
|
|
10
|
+
streamGoogleGenAI,
|
|
11
|
+
} from "./google-shared";
|
|
12
|
+
|
|
13
|
+
export type GoogleOptions = GoogleSharedStreamOptions;
|
|
14
|
+
|
|
15
|
+
const DEFAULT_GENERATIVE_LANGUAGE_BASE = "https://generativelanguage.googleapis.com/v1beta";
|
|
16
|
+
|
|
17
|
+
export const streamGoogle: StreamFunction<"google-generative-ai"> = (
|
|
18
|
+
model: Model<"google-generative-ai">,
|
|
19
|
+
context: Context,
|
|
20
|
+
options?: GoogleOptions,
|
|
21
|
+
): AssistantMessageEventStream => {
|
|
22
|
+
const apiKey = options?.apiKey || getEnvApiKey(model.provider);
|
|
23
|
+
if (!apiKey) {
|
|
24
|
+
throw new AIError.MissingApiKeyError(
|
|
25
|
+
undefined,
|
|
26
|
+
"Google Generative AI requires an API key (GEMINI_API_KEY or options.apiKey).",
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const runGenerateContent = (): AssistantMessageEventStream =>
|
|
31
|
+
streamGoogleGenAI({
|
|
32
|
+
model,
|
|
33
|
+
options,
|
|
34
|
+
api: "google-generative-ai",
|
|
35
|
+
prepare: (): GoogleGenAIRequestPlan => {
|
|
36
|
+
const params = buildGoogleGenerateContentParams(model, context, options ?? {});
|
|
37
|
+
// `model.baseUrl` already includes the API version segment when set (mirrors the
|
|
38
|
+
// `apiVersion: ""` reset that the SDK relied on for custom base URLs).
|
|
39
|
+
const base = model.baseUrl?.trim() || DEFAULT_GENERATIVE_LANGUAGE_BASE;
|
|
40
|
+
const url = `${base}/models/${model.id}:streamGenerateContent?alt=sse`;
|
|
41
|
+
const headers: Record<string, string> = {
|
|
42
|
+
"x-goog-api-key": apiKey,
|
|
43
|
+
...(model.headers ?? {}),
|
|
44
|
+
...(options?.headers ?? {}),
|
|
45
|
+
};
|
|
46
|
+
return { params, url, headers, fetch: options?.fetch };
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// Default Gemini 3+ on the official endpoint onto Interactions (custom proxy base URLs keep
|
|
51
|
+
// generateContent, which serves the full catalog). The fallback recovers ids the endpoint rejects.
|
|
52
|
+
const trimmedBase = model.baseUrl?.trim();
|
|
53
|
+
let officialEndpoint = !trimmedBase;
|
|
54
|
+
if (trimmedBase) {
|
|
55
|
+
try {
|
|
56
|
+
officialEndpoint = new URL(trimmedBase).hostname === "generativelanguage.googleapis.com";
|
|
57
|
+
} catch {
|
|
58
|
+
officialEndpoint = false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const { useInteractions, auto, anchor, state } = resolveInteractionDispatch({
|
|
62
|
+
context,
|
|
63
|
+
options,
|
|
64
|
+
provider: model.provider,
|
|
65
|
+
autoEligible: officialEndpoint && modelSupportsInteractions(model),
|
|
66
|
+
});
|
|
67
|
+
if (!useInteractions) return runGenerateContent();
|
|
68
|
+
|
|
69
|
+
return streamGoogleInteractions({
|
|
70
|
+
model,
|
|
71
|
+
context,
|
|
72
|
+
options,
|
|
73
|
+
api: "google-generative-ai",
|
|
74
|
+
anchor,
|
|
75
|
+
state,
|
|
76
|
+
prepare: () => ({
|
|
77
|
+
url: `${trimmedBase || DEFAULT_GENERATIVE_LANGUAGE_BASE}/interactions`,
|
|
78
|
+
headers: {
|
|
79
|
+
"x-goog-api-key": apiKey,
|
|
80
|
+
...(model.headers ?? {}),
|
|
81
|
+
...(options?.headers ?? {}),
|
|
82
|
+
},
|
|
83
|
+
fetch: options?.fetch,
|
|
84
|
+
}),
|
|
85
|
+
fallback: auto ? runGenerateContent : undefined,
|
|
86
|
+
});
|
|
87
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export function compactGrammarDefinition(syntax: "lark" | "regex", definition: string): string {
|
|
2
|
+
if (syntax !== "lark") {
|
|
3
|
+
return definition;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return compactLarkGrammarDefinition(definition);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function compactLarkGrammarDefinition(definition: string): string {
|
|
10
|
+
const lines: string[] = [];
|
|
11
|
+
|
|
12
|
+
for (const line of definition.split(/\r?\n/)) {
|
|
13
|
+
const uncommented = stripLarkLineComment(line).trimEnd();
|
|
14
|
+
if (uncommented.trim()) {
|
|
15
|
+
lines.push(uncommented);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return lines.join("\n");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function stripLarkLineComment(line: string): string {
|
|
23
|
+
let inString: string | undefined;
|
|
24
|
+
let inRegex = false;
|
|
25
|
+
let escaped = false;
|
|
26
|
+
|
|
27
|
+
for (let i = 0; i < line.length; i++) {
|
|
28
|
+
const char = line[i];
|
|
29
|
+
const next = line[i + 1];
|
|
30
|
+
|
|
31
|
+
if (escaped) {
|
|
32
|
+
escaped = false;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (char === "\\") {
|
|
37
|
+
escaped = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (inString) {
|
|
42
|
+
if (char === inString) {
|
|
43
|
+
inString = undefined;
|
|
44
|
+
}
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (inRegex) {
|
|
49
|
+
if (char === "/") {
|
|
50
|
+
inRegex = false;
|
|
51
|
+
}
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (char === "/" && next === "/") {
|
|
56
|
+
return line.slice(0, i);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (char === '"' || char === "'") {
|
|
60
|
+
inString = char;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (char === "/") {
|
|
65
|
+
inRegex = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return line;
|
|
70
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi Code provider - wraps OpenAI or Anthropic API based on format setting.
|
|
3
|
+
*
|
|
4
|
+
* Kimi offers both OpenAI-compatible and Anthropic-compatible APIs:
|
|
5
|
+
* - OpenAI: https://api.kimi.com/coding/v1/chat/completions
|
|
6
|
+
* - Anthropic: https://api.kimi.com/coding/v1/messages
|
|
7
|
+
*
|
|
8
|
+
* The Anthropic API is generally more stable and recommended.
|
|
9
|
+
* Note: Kimi calculates TPM rate limits based on max_tokens, not actual output.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { getKimiCommonHeaders } from "../registry/oauth/kimi";
|
|
13
|
+
import type { Api, Context, Model } from "../types";
|
|
14
|
+
import type { AssistantMessageEventStream } from "../utils/event-stream";
|
|
15
|
+
import {
|
|
16
|
+
type OpenAIAnthropicApiFormat,
|
|
17
|
+
type OpenAIAnthropicShimOptions,
|
|
18
|
+
streamOpenAIAnthropicShim,
|
|
19
|
+
} from "./openai-anthropic-shim";
|
|
20
|
+
|
|
21
|
+
export type KimiApiFormat = OpenAIAnthropicApiFormat;
|
|
22
|
+
|
|
23
|
+
// Note: Anthropic SDK appends /v1/messages, so base URL should not include /v1
|
|
24
|
+
const KIMI_ANTHROPIC_BASE_URL = "https://api.kimi.com/coding";
|
|
25
|
+
|
|
26
|
+
export interface KimiOptions extends OpenAIAnthropicShimOptions {
|
|
27
|
+
/** API format: "openai" or "anthropic". Default: "anthropic" */
|
|
28
|
+
format?: KimiApiFormat;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Stream from Kimi Code, routing to either OpenAI or Anthropic API based on format.
|
|
33
|
+
* Returns synchronously like other providers - async header fetching happens internally.
|
|
34
|
+
*/
|
|
35
|
+
export function streamKimi(
|
|
36
|
+
model: Model<"openai-completions">,
|
|
37
|
+
context: Context,
|
|
38
|
+
options?: KimiOptions,
|
|
39
|
+
): AssistantMessageEventStream {
|
|
40
|
+
return streamOpenAIAnthropicShim(model, context, options, {
|
|
41
|
+
anthropicBaseUrl: KIMI_ANTHROPIC_BASE_URL,
|
|
42
|
+
defaultFormat: "anthropic",
|
|
43
|
+
extraHeaders: getKimiCommonHeaders,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Check if a model is a Kimi Code model.
|
|
49
|
+
*/
|
|
50
|
+
export function isKimiModel(model: Model<Api>): boolean {
|
|
51
|
+
return model.provider === "kimi-code";
|
|
52
|
+
}
|