SMART ROUTER LLM GATEWAY
1. Descrição do Projeto
O Smart Router LLM Gateway é uma solução avançada de infraestrutura para IA Generativa que atua como um proxy inteligente entre aplicações e múltiplos provedores de LLM. Construído sobre o LiteLLM, o sistema intercepta requisições compatíveis com a API da OpenAI e utiliza um pipeline de decisão em 4 camadas para rotear a consulta ao modelo mais eficiente em termos de custo-performance.
O diferencial deste gateway reside na sua capacidade de classificar a complexidade da consulta em tempo real, aplicando técnicas de compressão de prompt (LLMLingua) e truncamento inteligente de contexto (Tiktoken) antes de despachar a chamada para o provedor final através do gateway corporativo.
2. Arquitetura do Sistema
A arquitetura é baseada em microserviços orquestrados via Docker, garantindo isolamento e escalabilidade dos componentes de cache, classificação local e proxy.
2.1. Visão Geral dos Componentes
graph TD
subgraph "Client Layer"
App[Aplicação Cliente]
end
subgraph "Smart Router Gateway (Docker)"
Proxy[LiteLLM Proxy :4000]
Router[SmartRouterV2 Callback]
subgraph "Optimization Engine"
Lingua[LLMLingua - Compression]
Tik[Tiktoken - Truncation]
end
subgraph "Local Intelligence"
Ollama[Ollama :11434 - Qwen2.5]
FAISS[FAISS Vector DB - Semantic]
end
subgraph "Persistence"
Redis[(Redis :6379)]
end
end
subgraph "External Providers"
Flow[LLM Gateway Corporativo]
Models[Mistral / Gemini / Claude]
end
App -->|OpenAI SDK| Proxy
Proxy <--> Router
Router <--> Redis
Router <--> FAISS
Router <--> Ollama
Router --> Lingua
Lingua --> Tik
Tik --> Flow
Flow --> Models
3. Pipeline de Roteamento (4 Camadas)
O sistema utiliza uma estratégia de "fail-fast" e "cache-first" para determinar o destino de cada prompt.
3.1. Fluxo de Decisão
flowchart TD
Start([Recebe Requisição]) --> L1{L1: Redis Cache}
L1 -- "Hit (Hash Match)" --> Return[Retorna Resposta Cacheada]
L1 -- "Miss" --> L2{L2: Semantic Router}
L2 -- "Score > 0.75" --> SetTier[Define Tier: Simple/Std/Complex]
L2 -- "Score < 0.75" --> L3{L3: LLM Router}
L3 -- "Ollama Classification" --> SetTier
L3 -- "Fail/Timeout" --> L4{L4: Regex & Heuristics}
L4 -- "Pattern Match" --> SetTier
L4 -- "Default" --> Default[Tier: Standard]
SetTier --> Optimize[Otimização de Tokens]
Optimize --> Dispatch[Executa Chamada LiteLLM]
Dispatch --> CacheResult[Salva no Redis]
CacheResult --> End([Resposta ao Cliente])
3.2. Detalhamento das Camadas
- Camada 1 - Redis Cache: Normaliza o prompt (lowercase, strip) e gera um hash SHA-256. Verifica se existe uma decisão de rota (
route:{hash}) válida por 24h ou uma resposta completa (resp:{hash}) válida por 1h. - Camada 2 - Semantic Router: Utiliza
all-MiniLM-L6-v2para gerar embeddings e compara via similaridade de cosseno (FAISS) contra 30 prompts de referência (10 por tier) em PT-BR e EN. - Camada 3 - LLM Router: Consulta um modelo local
qwen2.5:1.5bvia Ollama para análise lógica da complexidade, esperando um JSON comtiereconfidence. - Camada 4 - Regex Fallback: Analisa palavras-chave técnicas (ex: "deadlock", "architecture" para complexo; "crud", "getter" para simples) e heurística de contagem de palavras (<15 simples, >80 complexo).
4. Modelos e Fallbacks
O mapeamento de tiers garante que tarefas simples não consumam créditos de modelos de alta performance.
| Tier | Modelo Principal | Fallback 1 | Fallback 2 |
|---|---|---|---|
| Simple | mistral-small-2503 |
claude-4-5-haiku |
gemini-2.5-flash |
| Standard | gemini-2.5-flash |
gemini-3.1-pro |
claude-4-5-haiku |
| Complex | gemini-3.1-pro |
gemini-2.5-flash |
claude-4-5-haiku |
5. Otimização de Tokens
Para reduzir custos e latência, o gateway aplica duas técnicas antes do roteamento final:
- LLMLingua-2: Prompts de sistema com mais de 500 caracteres são comprimidos usando o modelo
microsoft/llmlingua-2-bert-base-multilingual-cased-meetingbankcom uma taxa de 0.5. - Tiktoken Truncation: Garante que o contexto enviado não ultrapasse 4.000 tokens, mantendo as mensagens mais recentes e preservando a mensagem de sistema original.
6. Configuração e Instalação
6.0. Instalação via pip (alternativa ao Docker)
pip install smart-router-llm
Redis e Ollama continuam sendo responsabilidade sua instalar e rodar — o pacote só se conecta a eles, não os empacota nem gerencia.
# 1. Configure as variáveis de ambiente (mesmas da seção 6.2)
export LLM_GATEWAY_API_KEY=seu_token_aqui
export LLM_GATEWAY_BASE_URL=sua_url_aqui
# 2. Verifica se Redis e Ollama estão acessíveis
smart-router check
# 3. Baixa os modelos Ollama necessários e cria o modelo classificador
smart-router pull-models
# 4. Valida conectividade com o gateway corporativo
smart-router validate
# 5. Sobe o proxy (porta 4000)
smart-router serve
6.1. Pré-requisitos
- Docker & Docker Compose
- Python 3.12+ (para execução local)
- Chave de API do gateway LLM corporativo
6.2. Variáveis de Ambiente (.env)
Crie um arquivo .env na raiz do projeto:
LLM_GATEWAY_API_KEY=seu_token_aqui
LLM_GATEWAY_BASE_URL=sua_url_aqui
REDIS_HOST=redis
REDIS_PORT=6379
OLLAMA_HOST=http://ollama:11434
OLLAMA_MODEL=qwen2.5:1.5b
LITELLM_MASTER_KEY=sk-litellm-local
6.3. Comandos do Makefile
O projeto utiliza um Makefile para simplificar a gestão:
make .venv: Cria o ambiente virtual com Python 3.12.make install: Instala as dependências no ambiente virtual.make up: Sobe toda a infraestrutura (Redis, Ollama, LiteLLM).make down: Encerra todos os serviços.make logs: Acompanha os logs do proxy em tempo real.make validate: Valida a conectividade com os modelos do gateway.make clean: Limpa caches, logs e arquivos temporários.
7. Estrutura do Projeto
.
├── app/
│ ├── cache/ # Singleton Redis e lógica de hashing
│ ├── optimization/ # Implementação LLMLingua e Tiktoken
│ ├── router/ # Lógica das 4 camadas de roteamento
│ ├── utils/ # Sanitização e extração de prompts
│ └── main.py # Ponto de entrada LiteLLM Proxy
├── ollama/
│ └── Modelfile # Configuração do modelo de classificação
├── scripts/ # Scripts de inicialização e validação
├── config.yaml # Definição de modelos e fallbacks LiteLLM
├── docker-compose.yml # Orquestração de serviços
├── Makefile # Atalhos de automação
└── venv/ # Ambiente virtual
8. Utilização da API
O gateway expõe um endpoint compatível com OpenAI na porta 4000.
Exemplo de requisição via cURL:
curl http://localhost:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-litellm-local" \
-d '{
"model": "smart-router",
"messages": [
{"role": "system", "content": "Você é um arquiteto de software."},
{"role": "user", "content": "Explique a diferença entre consistência eventual e forte em sistemas distribuídos."}
]
}'
Nota: Ao enviar para o modelo "smart-router", o sistema automaticamente reescreverá o campo "model" para o tier adequado (ex: gemini-3.1-pro) antes de processar.
9. Monitoramento e Estatísticas
O sistema mantém métricas de performance no Redis sob a hash router:stats. É possível monitorar:
total_requests: Total de chamadas processadas.cache_hits: Quantidade de respostas servidas pelo cache.routing_decisions: Distribuição de roteamento por tier (simple/standard/complex).
Documento elaborado em 06 de agosto de 2026. As informações contidas são de responsabilidade do solicitante.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smart_router_llm-1.0.3.tar.gz.
File metadata
- Download URL: smart_router_llm-1.0.3.tar.gz
- Upload date:
- Size: 359.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e68bc3b0258a4c3c756f18c9cc76936a9073d85e6cd33ef648f3e25d95a41c0b
|
|
| MD5 |
721ab048b65016d65ec3de2f45af2883
|
|
| BLAKE2b-256 |
f31d8369723d204b5df8f2c77845acf0a190a3aea8adcbdddf171458dd5ca206
|
Provenance
The following attestation bundles were made for smart_router_llm-1.0.3.tar.gz:
Publisher:
publish-pypi.yml on victorleandroof/smart-router-llm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
smart_router_llm-1.0.3.tar.gz -
Subject digest:
e68bc3b0258a4c3c756f18c9cc76936a9073d85e6cd33ef648f3e25d95a41c0b - Sigstore transparency entry: 2666459049
- Sigstore integration time:
-
Permalink:
victorleandroof/smart-router-llm@12492a722c6dee285edded390850710b84af423c -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/victorleandroof
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@12492a722c6dee285edded390850710b84af423c -
Trigger Event:
push
-
Statement type:
File details
Details for the file smart_router_llm-1.0.3-py3-none-any.whl.
File metadata
- Download URL: smart_router_llm-1.0.3-py3-none-any.whl
- Upload date:
- Size: 30.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a13e4818469e70e9ad177400946ac94ed1218b90d84108681f92cb09a4b8bf44
|
|
| MD5 |
c230b99bf180b1eaa54442f64782a43d
|
|
| BLAKE2b-256 |
173671bc152ca5c6a52bd34340b5ca6431f9413145ff6ebfd0decbc368712afb
|
Provenance
The following attestation bundles were made for smart_router_llm-1.0.3-py3-none-any.whl:
Publisher:
publish-pypi.yml on victorleandroof/smart-router-llm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
smart_router_llm-1.0.3-py3-none-any.whl -
Subject digest:
a13e4818469e70e9ad177400946ac94ed1218b90d84108681f92cb09a4b8bf44 - Sigstore transparency entry: 2666459115
- Sigstore integration time:
-
Permalink:
victorleandroof/smart-router-llm@12492a722c6dee285edded390850710b84af423c -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/victorleandroof
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@12492a722c6dee285edded390850710b84af423c -
Trigger Event:
push
-
Statement type: