mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-02 05:12:11 +03:00
Phase 1: Error classification + provider profiles (constants, providerRegistry, accountFallback) Phase 2: Circuit breaker integration in combo pipeline (combo.js) Phase 3: Anti-thundering herd mutex + auto rate limits for API key providers (auth.js, rateLimitManager) Phase 4: Frontend Resilience tab with Circuit Breaker, Provider Profiles, Rate Limit cards Tests: 63/63 passing (error-classification, combo-circuit-breaker, thundering-herd, rate-limit-enhanced)
3.5 KiB
3.5 KiB
Rate Limiting & Flow Control Overhaul — Tasks
Referência: Relatório de Análise · Fase docs em
/docs/phases/
Fase 1 — Error Classification & Provider Profiles
Backend Core
constants.js— SubstituirCOOLDOWN_MS.transientportransientInitial(5s) +transientMax(60s)constants.js— AdicionarPROVIDER_PROFILES(oauth / apikey) com cooldowns diferenciadosconstants.js— AdicionarDEFAULT_API_LIMITS(100 RPM, 200ms minTime)providerRegistry.js— Criar helpergetProviderCategory(providerId)→"oauth"|"apikey"accountFallback.js— Aceitarprovidercomo parâmetro emcheckFallbackErroraccountFallback.js— Implementar backoff exponencial para 502/503/504 transientesaccountFallback.js— Calcular cooldown baseado no perfil do provedoraccountFallback.js— Adicionar helpergetProviderProfile(provider)
Callers (propagar provider)
auth.js→markAccountUnavailable— PassarproviderparacheckFallbackErrorcombo.js→handleComboChat/handleRoundRobinCombo— Passarprovidernos erros
Testes
- Atualizar
rate-limit-enhanced.test.mjs— Teste "transient errors don't increase backoff" →newBackoffLevel = 1 - Criar
error-classification.test.mjs— Cooldown exponencial 502, perfis OAuth/API, helpergetProviderCategory
Fase 2 — Circuit Breaker no Combo Pipeline
Backend
combo.js— ImportargetCircuitBreakereCircuitBreakerOpenErrorcombo.js—handleComboChat— Verificarbreaker.canExecute()antes de cada modelocombo.js—handleRoundRobinCombo— Integrar breaker per-modelcombo.js— Marcarsemaphore.markRateLimitedpara 502/503/504 (não só 429)combo.js— Implementar early exit quando todos os modelos têm breaker OPEN
Testes
- Criar
combo-circuit-breaker.test.mjs— Combo skip breaker OPEN, early exit, semáforo 502
Fase 3 — Anti-Thundering Herd & Auto Rate Limit
Backend
rateLimitManager.js— Auto-enable paraapikeyproviders com limites elevadosrateLimitManager.js— Criar limiter com defaults (100 RPM) quando não configuradoauth.js— Adicionar mutex namarkAccountUnavailablepara evitar marcação paralela
Testes
- Criar
thundering-herd.test.mjs— Mutex, auto-enable, limites não restritivos
Fase 4 — Frontend Resilience UI
Settings Page
settings/page.js— Adicionar tab "Resilience" (icon:health_and_safety) entre Routing e Pricing
Novos Componentes
- Criar
ResilienceTab.js— Layout com 3 cards - Criar
ProviderProfilesCard.js— Toggle OAuth/API Key, inputs para cooldowns - Criar
CircuitBreakerCard.js— Status real-time per-provider, auto-refresh 5s, botão reset - Criar
RateLimitOverviewCard.js— Tabela providers × accounts × cooldown
API Routes
- Criar
api/resilience/route.js— GET (estado completo) + PATCH (salvar perfis) - Criar
api/resilience/reset/route.js— POST (resetar breakers + cooldowns)
Migração
- Avaliar se
PoliciesPanel.jspode ser removido ou simplificado após nova aba
Verificação Final
- Rodar todos os testes unitários:
node --test tests/unit/*.test.mjs - Build do Next.js:
npm run build - Verificar aba Resilience no browser
- Testar persistência dos perfis (salvar → reload)
- Testar Reset All Breakers