Aller au contenu

Module X — gestion des modèles et des fournisseurs

Le module X gouverne l’ensemble de la pile de modèles et de fournisseurs d’IA — Claude, OpenAI, Gemini et l’inférence locale, pas un seul fournisseur. C’est un module de la couche Core qui se situe au-dessus des connecteurs de modèles/fournisseurs : il ne ré-implémente aucune intégration de fournisseur ni la passerelle d’inférence. Ce qu’il possède, c’est la couche de gouvernance — un catalogue versionné, une matrice de capacités cross-vendor, et une politique de routage nommée.

Le module transforme les entités brutes Provider/Model que l’inventaire (module I) découvre en un catalogue gouverné. Deux moitiés :

  • Un catalogue de référence déclaré — une table versionnée-dans-le-repo, surchargeable par l’opérateur, des familles de modèles avec leurs capacités de fonctionnalités d’API déclarées et leurs valeurs par défaut de list-price. Les prix sont estampillés de la date à laquelle ils ont été déclarés (pricing_as_of), sont explicitement des valeurs par défaut à vérifier sur la page de tarification de chaque fournisseur, et ne sont jamais de la télémétrie fabriquée. Une famille sans entrée correspondante reste non tarifée plutôt que de se voir attribuer un prix inventé.
  • Enrichissement de l’estate vivante — le module écoute le flux cost.sampled et enrichit les entités Model/Provider découvertes avec la famille, la fenêtre de contexte, la modalité, la tarification au token et l’ensemble de capacités (les champs de tarification que l’inventaire lui délègue).

Le vocabulaire de capacités est une seule matrice cross-vendor — toute la pile Claude (prompt caching, batch, Files, citations, extended thinking, computer use, l’outil de mémoire, context management, vision/PDF, structured outputs) plus les analogues que chaque autre fournisseur expose réellement — de sorte que l’UI rend une seule matrice et qu’une politique de routage peut exiger une capacité à travers les fournisseurs. Les familles Claude sont cataloguées par famille (claude-opus, claude-sonnet, claude-haiku, claude-fable, claude-mythos), les versions deprecated/legacy étant conservées sous des préfixes plus longs afin que les ids courants se résolvent vers le niveau de prix courant.

Le routage est la surface d’actionnement, et il est routing-only :

  • La politique de routage est persistée sur l’entité Policy du cœur (Kind="routing") : des politiques nommées de sélection / fallback / version-pinning (cheapest-first, lowest-latency, capability-ordered, ou un modèle épinglé). POST …/routing-policies/{id}/resolve résout une politique en regard de l’estate gouvernée et renvoie une chaîne primaire + fallback avec la raison du choix. C’est en lecture seule : il calcule une sélection que le connecteur/la passerelle exécute ensuite — le module ne réalise aucune inférence.
  • La gouvernance des clés d’API / workspaces est de la métadonnée minimal-data uniquement — quel agent ou quelle équipe utilise quel credential, porté comme un indice masqué, jamais la valeur du secret.
  • Un inventaire de rate-limits Anthropic en lecture seule (les plafonds qu’une passerelle ou un proxy doit garder synchronisés) est servi comme un inventaire consultable ; ce n’est jamais un contrôle que le module mute, et il se dégrade en une réponse honnête unavailable-with-reason lorsque le connecteur Admin en lecture seule n’est pas provisionné.

Les lectures de catalogue et de fonctionnalités ne sont pas sensibles et sont gatées au niveau viewer ; les mutations de routage et de gouvernance de clés sont un changement de niveau editor, audité ; le chemin d’exécution gouvernée est une action de niveau admin distincte du resolve de niveau lecture. Les routes sont publiées dans la référence des routes de module bêta séparée, et non dans le contrat stable du cœur ; leurs formes au niveau des champs vivent dans les interfaces typées du produit.

Le module consomme cost.sampled depuis le bus d’événements pour enrichir le catalogue avec la tarification réelle au token et l’usage ; il n’introduit pas de nouveau type d’observation. Sur le chemin d’exécution gouvernée, un appel réussi produirait un CostSample expurgé vers FinOps — la sortie du modèle va à l’appelant, mais n’est persistée nulle part ici. L’argent n’apparaît jamais sur cette surface : aucun montant en USD n’est renvoyé, seulement des décomptes de tokens et la cible qui a servi.