Usage et coûts
Vérifié avec Cortex le 2 octobre 2026
Cortex mesure ce que chaque requête consomme : des jetons en entrée et en sortie, et une estimation du coût. Les lignes d’usage ne portent que des identifiants et des compteurs, jamais le contenu des conversations. Tout se trouve dans la console, sous « FinOps ». Le coût est une estimation de Cortex, pas la facture du fournisseur.
La page compte quatre onglets : « Usage », « Budgets », « Clés virtuelles » et « Tarifs ». Le rôle « Administrateur » voit les quatre. Le rôle « Auditeur » voit « FinOps » dans le menu, mais seulement l’onglet « Usage ».
Tableau d’usage
Choisissez la « Période » (« Dernières 24 heures » par défaut, « 7 derniers jours », « 30 derniers jours » ou « Personnalisée » avec « Du » et « Au »), la « Destination » et « Regrouper par », puis cliquez sur « Appliquer ». Rien ne change avant ce clic : avant le premier, les chiffres couvrent tout l’usage enregistré, même si la liste indique « Dernières 24 heures ».
« Regrouper par » offre « Global » (par défaut), « Utilisateur », « Rôle », « Destination », « Clé virtuelle » et « Jour ». Il n’y a pas de regroupement par service. Un utilisateur qui porte plusieurs rôles est compté sous chacun, et les jours suivent l’heure UTC.
Quatre cartes résument la période : « Requêtes », « Coût estimé », « Servies du cache » et « Jetons en entrée ». Le tableau détaille chaque groupe, avec « Jetons en sortie », « Coût » et « Sans tarif ». Le coût s’affiche par devise : Cortex n’additionne jamais deux devises. « Sans tarif » compte les requêtes dont le modèle n’avait pas de prix au moment de l’appel.
« Exporter en CSV » et « Exporter en JSON » téléchargent les lignes d’usage une à une, avec la période et la destination appliquées.
Prix des modèles
- Une destination locale est valorisée au taux unique
FINOPS_LOCAL_COST_PER_MTOK, en dollars canadiens (CAD) par million de jetons, entrée et sortie confondues. Sans cette variable, le coût local est de 0 CAD. Elle se règle dans le fichier.envà la racine du dépôt, puis recréez le conteneur de la passerelle (docker compose up -d gateway). - Une destination externe (API) est valorisée selon le catalogue de tarifs, par fournisseur et par modèle. Un modèle absent du catalogue n’a pas de coût et compte dans « Sans tarif ».
L’onglet « Tarifs » affiche ce catalogue, en prix par million de jetons. Il est partagé par tous les locataires de la passerelle. Les lignes « importé » viennent de la synchronisation des tarifs; un prix « admin », fixé à la main, n’est jamais écrasé par une synchronisation.
- Cliquez sur « Ajouter un tarif », ou sur « Retarifer » sur la ligne d’un modèle.
- Renseignez le « Coût d'entrée par million de jetons », le « Coût de sortie par million de jetons » et la « Devise » (trois lettres majuscules). Pour un ajout, saisissez aussi le « Fournisseur » et le « Modèle »; un retarifage les garde.
- Cliquez sur « Enregistrer ».
Les prix se corrigent vers l’avant : la ligne courante est fermée et une nouvelle ligne prend effet. Rien ne se supprime. Activez l’interrupteur « Afficher l'historique », puis cliquez sur « Appliquer » pour voir les lignes fermées.
Budgets
Un budget est un plafond de dépense, géré dans l’onglet « Budgets ».
- Cliquez sur « Nouveau budget ».
- Choisissez la « Portée » : « Locataire » (tout le déploiement), « Rôle », « Utilisateur » ou « Clé virtuelle », puis la « Cible » (sauf pour « Locataire »).
- Choisissez la « Période » : « Quotidien », « Hebdomadaire » (du lundi), « Mensuel » ou « Personnalisée » (« Début » et « Fin »). Les périodes suivent l’heure UTC.
- Saisissez le « Montant plafond » et la « Devise » (CAD par défaut).
- Réglez le « Seuil d'alerte (%) » (80 par défaut), puis cliquez sur « Créer ».
« Modifier » ouvre la fenêtre du budget; l’interrupteur « Actif » qui s’y trouve le suspend sans le supprimer. Cliquez sur « Enregistrer » pour appliquer. « Supprimer » demande une confirmation et est irréversible. Ces modifications ne sont pas consignées au journal d’audit.
Un budget ne compte que les dépenses de sa propre devise : un budget en CAD ignore une dépense en USD. Le budget d’un rôle compte la dépense de tous les comptes qui le portent, y compris par leurs clés virtuelles, mais il n’est pas vérifié sur une requête faite avec une clé virtuelle (les budgets d’utilisateur, de clé et de locataire le sont).
Cortex vérifie les budgets avant d’envoyer une requête. Quand la dépense estimée de la période atteint le plafond, la requête est refusée avec le code HTTP 402 (budget_exceeded) et rien n’est envoyé au fournisseur. L’employé lit « Cette requête a été refusée parce qu'un plafond de dépense est atteint. » Le refus est consigné au journal d’audit sous « Requête bloquée (budget) ». La requête qui franchit le seuil d’alerte est consignée sous « Alerte budgétaire »; Cortex n’envoie pas de courriel.
Clés virtuelles
Une clé virtuelle sert à une application qui appelle la passerelle sans l’interface : elle s’envoie dans l’en-tête Authorization: Bearer de l’API compatible OpenAI (/v1/…, par exemple /v1/chat/completions) et est refusée ailleurs. Elle appartient à un utilisateur, ses requêtes sont comptées à son nom, et elle n’atteint que ses destinations autorisées.
- Dans l’onglet « Clés virtuelles », cliquez sur « Émettre une clé ».
- Renseignez le « Libellé » et le « Propriétaire », puis cochez au moins une destination sous « Destinations autorisées ».
- Facultatif : « Requêtes par minute », « Jetons par minute » et « Expire le ».
- Cliquez sur « Émettre ». La fenêtre « Clé émise » affiche la clé, qui commence par
cor_vk_. - Cliquez sur « Copier », rangez la clé dans le coffre de secrets de l’application, puis cliquez sur « Terminé ».
Sur une clé « Active », « Renouveler » génère un nouveau secret, affiché une fois, et l’ancien cesse de fonctionner aussitôt. « Révoquer » désactive la clé aussitôt et sans retour; une clé expirée est refusée de la même façon. L’émission, le renouvellement et la révocation sont consignés au journal d’audit.
Les limites se mesurent sur une fenêtre glissante de 60 secondes. Quand l’une est atteinte, la requête reçoit le code 429 (quota_exceeded), consigné sous « Requête bloquée (quota) ». Pour une clé sans limite propre, FINOPS_DEFAULT_RPM_LIMIT et FINOPS_DEFAULT_TPM_LIMIT fixent les valeurs par défaut; sans elles, il n’y a pas de limite. Le compte est tenu par processus de passerelle. Voir Configuration.