Skip to content

Commit 3bb092c

Browse files
committed
feat(config): añadir soporte para Ollama en la configuración y documentación
1 parent 47ddce5 commit 3bb092c

2 files changed

Lines changed: 37 additions & 26 deletions

File tree

.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ REDIS_URL=redis://localhost:6379/0
1414
# Claves API de proveedores
1515
GROQ_API_KEY=tu_clave_groq_aqui
1616
OPENROUTER_API_KEY=tu_clave_openrouter_aqui
17+
# OLLAMA_API_KEY= # Opcional, Ollama local no requiere autenticación
1718

1819
# Configuración de proveedores
1920
GROQ_BASE_URL=https://api.groq.com/openai/v1
2021
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
22+
OLLAMA_BASE_URL=http://localhost:11434
2123

2224
# Timeouts (en segundos)
2325
PROVIDER_TIMEOUT=30
@@ -39,6 +41,7 @@ MAX_CONCURRENT_STREAMS=10
3941
# Útil para ajustar planes o límites específicos del proveedor
4042
# GROQ_RATE_LIMIT=30
4143
# OPENROUTER_RATE_LIMIT=20
44+
# OLLAMA_RATE_LIMIT=100
4245

4346
# Autenticación
4447
API_KEY=tu_api_key_para_clientes

README.md

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
## Características
1313

14-
**Orquestación multi-proveedor** con fallback automático (Groq → OpenRouter)
14+
**Orquestación multi-proveedor** con fallback automático (Groq → OpenRouter → Ollama)
15+
**Soporte para Ollama** (modelos locales) además de proveedores cloud
1516
**Streaming SSE** (Server-Sent Events) para respuestas en tiempo real
1617
**Arquitectura por capas** (Controllers → Orchestrator → Router → Adapters)
1718
**Rate limiting** y control de concurrencia con Redis
@@ -33,37 +34,37 @@
3334
3435
┌─────────────────────▼───────────────────────────────────────┐
3536
│ Controllers │
36-
│ • Validación de entrada (Pydantic) │
37-
│ • Autorización (API Key) │
38-
│ • Manejo de SSE │
37+
│ • Validación de entrada (Pydantic)
38+
│ • Autorización (API Key)
39+
│ • Manejo de SSE
3940
└─────────────────────┬───────────────────────────────────────┘
4041
4142
┌─────────────────────▼───────────────────────────────────────┐
4243
│ Orchestrator │
43-
│ • Timeout global de operación │
44-
│ • Coordinación de streaming │
45-
│ • Manejo de cancelación │
44+
│ • Timeout global de operación
45+
│ • Coordinación de streaming
46+
│ • Manejo de cancelación
4647
└─────────────────────┬───────────────────────────────────────┘
4748
4849
┌─────────────────────▼───────────────────────────────────────┐
4950
│ Router │
50-
│ • Selección de proveedor │
51-
│ • Fallback automático │
52-
│ • Blacklist + backoff exponencial │
53-
│ • Estado en Redis │
51+
│ • Selección de proveedor
52+
│ • Fallback automático
53+
│ • Blacklist + backoff exponencial
54+
│ • Estado en Redis
5455
└─────────────────────┬───────────────────────────────────────┘
5556
56-
┌─────────────┴─────────────┐
57-
│ │
58-
┌───────▼────────┐ ┌────────▼───────┐
59-
│ GroqAdapter │ │ OpenRouter │
60-
│ │ │ Adapter │
61-
│ • Traducción │ │ • Traducción │
62-
│ de request │ │ de request │
63-
│ • Stream SSE │ │ • Stream SSE │
64-
└───────┬────────┘ └────────┬───────┘
65-
│ │
66-
└─────────────┬─────────────┘
57+
┌─────────────┴─────────────┬─────────────────
58+
│ │
59+
┌───────▼────────┐ ┌────────▼───────┐ ┌────▼────────┐
60+
│ GroqAdapter │ │ OpenRouter │ │ Ollama │
61+
│ │ │ Adapter │ │ Adapter │
62+
│ • Traducción │ │ • Traducción │ │ • Modelos │
63+
│ de request │ │ de request │ │ locales │
64+
│ • Stream SSE │ │ • Stream SSE │ │ • Stream │
65+
└───────┬────────┘ └────────┬───────┘ └─────┬───────┘
66+
│ │
67+
└─────────────┬─────────────┴──────────────────
6768
6869
┌───────▼────────┐
6970
│ HTTPClient │
@@ -72,7 +73,7 @@
7273
7374
┌──────────────────────────────────────────────────┐
7475
│ Infraestructura │
75-
│ • Redis: blacklist, rate limits, locks │
76+
│ • Redis: blacklist, rate limits, locks
7677
│ • Prometheus: métricas │
7778
│ • Logs: JSON estructurado │
7879
└──────────────────────────────────────────────────┘
@@ -88,6 +89,7 @@
8889
- **Docker** y **Docker Compose**
8990
- **Redis** (incluido en docker-compose)
9091
- Claves API de **Groq** y/o **OpenRouter**
92+
- **Ollama** instalado localmente (opcional, para usar modelos locales)
9193

