Choose OmniSwitch when…
- You want an inspectable self-hosted control layer in one Go binary.
- Local guardrails, scoped gateway keys, and request traces meet your needs.
- You can validate documented API subsets and accept public-beta boundaries.
Compare a secure self-hosted control plane, AI gateway routing, and agent protocol scope with LiteLLM. Evaluate the operating model before the feature list.
Updated · Public beta
Python proxy; edition scope varies. Register a8a594b; each cell records its own version and verified date. A capability review, not a benchmark.
No scores or totals: uneven documentation coverage is not a measure of product quality.
| Capability | OmniSwitch[1]Register a8a594b | LiteLLM[2]Python proxy; edition scope varies | Rust gateway (beta)Separate registered edition |
|---|---|---|---|
| Deployment & license | |||
| Self-hosted deployment | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| SQLite / Postgres storage | SupportedSQLite by default; PostgreSQL via OMNISWITCH_DATABASE_URL. Logs and keys remain SQLite-local even in the Postgres case per the project's own docs.
| PartialPostgres (via Prisma) is the documented persistence store; SQLite-only mode not confirmed.
Postgres (via Prisma) is the documented persistence store; SQLite-only mode not confirmed. | Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Kubernetes manifests / Helm chart | SupportedKustomize manifests (Deployment/Service/ConfigMap/Secret example/PVCs/Redis) plus a Helm chart; no operator/CRDs/inference-aware routing.
| SupportedOfficial Helm chart.
| SupportedDeployed via the same Helm chart as the parent proxy, with rust: true set per-model.
|
| Config hot reload | SupportedConfig hot reload covers routes, guardrails, cache posture, circuit breaker, and shadow provider without restart.
| Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNot documented.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Built-in dashboard/UI | SupportedLocal dashboard for logs, metrics, prompts, providers, and guardrails.
| SupportedBuilt-in admin UI.
| SupportedShares the parent proxy's admin UI.
|
| License | Supported | PartialMIT for the core; the enterprise/ directory is separately licensed (proprietary) per the repo's own LICENSE file.
MIT for the core; the enterprise/ directory is separately licensed (proprietary) per the repo's own LICENSE file. | Not verifiedShips inside the same container as the parent proxy (MIT core); no separate license statement found for the Rust component specifically.
|
| APIs & providers | |||
| OpenAI-compatible chat completions | Supported/v1/chat/completions, streaming and non-streaming.
| SupportedCore proxy surface.
| Not availableAt pin date the Rust path covers /chat/completions only for anthropic and bedrock (Converse) providers, not the general OpenAI-compatible path; unsupported routes silently fall back to the Python path.
|
| OpenAI-compatible embeddings | Supported | SupportedDocumented embeddings endpoint pass-through.
| Not verifiedNot listed among documented Rust-path routes at pin date.
|
| OpenAI Responses API | Partial/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI).
/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI). | PartialLiteLLM documents OpenAI Responses API support; depth of parity not independently verified.
LiteLLM documents OpenAI Responses API support; depth of parity not independently verified. | Not verifiedNot listed among documented Rust-path routes at pin date.
|
| Anthropic Messages API | Partial/v1/messages core subset. | SupportedAnthropic /v1/messages pass-through documented.
| SupportedDocumented Rust-path support for anthropic and azure_ai providers.
|
| Native (non-passthrough) provider adapters | Partial4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets.
4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets. | Supported100+ provider integrations claimed.
| PartialRust path currently limited to anthropic + bedrock (chat) and anthropic + azure_ai (messages); everything else runs on the Python path.
Rust path currently limited to anthropic + bedrock (chat) and anthropic + azure_ai (messages); everything else runs on the Python path. |
| Custom/generic OpenAI-compatible endpoint | SupportedGeneric custom provider adapter with presets for Azure OpenAI, Ollama, vLLM, LiteLLM, DeepSeek, Together, Fireworks, and aliases.
| Supportedopenai-compatible custom endpoint provider type.
| Not availableNot yet on the Rust path at pin date.
|
| Routing, reliability & cost | |||
| Routing & fallbacks | Supportedroute-level fallbacks, max_retries, retry_backoff, retry_codes, per-attempt timeout.
| SupportedDocumented fallback and retry configuration across deployments.
| Not availableLaunch post places router features (fallbacks etc.) on the Rust path later than the initial chat/messages routes.
|
| Weighted / load-balanced routing | SupportedWeighted variants per route.
| SupportedRound-robin/least-busy/usage-based routing strategies.
| Not availableRouter features documented as landing after the initial Rust chat/messages routes.
|
| Conditional routing (rule/expression based) | SupportedCEL condition expressions on route variants.
| Not verifiedRouting strategies documented; no expression-language conditional routing found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not availableSame as weighted-load-balancing.
|
| Circuit breaker | SupportedDefault 5 failures / 60s cooldown, configurable via gateway.circuit_breaker_failures / _cooldown.
| PartialDeployment "cooldown" after repeated failures approximates a circuit breaker; not documented as a named circuit-breaker feature.
Deployment "cooldown" after repeated failures approximates a circuit breaker; not documented as a named circuit-breaker feature. | Not availableSame as weighted-load-balancing.
|
| Exact-match cache | SupportedSHA-256 request-fingerprint cache key, tenant-scoped (api_key/workspace/organization/global), SQLite-backed.
| SupportedResponse caching documented.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Similarity cache (see scope) | SupportedNOT embedding-based. Vectorize() builds a normalized token-frequency map over lowercased, stop-word-filtered tokens; Similarity() is cosine over those token-frequency vectors. State this precisely wherever OmniSwitch's cache is compared to embedding-based semantic caches.
| SupportedDocumented semantic caching (embedding-based similarity, per product page).
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Budgets and quotas | SupportedCost and token budgets per API key.
| SupportedBudgets/spend limits per key/user/team/model.
| Not verifiedNot documented for the Rust path specifically; likely still enforced by the surrounding Python proxy.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Rate limiting | PartialLocal sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter.
Local sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter. | SupportedRPM/TPM limits per key/team/model.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Token-based rate limits | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Identity & guardrails | |||
| API key management | SupportedHashed API keys, bootstrap owner key, workspace-scoped keys.
| SupportedVirtual keys for per-team/user credential issuance.
| SupportedShares the parent proxy's virtual-key auth front door.
|
| OIDC / JWT identity | SupportedOIDC JWT/JWKS workload identity (identity.oidc.jwks_url/issuer/audience).
| SupportedJWT auth / SSO documented.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Mutual TLS | Not availableExplicitly not implemented; listed as a roadmap item, not a shipped feature.
| Not verifiedNo mTLS documentation found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNot documented.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| RBAC / policy engine (CEL or equivalent) | SupportedCEL allow/deny authorization rules plus fixed role gates.
| PartialTeam/role-based access control documented; no CEL-style policy expression engine found.
Team/role-based access control documented; no CEL-style policy expression engine found. | Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Built-in guardrails | SupportedBuilt-in PII/prompt-injection/SQL-injection/toxicity/secret detectors plus custom regex rules, single-pass Rust-WASM scan with pure-Go fallback.
| SupportedGuardrail hooks including PII masking (Presidio) and moderation.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Guardrail webhooks / external connectors | SupportedHTTP webhook connectors with configurable stage/action/timeout/fail_open.
| SupportedCustom guardrail hook / webhook integration documented.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Output redaction | Supportedredact action available on output-stage guardrail rules.
| SupportedPII masking guardrail acts on output.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Guardrails applied to streaming output | Supportedguardrails.stream_buffer defaults to true: the full SSE stream is buffered and scanned before release, which means TTFT with guardrails on is dominated by upstream generation time, not gateway overhead. Benchmark both stream_buffer=true and false and label them.
| Not verifiedNot confirmed whether guardrails run against streaming output chunk-by-chunk vs buffered.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNot documented.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Governed agent infrastructure | |||
| MCP gateway | SupportedHTTP MCP targets with streamed SSE / streamable-HTTP pass-through.
| SupportedMCP gateway support documented.
| Not availableNot on the Rust path at pin date.
|
| MCP over stdio | SupportedPersistent stdio MCP transport targets.
| Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not availableNot on the Rust path at pin date.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| MCP federation (multiple targets) | SupportedMultiple named MCP targets, policy-gated tools/call, server-side headers.
| PartialMultiple MCP servers can be registered; federation depth not independently verified.
Multiple MCP servers can be registered; federation depth not independently verified. | Not availableNot on the Rust path at pin date.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| OpenAPI-to-MCP conversion | Not availableNot implemented; explicit gap in the project's own comparison doc.
| Not availablePer the project's own internal comparison notes (comparison_iter7.md), LiteLLM has no OpenAPI-to-MCP conversion. Not independently re-verified against current LiteLLM docs.
| Not availableNot on the Rust path; parent proxy also marked no per internal notes.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| MCP OAuth / token exchange | SupportedRFC 8693 token exchange plus RFC 7523 JWT Bearer Grant for MCP OAuth delegation.
| Not availablePer this project's internal comparison notes (comparison_iter7.md); not independently re-verified.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not availableNot on the Rust path.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| A2A agent card discovery | SupportedPublic A2A v1 Agent Card discovery (/.well-known/agent-card.json) plus authenticated GetExtendedAgentCard.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy. | Not availableNo A2A agent-card discovery found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not availableNot documented anywhere in LiteLLM.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| A2A task methods | PartialSendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy. SendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported. | Not availableNo A2A task lifecycle found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not availableNot documented anywhere in LiteLLM.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Operations & evidence | |||
| Prompt management | PartialTemplates with version history and rendering; no approval workflow, rollback/promotion, or experiments.
Templates with version history and rendering; no approval workflow, rollback/promotion, or experiments. | Not verifiedNot independently verified.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Evals / experiments | PartialPolicy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring.
Policy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring. | Not verifiedNot independently verified; this project's internal notes say no, but that predates current LiteLLM releases and was not re-checked against current docs.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not availableNot on the Rust path; parent proxy also unconfirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| OTLP telemetry export | SupportedOTel trace export (tested against Langfuse/Jaeger/Tempo).
| SupportedOpenTelemetry callback integration documented.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Prometheus metrics | Supported/metrics endpoint, gated by OMNISWITCH_PROMETHEUS_ENABLED.
| SupportedPrometheus metrics endpoint documented.
| Not verifiedNot documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Published cross-gateway benchmarks | PartialIn-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up.
In-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up. | SupportedAIGatewayBench blog series comparing LiteLLM, Bifrost, Portkey.
Published source claim, not an OmniSwitch measurement or an independently verified comparison. | SupportedAIGatewayBench measured ~0.66ms p99 added latency and 21.8MB peak RSS for the Rust path vs Python/Bifrost/Portkey.
Published source claim, not an OmniSwitch measurement or an independently verified comparison. |
No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗SQLite by default; PostgreSQL via OMNISWITCH_DATABASE_URL. Logs and keys remain SQLite-local even in the Postgres case per the project's own docs.
Postgres (via Prisma) is the documented persistence store; SQLite-only mode not confirmed.
Postgres (via Prisma) is the documented persistence store; SQLite-only mode not confirmed.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Kustomize manifests (Deployment/Service/ConfigMap/Secret example/PVCs/Redis) plus a Helm chart; no operator/CRDs/inference-aware routing.
Official Helm chart.
Deployed via the same Helm chart as the parent proxy, with rust: true set per-model.
Config hot reload covers routes, guardrails, cache posture, circuit breaker, and shadow provider without restart.
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not documented.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Local dashboard for logs, metrics, prompts, providers, and guardrails.
Built-in admin UI.
Shares the parent proxy's admin UI.
MIT for the core; the enterprise/ directory is separately licensed (proprietary) per the repo's own LICENSE file.
MIT for the core; the enterprise/ directory is separately licensed (proprietary) per the repo's own LICENSE file.
Ships inside the same container as the parent proxy (MIT core); no separate license statement found for the Rust component specifically.
/v1/chat/completions, streaming and non-streaming.
Core proxy surface.
At pin date the Rust path covers /chat/completions only for anthropic and bedrock (Converse) providers, not the general OpenAI-compatible path; unsupported routes silently fall back to the Python path.
Documented embeddings endpoint pass-through.
Not listed among documented Rust-path routes at pin date.
/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI).
/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI).
LiteLLM documents OpenAI Responses API support; depth of parity not independently verified.
LiteLLM documents OpenAI Responses API support; depth of parity not independently verified.
Not listed among documented Rust-path routes at pin date.
/v1/messages core subset.
Anthropic /v1/messages pass-through documented.
Documented Rust-path support for anthropic and azure_ai providers.
4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets.
4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets.
100+ provider integrations claimed.
Rust path currently limited to anthropic + bedrock (chat) and anthropic + azure_ai (messages); everything else runs on the Python path.
Rust path currently limited to anthropic + bedrock (chat) and anthropic + azure_ai (messages); everything else runs on the Python path.
Generic custom provider adapter with presets for Azure OpenAI, Ollama, vLLM, LiteLLM, DeepSeek, Together, Fireworks, and aliases.
openai-compatible custom endpoint provider type.
Not yet on the Rust path at pin date.
route-level fallbacks, max_retries, retry_backoff, retry_codes, per-attempt timeout.
Documented fallback and retry configuration across deployments.
Launch post places router features (fallbacks etc.) on the Rust path later than the initial chat/messages routes.
Weighted variants per route.
Round-robin/least-busy/usage-based routing strategies.
Router features documented as landing after the initial Rust chat/messages routes.
CEL condition expressions on route variants.
Routing strategies documented; no expression-language conditional routing found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Same as weighted-load-balancing.
Default 5 failures / 60s cooldown, configurable via gateway.circuit_breaker_failures / _cooldown.
Deployment "cooldown" after repeated failures approximates a circuit breaker; not documented as a named circuit-breaker feature.
Deployment "cooldown" after repeated failures approximates a circuit breaker; not documented as a named circuit-breaker feature.
Same as weighted-load-balancing.
SHA-256 request-fingerprint cache key, tenant-scoped (api_key/workspace/organization/global), SQLite-backed.
Response caching documented.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗NOT embedding-based. Vectorize() builds a normalized token-frequency map over lowercased, stop-word-filtered tokens; Similarity() is cosine over those token-frequency vectors. State this precisely wherever OmniSwitch's cache is compared to embedding-based semantic caches.
Documented semantic caching (embedding-based similarity, per product page).
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Cost and token budgets per API key.
Budgets/spend limits per key/user/team/model.
Not documented for the Rust path specifically; likely still enforced by the surrounding Python proxy.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Local sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter.
Local sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter.
RPM/TPM limits per key/team/model.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Hashed API keys, bootstrap owner key, workspace-scoped keys.
Virtual keys for per-team/user credential issuance.
Shares the parent proxy's virtual-key auth front door.
OIDC JWT/JWKS workload identity (identity.oidc.jwks_url/issuer/audience).
JWT auth / SSO documented.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Explicitly not implemented; listed as a roadmap item, not a shipped feature.
No mTLS documentation found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not documented.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗CEL allow/deny authorization rules plus fixed role gates.
Team/role-based access control documented; no CEL-style policy expression engine found.
Team/role-based access control documented; no CEL-style policy expression engine found.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Built-in PII/prompt-injection/SQL-injection/toxicity/secret detectors plus custom regex rules, single-pass Rust-WASM scan with pure-Go fallback.
Guardrail hooks including PII masking (Presidio) and moderation.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗HTTP webhook connectors with configurable stage/action/timeout/fail_open.
Custom guardrail hook / webhook integration documented.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗redact action available on output-stage guardrail rules.
PII masking guardrail acts on output.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗guardrails.stream_buffer defaults to true: the full SSE stream is buffered and scanned before release, which means TTFT with guardrails on is dominated by upstream generation time, not gateway overhead. Benchmark both stream_buffer=true and false and label them.
Not confirmed whether guardrails run against streaming output chunk-by-chunk vs buffered.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not documented.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗HTTP MCP targets with streamed SSE / streamable-HTTP pass-through.
MCP gateway support documented.
Not on the Rust path at pin date.
Persistent stdio MCP transport targets.
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not on the Rust path at pin date.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Multiple named MCP targets, policy-gated tools/call, server-side headers.
Multiple MCP servers can be registered; federation depth not independently verified.
Multiple MCP servers can be registered; federation depth not independently verified.
Not on the Rust path at pin date.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not implemented; explicit gap in the project's own comparison doc.
Per the project's own internal comparison notes (comparison_iter7.md), LiteLLM has no OpenAPI-to-MCP conversion. Not independently re-verified against current LiteLLM docs.
Not on the Rust path; parent proxy also marked no per internal notes.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗RFC 8693 token exchange plus RFC 7523 JWT Bearer Grant for MCP OAuth delegation.
Per this project's internal comparison notes (comparison_iter7.md); not independently re-verified.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not on the Rust path.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Public A2A v1 Agent Card discovery (/.well-known/agent-card.json) plus authenticated GetExtendedAgentCard.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy.
No A2A agent-card discovery found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not documented anywhere in LiteLLM.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗SendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy.
SendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported.
No A2A task lifecycle found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not documented anywhere in LiteLLM.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Templates with version history and rendering; no approval workflow, rollback/promotion, or experiments.
Templates with version history and rendering; no approval workflow, rollback/promotion, or experiments.
Not independently verified.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Policy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring.
Policy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring.
Not independently verified; this project's internal notes say no, but that predates current LiteLLM releases and was not re-checked against current docs.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not on the Rust path; parent proxy also unconfirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗OTel trace export (tested against Langfuse/Jaeger/Tempo).
OpenTelemetry callback integration documented.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗/metrics endpoint, gated by OMNISWITCH_PROMETHEUS_ENABLED.
Prometheus metrics endpoint documented.
Not documented for the Rust path specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗In-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up.
In-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up.
AIGatewayBench blog series comparing LiteLLM, Bifrost, Portkey.
Published source claim, not an OmniSwitch measurement or an independently verified comparison.
AIGatewayBench measured ~0.66ms p99 added latency and 21.8MB peak RSS for the Rust path vs Python/Bifrost/Portkey.
Published source claim, not an OmniSwitch measurement or an independently verified comparison.
OmniSwitch scope. The pinned register marks OpenAI Responses API, Anthropic Messages API, Native (non-passthrough) provider adapters, Rate limiting, Mutual TLS, OpenAPI-to-MCP conversion, A2A task methods, Prompt management, Evals / experiments, Published cross-gateway benchmarks as partial or unavailable. Read each source and version; compare them with the build you actually deploy.
Read unknowns carefully. “Not verified” means an evidence gap, not absence. Editions remain separate. Register a8a594b; 3 compared deployments.
A2A (Beta). SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy.
The register verifies OpenAI-compatible chat on both sides. This guide is limited to an OpenAI SDK base-URL change for chat; it does not establish compatibility for other APIs or headers.
Create an OmniSwitch gateway API key. The SDK sends it as Authorization: Bearer <OmniSwitch key>. Provider credentials stay in the gateway; do not reuse your competitor platform key.
import os
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key=os.environ["OMNISWITCH_KEY"],
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "http://localhost:8080/v1",
apiKey: process.env.OMNISWITCH_KEY,
});
const response = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "Hello" }],
});
console.log(response.choices[0].message.content);x-omniswitch-providerMap your LiteLLM equivalent here.x-omniswitch-configMap your LiteLLM equivalent here.x-omniswitch-trace-idMap your LiteLLM equivalent here.x-omniswitch-session-idMap your LiteLLM equivalent here.x-omniswitch-shadow-providerMap your LiteLLM equivalent here.Chat selects its model with the JSON model field. The x-omniswitch-model header is an A2A selector, not a chat model override.
Read LiteLLM’s header documentation and the OmniSwitch header reference. Custom header conventions, automatic configuration import, gateway-key import, and direct Anthropic SDK header support are not implied.
Pilot representative blocking and streaming calls, tools, errors, retries, metadata, and observability. Keep the original gateway available until your app-level tests pass.
Product register a8a594b. Cells reflect registered source claims, not roadmap plans or release-artifact availability; each retains its own verified date and version.
Python proxy; edition scope varies. Capability-specific documentation and dated editorial sources remain separate from independent testing.
Supported means documented within the named capability and deployment scope, not full product parity. Beta and licensed editions are shown when the register supplies a qualifier. Not verified describes an evidence gap, not absence. Claims come from the pinned register; cells have no scores or totals. This is a dated documentation review, not a performance test or a security certification. See the benchmark methodology.