Skip to content

Commit 166938b

Browse files
KavinduZoysaNipunaRanasinghe
authored andcommitted
Handle new line in description on AI tool
(cherry picked from commit 31e7d31)
1 parent 3a1f463 commit 166938b

File tree

3 files changed

+351
-8
lines changed
  • flow-model-generator/modules

3 files changed

+351
-8
lines changed

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -757,8 +757,9 @@ public TokenBuilder skipFormatting() {
757757

758758
public TokenBuilder descriptionDoc(String description) {
759759
sb.append(SyntaxKind.HASH_TOKEN.stringValue())
760-
.append(WHITE_SPACE)
761-
.append(description);
760+
.append(WHITE_SPACE);
761+
762+
appendDescription(description.split(System.lineSeparator()));
762763
if (!description.endsWith(System.lineSeparator())) {
763764
sb.append(System.lineSeparator());
764765
}
@@ -774,9 +775,12 @@ public TokenBuilder parameterDoc(String paramName, String description) {
774775
.append(paramName)
775776
.append(WHITE_SPACE)
776777
.append("-")
777-
.append(WHITE_SPACE)
778-
.append(description)
779-
.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+
}
780784
}
781785
return this;
782786
}
@@ -790,13 +794,26 @@ public TokenBuilder returnDoc(String returnDescription) {
790794
.append(SyntaxKind.RETURN_KEYWORD.stringValue())
791795
.append(WHITE_SPACE)
792796
.append("-")
793-
.append(WHITE_SPACE)
794-
.append(returnDescription)
795-
.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+
}
796803
}
797804
return this;
798805
}
799806

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+
800817
public String build(SourceKind kind) {
801818
String outputStr = sb.toString();
802819
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

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,325 @@
1+
{
2+
"source": "agent_1/agents.bal",
3+
"name": "toolFunc",
4+
"connection": "gmailClient",
5+
"description": "Sample diagram node",
6+
"toolDescription": "",
7+
"diagram": {
8+
"id": "31",
9+
"metadata": {
10+
"label": "get",
11+
"description": "List repositories for a user",
12+
"icon": "https://bcentral-packageicons.azureedge.net/images/ballerinax_github_5.1.0.png"
13+
},
14+
"codedata": {
15+
"node": "RESOURCE_ACTION_CALL",
16+
"org": "ballerinax",
17+
"module": "github",
18+
"object": "Client",
19+
"symbol": "get",
20+
"isNew": true,
21+
"lineRange": {
22+
"fileName": "agents.bal",
23+
"startLine": {
24+
"line": 13,
25+
"offset": 0
26+
},
27+
"endLine": {
28+
"line": 13,
29+
"offset": 0
30+
}
31+
}
32+
},
33+
"returning": false,
34+
"properties": {
35+
"connection": {
36+
"metadata": {
37+
"label": "Connection",
38+
"description": "Connection to use"
39+
},
40+
"valueType": "EXPRESSION",
41+
"valueTypeConstraint": "github:Client",
42+
"value": "connection",
43+
"optional": false,
44+
"editable": false,
45+
"advanced": false,
46+
"hidden": false
47+
},
48+
"resourcePath": {
49+
"metadata": {
50+
"label": "Resource Path",
51+
"description": "Resource Path"
52+
},
53+
"valueType": "EXPRESSION",
54+
"value": "resourcePath",
55+
"optional": false,
56+
"editable": false,
57+
"advanced": false,
58+
"hidden": false,
59+
"codedata": {
60+
"originalName": "/users/[username]/repos"
61+
}
62+
},
63+
"username": {
64+
"metadata": {
65+
"label": "username",
66+
"description": "The handle for the GitHub user account."
67+
},
68+
"valueType": "EXPRESSION",
69+
"valueTypeConstraint": "string",
70+
"placeholder": "\"\"",
71+
"optional": false,
72+
"editable": true,
73+
"advanced": false,
74+
"hidden": false,
75+
"codedata": {
76+
"kind": "PATH_PARAM",
77+
"originalName": "username"
78+
},
79+
"typeMembers": [],
80+
"value": "username"
81+
},
82+
"$type": {
83+
"metadata": {
84+
"label": "type",
85+
"description": "Limit results to repositories of the specified type."
86+
},
87+
"valueType": "EXPRESSION",
88+
"valueTypeConstraint": "\"all\"|\"owner\"|\"member\"",
89+
"placeholder": "\"owner\"",
90+
"optional": true,
91+
"editable": true,
92+
"advanced": true,
93+
"hidden": false,
94+
"codedata": {
95+
"kind": "DEFAULTABLE",
96+
"originalName": "'type"
97+
},
98+
"typeMembers": [
99+
{
100+
"type": "\"all\"",
101+
"packageInfo": "",
102+
"kind": "BASIC_TYPE",
103+
"selected": false
104+
},
105+
{
106+
"type": "\"member\"",
107+
"packageInfo": "",
108+
"kind": "BASIC_TYPE",
109+
"selected": false
110+
},
111+
{
112+
"type": "\"owner\"",
113+
"packageInfo": "",
114+
"kind": "BASIC_TYPE",
115+
"selected": false
116+
}
117+
],
118+
"value": "$type"
119+
},
120+
"sort": {
121+
"metadata": {
122+
"label": "sort",
123+
"description": "The property to sort the results by."
124+
},
125+
"valueType": "EXPRESSION",
126+
"valueTypeConstraint": "\"created\"|\"updated\"|\"pushed\"|\"full_name\"",
127+
"placeholder": "\"full_name\"",
128+
"optional": true,
129+
"editable": true,
130+
"advanced": true,
131+
"hidden": false,
132+
"codedata": {
133+
"kind": "DEFAULTABLE",
134+
"originalName": "sort"
135+
},
136+
"typeMembers": [
137+
{
138+
"type": "\"created\"",
139+
"packageInfo": "",
140+
"kind": "BASIC_TYPE",
141+
"selected": false
142+
},
143+
{
144+
"type": "\"full_name\"",
145+
"packageInfo": "",
146+
"kind": "BASIC_TYPE",
147+
"selected": false
148+
},
149+
{
150+
"type": "\"pushed\"",
151+
"packageInfo": "",
152+
"kind": "BASIC_TYPE",
153+
"selected": false
154+
},
155+
{
156+
"type": "\"updated\"",
157+
"packageInfo": "",
158+
"kind": "BASIC_TYPE",
159+
"selected": false
160+
}
161+
],
162+
"value": "sort"
163+
},
164+
"direction": {
165+
"metadata": {
166+
"label": "direction",
167+
"description": "The order to sort by. Default: `asc` when using `full_name`, otherwise `desc`."
168+
},
169+
"valueType": "EXPRESSION",
170+
"valueTypeConstraint": "\"desc\"|()|\"asc\"",
171+
"placeholder": "()",
172+
"optional": true,
173+
"editable": true,
174+
"advanced": true,
175+
"hidden": false,
176+
"codedata": {
177+
"kind": "DEFAULTABLE",
178+
"originalName": "direction"
179+
},
180+
"typeMembers": [
181+
{
182+
"type": "\"asc\"",
183+
"packageInfo": "",
184+
"kind": "BASIC_TYPE",
185+
"selected": false
186+
},
187+
{
188+
"type": "\"desc\"",
189+
"packageInfo": "",
190+
"kind": "BASIC_TYPE",
191+
"selected": false
192+
},
193+
{
194+
"type": "()",
195+
"packageInfo": "",
196+
"kind": "BASIC_TYPE",
197+
"selected": false
198+
}
199+
],
200+
"value": "direction"
201+
},
202+
"per_page": {
203+
"metadata": {
204+
"label": "per_page",
205+
"description": "The number of results per page (max 100)."
206+
},
207+
"valueType": "EXPRESSION",
208+
"valueTypeConstraint": "int",
209+
"placeholder": "30",
210+
"optional": true,
211+
"editable": true,
212+
"advanced": true,
213+
"hidden": false,
214+
"codedata": {
215+
"kind": "DEFAULTABLE",
216+
"originalName": "per_page"
217+
},
218+
"typeMembers": [
219+
{
220+
"type": "int",
221+
"packageInfo": "",
222+
"kind": "BASIC_TYPE",
223+
"selected": false
224+
}
225+
],
226+
"value": "per_page"
227+
},
228+
"page": {
229+
"metadata": {
230+
"label": "page",
231+
"description": "Page number of the results to fetch."
232+
},
233+
"valueType": "EXPRESSION",
234+
"valueTypeConstraint": "int",
235+
"placeholder": "1",
236+
"optional": true,
237+
"editable": true,
238+
"advanced": true,
239+
"hidden": false,
240+
"codedata": {
241+
"kind": "DEFAULTABLE",
242+
"originalName": "page"
243+
},
244+
"typeMembers": [
245+
{
246+
"type": "int",
247+
"packageInfo": "",
248+
"kind": "BASIC_TYPE",
249+
"selected": false
250+
}
251+
],
252+
"value": "page"
253+
},
254+
"type": {
255+
"metadata": {
256+
"label": "Variable Type",
257+
"description": "Type of the variable"
258+
},
259+
"valueType": "TYPE",
260+
"value": "github:MinimalRepository[]",
261+
"placeholder": "var",
262+
"optional": false,
263+
"editable": false,
264+
"advanced": false,
265+
"hidden": false,
266+
"codedata": {}
267+
},
268+
"variable": {
269+
"metadata": {
270+
"label": "Variable Name",
271+
"description": "Name of the variable"
272+
},
273+
"valueType": "IDENTIFIER",
274+
"value": "githubMinimalrepository",
275+
"optional": false,
276+
"editable": true,
277+
"advanced": false,
278+
"hidden": false
279+
},
280+
"checkError": {
281+
"metadata": {
282+
"label": "Check Error",
283+
"description": "Trigger error flow"
284+
},
285+
"valueType": "FLAG",
286+
"value": true,
287+
"optional": false,
288+
"editable": true,
289+
"advanced": true,
290+
"hidden": false
291+
}
292+
},
293+
"flags": 0
294+
},
295+
"output": {
296+
"agent_1/agents.bal": [
297+
{
298+
"range": {
299+
"start": {
300+
"line": 0,
301+
"character": 0
302+
},
303+
"end": {
304+
"line": 0,
305+
"character": 0
306+
}
307+
},
308+
"newText": "import ballerinax/github;"
309+
},
310+
{
311+
"range": {
312+
"start": {
313+
"line": 0,
314+
"character": 0
315+
},
316+
"end": {
317+
"line": 0,
318+
"character": 0
319+
}
320+
},
321+
"newText": "# List repositories for a user\n# + username - The handle for the GitHub user account.\n@ai:AgentTool\n@display {label: \"\",iconPath: \"https://bcentral-packageicons.azureedge.net/images/ballerinax_github_5.1.0.png\"}\nisolated function toolFunc( string username) returns github:MinimalRepository[]| error { github:MinimalRepository[] githubMinimalrepository = check gmailClient-> /users/[username]/repos. get( 'type) ;\nreturn githubMinimalrepository;\n}"
322+
}
323+
]
324+
}
325+
}

0 commit comments

Comments
 (0)