Skip to content

Commit b8b52d6

Browse files
committed
Refactor AgentCallBuilder to copy optional property values when updating agent
1 parent 6246e1e commit b8b52d6

File tree

1 file changed

+30
-13
lines changed
  • flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/model/node

1 file changed

+30
-13
lines changed

flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/model/node/AgentCallBuilder.java

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public Map<Path, List<TextEdit>> toSource(SourceBuilder sourceBuilder) {
170170
}
171171

172172
// If model is not set, create a default model provider node
173-
if (model.get().value() == null || model.get().value().equals("")) {
173+
if (model.get().value() == null || model.get().value().toString().isEmpty()) {
174174
NodeBuilder.TemplateContext modelProviderContext = new NodeBuilder.TemplateContext(
175175
sourceBuilder.workspaceManager,
176176
sourceBuilder.filePath,
@@ -188,7 +188,7 @@ public Map<Path, List<TextEdit>> toSource(SourceBuilder sourceBuilder) {
188188
}
189189

190190
// If connection is not set, create a default agent node
191-
if (connection.get().value() == null || connection.get().value().equals("")) {
191+
if (connection.get().value() == null || connection.get().value().toString().isEmpty()) {
192192
agentContext = new TemplateContext(
193193
sourceBuilder.workspaceManager,
194194
sourceBuilder.filePath,
@@ -204,6 +204,7 @@ public Map<Path, List<TextEdit>> toSource(SourceBuilder sourceBuilder) {
204204
FlowNode agentNode = new AgentBuilder().setConstData().setTemplateData(agentContext).build();
205205
updateAgentNodeProperties(agentNode, agentCallNode);
206206

207+
// If new model provider is created, copy variable name to agent model
207208
if (modelProviderNode != null) {
208209
FlowNodeUtil.copyPropertyValue(agentNode, modelProviderNode, MODEL, Property.VARIABLE_KEY);
209210
} else {
@@ -260,8 +261,8 @@ private static void updateAgentNodeProperties(FlowNode agentNode, FlowNode agent
260261
if (agentNode.properties() == null) {
261262
return;
262263
}
264+
copyCommonProperties(agentNode, agentCallNode);
263265
updateSystemPromptProperty(agentNode, agentCallNode);
264-
// TODO: Copy values of other properties of agentCallNode to agentNode (maxIter, verbose, etc.)
265266
}
266267

267268
private static void updateSystemPromptProperty(FlowNode agentNode, FlowNode agentCallNode) {
@@ -279,10 +280,32 @@ private static void updateSystemPromptProperty(FlowNode agentNode, FlowNode agen
279280
agentNode.properties().put(SYSTEM_PROMPT, updatedProperty);
280281
}
281282

282-
/**
283-
* Finds the agent context for a given connection variable name. If the connection exists, searches for the agent
284-
* symbol using visibleSymbols and returns its context. Otherwise, returns a default agent context.
285-
*/
283+
private static void copyCommonProperties(FlowNode agentNode, FlowNode agentCallNode) {
284+
if (agentNode.properties() == null || agentCallNode.properties() == null) {
285+
return;
286+
}
287+
288+
for (Map.Entry<String, Property> agentPropertyEntry : agentNode.properties().entrySet()) {
289+
String propertyName = agentPropertyEntry.getKey();
290+
Property agentProperty = agentPropertyEntry.getValue();
291+
292+
// Skip copying variable and type properties
293+
if (Property.VARIABLE_KEY.equals(propertyName) || Property.TYPE_KEY.equals(propertyName)) {
294+
continue;
295+
}
296+
297+
Optional<Property> agentCallProperty = agentCallNode.getProperty(propertyName);
298+
299+
if (agentCallProperty.isPresent() &&
300+
(agentCallProperty.get().value() != null &&
301+
!agentCallProperty.get().value().toString().isEmpty())) {
302+
Property updatedProperty = FlowNodeUtil.createUpdatedProperty(agentProperty,
303+
agentCallProperty.get().value().toString());
304+
agentNode.properties().put(propertyName, updatedProperty);
305+
}
306+
}
307+
}
308+
286309
private static NodeBuilder.TemplateContext findAgentContext(SourceBuilder sourceBuilder, String agentVariableName) {
287310
Optional<NodeBuilder.TemplateContext> agentContext =
288311
findAgentContextByVariableName(sourceBuilder, agentVariableName);
@@ -294,9 +317,6 @@ private static NodeBuilder.TemplateContext findAgentContext(SourceBuilder source
294317
return agentContext.get();
295318
}
296319

297-
/**
298-
* Searches for an agent symbol by variable name using visibleSymbols and returns its context.
299-
*/
300320
private static Optional<NodeBuilder.TemplateContext> findAgentContextByVariableName(
301321
SourceBuilder sourceBuilder, String variableName) {
302322
try {
@@ -325,9 +345,6 @@ private static Optional<NodeBuilder.TemplateContext> findAgentContextByVariableN
325345
return Optional.empty();
326346
}
327347

328-
/**
329-
* Builds the agent context from the variable symbol.
330-
*/
331348
private static Optional<NodeBuilder.TemplateContext> buildAgentContext(SourceBuilder sourceBuilder,
332349
VariableSymbol varSymbol) {
333350
try {

0 commit comments

Comments
 (0)