diff --git a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ConditionalAgentServiceImpl.java b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ConditionalAgentServiceImpl.java index 2b3b0e2c..0aff4aaf 100644 --- a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ConditionalAgentServiceImpl.java +++ b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ConditionalAgentServiceImpl.java @@ -15,11 +15,14 @@ */ package io.serverlessworkflow.fluent.agentic.langchain4j; +import dev.langchain4j.agentic.agent.AgentRequest; +import dev.langchain4j.agentic.agent.AgentResponse; import dev.langchain4j.agentic.internal.AgentExecutor; import dev.langchain4j.agentic.scope.AgenticScope; import dev.langchain4j.agentic.workflow.ConditionalAgentService; import java.util.Arrays; import java.util.List; +import java.util.function.Consumer; import java.util.function.Predicate; public class ConditionalAgentServiceImpl @@ -45,6 +48,18 @@ public ConditionalAgentService subAgents(List agentExecutors) return this.subAgents(agentExecutors.toArray()); } + @Override + public ConditionalAgentService beforeAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } + + @Override + public ConditionalAgentService afterAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } + @Override public ConditionalAgentService subAgents(Predicate condition, Object... agents) { this.workflowBuilder.tasks( diff --git a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/LoopAgentServiceImpl.java b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/LoopAgentServiceImpl.java index d7bc5b17..c4ac8328 100644 --- a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/LoopAgentServiceImpl.java +++ b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/LoopAgentServiceImpl.java @@ -15,11 +15,15 @@ */ package io.serverlessworkflow.fluent.agentic.langchain4j; +import dev.langchain4j.agentic.agent.AgentRequest; +import dev.langchain4j.agentic.agent.AgentResponse; import dev.langchain4j.agentic.internal.AgentExecutor; import dev.langchain4j.agentic.scope.AgenticScope; import dev.langchain4j.agentic.workflow.LoopAgentService; import io.serverlessworkflow.fluent.agentic.LoopAgentsBuilder; import java.util.List; +import java.util.function.BiPredicate; +import java.util.function.Consumer; import java.util.function.Predicate; public class LoopAgentServiceImpl extends AbstractAgentService> @@ -47,6 +51,18 @@ public LoopAgentService exitCondition(Predicate exitCondition) return this; } + @Override + public LoopAgentService exitCondition(BiPredicate biPredicate) { + this.loopAgentsBuilder.exitCondition(biPredicate); + return this; + } + + @Override + public LoopAgentService testExitAtLoopEnd(boolean b) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } + @Override public LoopAgentService subAgents(Object... agents) { this.loopAgentsBuilder.subAgents(agents); @@ -60,4 +76,16 @@ public LoopAgentService subAgents(List agentExecutors) { this.workflowBuilder.tasks(t -> t.loop(this.loopAgentsBuilder)); return this; } + + @Override + public LoopAgentService beforeAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } + + @Override + public LoopAgentService afterAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } } diff --git a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ParallelAgentServiceImpl.java b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ParallelAgentServiceImpl.java index 00f6e1c2..607c0617 100644 --- a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ParallelAgentServiceImpl.java +++ b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/ParallelAgentServiceImpl.java @@ -15,12 +15,15 @@ */ package io.serverlessworkflow.fluent.agentic.langchain4j; +import dev.langchain4j.agentic.agent.AgentRequest; +import dev.langchain4j.agentic.agent.AgentResponse; import dev.langchain4j.agentic.internal.AgentExecutor; import dev.langchain4j.agentic.workflow.ParallelAgentService; import io.serverlessworkflow.impl.ExecutorServiceHolder; import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; +import java.util.function.Consumer; public class ParallelAgentServiceImpl extends AbstractAgentService> implements ParallelAgentService { @@ -44,6 +47,18 @@ public ParallelAgentService subAgents(List agentExecutors) { return this.subAgents(agentExecutors.toArray()); } + @Override + public ParallelAgentService beforeAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } + + @Override + public ParallelAgentService afterAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } + @Override public ParallelAgentService executor(Executor executor) { if (!(executor instanceof ExecutorService)) { diff --git a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/SequentialAgentServiceImpl.java b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/SequentialAgentServiceImpl.java index 1fc25707..184dbb78 100644 --- a/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/SequentialAgentServiceImpl.java +++ b/experimental/fluent/agentic-langchain4j/src/main/java/io/serverlessworkflow/fluent/agentic/langchain4j/SequentialAgentServiceImpl.java @@ -15,9 +15,12 @@ */ package io.serverlessworkflow.fluent.agentic.langchain4j; +import dev.langchain4j.agentic.agent.AgentRequest; +import dev.langchain4j.agentic.agent.AgentResponse; import dev.langchain4j.agentic.internal.AgentExecutor; import dev.langchain4j.agentic.workflow.SequentialAgentService; import java.util.List; +import java.util.function.Consumer; public class SequentialAgentServiceImpl extends AbstractAgentService> @@ -42,4 +45,16 @@ public SequentialAgentService subAgents(List agentExecutors) { this.subAgents(agentExecutors.toArray()); return this; } + + @Override + public SequentialAgentService beforeAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } + + @Override + public SequentialAgentService afterAgentInvocation(Consumer consumer) { + throw new UnsupportedOperationException( + "Feature not implemented yet. See: https://github.com/serverlessworkflow/sdk-java/issues/836"); + } } diff --git a/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentAdapters.java b/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentAdapters.java index 53b53d2d..d8a2d015 100644 --- a/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentAdapters.java +++ b/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/AgentAdapters.java @@ -18,21 +18,20 @@ import static dev.langchain4j.agentic.internal.AgentUtil.agentsToExecutors; import dev.langchain4j.agentic.internal.AgentExecutor; -import dev.langchain4j.agentic.internal.AgentSpecification; import dev.langchain4j.agentic.scope.AgenticScope; import dev.langchain4j.agentic.scope.DefaultAgenticScope; import io.serverlessworkflow.api.types.func.LoopPredicateIndex; import java.util.List; +import java.util.function.BiPredicate; import java.util.function.Function; import java.util.function.Predicate; -import java.util.stream.Stream; public final class AgentAdapters { private AgentAdapters() {} public static List toExecutors(Object... agents) { - return agentsToExecutors(Stream.of(agents).map(AgentSpecification.class::cast).toArray()); + return agentsToExecutors(agents); } public static Function toFunction(AgentExecutor exec) { @@ -42,4 +41,9 @@ public static Function toFunction(AgentExecutor exe public static LoopPredicateIndex toWhile(Predicate exit) { return (model, item, idx) -> !exit.test(model); } + + public static LoopPredicateIndex toWhile( + BiPredicate exit) { + return (model, item, idx) -> !exit.test(model, idx); + } } diff --git a/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/LoopAgentsBuilder.java b/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/LoopAgentsBuilder.java index 01b71015..758ccc65 100644 --- a/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/LoopAgentsBuilder.java +++ b/experimental/fluent/agentic/src/main/java/io/serverlessworkflow/fluent/agentic/LoopAgentsBuilder.java @@ -22,6 +22,7 @@ import io.serverlessworkflow.fluent.func.FuncTaskItemListBuilder; import java.util.List; import java.util.UUID; +import java.util.function.BiPredicate; import java.util.function.ObjIntConsumer; import java.util.function.Predicate; import java.util.stream.IntStream; @@ -65,6 +66,11 @@ public LoopAgentsBuilder exitCondition(Predicate exitCondition) { return this; } + public LoopAgentsBuilder exitCondition(BiPredicate exitCondition) { + this.forTask.withWhile(AgentAdapters.toWhile(exitCondition), AgenticScope.class); + return this; + } + public ForTaskFunction build() { this.forTask.setDo(this.funcDelegate.build()); return this.forTask; diff --git a/pom.xml b/pom.xml index 2913db0b..aab4e255 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ 9.0.1.Final 6.0.0 - 1.5.0-beta11 + 1.6.0-beta12 1.6.0