Skip to content

Commit be3c9a4

Browse files
Merge pull request #869 from NipunaRanasinghe/2201.12.x
[2201.12.x] Fix issues in AI tool description generation
2 parents f10c430 + f22e0b8 commit be3c9a4

File tree

4 files changed

+378
-18
lines changed

4 files changed

+378
-18
lines changed

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -372,19 +372,23 @@ public JsonElement genTool(JsonElement node, String toolName, String connectionN
372372
Property.CONNECTION_KEY, Property.CHECK_ERROR_KEY));
373373
keys.removeAll(ignoredKeys);
374374
List<String> paramList = new ArrayList<>();
375-
for (String key : keys) {
376-
Property property = properties.get(key);
375+
for (String k : keys) {
376+
Property property = properties.get(k);
377377
if (property == null) {
378378
continue;
379379
}
380380
PropertyCodedata codedata = property.codedata();
381381
if (codedata != null) {
382382
String kind = codedata.kind();
383383
if (kind != null && kind.equals(ParameterData.Kind.DEFAULTABLE.name())) {
384-
ignoredKeys.add(key);
384+
ignoredKeys.add(k);
385385
continue;
386386
}
387387
}
388+
String key = k;
389+
if (k.startsWith("$")) {
390+
key = "'" + k.substring(1);
391+
}
388392
if (hasDescription) {
389393
sourceBuilder.token().parameterDoc(key, property.metadata().description());
390394
}
@@ -465,8 +469,8 @@ public JsonElement genTool(JsonElement node, String toolName, String connectionN
465469
keys.removeAll(ignoredKeys);
466470
List<String> paramList = new ArrayList<>();
467471
Set<String> pathParams = new HashSet<>();
468-
for (String key : keys) {
469-
Property property = properties.get(key);
472+
for (String k : keys) {
473+
Property property = properties.get(k);
470474
if (property == null) {
471475
continue;
472476
}
@@ -475,12 +479,16 @@ public JsonElement genTool(JsonElement node, String toolName, String connectionN
475479
String kind = codedata.kind();
476480
if (kind.equals(ParameterData.Kind.PATH_PARAM.name()) ||
477481
kind.equals(ParameterData.Kind.PATH_REST_PARAM.name())) {
478-
pathParams.add(key);
482+
pathParams.add(k);
479483
} else if (kind.equals(ParameterData.Kind.DEFAULTABLE.name())) {
480-
ignoredKeys.add(key);
484+
ignoredKeys.add(k);
481485
continue;
482486
}
483487
}
488+
String key = k;
489+
if (k.startsWith("$")) {
490+
key = "'" + k.substring(1);
491+
}
484492
if (hasDescription) {
485493
sourceBuilder.token().parameterDoc(key, property.metadata().description());
486494
}

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

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -446,15 +446,15 @@ public SourceBuilder functionParameters(FlowNode nodeTemplate, Set<String> ignor
446446
if (firstParamAdded) {
447447
tokenBuilder.keyword(SyntaxKind.COMMA_TOKEN);
448448
}
449-
tokenBuilder.expression(prop);
449+
tokenBuilder.param(prop);
450450
} else if (kind.equals(ParameterData.Kind.INCLUDED_RECORD.name())) {
451451
if (isPropValueEmpty(prop)) {
452452
continue;
453453
}
454454
if (firstParamAdded) {
455455
tokenBuilder.keyword(SyntaxKind.COMMA_TOKEN);
456456
}
457-
tokenBuilder.expression(prop);
457+
tokenBuilder.param(prop);
458458
} else if (kind.equals(ParameterData.Kind.DEFAULTABLE.name())) {
459459
if (isPropValueEmpty(prop)) {
460460
missedDefaultValue = true;
@@ -470,7 +470,7 @@ public SourceBuilder functionParameters(FlowNode nodeTemplate, Set<String> ignor
470470
tokenBuilder.name(prop.codedata().originalName()).whiteSpace()
471471
.keyword(SyntaxKind.EQUAL_TOKEN).expression(prop);
472472
} else {
473-
tokenBuilder.expression(prop);
473+
tokenBuilder.param(prop);
474474
}
475475
} else if (kind.equals(ParameterData.Kind.INCLUDED_FIELD.name())) {
476476
if (isPropValueEmpty(prop)) {
@@ -679,6 +679,15 @@ public TokenBuilder expression(Property property) {
679679
return this;
680680
}
681681

682+
public TokenBuilder param(Property property) {
683+
String source = property.toSourceCode();
684+
if (source.startsWith("$")) {
685+
source = "'" + source.substring(1);
686+
}
687+
sb.append(source);
688+
return this;
689+
}
690+
682691
public TokenBuilder expression(String exprAsStr) {
683692
sb.append(exprAsStr);
684693
return this;
@@ -748,8 +757,9 @@ public TokenBuilder skipFormatting() {
748757

749758
public TokenBuilder descriptionDoc(String description) {
750759
sb.append(SyntaxKind.HASH_TOKEN.stringValue())
751-
.append(WHITE_SPACE)
752-
.append(description);
760+
.append(WHITE_SPACE);
761+
762+
appendDescription(description.split(System.lineSeparator()));
753763
if (!description.endsWith(System.lineSeparator())) {
754764
sb.append(System.lineSeparator());
755765
}
@@ -765,9 +775,12 @@ public TokenBuilder parameterDoc(String paramName, String description) {
765775
.append(paramName)
766776
.append(WHITE_SPACE)
767777
.append("-")
768-
.append(WHITE_SPACE)
769-
.append(description)
770-
.append(System.lineSeparator());
778+
.append(WHITE_SPACE);
779+
780+
appendDescription(description.split(System.lineSeparator()));
781+
if (!description.endsWith(System.lineSeparator())) {
782+
sb.append(System.lineSeparator());
783+
}
771784
}
772785
return this;
773786
}
@@ -781,13 +794,26 @@ public TokenBuilder returnDoc(String returnDescription) {
781794
.append(SyntaxKind.RETURN_KEYWORD.stringValue())
782795
.append(WHITE_SPACE)
783796
.append("-")
784-
.append(WHITE_SPACE)
785-
.append(returnDescription)
786-
.append(System.lineSeparator());
797+
.append(WHITE_SPACE);
798+
799+
appendDescription(returnDescription.split(System.lineSeparator()));
800+
if (!returnDescription.endsWith(System.lineSeparator())) {
801+
sb.append(System.lineSeparator());
802+
}
787803
}
788804
return this;
789805
}
790806

807+
private void appendDescription(String[] descLines) {
808+
sb.append(descLines[0]);
809+
for (int i = 1; i < descLines.length; i++) {
810+
sb.append(System.lineSeparator());
811+
sb.append(SyntaxKind.HASH_TOKEN.stringValue())
812+
.append(WHITE_SPACE)
813+
.append(descLines[i]);
814+
}
815+
}
816+
791817
public String build(SourceKind kind) {
792818
String outputStr = sb.toString();
793819
if (skipFormatting) {

flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/agentsmanager/GenToolsTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ protected Object[] getConfigsList() {
5757
{Path.of("remote_action_tool3.json")},
5858
{Path.of("remote_action_tool4.json")},
5959
{Path.of("remote_action_tool5.json")},
60+
{Path.of("remote_action_tool6.json")},
6061
};
6162
}
6263

0 commit comments

Comments
 (0)