mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-02 13:22:11 +03:00
- README.md: TypeScript 5.9 in tech stack, test count 368+, evalRunner.ts - CONTRIBUTING.md: TypeScript code examples, project structure with .ts/.tsx, PR checklist - AGENTS.md: all src/ module references .js→.ts, TypeScript in stack - ARCHITECTURE.md: 44 src/ path refs updated, date updated, TS/JS note - CODEBASE_DOCUMENTATION.md: localDb.ts/usageDb.ts in app layer - TASKS.md: 8 component/route refs updated to .tsx/.ts open-sse/ references correctly remain .js (not yet migrated)
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.tsx— Adicionar tab "Resilience" (icon:health_and_safety) entre Routing e Pricing
Novos Componentes
- Criar
ResilienceTab.tsx— Layout com 3 cards - Criar
ProviderProfilesCard.tsx— Toggle OAuth/API Key, inputs para cooldowns - Criar
CircuitBreakerCard.tsx— Status real-time per-provider, auto-refresh 5s, botão reset - Criar
RateLimitOverviewCard.tsx— Tabela providers × accounts × cooldown
API Routes
- Criar
api/resilience/route.ts— GET (estado completo) + PATCH (salvar perfis) - Criar
api/resilience/reset/route.ts— POST (resetar breakers + cooldowns)
Migração
- Avaliar se
PoliciesPanel.tsxpode 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