From f21c8d6961147c62640da256342f729e0c1a1d8d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 18 Sep 2026 05:57:18 +0000 Subject: [PATCH] feat: improve llm json parsing in promotion daemon Co-authored-by: LVT-ENG <214667862+LVT-ENG@users.noreply.github.com> --- scripts/daemon_promociones.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/scripts/daemon_promociones.py b/scripts/daemon_promociones.py index fa0fe883b6..36f4228c6a 100755 --- a/scripts/daemon_promociones.py +++ b/scripts/daemon_promociones.py @@ -5,6 +5,7 @@ # y publica los archivos JSON de promociones en la API. import os +import re import sys import json import time @@ -63,10 +64,22 @@ def procesar_archivos( with open(ruta_archivo, "r", encoding="utf-8") as f: contenido_archivo = f.read() + match = re.search(r"```(?:json)?\s*(\{.*?\})\s*```", contenido_archivo, re.DOTALL) + if match: + contenido_limpio = match.group(1).strip() + else: + contenido_limpio = contenido_archivo.strip() + try: - datos_cargados = json.loads(contenido_archivo) + datos_cargados = json.loads(contenido_limpio) except json.JSONDecodeError as e: - datos_cargados = json.loads(contenido_archivo[:e.pos]) + if e.pos > 0: + try: + datos_cargados = json.loads(contenido_limpio[:e.pos]) + except json.JSONDecodeError as err: + raise ValueError("Error parseando JSON incluso con el texto extra cortado.") from err + else: + raise if not isinstance(datos_cargados, dict): raise ValueError("El archivo JSON debe contener un diccionario")