From 8fd337366c8db03361de8303db13b8edc443d1f9 Mon Sep 17 00:00:00 2001 From: aihai <1072827+aihai@users.noreply.github.com> Date: Fri, 27 Feb 2026 17:43:06 +0800 Subject: [PATCH 1/2] fix(core): When ReactAgent reach maxIters, msg contains MAX_ITERATIONS --- .../java/io/agentscope/core/ReActAgent.java | 14 +++++--- .../agentscope/core/agent/ReActAgentTest.java | 32 +++++++++++-------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java b/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java index 2de490fa0..ed97fc49d 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java +++ b/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java @@ -65,6 +65,11 @@ import io.agentscope.core.tool.ToolResultMessageBuilder; import io.agentscope.core.tool.Toolkit; import io.agentscope.core.util.MessageUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; @@ -74,10 +79,6 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; /** * ReAct (Reasoning and Acting) Agent implementation. @@ -648,7 +649,10 @@ protected Mono summarizing() { postEvent -> { Msg finalMsg = postEvent - .getSummaryMessage(); + .getSummaryMessage() + .withGenerateReason( + GenerateReason + .MAX_ITERATIONS); memory.addMessage(finalMsg); return finalMsg; })); diff --git a/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java b/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java index 46536c692..2b304692b 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java @@ -15,13 +15,6 @@ */ package io.agentscope.core.agent; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - import io.agentscope.core.ReActAgent; import io.agentscope.core.agent.test.MockModel; import io.agentscope.core.agent.test.MockToolkit; @@ -29,6 +22,7 @@ import io.agentscope.core.agent.test.TestUtils; import io.agentscope.core.memory.InMemoryMemory; import io.agentscope.core.message.ContentBlock; +import io.agentscope.core.message.GenerateReason; import io.agentscope.core.message.Msg; import io.agentscope.core.message.MsgRole; import io.agentscope.core.message.TextBlock; @@ -38,14 +32,22 @@ import io.agentscope.core.model.ChatUsage; import io.agentscope.core.tool.Toolkit; import io.agentscope.core.util.JsonUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + import java.time.Duration; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * Unit tests for ReActAgent class. @@ -476,9 +478,13 @@ void testMaxIterations() { // Get response with timeout // Verify it completes within reasonable time (not infinite loop) - agent.call(userMsg) - .timeout(Duration.ofMillis(TestConstants.DEFAULT_TEST_TIMEOUT_MS)) - .block(Duration.ofMillis(TestConstants.DEFAULT_TEST_TIMEOUT_MS)); + Msg response = + agent.call(userMsg) + .timeout(Duration.ofMillis(TestConstants.DEFAULT_TEST_TIMEOUT_MS)) + .block(Duration.ofMillis(TestConstants.DEFAULT_TEST_TIMEOUT_MS)); + + // Verify max iterations generate reason was respected + assertEquals(GenerateReason.MAX_ITERATIONS, response.getGenerateReason()); // Verify max iterations was respected assertTrue( From 587e1d6cf9401edef2207592ca613995e7d9e47a Mon Sep 17 00:00:00 2001 From: aihai <1072827+aihai@users.noreply.github.com> Date: Fri, 27 Feb 2026 17:53:26 +0800 Subject: [PATCH 2/2] fix(core): When ReactAgent reach maxIters, msg contains MAX_ITERATIONS --- .../java/io/agentscope/core/ReActAgent.java | 9 ++++---- .../agentscope/core/agent/ReActAgentTest.java | 21 +++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java b/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java index ed97fc49d..ecf3693b8 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java +++ b/agentscope-core/src/main/java/io/agentscope/core/ReActAgent.java @@ -65,11 +65,6 @@ import io.agentscope.core.tool.ToolResultMessageBuilder; import io.agentscope.core.tool.Toolkit; import io.agentscope.core.util.MessageUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; @@ -79,6 +74,10 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; /** * ReAct (Reasoning and Acting) Agent implementation. diff --git a/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java b/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java index 2b304692b..11faa9146 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/agent/ReActAgentTest.java @@ -15,6 +15,13 @@ */ package io.agentscope.core.agent; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + import io.agentscope.core.ReActAgent; import io.agentscope.core.agent.test.MockModel; import io.agentscope.core.agent.test.MockToolkit; @@ -32,22 +39,14 @@ import io.agentscope.core.model.ChatUsage; import io.agentscope.core.tool.Toolkit; import io.agentscope.core.util.JsonUtils; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - import java.time.Duration; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; /** * Unit tests for ReActAgent class.