From 7fdf2e27b327b571d65378bf6cd80f04d73056bf Mon Sep 17 00:00:00 2001 From: Matthew Zhou Date: Tue, 20 May 2025 11:58:35 -0700 Subject: [PATCH] feat: Improve `run_code` output format (#2270) --- letta/services/tool_executor/tool_executor.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/letta/services/tool_executor/tool_executor.py b/letta/services/tool_executor/tool_executor.py index 92b2aab7..14369699 100644 --- a/letta/services/tool_executor/tool_executor.py +++ b/letta/services/tool_executor/tool_executor.py @@ -1,3 +1,4 @@ +import json import math import traceback from abc import ABC, abstractmethod @@ -723,8 +724,21 @@ class LettaBuiltinToolExecutor(ToolExecutor): # Leave empty for python params["language"] = language - res = await sbx.run_code(**params) - return str(res) + res = self._llm_friendly_result(await sbx.run_code(**params)) + return json.dumps(res, ensure_ascii=False) + + def _llm_friendly_result(self, res): + out = { + "results": [r.text if hasattr(r, "text") else str(r) for r in res.results], + "logs": { + "stdout": getattr(res.logs, "stdout", []), + "stderr": getattr(res.logs, "stderr", []), + }, + } + err = getattr(res, "error", None) + if err is not None: + out["error"] = err + return out async def web_search(agent_state: "AgentState", query: str) -> str: """