12 KiB
Requerimientos No Funcionales - Local LLM Agent
Version: 1.0.0 Fecha: 2026-01-20 Proyecto: local-llm-agent Prioridad: P1 (Infraestructura)
1. RENDIMIENTO (PERFORMANCE)
RNF-P-001: Latencia de Respuesta
| Atributo | Valor |
|---|---|
| ID | RNF-P-001 |
| Categoria | Performance |
| Prioridad | MUST HAVE |
Descripcion: El sistema DEBE cumplir con los siguientes objetivos de latencia.
Metricas:
| Operacion | Tier | Latencia p50 | Latencia p95 | Latencia p99 |
|---|---|---|---|---|
| Chat Completion | small | 300ms | 500ms | 800ms |
| Chat Completion | main | 1000ms | 2000ms | 3500ms |
| List Models | - | 30ms | 100ms | 200ms |
| Health Check | - | 10ms | 50ms | 100ms |
| MCP Tools | small | 400ms | 800ms | 1200ms |
Condiciones de Medicion:
- Medido end-to-end desde Gateway hasta respuesta
- Bajo carga normal (< 3 agentes concurrentes)
- Modelo cargado en memoria (warm start)
RNF-P-002: Throughput
| Atributo | Valor |
|---|---|
| ID | RNF-P-002 |
| Categoria | Performance |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE soportar el siguiente throughput sostenido.
Metricas:
| Metrica | Objetivo Minimo | Objetivo Optimo |
|---|---|---|
| Requests por minuto (tier small) | 20 | 40 |
| Requests por minuto (tier main) | 5 | 10 |
| Tokens por segundo (generacion) | 60 | 100 |
| Agentes concurrentes | 2 | 3 |
Nota: Limitado por capacidad de GPU (RTX 5060 Ti 16GB)
RNF-P-003: Cold Start Time
| Atributo | Valor |
|---|---|
| ID | RNF-P-003 |
| Categoria | Performance |
| Prioridad | NICE TO HAVE |
Descripcion: El sistema DEBE inicializarse en tiempo razonable desde cold start.
Metricas:
| Componente | Tiempo Maximo |
|---|---|
| Gateway startup | 5 segundos |
| Inference Engine startup | 10 segundos |
| Modelo carga inicial | 60 segundos |
| Sistema completo operativo | 90 segundos |
2. ESCALABILIDAD (SCALABILITY)
RNF-S-001: Escalabilidad de Modelos
| Atributo | Valor |
|---|---|
| ID | RNF-S-001 |
| Categoria | Scalability |
| Prioridad | NICE TO HAVE (Fase 3) |
Descripcion: El sistema DEBERIA soportar multiples modelos/adaptadores en el futuro.
Objetivos Fase 3:
- Soporte para Multi-LoRA (2-4 adaptadores simultaneos)
- Hot-swap de modelos sin reinicio
- Routing basado en proyecto/dominio
Restricciones Actuales (MVP):
- Un modelo activo a la vez
- Cambio de modelo requiere reinicio de backend
RNF-S-002: Escalabilidad de Agentes
| Atributo | Valor |
|---|---|
| ID | RNF-S-002 |
| Categoria | Scalability |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE escalar a multiples agentes concurrentes.
Capacidad:
| Fase | Agentes Concurrentes | Batch Size |
|---|---|---|
| MVP | 2 | 1 |
| Fase 2 | 3 | 2 |
| Fase 3 | 5+ | 4 |
3. DISPONIBILIDAD (AVAILABILITY)
RNF-A-001: Uptime Objetivo
| Atributo | Valor |
|---|---|
| ID | RNF-A-001 |
| Categoria | Availability |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE mantener disponibilidad adecuada para entorno de desarrollo.
Metricas:
| Metrica | Objetivo |
|---|---|
| Uptime durante horas laborales | 95% |
| MTTR (Mean Time To Recovery) | < 5 minutos |
| Degraded mode availability | 99% |
Modo Degradado:
- Si Ollama no responde, Gateway retorna 503 con mensaje claro
- Health check refleja estado degradado
- Logs indican problema para diagnostico rapido
RNF-A-002: Graceful Degradation
| Atributo | Valor |
|---|---|
| ID | RNF-A-002 |
| Categoria | Availability |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE degradarse graciosamente ante fallos parciales.
Comportamiento:
| Escenario | Comportamiento |
|---|---|
| Ollama no disponible | Gateway retorna 503, health indica "unhealthy" |
| Alta latencia backend | Log warning, continua procesando |
| Memoria insuficiente | Rechaza nuevos requests, procesa cola existente |
| Timeout en request | Retorna error timeout, libera recursos |
4. SEGURIDAD (SECURITY)
RNF-SEC-001: Autenticacion y Autorizacion
| Atributo | Valor |
|---|---|
| ID | RNF-SEC-001 |
| Categoria | Security |
| Prioridad | NICE TO HAVE (Fase 2) |
Descripcion: El sistema DEBERIA implementar autenticacion basica.
MVP: Sin autenticacion (red local confiable)
Fase 2:
- API Key simple via header
X-API-Key - Whitelist de IPs permitidas
- Rate limiting basico por IP
RNF-SEC-002: Seguridad de Comunicacion
| Atributo | Valor |
|---|---|
| ID | RNF-SEC-002 |
| Categoria | Security |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE asegurar comunicaciones internas.
Medidas:
- Comunicacion Gateway <-> Inference Engine via red Docker interna
- No exponer Inference Engine a red externa
- CORS configurado restrictivamente
- Headers de seguridad basicos
RNF-SEC-003: Proteccion de Datos
| Atributo | Valor |
|---|---|
| ID | RNF-SEC-003 |
| Categoria | Security |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE proteger datos sensibles en logs y almacenamiento.
Medidas:
- No loggear contenido completo de prompts
- Truncar contenido en logs a 100 caracteres
- No persistir prompts/respuestas por defecto
- Sanitizar inputs antes de pasar a backend
5. MANTENIBILIDAD (MAINTAINABILITY)
RNF-M-001: Modularidad
| Atributo | Valor |
|---|---|
| ID | RNF-M-001 |
| Categoria | Maintainability |
| Prioridad | MUST HAVE |
Descripcion: El sistema DEBE mantener separacion clara entre componentes.
Estructura:
local-llm-agent/
├── apps/
│ ├── gateway/ # NestJS - API Gateway
│ │ ├── src/
│ │ │ ├── modules/
│ │ │ │ ├── chat/
│ │ │ │ ├── models/
│ │ │ │ ├── mcp-tools/
│ │ │ │ └── health/
│ │ │ └── common/
│ │ └── test/
│ │
│ └── inference-engine/ # Python - Backend
│ ├── src/
│ │ ├── routes/
│ │ ├── engine/
│ │ └── adapters/
│ └── tests/
│
├── docs/
├── orchestration/
└── docker-compose.yml
RNF-M-002: Logging y Trazabilidad
| Atributo | Valor |
|---|---|
| ID | RNF-M-002 |
| Categoria | Maintainability |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE proveer logging suficiente para debugging y monitoreo.
Requerimientos:
- Logs en formato JSON estructurado
- Correlation ID (request_id) en toda la cadena
- Niveles: DEBUG, INFO, WARNING, ERROR
- Timestamps ISO 8601
- Metricas de latencia por request
Ejemplo Log:
{
"timestamp": "2026-01-20T10:30:00.123Z",
"level": "INFO",
"logger": "gateway.chat",
"request_id": "req-abc123",
"message": "Chat completion finished",
"latency_ms": 1234,
"prompt_tokens": 150,
"completion_tokens": 50,
"model": "gpt-oss-20b"
}
RNF-M-003: Configurabilidad
| Atributo | Valor |
|---|---|
| ID | RNF-M-003 |
| Categoria | Maintainability |
| Prioridad | MUST HAVE |
Descripcion: El sistema DEBE ser configurable via environment variables.
Principios:
- Todas las configuraciones via ENV vars
- Valores sensibles nunca en codigo
- Defaults razonables para desarrollo
- Documentacion de todas las variables
RNF-M-004: Testing
| Atributo | Valor |
|---|---|
| ID | RNF-M-004 |
| Categoria | Maintainability |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE tener cobertura de tests adecuada.
Objetivos:
| Tipo de Test | Cobertura Objetivo |
|---|---|
| Unit Tests | 70% |
| Integration Tests | Endpoints criticos |
| E2E Tests | Happy path |
6. USABILIDAD (USABILITY)
RNF-U-001: Compatibilidad OpenAI
| Atributo | Valor |
|---|---|
| ID | RNF-U-001 |
| Categoria | Usability |
| Prioridad | MUST HAVE |
Descripcion: El sistema DEBE ser compatible con clientes OpenAI existentes.
Metricas:
- SDK OpenAI Python debe funcionar sin modificacion
- SDK OpenAI Node.js debe funcionar sin modificacion
- Solo cambiar base_url para usar local-llm-agent
Ejemplo Uso:
import openai
client = openai.OpenAI(
base_url="http://localhost:3160/v1",
api_key="not-required"
)
response = client.chat.completions.create(
model="gpt-oss-20b",
messages=[{"role": "user", "content": "Hello"}]
)
RNF-U-002: Documentacion API
| Atributo | Valor |
|---|---|
| ID | RNF-U-002 |
| Categoria | Usability |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE proveer documentacion de API.
Requerimientos:
- Swagger/OpenAPI disponible en /docs
- Ejemplos de uso para cada endpoint
- Schema de request/response documentado
7. RECURSOS Y RESTRICCIONES
RNF-R-001: Uso de VRAM
| Atributo | Valor |
|---|---|
| ID | RNF-R-001 |
| Categoria | Resources |
| Prioridad | MUST HAVE |
Descripcion: El sistema DEBE operar dentro de los limites de VRAM disponible.
Budget VRAM (RTX 5060 Ti 16GB):
| Componente | Asignacion |
|---|---|
| Modelo base (Q4_K_M) | 14 GB |
| KV Cache | 1.5 GB |
| Buffer sistema | 0.5 GB |
| Total | 16 GB |
Restricciones:
- No cargar modelos mayores a 14GB
- Monitorear uso de VRAM via nvidia-smi
- Alertar si VRAM > 95%
RNF-R-002: Uso de Memoria RAM
| Atributo | Valor |
|---|---|
| ID | RNF-R-002 |
| Categoria | Resources |
| Prioridad | SHOULD HAVE |
Descripcion: El sistema DEBE mantener uso de RAM razonable.
Objetivos:
| Componente | RAM Maxima |
|---|---|
| Gateway | 512 MB |
| Inference Engine | 1 GB |
| Total servicios | 1.5 GB |
RNF-R-003: Uso de CPU
| Atributo | Valor |
|---|---|
| ID | RNF-R-003 |
| Categoria | Resources |
| Prioridad | NICE TO HAVE |
Descripcion: El sistema DEBERIA minimizar uso de CPU (inferencia en GPU).
Objetivos:
- CPU usage promedio < 20% durante inferencia
- Spikes permitidos durante carga de modelo
8. COMPATIBILIDAD (COMPATIBILITY)
RNF-C-001: Compatibilidad con Backends
| Atributo | Valor |
|---|---|
| ID | RNF-C-001 |
| Categoria | Compatibility |
| Prioridad | MUST HAVE |
Descripcion: El sistema DEBE soportar multiples backends de inferencia.
Backends Soportados:
| Backend | Version | Estado | Notas |
|---|---|---|---|
| Ollama | >= 0.1.0 | MVP | Windows nativo |
| vLLM | >= 0.2.0 | Fase 3 | Requiere WSL |
RNF-C-002: Compatibilidad con Agentes
| Atributo | Valor |
|---|---|
| ID | RNF-C-002 |
| Categoria | Compatibility |
| Prioridad | MUST HAVE |
Descripcion: El sistema DEBE ser compatible con los agentes del workspace.
Agentes Soportados:
- Claude Code (via API OpenAI-compatible)
- Trae (via API OpenAI-compatible)
- Gemini (via API OpenAI-compatible)
9. RESUMEN DE PRIORIDADES
| Prioridad | RNFs |
|---|---|
| MUST HAVE | RNF-P-001, RNF-M-001, RNF-M-003, RNF-U-001, RNF-R-001, RNF-C-001, RNF-C-002 |
| SHOULD HAVE | RNF-P-002, RNF-A-001, RNF-A-002, RNF-SEC-002, RNF-SEC-003, RNF-M-002, RNF-M-004, RNF-U-002, RNF-R-002, RNF-S-002 |
| NICE TO HAVE | RNF-P-003, RNF-S-001, RNF-SEC-001, RNF-R-003 |
10. REFERENCIAS
- ADR-001: Runtime Selection
- ADR-002: Model Selection
- RF-REQUERIMIENTOS-FUNCIONALES.md
- ARQUITECTURA-LOCAL-LLM.md
Documento Controlado
- Autor: Requirements-Analyst Agent
- Revisor: Architecture-Analyst Agent
- Fecha: 2026-01-20