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)
This commit is contained in:
renato97
2026-02-07 20:50:27 +00:00
parent 915f827305
commit dcf887c510
15 changed files with 4309 additions and 409 deletions

221
latex/resumen.md Normal file
View File

@@ -0,0 +1,221 @@
# Prompt para Generar Resúmenes Académicos en LaTeX
## Instrucciones de Uso
1. Transcribir la clase (audio a texto) usando Whisper o similar
2. Tener el material bibliográfico en formato digital (PDF escaneado con OCR o texto)
3. Copiar el prompt de abajo y completar los campos entre `[corchetes]`
---
## Prompt Template
```
Sos un asistente académico experto en [MATERIA]. Tu tarea es crear un resumen extenso y detallado en LaTeX basado en la transcripción de clase y el material bibliográfico que te proporciono.
## Material de entrada
### Transcripción de clase:
[PEGAR TRANSCRIPCIÓN AQUÍ]
### Material bibliográfico de apoyo:
[PEGAR TEXTO DEL LIBRO/APUNTE O INDICAR QUE LO SUBISTE COMO ARCHIVO]
## Requisitos del resumen
### Extensión y profundidad:
- Mínimo 10 páginas
- Cubrir TODOS los temas mencionados en clase
- Expandir cada concepto con definiciones formales del material bibliográfico
- No resumir demasiado: preferir explicaciones completas
### Estructura obligatoria:
1. Portada con título, materia, fecha y tema
2. Índice (table of contents)
3. Introducción contextualizando el tema
4. Desarrollo organizado en secciones y subsecciones
5. Tablas comparativas cuando haya clasificaciones o tipos
6. Diagramas con TikZ cuando haya procesos, flujos o relaciones
7. Cajas destacadas para definiciones, ejemplos y conceptos importantes
8. Fórmulas matemáticas cuando corresponda
9. Glosario de términos técnicos al final
10. Referencias al material bibliográfico
### Formato LaTeX requerido:
```latex
\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish,provide=*]{babel}
\usepackage{amsmath,amssymb}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning,shapes.geometric,calc}
\usepackage{booktabs}
\usepackage{enumitem}
\usepackage{fancyhdr}
\usepackage{titlesec}
\usepackage{tcolorbox}
\usepackage{array}
\usepackage{multirow}
\geometry{margin=2.5cm}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{[MATERIA] - CBC}
\fancyhead[R]{Clase [N]}
\fancyfoot[C]{\thepage}
% Cajas para destacar contenido
\newtcolorbox{definicion}[1][]{
colback=blue!5!white,
colframe=blue!75!black,
fonttitle=\bfseries,
title=#1
}
\newtcolorbox{importante}[1][]{
colback=red!5!white,
colframe=red!75!black,
fonttitle=\bfseries,
title=#1
}
\newtcolorbox{ejemplo}[1][]{
colback=green!5!white,
colframe=green!50!black,
fonttitle=\bfseries,
title=#1
}
```
### Estilo de contenido:
- Usar \textbf{} para términos clave en su primera aparición
- Usar \textit{} para énfasis y palabras en otros idiomas
- Incluir ejemplos concretos mencionados en clase
- Relacionar teoría con casos prácticos
- Mantener el tono académico pero accesible
- Si el profesor hizo énfasis en algo ("esto es importante", "esto entra en el parcial"), destacarlo en caja roja
### Elementos visuales:
- Tablas con booktabs para comparaciones (usar \toprule, \midrule, \bottomrule)
- Diagramas TikZ para flujos, ciclos o relaciones entre conceptos
- Listas itemize/enumerate para secuencias o características
- Fórmulas centradas con equation o align para expresiones matemáticas
## Ejemplo de calidad esperada
Para cada concepto principal:
1. Definición formal (del libro)
2. Explicación en palabras simples (como lo explicó el profesor)
3. Ejemplo concreto
4. Relación con otros conceptos
5. Por qué es importante / para qué sirve
## Output
Generá el archivo .tex completo, listo para compilar con pdflatex (dos pasadas para el índice).
```
---
## Comandos para compilar
```bash
# Compilar (dos veces para índice)
pdflatex resumen_clase_X.tex
pdflatex resumen_clase_X.tex
# Abrir PDF
xdg-open resumen_clase_X.pdf # Linux
open resumen_clase_X.pdf # macOS
```
---
## Pipeline completo
### 1. Transcripción de audio (con Whisper)
```bash
# Instalar whisper
pip install openai-whisper
# Transcribir audio de clase
whisper "clase_X.mp3" --language Spanish --output_format txt
```
### 2. OCR de PDFs escaneados (con marker-pdf)
```bash
# Crear entorno virtual
python -m venv .venv
source .venv/bin/activate
# Instalar marker
pip install marker-pdf
# Procesar PDF (usa GPU si está disponible)
marker_single "libro_capitulo_X.pdf" --output_dir output/
```
### 3. Generar resumen
Usar el prompt de arriba con:
- Claude (Anthropic)
- GPT-4 (OpenAI)
- Gemini (Google)
### 4. Compilar LaTeX
```bash
pdflatex resumen.tex && pdflatex resumen.tex
```
---
## Tips para mejores resultados
1. **Transcripción completa**: No cortar la transcripción, la IA necesita todo el contexto
2. **Material bibliográfico**: Incluir los capítulos específicos, no todo el libro
3. **Ser específico**: Indicar la materia, el nivel (CBC, carrera, posgrado) y el enfoque del profesor
4. **Iterar**: Si el primer resultado es corto, pedir "expandí la sección X con más detalle"
5. **Diagramas**: Si hay un diagrama importante, describirlo y pedir que lo haga en TikZ
6. **Revisar**: La IA puede cometer errores conceptuales, siempre verificar con el material
---
## Materias donde funciona bien
- Economía (micro/macro)
- Física
- Química
- Matemática (álgebra, análisis)
- Biología
- Sociología
- Historia
- Derecho (con adaptaciones)
- Cualquier materia con contenido teórico estructurado
---
## Ejemplo de uso rápido
```
Sos un asistente académico experto en Física. Creá un resumen extenso en LaTeX sobre "Cinemática" basado en esta transcripción de clase del CBC:
[pegar transcripción]
Material de apoyo: Capítulo 2 de Serway "Movimiento en una dimensión":
[pegar texto del capítulo]
Incluí:
- Definiciones de posición, velocidad, aceleración
- Fórmulas del MRU y MRUV
- Diagramas de movimiento con TikZ
- Gráficos posición-tiempo y velocidad-tiempo
- Ejemplos resueltos paso a paso
- Glosario de términos
```