Foreman, a self-hosted LLM gateway for cost aware model routing
Cache-aware LLM routing that doesn't burn prompts to save pennies.
Self-hosted LLM router. Cost effective, deterministic, and fast. Secure and private by default.
Cache affinity lanes prevent serializing concurrent agent traffic unlike Vercel's gateway.
Engineering teams running high-volume AI workloads
OpenRouter · LiteLLM · Vercel AI Gateway
With the news of OpenRouter possibly being acquired and proliferation of hosted LLM routers (i.e. Ramp Router, Vercel’s AI Gateway), I saw the need for a self hosted solution focused on cost savings, transparency, and performance. So, I built an open sourced router with a simple CLI interface that can easily sit between coding agents and GenAI workloads.
For the curious and lazy, at the moment, Millwright has the tools for,
- Providers: OpenAI-compatible APIs, Anthropic, Amazon Bedrock
- Routing: policy-controlled model roles (cheap, mid, frontier), cheapest healthy route selection
- Protocols: OpenAI Chat Completions, Anthropic Messages, text and tool translation
- Cache Affinity: role-scoped session lanes without serializing concurrent agent traffic
- Spend Tracking: per-team costs, cache usage, model/provider mix, request traces
- Cost Analysis: measured usage and modeled candidate economics (HTML, Markdown, JSON)
- Reliability: bounded failover, circuit breakers, timeouts, concurrency limits
- Setup: interactive provider, model, and pricing configuration without storing provider secrets
- Deployment: one Rust binary, Docker, SQLite or PostgreSQL
Full disclosure: parts of the codebase were built with AI coding agents. All feedback is welcome, I’d especially value feedback on the routing policy, provider coverage, and anything that would block you from self-hosting it. Feel free to open feature/request and/or contribute as well.
Cache-aware LLM routing that doesn't burn prompts to save pennies.
Self-hosted LLM gateway pooling keys across providers for failover and cost tracking.
LiteLLM and OpenRouter already solve multi-provider routing better and have production users.
Nginx-style config for LLM routing. Early-stage, needs demos and actual deployment stories.
Mid-request failover reroutes streaming responses before your client sees a byte.
Local semantic caching cuts LLM costs without changing your code.