Why PrashFlow Features How it works Architecture FAQ Contact Get Started
Self-hosted & enterprise-ready

One gateway. Every model.
Complete control.

PrashFlow Controller is the control plane that sits between every application in your enterprise and every AI model you run: OpenAI, Azure OpenAI, Ollama, vLLM, or any OpenAI-compatible endpoint. Authentication, governance, quotas, A/B testing, guardrails, and full observability are built in, before a single token reaches a model.

No vendor lock-in. Deployed entirely on infrastructure you own, so your data never leaves your environment.

POST /v1/chat/completions
1curl https://gateway.yourcompany.com/v1/chat/completions \
2  -H "Authorization: Bearer pfc_proj_xxxxxxxxx" \
3  -d '{
4    "model": "customer-support",  // a logical model -- never a backend URL
5    "messages": [{ "role": "user", "content": "Refund policy?" }]
6  }'
7
8// PrashFlow Controller resolves auth, RBAC, quota, A/B split,
9// MCP tools, and the healthy backend model -- transparently.
5
provider adapters, covering OpenAI-compatible, Azure, Ollama, vLLM, and custom HTTP
10
model types supported per logical model, from chat to reranking
5
role tiers, from platform admin down to individual project users
100%
self-hosted on infrastructure you own, so nothing leaves your environment
Why PrashFlow Controller

Built for the moment AI stops being a side project

Every team wiring API keys into their own apps works fine, right up until you need to know who spent what, revoke access in one place, or swap a model without a code change. PrashFlow Controller is the layer that makes AI adoption safe to scale, not just fun to prototype with.

Govern spend and access from one place

Every request is tied to a project, an API key, and a person who created it. Cap tokens per hour, per day, or per key, and revoke access instantly without redeploying a single application.

Swap models without touching application code

Applications call a stable logical model id. Point it at a different backend, add a fallback, or roll a new model out to 10% of traffic, all from the admin UI with zero redeploys.

Never fly blind on cost or reliability

Every call is metered, traced, and audited automatically: tokens, latency, error rate, and per-stage timing. See exactly what's happening across every team before it becomes a surprise invoice.

Enterprise-grade access control, out of the box

A five-tier role hierarchy (platform, org, team, project, user) enforces strict multi-tenant isolation. No project sees another's data. No user acts outside their scope. It's not bolted on; it's the foundation.

Prove out new models with real traffic, safely

Run a canary at 5% before committing a team to a new model. Compare latency, error rate, and cost side by side, per project, then dial the split up or roll it back in seconds instead of a deploy cycle.

Own your data, own your infrastructure

Self-hosted with Docker Compose, backed by Postgres and Redis you control. Nothing about your prompts, completions, or usage data ever leaves infrastructure you own.

The problem

Shadow AI is already happening in your org

Every team that wires a raw API key into an app is quietly creating a governance gap.

No idea who's calling what

Raw provider keys scattered across a dozen apps, no per-team spend visibility, no single place to answer "which teams use this model."

Credentials leak into application code

Provider API keys get hardcoded, checked into repos, or passed to client-side code, because there's no gateway to hide them behind.

Switching models means redeploying

A new model, a price change, an outage on your primary provider: each one means a code change and a redeploy across every application that calls it.

How it works

Every request, the same four steps

No matter the provider on the other end, every call through PrashFlow Controller goes through the same governed pipeline.

1

Authenticate

A scoped project or service-account API key, never a raw provider credential.

2

Authorize & Route

RBAC + policy + quota checks, then weighted routing across A/B variants or canary, with automatic fallback.

3

Augment

System prompt injection and MCP tool discovery, merged in before the model ever sees the request.

4

Observe

Usage, traces, and audit logs recorded automatically, with no code required in the calling application.

Everything included

One control plane, the whole platform

Not a thin proxy. A complete governance layer for AI in the enterprise.

Universal, OpenAI-compatible gateway

