GoModel: ein AI-Gateway in Go mit OpenAI- und Anthropic-kompatibler API
AI gateway / AI control plane / AI proxy written in Go. Unified OpenAI-compatible and Anthropic-compatible API for OpenAI, Anthropic, Gemini, Groq, xAI, Ollama, vLLM and more. A LiteLLM alternative with observability, guardrails, streaming, cost tracking, intelligent routing, sticky sessions, failover, real-time logs and usage tracking. Prod ready.
Auf einen Blick
- Was ist das?
- GoModel bündelt Provider-Zugriffe hinter einer OpenAI-kompatiblen Schnittstelle unter /v1 und einer Anthropic-kompatiblen unter /v1/messages. Das Repository liefert Installationsskripte, ein Docker-Image und eine Konfigurationskette aus Defaults, config.yaml, .env und exportierten Variablen. Wer die Kosten- und Routingversprechen prüfen will, muss die verlinkten Benchmark- und Feature-Dokumente selbst nachrechnen.
- Für wen ist es gedacht?
- Sinnvoll ist GoModel für Teams, die bereits mehrere Provider-Zugänge verwalten und einen einzelnen Endpunkt mit Kostenübersicht und Failover wollen, ohne die SDKs ihrer Anwendungen anzufassen. Wer nur einen Provider nutzt oder keine Admin-Oberfläche betreiben will, fährt mit einem direkten SDK-Aufruf einfacher.
- Darf ich es kommerziell nutzen?
- Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
- Wird es noch gepflegt?
- Ja. Das Repository hat innerhalb des letzten Tages neue Commits erhalten.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich Go, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Welches Problem GoModel adressiert und für wen es gedacht ist
Sobald eine Anwendung mehr als einen LLM-Anbieter anspricht, verteilen sich API-Schlüssel, Modellnamen, Fehlerformate und Abrechnungsdaten über mehrere Stellen im Code. GoModel setzt sich davor und bietet zwei kompatible Oberflächen an: eine OpenAI-kompatible unter /v1 und eine Anthropic-kompatible unter /v1/messages. Laut README funktionieren die offiziellen SDKs unverändert, man muss nur die Base-URL umbiegen, beim OpenAI SDK auf http://localhost:8080/v1, beim Anthropic SDK auf http://localhost:8080, weil dieses /v1/messages selbst anhängt. Das ist der eigentliche Nutzen: bestehender Client-Code bleibt, die Provider-Vielfalt wandert in die Gateway-Konfiguration. Die Zielgruppe sind damit Plattform- und Backend-Teams, die mehrere Anbieter parallel betreiben und zentrale Kontrolle über Ausgaben, Limits und Routing wollen. Wer eine einzelne Anwendung mit einem einzigen Anbieter betreibt, gewinnt durch die zusätzliche Instanz wenig.
Konfigurationsauflösung: vier Quellen mit klarer Rangfolge
Die Konfiguration folgt einer dokumentierten Reihenfolge, bei der jede Quelle die links stehenden überschreibt: gute Defaults, dann config.yaml, dann .env, dann exportierte Umgebungsvariablen. Das ist ein nachvollziehbares Modell, weil die spezifischste Quelle gewinnt und exportierte Variablen damit auch in Container-Setups die Dateien schlagen. Für den Betrieb heißt das: Wer Werte in config.yaml pflegt und zusätzlich dieselben Schlüssel in der Shell exportiert, sieht nicht die Datei, sondern die Shell. Das ist keine Überraschung, aber ein häufiger Stolperstein bei Debugging. Die vollständige Liste der Umgebungsvariablen liegt laut README in .env.template, inklusive aller Provider. Ein Beispiel für einen Provider-Schlüssel zeigt das Quick Start direkt: OPENAI_API_KEY. Für den Rest verweist das Repository auf die Configuration reference in der Dokumentation.
Installation und erster Aufruf in der Praxis
Der schnellste Weg führt über ein Installationsskript. Unter macOS und Linux lautet es curl -fsSL https://gomodel.enterpilot.io/install.sh | sh, gefolgt von gomodel. Unter Windows lautet das Gegenstück irm https://gomodel.enterpilot.io/install.ps1 | iex. Alternativ gibt es ein Docker-Image: docker run --rm -p 8080:8080 -e OPENAI_API_KEY="your-openai-key" enterpilot/gomodel. Nach dem Start ist das Dashboard unter http://localhost:8080/admin/dashboard erreichbar. Ein Testaufruf gegen die OpenAI-kompatible Oberfläche sieht so aus: curl http://localhost:8080/v1/responses mit Content-Type application/json und einem Body, der model und input enthält, im README mit gpt-5-chat-latest und "Hello!". Wer die Infrastruktur getrennt betreiben will, kopiert .env.template nach .env, trägt die Schlüssel ein und startet docker compose up -d oder make infra. Der volle Stack inklusive GoModel und Prometheus kommt über docker compose --profile app up -d oder make image. Bemerkenswert ist, dass das Gateway ohne gesetzten Provider-Schlüssel startet, der Schlüssel ist im Quick Start ausdrücklich als optional markiert. Das ist für lokale Tests angenehm, kann aber den Eindruck erwecken, es sei alles einsatzbereit, obwohl Anfragen ohne gültigen Schlüssel scheitern werden.
Was hinter Virtual Models, Session Keeping und Failover steckt
Die interessanten Mechanismen liegen nicht in der Weiterleitung selbst, sondern in der Verwaltungsschicht darüber. Virtual Models erlauben Aliase und Lastverteilung, laut README round-robin oder kostenbasiert, hinter stabilen Modellnamen. Eine Anwendung spricht also weiterhin einen festen Namen an, während das Gateway die Zuordnung zu konkreten Provider-Zielen vornimmt. Session Keeping erkennt eine Client-Sitzung und bindet sie an ein Ziel und einen Provider-Schlüssel. Der dokumentierte Zweck ist, dass Provider-seitige Prompt-Caches warm bleiben und Audit-Logs als zusammenhängende Threads lesbar werden. Failover leitet bei Problemen automatisch auf Backup-Provider um, ergänzt um Retries und Circuit Breaker. Diese drei Funktionen greifen ineinander: Ein virtueller Modellname definiert die Kandidaten, die Session-Bindung entscheidet, welcher Kandidat genommen wird, und der Circuit Breaker entfernt ausgefallene Kandidaten zeitweise. Wer diese Kette nicht versteht, wird bei inkonsistentem Verhalten schwer debuggen können, weil dieselbe Anfrage je nach Sitzung und Zustand des Breakers bei unterschiedlichen Anbietern landet.
Caching, Budgets und Limits: die Kostenhebel
GoModel verspricht Kostenkontrolle über mehrere Schichten. Response-Caching, exakt und semantisch, soll wiederholte Prompts kostenlos machen. Kostenverfolgung liefert laut README Schätzwerte pro Anfrage, Nutzungsanalysen und Ausgabenaufschlüsselungen im Dashboard. Budgets setzen harte Ausgabengrenzen pro Nutzer, Team oder Schlüssel. Rate Limits begrenzen Requests, Tokens und Parallelität pro Nutzerpfad, Provider oder Modell. Dazu kommt eine Usage API, über die Clients mit demselben Schlüssel, den sie für Inferenz verwenden, ihr eigenes Verbrauchsvolumen, das Restbudget und den verbleibenden Spielraum bei den Limits abfragen können. Der letzte Punkt ist der praktisch nützlichste, weil Anwendungen damit vor dem Aufruf entscheiden können, statt in einen Fehler zu laufen. Gleichzeitig ist semantisches Caching die Funktion mit dem größten Risiko für falsche Ergebnisse: Zwei Prompts, die sich semantisch ähneln, aber unterschiedliche Antworten verlangen, dürfen nicht denselben Cache-Eintrag treffen. Das Repository nennt die Funktion, beschreibt aber im vorliegenden README nicht, wie die Ähnlichkeitsschwelle gesetzt wird. Wer semantisches Caching aktivieren will, muss die Cache-Dokumentation lesen, bevor er es auf Produktivverkehr loslässt.
Grenzen: wo GoModel die falsche Wahl ist
Das README ist an mehreren Stellen werblich und macht die Grenzen schwer sichtbar. Die Formulierung "the fastest and the most resource-efficient AI Gateway" stützt sich auf einen verlinkten Benchmark, der als selbst reproduzierbar bezeichnet wird, aber im vorliegenden Material nicht mit Zahlen belegt ist. Wer Leistungsentscheidungen darauf stützen will, muss diesen Benchmark selbst ausführen. Ähnlich verhält es sich mit der Abgrenzung zu LiteLLM und Portkey: Das README nennt einen Sicherheitsvorfall beim einen und fehlende Wartung beim anderen, ohne Quellen oder Zeitangaben. Solche Aussagen über fremde Projekte gehören in eine eigene Prüfung, nicht in eine Adoptionsentscheidung. Ein weiterer Punkt ist die Breite der Provider-Liste. Sie umfasst über zwanzig Einträge, von OpenAI und Anthropic über Bedrock und Vertex AI bis zu Ollama, vLLM und SGLang. Dass ein Provider gelistet ist, bedeutet nicht, dass jede Funktion dort gleich funktioniert. Das README verweist ausdrücklich auf eine Feature-Matrix pro Provider, was die Vermutung nahelegt, dass die Abdeckung uneinheitlich ist. Wer Streaming, Tool-Calls oder Audio über mehrere Anbieter braucht, sollte diese Matrix vor der Entscheidung lesen. Und wer ohnehin nur einen Anbieter nutzt, baut mit GoModel eine zusätzliche Komponente ein, die ausfallen kann, ohne einen Gegenwert zu liefern.
Alternative: direkte SDK-Nutzung oder ein anderes Gateway
Die naheliegende Alternative ist, auf ein Gateway ganz zu verzichten und die SDKs der Anbieter direkt anzusprechen. Der Unterschied liegt nicht in der Funktionalität, sondern in der Verantwortung: Ohne Gateway muss die Anwendung selbst entscheiden, welcher Anbieter bei welchem Fehler übernimmt, wie Wiederholungen aussehen und wo Ausgaben erfasst werden. Das ist mehr Code, aber es gibt keine zusätzliche Netzwerkhürde und keinen Konfigurationslayer, der zwischen Client und Anbieter liegt. Für ein Team mit einem Anbieter und einem Modell ist das der einfachere Weg. Wer mehrere Anbieter braucht, landet bei Gateway-Lösungen, und hier ist der Ansatz von GoModel spezifisch: Es ist in Go geschrieben, wird als einzelne Binärdatei oder Container ausgeliefert und bringt ein eigenes Admin-Dashboard mit. Der Unterschied zu Python-basierten Gateways liegt damit nicht nur in der Sprache, sondern im Betriebsmodell: weniger Laufzeitabhängigkeiten, dafür ein Ökosystem, das weniger Anpassungen von Dritten bereitstellt. Wer tief in die Routing-Logik eingreifen will, sollte prüfen, ob die dokumentierten Optionen von Virtual Models dafür ausreichen.
Wartung, Release-Tempo und Lizenz
Das Release-Tempo ist auffällig: v0.1.88 am 6. September, v0.1.89 am selben Tag, v0.1.90 am 8. September. Drei Releases in drei Tagen, alle in der 0.1.x-Reihe. Das deutet auf aktive Entwicklung hin und gleichzeitig auf eine Versionsnummer, die noch keine Stabilitätszusage enthält. Wer GoModel produktiv einsetzt, sollte einen Upgrade-Prozess haben, der die Konfiguration nach jedem Sprung prüft, denn bei dieser Frequenz können sich Defaults oder Schlüsselnamen ändern. Das Repository selbst gibt dazu keine Kompatibilitätszusage. Die Lizenz ist MIT, was kommerzielle Nutzung, Änderung und Weitergabe erlaubt, sofern der Lizenztext und der Urheberrechtshinweis beibehalten werden. Für eine Einbettung in ein eigenes Produkt ist das unkompliziert. Zu beachten ist, dass das Gateway selbst nur die Vermittlung abdeckt: Die Kosten für die eigentlichen Modellaufrufe entstehen weiterhin bei den Anbietern, und die im Dashboard angezeigten Schätzwerte sind laut README Schätzungen, keine Abrechnungsdaten. Wer Budgets als harte Grenze einsetzt, sollte klären, wie das Gateway mit bereits laufenden Anfragen umgeht, wenn ein Limit während der Verarbeitung erreicht wird.
Redaktionelles Fazit
Sinnvoll ist GoModel für Teams, die bereits mehrere Provider-Zugänge verwalten und einen einzelnen Endpunkt mit Kostenübersicht und Failover wollen, ohne die SDKs ihrer Anwendungen anzufassen. Wer nur einen Provider nutzt oder keine Admin-Oberfläche betreiben will, fährt mit einem direkten SDK-Aufruf einfacher. Vor dem Produktiveinsatz zu klären: ob die eigene Konfiguration vollständig über config.yaml und .env abbildbar ist, welche Provider-Features die Feature-Matrix tatsächlich abdeckt und ob das Projekt angesichts von drei Releases innerhalb von drei Tagen einen für euch passenden Upgrade-Rhythmus hat.
Community-Notizen