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)
46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
"""
|
|
Base AI Provider interface (Strategy pattern)
|
|
"""
|
|
from abc import ABC, abstractmethod
|
|
from typing import Optional, Dict, Any
|
|
|
|
|
|
class AIProvider(ABC):
|
|
"""Abstract base class for AI providers"""
|
|
|
|
@abstractmethod
|
|
def summarize(self, text: str, **kwargs) -> str:
|
|
"""Generate summary of text"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def correct_text(self, text: str, **kwargs) -> str:
|
|
"""Correct grammar and spelling in text"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def classify_content(self, text: str, **kwargs) -> Dict[str, Any]:
|
|
"""Classify content into categories"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def generate_text(self, prompt: str, **kwargs) -> str:
|
|
"""Generate text from prompt"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def fix_latex(self, latex_code: str, error_log: str, **kwargs) -> str:
|
|
"""Fix broken LaTeX code based on compiler error log"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def is_available(self) -> bool:
|
|
"""Check if provider is available and configured"""
|
|
pass
|
|
|
|
@property
|
|
@abstractmethod
|
|
def name(self) -> str:
|
|
"""Provider name"""
|
|
pass
|