Providers & Day-Zero Models
Supported providers
Create an agent against any of these upstreams. Each agent gets its own route with the provider key injected from a KnoxCall secret — your app never holds it.The OpenAI base path matters
For every provider with a base path in that column, point an OpenAI SDK at the agent URL plus that path —OPENAI_BASE_URL=https://<tenant>.knoxcall.com/v1/ai/<agent>/openai/v1
for Groq, …/v1 for the rest. KnoxCall forwards agent URL + everything after it to the provider’s host, so the sub-path is what turns
POST /chat/completions into Groq’s real api.groq.com/openai/v1/chat/completions.
The Connect tab renders the right one for you; the catalog is the source of
truth (GET /admin/ai-gateway/quickstart/context returns openai_compat_path
per provider).
Tenant-supplied upstreams
Azure OpenAI, Ollama, Bedrock and “Other OpenAI-compatible” point at your endpoint, so you supply the upstream base URL when creating the agent. For Bedrock and “Other OpenAI-compatible” that URL is resolved and checked before the agent is created: a hostname that resolves to a loopback, private, link-local or cloud-metadata address is refused with a 400. That is not paranoia about your network — the request carries your decrypted provider credential to whatever that name resolves to, so it is the one place a typo or a hostile DNS record costs you a key. Ollama is deliberately exempt: pointing at your own box on10.0.0.5 or localhost:11434 is the entire point of it.
“Other OpenAI-compatible” also requires a default_model, because we cannot
know which model your endpoint serves — and for the same reason its cost is
recorded as unpriced. Azure and Ollama are unpriced too: an Azure deployment
is billed under your own Azure agreement, and a self-hosted Ollama box has no
per-token price at all.
AWS Bedrock: you keep the key, we sign
Bedrock is the one provider with no static credential header. Its secret access key is never transmitted — it is the HMAC key for a signature over the request itself. So KnoxCall stores a JSON AWS credential as the secret:application/vnd.amazon.eventstream — length-prefixed binary frames, not SSE —
so the mid-stream PII rewriter cannot apply; redaction runs on its buffered
responses, exactly as it does for Cohere. And Bedrock prices are region-scoped,
while the shipped pricebook carries the
us-east-1/us-west-2 rates, so an agent pinned elsewhere is estimated rather
than exact.
Gemini and Cohere use their own native request/response shapes — send Gemini
requests in Gemini’s format and Cohere in Cohere’s. The gateway proxies them
through unchanged; PII redaction,
firewall, budgets, and
usage attribution all still apply. OpenAI ↔ Anthropic shape translation is
automatic on the buffered path for those two.
Day-zero models — the runbook
When a provider ships a new model, you don’t wait on a KnoxCall release. Two steps, no remote config fetch (a deliberate post-supply-chain-compromise choice — the gateway never pulls config from a third party at runtime):- Use it immediately. Set the new model id in your request (or as the agent’s default model). The gateway proxies any model the upstream accepts — there is no allowlist unless you add one.
- Price it (for budgets/chargeback). Add a row to the relevant
packs/ai-gateway-pricebook/{provider}.jsonmanifest with the list price and a datedeffective_from, then reseed. Until then the call still succeeds and is recorded withcost_source = 'unpriced'(never silently $0), and the weekly pricebook-drift check raises an alertableai_gateway.unpriced_modelevent so you know to add it. See Budgets & FinOps.
Model allow/deny
Optionally constrain which models an agent may call via its model allowlist / denylist (Models tab, ormodel_allowlist on the agent). A request for a model
outside the allowlist is rejected before it reaches the upstream.