16
16
package io .serverlessworkflow .fluent .agentic ;
17
17
18
18
import dev .langchain4j .agentic .scope .AgenticScope ;
19
+ import io .serverlessworkflow .api .types .TaskItem ;
20
+ import io .serverlessworkflow .api .types .Workflow ;
19
21
import io .serverlessworkflow .fluent .func .spi .FuncTransformations ;
20
22
import io .serverlessworkflow .fluent .spec .BaseWorkflowBuilder ;
23
+ import java .util .ArrayList ;
24
+ import java .util .Collections ;
25
+ import java .util .List ;
21
26
import java .util .UUID ;
22
27
import java .util .function .Predicate ;
23
28
24
29
public class AgentWorkflowBuilder
25
30
extends BaseWorkflowBuilder <AgentWorkflowBuilder , AgentDoTaskBuilder , AgentTaskItemListBuilder >
26
31
implements FuncTransformations <AgentWorkflowBuilder > {
27
32
33
+ private final List <AgentDoTaskBuilder > agentDoTaskBuilders ;
34
+
28
35
AgentWorkflowBuilder (final String name , final String namespace , final String version ) {
29
36
super (name , namespace , version );
37
+ agentDoTaskBuilders = new ArrayList <>();
30
38
}
31
39
32
40
public static AgentWorkflowBuilder workflow () {
@@ -49,7 +57,7 @@ public AgentWorkflowBuilder agent(Object agent) {
49
57
public AgentWorkflowBuilder agent (String name , Object agent ) {
50
58
final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
51
59
doTaskBuilder .agent (name , agent );
52
- this . workflow . setDo (doTaskBuilder . build (). getDo () );
60
+ agentDoTaskBuilders . add (doTaskBuilder );
53
61
return this ;
54
62
}
55
63
@@ -60,7 +68,7 @@ public AgentWorkflowBuilder sequence(Object... agents) {
60
68
public AgentWorkflowBuilder sequence (String name , Object ... agents ) {
61
69
final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
62
70
doTaskBuilder .sequence (name , agents );
63
- this . workflow . setDo (doTaskBuilder . build (). getDo () );
71
+ agentDoTaskBuilders . add (doTaskBuilder );
64
72
return this ;
65
73
}
66
74
@@ -71,7 +79,7 @@ public AgentWorkflowBuilder parallel(Object... agents) {
71
79
public AgentWorkflowBuilder parallel (String name , Object ... agents ) {
72
80
final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
73
81
doTaskBuilder .parallel (name , agents );
74
- this . workflow . setDo (doTaskBuilder . build (). getDo () );
82
+ agentDoTaskBuilders . add (doTaskBuilder );
75
83
return this ;
76
84
}
77
85
@@ -83,7 +91,7 @@ public AgentWorkflowBuilder loop(
83
91
String name , Predicate <AgenticScope > exitCondition , Object ... agents ) {
84
92
final AgentDoTaskBuilder doTaskBuilder = this .newDo ();
85
93
doTaskBuilder .loop (name , loop -> loop .subAgents (agents ).exitCondition (exitCondition ));
86
- this . workflow . setDo (doTaskBuilder . build (). getDo () );
94
+ agentDoTaskBuilders . add (doTaskBuilder );
87
95
return this ;
88
96
}
89
97
@@ -96,4 +104,15 @@ protected AgentDoTaskBuilder newDo() {
96
104
protected AgentWorkflowBuilder self () {
97
105
return this ;
98
106
}
107
+
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 ;
117
+ }
99
118
}
0 commit comments