dcf887c510d6f9d88626d370bef2acc670ad783e
Cambios principales: ## Nuevos archivos - services/ai/parallel_provider.py: Ejecución paralela de múltiples proveedores AI - services/ai/prompt_manager.py: Gestión centralizada de prompts (resumen.md como fuente) - latex/resumen.md: Template del prompt para resúmenes académicos LaTeX ## Mejoras en generación LaTeX (document/generators.py) - Nueva función _sanitize_latex(): Corrige automáticamente errores comunes de AI - Agrega align=center a nodos TikZ con saltos de línea (\\) - Previene errores 'Not allowed in LR mode' antes de compilar - Soporte para procesamiento paralelo de proveedores AI - Conversión DOCX en paralelo con generación PDF - Uploads a Notion en background (non-blocking) - Callbacks de notificación para progreso en Telegram ## Mejoras en proveedores AI - claude_provider.py: fix_latex() con instrucciones específicas para errores TikZ - gemini_provider.py: fix_latex() mejorado + rate limiting + circuit breaker - provider_factory.py: Soporte para parallel provider ## Otros cambios - config/settings.py: Nuevas configuraciones para Gemini models - services/webdav_service.py: Mejoras en manejo de conexión - .gitignore: Ignora archivos LaTeX auxiliares (.aux, .toc, .out, .pdf) ## Archivos de ejemplo - latex/imperio_romano.tex, latex/clase_revolucion_rusa_crisis_30.tex - resumen_curiosidades.tex (corregido y compilado exitosamente)
🎵 CBCFacil v9
Sistema de IA para procesamiento inteligente de documentos (audio, PDF, texto) con integración a Nextcloud y dashboard web interactivo.
✨ Características Principales
- 🎙️ Transcripción de Audio - Whisper con soporte GPU/CPU
- 📝 Generación de Resúmenes - Claude AI o Gemini
- 📄 Múltiples Formatos - Genera TXT, MD, DOCX, PDF
- ☁️ Sincronización Nextcloud - Descarga y sube automáticamente
- 🖥️ Dashboard Web - Monitoreo y regeneración de resúmenes
- 📱 Notificaciones Telegram - Alertas en tiempo real
- 🔄 Reprocesamiento - Regenera resúmenes sin re-transcribir
🏗️ Arquitectura
┌─────────────────────────────────────────────────────────────────────────┐
│ CBCFacil v9 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Nextcloud │────▶│ Processor │────▶│ AI Service │ │
│ │ (WebDAV) │ │Audio/PDF/TXT│ │Claude/Gemini│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ │ ▼ ▼ │
│ │ ┌─────────────┐ ┌─────────────┐ │
│ │ │ Whisper │ │ Document │ │
│ │ │ (GPU) │ │ Generator │ │
│ │ └─────────────┘ └─────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Dashboard Web (Flask) │ │
│ │ • Vista de archivos • Regenerar resúmenes │ │
│ │ • Panel de versiones • Previsualización │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ │
│ │ Telegram │ │
│ │ (Notifica) │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
📁 Estructura del Proyecto
cbcfacil/
├── main.py # Punto de entrada principal
├── config/
│ └── settings.py # Configuración centralizada
├── services/
│ ├── webdav_service.py # Cliente WebDAV/Nextcloud
│ ├── vram_manager.py # Gestión memoria GPU
│ ├── telegram_service.py # Notificaciones
│ └── ai/
│ ├── claude_provider.py # Provider Claude (Z.ai)
│ ├── gemini_provider.py # Provider Gemini
│ └── provider_factory.py
├── processors/
│ ├── audio_processor.py # Transcripción Whisper
│ ├── pdf_processor.py # OCR y extracción
│ └── text_processor.py # Clasificación
├── document/
│ └── generators.py # Genera DOCX, PDF, Markdown
├── storage/
│ └── processed_registry.py # Registro de procesados
├── api/
│ └── routes.py # API REST + Dashboard
├── templates/
│ └── index.html # Dashboard UI
└── downloads/ # Archivos descargados
🚀 Instalación
Requisitos
- Python 3.10+
- NVIDIA GPU + CUDA 12.1+ (opcional, fallback a CPU)
- Nextcloud con WebDAV habilitado
Instalación Rápida
# Clonar repositorio
git clone https://gitea.cbcren.online/renato97/cbcren2026.git
cd cbcren2026
# Crear entorno virtual
python3 -m venv .venv
source .venv/bin/activate
# Instalar dependencias
pip install -r requirements.txt
# Configurar
cp .env.example .env
nano .env # Editar con tus credenciales
# Ejecutar
python3 main.py
⚙️ Configuración
Variables de Entorno (.env)
# === NEXTCLOUD/WEBDAV ===
NEXTCLOUD_URL=https://tu-nextcloud.com/remote.php/webdav
NEXTCLOUD_USER=usuario
NEXTCLOUD_PASSWORD=contraseña
# === AI PROVIDERS ===
GEMINI_API_KEY=AIza... # Para resúmenes con Gemini
# o
ANTHROPIC_AUTH_TOKEN=sk-ant-... # Para resúmenes con Claude
# === TELEGRAM (Opcional) ===
TELEGRAM_TOKEN=bot_token
TELEGRAM_CHAT_ID=chat_id
# === DASHBOARD ===
DASHBOARD_HOST=0.0.0.0
DASHBOARD_PORT=5000
🖥️ Dashboard Web
El dashboard se ejecuta en http://localhost:5000 junto con el servicio principal.
Funcionalidades
| Característica | Descripción |
|---|---|
| 📊 Vista de Archivos | Lista todos los archivos de audio con estado |
| 🔍 Búsqueda y Filtros | Filtra por local/WebDAV, ordena por fecha/nombre |
| 👁️ Panel de Preview | Visualiza transcripciones y resúmenes |
| 📁 Tab Versiones | Lista todos los formatos generados (TXT, MD, DOCX, PDF) |
| ✨ Regenerar Resumen | Genera nueva versión del resumen con IA |
| 🔄 Resetear Estado | Marca archivo como no procesado |
API REST Endpoints
GET /api/files # Lista archivos
GET /api/files-detailed # Lista con info de transcripciones
GET /api/transcription/<f> # Obtiene transcripción
GET /api/summary/<f> # Obtiene resumen
GET /api/versions/<f> # Lista versiones generadas
POST /api/regenerate-summary # Regenera resumen desde transcripción
POST /api/mark-unprocessed # Resetea estado de archivo
GET /health # Estado del servicio
🔄 Flujo de Procesamiento
- Detección - El servicio monitorea Nextcloud cada 5 segundos
- Descarga - Archivos nuevos se descargan localmente
- Transcripción - Whisper convierte audio a texto (.txt)
- Resumen - Claude/Gemini genera resumen estructurado
- Documentos - Se generan .md, .docx, .pdf
- Subida - Documentos se suben a Nextcloud
- Notificación - Telegram notifica finalización
📱 Regenerar Resúmenes
Cuando un resumen no es satisfactorio, puedes regenerarlo:
Desde el Dashboard
- Clic en el archivo procesado
- Panel lateral se abre con transcripción/resumen
- Clic en "✨ Regenerar" o tab "📁 Versiones"
- Nueva versión se genera y reemplaza la anterior
Desde la Lista
- Archivos procesados muestran botón "✨ Regenerar"
- Clic directo sin abrir panel lateral
🛠️ Uso CLI
# Ejecutar servicio completo
python3 main.py
# Transcribir audio específico
python3 main.py whisper archivo.mp3 ./output/
# Procesar PDF específico
python3 main.py pdf documento.pdf ./output/
📊 Métricas
| Componente | Performance |
|---|---|
| Transcripción Whisper | ~1x duración audio (GPU) |
| Resumen Gemini | ~5-15s por documento |
| OCR PDF | ~2-5s por página |
| Inicio del servicio | ~5-10s |
🔧 Tecnologías
- Backend: Python 3.10+, Flask
- IA: OpenAI Whisper, Google Gemini, Anthropic Claude
- Frontend: HTML5, CSS3, JavaScript (Vanilla)
- Storage: Nextcloud (WebDAV)
- GPU: CUDA, PyTorch
📝 Licencia
MIT License
Desarrollado por CBC | Última actualización: Enero 2026
Description
Languages
Python
98.9%
Dockerfile
0.7%
Shell
0.4%