fix: Improve OpenClaw response handling and increase character limit

This commit is contained in:
Renato
2026-02-15 18:28:25 +01:00
parent 3bd9c10fc2
commit b5772e159e

View File

@@ -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():
if capture:
# Ignorar líneas de errores
if "error:" in line.lower() and "Error:" in line:
continue
if line.strip():
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")