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 <[email protected]>
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());
- }
- }
}