Façade in ingresso. Un unico modello nel percorso.
La maggior parte dei gateway IA sono reverse proxy HTTP a cui è stata aggiunta una lista di modelli: la forma della richiesta è l'astrazione, quindi ogni nuova modalità o ciclo di vita diventa un caso particolare da gestire altrove. Wäg parte dalla richiesta di inferenza come oggetto di dominio e tratta le forme delle API di OpenAI, Anthropic e Gemini come façade che vi si mappano sopra.
Sei elementi di prima classe, non dedotti
In un gateway modellato sull'HTTP questi elementi si ricavano da un percorso, da un header o dal comportamento dell'SDK di un provider. Qui sono campi di un oggetto di dominio, ed è per questo che policy, routing, caching e contabilizzazione possono ragionarci sopra in modo uniforme.
È quella singola decisione a fare sì che chat, embedding, visione, audio, job video asincroni e sessioni realtime condividano un unico percorso di policy, routing e contabilizzazione anziché sei.
Parlare il dialetto, conservare la fedeltà
I client inviano richieste nella forma di OpenAI, Anthropic o Gemini, oppure direttamente nella forma nativa della richiesta di inferenza. Gli adapter nativi preservano il comportamento specifico di ciascun provider — tool calling, visione, output strutturato — anziché appiattire tutto su una forma da minimo comune denominatore, perdendo capacità ai bordi.
Nove fasi, in un ordine fisso
Ogni richiesta attraversa le stesse fasi. Identità, accesso ai modelli e budget si risolvono prima che venga chiamato qualsiasi cosa; la policy in ingresso viene eseguita prima della cache, così anche una risposta in cache viene controllata; il routing sceglie il deployment; la policy in uscita e quella sugli strumenti agiscono sulla risposta; costi, verdetti e prove vengono registrati all'uscita.
- 01Autenticare
Chiave virtuale, token dell'agente o token dell'IdP aziendale su /v1 (Enterprise). Risolve organizzazione, team, utente, applicazione ed esecuzione dell'agente.
✗ 401 - 02Accesso ai modelli
I permessi sui modelli, ristretti dalla allow-list della chiave, stabiliscono quali alias può chiamare questa identità.
✗ 403 - 03Budget
Limiti di frequenza e budget vengono riservati su chiave, organizzazione, team, utente, applicazione e modello. Devono passare tutti.
✗ 429 — nessuna spesa verso il provider - 04Policy (pre-chiamata)
Catena ordinata di guardrail sull'input: PII, injection, moderazione o un vostro webhook. La cache vede il prompt mascherato.
✗ BLOCCO · ◑ MASCHERA · ◐ OSCURA - 05Cache
Esatta → canonica → quasi-duplicata → semantica, con ogni livello protetto contro i falsi hit. Un hit salta il provider e le fasi di uscita.
✓ HIT — risposta restituita, nessuna chiamata al provider - 06Instradare
Filtro di capacità, residenza, affinità di sessione, poi la strategia di routing sceglie il deployment. Un failover non esce mai dalle giurisdizioni consentite.
- 07Invocare
Dialetto del provider, streaming SSE reale, failover sullo stesso alias, poi fallback ordinati; ogni tentativo scrive una voce di uscita nel registro. La policy mid-stream lavora su una finestra scorrevole.
- 08Policy (dopo la chiamata)
I guardrail in uscita agiscono sulla risposta completa. Le chiamate a strumenti restituite dal modello sono valutate dalla policy sugli strumenti: consentite, rimosse con una nota o rifiutate.
✗ 403 · rimossa - 09Contabilizzare
I budget vengono saldati, il registro annota l'esito, e token, costi, verdetti e decisione di routing vengono registrati come log delle richieste, trace OTEL e metriche Prometheus.
Un proxy inoltra una richiesta. Questo decide cosa alla richiesta è consentito essere — ed è tutta qui la differenza tra un gateway e una control plane.
Quattro cicli di vita, un solo percorso di policy
Poiché il ciclo di vita è un campo della richiesta e non un dettaglio implementativo di un endpoint, la stessa governance si applica a tutti e quattro.
Sincrono
Richiesta in ingresso, completion in uscita, tutte le policy applicate inline.
Streaming
Server-sent event reali tramite adapter LiveStream — nessun buffering completo dell'upstream sul percorso nominale. La policy mid-stream può interrompere uno stream problematico prima che raggiunga il client.
Job asincroni
Worker durevoli con lease per lavorazioni lunghe come video e batch: accodamento → presa in carico → heartbeat → completamento, con un reaper per i lease scaduti. A prova di crash.
Tempo reale
Un bridge WebSocket, così che voce dal vivo e interazioni in streaming condividano gli stessi meccanismi di autenticazione, budget e logging di tutto il resto.
È la parte che un gateway modellato sull'HTTP non può aggiungere a posteriori senza riscriverlo. Il ciclo di vita deve essere nel modello di dominio prima che la policy possa applicarvisi in modo uniforme.
Quattro piani, separati per scelta
| Piano | Cosa contiene | Perché è separato |
|---|---|---|
| Data plane | Il percorso della richiesta. Repliche Rust senza stato: autenticazione, verifica dei budget, policy, cache, routing, chiamata, contabilizzazione. | Scala orizzontalmente e in modo indipendente. Nessuna dipendenza dall'amministrazione nel percorso critico. |
| Control plane | Configurazione, identità, definizioni di policy, budget, chiavi, tenant, registro MCP. | La vostra, non la nostra. Non esiste alcuna tenancy del fornitore da cui dipendere o che si possa imporre. |
| Piano analitico | Utilizzo, spesa, tracce, registrazioni di audit. | Separato dall'archivio di controllo, così il carico di reporting non tocca mai l'applicazione delle regole. |
| Piano delle policy | Motori di analisi, relazioni OpenFGA, listino prezzi. | Innestabile e fuori processo, così una modifica di policy non richiede una modifica al gateway. |
Nativo Kubernetes, non compatibile con Kubernetes
Tutto ciò che sta in un container è compatibile con Kubernetes. Nativo significa che la piattaforma modella ciò che state eseguendo: Wäg fornisce un proprio operator e proprie custom resource, così il gateway è un oggetto che il cluster comprende anziché un deployment messo insieme a mano. Una WaegInstance possiede Deployment, rete, autoscaling e monitoraggio del gateway, e segnala un errore di configurazione come condizione con un motivo; provider, modelli, organizzazioni, budget, guardrail e chiavi possono essere anch'essi custom resource. Poiché budget e limiti di frequenza sono condivisi tramite Redis anziché tenuti per replica, scalare non permette mai di spendere due volte un budget — e l'operator segna come non pronta un'istanza con più repliche API e senza Redis. Richiede Kubernetes 1.28 o successivo, oppure OpenShift 4; c'è un chart Helm se preferite un template a un operator.
Rust nella data plane
Costruito su tokio, hyper e axum con percorsi di streaming zero-copy, distribuito come un unico binario distroless e non-root. Nessun interprete, nessun package manager, nessun runtime Node nel gateway — la console di amministrazione è servita dallo stesso binario. Non c'è alcun router ML nel percorso critico, quindi il routing aggiunge un'analisi deterministica anziché un'inferenza di modello.
Il throughput di un gateway dipende dalla forma del payload, dalla latenza del provider, dal tasso di hit della cache, dalla profondità della catena di policy e dalla concorrenza. Un singolo moltiplicatore rispetto a un altro prodotto vi dice qualcosa sulla configurazione scelta da qualcun altro, non sul vostro carico di lavoro. Preferiamo pubblicare gli strumenti di misura, così potete misurare ciò che vi interessa davvero.
Cosa Wäg non è
Lo diciamo apertamente, così potete valutarlo sull'asse giusto e nessuno prenota un incontro aspettandosi il prodotto sbagliato.
- Non è un inference server. Non esegue modelli. Instrada verso quelli che già utilizzate, inclusi endpoint vLLM o Ollama self-hosted, e Wäg Edge governa i modelli che girano sui computer dei membri e nelle app mobili.
- Non è un host di modelli. Nessun peso, nessuna GPU, nessuna pipeline di fine-tuning.
- Non è un database vettoriale. Fa da proxy alle chiamate di embedding e le mette in cache semanticamente; non conserva il vostro corpus.
- Non è un backend di osservabilità. Emette OTEL e Prometheus verso ciò che già utilizzate.
- Non sostituisce un API gateway. Kong ed Envoy governano l'HTTP. Wäg governa token, modelli e azioni degli agenti. Sono livelli complementari, e la maggior parte delle installazioni li usa entrambi.
Un endpoint. Tutti i modelli. Controllo completo.
Gestitelo nella vostra infrastruttura
Tutto ciò che serve per gestire una control plane in produzione è sotto Apache-2.0 e lo resterà — routing, alta disponibilità, cache, failover, budget, policy, MCP, job e osservabilità. Self-hosted, senza account, senza chiamate verso l'esterno.
$ docker run -p 4000:4000 <registry>/waeg-gateway:<version>Non è un pull funzionante: le immagini non sono ancora pubbliche. I partner di progettazione ricevono i dettagli del registry in forma privata.
Avvia in 5 minutiContribuite come design partner
Wäg non è ancora disponibile pubblicamente. Lavoriamo con un piccolo gruppo di team che gestiscono IA multi-provider in produzione e prendono sul serio governance e sovranità, per irrobustire la control plane su carichi reali.
- Tutte le funzioni Enterprise incluse, senza costi di licenza
- Migrazione assistita — la facciamo insieme a voi, anche da LiteLLM
- Una linea diretta con gli ingegneri e un'influenza reale su ciò che arriva dopo