- HERENCIA-SIMCO.md actualizado con directivas v3.7 y v3.8 - Actualizaciones de configuracion Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
161 lines
3.7 KiB
Markdown
161 lines
3.7 KiB
Markdown
---
|
|
id: "ADR-006"
|
|
title: "AI Integration Multi-Provider"
|
|
type: "ADR"
|
|
status: "Accepted"
|
|
priority: "P0"
|
|
supersedes: "N/A"
|
|
superseded_by: "N/A"
|
|
version: "1.0.0"
|
|
created_date: "2026-01-10"
|
|
updated_date: "2026-01-10"
|
|
---
|
|
|
|
# ADR-006: AI Integration Multi-Provider
|
|
|
|
## Metadata
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| ID | ADR-006 |
|
|
| Estado | Accepted |
|
|
| Fecha | 2026-01-10 |
|
|
| Supersede | N/A |
|
|
|
|
## Contexto
|
|
|
|
El sistema requiere integracion con multiples proveedores de IA (Claude, GPT-4, Gemini) para:
|
|
- Ofrecer flexibilidad a los usuarios en la eleccion de modelo
|
|
- Evitar vendor lock-in
|
|
- Permitir fallback automatico si un proveedor no esta disponible
|
|
- Optimizar costos segun el caso de uso
|
|
|
|
### Requisitos
|
|
- Soporte para Claude (Anthropic), GPT-4 (OpenAI), Gemini (Google)
|
|
- Cambio de proveedor sin modificar codigo de aplicacion
|
|
- Token counting y cost tracking por tenant
|
|
- Rate limiting por tenant y plan
|
|
|
|
## Opciones Consideradas
|
|
|
|
### Opcion 1: APIs Directas por Proveedor
|
|
|
|
**Descripcion:** Implementar SDK de cada proveedor directamente.
|
|
|
|
**Pros:**
|
|
- Sin intermediarios
|
|
- Acceso a todas las features de cada proveedor
|
|
- Sin costos adicionales
|
|
|
|
**Contras:**
|
|
- Mayor complejidad de codigo
|
|
- Mantenimiento de multiples SDKs
|
|
- Sin fallback automatico
|
|
|
|
### Opcion 2: OpenRouter como Gateway
|
|
|
|
**Descripcion:** Usar OpenRouter como gateway unificado para todos los providers.
|
|
|
|
**Pros:**
|
|
- API unificada para todos los modelos
|
|
- Fallback automatico entre providers
|
|
- Billing consolidado
|
|
- Menor codigo a mantener
|
|
|
|
**Contras:**
|
|
- Latencia adicional (~50ms)
|
|
- Costo de gateway (2-5%)
|
|
- Dependencia de servicio externo
|
|
|
|
### Opcion 3: LangChain Abstraction
|
|
|
|
**Descripcion:** Usar LangChain como capa de abstraccion.
|
|
|
|
**Pros:**
|
|
- Abstraccion completa
|
|
- Chains y agents pre-construidos
|
|
- Comunidad activa
|
|
|
|
**Contras:**
|
|
- Overhead significativo
|
|
- Curva de aprendizaje
|
|
- Dificil debugging
|
|
|
|
## Decision
|
|
|
|
**Elegimos OpenRouter como gateway unificado** con fallback a APIs directas para casos criticos.
|
|
|
|
### Justificacion
|
|
|
|
1. **Simplicidad:** Una sola API para todos los modelos
|
|
2. **Flexibilidad:** Cambio de modelo sin cambios de codigo
|
|
3. **Fallback:** Automatico entre providers
|
|
4. **Costos:** Optimizacion automatica por costo/performance
|
|
|
|
## Implementacion
|
|
|
|
### Configuracion
|
|
|
|
```typescript
|
|
// config/ai.config.ts
|
|
export const aiConfig = {
|
|
provider: 'openrouter',
|
|
defaultModel: 'anthropic/claude-3.5-sonnet',
|
|
fallbackModel: 'openai/gpt-4-turbo',
|
|
maxTokens: 4096,
|
|
temperature: 0.7
|
|
};
|
|
```
|
|
|
|
### Service Layer
|
|
|
|
```typescript
|
|
@Injectable()
|
|
export class AIService {
|
|
async complete(prompt: string, options?: AIOptions) {
|
|
return this.openRouterClient.complete({
|
|
model: options?.model || this.config.defaultModel,
|
|
messages: [{ role: 'user', content: prompt }],
|
|
max_tokens: options?.maxTokens || this.config.maxTokens
|
|
});
|
|
}
|
|
}
|
|
```
|
|
|
|
### Rate Limiting por Tenant
|
|
|
|
- Free: 100 requests/dia
|
|
- Basic: 1000 requests/dia
|
|
- Pro: 10000 requests/dia
|
|
- Enterprise: Ilimitado
|
|
|
|
## Consecuencias
|
|
|
|
### Positivas
|
|
- Cambio de provider sin modificar codigo de aplicacion
|
|
- Fallback automatico entre providers
|
|
- Billing unificado y facil de trackear
|
|
- Menor codigo a mantener
|
|
|
|
### Negativas
|
|
- Latencia adicional (~50ms por request)
|
|
- Costo de gateway (2-5% adicional)
|
|
- Dependencia de OpenRouter como servicio
|
|
|
|
### Mitigaciones
|
|
- Cache de respuestas comunes (Redis)
|
|
- Fallback directo a APIs en caso de OpenRouter caido
|
|
- Monitoreo de latencia y costos
|
|
|
|
## Referencias
|
|
|
|
- [OpenRouter Documentation](https://openrouter.ai/docs)
|
|
- [Anthropic API](https://docs.anthropic.com/claude/reference)
|
|
- [OpenAI API](https://platform.openai.com/docs/api-reference)
|
|
- Modulo relacionado: SAAS-006-ai-integration.md
|
|
|
|
---
|
|
|
|
**Fecha decision:** 2026-01-10
|
|
**Autores:** Claude Code (Arquitectura)
|