2026 — OpenClaw : routage multi-modèles et chaînes de dégradation — répartition par canaux/tâches, 429 vs timeout et fail-over sur passerelle Mac physique distante ZoneMac (openclaw.json + FAQ)
Les équipes qui exécutent OpenClaw sur une passerelle Mac physique distant ZoneMac subissent souvent une double pression : plafonds de débit (429) et timeouts de flux long sur un seul modèle « héros ». Cet article détaille la répartition par canal et par étiquette de tâche, les chaînes de secours ordonnées et le tri 429 (backoff) vs timeout (fail-over) ; il fournit une structure openclaw.json prête à coller, des matrices de décision, un runbook en sept étapes, des chiffres citables et une FAQ.
1. Introduction et périmètre
Le routage multi-modèles ne vise pas « plus de fournisseurs pour le plaisir » : il stabilise une seule passerelle sous des pressions d’entrée différentes — exposer un contrat unique (par ex. chemins compatibles OpenAI) vers l’extérieur, choisir des profils coût/latence par canal (Telegram, Slack, API interne) et par type de tâche (chat, résumé batch, bot de commentaire CI), et utiliser des chaînes de secours ordonnées lorsque les amonts vacillent.
Nous supposons que le processus passerelle et une requête de chat minimale fonctionnent déjà sur le Mac. Pour cadrer région et déploiement avant d’affiner le routeur, voir le guide de comparaison du déploiement mondial OpenClaw 2026 : où déployer ?. Si la CI compétitionne encore le gateway sur les runners (checkout Git lourd), reliez ce runbook à CI transfrontalier : partial / blobless clone sur Mac multi-régions.
2. Points de douleur
- Limites masquées derrière « un modèle pour tout le monde ». Partager un modèle coûteux entre canaux transforme les pics de 429 en panne générale ; le trafic interactif vs batch et interne vs externe doit utiliser des profils et budgets de concurrence distincts.
- Coût caché quand 429 et timeouts sont confondus. Les 429 exigent
Retry-Afteret le respect des quotas ; les timeouts de lecture ou TLS se prêtent à des sauts de chaîne ou à des plafonds stream-idle plus hauts — une politique générique « trois retries » ralentit la file et brouille la cause racine. - Stabilité et audit de la configuration. Sur un Mac distant, des modifications non revues de
openclaw.jsonpeuvent casser le profil par défaut ou désynchroniser l’ordre de secours du modèle financier. Nommez les profils, documentez l’ordre primaire/secondaire et désignez un propriétaire dans le runbook.
3. Matrice de décision : dimensions × stratégie
Validez ce tableau avant déploiement ; la colonne de gauche est le raccourci tentant, la droite une base saine.
| Dimension | Raccourci risqué | Base recommandée |
|---|---|---|
| Répartition par canal | Un modèle pour chaque canal | Canaux à forte fréquence et faible sensibilité sur un profil rapide/économique ; support client sur un profil qualité |
| Étiquettes de tâche | Heuristiques sur la longueur du message seulement | Balises explicites (ci, support) au routeur pour choisir les profils |
| Chaîne de secours | En échec, tirer un modèle au hasard | Liste ordonnée fixe à coût non croissant ; journal structuré par saut |
| 429 | Retry immédiat sur le même modèle | Backoff + Retry-After ; réduire la concurrence globale si besoin |
| Timeout / flux inactif | Ne régler que le timeout de connexion | Séparer connexion / lecture / inactivité de flux ; en échec, avancer dans la chaîne plutôt que boucler des retries |
| Forme du déploiement | Colocalisation avec l’appli, sans plan B | Bare metal ou Compose avec sondes de santé ; documenter Docker vs nu et le plan de second instance dans le runbook |
4. Extraits openclaw.json reproductibles
Ce qui suit est une structure illustrative : les clés doivent correspondre à la doc de votre version OpenClaw ; fusionnez dans un fichier existant sans écraser les chemins propres à la prod (canaux, références d’identifiants) et conservez toujours une sauvegarde.
4.1 Profils routeur, canaux et étiquettes de tâche
{
"gateway": {
"router": {
"defaultProfile": "balanced",
"profiles": {
"fast": {
"primaryModel": "gpt-4o-mini",
"fallbackChain": ["claude-3-5-haiku", "local-qwen-14b"]
},
"balanced": {
"primaryModel": "gpt-4.1",
"fallbackChain": ["gpt-4o", "gpt-4o-mini"]
},
"quality": {
"primaryModel": "gpt-4.1",
"fallbackChain": ["claude-3-5-sonnet", "gpt-4o"]
}
},
"routeByChannel": {
"telegram": { "profile": "fast" },
"slack_public": { "profile": "balanced" },
"api_internal": { "profile": "quality" }
},
"routeByTaskTag": {
"ci": { "profile": "fast" },
"support": { "profile": "quality" },
"ops_summary": { "profile": "balanced" }
}
}
}
}
4.2 Retries amont, 429 et timeouts
{
"gateway": {
"upstream": {
"http": {
"maxRetries": 4,
"retryOnStatus": [408, 409, 425, 429, 500, 502, 503, 504],
"respectRetryAfter": true,
"backoff": { "baseMs": 400, "maxMs": 8000, "jitter": 0.2 }
},
"circuitBreaker": {
"errorRateThreshold": 0.35,
"minSampleSize": 40,
"openDurationMs": 60000
},
"timeouts": {
"connectMs": 8000,
"requestMs": 180000,
"streamIdleMs": 240000
},
"failover": {
"onTimeout": "nextInFallbackChain",
"on429": "retryWithBackoffThenFallback",
"maxFallbackHops": 3
}
}
}
}
streamIdleMs couvre les longs écarts entre jetons en mode streaming ; garder on429 et onTimeout dans des blocs séparés permet des SLO distincts dans les journaux et tableaux — exportez des compteurs cohérents vers Prometheus ou Grafana et alertez séparément sur la profondeur de secours et le taux de 429.
5. Runbook en sept étapes (Mac physique distant)
- Geler les dimensions de trafic. Aligner produit et ops sur les ID de canaux et les enums d’étiquettes ; supprimer les défauts anonymes pour que le trafic ne retombe pas silencieusement sur
balanced. - Sauvegarder le JSON.
cp openclaw.json openclaw.json.bak.$(date +%Y%m%d%H%M); joindre le diff au ticket. - Fusionner les blocs routeur. Ajouter d’abord
profilesetfallbackChain, puisrouteByChannel/routeByTaskTag. - Requête de référence locale. Pour chaque profil, exécuter un curl fixe (ou petit script SDK) vers
127.0.0.1, noter l’ID modèle et la latence. - Injecter deux classes de faute. Avec un mock ou un throttle, renvoyer 429 et, séparément, étirer le délai avant le premier octet ; le 429 doit backoff sans consumer toute la chaîne en trois essais, les timeouts doivent avancer le long de la chaîne.
- Brancher l’observabilité. Exporter au minimum : requêtes par profil, taux de 429, distribution de la profondeur de secours, taux de timeout lecture — aligner les seuils des panneaux sur votre runbook Prometheus/Grafana.
- Archiver et revue. Commiter extraits JSON, commandes de référence et retour arrière (restaurer le bak + rechargement) à côté de la doc interne.
6. Tri fail-over 429 vs timeout
| Symptôme | Cause probable | Action |
|---|---|---|
| HTTP 429 avec Retry-After | Quota amont ou throttle locataire | Pause et retry sur le même modèle ; réduire la concurrence globale ; ensuite seulement parcourir la chaîne |
| HTTP 429 sans Retry-After | Edge/WAF ou amont non conforme | Backoff exponentiel et journaliser request_id ; comparer amont direct vs chemin passerelle |
| Timeout de connexion | Chemin réseau, DNS, tunnel | Vérifier santé Tailscale/reverse-proxy ; privilégier les sauts de chaîne plutôt que de longues chaînes de backoff sur échec connect |
| Premier jeton lent puis normal | Cold start ou file d’attente | Élever les bornes connect/request ; préchauffer les jobs batch avec une mini requête |
| Flux qui s’arrête en cours de génération | Timeout de lecture ou inactivité trop basse | Augmenter streamIdleMs et les timeouts SSE du proxy ; traiter à part des 429 |
7. Chiffres prêts à citer (runbooks)
- Départ backoff :
baseMs: 400etmaxMs: 8000comme ordre de grandeur initial pour les 429 ; réconcilier avec les plafonds QPS commerciaux. - Inactivité de flux :
streamIdleMs: 240000(quatre minutes) convient aux longues réponses ; des valeurs plus courtes favorisent le chat interactif. - Plafond de secours :
maxFallbackHops: 3limite l’explosion de latence ; au-delà, renvoyer une erreur explicite et pager.
8. FAQ
Les modèles de secours doivent-ils avoir la même forme de sortie ?
Privilégiez des modèles dans la même bande de capacités (appel d’outils / mode JSON) ; si vous changez de famille, gérez les échecs de format dans l’application et dégradez en texte brut plutôt que d’assumer une parité token à token.
Un nœud ZoneMac transfrontalier amplifie-t-il les timeouts ?
Oui. Mesurez séparément client→passerelle et passerelle→amont RTT ; rapprochez la passerelle de la sortie amont ou relevez requestMs pour ce profil. Traitez la RTT transfrontalière comme entrée de premier ordre pour les plafonds stream-idle et requête.
Peut-on limiter le débit par utilisateur ?
Ajoutez un seau de jetons par utilisateur devant OpenClaw (API gateway ou petit middleware) ; gardez la concurrence au niveau profil dans OpenClaw pour ne pas dupliquer la politique.
9. Synthèse et choix de nœud
Le routage multi-modèles déplace coût, latence et disponibilité du bricolage réactif vers un contrat auditable : canaux et tâches sélectionnent les profils, 429 et timeouts ont des sémantiques de fail-over différentes, et les chaînes ordonnées offrent un dernier recours déterministe lorsque les amonts tremblent.
Exécuter la passerelle sur un Mac physique distant ZoneMac ancre ce chemin sur un hôte Unix longue durée et faible gigue : Terminal et SSH natifs, supervision launchd, alignement avec la toolchain macOS — moins de dérive d’environnement qui se traduit par des timeouts « fantômes ». La mémoire unifiée Apple Silicon rend aussi plus réaliste un petit modèle de secours local sur la machine. Un Mac mini M4 — avec environ 4 W en veille, un fonctionnement silencieux et un macOS stable — convient bien à une passerelle 7j/7 ; Gatekeeper et SIP réduisent aussi la surface d’exposition.
Si vous voulez cette pile de routage sur un matériel prévisible avec peu de friction opérationnelle, le Mac mini M4 est l’un des meilleurs rapports performance/prix pour démarrer — louez un Mac physique distant via ZoneMac et posez le trafic multi-modèles sur une configuration de passerelle reproductible.
Besoin d’un Mac physique distant pour le routage multi-modèles OpenClaw ?
La location cloud Mac mini ZoneMac garde la passerelle et la toolchain sur du métal réel pour reproduire openclaw.json et boucler la boucle observabilité.