Architecture · open source
Une gateway, un modèle, deux bases.
Les applications ne parlent jamais au modèle. La gateway est le seul composant exposé ; tout le reste vit sur le réseau interne.
01Principes
Six règles, pas plus.
- 01
Contrat gelé
Exactement /v1/systemone de TypeSafe. Ajouts en x_ ou sur des routes séparées.
- 02
Backend interchangeable
Le modèle est derrière DecisionBackend. Kev-0.8B est une implémentation.
- 03
Contexte côté plateforme
Le state est rendu par la gateway depuis des templates versionnés.
- 04
Chaque décision est un enregistrement
Identifiant, probabilités, backend, version de schéma, puis outcome.
- 05
Abstention explicite
Sous le seuil du schéma : abstain, jamais un choix arbitraire.
- 06
Zéro réseau au runtime
Poids montés depuis un volume Docker rempli une fois.
02Composants
Qui fait quoi.
La gateway concentre la logique. Le serveur modèle est pur et sans état : on en ajoute des réplicas pour monter en charge.
| Composant | Techno | Responsabilité |
|---|---|---|
| Gateway | FastAPI, Pydantic v2, SQLAlchemy 2, httpx | Auth, autorisation, rendu du state, validation, routage, journal, abstention |
| Serveur modèle | kev.serve (PyTorch CPU) | Inférence /v1/systemone pure, sans état, un conteneur par réplica |
| Console admin | React, Vite, TypeScript, shadcn/ui, TanStack Query | Applications, clés, schémas, templates, décisions, calibration, playground |
| PostgreSQL 16 | — | Référentiel et table decision partitionnée par mois |
| Redis 7 | — | Rate limit (token bucket), quotas, cache des schémas et templates publiés |
| Site | Next.js en export statique, Nginx | Ce site |
03Séquence
Un appel, de bout en bout.
L'insertion en base se fait après la réponse, en tâche de fond : elle ne pèse pas sur la latence.
04Déploiement
Une VM, un compose.
Caddy devant, TLS automatique. Pas de Kubernetes : on ajoute des réplicas modèle derrière la gateway, qui répartit en round-robin.
Caddy termine le TLS sur le port 443 et répartit : le site statique sur /, la gateway sur /v1 et /admin/v1, la console sur /console. La gateway (port 8080) parle aux réplicas du modèle kev.serve (port 8008), à PostgreSQL (5432) et à Redis (6379). Les poids du modèle sont dans un volume Docker rempli une fois et vérifié par SHA-256.
05Décisions
Ce qu'on a choisi, et pourquoi.
Chaque choix d'architecture avec les alternatives écartées. Les écarts constatés à l'implémentation sont consignés dans doc/decisions.md.