Comment fonctionne la sélection de modèle
Le LLM Router (packages/core/src/ai/router.ts) résout le provider et le modèle de chaque appel à partir du TenantTaskModelConfig, par type de tâche :
| Type de tâche | Défaut typique |
|---|---|
| chat_tutor | classe Sonnet |
| chat_evaluation / summarization / supervisor | classe Haiku |
| content_generation | classe Haiku |
| course_review / course_agent / gamification_agent | classe Sonnet |
L'admin institutionnel peut remplacer n'importe quelle tâche par un autre provider/modèle. Aucun model ID n'est codé en dur dans les agents — le router est le seul point de décision.
Méthodes du router
stream()— chat avec streaming (metered).generate()— agents avec tools (metered) ; les tools sont converties de JSON Schema vers le format AI SDK, elles fonctionnent donc avec n'importe quel provider.generateDirect()— appels background fire-and-forget (evaluation, content, summarizer, supervisor) qui s'exécutent dansafter()de Next.js sans le pipeline complet de metering.
Fallback chain + circuit breaker
Par tier : Claude → GPT → Grok → Gemini (LLMs) ; Voyage → OpenAI → Cohere (embeddings). Un circuit breaker dans Redis s'ouvre après un seuil d'échecs et est partagé entre les instances, de sorte qu'un breaker ouvert saute le provider défaillant sans timeout. Les incidents sont enregistrés pour l'observabilité.
BYO keys + metering
- Les clés par tenant (
TenantApiKey) sont chiffrées en AES-256-GCM. Ordre de résolution : clé du tenant → clé globale du provider → variable d'environnement. - Chaque appel LLM passe par le middleware de metering (rate limit → vérification du crédit → calcul du coût), en enregistrant séparément les tokens d'entrée et de sortie. Les prix proviennent d'une table en base de données, jamais codés en dur.
Pourquoi c'est important
Vous ne misez pas votre plateforme sur le prix, la latence ou la disponibilité d'un seul laboratoire. Au fur et à mesure que les modèles s'améliorent, vous changez une liste déroulante — pas votre code.