Skip to main content

Providers

The Ferro Labs AI Gateway speaks to 30 LLM providers behind a single OpenAI-compatible API. Point any client written against the OpenAI SDK at the gateway and it reaches every provider unchanged โ€” the gateway translates each request and response to and from the OpenAI shape, whether the upstream is an OpenAI-compatible surface or a native wire (Anthropic Messages, Gemini generateContent, Cohere v2, Bedrock InvokeModel, Vertex, Replicate).

This page is the provider directory: the logo grid links each provider to its per-provider setup, and the endpoint-support matrix shows which surfaces each one implements. For the catalogue of individual models (2,500+ across all providers), browse ferrolabs.ai/models โ€” this page does not list models.

targets is an allowlist (v1.4.0+)

Setting a provider's environment variable registers it, but registration is not routing. A provider only serves traffic when it is listed under targets[] in your config. A request for a model owned only by an unlisted provider returns 404 model_not_found, even though the provider is present in the process and healthy. Registration is driven by which credentials the environment holds; routing is driven by which names the config lists โ€” the two sets can be disjoint. See Routing and Provider configuration.

Supported providersโ€‹

Endpoint-support matrixโ€‹

Which OpenAI-compatible surface each provider implements, as of v1.5.2. This mirrors the machine-checked matrix in the gateway source (providers/README.md), which fails the build if a provider's real interface set ever drifts from it.

  • โœ“ โ€” a typed surface (Complete, Embed, Rerank, โ€ฆ), or a working /v1/* pass-through for the Proxy column.
  • โ€” โ€” not implemented, or (for Proxy) a native-wire provider whose raw /v1/* pass-through returns 501 by design. Reach those through the translated surfaces to their left.

Audio groups transcription (STT) and speech (TTS) โ€” โœ“ if a provider serves either. Rerank uses the Cohere-v2 contract; every other column uses the OpenAI contract. Every provider implements Chat and Stream by definition.

ProviderChatStreamEmbedImageAudioRerankModer.BatchResponsesProxy
AI21 Labsโœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Anthropicโœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”
Azure AI Foundryโœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”
Azure OpenAIโœ“โœ“โœ“โœ“โœ“โ€”โ€”โœ“โ€”โ€”
AWS Bedrockโœ“โœ“โœ“โœ“โ€”โœ“โ€”โ€”โ€”โ€”
Cerebrasโœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Cloudflare Workers AIโœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Cohereโœ“โœ“โœ“โ€”โ€”โœ“โ€”โ€”โ€”โ€”
Databricksโœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โœ“
DeepInfraโœ“โœ“โœ“โœ“โœ“โœ“โ€”โ€”โ€”โœ“
DeepSeekโœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Fireworks AIโœ“โœ“โœ“โ€”โœ“โ€”โ€”โ€”โ€”โœ“
Google Geminiโœ“โœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”
Groqโœ“โœ“โ€”โ€”โœ“โ€”โ€”โœ“โ€”โœ“
Hugging Faceโœ“โœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โœ“
Mistral AIโœ“โœ“โœ“โ€”โœ“โ€”โœ“โ€”โ€”โœ“
Moonshot AIโœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Novitaโœ“โœ“โœ“โ€”โ€”โ€”โ€”โœ“โ€”โœ“
NVIDIA NIMโœ“โœ“โœ“โ€”โ€”โœ“โ€”โ€”โ€”โœ“
Ollamaโœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Ollama Cloudโœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”
OpenAIโœ“โœ“โœ“โœ“โœ“โ€”โœ“โœ“โœ“โœ“
OpenRouterโœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Perplexityโœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”โ€”โœ“
Qwenโœ“โœ“โœ“โ€”โ€”โ€”โ€”โœ“โ€”โœ“
Replicateโœ“โœ“โ€”โœ“โ€”โ€”โ€”โ€”โ€”โ€”
SambaNovaโœ“โœ“โœ“โ€”โœ“โ€”โ€”โ€”โ€”โœ“
Together AIโœ“โœ“โœ“โœ“โœ“โœ“โ€”โ€”โ€”โœ“
Google Vertex AIโœ“โœ“โœ“โœ“โ€”โ€”โ€”โ€”โ€”โ€”
xAIโœ“โœ“โ€”โœ“โ€”โ€”โ€”โ€”โœ“โœ“

Totals โ€” Chat / Stream: 30 ยท Embeddings: 21 ยท Images: 10 ยท Audio: 9 ยท Rerank: 5 (bedrock, cohere, deepinfra, nvidia-nim, together) ยท Moderations: 2 (openai, mistral) ยท Batch: 5 (openai, azure-openai, groq, novita, qwen) ยท Responses: 2 (openai, xai) ยท Proxy pass-through: 21.

Nine providers show โ€” for Proxy. Eight are native-wire โ€” Anthropic, AWS Bedrock, Cohere, Google Gemini, Google Vertex AI, Replicate, and the two Azure surfaces โ€” whose raw /v1/* pass-through returns 501 by design (reach them through the translated columns). Ollama Cloud is the one provider that is not proxiable at all. A โ€” in a capability column is not a routing limitation: those providers still route every model the catalog, live discovery, or targets[].models names.

How a provider is declaredโ€‹

A provider has two independent parts: credentials (from the environment) and a target (in your config). Both must be present for the provider to serve.

Credentials never live in config.yaml. Each provider reads its API key and any special settings from environment variables โ€” OPENAI_API_KEY, ANTHROPIC_API_KEY, AZURE_OPENAI_ENDPOINT, and so on. A provider is auto-registered the moment its required environment variables are present; no main.go edit and no config entry is needed to register it.

A target names a provider by virtual_key. In config, a routing target refers to a registered provider by its id โ€” that id is the whole declaration:

strategy:
mode: fallback
targets:
- virtual_key: openai # the provider id โ€” this is the declaration
retry:
attempts: 3
- virtual_key: anthropic

Only providers listed under targets[] route traffic (see the allowlist warning above). For every provider's exact environment variables, optional <PROVIDER>_BASE_URL override, and any special configuration keys, see Provider configuration.

  • Provider configuration โ€” per-provider environment variables and special settings
  • Routing โ€” how targets[], strategies, and failover work
  • Model catalogue โ€” every model across all 30 providers
  • Quickstart โ€” send your first request through the gateway
  • API reference โ€” the OpenAI-compatible endpoints each column maps to