fix: Improve OpenClaw response handling and increase character limit
This commit is contained in:
@@ -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]:
|
async def chat_with_ai(message: str, session_id: str = "pymesbot") -> Optional[str]:
|
||||||
"""Send message to OpenClaw CLI"""
|
"""Send message to OpenClaw CLI"""
|
||||||
import subprocess
|
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:
|
try:
|
||||||
# Usar OpenClaw CLI directamente
|
# Usar OpenClaw CLI directamente
|
||||||
cmd = f"openclaw agent --agent main -m {shlex.quote(message)}"
|
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
cmd,
|
["openclaw", "agent", "--agent", "main", "-m", message_full],
|
||||||
shell=True,
|
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
timeout=60,
|
timeout=60,
|
||||||
cwd="/home/ren/openclaw",
|
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)
|
# 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")
|
lines = output.split("\n")
|
||||||
response_lines = []
|
response_lines = []
|
||||||
in_response = False
|
capture = False
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
# Ignorar líneas de logs
|
# Empezar a capturar después de estos patrones
|
||||||
if "Gateway agent" in line or "gateway" in line.lower():
|
if "Bind:" in line or "Gateway agent" in line:
|
||||||
|
capture = True
|
||||||
continue
|
continue
|
||||||
if "error:" in line.lower():
|
if capture:
|
||||||
|
# Ignorar líneas de errores
|
||||||
|
if "error:" in line.lower() and "Error:" in line:
|
||||||
continue
|
continue
|
||||||
if line.strip():
|
|
||||||
response_lines.append(line)
|
response_lines.append(line)
|
||||||
|
|
||||||
if response_lines:
|
# Limpiar response
|
||||||
return "\n".join(response_lines[-5:]) # Últimas 5 líneas
|
response = "\n".join(response_lines).strip()
|
||||||
|
|
||||||
# Si no hay output, devolver el error
|
# Si está vacío, usar todo el output
|
||||||
if result.stderr:
|
if not response:
|
||||||
logger.error(f"[OpenClaw] Error: {result.stderr}")
|
response = output
|
||||||
return "Disculpa, tuve un problema al procesar tu mensaje. ¿Podés reformularlo?"
|
|
||||||
|
|
||||||
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:
|
except subprocess.TimeoutExpired:
|
||||||
logger.error("[OpenClaw] Timeout")
|
logger.error("[OpenClaw] Timeout")
|
||||||
|
|||||||
Reference in New Issue
Block a user