1111
1212## Características
1313
14- ** Orquestación multi-proveedor** con fallback automático (Groq → OpenRouter → Ollama)
15- ** Soporte para Ollama** (modelos locales) además de proveedores cloud
16- ** Streaming SSE** (Server-Sent Events) para respuestas en tiempo real
17- ** Arquitectura por capas** (Controllers → Orchestrator → Router → Adapters)
18- ** Rate limiting** y control de concurrencia con Redis
19- ** Blacklist temporal** con backoff exponencial ante fallos
20- ** Métricas Prometheus** + logs estructurados JSON
21- ** Tests unitarios** con >80% cobertura
22- ** Contenerización Docker** + docker-compose
23- ** CI/CD con GitHub Actions**
14+ ** Orquestación multi-proveedor** con fallback automático (Groq → OpenRouter → Ollama)
15+ ** Soporte para Ollama** (modelos locales) además de proveedores cloud
16+ ** Streaming SSE** (Server-Sent Events) para respuestas en tiempo real
17+ ** Arquitectura por capas** (Controllers → Orchestrator → Router → Adapters)
18+ ** Rate limiting** y control de concurrencia con Redis
19+ ** Blacklist temporal** con backoff exponencial ante fallos
20+ ** Métricas Prometheus** + logs estructurados JSON
21+ ** Tests unitarios** con >80% cobertura
22+ ** Contenerización Docker** + docker-compose
23+ ** CI/CD con GitHub Actions**
2424
2525---
2626
@@ -145,7 +145,7 @@ Authorization: Bearer tu_api_key
145145
146146### Endpoint ` /chat ` (no streaming)
147147
148- ** Request:**
148+ ** Request básico (fallback automático) :**
149149
150150``` bash
151151curl -X POST http://localhost:8000/chat \
@@ -160,6 +160,32 @@ curl -X POST http://localhost:8000/chat \
160160 }'
161161```
162162
163+ ** Request especificando proveedor:**
164+
165+ Puedes forzar el uso de un proveedor concreto (por ejemplo, ` ollama ` , ` groq ` , ` openrouter ` ) añadiendo el campo opcional ` provider ` :
166+
167+ ``` bash
168+ curl -X POST http://localhost:8000/chat \
169+ -H " Authorization: Bearer tu_api_key" \
170+ -H " Content-Type: application/json" \
171+ -d ' {
172+ "messages": [
173+ {"role": "user", "content": "¿Qué es FastAPI?"}
174+ ],
175+ "max_tokens": 200,
176+ "temperature": 0.7,
177+ "provider": "ollama"
178+ }'
179+ ```
180+
181+ ** Valores válidos para ` provider ` :**
182+
183+ - ` groq `
184+ - ` openrouter `
185+ - ` ollama `
186+
187+ Si el proveedor no existe o está deshabilitado, recibirás un error 400 o 503.
188+
163189** Response:**
164190
165191``` json
@@ -448,19 +474,19 @@ ModelRouter/
448474
449475### Completado
450476
451- - [x] Scaffold proyecto + Docker
452- - [x] Adapters Groq, OpenRouter y Ollama
453- - [x] Router con fallback
454- - [x] Orchestrator
455- - [x] Endpoints /chat y /stream
456- - [x] Métricas y logging
457- - [x] Tests unitarios
458- - [x] CI/CD
459- - [x] Rate Limiting por proveedor
477+ - [X] Scaffold proyecto + Docker
478+ - [X] Adapters Groq, OpenRouter y Ollama
479+ - [X] Router con fallback
480+ - [X] Orchestrator
481+ - [X] Endpoints /chat y /stream
482+ - [X] Métricas y logging
483+ - [X] Tests unitarios
484+ - [X] CI/CD
485+ - [X] Definir Rate Limiting por proveedor
486+ - [X] Permitir especificar de forma opcional un proveedor en la request
460487
461488### Próximos pasos
462489
463- - [ ] Permitir especificar de forma opcional un proveedor en la request
464490- [ ] Selección Explícita de Modelo por Proveedor
465491- [ ] Persistencia de historiales (PostgreSQL)
466492- [ ] Soporte para más proveedores (Anthropic, OpenAI)
0 commit comments