fix: Mejoras en generación de PDFs y resúmenes

- Corrige PDFGenerator para pasar contenido (no ruta)
- Agrega prompt siguiendo código.md (español, estructura académica)
- Limpia thinking tokens de respuesta AI
- Agrega skip de archivos ya procesados en watcher
- Implementa tablas LaTeX en PDFs (reportlab Table)
- Agrega load_dotenv() en main.py
- Actualiza .env con MiniMax config
- Agrega transcriptions/ a .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
renato97
2026-02-25 17:12:00 +00:00
parent ee8fc183be
commit 1f6bfa771b
5 changed files with 207 additions and 11 deletions

36
main.py
View File

@@ -5,10 +5,15 @@ CBFacil - Sistema de transcripción de audio con IA y Notion
Características:
- Polling de Nextcloud vía WebDAV
- Transcripción con Whisper (medium, GPU)
- Resúmenes con IA (GLM-4.7)
- Resúmenes con IA (MiniMax)
- Generación de PDF
- Notificaciones Telegram
"""
from dotenv import load_dotenv
# Cargar variables de entorno desde .env
load_dotenv()
import logging
import os
import sys
@@ -414,10 +419,31 @@ class PollingService:
# Extensiones de audio soportadas
audio_extensions = {".mp3", ".wav", ".m4a", ".mp4", ".webm", ".ogg", ".flac"}
pending_files = [
f for f in downloads_dir.iterdir()
if f.is_file() and f.suffix.lower() in audio_extensions and not f.name.startswith(".")
]
# Obtener transcripciones existentes para comparar
transcriptions_dir = settings.TRANSCRIPTIONS_DIR
processed_names = set()
if transcriptions_dir.exists():
for f in transcriptions_dir.iterdir():
if f.is_file() and f.suffix == ".txt":
# Extraer nombre base sin extensión
processed_names.add(f.stem)
# Filtrar solo archivos que NO han sido procesados
pending_files = []
for f in downloads_dir.iterdir():
if f.is_file() and f.suffix.lower() in audio_extensions and not f.name.startswith("."):
# Verificar si ya existe transcripción para este archivo
file_stem = f.stem
# También verificar versiones con " (copy)" o similar
if file_stem not in processed_names:
# Verificar variaciones del nombre
is_processed = False
for processed in processed_names:
if file_stem in processed or processed in file_stem:
is_processed = True
break
if not is_processed:
pending_files.append(f)
if not pending_files:
logger.debug("No pending audio files to process")