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, donc elles fonctionnent avec n'importe quel provider.generateDirect()— appels background fire-and-forget (évaluation, contenu, summarizer, supervisor) qui s'exécutent dans leafter()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 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 des crédits → 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 pariez pas votre plateforme sur le prix, la latence ou la disponibilité d'un seul laboratoire. À mesure que les modèles s'améliorent, vous changez une liste déroulante — pas votre code.