-
-
Notifications
You must be signed in to change notification settings - Fork 6
stream rate limit rotation iteration
Historical report: measurements and conclusions describe the original dated investigation, not current performance guarantees.
Date : 30 juillet 2026
Une réponse upstream en échec n'est plus considérée comme un stream à relayer
uniquement parce que son en-tête contient Content-Type: text/event-stream.
Le test de bout en bout a révélé une limite de l'itération précédente :
- le premier compte renvoyait un HTTP
429sous forme SSE ; - le détecteur de stream classait cette réponse avant l'analyse de quota ;
- le proxy relayait le
429au client et terminait la requête ; - le second compte, pourtant disponible, n'était jamais essayé.
Désormais, un statut upstream en échec est toujours bufferisé avant tout relais.
Le routeur peut alors inspecter le corps, marquer le couple compte/modèle comme
bloqué et essayer le compte suivant. Les réponses SSE réussies conservent leur
relais immédiat, y compris le chemin OpenAI sans en-tête Content-Type.
Les timers de rafraîchissement du catalogue sont également passés en unref :
ils continuent de fonctionner tant que le serveur tourne, mais ne retiennent
plus artificiellement un processus en phase d'arrêt ou un test local terminé.
Le nouveau test lance un vrai routeur Express local avec :
- deux comptes OpenAI en mémoire ;
- un upstream simulé qui renvoie un
429SSE au premier compte ; - une réponse
200au second compte ; - des traces capturées sans aucun secret ni appel réseau.
Avant la correction, le test échouait avec 429 !== 200. Après correction :
- le client reçoit le statut
200du second compte ; - les appels upstream sont exactement
account-one, puisaccount-two; - le premier compte reçoit un bloc
quota/rate-limit: 429; - les deux tentatives sont présentes dans les traces.
| Variante | Statut final | Comptes essayés | Résultat |
|---|---|---|---|
| Relais SSE basé sur le seul Content-Type | 429 | premier | erreur relayée |
| Classification du statut avant relais | 200 | premier, second | succès |
Ce scénario mesure le résultat de routage, pas une durée réseau. Le gain de latence sur un vrai rate limit reste celui de la politique précédente : aucun backoff sur le compte limité avant la rotation, contre au moins 62 secondes avec les réglages historiques.
node --import tsx scripts/benchmark-stream-rate-limit-rotation.mjs
node --import tsx --test src/routes/proxy/account-rotation.test.tsLes résultats agrégés sont conservés dans
docs/stream-rate-limit-rotation-benchmark.json.
Migrated from docs/stream-rate-limit-rotation-iteration.md on 2026-09-07.