Skip to content

Commit d314a04

Browse files
committed
one more fix
Signed-off-by: Dmitrii Tikhomirov <chani.liet@gmail.com>
1 parent 5b4c084 commit d314a04

File tree

5 files changed

+55
-389
lines changed

5 files changed

+55
-389
lines changed

experimental/fluent/agentic-langchain4j/src/test/java/io/serverlessworkflow/fluent/agentic/langchain4j/Agents.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,4 @@ public interface StyleEditor {
5959
@Agent("Edit a story to better fit a given style")
6060
String editStory(@V("story") String story, @V("style") String style);
6161
}
62-
6362
}

experimental/fluent/agentic-langchain4j/src/test/java/io/serverlessworkflow/fluent/agentic/langchain4j/WorkflowAgentsIT.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,4 @@ void sequential_agents_tests() {
7777
verify(audienceEditor).editStory(any(), eq("young adults"));
7878
verify(styleEditor).editStory(any(), eq("fantasy"));
7979
}
80-
8180
}

experimental/fluent/agentic/src/test/java/io/serverlessworkflow/fluent/agentic/AgenticWorkflowHelperIT.java

Lines changed: 55 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,20 @@
2828
import static io.serverlessworkflow.fluent.agentic.AgentsUtils.newSummaryStory;
2929
import static io.serverlessworkflow.fluent.agentic.dsl.AgenticDSL.conditional;
3030
import static io.serverlessworkflow.fluent.agentic.dsl.AgenticDSL.doTasks;
31-
import static io.serverlessworkflow.fluent.agentic.dsl.AgenticDSL.loop;
3231
import static org.assertj.core.api.Assertions.assertThat;
3332
import static org.junit.jupiter.api.Assertions.assertEquals;
3433
import static org.junit.jupiter.api.Assertions.assertNotNull;
35-
import static org.mockito.ArgumentMatchers.any;
36-
import static org.mockito.ArgumentMatchers.eq;
37-
import static org.mockito.Mockito.spy;
38-
import static org.mockito.Mockito.verify;
3934

4035
import dev.langchain4j.agentic.scope.AgenticScope;
4136
import io.serverlessworkflow.api.types.TaskItem;
4237
import io.serverlessworkflow.api.types.Workflow;
4338
import io.serverlessworkflow.api.types.func.CallTaskJava;
4439
import io.serverlessworkflow.impl.WorkflowApplication;
45-
4640
import java.util.List;
4741
import java.util.Map;
4842
import java.util.function.Function;
4943
import java.util.function.Predicate;
5044
import java.util.stream.IntStream;
51-
5245
import org.junit.jupiter.api.DisplayName;
5346
import org.junit.jupiter.api.Test;
5447

