Projets LLM
L'écran Projets LLM permet de créer les projets LLM du tenant, de choisir les modèles que chacun peut utiliser et de fixer son quota (budget, jetons, RPM, TPM, requêtes parallèles), reporté dans une équipe LiteLLM. Chemin dans le portail : /llm/projects. Il est utilisé par les administrateurs du tenant et de la plateforme (tenant_admin, platform_admin). L'écran est construit dans portal/src/screens/llm-management.tsx (LlmProjects, ProjectDialog, QuotaDialog) avec les fonctions de portal/src/lib/llm-management.ts.
Ce que montre l'écran
- Le bouton d'en-tête Nouveau projet (administrateurs).
- La section API d'administration LiteLLM (
GET /v1/llm/management/status), dans l'un de trois états :- prête : « LiteLLM répond à
<url>: les projets y sont reportés en équipes et les clés y sont générées. » ; - LiteLLM n'est pas configuré : les projets sont enregistrés mais pas reportés, et aucune clé ne peut être créée ; les réglages manquants sont listés, avec Vérifier à nouveau ;
- LiteLLM ne répond pas à
<url>: les projets restent enregistrés et pourront être synchronisés plus tard, avec Vérifier à nouveau.
- prête : « LiteLLM répond à
- La section Projets LLM (« Chaque projet est une équipe LiteLLM : ses modèles et ses limites s'appliquent à toutes les clés du projet. »), une table lue par
GET /v1/llm/projects:
| Colonne | Contenu |
|---|---|
| Nom | Nom du projet LLM. |
| Statut | active, suspended ou archived. |
| LiteLLM | État de synchronisation de l'équipe : synced, pending (LiteLLM non configuré) ou failed. |
| Modèles | Modèles effectifs (modèles autorisés plus les modèles des catégories autorisées), ou Tous les modèles. |
| Budget | <montant> <devise> / <période>, ou sans limite. |
| Limites de débit | <n> RPM, <n> TPM, sans limite si vide. |
| Clés | Nombre de clés non révoquées. |
Sans projet : « Aucun projet LLM. Créez un projet, définissez son quota, puis créez ses clés. »
Le formulaire de projet (Nouveau projet, Modifier le projet) contient les champs Nom, Responsable (vous par défaut), Description, Projet du tenant (lien facultatif vers un projet du tenant, lu par GET /v1/projects : ses limites quotidiennes et mensuelles sont alors appliquées par la passerelle), Statut, Modèles autorisés (suggestions de GET /v1/models) et Catégories autorisées. Laissez les deux vides pour autoriser tous les modèles. À la création, les champs de quota s'ajoutent : Budget (vide : pas de budget), Devise (USD par défaut), Période du budget (daily, weekly, monthly, total), Limite de jetons, Période des jetons, Requêtes par minute (RPM), Jetons par minute (TPM), Requêtes parallèles max, Seuil d'alerte (%) (80 par défaut, alerte douce), Arrêt strict (actif par défaut ; désactivé : le budget ne déclenche que des alertes).
Actions
| Bouton ou action | Ce qu'il fait | Appel d'API | Rôles |
|---|---|---|---|
| Vérifier à nouveau (API d'administration LiteLLM) | Sonde de nouveau l'API d'administration LiteLLM. | GET /v1/llm/management/status | tenant_admin, platform_admin |
| Nouveau projet (en-tête ou état vide) | Crée le projet avec son quota, puis le reporte dans une équipe LiteLLM. Notification « Projet enregistré et synchronisé avec LiteLLM » ou « Projet enregistré, mais non synchronisé avec LiteLLM ». | POST /v1/llm/projects | tenant_admin, platform_admin |
| Clés du projet (menu de ligne) | Ouvre Clés LiteLLM sur ce projet (/llm/keys?project=<id>). | aucun | tous ceux qui voient la table |
| Modifier le projet (menu de ligne) | Change nom, responsable, description, projet du tenant, statut et modèles autorisés ; un Projet du tenant vide supprime le lien. | PATCH /v1/llm/projects/{project_id} | tenant_admin, platform_admin |
| Quota (menu de ligne) | Boîte Quota de <nom> avec les champs de quota ; enregistre le quota, met à jour les quotas du Control Plane et l'équipe LiteLLM. | PUT /v1/llm/projects/{project_id}/quota | tenant_admin, platform_admin |
| Synchroniser avec LiteLLM (menu de ligne) | Pousse à nouveau le projet vers LiteLLM (création ou mise à jour de l'équipe). Notification « Projet synchronisé avec LiteLLM ». | POST /v1/llm/projects/{project_id}/sync | tenant_admin, platform_admin |
| Supprimer le projet (menu de ligne) | Confirmation destructive qui liste l'équipe LiteLLM, le risque « L'équipe LiteLLM et les quotas Control Plane du projet sont supprimés. » et les rôles requis ; saisissez le nom de la ressource, puis Confirmer. | DELETE /v1/llm/projects/{project_id} | tenant_admin, platform_admin |
Rôles
- Toutes les routes
/v1/llm/projectsetGET /v1/llm/management/statusexigentADMINdeservices/control-plane/src/eai/domains/llm_management/__init__.py:tenant_adminouplatform_admin(MANAGERSdansportal/src/lib/llm-management.ts). Les autres rôles,ai_platform_engineercompris, reçoiventforbiddenet voient un panneau d'erreur. - Les boutons Nouveau projet, Modifier le projet, Quota, Synchroniser avec LiteLLM et Supprimer le projet ne sont affichés qu'à ces deux rôles.
- Chaque route demande un tenant : un principal sans tenant reçoit
tenant_required.
Tâches courantes
Créer un projet avec un budget mensuel
- Vérifier LiteLLM. Lisez la section API d'administration LiteLLM, car un projet n'est reporté dans LiteLLM que si son API d'administration répond. Résultat attendu : le message prêt avec l'adresse de LiteLLM. En cas d'échec : renseignez les réglages listés (voir la section Dépannage), puis Vérifier à nouveau.
- Ouvrir le formulaire. Cliquez sur Nouveau projet. Résultat attendu : la boîte avec les champs du projet et du quota. En cas d'échec : le bouton manque si vous n'êtes ni
tenant_adminniplatform_admin. - Remplir le projet. Saisissez le Nom, choisissez les Modèles autorisés ou les Catégories autorisées (les deux vides : tous les modèles), puis Budget, Devise, Période du budget
monthlyet les limites de débit, pour que chaque clé du projet en hérite. Résultat attendu : aucun message de validation. En cas d'échec : un champ obligatoire est marqué Obligatoire. - Créer. Cliquez sur Nouveau projet. Résultat attendu : notification « Projet enregistré et synchronisé avec LiteLLM » et LiteLLM
synceddans la table. En cas d'échec : « Projet enregistré, mais non synchronisé avec LiteLLM » signifie que le projet existe avecpendingoufailed; réparez LiteLLM, puis utilisez Synchroniser avec LiteLLM.
Resserrer le quota d'un projet
- Ouvrir le quota. Menu de ligne > Quota. Résultat attendu : la boîte Quota de
<nom>avec les valeurs actuelles. En cas d'échec : actualisez la page. - Changer les limites. Baissez Budget, Requêtes par minute (RPM) ou Jetons par minute (TPM), et gardez Arrêt strict actif si les appels doivent s'arrêter à la limite. Résultat attendu : les valeurs sont acceptées. En cas d'échec : « Quota invalide :
<raison>. » indique la valeur fautive. - Enregistrer. Cliquez sur Enregistrer. Résultat attendu : notification « Quota enregistré et synchronisé avec LiteLLM » et les nouvelles valeurs Budget et Limites de débit dans la table. En cas d'échec : le quota est enregistré même si LiteLLM ne répond pas ; synchronisez plus tard.
Supprimer un projet
- Révoquer ses clés. Ouvrez Clés du projet et révoquez chaque clé, car un projet qui a des clés actives ne peut pas être supprimé. Résultat attendu : Clés affiche
0. En cas d'échec : voir Clés LiteLLM. - Supprimer. Menu de ligne > Supprimer le projet, saisissez le nom de la ressource, puis Confirmer. Résultat attendu : notification Projet supprimé ; l'équipe LiteLLM et les quotas du Control Plane sont retirés. En cas d'échec : « Ce projet a encore des clés actives : révoquez-les d'abord. »
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
LiteLLM n'est pas configuré (litellm_not_configured, 503) | L'adresse d'administration ou la référence de la clé maître manque. | Renseignez EAI_LITELLM_ADMIN_URL (ou EAI_LITELLM_URL) et EAI_LITELLM_MASTER_KEY_REF (ou EAI_LITELLM_MASTER_KEY), puis Vérifier à nouveau. |
LiteLLM ne répond pas à <url> (litellm_unreachable, 502) | Le proxy LiteLLM est arrêté ou l'adresse est fausse. | Vérifiez le proxy et son adresse, puis Synchroniser avec LiteLLM. |
« L'API d'administration de LiteLLM a refusé la demande (statut <statut>). » (litellm_rejected, 502) | LiteLLM a rejeté l'appel d'équipe. | Vérifiez la clé maître et les journaux de LiteLLM, puis synchronisez à nouveau. |
« Un projet LLM porte déjà ce nom. » (llm_project_exists, 409) | Nom en double dans le tenant. | Choisissez un autre Nom. |
« Projet du tenant introuvable. » (tenant_project_not_found, 404) | Le Projet du tenant lié n'existe pas. | Choisissez un projet de la liste, ou laissez le champ vide. |
« Quota invalide : <raison>. » (invalid_quota, 422) | Une valeur du quota est hors bornes. | Corrigez la valeur citée dans le message. |
« Ce projet a encore des clés actives : révoquez-les d'abord. » (llm_project_has_keys, 409) | Des clés non révoquées existent sur le projet. | Révoquez-les dans Clés LiteLLM. |
« Cette action demande un tenant : connectez-vous sur un tenant ou envoyez X-Tenant. » (tenant_required) | Pas de contexte de tenant. | Connectez-vous sur un tenant. |
Panneau d'erreur forbidden (403) | Rôle autre que tenant_admin ou platform_admin. | Demandez à un administrateur du tenant. |