From 073d5e801779d6390bc88572e51d74eec47f20b6 Mon Sep 17 00:00:00 2001 From: Google Team Member Date: Tue, 23 Sep 2025 13:58:06 -0700 Subject: [PATCH] fix!: do not silently fail when an internal error occurs PiperOrigin-RevId: 810571478 --- .../java/com/google/adk/tools/FunctionTool.java | 3 ++- .../java/com/google/adk/tools/FunctionToolTest.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/google/adk/tools/FunctionTool.java b/core/src/main/java/com/google/adk/tools/FunctionTool.java index 1159359b8..167e1746d 100644 --- a/core/src/main/java/com/google/adk/tools/FunctionTool.java +++ b/core/src/main/java/com/google/adk/tools/FunctionTool.java @@ -173,7 +173,8 @@ public Single> runAsync(Map args, ToolContex return this.call(args, toolContext).defaultIfEmpty(ImmutableMap.of()); } catch (Exception e) { e.printStackTrace(); - return Single.just(ImmutableMap.of()); + return Single.just( + ImmutableMap.of("status", "error", "message", "An internal error occurred.")); } } diff --git a/core/src/test/java/com/google/adk/tools/FunctionToolTest.java b/core/src/test/java/com/google/adk/tools/FunctionToolTest.java index 83d9db782..af9d7bf43 100644 --- a/core/src/test/java/com/google/adk/tools/FunctionToolTest.java +++ b/core/src/test/java/com/google/adk/tools/FunctionToolTest.java @@ -350,6 +350,15 @@ public void call_withParameterizedListParam() throws Exception { assertThat(result).containsExactly("listParam", listParam); } + @Test + public void call_throwsException_returnsInternalError() { + FunctionTool tool = FunctionTool.create(Functions.class, "throwException"); + + Map result = tool.runAsync(ImmutableMap.of(), null).blockingGet(); + + assertThat(result).containsExactly("status", "error", "message", "An internal error occurred."); + } + @Test public void create_withPojoParamWithGettersAndSetters() { FunctionTool tool = FunctionTool.create(Functions.class, "pojoParamWithGettersAndSetters"); @@ -603,6 +612,10 @@ public static void voidReturnWithSchemaAndToolContext( String param2, ToolContext toolContext) {} + public static void throwException() { + throw new RuntimeException("test exception"); + } + public static void voidReturnWithoutSchema() {} public static ImmutableMap returnsMap() {