feat: integração Manus→LiteLLM gateway + slot LLMFit + soberania de dados
- Conecta Manus ao LiteLLM via AI_INTEGRATIONS_OPENAI_BASE_URL (era hardcoded para OpenAI) - Adiciona OLLAMA_BASE_URL ao serviço litellm no docker-compose.prod.yml (fix crítico: sem isso o fallback para Ollama não funcionava) - Adiciona DATABASE_URL ao litellm para logging/auditoria de chamadas LLM - Open WebUI agora também aponta para LiteLLM (acesso a todos os modelos na interface) - litellm-config.yaml: slot comentado para LLMFit (TIER 1), Ollama como padrão soberano (TIER 2), externos como opt-in (TIER 3) - Adiciona modelo nomic-embed-text para embeddings locais via Ollama - .env.example: documenta AI_INTEGRATIONS_*, LLMFIT_BASE_URL, providers externos opcionais - arcadia-default agora aponta para llama3.3 (Ollama) por padrão — soberania total sem configuração adicional Estratégia de soberania: Dados NUNCA saem sem configuração explícita de API key externa. LLMFit turbocharge: quando ativado, modelos fine-tuned têm prioridade sobre Ollama. https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
This commit is contained in:
parent
0c006da8a5
commit
5816c14d00
23
.env.example
23
.env.example
|
|
@ -33,14 +33,33 @@ PYTHON_SERVICE_URL=http://localhost:8001
|
|||
# Deixe vazio se usar apenas Ollama (soberania total)
|
||||
OPENAI_API_KEY=
|
||||
|
||||
# ── IA — LiteLLM (proxy unificado) ───────────────────────────────────────────
|
||||
# ── IA — LiteLLM (gateway unificado — ÚNICA porta de entrada para LLMs) ──────
|
||||
# Em Docker: http://litellm:4000 | Em dev local: http://localhost:4000
|
||||
LITELLM_BASE_URL=http://localhost:4000
|
||||
LITELLM_API_KEY=arcadia-internal
|
||||
|
||||
# ── IA — Ollama (LLMs locais) ─────────────────────────────────────────────────
|
||||
# ── IA — Manus Agent (aponta para LiteLLM como gateway) ──────────────────────
|
||||
# Em Docker: AI_INTEGRATIONS_OPENAI_BASE_URL=http://litellm:4000/v1
|
||||
# Em dev local: http://localhost:4000/v1
|
||||
AI_INTEGRATIONS_OPENAI_BASE_URL=http://localhost:4000/v1
|
||||
AI_INTEGRATIONS_OPENAI_API_KEY=arcadia-internal
|
||||
|
||||
# ── IA — Ollama (LLMs locais — soberania total) ───────────────────────────────
|
||||
# Se Ollama está no host (fora do Docker): OLLAMA_BASE_URL=http://localhost:11434
|
||||
# Se Ollama está em outro servidor: OLLAMA_BASE_URL=http://IP_DO_SERVIDOR:11434
|
||||
OLLAMA_BASE_URL=http://localhost:11434
|
||||
|
||||
# ── IA — LLMFit (modelos fine-tuned locais — habilitar quando disponível) ─────
|
||||
# LLMFit turbocharge: modelos treinados com dados do seu negócio
|
||||
# Deixe vazio para desabilitar (LiteLLM cai para Ollama automaticamente)
|
||||
LLMFIT_BASE_URL=
|
||||
|
||||
# ── IA — Providers externos (opt-in — soberania: dados não saem sem configurar)
|
||||
# Deixe vazio para operação 100% soberana (apenas Ollama + LLMFit)
|
||||
OPENAI_API_KEY=
|
||||
ANTHROPIC_API_KEY=
|
||||
GROQ_API_KEY=
|
||||
|
||||
# ── Open WebUI ────────────────────────────────────────────────────────────────
|
||||
WEBUI_SECRET_KEY=troque-por-string-aleatoria-segura
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,11 @@ services:
|
|||
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
||||
LITELLM_BASE_URL: http://litellm:4000
|
||||
LITELLM_API_KEY: ${LITELLM_API_KEY}
|
||||
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://ollama:11434}
|
||||
# ── Manus Agent — aponta para LiteLLM como gateway unificado ──────────
|
||||
# LiteLLM roteia para Ollama (local), LLMFit (fine-tuned) ou externo
|
||||
AI_INTEGRATIONS_OPENAI_BASE_URL: http://litellm:4000/v1
|
||||
AI_INTEGRATIONS_OPENAI_API_KEY: ${LITELLM_API_KEY}
|
||||
ports:
|
||||
- "5000:5000"
|
||||
depends_on:
|
||||
|
|
@ -154,7 +159,8 @@ services:
|
|||
networks:
|
||||
- arcadia-internal
|
||||
|
||||
# ── LiteLLM (proxy de LLM) ───────────────────────────────────────────────────
|
||||
# ── LiteLLM (gateway unificado de LLM — soberania dos dados) ─────────────────
|
||||
# Roteia: LLMFit (fine-tuned) → Ollama (local) → externo (opt-in)
|
||||
litellm:
|
||||
image: ghcr.io/berriai/litellm:main-latest
|
||||
restart: always
|
||||
|
|
@ -164,10 +170,25 @@ services:
|
|||
environment:
|
||||
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
||||
LITELLM_MASTER_KEY: ${LITELLM_API_KEY}
|
||||
DATABASE_URL: postgresql://${PGUSER:-arcadia}:${PGPASSWORD}@db:5432/${PGDATABASE:-arcadia}
|
||||
# Ollama: se instalado no host use http://host-gateway:11434
|
||||
# Se usar container Docker, mantém http://ollama:11434
|
||||
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://ollama:11434}
|
||||
# LLMFit: URL do serviço de modelos fine-tuned
|
||||
LLMFIT_BASE_URL: ${LLMFIT_BASE_URL:-}
|
||||
# Providers externos opcionais (soberania: só habilitados se configurados)
|
||||
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
|
||||
GROQ_API_KEY: ${GROQ_API_KEY:-}
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- arcadia-internal
|
||||
|
||||
# ── Ollama (LLMs locais — ativar se o servidor tiver RAM suficiente) ──────────
|
||||
# ── Ollama (LLMs locais — soberania total) ────────────────────────────────────
|
||||
# OPÇÃO A (padrão): Ollama como container Docker
|
||||
# OPÇÃO B: Ollama no host → comente este serviço e defina
|
||||
# OLLAMA_BASE_URL=http://host-gateway:11434 nas env vars
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
restart: always
|
||||
|
|
@ -175,19 +196,23 @@ services:
|
|||
- ollama_models:/root/.ollama
|
||||
networks:
|
||||
- arcadia-internal
|
||||
# Remova 'profiles: [ai]' para ativar por padrão no deploy
|
||||
profiles: [ai]
|
||||
|
||||
# ── Open WebUI ───────────────────────────────────────────────────────────────
|
||||
# ── Open WebUI (interface para Ollama + LLMFit) ───────────────────────────────
|
||||
open-webui:
|
||||
image: ghcr.io/open-webui/open-webui:main
|
||||
restart: always
|
||||
environment:
|
||||
OLLAMA_BASE_URL: http://ollama:11434
|
||||
# Pode apontar para LiteLLM para ter acesso a todos os modelos via WebUI
|
||||
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://ollama:11434}
|
||||
OPENAI_API_BASE_URL: http://litellm:4000/v1
|
||||
OPENAI_API_KEY: ${LITELLM_API_KEY}
|
||||
WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY}
|
||||
volumes:
|
||||
- open_webui_data:/app/backend/data
|
||||
depends_on:
|
||||
- ollama
|
||||
- litellm
|
||||
networks:
|
||||
- arcadia-internal
|
||||
- arcadia-public
|
||||
|
|
|
|||
|
|
@ -1,20 +1,34 @@
|
|||
# LiteLLM — Proxy unificado de LLMs para o Arcádia Suite
|
||||
# LiteLLM — Gateway unificado de LLMs para o Arcádia Suite
|
||||
# Documentação: https://docs.litellm.ai/docs/proxy/configs
|
||||
#
|
||||
# ESTRATÉGIA DE SOBERANIA DOS DADOS:
|
||||
# ┌─────────────────────────────────────────────────────────────────────────┐
|
||||
# │ TIER 1 (soberania total): LLMFit — modelos fine-tuned locais │
|
||||
# │ TIER 2 (soberania total): Ollama — modelos open source no servidor │
|
||||
# │ TIER 3 (opt-in): Providers externos — só com configuração explícita │
|
||||
# └─────────────────────────────────────────────────────────────────────────┘
|
||||
# O Manus, Autonomous Agents e todos os serviços chamam APENAS este proxy.
|
||||
# Nunca chamam APIs externas diretamente.
|
||||
|
||||
model_list:
|
||||
|
||||
# ── OpenAI (quando disponível) ───────────────────────────────────────────────
|
||||
- model_name: gpt-4o
|
||||
litellm_params:
|
||||
model: openai/gpt-4o
|
||||
api_key: os.environ/OPENAI_API_KEY
|
||||
# ── TIER 1: LLMFit (modelos fine-tuned locais — máxima soberania) ────────────
|
||||
# Descomente quando o LLMFit estiver rodando no servidor
|
||||
# O LLMFit expõe API compatível com OpenAI — basta apontar a URL
|
||||
#
|
||||
# - model_name: arcadia-finetuned
|
||||
# litellm_params:
|
||||
# model: openai/arcadia-v1 # nome do modelo no LLMFit
|
||||
# api_base: os.environ/LLMFIT_BASE_URL
|
||||
# api_key: llmfit-internal
|
||||
#
|
||||
# - model_name: arcadia-embed
|
||||
# litellm_params:
|
||||
# model: openai/arcadia-embed-v1 # modelo de embeddings fine-tuned
|
||||
# api_base: os.environ/LLMFIT_BASE_URL
|
||||
# api_key: llmfit-internal
|
||||
|
||||
- model_name: gpt-4o-mini
|
||||
litellm_params:
|
||||
model: openai/gpt-4o-mini
|
||||
api_key: os.environ/OPENAI_API_KEY
|
||||
|
||||
# ── Ollama (LLMs locais — soberania) ─────────────────────────────────────────
|
||||
# ── TIER 2: Ollama (LLMs locais — soberania total) ───────────────────────────
|
||||
- model_name: llama3.3
|
||||
litellm_params:
|
||||
model: ollama/llama3.3
|
||||
|
|
@ -30,26 +44,61 @@ model_list:
|
|||
model: ollama/deepseek-r1:7b
|
||||
api_base: os.environ/OLLAMA_BASE_URL
|
||||
|
||||
# ── Modelo padrão: tenta OpenAI, fallback para Ollama ───────────────────────
|
||||
- model_name: arcadia-default
|
||||
- model_name: nomic-embed-text
|
||||
litellm_params:
|
||||
model: ollama/nomic-embed-text
|
||||
api_base: os.environ/OLLAMA_BASE_URL
|
||||
|
||||
# ── TIER 3: OpenAI (opt-in — só ativo se OPENAI_API_KEY configurado) ─────────
|
||||
- model_name: gpt-4o
|
||||
litellm_params:
|
||||
model: openai/gpt-4o
|
||||
api_key: os.environ/OPENAI_API_KEY
|
||||
|
||||
- model_name: gpt-4o-mini
|
||||
litellm_params:
|
||||
model: openai/gpt-4o-mini
|
||||
api_key: os.environ/OPENAI_API_KEY
|
||||
|
||||
# ── TIER 3: Anthropic (opt-in — descomente para habilitar) ───────────────────
|
||||
# - model_name: claude-sonnet
|
||||
# litellm_params:
|
||||
# model: anthropic/claude-sonnet-4-6
|
||||
# api_key: os.environ/ANTHROPIC_API_KEY
|
||||
|
||||
# ── TIER 3: Groq (opt-in — inferência rápida sem dados persistidos) ──────────
|
||||
# - model_name: groq-llama
|
||||
# litellm_params:
|
||||
# model: groq/llama-3.3-70b-versatile
|
||||
# api_key: os.environ/GROQ_API_KEY
|
||||
|
||||
# ── Modelo padrão do Arcádia (Manus usa este) ─────────────────────────────────
|
||||
# Prioridade: LLMFit → OpenAI (se configurado) → Ollama (sempre disponível)
|
||||
# Para soberania total: remova o fallback para gpt-4o-mini
|
||||
- model_name: arcadia-default
|
||||
litellm_params:
|
||||
model: ollama/llama3.3
|
||||
api_base: os.environ/OLLAMA_BASE_URL
|
||||
model_info:
|
||||
fallbacks: ["llama3.3"]
|
||||
# fallbacks: ["gpt-4o-mini"] # descomente para habilitar fallback externo
|
||||
|
||||
router_settings:
|
||||
routing_strategy: least-busy
|
||||
fallbacks:
|
||||
- {"gpt-4o": ["llama3.3"]}
|
||||
- {"gpt-4o-mini": ["qwen2.5-coder"]}
|
||||
- {"gpt-4o-mini": ["llama3.3"]}
|
||||
- {"arcadia-default": ["llama3.3"]}
|
||||
|
||||
litellm_settings:
|
||||
drop_params: true
|
||||
request_timeout: 120
|
||||
set_verbose: false
|
||||
# Loga todas as chamadas no banco — essencial para auditoria e soberania
|
||||
success_callback: ["langfuse"]
|
||||
failure_callback: ["langfuse"]
|
||||
|
||||
general_settings:
|
||||
master_key: os.environ/LITELLM_MASTER_KEY
|
||||
database_url: os.environ/DATABASE_URL
|
||||
# Habilita interface de gestão do LiteLLM (opcional)
|
||||
# ui_access_mode: "all"
|
||||
|
|
|
|||
Loading…
Reference in New Issue