Mathieu Bernard Réserver 30 min

AI Gateway pour Symfony

Une passerelle unique entre vos applications et les fournisseurs d’IA : clés, coûts, journal et choix des modèles au même endroit.

Type
Bundle Symfony open source, licence MIT
Code
github.com/symfony-ai-gateway
Serveur
PHP 8.3+, Symfony 7.4 ou 8, Doctrine, SQLite par défaut
Déploiement
Image Docker FrankenPHP, ou bundle Composer
Compatible
API OpenAI et Anthropic, flux en streaming
Mon rôle
Conception et code

Le problème

Dès qu’une entreprise utilise l’IA dans plusieurs applications, les mêmes questions reviennent : les clés des fournisseurs circulent d’un projet à l’autre, personne ne sait qui consomme quoi, et changer de modèle oblige à modifier chaque application. Cette passerelle règle ces questions une fois, comme une brique d’infrastructure.

Ce qu’elle fait, et seulement ça

Les applications appellent la passerelle comme elles appelleraient OpenAI ou Anthropic : il suffit de changer l’adresse. La passerelle fait trois choses, et laisse passer tout le reste sans le modifier.

  • Elle authentifie chaque appel avec une clé propre à l’application ou à l’équipe.
  • Elle journalise chaque requête : modèle, jetons, durée et coût.
  • Elle centralise le choix des modèles : les applications demandent un alias, par exemple « deepseek », et la passerelle le traduit en vrai modèle avec la vraie clé du fournisseur.
Fonctionnement de la passerelle Application PHP Application Node Script Python Passerelleclé · journal · alias OpenAI DeepSeek Anthropic Fonctionnement de la passerelle PHP Node Python Passerelleclé · journal · alias OpenAI DeepSeek Anthropic
Les applications ne connaissent que la passerelle. Les vraies clés et le choix des modèles restent au même endroit.

Ce que la passerelle ajoute

  • Des budgets et des limites par clé et par équipe.
  • Des chaînes de modèles : un modèle de secours si le premier échoue, ou une répartition pondérée entre plusieurs modèles.
  • Un tableau de bord pour gérer les fournisseurs, les alias, les clés, les équipes, et relire les requêtes.
  • Le streaming, transmis tel quel.

Elle ne fait volontairement rien d’autre : pas de traduction entre formats, pas de cache, pas de SDK à installer. Une requête au format OpenAI part au format OpenAI, une requête au format Anthropic part au format Anthropic. Seuls le nom du modèle et la clé changent.

Deux façons de l’utiliser

  • En service autonome : une image Docker que toutes les applications de l’entreprise appellent, quel que soit leur langage. C’est le choix recommandé pour une infrastructure partagée.
  • En bundle Symfony : installée dans une application existante, elle partage sa base de données et peut reconnaître ses utilisateurs au lieu de gérer ses propres clés.

La stack

PHP 8.3 ou plus, Symfony 7.4 ou 8, Doctrine ORM et DBAL, SQLite par défaut, Twig pour le tableau de bord, PHPUnit pour les tests, et une image Docker FrankenPHP. Le code est publié sous licence MIT.

Voir le code sur GitHub ↗

Ce que ce projet montre : la bonne brique d’IA est souvent la plus simple. Une passerelle qui fait trois choses bien, sans enfermer personne dans un outil.