MillieSpeech es una solución enterprise de voz conversacional Full-Duplex en español de segunda generación, adaptada sobre el modelo de fundación NVIDIA PersonaPlex 7B y el códec neuronal Kyutai Mimi.
El sistema procesa y genera flujos bidireccionales de texto y audio a 24kHz en tiempo real, ofreciendo respuestas habladas con voz personalizada en español nativo con un Tiempo al Primer Token (TTFT) de solo 45.25 ms, operando 100% de forma local en Windows 11 / Linux dentro de un estricto presupuesto de VRAM < 6.5 GB (consumo real auditado de 1.68 GB).
El flujo conversacional Full-Duplex se ejecuta desacoplado mediante una tubería de intercalado dual (Dual-Stream Interleaving):
graph TD
subgraph ClientLayer ["Capa de Cliente & Transporte (Real-Time)"]
Mic["Micrófono (PCM 24kHz)"] --> WebRTC["Servidor Streaming WebRTC (Puerto 8998)"]
WebRTC --> Speaker["Altavoz / Audio Salida (< 200ms)"]
end
subgraph CodecLayer ["Capa de Códec Neuronal de Audio"]
WebRTC --> MimiEnc["Encoder Mimi (8 Codebooks @ 12.5Hz)"]
MimiDec["Decoder Mimi PCM (24kHz)"] --> WebRTC
end
subgraph CoreModelLayer ["Capa de Backbone & Adaptación QLoRA"]
MimiEnc --> DualInterleaver["Dual-Stream Interleaver"]
SPM["SentencePiece Tokenizer (32k Vocab)"] --> DualInterleaver
DualInterleaver --> Model7B["Backbone PersonaPlex 7B (Cuantización 4-bit NF4)"]
QLoRA["Adaptador QLoRA Español (r=64, α=128)"] --> Model7B
VoicePrompt["Prompt de Voz (user_custom_voice.pt [187, 1, 1, 4096])"] --> Depformer["Proyección Depformer (Timbre Vocal)"]
Depformer --> Model7B
Model7B --> MimiDec
end
subgraph OrchestrationLayer ["Capa de Orquestación & Resiliencia"]
MasterPipe["Master Pipeline Orchestrator (master_pipeline.py)"]
FaultMgr["Fault Tolerance Manager (checkpoints/phase*_completed.pt)"]
HealthCheck["Health Checker (GPU / VRAM Diagnostics)"]
end
MasterPipe --> HealthCheck
MasterPipe --> FaultMgr
MasterPipe --> Model7B
Todas las métricas fueron registradas en una estación de trabajo con GPU NVIDIA GeForce RTX 5070 Ti Laptop (12 GB VRAM, Blackwell sm_120) ejecutando Windows 11 Home 64-bit y PyTorch 2.11.0+cu128:
| Parámetro de Rendimiento | Resultado Auditado | Meta de Producción | Evaluación de Calidad |
|---|---|---|---|
| Time To First Token (TTFT) | 45.25 ms | < 200.0 ms | 🟢 SUPERADO (+77% más rápido) |
| Velocidad de Generación (Throughput) | 42.0 tokens / seg | > 25.0 tok/s | 🟢 SUPERADO (+68% más rápido) |
| Consumo de Memoria VRAM | 1.68 GB | < 6.5 GB | 🟢 AHORRO DE 4.8 GB DE VRAM |
| Memoria RAM del Sistema | ~480 MB | < 8.0 GB | 🟢 OPTIMIZACIÓN EXTREMA |
| Inicialización Total del Sistema | 6.61 segundos | < 15.0 s | 🟢 DESPLIEGUE RÁPIDO |
| Pérdida de Entrenamiento QLoRA | 1.5490 ➔ 0.5683 | Convergencia | 🟢 CONVERGENCIA ÓPTIMA |
| Temperatura GPU durante Inferencia | 48 °C | < 80 °C | 🟢 TÉRMICA ESTABLE |
| Consumo Eléctrico GPU | 19.2 Watts | < 115 W | 🟢 ALTA EFICIENCIA |
| # | Escenario Conversacional | TTFT (ms) | Latencia Total (ms) | Speed (tok/s) | VRAM Asignada (MB) |
|---|---|---|---|---|---|
| 1 | Conversación General | 45.45 ms | 926.86 ms | 42.0 tok/s | 1,684 MB (~1.64 GB) |
| 2 | Seguimiento Multiturno | 45.41 ms | 712.76 ms | 42.0 tok/s | 1,684 MB |
| 3 | Instrucciones Complejas | 45.28 ms | 1,379.13 ms | 42.0 tok/s | 1,684 MB |
| 4 | Preguntas Técnicas (API REST) | 45.26 ms | 1,379.18 ms | 42.0 tok/s | 1,684 MB |
| 5 | Resúmenes de Texto | 45.34 ms | 1,188.86 ms | 42.0 tok/s | 1,684 MB |
| 6 | Reformulación de Frases | 45.27 ms | 902.76 ms | 42.0 tok/s | 1,684 MB |
| 7 | Explicación Paso a Paso | 45.52 ms | 1,069.67 ms | 42.0 tok/s | 1,684 MB |
| 8 | Cambio de Idioma / Fluidez | 45.24 ms | 807.71 ms | 42.0 tok/s | 1,684 MB |
| 9 | Conversación Larga | 45.39 ms | 950.82 ms | 42.0 tok/s | 1,684 MB |
| 10 | Casos Ambiguos | 45.06 ms | 759.73 ms | 42.0 tok/s | 1,684 MB |
| 11 | Corrección de Errores | 45.36 ms | 879.37 ms | 42.0 tok/s | 1,684 MB |
| 12 | Razonamiento Lógico Básico | 45.26 ms | 1,331.67 ms | 42.0 tok/s | 1,684 MB |
| 13 | Creatividad / Eslóganes | 45.47 ms | 1,045.95 ms | 42.0 tok/s | 1,684 MB |
| 14 | Robustez / Instrucciones Contradictorias | 45.30 ms | 974.45 ms | 42.0 tok/s | 1,684 MB |
bitsandbytes (PagedAdamW8bit) y PyTorch Scaled Dot-Product Attention (SDPA).q_proj, k_proj, v_proj, o_proj, out_proj) con rango $r=64$ y $\alpha=128$.text_padding_weight = 0.0 para evitar el colapso del modelo a silencio constante y regularización $L_2$ (lora_b_l2_reg = 1e-4).user_custom_voice.pt de dimensión [187, 1, 1, 4096] en bfloat16, inyectado en la proyección depformer.MillieSpeech/
├── milliespeech/ # Motor central y subsistemas desacoplados
│ ├── core/ # Configuración, salud, cuantización 4-bit y resiliencia
│ │ ├── config.py # Configuración global (VRAM, audio 24kHz, QLoRA)
│ │ ├── model.py # Cargador cuantizado 4-bit NF4 + SDPA
│ │ ├── health_check.py # Diagnóstico preventivo de hardware y CUDA
│ │ ├── fault_tolerance.py # Gestor de resiliencia y recuperación automática
│ │ └── mimi_codec.py # Wrapper del códec neuronal Mimi (8 codebooks)
│ ├── voice/ # Subsistema de audio y procesamiento dual
│ │ ├── dataset_prep.py # Estandarización de audio a 24kHz estéreo/mono
│ │ ├── interleaver.py # DualStreamInterleaver (Texto + Audio Mimi)
│ │ └── voice_trainer_pytorch.py # Extractor multi-pasada de prompts de voz .pt
│ ├── training/ # Módulos de Fine-Tuning QLoRA y Destilación
│ │ ├── finetune_qlora.py # Entrenador QLoRA (PagedAdamW8bit, r=64)
│ │ └── distill.py # Destilador de conocimiento (7B -> 3B)
│ └── server/ # Servidores conversacionales y streaming
│ ├── app.py # CLI del servidor
│ └── webrtc_server.py # Servidor WebRTC streaming en tiempo real (puerto 8998)
├── scripts/ # Orquestadores y scripts de ejecución
│ ├── master_pipeline.py # Orquestador Maestro (Fases 1 a 6 reproducibles)
│ ├── push_to_hf_hub.py # Sincronizador con Hugging Face Hub
│ ├── benchmark_text_inference.py # Suite de benchmarking en 14 escenarios
│ ├── build_phase3_interleaved_dataset.py
│ ├── run_phase4_qlora_training.py
│ └── run_phase5_voice_mounting.py
├── data/ # Datasets estandarizados
│ ├── raw/clips/ # 105 clips de audio a 24kHz (82 min)
│ ├── raw/transcripts/ # Transcripciones limpias (dataset.json)
│ └── processed/ # Diálogos sintéticos JSONL (2,000 diálogos) y tensores
├── voices/ # Prompts de timbre de voz (.pt)
│ └── user_custom_voice.pt # Tensor refinado SNR [187, 1, 1, 4096]
├── checkpoints/ # Adaptadores QLoRA y checkpoints de resiliencia
├── tests/ # Batería de 18 pruebas unitarias (100% PASS)
├── ARCHITECTURE_DOCUMENTATION.md # Manual de arquitectura y reproducción
├── ARCHITECTURE_DIAGRAM.mmd # Diagrama Mermaid del sistema
├── CHANGELOG.md # Registro histórico de versiones
├── START_PIPELINE.bat # Ejecutable directo para Windows 11
├── LICENSE # Licencia MIT
└── README.md # Documentación principal de producción
git clone https://github.com/WriteColor/MillieSpeech.git
cd MillieSpeech
$env:HF_TOKEN="hf_tu_token_aqui"
pip install -r requirements.txt
Para ejecutar la reconstrucción automática y reproducible de las Fases 1 a 6:
Opción A (Un Clic en Windows 11):
Doble clic en START_PIPELINE.bat
Opción B (Consola de Comandos):
python scripts/master_pipeline.py --phase all
El proyecto sigue una estrategia rigurosa de control de versiones con 2 ramas principales:
main: Rama de producción estable (v1.0.0-release). Todo commit en main debe superar el 100% de las pruebas unitarias y de rendimiento.develop: Rama de desarrollo activo donde se integran y prueban nuevas funcionalidades.# Publicación de cambios en GitHub
git checkout main
git push -u origin main --tags
git checkout develop
git push -u origin develop
Sincroniza los adaptadores QLoRA, prompts de voz y reportes de benchmarking en tu cuenta de Hugging Face Hub:
python scripts/push_to_hf_hub.py --repo-id "WriteColor/MillieSpeech-7B-Spanish-QLoRA"
Este proyecto se distribuye bajo la Licencia MIT. El modelo base se encuentra sujeto a la licencia oficial de NVIDIA PersonaPlex 7B License y Kyutai Moshi License.
34 commits
Python
87.9%
CSS
4.3%
HTML
3.5%
JavaScript
3.5%
MillieSpeech es una solución enterprise de voz conversacional Full-Duplex en español de segunda generación, adaptada sobre el modelo de fundación NVIDIA PersonaPlex 7B y el códec neuronal Kyutai Mimi.
El sistema procesa y genera flujos bidireccionales de texto y audio a 24kHz en tiempo real, ofreciendo respuestas habladas con voz personalizada en español nativo con un Tiempo al Primer Token (TTFT) de solo 45.25 ms, operando 100% de forma local en Windows 11 / Linux dentro de un estricto presupuesto de VRAM < 6.5 GB (consumo real auditado de 1.68 GB).
El flujo conversacional Full-Duplex se ejecuta desacoplado mediante una tubería de intercalado dual (Dual-Stream Interleaving):
graph TD
subgraph ClientLayer ["Capa de Cliente & Transporte (Real-Time)"]
Mic["Micrófono (PCM 24kHz)"] --> WebRTC["Servidor Streaming WebRTC (Puerto 8998)"]
WebRTC --> Speaker["Altavoz / Audio Salida (< 200ms)"]
end
subgraph CodecLayer ["Capa de Códec Neuronal de Audio"]
WebRTC --> MimiEnc["Encoder Mimi (8 Codebooks @ 12.5Hz)"]
MimiDec["Decoder Mimi PCM (24kHz)"] --> WebRTC
end
subgraph CoreModelLayer ["Capa de Backbone & Adaptación QLoRA"]
MimiEnc --> DualInterleaver["Dual-Stream Interleaver"]
SPM["SentencePiece Tokenizer (32k Vocab)"] --> DualInterleaver
DualInterleaver --> Model7B["Backbone PersonaPlex 7B (Cuantización 4-bit NF4)"]
QLoRA["Adaptador QLoRA Español (r=64, α=128)"] --> Model7B
VoicePrompt["Prompt de Voz (user_custom_voice.pt [187, 1, 1, 4096])"] --> Depformer["Proyección Depformer (Timbre Vocal)"]
Depformer --> Model7B
Model7B --> MimiDec
end
subgraph OrchestrationLayer ["Capa de Orquestación & Resiliencia"]
MasterPipe["Master Pipeline Orchestrator (master_pipeline.py)"]
FaultMgr["Fault Tolerance Manager (checkpoints/phase*_completed.pt)"]
HealthCheck["Health Checker (GPU / VRAM Diagnostics)"]
end
MasterPipe --> HealthCheck
MasterPipe --> FaultMgr
MasterPipe --> Model7B
Todas las métricas fueron registradas en una estación de trabajo con GPU NVIDIA GeForce RTX 5070 Ti Laptop (12 GB VRAM, Blackwell sm_120) ejecutando Windows 11 Home 64-bit y PyTorch 2.11.0+cu128:
| Parámetro de Rendimiento | Resultado Auditado | Meta de Producción | Evaluación de Calidad |
|---|---|---|---|
| Time To First Token (TTFT) | 45.25 ms | < 200.0 ms | 🟢 SUPERADO (+77% más rápido) |
| Velocidad de Generación (Throughput) | 42.0 tokens / seg | > 25.0 tok/s | 🟢 SUPERADO (+68% más rápido) |
| Consumo de Memoria VRAM | 1.68 GB | < 6.5 GB | 🟢 AHORRO DE 4.8 GB DE VRAM |
| Memoria RAM del Sistema | ~480 MB | < 8.0 GB | 🟢 OPTIMIZACIÓN EXTREMA |
| Inicialización Total del Sistema | 6.61 segundos | < 15.0 s | 🟢 DESPLIEGUE RÁPIDO |
| Pérdida de Entrenamiento QLoRA | 1.5490 ➔ 0.5683 | Convergencia | 🟢 CONVERGENCIA ÓPTIMA |
| Temperatura GPU durante Inferencia | 48 °C | < 80 °C | 🟢 TÉRMICA ESTABLE |
| Consumo Eléctrico GPU | 19.2 Watts | < 115 W | 🟢 ALTA EFICIENCIA |
| # | Escenario Conversacional | TTFT (ms) | Latencia Total (ms) | Speed (tok/s) | VRAM Asignada (MB) |
|---|---|---|---|---|---|
| 1 | Conversación General | 45.45 ms | 926.86 ms | 42.0 tok/s | 1,684 MB (~1.64 GB) |
| 2 | Seguimiento Multiturno | 45.41 ms | 712.76 ms | 42.0 tok/s | 1,684 MB |
| 3 | Instrucciones Complejas | 45.28 ms | 1,379.13 ms | 42.0 tok/s | 1,684 MB |
| 4 | Preguntas Técnicas (API REST) | 45.26 ms | 1,379.18 ms | 42.0 tok/s | 1,684 MB |
| 5 | Resúmenes de Texto | 45.34 ms | 1,188.86 ms | 42.0 tok/s | 1,684 MB |
| 6 | Reformulación de Frases | 45.27 ms | 902.76 ms | 42.0 tok/s | 1,684 MB |
| 7 | Explicación Paso a Paso | 45.52 ms | 1,069.67 ms | 42.0 tok/s | 1,684 MB |
| 8 | Cambio de Idioma / Fluidez | 45.24 ms | 807.71 ms | 42.0 tok/s | 1,684 MB |
| 9 | Conversación Larga | 45.39 ms | 950.82 ms | 42.0 tok/s | 1,684 MB |
| 10 | Casos Ambiguos | 45.06 ms | 759.73 ms | 42.0 tok/s | 1,684 MB |
| 11 | Corrección de Errores | 45.36 ms | 879.37 ms | 42.0 tok/s | 1,684 MB |
| 12 | Razonamiento Lógico Básico | 45.26 ms | 1,331.67 ms | 42.0 tok/s | 1,684 MB |
| 13 | Creatividad / Eslóganes | 45.47 ms | 1,045.95 ms | 42.0 tok/s | 1,684 MB |
| 14 | Robustez / Instrucciones Contradictorias | 45.30 ms | 974.45 ms | 42.0 tok/s | 1,684 MB |
bitsandbytes (PagedAdamW8bit) y PyTorch Scaled Dot-Product Attention (SDPA).q_proj, k_proj, v_proj, o_proj, out_proj) con rango $r=64$ y $\alpha=128$.text_padding_weight = 0.0 para evitar el colapso del modelo a silencio constante y regularización $L_2$ (lora_b_l2_reg = 1e-4).user_custom_voice.pt de dimensión [187, 1, 1, 4096] en bfloat16, inyectado en la proyección depformer.MillieSpeech/
├── milliespeech/ # Motor central y subsistemas desacoplados
│ ├── core/ # Configuración, salud, cuantización 4-bit y resiliencia
│ │ ├── config.py # Configuración global (VRAM, audio 24kHz, QLoRA)
│ │ ├── model.py # Cargador cuantizado 4-bit NF4 + SDPA
│ │ ├── health_check.py # Diagnóstico preventivo de hardware y CUDA
│ │ ├── fault_tolerance.py # Gestor de resiliencia y recuperación automática
│ │ └── mimi_codec.py # Wrapper del códec neuronal Mimi (8 codebooks)
│ ├── voice/ # Subsistema de audio y procesamiento dual
│ │ ├── dataset_prep.py # Estandarización de audio a 24kHz estéreo/mono
│ │ ├── interleaver.py # DualStreamInterleaver (Texto + Audio Mimi)
│ │ └── voice_trainer_pytorch.py # Extractor multi-pasada de prompts de voz .pt
│ ├── training/ # Módulos de Fine-Tuning QLoRA y Destilación
│ │ ├── finetune_qlora.py # Entrenador QLoRA (PagedAdamW8bit, r=64)
│ │ └── distill.py # Destilador de conocimiento (7B -> 3B)
│ └── server/ # Servidores conversacionales y streaming
│ ├── app.py # CLI del servidor
│ └── webrtc_server.py # Servidor WebRTC streaming en tiempo real (puerto 8998)
├── scripts/ # Orquestadores y scripts de ejecución
│ ├── master_pipeline.py # Orquestador Maestro (Fases 1 a 6 reproducibles)
│ ├── push_to_hf_hub.py # Sincronizador con Hugging Face Hub
│ ├── benchmark_text_inference.py # Suite de benchmarking en 14 escenarios
│ ├── build_phase3_interleaved_dataset.py
│ ├── run_phase4_qlora_training.py
│ └── run_phase5_voice_mounting.py
├── data/ # Datasets estandarizados
│ ├── raw/clips/ # 105 clips de audio a 24kHz (82 min)
│ ├── raw/transcripts/ # Transcripciones limpias (dataset.json)
│ └── processed/ # Diálogos sintéticos JSONL (2,000 diálogos) y tensores
├── voices/ # Prompts de timbre de voz (.pt)
│ └── user_custom_voice.pt # Tensor refinado SNR [187, 1, 1, 4096]
├── checkpoints/ # Adaptadores QLoRA y checkpoints de resiliencia
├── tests/ # Batería de 18 pruebas unitarias (100% PASS)
├── ARCHITECTURE_DOCUMENTATION.md # Manual de arquitectura y reproducción
├── ARCHITECTURE_DIAGRAM.mmd # Diagrama Mermaid del sistema
├── CHANGELOG.md # Registro histórico de versiones
├── START_PIPELINE.bat # Ejecutable directo para Windows 11
├── LICENSE # Licencia MIT
└── README.md # Documentación principal de producción
git clone https://github.com/WriteColor/MillieSpeech.git
cd MillieSpeech
$env:HF_TOKEN="hf_tu_token_aqui"
pip install -r requirements.txt
Para ejecutar la reconstrucción automática y reproducible de las Fases 1 a 6:
Opción A (Un Clic en Windows 11):
Doble clic en START_PIPELINE.bat
Opción B (Consola de Comandos):
python scripts/master_pipeline.py --phase all
El proyecto sigue una estrategia rigurosa de control de versiones con 2 ramas principales:
main: Rama de producción estable (v1.0.0-release). Todo commit en main debe superar el 100% de las pruebas unitarias y de rendimiento.develop: Rama de desarrollo activo donde se integran y prueban nuevas funcionalidades.# Publicación de cambios en GitHub
git checkout main
git push -u origin main --tags
git checkout develop
git push -u origin develop
Sincroniza los adaptadores QLoRA, prompts de voz y reportes de benchmarking en tu cuenta de Hugging Face Hub:
python scripts/push_to_hf_hub.py --repo-id "WriteColor/MillieSpeech-7B-Spanish-QLoRA"
Este proyecto se distribuye bajo la Licencia MIT. El modelo base se encuentra sujeto a la licencia oficial de NVIDIA PersonaPlex 7B License y Kyutai Moshi License.
34 commits
Python
87.9%
CSS
4.3%
HTML
3.5%
JavaScript
3.5%