Spaces:
Running
Running
# core/pipeline/utils | |
import re | |
from typing import Union | |
def limpiar_contexto_bruto(contexto: str) -> str: | |
"""Optimiza el contexto eliminando saltos de línea redundantes, espacios excesivos y corrigiendo puntuación.""" | |
contexto = contexto.strip() | |
# 1️⃣ Reemplaza saltos de línea múltiples por un espacio si hay punto antes, o por punto y espacio si no hay. | |
contexto = re.sub( | |
r"\.\s*\n+", ". ", contexto | |
) # Si ya hay punto antes del salto, limpia | |
contexto = re.sub( | |
r"(?<!\.)\n+", ". ", contexto | |
) # Si NO hay punto antes, agrega punto | |
# 2️⃣ Elimina espacios múltiples | |
contexto = re.sub(r"\s{2,}", " ", contexto) | |
# 3️⃣ Corrige puntos dobles o triples | |
contexto = re.sub(r"\.{2,}", ".", contexto) | |
# 4️⃣ Elimina punto al inicio si quedó por error | |
contexto = re.sub(r"^\.\s*", "", contexto) | |
# 5️⃣ Asegura que termine en punto | |
if not contexto.endswith("."): | |
contexto += "." | |
return contexto.strip() | |
def limitar_contexto(contexto: str, max_tokens: int = 1500) -> str: | |
"""Recorta el contexto si excede el límite de tokens.""" | |
if len(contexto) > max_tokens: | |
return contexto[:max_tokens] + "\n[Contexto truncado...]" | |
return contexto | |
def validar_input(input_data: Union[str, bytes]) -> bool: | |
"""Valida que la entrada sea texto no vacío o bytes (imagen).""" | |
if isinstance(input_data, str): | |
return bool(input_data.strip()) | |
if isinstance(input_data, bytes): | |
return True | |
return False | |