OCR Mistral: modelo mistral-ocr-4-0, batch + fallback con reintentos y errores etiquetados
- Modelo por defecto mistral-ocr-4-0 (.env.example, config.py, docker-compose) - MistralClient: OCR en lote via API Batch (/v1/ocr) subiendo JSONL, polling y descarga de resultados - Reintentos con backoff exponencial en llamadas a Mistral (429/5xx/red); sin reintento en 401/400 - PdfProcessor: lote cuando >= umbral de paginas, fallback sincrono pagina a pagina, placeholder rastreable por pagina fallida - Errores etiquetados ([AUTH_MISTRAL], [BATCH], [NETWORK], [OCR_EMPTY], [PDF_PARSE]...) en el mensaje del job - Nuevas variables: MISTRAL_OCR_BATCH_THRESHOLD/POLL_SECONDS/TIMEOUT_SECONDS/RETRY_ATTEMPTS/RETRY_BACKOFF_BASE
This commit is contained in:
+6
-1
@@ -9,6 +9,7 @@ from fastapi.responses import FileResponse, PlainTextResponse
|
||||
from backend.app.config import settings
|
||||
from backend.app.managers.knowledge_manager import DuplicateSourceError, KnowledgeManager
|
||||
from backend.app.models.schemas import MarkdownUpdate, SubjectCreate, SubjectUpdate, WeekCreate, WeekUpdate
|
||||
from backend.app.services.errors import ProcessingError, classify_unknown_error
|
||||
from backend.app.services.ingestion_service import IngestionService
|
||||
|
||||
app = FastAPI(title="Knowledge Station", version="0.1.0")
|
||||
@@ -284,6 +285,10 @@ def process_job(job_id: int, source_id: int, use_ocr: bool, page_ranges: str | N
|
||||
try:
|
||||
document = ingestion.process_source(source_id, use_ocr=use_ocr, page_ranges=page_ranges)
|
||||
manager.update_job(job_id, "completed", "Documento procesado", document_id=document["id"])
|
||||
except ProcessingError as exc:
|
||||
manager.update_source_status(source_id, "failed")
|
||||
manager.update_job(job_id, "failed", exc.labeled)
|
||||
except Exception as exc:
|
||||
manager.update_source_status(source_id, "failed")
|
||||
manager.update_job(job_id, "failed", str(exc))
|
||||
code = classify_unknown_error(exc)
|
||||
manager.update_job(job_id, "failed", f"[{code}] {exc}")
|
||||
|
||||
Reference in New Issue
Block a user