Skip to content

denes-rafael/OneAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OneAPI

Gateway local de LLMs com roteamento automático entre provedores. Unifica Claude (Anthropic), Gemini (Google) e modelos locais via Ollama por trás de uma única API OpenAI-compatível, e usa um router em FastAPI para escolher o melhor modelo para cada prompt.

O que faz

Você manda uma requisição OpenAI-compatível para um único endpoint (http://localhost:4000) e o stack:

  1. Recebe a chamada no LiteLLM, que normaliza a API e expõe vários modelos lógicos (claude, gemini, gemini-pro, local, auto).
  2. Quando o modelo é auto (ou um dos aliases do Claude CLI), encaminha para o auto-router, que classifica o prompt heuristicamente e escolhe o modelo concreto.
  3. O auto-router consulta um cache em Redis: prompts já vistos vão direto para o modelo aprendido; prompts novos passam pela classificação.
  4. A resposta volta pelo LiteLLM ao cliente, e o par prompt → modelo é salvo no Redis para a próxima vez.

Em paralelo, o painel One-API (:3000) gerencia chaves de API e usuários, persistindo em PostgreSQL.

Arquitetura

Serviço Porta Papel
litellm 4000 Gateway OpenAI-compatível, multiplexa providers (litellm_config.yaml)
auto-router 5000 FastAPI que classifica prompt e escolhe modelo (auto-router/)
redis 6379 Cache prompt → modelo aprendido pelo router
ollama 11434 Runtime de modelos locais (llama3), volume ./ollama
one-api 3000 Painel admin (gerência de chaves/usuários)
one-api-db PostgreSQL 16 que armazena o estado do One-API

Fluxo típico:

cliente → litellm:4000 → auto-router:5000 → (cache Redis ou classificação)
                                          ↓
                              litellm:4000 (com modelo concreto)
                                          ↓
                          Anthropic / Gemini / Ollama (local)

Fluxo de roteamento

Regras de classificação implementadas em auto-router/router.py:

  • Código / infra (def, class, import, select, ```, dockerfile, kubectl, terraform, etc.) → modelo local (Ollama llama3).
  • Prompt longo (> 1000 chars) ou médio (> 300) com palavras de raciocínio (explique, analise, compare, por que, descreva, arquiteture, etc.) → claude.
  • Médio (> 500 chars) ou qualquer outro com palavras de raciocínio → gemini-pro.
  • Defaultgemini (flash, rápido e barato).

Se a chave route:hash(prompt)%10000 já existir no Redis, o router devolve imediatamente o modelo aprendido sem reclassificar. O auto-router/learner.py grava o último modelo usado para cada prompt após cada resposta.

Os aliases claude-sonnet-4-6, claude-opus-4-6 e claude-haiku-4-5-20251001 (definidos em litellm_config.yaml) também passam pelo auto-router — útil para usar o stack como backend transparente do Claude CLI.

Como executar

Pré-requisitos: Docker e Docker Compose.

  1. Crie um arquivo .env na raiz com:

    ANTHROPIC_API_KEY=sk-ant-...
    GEMINI_API_KEY=...
    POSTGRES_PASSWORD=algumaSenhaForte
    SESSION_SECRET=algumSegredoLongoEAleatorio
  2. Suba todo o stack:

    docker compose up -d
  3. (Primeiro uso do Ollama) baixe o modelo local:

    docker exec -it ollama ollama pull llama3
  4. Teste o gateway:

    curl http://localhost:4000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{"model":"auto","messages":[{"role":"user","content":"olá!"}]}'

Endpoints

  • LiteLLM (gateway): http://localhost:4000/v1/chat/completions
  • auto-router (direto): http://localhost:5000/v1/chat/completions
  • Painel One-API: http://localhost:3000
  • Ollama: http://localhost:11434
  • Redis: localhost:6379

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors