Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class AguiAdapterConfig {
private final boolean emitStateEvents;
private final boolean emitToolCallArgs;
private final boolean enableReasoning;
private final boolean enableActingChunk;
private final Duration runTimeout;
private final String defaultAgentId;

Expand All @@ -38,6 +39,7 @@ private AguiAdapterConfig(Builder builder) {
this.emitStateEvents = builder.emitStateEvents;
this.emitToolCallArgs = builder.emitToolCallArgs;
this.enableReasoning = builder.enableReasoning;
this.enableActingChunk = builder.enableActingChunk;
this.runTimeout = builder.runTimeout;
this.defaultAgentId = builder.defaultAgentId;
}
Expand Down Expand Up @@ -82,6 +84,18 @@ public boolean isEnableReasoning() {
return enableReasoning;
}

/**
* Check if intermediate acting chunk emissions should be included.
*
* <p>When enabled, intermediate tool execution outputs (such as progress)
* will be streamed to the frontend.
*
* @return true if acting chunks should be included
*/
public boolean isEnableActingChunk() {
return enableActingChunk;
}

/**
* Get the run timeout duration.
*
Expand Down Expand Up @@ -127,6 +141,7 @@ public static class Builder {
private boolean emitStateEvents = true;
private boolean emitToolCallArgs = true;
private boolean enableReasoning = false;
private boolean enableActingChunk = false;
private Duration runTimeout = Duration.ofMinutes(10);
private String defaultAgentId;

Expand Down Expand Up @@ -178,6 +193,20 @@ public Builder enableReasoning(boolean enableReasoning) {
return this;
}

/**
* Set whether to enable acting chunk emissions.
*
* <p>When enabled, tools can emit intermediate chunks (e.g., Custom events for progress
* or real-time logs) during execution. Default is false.
*
* @param enableActingChunk true to enable acting chunks
* @return This builder
*/
public Builder enableActingChunk(boolean enableActingChunk) {
this.enableActingChunk = enableActingChunk;
return this;
}
Comment thread
jujn marked this conversation as resolved.

/**
* Set the run timeout duration.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ public Flux<AguiEvent> run(RunAgentInput input) {
StreamOptions.builder()
.eventTypes(EventType.ALL)
.incremental(true)
.includeActingChunk(config.isEnableActingChunk())

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The StreamOptions.Builder.includeActingChunk defaults to true in core, but this PR explicitly overrides it to false (via config.isEnableActingChunk()). While this does NOT change user-visible behavior (acting chunks are already silently dropped by convertEvent's event.isLast() guard), the inverted default may confuse future readers. Consider adding a one-line comment: // Explicitly gate acting chunks behind config — AGUI event conversion for chunks is not yet implemented.

.build();

// Track state for event conversion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ void testDefaultConfig() {
assertTrue(config.isEmitStateEvents());
assertTrue(config.isEmitToolCallArgs());
assertFalse(config.isEnableReasoning()); // Default should be false
assertFalse(config.isEnableActingChunk());
assertEquals(Duration.ofMinutes(10), config.getRunTimeout());
assertNull(config.getDefaultAgentId());
}
Expand All @@ -51,6 +52,8 @@ void testBuilderWithDefaults() {
assertEquals(ToolMergeMode.MERGE_FRONTEND_PRIORITY, config.getToolMergeMode());
assertTrue(config.isEmitStateEvents());
assertTrue(config.isEmitToolCallArgs());
assertFalse(config.isEnableReasoning());
assertFalse(config.isEnableActingChunk());
assertEquals(Duration.ofMinutes(10), config.getRunTimeout());
}

Expand Down Expand Up @@ -95,6 +98,31 @@ void testBuilderEmitToolCallArgs() {
assertTrue(configEnabled.isEmitToolCallArgs());
}

@Test
void testBuilderEnableReasoning() {
AguiAdapterConfig configDisabled =
AguiAdapterConfig.builder().enableReasoning(false).build();

assertFalse(configDisabled.isEnableReasoning());

AguiAdapterConfig configEnabled = AguiAdapterConfig.builder().enableReasoning(true).build();

assertTrue(configEnabled.isEnableReasoning());
}

@Test
Comment thread
jujn marked this conversation as resolved.
void testBuilderEnableActingChunk() {
AguiAdapterConfig configDisabled =
AguiAdapterConfig.builder().enableActingChunk(false).build();

assertFalse(configDisabled.isEnableActingChunk());

AguiAdapterConfig configEnabled =
AguiAdapterConfig.builder().enableActingChunk(true).build();

assertTrue(configEnabled.isEnableActingChunk());
}

@Test
void testBuilderRunTimeout() {
Duration customTimeout = Duration.ofMinutes(30);
Expand Down Expand Up @@ -133,6 +161,7 @@ void testBuilderFullConfiguration() {
.emitStateEvents(false)
.emitToolCallArgs(false)
.enableReasoning(true)
.enableActingChunk(true)
.runTimeout(Duration.ofHours(1))
.defaultAgentId("my-agent")
.build();
Expand All @@ -141,6 +170,7 @@ void testBuilderFullConfiguration() {
assertFalse(config.isEmitStateEvents());
assertFalse(config.isEmitToolCallArgs());
assertTrue(config.isEnableReasoning());
assertTrue(config.isEnableActingChunk());
assertEquals(Duration.ofHours(1), config.getRunTimeout());
assertEquals("my-agent", config.getDefaultAgentId());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
* agent-id-header: X-Agent-Id
* enable-path-routing: true
* enable-reasoning: false
* enable-acting-chunk: false
* </pre>
*/
@ConfigurationProperties(prefix = "agentscope.agui")
Expand Down Expand Up @@ -73,6 +74,14 @@ public class AguiProperties {
*/
private boolean enableReasoning = false;

/**
* Whether to enable acting chunk emissions.
*
* <p>When enabled, tools can emit intermediate chunks (e.g., Custom events for progress
* or real-time logs) during execution.
*/
private boolean enableActingChunk = false;

/** Default agent ID to use when not specified in the request. */
private String defaultAgentId = "default";

Expand Down Expand Up @@ -176,6 +185,14 @@ public void setEnableReasoning(boolean enableReasoning) {
this.enableReasoning = enableReasoning;
}

public boolean isEnableActingChunk() {
return enableActingChunk;
}

public void setEnableActingChunk(boolean enableActingChunk) {
this.enableActingChunk = enableActingChunk;
}

public String getDefaultAgentId() {
return defaultAgentId;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public AguiMvcController aguiMvcController(
.emitStateEvents(props.isEmitStateEvents())
.emitToolCallArgs(props.isEmitToolCallArgs())
.enableReasoning(props.isEnableReasoning())
.enableActingChunk(props.isEnableActingChunk())
.defaultAgentId(props.getDefaultAgentId())
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ public AguiWebFluxHandler aguiWebFluxHandler(
.emitStateEvents(props.isEmitStateEvents())
.emitToolCallArgs(props.isEmitToolCallArgs())
.enableReasoning(props.isEnableReasoning())
.enableActingChunk(props.isEnableActingChunk())
.defaultAgentId(props.getDefaultAgentId())
.build();

Expand Down
Loading