mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-05-06 02:07:00 +00:00
OmniRoute is an intelligent API gateway that unifies 20+ AI providers behind a single OpenAI-compatible endpoint. Features include intelligent routing with 6 strategies, multi-format translation (OpenAI/Claude/Gemini/Responses API), circuit breakers, semantic caching, combo fallback chains, real-time health monitoring, and a full dashboard with provider management, analytics, and CLI tool integration. Key highlights: - 20+ providers (Claude Code, Codex, Gemini CLI, GitHub Copilot, iFlow, Qwen, Kiro, etc.) - 6 routing strategies (Fill First, Round Robin, P2C, Random, Least Used, Cost Optimized) - Export/Import database backup with full archive support - Translator Playground with 4 modes (Playground, Chat Tester, Test Bench, Live Monitor) - 100% TypeScript across src/ and open-sse/ - Docker support with multi-stage builds - Comprehensive documentation and 9 dashboard screenshots
4.6 KiB
4.6 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.ts— SubstituirCOOLDOWN_MS.transientportransientInitial(5s) +transientMax(60s)constants.ts— AdicionarPROVIDER_PROFILES(oauth / apikey) com cooldowns diferenciadosconstants.ts— AdicionarDEFAULT_API_LIMITS(100 RPM, 200ms minTime)providerRegistry.ts— Criar helpergetProviderCategory(providerId)→"oauth"|"apikey"accountFallback.ts— Aceitarprovidercomo parâmetro emcheckFallbackErroraccountFallback.ts— Implementar backoff exponencial para 502/503/504 transientesaccountFallback.ts— Calcular cooldown baseado no perfil do provedoraccountFallback.ts— Adicionar helpergetProviderProfile(provider)
Callers (propagar provider)
auth.ts→markAccountUnavailable— PassarproviderparacheckFallbackErrorcombo.ts→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.ts— ImportargetCircuitBreakereCircuitBreakerOpenErrorcombo.ts—handleComboChat— Verificarbreaker.canExecute()antes de cada modelocombo.ts—handleRoundRobinCombo— Integrar breaker per-modelcombo.ts— Marcarsemaphore.markRateLimitedpara 502/503/504 (não só 429)combo.ts— 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.ts— Auto-enable paraapikeyproviders com limites elevadosrateLimitManager.ts— Criar limiter com defaults (100 RPM) quando não configuradoauth.ts— 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 4 cards (Provider Profiles → Rate Limiting → Circuit Breakers → Policies) - 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 — agora editável com RPM, Min Gap, Max Concurrent
API Routes
- Criar
api/resilience/route.ts— GET (estado completo + defaults mesclados) + PATCH (salvar perfis + defaults) - Criar
api/resilience/reset/route.ts— POST (resetar breakers + cooldowns)
Migração
PoliciesPanel.tsxmovido de Security para Resilience tab
Fase 5 — Settings Page Restructure (v0.9.0)
Tab Reorganization
- Security — Simplificado para Login/Password + IP Access Control
- Routing — Expandido para 6 estratégias globais com descrições
- Resilience — Reordenado: Provider Profiles → Rate Limiting (editável) → Circuit Breakers → Policies
- AI — Thinking Budget + System Prompt + Prompt Cache (movido do Advanced)
- Advanced — Simplificado para apenas Global Proxy
Backend Routing Strategies
auth.ts— Implementarrandom(Fisher-Yates shuffle)auth.ts— Implementarleast-used(sorted by lastUsedAt)auth.ts— Implementarcost-optimized(sorted by priority)auth.ts— Corrigirp2c(power-of-two-choices com health scoring)settings.ts— Expandir tipofallbackStrategypara 6 valores
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
- Verificar todas as 5 tabs reestruturadas