diff --git a/pymesbot/backend/main.py b/pymesbot/backend/main.py index c6c6a5f..894b4a7 100644 --- a/pymesbot/backend/main.py +++ b/pymesbot/backend/main.py @@ -34,46 +34,57 @@ OPENCLAW_TOKEN = os.getenv("OPENCLAW_TOKEN", "wlillidan1-demo-token-12345") async def chat_with_ai(message: str, session_id: str = "pymesbot") -> Optional[str]: """Send message to OpenClaw CLI""" import subprocess - import shlex + + # Forzar al agente a dar respuesta completa + message_full = ( + message + + " Dame una respuesta completa con TODOS los productos del inventario, no resumas." + ) try: # Usar OpenClaw CLI directamente - cmd = f"openclaw agent --agent main -m {shlex.quote(message)}" result = subprocess.run( - cmd, - shell=True, + ["openclaw", "agent", "--agent", "main", "-m", message_full], capture_output=True, text=True, timeout=60, cwd="/home/ren/openclaw", ) - # La CLI输出 puede tener logs al principio, buscar la respuesta - output = result.stdout - # Buscar la respuesta real (ignorar logs de gateway) + output = result.stdout + result.stderr + + # Tomar todo después de la última línea de logs lines = output.split("\n") response_lines = [] - in_response = False + capture = False for line in lines: - # Ignorar líneas de logs - if "Gateway agent" in line or "gateway" in line.lower(): + # Empezar a capturar después de estos patrones + if "Bind:" in line or "Gateway agent" in line: + capture = True continue - if "error:" in line.lower(): - continue - if line.strip(): + if capture: + # Ignorar líneas de errores + if "error:" in line.lower() and "Error:" in line: + continue response_lines.append(line) - if response_lines: - return "\n".join(response_lines[-5:]) # Últimas 5 líneas + # Limpiar response + response = "\n".join(response_lines).strip() - # Si no hay output, devolver el error - if result.stderr: - logger.error(f"[OpenClaw] Error: {result.stderr}") - return "Disculpa, tuve un problema al procesar tu mensaje. ¿Podés reformularlo?" + # Si está vacío, usar todo el output + if not response: + response = output - return "Disculpa, no pude obtener una respuesta. ¿Podés intentarlo de nuevo?" + # Limpiar caracteres especiales + response = response.encode().decode("utf-8", errors="ignore") + + # Limitar a ~2000 caracteres para mostrar más productos + if len(response) > 2000: + response = response[:2000] + "..." + + return response if response else "Disculpa, no pude obtener una respuesta." except subprocess.TimeoutExpired: logger.error("[OpenClaw] Timeout")