@@ -61,9 +54,9 @@ public void sequentialWorkflow() {
6154
var audienceEditor = newAudienceEditor();
6255
var styleEditor = newStyleEditor();
6356

64-
NovelCreator novelCreator = AgenticWorkflow.of(NovelCreator.class)
65-
.flow(workflow("seqFlow")
66-
.sequence(creativeWriter, audienceEditor, styleEditor))
57+
NovelCreator novelCreator =
58+
AgenticWorkflow.of(NovelCreator.class)
59+
.flow(workflow("seqFlow").sequence(creativeWriter, audienceEditor, styleEditor))
6760
.build();
6861

6962
String story = novelCreator.createNovel("dragons and wizards", "young adults", "fantasy");
@@ -76,19 +69,20 @@ public void parallelWorkflow() {
7669
var foodExpert = newFoodExpert();
7770
var movieExpert = newMovieExpert();
7871

79-
Function<AgenticScope, List<EveningPlan>> planEvening = input -> {
80-
List<String> movies = (List<String>) input.readState("movies");
81-
List<String> meals = (List<String>) input.readState("meals");
72+
Function<AgenticScope, List<EveningPlan>> planEvening =
73+
input -> {
74+
List<String> movies = (List<String>) input.readState("movies");
75+
List<String> meals = (List<String>) input.readState("meals");
8276

83-
int max = Math.min(movies.size(), meals.size());
84-
return IntStream.range(0, max)
77+
int max = Math.min(movies.size(), meals.size());
78+
return IntStream.range(0, max)
8579
.mapToObj(i -> new EveningPlan(movies.get(i), meals.get(i)))
8680
.toList();
87-
};
81+
};
8882

89-
EveningPlannerAgent eveningPlannerAgent = AgenticWorkflow.of(EveningPlannerAgent.class)
90-
.flow(workflow("parallelFlow")
91-
.parallel(foodExpert, movieExpert).outputAs(planEvening))
83+
EveningPlannerAgent eveningPlannerAgent =
84+
AgenticWorkflow.of(EveningPlannerAgent.class)
85+
.flow(workflow("parallelFlow").parallel(foodExpert, movieExpert).outputAs(planEvening))
9286
.build();
9387
List<EveningPlan> result = eveningPlannerAgent.plan("romantic");
9488
assertEquals(3, result.size());
@@ -103,11 +97,10 @@ public void loopTest() {
10397

10498
Predicate<AgenticScope> until = s -> s.readState("score", 0.0) >= 0.8;
10599

106-
StyledWriter styledWriter = AgenticWorkflow.of(StyledWriter.class)
107-
.flow(workflow("loopFlow")
108-
.agent(creativeWriter)
109-
.loop(until, styleScorer, styleEditor))
110-
.build();
100+
StyledWriter styledWriter =
101+
AgenticWorkflow.of(StyledWriter.class)
102+
.flow(workflow("loopFlow").agent(creativeWriter).loop(until, styleScorer, styleEditor))
103+
.build();
111104

112105
String story = styledWriter.writeStoryWithStyle("dragons and wizards", "comedy");
113106
assertNotNull(story);
@@ -122,13 +115,13 @@ public void loopWorkflowWithMaxIterations() {
122115
var summaryStory = newSummaryStory();
123116

124117
NovelCreator novelCreator =
125-
AgenticWorkflow.of(NovelCreator.class)
126-
.flow(
127-
workflow("seqFlow")
128-
.agent(creativeWriter)
129-
.sequence(audienceEditor, styleEditor)
130-
.agent(summaryStory))
131-
.build();
118+
AgenticWorkflow.of(NovelCreator.class)
119+
.flow(
120+
workflow("seqFlow")
121+
.agent(creativeWriter)
122+
.sequence(audienceEditor, styleEditor)
123+
.agent(summaryStory))
124+
.build();
132125

133126
String story = novelCreator.createNovel("dragons and wizards", "young adults", "fantasy");
134127
assertNotNull(story);
@@ -140,25 +133,25 @@ public void humanInTheLoop() {
140133
var astrologyAgent = newAstrologyAgent();
141134

142135
var askSign =
143-
new Function<AgenticScope, AgenticScope>() {
144-
@Override
145-
public AgenticScope apply(AgenticScope holder) {
146-
System.out.println("What's your star sign?");
147-
// var sign = System.console().readLine();
148-
holder.writeState("sign", "piscis");
149-
return holder;
150-
}
151-
};
136+
new Function<AgenticScope, AgenticScope>() {
137+
@Override
138+
public AgenticScope apply(AgenticScope holder) {
139+
System.out.println("What's your star sign?");
140+
// var sign = System.console().readLine();
141+
holder.writeState("sign", "piscis");
142+
return holder;
143+
}
144+
};
152145

153146
String result =
154-
AgenticWorkflow.of(HoroscopeAgent.class)
155-
.flow(
156-
workflow("humanInTheLoop")
157-
.inputFrom(askSign)
158-
// .tasks(tasks -> tasks.callFn(fn(askSign))) // TODO should work too
159-
.agent(astrologyAgent))
160-
.build()
161-
.invoke("My name is Mario. What is my horoscope?");
147+
AgenticWorkflow.of(HoroscopeAgent.class)
148+
.flow(
149+
workflow("humanInTheLoop")
150+
.inputFrom(askSign)
151+
// .tasks(tasks -> tasks.callFn(fn(askSign))) // TODO should work too
152+
.agent(astrologyAgent))
153+
.build()
154+
.invoke("My name is Mario. What is my horoscope?");
162155

163156
assertNotNull(result);
164157
}
@@ -171,9 +164,9 @@ public void errorHandling() {
171164
var styleEditor = newStyleEditor();
172165

173166
Workflow wf =
174-
workflow("seqFlow")
175-
.sequence("process", creativeWriter, audienceEditor, styleEditor)
176-
.build();
167+
workflow("seqFlow")
168+
.sequence("process", creativeWriter, audienceEditor, styleEditor)
169+
.build();
177170

178171
List<TaskItem> items = wf.getDo();
179172
assertThat(items).hasSize(3);
@@ -184,9 +177,9 @@ public void errorHandling() {
184177
items.forEach(it -> assertThat(it.getTask().getCallTask()).isInstanceOf(CallTaskJava.class));
185178

186179
Map<String, Object> input =
187-
Map.of(
188-
"style", "fantasy",
189-
"audience", "young adults");
180+
Map.of(
181+
"style", "fantasy",
182+
"audience", "young adults");
190183

191184
Map<String, Object> result;
192185
try (WorkflowApplication app = WorkflowApplication.builder().build()) {
@@ -209,14 +202,14 @@ public void conditionalWorkflow() {
209202
var legalExpert = newLegalExpert();
210203

211204
Workflow wf =
212-
workflow("conditional")
213-
.sequence("process", category)
214-
.tasks(
215-
doTasks(
216-
conditional(RequestCategory.MEDICAL::equals, medicalExpert),
217-
conditional(RequestCategory.TECHNICAL::equals, technicalExpert),
218-
conditional(RequestCategory.LEGAL::equals, legalExpert)))
219-
.build();
205+
workflow("conditional")
206+
.sequence("process", category)
207+
.tasks(
208+
doTasks(
209+
conditional(RequestCategory.MEDICAL::equals, medicalExpert),
210+
conditional(RequestCategory.TECHNICAL::equals, technicalExpert),
211+
conditional(RequestCategory.LEGAL::equals, legalExpert)))
212+
.build();
220213

221214
Map<String, Object> input = Map.of("question", "What is the best treatment for a common cold?");
222215

@@ -229,5 +222,4 @@ public void conditionalWorkflow() {
229222

230223
assertThat(result).containsKey("response");
231224
}
232-
233225
}

experimental/fluent/agentic/src/test/java/io/serverlessworkflow/fluent/agentic/Agents.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,5 +406,4 @@ interface EveningPlannerAgent {
406406
@Agent
407407
List<EveningPlan> plan(@V("mood") String mood);
408408
}
409-
410409
}

0 commit comments

Comments
 (0)