OmniRoute/docs/TASKS.md
diegosouzapw 71d14209a4 feat: OmniRoute v1.0.0 — Intelligent AI Gateway & Universal LLM Proxy
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
2026-02-18 00:02:15 -03:00

4.6 KiB
Raw Blame History

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 — Substituir COOLDOWN_MS.transient por transientInitial (5s) + transientMax (60s)
  • constants.ts — Adicionar PROVIDER_PROFILES (oauth / apikey) com cooldowns diferenciados
  • constants.ts — Adicionar DEFAULT_API_LIMITS (100 RPM, 200ms minTime)
  • providerRegistry.ts — Criar helper getProviderCategory(providerId)"oauth" | "apikey"
  • accountFallback.ts — Aceitar provider como parâmetro em checkFallbackError
  • accountFallback.ts — Implementar backoff exponencial para 502/503/504 transientes
  • accountFallback.ts — Calcular cooldown baseado no perfil do provedor
  • accountFallback.ts — Adicionar helper getProviderProfile(provider)

Callers (propagar provider)

  • auth.tsmarkAccountUnavailable — Passar provider para checkFallbackError
  • combo.tshandleComboChat / handleRoundRobinCombo — Passar provider nos 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, helper getProviderCategory

Fase 2 — Circuit Breaker no Combo Pipeline

Backend

  • combo.ts — Importar getCircuitBreaker e CircuitBreakerOpenError
  • combo.tshandleComboChat — Verificar breaker.canExecute() antes de cada modelo
  • combo.tshandleRoundRobinCombo — Integrar breaker per-model
  • combo.ts — Marcar semaphore.markRateLimited para 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 para apikey providers com limites elevados
  • rateLimitManager.ts — Criar limiter com defaults (100 RPM) quando não configurado
  • auth.ts — Adicionar mutex na markAccountUnavailable para 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.tsx movido 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 — Implementar random (Fisher-Yates shuffle)
  • auth.ts — Implementar least-used (sorted by lastUsedAt)
  • auth.ts — Implementar cost-optimized (sorted by priority)
  • auth.ts — Corrigir p2c (power-of-two-choices com health scoring)
  • settings.ts — Expandir tipo fallbackStrategy para 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