From 24ea187a4e7ec62b07d4f2ccfc4f2c970e32540d Mon Sep 17 00:00:00 2001
From: Ming <tslmy@users.noreply.github.com>
Date: Thu, 21 Mar 2024 14:16:36 -0700
Subject: [PATCH] [Agent using tools] Upon exception, say so, so that Agent can
 correct itself. (#12137)

---
 .../llama_index/core/agent/react/step.py      | 20 +++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/llama-index-core/llama_index/core/agent/react/step.py b/llama-index-core/llama_index/core/agent/react/step.py
index 70187062f..7253d19b5 100644
--- a/llama-index-core/llama_index/core/agent/react/step.py
+++ b/llama-index-core/llama_index/core/agent/react/step.py
@@ -240,7 +240,15 @@ class ReActAgentWorker(BaseAgentWorker):
                 EventPayload.TOOL: tool.metadata,
             },
         ) as event:
-            tool_output = tool.call(**reasoning_step.action_input)
+            try:
+                tool_output = tool.call(**reasoning_step.action_input)
+            except Exception as e:
+                tool_output = ToolOutput(
+                    content=f"Error: {e!s}",
+                    tool_name=tool.metadata.name,
+                    raw_input={"kwargs": reasoning_step.action_input},
+                    raw_output=e,
+                )
             event.on_end(payload={EventPayload.FUNCTION_OUTPUT: str(tool_output)})
 
         task.extra_state["sources"].append(tool_output)
@@ -276,7 +284,15 @@ class ReActAgentWorker(BaseAgentWorker):
                 EventPayload.TOOL: tool.metadata,
             },
         ) as event:
-            tool_output = await tool.acall(**reasoning_step.action_input)
+            try:
+                tool_output = await tool.acall(**reasoning_step.action_input)
+            except Exception as e:
+                tool_output = ToolOutput(
+                    content=f"Error: {e!s}",
+                    tool_name=tool.metadata.name,
+                    raw_input={"kwargs": reasoning_step.action_input},
+                    raw_output=e,
+                )
             event.on_end(payload={EventPayload.FUNCTION_OUTPUT: str(tool_output)})
 
         task.extra_state["sources"].append(tool_output)
-- 
GitLab