
Additionner les free tiers : le quota-warden
Un abonnement frontier (Kimi, Claude…) se vide par cycles : quelques heures de travail intense, puis un mur jusqu'au reset. Pendant ce temps, huit providers gratuits (Groq, Cerebras, Gemini, Cloudflare, OpenRouter, Cohere, NVIDIA NIM, Mistral) offrent chacun quelques centaines ou milliers de requêtes par jour. Aucun ne remplace un abonnement. Mais additionnés, ils couvrent largement le routage, la validation, les petites tâches et une partie du code — à condition de trois ingrédients : un peu d'automation, la téléportation du thread, et la passation entre providers.
1. L'addition que personne ne fait à la main
Changer de provider à la main, c'est copier le contexte, trouver la bonne clé, prier pour que le quota tienne. Personne ne le fait dix fois par jour. Notre réponse tient en trois pièces :
- Un routeur qui connaît tout le monde. Tous les providers gratuits sont déclarés dans une seule gateway (chez nous : LiteLLM, ~35 modèles gratuits derrière un seul point d'entrée). Les applications ne parlent qu'à la gateway ; elles ne savent même pas qui répond.
- La téléportation du thread. Quand un modèle tombe à sec, le fil de discussion complet — contexte, mémoire, fichiers — migre vers le provider suivant sans rien perdre. C'est la fonction « teleport » de swarmfox : le thread est une valise, pas une fresque murale. La passation entre providers devient un non-événement.
- Un gardien de quota (le quota-warden) qui observe chaque appel et apprend l'état de chaque modèle :
ok,cooldown,exhausted,down. Un 429 avec heure de reset → le modèle est grisé jusqu'à cette heure. Un 429 nu → quinze minutes de cooldown. Trois erreurs serveur de suite →down. Un appel forcé qui passe → retour àok, la vérité du terrain prime toujours.
2. Les routes : escalade en cascade
Les modèles sont rangés dans des routes nommées qui cascadent toutes seules :
auto-local-first— les cartes locales d'abord (elles n'ont pas de quota, juste de la VRAM), puis les gratuits.auto-gratuit— que du gratuit, le plus rapide d'abord.auto-difficile— les gratuits les plus forts, et les crédits non renouvelables en tout dernier recours.
Quand Groq répond 429, la cascade essaie Cerebras, puis Gemini, puis Mistral… La requête aboutit quelque part, et le warden a appris quelque chose. La fois suivante, le modèle épuisé n'est même plus essayé : il est grisé jusqu'à son reset.
3. Ce que ça change concrètement
Avant : le quota frontier vide = arrêt de travail jusqu'au cycle suivant. Après : le travail de fond (routage, relecture, petites tâches, rédaction) continue sur les free tiers additionnés, et le quota frontier est réservé à ce qui le justifie vraiment — le gros code, la relecture finale, les décisions dures. L'abonnement ne change pas ; ce qu'on lui demande change. Un cycle de quota frontier ne borne plus la journée, il borne seulement les tâches de pointe.
Règles de la maison
- Zéro dépense silencieuse. Les crédits payants non renouvelables ne sont jamais dans une cascade automatique : seulement dans une route qu'on appelle par son nom.
- Un modèle nommé ne ment jamais. Demander
groq-gpt-oss-120bdonne ce modèle ou une erreur. Seules les routesauto-*cascadent. - Le grisage est visible. L'interface interroge le warden et grise le modèle le temps de sa régénération : on voit le swarm respirer au lieu de découvrir le mur en le percutant.
Pièges que nous avons payés
Les free tiers ne promettent rien : latence variable, modèles plus faibles sur le code complexe, quotas qui changent sans prévenir. Traitez-les comme du bonus, jamais comme du socle.
Un callback de supervision doit être invisible quand il marche et silencieux quand il casse. Notre première version faisait échouer la requête utilisateur quand le warden était injoignable — exactement l'inverse du but. Tout est en try/except absolu, et les hooks asynchrones sont obligatoires : le proxy n'appelle jamais les synchrones.
Sur le proxy, le nom du modèle dans les logs est l'identifiant amont (openai/gpt-oss-20b), pas votre nom de déploiement. Le warden doit lire model_group, sinon il grise un nom que votre interface ne connaît pas.
Utile ? Dites-nous ce qu'il faut mesurer ensuite.