You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by sx...@apache.org on 2025/12/08 09:35:44 UTC
(flink-agents) branch main updated: [hotfix] Fix the type loss issue in agent plan deserialization (#343)
This is an automated email from the ASF dual-hosted git repository.
sxnan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-agents.git
The following commit(s) were added to refs/heads/main by this push:
new 0815d58 [hotfix] Fix the type loss issue in agent plan deserialization (#343)
0815d58 is described below
commit 0815d58d7889ecfe0d4e34fe391d50b6efedb0d9
Author: Eugene <me...@gmail.com>
AuthorDate: Mon Dec 8 17:35:39 2025 +0800
[hotfix] Fix the type loss issue in agent plan deserialization (#343)
---
.../agents/api/resource/ResourceDescriptor.java | 5 +++++
docs/content/docs/development/workflow_agent.md | 2 +-
.../agents/integration/test/ReActAgentTest.java | 2 +-
.../examples/agents/ReviewAnalysisAgent.java | 2 +-
.../chatmodels/ollama/OllamaChatModelSetup.java | 2 +-
.../ResourceProviderJsonDeserializer.java | 24 ++--------------------
6 files changed, 11 insertions(+), 26 deletions(-)
diff --git a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java
index 49113c2..f2803ba 100644
--- a/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java
+++ b/api/src/main/java/org/apache/flink/agents/api/resource/ResourceDescriptor.java
@@ -59,6 +59,11 @@ public class ResourceDescriptor {
return (T) initialArguments.get(argName);
}
+ public <T> T getArgument(String argName, T defaultValue) {
+ T value = getArgument(argName);
+ return value != null ? value : defaultValue;
+ }
+
public static class Builder {
private final String clazz;
private final Map<String, Object> initialArguments;
diff --git a/docs/content/docs/development/workflow_agent.md b/docs/content/docs/development/workflow_agent.md
index e60f3de..346f80d 100644
--- a/docs/content/docs/development/workflow_agent.md
+++ b/docs/content/docs/development/workflow_agent.md
@@ -144,7 +144,7 @@ public class ReviewAnalysisAgent extends Agent {
.addInitialArgument("model", "qwen3:8b")
.addInitialArgument("prompt", "reviewAnalysisPrompt")
.addInitialArgument("tools", Collections.singletonList("notifyShippingManager"))
- .addInitialArgument("extract_reasoning", "true")
+ .addInitialArgument("extract_reasoning", true)
.build();
}
diff --git a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ReActAgentTest.java b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ReActAgentTest.java
index 3967dfd..10905fc 100644
--- a/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ReActAgentTest.java
+++ b/e2e-test/flink-agents-end-to-end-tests-integration/src/test/java/org/apache/flink/agents/integration/test/ReActAgentTest.java
@@ -162,7 +162,7 @@ public class ReActAgentTest {
.addInitialArgument("connection", "ollama")
.addInitialArgument("model", OLLAMA_MODEL)
.addInitialArgument("tools", List.of("add", "multiply"))
- .addInitialArgument("extract_reasoning", "true")
+ .addInitialArgument("extract_reasoning", true)
.build();
Prompt prompt =
diff --git a/examples/src/main/java/org/apache/flink/agents/examples/agents/ReviewAnalysisAgent.java b/examples/src/main/java/org/apache/flink/agents/examples/agents/ReviewAnalysisAgent.java
index b82e78a..bbba3c8 100644
--- a/examples/src/main/java/org/apache/flink/agents/examples/agents/ReviewAnalysisAgent.java
+++ b/examples/src/main/java/org/apache/flink/agents/examples/agents/ReviewAnalysisAgent.java
@@ -66,7 +66,7 @@ public class ReviewAnalysisAgent extends Agent {
.addInitialArgument("model", "qwen3:8b")
.addInitialArgument("prompt", "reviewAnalysisPrompt")
.addInitialArgument("tools", Collections.singletonList("notifyShippingManager"))
- .addInitialArgument("extract_reasoning", "true")
+ .addInitialArgument("extract_reasoning", true)
.build();
}
diff --git a/integrations/chat-models/ollama/src/main/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetup.java b/integrations/chat-models/ollama/src/main/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetup.java
index 8b78f8f..e12aed4 100644
--- a/integrations/chat-models/ollama/src/main/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetup.java
+++ b/integrations/chat-models/ollama/src/main/java/org/apache/flink/agents/integrations/chatmodels/ollama/OllamaChatModelSetup.java
@@ -62,7 +62,7 @@ public class OllamaChatModelSetup extends BaseChatModelSetup {
ResourceDescriptor descriptor, BiFunction<String, ResourceType, Resource> getResource) {
super(descriptor, getResource);
this.model = descriptor.getArgument("model");
- this.extractReasoning = Boolean.parseBoolean(descriptor.getArgument("extract_reasoning"));
+ this.extractReasoning = descriptor.getArgument("extract_reasoning", false);
}
/**
diff --git a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java
index b548b4d..6dbd870 100644
--- a/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java
+++ b/plan/src/main/java/org/apache/flink/agents/plan/serializer/ResourceProviderJsonDeserializer.java
@@ -33,9 +33,7 @@ import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMap
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
/**
@@ -82,7 +80,7 @@ public class ResourceProviderJsonDeserializer extends StdDeserializer<ResourcePr
JsonNode kwargsNode = node.get("kwargs");
Map<String, Object> kwargs = new HashMap<>();
if (kwargsNode != null && kwargsNode.isObject()) {
- kwargs = (Map<String, Object>) parseJsonNode(kwargsNode);
+ kwargs = mapper.convertValue(kwargsNode, Map.class);
}
return new PythonResourceProvider(
name, ResourceType.fromValue(type), module, clazz, kwargs);
@@ -98,7 +96,7 @@ public class ResourceProviderJsonDeserializer extends StdDeserializer<ResourcePr
JsonNode serializedNode = node.get("serialized");
Map<String, Object> serialized = new HashMap<>();
if (serializedNode != null && serializedNode.isObject()) {
- serialized = (Map<String, Object>) parseJsonNode(serializedNode);
+ serialized = mapper.convertValue(serializedNode, Map.class);
}
return new PythonSerializableResourceProvider(
name, ResourceType.fromValue(type), module, clazz, serialized);
@@ -126,22 +124,4 @@ public class ResourceProviderJsonDeserializer extends StdDeserializer<ResourcePr
return new JavaSerializableResourceProvider(
name, ResourceType.fromValue(type), module, clazz, serializedResource);
}
-
- private Object parseJsonNode(JsonNode node) {
- if (node.isObject()) {
- Map<String, Object> map = new HashMap<>();
- node.fields()
- .forEachRemaining(
- entry -> map.put(entry.getKey(), parseJsonNode(entry.getValue())));
- return map;
- } else if (node.isArray()) {
- List<Object> list = new ArrayList<>();
- node.forEach(element -> list.add(parseJsonNode(element)));
- return list;
- } else if (node.isValueNode()) {
- return node.asText();
- } else {
- throw new UnsupportedOperationException("Unsupported node type: " + node.getNodeType());
- }
- }
}