Hi
Jakub here, solo founder from Warsaw. I built GoModel and I'm launching it here very soon. Show HN hit #4 in April.
GoModel is an open-source AI gateway in Go. You can think of it like a self-hosted OpenRouter. It's one OpenAI-compatible API for every model provider, with budgets, caching, guardrails, load balancing, and failover.
In March LiteLLM shipped a compromised PyPI release. Then Portkey went to Palo Alto and TensorZero stopped operating. People are looking for more robust alternatives and GoModel is one of them.
If you use LiteLLM today or are considering an AI gateway for internal use - what would make you try GoModel in prod?
Cost, data privacy, compliance, user interface - or is hosted just easier and you'd never bother?
Follow the page for the launch ping. Happy to answer any question.
GoModel
I'm Jakub - a solo founder from Warsaw. This is my 1st Product Hunt launch.
The story behind GoModel is simple. In October last year I wanted to use an AI gateway for my startup. I noticed that the first solution of its kind - LiteLLM - has serious quality problems (500+ unexplainable issues in production) and a fundamental one - Python is not the right tool for proxy-like software. So I decided to write one.
That's how GoModel was born, and I've been working on it full-time since December 2025.
Ask me anything!
Oh the self hosted part is cool... how do you decide when GoModel should fail over to another model vs retrying the same provider?
GoModel
@harini_mukesh Thanks!
Short version: retry 1st -> failover 2nd, and both are configurable per provider.
- Retries are for "the same provider will probably answer in a second": transport errors and 429/502/503/504 by default, up to 3 attempts with backoff, same provider. Streams are never retried since bytes may already be out.
- Failover kicks in once retries are exhausted (or disabled), or right away for errors a retry won't fix (model not found, deprecated, context too long). It moves to the next target in the virtual model.
Default values and the options you can configure: https://gomodel.enterpilot.io/docs/advanced/resilienc
The part I would check first is failover. We run OpenRouter first with direct provider keys behind it and two of our models have no direct key at all, so the router is a single point of failure for those. Does self-hosting let me pin a fallback order per model?
GoModel
@tomveber Sure, GoModel supports per model order!
What's cool about GoModel, you can set it as a config file OR at the dashboard. Screenshot attached but you can also play around with it on the live demo preview website: https://demo.enterpilot.io/admin/dashboard/models
Dial
A ~20MB single binary that's self-hosted and MIT licensed is a much easier sell to a team than routing everything through a third-party gateway with your API keys sitting on someone else's infra. How does failover behave when a provider is degraded but not fully down, like elevated latency rather than a hard error - does it wait for a timeout threshold or react to error rates too?
GoModel
@galdayan Thanks!
Regarding the failover feature - it reacts to errors, not to latency on its own as of today.
Latency turns into an error at the HTTP timeout: the request becomes a 504 and fails over to the next target. Default is 10 min (same as the SDKs), but you can set it easily with env variable to ~30s in prod.
There is also a circuit breaker. After 5 consecutive failures the provider OR model (it's configurable) is skipped for 30s and the failover routes the request to another model OR provider right away.
For error rates directly, the built-in cheapest_healthy routing strategy tracks error rate and median latency per target and drops anything above 20% errors from the pool.
One caveat to what you said. ~20MB is the compressed docker image. The binary file is slightly bigger - but small enough to run it in a serverless environment.