- Nueva estructura de carpetas según Skynet v7 - Añadidos schemas SQL completos - Documentación de entidades, componentes e integraciones - Modelo de seguridad actualizado - Infraestructura y operaciones reorganizadas
225 lines
9.4 KiB
Markdown
225 lines
9.4 KiB
Markdown
# Asistente de Voz
|
|
|
|
**Nombre:** Penny
|
|
**Versión:** 1.0
|
|
**Estado:** Especificación
|
|
|
|
---
|
|
|
|
## Descripción
|
|
|
|
PENNY es el asistente personal de voz del sistema DECK. Proporciona interfaz conversacional hablada 100% natural.
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ PENNY │
|
|
│ │
|
|
│ • ES la voz del DECK │
|
|
│ • ES la interfaz hablada con el usuario │
|
|
│ • ES quien llama a GRACE cuando necesita datos │
|
|
│ • HABLA con el usuario (GRACE no puede) │
|
|
│ • REGISTRA todo en el log (planos de información) │
|
|
│ • MANTIENE contexto durante la sesión │
|
|
│ │
|
|
│ "PENNY habla, GRACE procesa, el Log recuerda." │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Principios
|
|
|
|
| Principio | Descripción |
|
|
|-----------|-------------|
|
|
| **Privacidad radical** | Audio procesado 100% local |
|
|
| **Conversación natural** | Turnos fluidos, latencia <2s |
|
|
| **Log como verdad** | Todo está en el log |
|
|
| **Planos separados** | Contextos cargables independientemente |
|
|
| **GRACE como backend** | PENNY pregunta, GRACE extrae |
|
|
|
|
---
|
|
|
|
## Arquitectura
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ PENNY VOICE ENGINE │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐│
|
|
│ │ Silero │ │ Faster │ │ PENNY │ │ XTTS-v2 ││
|
|
│ │ VAD │─▶│ Whisper │─▶│ CORE │─▶│ /Kokoro ││
|
|
│ │ │ │ │ │ │ │ ││
|
|
│ │ Detecta │ │ Transcribe │ │ Orquesta │ │ Sintetiza ││
|
|
│ │ voz │ │ audio │ │ todo │ │ respuesta ││
|
|
│ └────────────┘ └────────────┘ └─────┬──────┘ └────────────┘│
|
|
│ │ │
|
|
│ ┌───────────────────┼───────────────────┐ │
|
|
│ │ │ │ │
|
|
│ ▼ ▼ ▼ │
|
|
│ ┌─────────────┐ ┌─────────────┐ │
|
|
│ │ PLANOS │ │ GRACE │ │
|
|
│ │ (Log) │ │ (S-CONTRACT)│ │
|
|
│ └─────────────┘ └─────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
│
|
|
│ SOLO texto (nunca audio)
|
|
▼
|
|
┌─────────────────────────────┐
|
|
│ Claude API │
|
|
└─────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Flujo Voz → Voz
|
|
|
|
```
|
|
1. VAD DETECTA (Silero)
|
|
└── Usuario empieza a hablar
|
|
└── Usuario termina (silencio 700ms)
|
|
|
|
2. ASR TRANSCRIBE (Faster-Whisper)
|
|
└── Audio → Texto
|
|
└── ~200-400ms con GPU
|
|
|
|
3. PENNY CORE PROCESA
|
|
├── Cargar planos relevantes
|
|
├── ¿Necesita GRACE? → Llamar con S-CONTRACT
|
|
├── Construir prompt con contexto
|
|
└── Enviar a Claude API (solo texto)
|
|
|
|
4. LLM RESPONDE (Claude)
|
|
└── Streaming de tokens
|
|
└── ~1-2s primera palabra
|
|
|
|
5. TTS SINTETIZA (XTTS-v2/Kokoro)
|
|
└── Texto → Audio
|
|
└── Streaming mientras llegan tokens
|
|
|
|
6. LOG REGISTRA
|
|
└── Todo el intercambio → plano CONVERSACION
|
|
|
|
LATENCIA TOTAL OBJETIVO: <2 segundos voice-to-voice
|
|
```
|
|
|
|
---
|
|
|
|
## Planos de Información
|
|
|
|
El Log está organizado en planos que se cargan independientemente:
|
|
|
|
| Plano | Nombre | Descripción | Comportamiento |
|
|
|-------|--------|-------------|----------------|
|
|
| 0 | SISTEMA | Instrucciones base | INMUTABLE durante sesión |
|
|
| 1 | PERSONALIDAD | Tono, estilo, nombre, voz | CONFIGURABLE por usuario |
|
|
| 2 | CONTEXTO PERSONAL | Info usuario, preferencias | PERSISTENTE entre sesiones |
|
|
| 3 | CONTEXTO AMBIENTAL | Fecha, hora, estado sistema | DINÁMICO cada sesión |
|
|
| 4 | DATASET | Datos específicos de tarea | OPCIONAL bajo demanda |
|
|
| 5 | CONVERSACIÓN | Historial de sesión | TEMPORAL durante sesión |
|
|
|
|
---
|
|
|
|
## Modelos Autoalojados
|
|
|
|
| Componente | Modelo | Descripción |
|
|
|------------|--------|-------------|
|
|
| VAD | Silero VAD v5 | Detección de actividad vocal |
|
|
| ASR | Faster-Whisper Large-v3 | Transcripción |
|
|
| TTS | XTTS-v2 / Kokoro | Síntesis de voz |
|
|
| LLM | Claude API | Solo texto, streaming |
|
|
|
|
---
|
|
|
|
## Configuración
|
|
|
|
```yaml
|
|
penny:
|
|
version: "1.0"
|
|
|
|
server:
|
|
host: "0.0.0.0"
|
|
port: 8765
|
|
websocket_path: "/ws/voice"
|
|
|
|
models:
|
|
vad:
|
|
type: "silero"
|
|
path: "models/silero/vad_v5.onnx"
|
|
|
|
asr:
|
|
type: "faster-whisper"
|
|
model: "large-v3"
|
|
device: "cuda"
|
|
compute_type: "float16"
|
|
|
|
tts:
|
|
type: "xtts-v2"
|
|
speaker_wav: "voces/penny_base.wav"
|
|
language: "es"
|
|
|
|
llm:
|
|
provider: "anthropic"
|
|
model: "claude-sonnet-4-20250514"
|
|
max_tokens: 150
|
|
temperature: 0.7
|
|
streaming: true
|
|
|
|
grace:
|
|
endpoint: "http://localhost:8080/api/v1"
|
|
timeout_ms: 10000
|
|
|
|
log:
|
|
database_url: "postgresql://..."
|
|
retain_audio_days: 7
|
|
retain_text_days: 365
|
|
```
|
|
|
|
---
|
|
|
|
## Rol en el Sistema
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ DECK (Servidor Personal) │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ Usuario ◄────────────────────────────────────► PENNY │
|
|
│ (voz natural) │ (habla) │
|
|
│ │ │
|
|
│ ┌──────────────┼──────────────┐ │
|
|
│ │ │ │ │
|
|
│ ▼ ▼ ▼ │
|
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
│ │ GRACE │ │ LOG │ │ DECK │ │
|
|
│ │ (datos) │ │(planos) │ │(acciones│ │
|
|
│ └─────────┘ └─────────┘ └─────────┘ │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Características Conversacionales
|
|
|
|
| Característica | Descripción |
|
|
|----------------|-------------|
|
|
| **Barge-in** | Usuario puede interrumpir |
|
|
| **Turn detection** | Detecta fin de turno por silencio |
|
|
| **Contexto** | Mantiene contexto durante sesión |
|
|
| **Streaming** | Respuesta progresiva mientras genera |
|
|
|
|
---
|
|
|
|
## Pendiente
|
|
|
|
- [ ] Configurar servidor con GPU
|
|
- [ ] Instalar modelos (Whisper, XTTS-v2, Silero)
|
|
- [ ] Crear tablas de log
|
|
- [ ] Definir planos específicos
|
|
- [ ] Grabar voz base para clonación TTS
|
|
- [ ] Implementar pipeline con Pipecat
|
|
- [ ] Ajustar turn detection
|