9294
### 1. Clonar repositorio
9395

@@ -107,6 +109,7 @@ Edita [.env](.env) y añade tus claves API:
107109
```env
108110
GROQ_API_KEY=tu_clave_groq
109111
OPENROUTER_API_KEY=tu_clave_openrouter
112+
OLLAMA_API_KEY=tu_clave_ollama
110113
API_KEY=tu_clave_para_clientes
111114
```
112115

@@ -325,6 +328,8 @@ Todas las configuraciones están en [app/config.py](app/config.py) y se pueden s
325328
|----------------------------------|--------------------------------------|------------------------------|
326329
| `GROQ_API_KEY` | Clave API de Groq | - |
327330
| `OPENROUTER_API_KEY` | Clave API de OpenRouter | - |
331+
| `OLLAMA_API_KEY` | Clave API de Ollama (opcional) | - |
332+
| `OLLAMA_BASE_URL` | URL de Ollama | `http://localhost:11434` |
328333
| `API_KEY` | Clave para autenticar clientes | - |
329334
| `REDIS_URL` | URL de conexión Redis | `redis://localhost:6379/0` |
330335
| `PROVIDER_TIMEOUT` | Timeout por proveedor (s) | `30.0` |
@@ -333,7 +338,9 @@ Todas las configuraciones están en [app/config.py](app/config.py) y se pueden s
333338
| `BACKOFF_BASE_SECONDS` | Backoff base exponencial | `5` |
334339
| `BACKOFF_MAX_SECONDS` | Backoff máximo | `300` |
335340
| `RATE_LIMIT_REQUESTS_PER_MINUTE` | Rate limit global por minuto | `60` |
336-
| `GROQ_RATE_LIMIT` | Rate limit específico Groq (req/min) | Usa límite global |
341+
| `GROQ_RATE_LIMIT` | Rate limit específico Groq (req/min) | `30` |
342+
| `OPENROUTER_RATE_LIMIT` | Rate limit OpenRouter (req/min) | `20` |
343+
| `OLLAMA_RATE_LIMIT` | Rate limit Ollama (req/min) | `100` |
337344
| `OPENROUTER_RATE_LIMIT` | Rate limit OpenRouter (req/min) | Usa límite global |
338345
| `MAX_CONCURRENT_STREAMS` | Streams concurrentes máx. | `10` |
339346

@@ -442,7 +449,7 @@ ModelRouter/
442449
### Completado
443450

444451
- [x] Scaffold proyecto + Docker
445-
- [x] Adapters Groq y OpenRouter
452+
- [x] Adapters Groq, OpenRouter y Ollama
446453
- [x] Router con fallback
447454
- [x] Orchestrator
448455
- [x] Endpoints /chat y /stream
@@ -453,9 +460,10 @@ ModelRouter/
453460

454461
### Próximos pasos
455462

463+
- [ ] Permitir especificar de forma opcional un proveedor en la request
464+
- [ ] Selección Explícita de Modelo por Proveedor
456465
- [ ] Persistencia de historiales (PostgreSQL)
457466
- [ ] Soporte para más proveedores (Anthropic, OpenAI)
458-
- [ ] WebSockets como alternativa a SSE
459467
- [ ] Cacheo de respuestas frecuentes
460468
- [ ] Dashboard Grafana pre-configurado
461469

0 commit comments

Comments
 (0)