Skip to content

Commit 56f5879

Browse files
committed
Chained method calls should accumulate state rather than overwrite previous values
Signed-off-by: Dmitrii Tikhomirov <chani.liet@gmail.com>
1 parent 666cdb3 commit 56f5879

2 files changed

Lines changed: 25 additions & 5 deletions

File tree

experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentWorkflowBuilder.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@
1616
package io.serverlessworkflow.fluent.agentic;
1717

1818
import dev.langchain4j.agentic.scope.AgenticScope;
19+
import io.serverlessworkflow.api.types.TaskItem;
1920
import io.serverlessworkflow.fluent.func.spi.FuncTransformations;
2021
import io.serverlessworkflow.fluent.spec.BaseWorkflowBuilder;
22+
import java.util.ArrayList;
23+
import java.util.Collections;
24+
import java.util.List;
2125
import java.util.UUID;
2226
import java.util.function.Predicate;
2327

@@ -49,7 +53,7 @@ public AgentWorkflowBuilder agent(Object agent) {
4953
public AgentWorkflowBuilder agent(String name, Object agent) {
5054
final AgentDoTaskBuilder doTaskBuilder = this.newDo();
5155
doTaskBuilder.agent(name, agent);
52-
this.workflow.setDo(doTaskBuilder.build().getDo());
56+
setDo(doTaskBuilder);
5357
return this;
5458
}
5559

@@ -60,7 +64,7 @@ public AgentWorkflowBuilder sequence(Object... agents) {
6064
public AgentWorkflowBuilder sequence(String name, Object... agents) {
6165
final AgentDoTaskBuilder doTaskBuilder = this.newDo();
6266
doTaskBuilder.sequence(name, agents);
63-
this.workflow.setDo(doTaskBuilder.build().getDo());
67+
setDo(doTaskBuilder);
6468
return this;
6569
}
6670

@@ -71,7 +75,7 @@ public AgentWorkflowBuilder parallel(Object... agents) {
7175
public AgentWorkflowBuilder parallel(String name, Object... agents) {
7276
final AgentDoTaskBuilder doTaskBuilder = this.newDo();
7377
doTaskBuilder.parallel(name, agents);
74-
this.workflow.setDo(doTaskBuilder.build().getDo());
78+
setDo(doTaskBuilder);
7579
return this;
7680
}
7781

@@ -83,7 +87,7 @@ public AgentWorkflowBuilder loop(
8387
String name, Predicate<AgenticScope> exitCondition, Object... agents) {
8488
final AgentDoTaskBuilder doTaskBuilder = this.newDo();
8589
doTaskBuilder.loop(name, loop -> loop.subAgents(agents).exitCondition(exitCondition));
86-
this.workflow.setDo(doTaskBuilder.build().getDo());
90+
setDo(doTaskBuilder);
8791
return this;
8892
}
8993

@@ -96,4 +100,14 @@ protected AgentDoTaskBuilder newDo() {
96100
protected AgentWorkflowBuilder self() {
97101
return this;
98102
}
103+
104+
private void setDo(AgentDoTaskBuilder doTaskBuilder) {
105+
if (workflow.getDo() != null) {
106+
List<TaskItem> existing = new ArrayList<>(workflow.getDo());
107+
existing.addAll(doTaskBuilder.build().getDo());
108+
this.workflow.setDo(Collections.unmodifiableList(existing));
109+
} else {
110+
this.workflow.setDo(doTaskBuilder.build().getDo());
111+
}
112+
}
99113
}

fluent/spec/src/main/java/io/serverlessworkflow/fluent/spec/BaseWorkflowBuilder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,12 @@
1919
import io.serverlessworkflow.api.types.Export;
2020
import io.serverlessworkflow.api.types.Input;
2121
import io.serverlessworkflow.api.types.Output;
22+
import io.serverlessworkflow.api.types.TaskItem;
2223
import io.serverlessworkflow.api.types.Workflow;
2324
import io.serverlessworkflow.fluent.spec.spi.TransformationHandlers;
25+
import java.util.ArrayList;
26+
import java.util.Collections;
27+
import java.util.List;
2428
import java.util.UUID;
2529
import java.util.function.Consumer;
2630

@@ -90,7 +94,9 @@ public SELF tasks(Consumer<DBuilder> doTaskConsumer) {
9094
if (this.workflow.getDo() == null) {
9195
this.workflow.setDo(doTaskBuilder.build().getDo());
9296
} else {
93-
this.workflow.getDo().addAll(doTaskBuilder.build().getDo());
97+
List<TaskItem> existingTasks = new ArrayList<>(this.workflow.getDo());
98+
existingTasks.addAll(doTaskBuilder.build().getDo());
99+
this.workflow.setDo(Collections.unmodifiableList(existingTasks));
94100
}
95101
return self();
96102
}

0 commit comments

Comments
 (0)