1717
1818import dev .langchain4j .agentic .scope .AgenticScope ;
1919import io .serverlessworkflow .api .types .TaskItem ;
20+ import io .serverlessworkflow .api .types .Workflow ;
2021import io .serverlessworkflow .fluent .func .spi .FuncTransformations ;
2122import io .serverlessworkflow .fluent .spec .BaseWorkflowBuilder ;
2223import java .util .ArrayList ;
@@ -29,8 +30,11 @@ public class AgentWorkflowBuilder
2930 extends BaseWorkflowBuilder <AgentWorkflowBuilder , AgentDoTaskBuilder , AgentTaskItemListBuilder >
3031 implements FuncTransformations <AgentWorkflowBuilder > {
3132
33+ private final List <AgentDoTaskBuilder > agentDoTaskBuilders ;
34+
3235 AgentWorkflowBuilder (final String name , final String namespace , final String version ) {
3336 super (name , namespace , version );
37+ agentDoTaskBuilders = new ArrayList <>();
3438 }
3539
3640 public static AgentWorkflowBuilder workflow () {
@@ -53,7 +57,7 @@ public AgentWorkflowBuilder agent(Object agent) {
5357 public AgentWorkflowBuilder agent (String name , Object agent ) {
5458 final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
5559 doTaskBuilder .agent (name , agent );
56- setDo (doTaskBuilder );
60+ agentDoTaskBuilders . add (doTaskBuilder );
5761 return this ;
5862 }
5963
@@ -64,7 +68,7 @@ public AgentWorkflowBuilder sequence(Object... agents) {
6468 public AgentWorkflowBuilder sequence (String name , Object ... agents ) {
6569 final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
6670 doTaskBuilder .sequence (name , agents );
67- setDo (doTaskBuilder );
71+ agentDoTaskBuilders . add (doTaskBuilder );
6872 return this ;
6973 }
7074
@@ -75,7 +79,7 @@ public AgentWorkflowBuilder parallel(Object... agents) {
7579 public AgentWorkflowBuilder parallel (String name , Object ... agents ) {
7680 final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
7781 doTaskBuilder .parallel (name , agents );
78- setDo (doTaskBuilder );
82+ agentDoTaskBuilders . add (doTaskBuilder );
7983 return this ;
8084 }
8185
@@ -87,7 +91,7 @@ public AgentWorkflowBuilder loop(
8791 String name , Predicate <AgenticScope > exitCondition , Object ... agents ) {
8892 final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
8993 doTaskBuilder .loop (name , loop -> loop .subAgents (agents ).exitCondition (exitCondition ));
90- setDo (doTaskBuilder );
94+ agentDoTaskBuilders . add (doTaskBuilder );
9195 return this ;
9296 }
9397
@@ -101,13 +105,14 @@ protected AgentWorkflowBuilder self() {
101105 return this ;
102106 }
103107
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- }
108+ @ Override
109+ public Workflow build () {
110+ List <TaskItem > items = new ArrayList <>(workflow .getDo ());
111+ this .agentDoTaskBuilders .stream ()
112+ .map (AgentDoTaskBuilder ::build )
113+ .forEach (b -> items .addAll (b .getDo ()));
114+ this .workflow .setDo (Collections .unmodifiableList (items ));
115+ this .agentDoTaskBuilders .clear ();
116+ return this .workflow ;
112117 }
113118}
0 commit comments