Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions experimental/agentic/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental-lambda</artifactId>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental-model</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.agentic;
package io.serverlessworkflow.impl.model.agentic;

import dev.langchain4j.agentic.scope.AgenticScope;
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.expressions.func.JavaModel;
import io.serverlessworkflow.impl.model.func.JavaModel;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.agentic;
package io.serverlessworkflow.impl.model.agentic;

import dev.langchain4j.agentic.scope.AgenticScope;
import dev.langchain4j.agentic.scope.ResultWithAgenticScope;
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.expressions.func.JavaModelCollection;
import io.serverlessworkflow.impl.model.func.JavaModelCollection;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.agentic;
package io.serverlessworkflow.impl.model.agentic;

import dev.langchain4j.agentic.scope.AgenticScope;
import io.cloudevents.CloudEvent;
import io.cloudevents.CloudEventData;
import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowModelCollection;
import io.serverlessworkflow.impl.WorkflowModelFactory;
import io.serverlessworkflow.impl.expressions.agentic.langchain4j.AgenticScopeRegistryAssessor;
import io.serverlessworkflow.impl.model.agentic.langchain4j.AgenticScopeRegistryAssessor;
import java.time.OffsetDateTime;
import java.util.HashMap;
import java.util.Map;

class AgenticModelFactory implements WorkflowModelFactory {
public class AgenticModelFactory implements WorkflowModelFactory {

static final String DEFAULT_AGENTIC_SCOPE_STATE_KEY = "input";
private final AgenticScopeRegistryAssessor scopeRegistryAssessor =
Expand Down Expand Up @@ -126,4 +126,11 @@ public WorkflowModel fromOther(Object value) {
}
return newAgenticModel(value);
}

public AgenticModelFactory() {}

@Override
public int priority() {
return DEFAULT_PRIORITY - 1;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.agentic;
package io.serverlessworkflow.impl.model.agentic;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.agentic.langchain4j;
package io.serverlessworkflow.impl.model.agentic.langchain4j;

import dev.langchain4j.agentic.internal.AgenticScopeOwner;
import dev.langchain4j.agentic.scope.AgenticScope;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
io.serverlessworkflow.impl.model.agentic.AgenticModelFactory

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import dev.langchain4j.service.MemoryId;
import io.serverlessworkflow.api.types.Workflow;
import io.serverlessworkflow.impl.WorkflowApplication;
import io.serverlessworkflow.impl.expressions.agentic.langchain4j.AgenticScopeRegistryAssessor;
import io.serverlessworkflow.impl.model.agentic.langchain4j.AgenticScopeRegistryAssessor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
Expand Down
9 changes: 9 additions & 0 deletions experimental/lambda/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,18 @@
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental-types</artifactId>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental-model</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-impl-core</artifactId>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-impl-jq</artifactId>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import io.serverlessworkflow.api.types.func.TypedJavaContextFunction;
import io.serverlessworkflow.api.types.func.TypedJavaFilterFunction;
import io.serverlessworkflow.api.types.func.TypedPredicate;
import io.serverlessworkflow.impl.WorkflowModelFactory;
import io.serverlessworkflow.impl.WorkflowPredicate;
import io.serverlessworkflow.impl.expressions.AbstractExpressionFactory;
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
Expand All @@ -39,8 +38,6 @@

public class JavaExpressionFactory extends AbstractExpressionFactory {

private final WorkflowModelFactory modelFactory = new JavaModelFactory();

@Override
public ObjectExpression buildExpression(ExpressionDescriptor descriptor) {
Object value = descriptor.asObject();
Expand All @@ -61,6 +58,26 @@ public ObjectExpression buildExpression(ExpressionDescriptor descriptor) {
}
}

@Override
public int priority(ExpressionDescriptor descriptor) {
Object value = descriptor.asObject();
if (value instanceof Function
|| value instanceof TypedFunction
|| value instanceof JavaFilterFunction
|| value instanceof TypedJavaFilterFunction
|| value instanceof JavaContextFunction
|| value instanceof TypedJavaContextFunction
|| value instanceof Predicate
|| value instanceof TypedPredicate
|| value instanceof Boolean) {
return DEFAULT_PRIORITY - 500;
} else if (descriptor.asString() == null) {
return MIN_PRIORITY;
} else {
return DEFAULT_PRIORITY + 500;
}
}

@SuppressWarnings({"rawtypes", "unchecked"})
private WorkflowPredicate fromPredicate(Predicate pred) {
return (w, t, n) -> pred.test(n.asJavaObject());
Expand All @@ -82,12 +99,7 @@ public Optional<WorkflowPredicate> buildIfFilter(TaskBase task) {
return Optional.of(fromPredicate(pred));
}
}
return super.buildIfFilter(task);
}

@Override
public WorkflowModelFactory modelFactory() {
return modelFactory;
return Optional.empty();
}

@Override
Expand Down
16 changes: 16 additions & 0 deletions experimental/model/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental</artifactId>
<version>8.0.0-SNAPSHOT</version>
</parent>
<artifactId>serverlessworkflow-experimental-model</artifactId>
<name>Serverless Workflow :: Experimental :: Model</name>
<dependencies>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-impl-core</artifactId>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.func;
package io.serverlessworkflow.impl.model.func;

import io.serverlessworkflow.impl.WorkflowModel;
import java.time.OffsetDateTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.func;
package io.serverlessworkflow.impl.model.func;

import io.serverlessworkflow.impl.WorkflowModel;
import io.serverlessworkflow.impl.WorkflowModelCollection;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl.expressions.func;
package io.serverlessworkflow.impl.model.func;

import io.cloudevents.CloudEvent;
import io.cloudevents.CloudEventData;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
io.serverlessworkflow.impl.model.func.JavaModelFactory
12 changes: 12 additions & 0 deletions experimental/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,23 @@
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-impl-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-impl-jq</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental-lambda</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental-model</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.serverlessworkflow</groupId>
<artifactId>serverlessworkflow-experimental-types</artifactId>
Expand All @@ -38,5 +49,6 @@
<module>agentic</module>
<module>lambda-fluent</module>
<module>fluent</module>
<module>model</module>
</modules>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* Copyright 2020-Present The Serverless Workflow Specification Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.serverlessworkflow.impl;

import io.cloudevents.CloudEventData;
import io.serverlessworkflow.api.types.TaskBase;
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
import io.serverlessworkflow.impl.expressions.ExpressionFactory;
import java.time.OffsetDateTime;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;

class CompositeExpressionFactory implements ExpressionFactory {

private final Collection<ExpressionFactory> exprFactories;

public CompositeExpressionFactory(Collection<ExpressionFactory> exprFactories) {
this.exprFactories = exprFactories;
}

private <T> T processFactories(
ExpressionDescriptor desc, Function<ExpressionFactory, T> consumer) {
return exprFactories.stream()
.sorted((f1, f2) -> f1.priority(desc) - f2.priority(desc))
.findFirst()
.map(consumer::apply)
.orElseThrow(
() ->
new IllegalArgumentException("No expression factory found for expression " + desc));
}

@Override
public WorkflowValueResolver<String> resolveString(ExpressionDescriptor desc) {
return processFactories(desc, f -> f.resolveString(desc));
}

@Override
public WorkflowValueResolver<OffsetDateTime> resolveDate(ExpressionDescriptor desc) {
return processFactories(desc, f -> f.resolveDate(desc));
}

@Override
public WorkflowValueResolver<CloudEventData> resolveCE(ExpressionDescriptor desc) {
return processFactories(desc, f -> f.resolveCE(desc));
}

@Override
public WorkflowValueResolver<Map<String, Object>> resolveMap(ExpressionDescriptor desc) {
return processFactories(desc, f -> f.resolveMap(desc));
}

@Override
public WorkflowValueResolver<Collection<?>> resolveCollection(ExpressionDescriptor desc) {
return processFactories(desc, f -> f.resolveCollection(desc));
}

@Override
public WorkflowFilter buildFilter(ExpressionDescriptor desc, WorkflowModelFactory modelFactory) {
return processFactories(desc, f -> f.buildFilter(desc, modelFactory));
}

@Override
public WorkflowPredicate buildPredicate(ExpressionDescriptor desc) {
return processFactories(desc, f -> f.buildPredicate(desc));
}

@Override
public Optional<WorkflowPredicate> buildIfFilter(TaskBase task) {
return exprFactories.stream()
.map(f -> f.buildIfFilter(task))
.flatMap(Optional::stream)
.findAny();
}
}
Loading