renato97 dcf887c510 feat: Sistema LaTeX mejorado con sanitización automática y corrección de TikZ
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)
2026-02-07 20:50:27 +00:00
2025-12-16 22:32:27 +00:00

🎵 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

  1. Detección - El servicio monitorea Nextcloud cada 5 segundos
  2. Descarga - Archivos nuevos se descargan localmente
  3. Transcripción - Whisper convierte audio a texto (.txt)
  4. Resumen - Claude/Gemini genera resumen estructurado
  5. Documentos - Se generan .md, .docx, .pdf
  6. Subida - Documentos se suben a Nextcloud
  7. Notificación - Telegram notifica finalización

📱 Regenerar Resúmenes

Cuando un resumen no es satisfactorio, puedes regenerarlo:

Desde el Dashboard

  1. Clic en el archivo procesado
  2. Panel lateral se abre con transcripción/resumen
  3. Clic en " Regenerar" o tab "📁 Versiones"
  4. 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
No description provided
Readme 30 MiB
Languages
Python 98.9%
Dockerfile 0.7%
Shell 0.4%