From 3991c5d348e0fb6eb32d8e282fe25c12cad1d47e Mon Sep 17 00:00:00 2001 From: Joe McKenney Date: Wed, 23 Sep 2026 16:30:11 -0700 Subject: [PATCH] docs: add Vercel AI Gateway as a supported provider Signed-off-by: Joe McKenney --- README.md | 4 + examples/basic/README.md | 1 + examples/basic/vercel.yaml | 88 +++++++ internal/autoconfig/config_test.go | 23 ++ internal/autoconfig/testdata/vercel.yaml | 234 ++++++++++++++++++ .../llm-integrations/supported-endpoints.md | 1 + .../llm-integrations/supported-providers.md | 1 + site/docs/cli/run.md | 2 + .../connect-providers/index.md | 2 + .../connect-providers/vercel.md | 154 ++++++++++++ site/src/data/home/providers.ts | 1 + site/static/img/providers/vercel.svg | 1 + 12 files changed, 512 insertions(+) create mode 100644 examples/basic/vercel.yaml create mode 100644 internal/autoconfig/testdata/vercel.yaml create mode 100644 site/docs/getting-started/connect-providers/vercel.md create mode 100644 site/static/img/providers/vercel.svg diff --git a/README.md b/README.md index 024eaab05c..b5fe970ad6 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,10 @@ Agent Router supports a wide range of AI providers, making it easy to integrate Anthropic
Anthropic + + Vercel AI Gateway +
Vercel AI Gateway + diff --git a/examples/basic/README.md b/examples/basic/README.md index fb0c022a17..fe34f168c5 100644 --- a/examples/basic/README.md +++ b/examples/basic/README.md @@ -11,6 +11,7 @@ traffic for various AI providers. - `azure_openai.yaml` - Azure OpenAI integration - `gcp_vertex.yaml` - GCP Vertex AI integration - `tars.yaml` - TARS integration +- `vercel.yaml` - Vercel AI Gateway integration - `cohere.yaml` - Cohere integration - `typesafe.yaml` - TypeSafe AI (Jev) integration diff --git a/examples/basic/vercel.yaml b/examples/basic/vercel.yaml new file mode 100644 index 0000000000..c764f5c6e2 --- /dev/null +++ b/examples/basic/vercel.yaml @@ -0,0 +1,88 @@ +# Copyright Envoy AI Gateway Authors +# SPDX-License-Identifier: Apache-2.0 +# The full text of the Apache license is available in the LICENSE file at +# the root of the repo. + +apiVersion: aigateway.envoyproxy.io/v1beta1 +kind: AIGatewayRoute +metadata: + name: envoy-ai-gateway-basic-vercel + namespace: default +spec: + parentRefs: + - name: envoy-ai-gateway-basic + kind: Gateway + group: gateway.networking.k8s.io + rules: + - matches: + - headers: + - type: RegularExpression + name: x-ai-eg-model + value: .* + backendRefs: + - name: envoy-ai-gateway-basic-vercel + timeouts: + request: 120s +--- +apiVersion: aigateway.envoyproxy.io/v1beta1 +kind: AIServiceBackend +metadata: + name: envoy-ai-gateway-basic-vercel + namespace: default +spec: + schema: + name: OpenAI + backendRef: + name: envoy-ai-gateway-basic-vercel + kind: Backend + group: gateway.envoyproxy.io +--- +apiVersion: aigateway.envoyproxy.io/v1beta1 +kind: BackendSecurityPolicy +metadata: + name: envoy-ai-gateway-basic-vercel-apikey + namespace: default +spec: + targetRefs: + - group: aigateway.envoyproxy.io + kind: AIServiceBackend + name: envoy-ai-gateway-basic-vercel + type: APIKey + apiKey: + secretRef: + name: envoy-ai-gateway-basic-vercel-apikey + namespace: default +--- +apiVersion: gateway.envoyproxy.io/v1alpha1 +kind: Backend +metadata: + name: envoy-ai-gateway-basic-vercel + namespace: default +spec: + endpoints: + - fqdn: + hostname: ai-gateway.vercel.sh + port: 443 +--- +apiVersion: gateway.networking.k8s.io/v1alpha3 +kind: BackendTLSPolicy +metadata: + name: envoy-ai-gateway-basic-vercel-tls + namespace: default +spec: + targetRefs: + - group: "gateway.envoyproxy.io" + kind: Backend + name: envoy-ai-gateway-basic-vercel + validation: + wellKnownCACertificates: "System" + hostname: ai-gateway.vercel.sh +--- +apiVersion: v1 +kind: Secret +metadata: + name: envoy-ai-gateway-basic-vercel-apikey + namespace: default +type: Opaque +stringData: + apiKey: VERCEL_AI_GATEWAY_API_KEY # Replace with your Vercel AI Gateway API key. diff --git a/internal/autoconfig/config_test.go b/internal/autoconfig/config_test.go index db5d4530ff..661d50b364 100644 --- a/internal/autoconfig/config_test.go +++ b/internal/autoconfig/config_test.go @@ -37,6 +37,9 @@ var ( //go:embed testdata/tars.yaml tarsYAML string + //go:embed testdata/vercel.yaml + vercelYAML string + //go:embed testdata/openrouter.yaml openrouterYAML string @@ -234,6 +237,26 @@ func TestWriteConfig(t *testing.T) { }, expected: tarsYAML, }, + { + name: "Vercel AI Gateway (https host)", + input: ConfigData{ + Backends: []Backend{ + { + Name: "openai", + Hostname: "ai-gateway.vercel.sh", + Port: 443, + NeedsTLS: true, + }, + }, + OpenAI: &OpenAIConfig{ + BackendName: "openai", + SchemaName: "OpenAI", + Version: "", + }, + OTELLog: &otelLogConfig{Exporter: "console"}, + }, + expected: vercelYAML, + }, { name: "OpenRouter (https path prefix)", input: ConfigData{ diff --git a/internal/autoconfig/testdata/vercel.yaml b/internal/autoconfig/testdata/vercel.yaml new file mode 100644 index 0000000000..e926003616 --- /dev/null +++ b/internal/autoconfig/testdata/vercel.yaml @@ -0,0 +1,234 @@ +# Copyright Envoy AI Gateway Authors +# SPDX-License-Identifier: Apache-2.0 +# The full text of the Apache license is available in the LICENSE file at +# the root of the repo. + +# Configuration for Envoy AI Gateway with OpenAI compatible endpoint +apiVersion: gateway.networking.k8s.io/v1 +kind: GatewayClass +metadata: + name: aigw-run +spec: + controllerName: gateway.envoyproxy.io/gatewayclass-controller +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: Gateway +metadata: + name: aigw-run + namespace: default +spec: + gatewayClassName: aigw-run + listeners: + - name: http + protocol: HTTP + port: 1975 + infrastructure: + parametersRef: + group: gateway.envoyproxy.io + kind: EnvoyProxy + name: envoy-ai-gateway +--- +apiVersion: gateway.envoyproxy.io/v1alpha1 +kind: EnvoyProxy +metadata: + name: envoy-ai-gateway + namespace: default +spec: + logging: + level: + default: error + telemetry: + accessLog: + settings: + - matches: + # MCP metadata only exists on backend-listener requests, which do not carry /mcp paths. + # Match LLM by x-ai-eg-model and MCP by x-ai-eg-mcp-backend. + - "request.headers['x-ai-eg-model'] != ''" + sinks: + - type: File + file: + path: /dev/stdout + format: + type: JSON + json: + # LLM specific fields. Dynamic metadata expressions must match + # the ones defined in the AIGatewayRoute llmRequestCosts field or + # header-mapped attributes via OTEL_*_REQUEST_HEADER_ATTRIBUTES. + gen_ai.request.model: "%REQ(X-AI-EG-MODEL)%" + gen_ai.response.model: "%DYNAMIC_METADATA(io.envoy.ai_gateway:response_model)%" + gen_ai.provider.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:backend_name)%" + gen_ai.usage.input_tokens: "%DYNAMIC_METADATA(io.envoy.ai_gateway:llm_input_token)%" + gen_ai.usage.output_tokens: "%DYNAMIC_METADATA(io.envoy.ai_gateway:llm_output_token)%" + gen_ai.usage.reasoning_tokens: "%DYNAMIC_METADATA(io.envoy.ai_gateway:llm_reasoning_token)%" + session.id: "%DYNAMIC_METADATA(io.envoy.ai_gateway:session.id)%" + # Common fields + start_time: "%START_TIME%" + method: "%REQ(:METHOD)%" + request.path: "%REQ(:PATH)%" + x-envoy-origin-path: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%" + response_code: "%RESPONSE_CODE%" + connection_termination_details: "%CONNECTION_TERMINATION_DETAILS%" + upstream_transport_failure_reason: "%UPSTREAM_TRANSPORT_FAILURE_REASON%" + bytes_received: "%BYTES_RECEIVED%" + bytes_sent: "%BYTES_SENT%" + duration: "%DURATION%" + x-envoy-upstream-service-time: "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%" + x-forwarded-for: "%REQ(X-FORWARDED-FOR)%" + user-agent: "%REQ(USER-AGENT)%" + x-request-id: "%REQ(X-REQUEST-ID)%" + upstream_host: "%UPSTREAM_HOST%" + upstream_cluster: "%UPSTREAM_CLUSTER%" + upstream_local_address: "%UPSTREAM_LOCAL_ADDRESS%" + downstream_local_address: "%DOWNSTREAM_LOCAL_ADDRESS%" + downstream_remote_address: "%DOWNSTREAM_REMOTE_ADDRESS%" + - matches: + - "request.headers['x-ai-eg-mcp-backend'] != ''" + sinks: + - type: File + file: + path: /dev/stdout + format: + type: JSON + json: + # MCP specific fields + jsonrpc.request.id: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_request_id)%" + mcp.session.id: "%REQ(MCP-SESSION-ID)%" + mcp.method.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_method)%" + mcp.tool.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_tool_name)%" + session.id: "%DYNAMIC_METADATA(io.envoy.ai_gateway:session.id)%" + mcp.provider.name: "%DYNAMIC_METADATA(io.envoy.ai_gateway:mcp_backend)%" + # Common fields + start_time: "%START_TIME%" + method: "%REQ(:METHOD)%" + request.path: "%REQ(:PATH)%" + x-envoy-origin-path: "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%" + response_code: "%RESPONSE_CODE%" + connection_termination_details: "%CONNECTION_TERMINATION_DETAILS%" + upstream_transport_failure_reason: "%UPSTREAM_TRANSPORT_FAILURE_REASON%" + bytes_received: "%BYTES_RECEIVED%" + bytes_sent: "%BYTES_SENT%" + duration: "%DURATION%" + x-envoy-upstream-service-time: "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%" + x-forwarded-for: "%REQ(X-FORWARDED-FOR)%" + user-agent: "%REQ(USER-AGENT)%" + x-request-id: "%REQ(X-REQUEST-ID)%" + upstream_host: "%UPSTREAM_HOST%" + upstream_cluster: "%UPSTREAM_CLUSTER%" + upstream_local_address: "%UPSTREAM_LOCAL_ADDRESS%" + downstream_local_address: "%DOWNSTREAM_LOCAL_ADDRESS%" + downstream_remote_address: "%DOWNSTREAM_REMOTE_ADDRESS%" + +--- +apiVersion: aigateway.envoyproxy.io/v1beta1 +kind: AIGatewayRoute +metadata: + name: aigw-run + namespace: default +spec: + parentRefs: + - name: aigw-run + kind: Gateway + group: gateway.networking.k8s.io + # Simple rule: route everything to OpenAI backend + rules: + - matches: + - headers: + - type: RegularExpression + name: x-ai-eg-model + value: .* + backendRefs: + - name: openai + namespace: default + timeouts: + request: 120s + # Configure the LLM request costs so they can be included in the Envoy access logs + llmRequestCosts: + - metadataKey: llm_input_token + type: InputToken + - metadataKey: llm_output_token + type: OutputToken + - metadataKey: llm_reasoning_token + type: ReasoningToken +--- +apiVersion: gateway.envoyproxy.io/v1alpha1 +kind: Backend +metadata: + name: openai + namespace: default +spec: + endpoints: + - fqdn: + hostname: ai-gateway.vercel.sh + port: 443 +--- +apiVersion: aigateway.envoyproxy.io/v1beta1 +kind: AIServiceBackend +metadata: + name: openai + namespace: default +spec: + timeouts: + request: 3m + schema: + name: OpenAI + backendRef: + name: openai + kind: Backend + group: gateway.envoyproxy.io + namespace: default +--- +apiVersion: gateway.networking.k8s.io/v1alpha3 +kind: BackendTLSPolicy +metadata: + name: openai-tls + namespace: default +spec: + targetRefs: + - group: 'gateway.envoyproxy.io' + kind: Backend + name: openai + validation: + wellKnownCACertificates: "System" + hostname: ai-gateway.vercel.sh +--- +# By default, Envoy Gateway sets the buffer limit to 32kiB which is not +# sufficient for AI workloads. This ClientTrafficPolicy sets the buffer limit +# to 50MiB as an example. +# TODO: Remove after https://github.com/envoyproxy/ai-gateway/issues/1212 +apiVersion: gateway.envoyproxy.io/v1alpha1 +kind: ClientTrafficPolicy +metadata: + name: client-buffer-limit + namespace: default +spec: + targetRefs: + - group: gateway.networking.k8s.io + kind: Gateway + name: aigw-run + connection: + bufferLimit: 50Mi +--- +apiVersion: v1 +kind: Secret +metadata: + name: openai-apikey + namespace: default +type: Opaque +stringData: + apiKey: ${OPENAI_API_KEY} +--- +apiVersion: aigateway.envoyproxy.io/v1beta1 +kind: BackendSecurityPolicy +metadata: + name: openai-apikey + namespace: default +spec: + targetRefs: + - group: aigateway.envoyproxy.io + kind: AIServiceBackend + name: openai + type: APIKey + apiKey: + secretRef: + name: openai-apikey +--- diff --git a/site/docs/capabilities/llm-integrations/supported-endpoints.md b/site/docs/capabilities/llm-integrations/supported-endpoints.md index ed83453c1c..cbb12da929 100644 --- a/site/docs/capabilities/llm-integrations/supported-endpoints.md +++ b/site/docs/capabilities/llm-integrations/supported-endpoints.md @@ -606,6 +606,7 @@ The following table summarizes which providers support which endpoints: | [Hunyuan](https://cloud.tencent.com/document/product/1729/111007) | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Via OpenAI-compatible API | | [Tencent LLM Knowledge Engine](https://www.tencentcloud.com/document/product/1255/70381) | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Via OpenAI-compatible API | | [Tetrate Agent Router Service (TARS)](https://router.tetrate.ai/) | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | Via OpenAI-compatible API | +| [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) | ⚠️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | Via OpenAI-compatible API; Anthropic endpoints via the `Anthropic` schema | | [Google Vertex AI](https://cloud.google.com/vertex-ai/docs/reference/rest) | ✅ | 🚧 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | Via API translation | | [Anthropic on Vertex AI](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude) | ✅ | ❌ | 🚧 | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | Via API translation | | [Anthropic on AWS Bedrock](https://aws.amazon.com/bedrock/anthropic/) | 🚧 | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | Native Anthropic API | diff --git a/site/docs/capabilities/llm-integrations/supported-providers.md b/site/docs/capabilities/llm-integrations/supported-providers.md index a01b18e378..8f89b84ba3 100644 --- a/site/docs/capabilities/llm-integrations/supported-providers.md +++ b/site/docs/capabilities/llm-integrations/supported-providers.md @@ -30,6 +30,7 @@ Below is a table of currently supported providers and their respective configura | [Hunyuan](https://cloud.tencent.com/document/product/1729/111007) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | | | [Tencent LLM Knowledge Engine](https://www.tencentcloud.com/document/product/1255/70381?lang=en) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | | | [Tetrate Agent Router Service (TARS)](https://router.tetrate.ai/) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | | +| [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) | `{"name":"OpenAI","prefix":"/v1"}` or `{"name":"Anthropic"}` | [API Key] or [Anthropic API Key] | ✅ | Aggregating gateway. Model IDs are namespaced, e.g. `openai/gpt-4o-mini`. | | [SambaNova](https://docs.sambanova.ai/sambastudio/latest/open-ai-api.html) | `{"name":"OpenAI","prefix":"/v1"}` | [API Key] | ✅ | | | Self-hosted-models | `{"name":"OpenAI","prefix":"/v1"}` | N/A | ⚠️ | Depending on the API schema spoken by self-hosted servers. For example, [vLLM] speaks the OpenAI format. Also, API Key auth can be configured as well. | | [Anthropic](https://docs.claude.com/en/home) | `{"name":"Anthropic"}` | [Anthropic API Key] | ✅ | Support only Native Anthropic messages endpoint | diff --git a/site/docs/cli/run.md b/site/docs/cli/run.md index 5b9b2802aa..053021e562 100644 --- a/site/docs/cli/run.md +++ b/site/docs/cli/run.md @@ -33,6 +33,8 @@ AZURE_OPENAI_ENDPOINT=https://example.openai.azure.com \ aigw run # Tetrate Agent Router Service (TARS) OPENAI_BASE_URL=https://api.router.tetrate.ai/v1 OPENAI_API_KEY=sk-your-key aigw run +# Vercel AI Gateway +OPENAI_BASE_URL=https://ai-gateway.vercel.sh/v1 OPENAI_API_KEY=your-vercel-ai-gateway-key aigw run # Ollama running locally OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_API_KEY=unused aigw run ``` diff --git a/site/docs/getting-started/connect-providers/index.md b/site/docs/getting-started/connect-providers/index.md index 4d3d934941..08c66bea38 100644 --- a/site/docs/getting-started/connect-providers/index.md +++ b/site/docs/getting-started/connect-providers/index.md @@ -14,6 +14,7 @@ In this getting started guide you'll find quickstart setups to connect to the fo - [Tetrate Agent Router Service (TARS)](./tars.md) - Connect to Tetrate Agent Router Service's models - [Bitdeer AI](./bitdeer.md) - Connect to Bitdeer AI's OpenAI-compatible inference models +- [Vercel AI Gateway](./vercel.md) - Route to Vercel AI Gateway's OpenAI-compatible endpoint - [OpenAI](./openai.md) - Connect to OpenAI's GPT models - [Anthropic](./anthropic.md) - Connect to Anthropic's Claude models - [AWS Bedrock](./aws-bedrock.md) - Access AWS Bedrock's suite of foundation models @@ -44,6 +45,7 @@ Choose your provider to get started: - [Connect Tetrate Agent Router Service (TARS)](./tars.md) - [Connect Bitdeer AI](./bitdeer.md) +- [Connect Vercel AI Gateway](./vercel.md) - [Connect OpenAI](./openai.md) - [Connect Anthropic](./anthropic.md) - [Connect AWS Bedrock](./aws-bedrock.md) diff --git a/site/docs/getting-started/connect-providers/vercel.md b/site/docs/getting-started/connect-providers/vercel.md new file mode 100644 index 0000000000..da2d2bf976 --- /dev/null +++ b/site/docs/getting-started/connect-providers/vercel.md @@ -0,0 +1,154 @@ +--- +id: vercel +title: Connect Vercel AI Gateway +sidebar_position: 4 +--- + +import CodeBlock from '@theme/CodeBlock'; +import vars from '../../\_vars.json'; + +# Connect Vercel AI Gateway + +This guide will help you configure Agent Router to route traffic to [Vercel AI Gateway](https://vercel.com/docs/ai-gateway), +which exposes models from many providers behind a single OpenAI-compatible endpoint at +`https://ai-gateway.vercel.sh/v1`. + +Because Vercel AI Gateway speaks the [OpenAI Chat Completions API](https://vercel.com/docs/ai-gateway/sdks-and-apis/openai-chat-completions) +and authenticates with `Authorization: Bearer `, it is configured with the `OpenAI` schema and +an API key, the same as any other OpenAI-compatible provider. This is useful when you want a single +egress and spend-tracking layer for models that are not hosted in your own cluster. + +## Prerequisites + +Before you begin, you'll need: + +- An [AI Gateway API key](https://vercel.com/docs/ai-gateway/authentication-and-byok#api-key) +- Basic setup completed from the [Basic Usage](../basic-usage.md) guide + +Because Vercel AI Gateway fronts many models, the route in this example matches every value of +`x-ai-eg-model` rather than a fixed list. Remove the mock route from the basic setup first so the +two do not overlap: + +```shell +kubectl delete aigatewayroute envoy-ai-gateway-basic +``` + +## Configuration Steps + +:::info Ready to proceed? +Ensure you have followed the steps in [Connect Providers](../connect-providers/) +::: + +### 1. Download configuration template + + +{`curl -O https://raw.githubusercontent.com/theagentrouter/agent-router/${vars.aigwGitRef}/examples/basic/vercel.yaml`} + + +### 2. Configure Vercel AI Gateway Credentials + +Edit the `vercel.yaml` file to replace the Vercel placeholder value: + +- Find the section containing `VERCEL_AI_GATEWAY_API_KEY` +- Replace it with your actual Vercel AI Gateway API key + +:::caution Security Note +Make sure to keep your API key secure and never commit it to version control. +The key will be stored in a Kubernetes secret. +::: + +### 3. Apply Configuration + +Apply the updated configuration and wait for the Gateway pod to be ready. If you already have a Gateway running, +then the secret credential update will be picked up automatically in a few seconds. + +```shell +kubectl apply -f vercel.yaml + +kubectl wait pods --timeout=2m \ + -l gateway.envoyproxy.io/owning-gateway-name=envoy-ai-gateway-basic \ + -n envoy-gateway-system \ + --for=condition=Ready +``` + +### 4. Test the Configuration + +You should have set `$GATEWAY_URL` as part of the basic setup before connecting to providers. +See the [Basic Usage](../basic-usage.md) page for instructions. + +Vercel AI Gateway model IDs follow the `creator/model-name` format, for example `openai/gpt-4o-mini` +or `anthropic/claude-sonnet-4.5`. See [Models & Providers](https://vercel.com/docs/ai-gateway/models-and-providers) +for the available IDs, or query `https://ai-gateway.vercel.sh/v1/models`. + +#### Test Chat Completions + +```shell +curl -H "Content-Type: application/json" \ + -d '{ + "model": "openai/gpt-4o-mini", + "messages": [ + { + "role": "user", + "content": "Hi." + } + ] + }' \ + $GATEWAY_URL/v1/chat/completions +``` + +#### Test Embeddings + +```shell +curl -H "Content-Type: application/json" \ + -d '{ + "model": "openai/text-embedding-3-small", + "input": "Agent Router" + }' \ + $GATEWAY_URL/v1/embeddings +``` + +## Using the native Anthropic API + +Vercel AI Gateway also serves the native Anthropic Messages API on the same host. To route to it, +configure a second `AIServiceBackend` with the `Anthropic` schema and an `AnthropicAPIKey` +`BackendSecurityPolicy`, which sends the key in the `x-api-key` header: + +```yaml +spec: + schema: + name: Anthropic +``` + +Requests then go to `$GATEWAY_URL/anthropic/v1/messages`. See +[Supported Providers](/docs/capabilities/llm-integrations/supported-providers) for the full +schema and authentication matrix. + +## Troubleshooting + +If you encounter issues: + +1. Verify your API key is correct and active + +2. Check pod status: + + ```shell + kubectl get pods -n envoy-gateway-system + ``` + +3. View controller logs: + + ```shell + kubectl logs -n envoy-ai-gateway-system deployment/ai-gateway-controller + ``` + +4. View External Processor Logs + + ```shell + kubectl logs -n envoy-gateway-system -l gateway.envoyproxy.io/owning-gateway-name=envoy-ai-gateway-basic -c ai-gateway-extproc + ``` + +5. Common errors: + - 401: Invalid API key + - 403: The API key's project does not have access to the requested model + - 429: Rate limit or spend limit exceeded + - 502: Upstream model provider unavailable diff --git a/site/src/data/home/providers.ts b/site/src/data/home/providers.ts index a2be97daca..eb4317510d 100644 --- a/site/src/data/home/providers.ts +++ b/site/src/data/home/providers.ts @@ -26,5 +26,6 @@ export const providers: Provider[] = [ { name: 'SambaNova', logoUrl: '/img/providers/sambanova.svg', status: 'supported' }, { name: 'Tetrate Agent Router Service', logoUrl: '/img/providers/tars.svg', status: 'supported' }, { name: 'Together AI', logoUrl: '/img/providers/together-ai.svg', status: 'supported' }, + { name: 'Vercel AI Gateway', logoUrl: '/img/providers/vercel.svg', status: 'supported' }, { name: 'Vertex AI', logoUrl: '/img/providers/vertex-ai.svg', status: 'supported' }, ]; diff --git a/site/static/img/providers/vercel.svg b/site/static/img/providers/vercel.svg new file mode 100644 index 0000000000..ecf3cb6b4b --- /dev/null +++ b/site/static/img/providers/vercel.svg @@ -0,0 +1 @@ +Vercel