One API (/v1/chat/completions, /v1/embeddings, /v1/rerank, /v1/audio/*) in front of Ollama, vLLM, Azure OpenAI, any OpenAI-compatible server, or a custom HTTP endpoint. Applications never see a backend URL, port, or credential.

Five-tier RBAC

Enterprise → Org → Team → Project → User, with zero implicit access. A project has no model access until it's explicitly granted.

A/B testing & canary routing

Weighted traffic splits across model variants, enrolled per project, so you can roll out with confidence.

MCP tool integration

The gateway is the MCP client, so tool calls resolve transparently, even for models with no native tool support.

Full observability

Per-request traces with stage-by-stage spans, token/latency usage records, and an audit log that captures what was asked and what came back, automatically purged on a retention schedule.

AI Guardrails

PII detection and masking, prompt-injection detection, a sensitive-topics policy, block/allow lists, and input/output validation, each independently enabled per project with its own action: block, mask, or log only. The checks that need judgment can use any model in your fleet, with a custom prompt, and configuration is restricted to org and platform admins.

Model Quality dashboard

Error rate, fallback rate, latency, and guardrail block/mask rate, rolled up per model over any time window, so you can see which model is unhealthy or triggering guardrails without digging through raw usage rows.

Quotas, rate limits & automatic fallback

Per-project, per-org, and per-key request/token budgets enforced via Redis, plus health-checked automatic fallback to a secondary model when the primary is unavailable, configured entirely from the admin UI with no code.

A/B testing & canary rollouts

Ship a new model to 5% of traffic, not 100%

A logical model can hold multiple weighted backend variants. Enroll one project at a time, at whatever split makes sense for it, independent of every other project sharing that logical model.

  • Per-project weighted splits, not a single global percentage
  • Live comparison of requests, latency, and error rate per variant
  • Zero behavior change for projects you haven't enrolled
Qwen3 8B 90% · control
Llama 3.3 70B 10% · canary
customer-support-app enrolled 3 days ago
MCP tool integration

Every model gets tools, even ones that can't call them natively

Attach remote MCP servers to a project. The gateway discovers their tools, merges them into every request, and executes tool calls itself. The calling application only ever sees one finished response.

  • No client-side code changes required
  • Works with streaming and non-streaming requests alike
  • Remote-only by design, with no arbitrary code execution risk
1 · APP "Search our docs for the refund policy"
2 · GATEWAY merges docs-search tool from your MCP server
3 · MODEL calls search_docs(query)
4 · GATEWAY executes it, feeds the result back
5 · APP receives one finished answer, no tool_calls to resolve
AI Guardrails

Content controls that run before and after every call

Turn on PII detection and masking, prompt-injection detection, a sensitive-topics policy, block/allow lists, and input/output validation, per project, each with its own action: block the request, mask the content, or just log it. Configuration is restricted to org and platform admins, since guardrails decide what content reaches or leaves your models.

  • Checks that need judgment can use any model in your fleet, with a custom prompt
  • Streaming responses are buffered and validated before delivery, so masking can never be streamed around
  • Every check is its own span in the trace, and every block or mask feeds the Model Quality dashboard
INPUT "My SSN is 123-45-6789, can you help?"
PII DETECTION matched SSN pattern
400 GUARDRAIL_BLOCKED, before any model call
OUTPUT "reach me at hidden@example.com"
PII MASKING "reach me at ****************"
Architecture

The core principle

Applications and users must never directly call backend AI models. Every inference request passes through PrashFlow Controller.

Application
project API key only
PrashFlow Controller
auth · RBAC · quota · route · observe
Ollama
local models
vLLM / Azure OpenAI
hosted models
Custom HTTP
any endpoint
Authenticate Resolve logical model → backend Apply policy + quota Inject prompt + MCP tools Call adapter Record usage + trace
Access control

A role hierarchy that mirrors your org chart

Enterprise Admin

Platform-wide. Manages every organization, backend model, and provider. The only role that bypasses scoping entirely.

Org Owner

Everything within one organization: teams, projects, users, logical models, traces, and usage. Never another org's.

Team Owner

Full control of a team and every project it owns, as if they were that project's own owner.

Project Owner

Full control of one project: settings, members, API keys, and which models it can call.

User

View access to what they're a member of; sees only calls made with API keys they personally created.

Self-hosted, on your terms

Your infrastructure. Your data. Your control.

We deploy the full stack (Postgres, Redis, the gateway API, background worker, and web UI) directly on infrastructure you own. Nothing about your prompts, completions, or usage data ever leaves your environment.

FAQ

Questions, answered

Yes. It deploys entirely on infrastructure you control with Docker Compose, and no data ever leaves your environment. Contact us and we'll get you set up.
Ollama, vLLM, Azure OpenAI, any generic OpenAI-compatible server, and a custom HTTP adapter for anything else. Adding a new provider just means adding one adapter class; the gateway itself never changes.
Never. Applications only ever hold a project API key and a logical model id. Backend URLs, ports, and credentials are resolved server-side and are never returned to non-administrators.
No. Applications keep calling the same logical model id. Traffic splitting, canary weighting, and fallback are entirely server-side, configured from the admin UI.
Yes, per project: PII detection/masking, prompt-injection detection, a sensitive-topics policy, block/allow lists, and input/output validation, each independently enabled with its own block, mask, or log-only action. Only org and platform admins can configure them.
Only remote MCP servers (Streamable HTTP or SSE) are supported, never local/stdio process execution. Server URLs are also checked against an SSRF guard that rejects internal/private-network addresses.

Bring every model under one control plane.

Self-hosted, open, and ready to govern AI access across your entire organization today.

Questions first? contact@prashflow.com