flowquery 1.0.46 → 1.0.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/dist/index.d.ts +0 -7
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -4
  4. package/dist/index.js.map +1 -1
  5. package/package.json +4 -1
  6. package/.editorconfig +0 -21
  7. package/.gitattributes +0 -3
  8. package/.github/workflows/npm-publish.yml +0 -32
  9. package/.github/workflows/python-publish.yml +0 -143
  10. package/.github/workflows/release.yml +0 -107
  11. package/.husky/pre-commit +0 -28
  12. package/.prettierrc +0 -22
  13. package/CODE_OF_CONDUCT.md +0 -10
  14. package/FlowQueryLogoIcon.png +0 -0
  15. package/SECURITY.md +0 -14
  16. package/SUPPORT.md +0 -13
  17. package/docs/flowquery.min.js +0 -1
  18. package/docs/index.html +0 -105
  19. package/flowquery-py/CONTRIBUTING.md +0 -127
  20. package/flowquery-py/README.md +0 -67
  21. package/flowquery-py/misc/data/test.json +0 -10
  22. package/flowquery-py/misc/data/users.json +0 -242
  23. package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
  24. package/flowquery-py/pyproject.toml +0 -121
  25. package/flowquery-py/setup_env.ps1 +0 -92
  26. package/flowquery-py/setup_env.sh +0 -87
  27. package/flowquery-py/src/__init__.py +0 -38
  28. package/flowquery-py/src/__main__.py +0 -10
  29. package/flowquery-py/src/compute/__init__.py +0 -6
  30. package/flowquery-py/src/compute/flowquery.py +0 -68
  31. package/flowquery-py/src/compute/runner.py +0 -64
  32. package/flowquery-py/src/extensibility.py +0 -52
  33. package/flowquery-py/src/graph/__init__.py +0 -31
  34. package/flowquery-py/src/graph/data.py +0 -136
  35. package/flowquery-py/src/graph/database.py +0 -141
  36. package/flowquery-py/src/graph/hops.py +0 -43
  37. package/flowquery-py/src/graph/node.py +0 -143
  38. package/flowquery-py/src/graph/node_data.py +0 -26
  39. package/flowquery-py/src/graph/node_reference.py +0 -50
  40. package/flowquery-py/src/graph/pattern.py +0 -115
  41. package/flowquery-py/src/graph/pattern_expression.py +0 -67
  42. package/flowquery-py/src/graph/patterns.py +0 -42
  43. package/flowquery-py/src/graph/physical_node.py +0 -41
  44. package/flowquery-py/src/graph/physical_relationship.py +0 -36
  45. package/flowquery-py/src/graph/relationship.py +0 -193
  46. package/flowquery-py/src/graph/relationship_data.py +0 -36
  47. package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
  48. package/flowquery-py/src/graph/relationship_reference.py +0 -21
  49. package/flowquery-py/src/io/__init__.py +0 -5
  50. package/flowquery-py/src/io/command_line.py +0 -108
  51. package/flowquery-py/src/parsing/__init__.py +0 -17
  52. package/flowquery-py/src/parsing/alias.py +0 -20
  53. package/flowquery-py/src/parsing/alias_option.py +0 -11
  54. package/flowquery-py/src/parsing/ast_node.py +0 -147
  55. package/flowquery-py/src/parsing/base_parser.py +0 -84
  56. package/flowquery-py/src/parsing/components/__init__.py +0 -19
  57. package/flowquery-py/src/parsing/components/csv.py +0 -8
  58. package/flowquery-py/src/parsing/components/from_.py +0 -12
  59. package/flowquery-py/src/parsing/components/headers.py +0 -12
  60. package/flowquery-py/src/parsing/components/json.py +0 -8
  61. package/flowquery-py/src/parsing/components/null.py +0 -10
  62. package/flowquery-py/src/parsing/components/post.py +0 -8
  63. package/flowquery-py/src/parsing/components/text.py +0 -8
  64. package/flowquery-py/src/parsing/context.py +0 -50
  65. package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
  66. package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
  67. package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
  68. package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
  69. package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
  70. package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
  71. package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
  72. package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
  73. package/flowquery-py/src/parsing/expressions/expression.py +0 -141
  74. package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
  75. package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
  76. package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
  77. package/flowquery-py/src/parsing/expressions/number.py +0 -32
  78. package/flowquery-py/src/parsing/expressions/operator.py +0 -271
  79. package/flowquery-py/src/parsing/expressions/reference.py +0 -47
  80. package/flowquery-py/src/parsing/expressions/string.py +0 -27
  81. package/flowquery-py/src/parsing/functions/__init__.py +0 -127
  82. package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
  83. package/flowquery-py/src/parsing/functions/async_function.py +0 -65
  84. package/flowquery-py/src/parsing/functions/avg.py +0 -55
  85. package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
  86. package/flowquery-py/src/parsing/functions/collect.py +0 -75
  87. package/flowquery-py/src/parsing/functions/count.py +0 -79
  88. package/flowquery-py/src/parsing/functions/date_.py +0 -61
  89. package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
  90. package/flowquery-py/src/parsing/functions/duration.py +0 -159
  91. package/flowquery-py/src/parsing/functions/element_id.py +0 -50
  92. package/flowquery-py/src/parsing/functions/function.py +0 -68
  93. package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
  94. package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
  95. package/flowquery-py/src/parsing/functions/functions.py +0 -67
  96. package/flowquery-py/src/parsing/functions/head.py +0 -39
  97. package/flowquery-py/src/parsing/functions/id_.py +0 -49
  98. package/flowquery-py/src/parsing/functions/join.py +0 -49
  99. package/flowquery-py/src/parsing/functions/keys.py +0 -34
  100. package/flowquery-py/src/parsing/functions/last.py +0 -39
  101. package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
  102. package/flowquery-py/src/parsing/functions/localtime.py +0 -57
  103. package/flowquery-py/src/parsing/functions/max_.py +0 -49
  104. package/flowquery-py/src/parsing/functions/min_.py +0 -49
  105. package/flowquery-py/src/parsing/functions/nodes.py +0 -48
  106. package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
  107. package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
  108. package/flowquery-py/src/parsing/functions/properties.py +0 -50
  109. package/flowquery-py/src/parsing/functions/rand.py +0 -28
  110. package/flowquery-py/src/parsing/functions/range_.py +0 -41
  111. package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
  112. package/flowquery-py/src/parsing/functions/relationships.py +0 -46
  113. package/flowquery-py/src/parsing/functions/replace.py +0 -39
  114. package/flowquery-py/src/parsing/functions/round_.py +0 -34
  115. package/flowquery-py/src/parsing/functions/schema.py +0 -40
  116. package/flowquery-py/src/parsing/functions/size.py +0 -34
  117. package/flowquery-py/src/parsing/functions/split.py +0 -54
  118. package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
  119. package/flowquery-py/src/parsing/functions/stringify.py +0 -49
  120. package/flowquery-py/src/parsing/functions/substring.py +0 -76
  121. package/flowquery-py/src/parsing/functions/sum.py +0 -51
  122. package/flowquery-py/src/parsing/functions/tail.py +0 -37
  123. package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
  124. package/flowquery-py/src/parsing/functions/time_.py +0 -57
  125. package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
  126. package/flowquery-py/src/parsing/functions/to_float.py +0 -46
  127. package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
  128. package/flowquery-py/src/parsing/functions/to_json.py +0 -35
  129. package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
  130. package/flowquery-py/src/parsing/functions/to_string.py +0 -41
  131. package/flowquery-py/src/parsing/functions/trim.py +0 -37
  132. package/flowquery-py/src/parsing/functions/type_.py +0 -47
  133. package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
  134. package/flowquery-py/src/parsing/logic/__init__.py +0 -15
  135. package/flowquery-py/src/parsing/logic/case.py +0 -28
  136. package/flowquery-py/src/parsing/logic/else_.py +0 -12
  137. package/flowquery-py/src/parsing/logic/end.py +0 -8
  138. package/flowquery-py/src/parsing/logic/then.py +0 -12
  139. package/flowquery-py/src/parsing/logic/when.py +0 -12
  140. package/flowquery-py/src/parsing/operations/__init__.py +0 -46
  141. package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
  142. package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
  143. package/flowquery-py/src/parsing/operations/call.py +0 -73
  144. package/flowquery-py/src/parsing/operations/create_node.py +0 -35
  145. package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
  146. package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
  147. package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
  148. package/flowquery-py/src/parsing/operations/group_by.py +0 -148
  149. package/flowquery-py/src/parsing/operations/limit.py +0 -33
  150. package/flowquery-py/src/parsing/operations/load.py +0 -148
  151. package/flowquery-py/src/parsing/operations/match.py +0 -52
  152. package/flowquery-py/src/parsing/operations/operation.py +0 -69
  153. package/flowquery-py/src/parsing/operations/order_by.py +0 -114
  154. package/flowquery-py/src/parsing/operations/projection.py +0 -21
  155. package/flowquery-py/src/parsing/operations/return_op.py +0 -88
  156. package/flowquery-py/src/parsing/operations/union.py +0 -115
  157. package/flowquery-py/src/parsing/operations/union_all.py +0 -17
  158. package/flowquery-py/src/parsing/operations/unwind.py +0 -42
  159. package/flowquery-py/src/parsing/operations/where.py +0 -43
  160. package/flowquery-py/src/parsing/operations/with_op.py +0 -18
  161. package/flowquery-py/src/parsing/parser.py +0 -1384
  162. package/flowquery-py/src/parsing/parser_state.py +0 -26
  163. package/flowquery-py/src/parsing/token_to_node.py +0 -109
  164. package/flowquery-py/src/tokenization/__init__.py +0 -23
  165. package/flowquery-py/src/tokenization/keyword.py +0 -54
  166. package/flowquery-py/src/tokenization/operator.py +0 -29
  167. package/flowquery-py/src/tokenization/string_walker.py +0 -158
  168. package/flowquery-py/src/tokenization/symbol.py +0 -19
  169. package/flowquery-py/src/tokenization/token.py +0 -693
  170. package/flowquery-py/src/tokenization/token_mapper.py +0 -53
  171. package/flowquery-py/src/tokenization/token_type.py +0 -21
  172. package/flowquery-py/src/tokenization/tokenizer.py +0 -214
  173. package/flowquery-py/src/tokenization/trie.py +0 -125
  174. package/flowquery-py/src/utils/__init__.py +0 -6
  175. package/flowquery-py/src/utils/object_utils.py +0 -20
  176. package/flowquery-py/src/utils/string_utils.py +0 -113
  177. package/flowquery-py/tests/__init__.py +0 -1
  178. package/flowquery-py/tests/compute/__init__.py +0 -1
  179. package/flowquery-py/tests/compute/test_runner.py +0 -4902
  180. package/flowquery-py/tests/graph/__init__.py +0 -1
  181. package/flowquery-py/tests/graph/test_create.py +0 -56
  182. package/flowquery-py/tests/graph/test_data.py +0 -73
  183. package/flowquery-py/tests/graph/test_match.py +0 -40
  184. package/flowquery-py/tests/parsing/__init__.py +0 -1
  185. package/flowquery-py/tests/parsing/test_context.py +0 -34
  186. package/flowquery-py/tests/parsing/test_expression.py +0 -248
  187. package/flowquery-py/tests/parsing/test_parser.py +0 -1237
  188. package/flowquery-py/tests/test_extensibility.py +0 -611
  189. package/flowquery-py/tests/tokenization/__init__.py +0 -1
  190. package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
  191. package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
  192. package/flowquery-py/tests/tokenization/test_trie.py +0 -30
  193. package/flowquery-vscode/.vscode-test.mjs +0 -5
  194. package/flowquery-vscode/.vscodeignore +0 -13
  195. package/flowquery-vscode/LICENSE +0 -21
  196. package/flowquery-vscode/README.md +0 -11
  197. package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
  198. package/flowquery-vscode/eslint.config.mjs +0 -25
  199. package/flowquery-vscode/extension.js +0 -508
  200. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
  201. package/flowquery-vscode/flowquery-worker.js +0 -66
  202. package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
  203. package/flowquery-vscode/jsconfig.json +0 -13
  204. package/flowquery-vscode/libs/page.css +0 -53
  205. package/flowquery-vscode/libs/table.css +0 -13
  206. package/flowquery-vscode/libs/tabs.css +0 -66
  207. package/flowquery-vscode/package-lock.json +0 -2917
  208. package/flowquery-vscode/package.json +0 -51
  209. package/flowquery-vscode/test/extension.test.js +0 -196
  210. package/flowquery-vscode/test/worker.test.js +0 -25
  211. package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
  212. package/jest.config.js +0 -14
  213. package/misc/apps/RAG/README.md +0 -29
  214. package/misc/apps/RAG/data/chats.json +0 -302
  215. package/misc/apps/RAG/data/emails.json +0 -182
  216. package/misc/apps/RAG/data/events.json +0 -226
  217. package/misc/apps/RAG/data/files.json +0 -172
  218. package/misc/apps/RAG/data/users.json +0 -158
  219. package/misc/apps/RAG/jest.config.js +0 -21
  220. package/misc/apps/RAG/package.json +0 -48
  221. package/misc/apps/RAG/public/index.html +0 -18
  222. package/misc/apps/RAG/src/App.css +0 -42
  223. package/misc/apps/RAG/src/App.tsx +0 -50
  224. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
  225. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
  226. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
  227. package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
  228. package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
  229. package/misc/apps/RAG/src/components/ChatInput.css +0 -23
  230. package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
  231. package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
  232. package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
  233. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
  234. package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
  235. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
  236. package/misc/apps/RAG/src/components/index.ts +0 -28
  237. package/misc/apps/RAG/src/graph/index.ts +0 -19
  238. package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
  239. package/misc/apps/RAG/src/index.tsx +0 -29
  240. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
  241. package/misc/apps/RAG/src/prompts/index.ts +0 -10
  242. package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
  243. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
  244. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
  245. package/misc/apps/RAG/src/utils/Llm.ts +0 -248
  246. package/misc/apps/RAG/src/utils/index.ts +0 -12
  247. package/misc/apps/RAG/tsconfig.json +0 -22
  248. package/misc/apps/RAG/webpack.config.js +0 -43
  249. package/misc/apps/README.md +0 -1
  250. package/misc/queries/analyze_catfacts.cql +0 -75
  251. package/misc/queries/azure_openai_completions.cql +0 -13
  252. package/misc/queries/azure_openai_models.cql +0 -9
  253. package/misc/queries/mock_pipeline.cql +0 -84
  254. package/misc/queries/openai_completions.cql +0 -15
  255. package/misc/queries/openai_models.cql +0 -13
  256. package/misc/queries/test.cql +0 -6
  257. package/misc/queries/tool_inference.cql +0 -24
  258. package/misc/queries/wisdom.cql +0 -6
  259. package/misc/queries/wisdom_letter_histogram.cql +0 -8
  260. package/src/compute/flowquery.ts +0 -46
  261. package/src/compute/runner.ts +0 -66
  262. package/src/extensibility.ts +0 -45
  263. package/src/graph/data.ts +0 -130
  264. package/src/graph/database.ts +0 -143
  265. package/src/graph/hops.ts +0 -22
  266. package/src/graph/node.ts +0 -122
  267. package/src/graph/node_data.ts +0 -18
  268. package/src/graph/node_reference.ts +0 -38
  269. package/src/graph/pattern.ts +0 -110
  270. package/src/graph/pattern_expression.ts +0 -48
  271. package/src/graph/patterns.ts +0 -36
  272. package/src/graph/physical_node.ts +0 -23
  273. package/src/graph/physical_relationship.ts +0 -23
  274. package/src/graph/relationship.ts +0 -167
  275. package/src/graph/relationship_data.ts +0 -31
  276. package/src/graph/relationship_match_collector.ts +0 -64
  277. package/src/graph/relationship_reference.ts +0 -25
  278. package/src/index.browser.ts +0 -46
  279. package/src/index.node.ts +0 -55
  280. package/src/index.ts +0 -12
  281. package/src/io/command_line.ts +0 -74
  282. package/src/parsing/alias.ts +0 -23
  283. package/src/parsing/alias_option.ts +0 -5
  284. package/src/parsing/ast_node.ts +0 -153
  285. package/src/parsing/base_parser.ts +0 -98
  286. package/src/parsing/components/csv.ts +0 -9
  287. package/src/parsing/components/from.ts +0 -12
  288. package/src/parsing/components/headers.ts +0 -12
  289. package/src/parsing/components/json.ts +0 -9
  290. package/src/parsing/components/null.ts +0 -9
  291. package/src/parsing/components/post.ts +0 -9
  292. package/src/parsing/components/text.ts +0 -9
  293. package/src/parsing/context.ts +0 -54
  294. package/src/parsing/data_structures/associative_array.ts +0 -43
  295. package/src/parsing/data_structures/json_array.ts +0 -31
  296. package/src/parsing/data_structures/key_value_pair.ts +0 -37
  297. package/src/parsing/data_structures/lookup.ts +0 -44
  298. package/src/parsing/data_structures/range_lookup.ts +0 -36
  299. package/src/parsing/expressions/boolean.ts +0 -21
  300. package/src/parsing/expressions/expression.ts +0 -150
  301. package/src/parsing/expressions/expression_map.ts +0 -22
  302. package/src/parsing/expressions/f_string.ts +0 -26
  303. package/src/parsing/expressions/identifier.ts +0 -22
  304. package/src/parsing/expressions/number.ts +0 -40
  305. package/src/parsing/expressions/operator.ts +0 -354
  306. package/src/parsing/expressions/reference.ts +0 -45
  307. package/src/parsing/expressions/string.ts +0 -34
  308. package/src/parsing/functions/aggregate_function.ts +0 -58
  309. package/src/parsing/functions/async_function.ts +0 -64
  310. package/src/parsing/functions/avg.ts +0 -47
  311. package/src/parsing/functions/coalesce.ts +0 -49
  312. package/src/parsing/functions/collect.ts +0 -54
  313. package/src/parsing/functions/count.ts +0 -54
  314. package/src/parsing/functions/date.ts +0 -63
  315. package/src/parsing/functions/datetime.ts +0 -63
  316. package/src/parsing/functions/duration.ts +0 -143
  317. package/src/parsing/functions/element_id.ts +0 -51
  318. package/src/parsing/functions/function.ts +0 -60
  319. package/src/parsing/functions/function_factory.ts +0 -195
  320. package/src/parsing/functions/function_metadata.ts +0 -217
  321. package/src/parsing/functions/functions.ts +0 -70
  322. package/src/parsing/functions/head.ts +0 -42
  323. package/src/parsing/functions/id.ts +0 -51
  324. package/src/parsing/functions/join.ts +0 -40
  325. package/src/parsing/functions/keys.ts +0 -29
  326. package/src/parsing/functions/last.ts +0 -42
  327. package/src/parsing/functions/localdatetime.ts +0 -63
  328. package/src/parsing/functions/localtime.ts +0 -58
  329. package/src/parsing/functions/max.ts +0 -37
  330. package/src/parsing/functions/min.ts +0 -37
  331. package/src/parsing/functions/nodes.ts +0 -54
  332. package/src/parsing/functions/predicate_function.ts +0 -48
  333. package/src/parsing/functions/predicate_sum.ts +0 -47
  334. package/src/parsing/functions/properties.ts +0 -56
  335. package/src/parsing/functions/rand.ts +0 -21
  336. package/src/parsing/functions/range.ts +0 -37
  337. package/src/parsing/functions/reducer_element.ts +0 -10
  338. package/src/parsing/functions/relationships.ts +0 -52
  339. package/src/parsing/functions/replace.ts +0 -38
  340. package/src/parsing/functions/round.ts +0 -28
  341. package/src/parsing/functions/schema.ts +0 -39
  342. package/src/parsing/functions/size.ts +0 -28
  343. package/src/parsing/functions/split.ts +0 -45
  344. package/src/parsing/functions/string_distance.ts +0 -83
  345. package/src/parsing/functions/stringify.ts +0 -37
  346. package/src/parsing/functions/substring.ts +0 -68
  347. package/src/parsing/functions/sum.ts +0 -41
  348. package/src/parsing/functions/tail.ts +0 -39
  349. package/src/parsing/functions/temporal_utils.ts +0 -180
  350. package/src/parsing/functions/time.ts +0 -58
  351. package/src/parsing/functions/timestamp.ts +0 -37
  352. package/src/parsing/functions/to_float.ts +0 -50
  353. package/src/parsing/functions/to_integer.ts +0 -50
  354. package/src/parsing/functions/to_json.ts +0 -28
  355. package/src/parsing/functions/to_lower.ts +0 -28
  356. package/src/parsing/functions/to_string.ts +0 -32
  357. package/src/parsing/functions/trim.ts +0 -28
  358. package/src/parsing/functions/type.ts +0 -39
  359. package/src/parsing/functions/value_holder.ts +0 -13
  360. package/src/parsing/logic/case.ts +0 -26
  361. package/src/parsing/logic/else.ts +0 -12
  362. package/src/parsing/logic/end.ts +0 -9
  363. package/src/parsing/logic/then.ts +0 -12
  364. package/src/parsing/logic/when.ts +0 -12
  365. package/src/parsing/operations/aggregated_return.ts +0 -22
  366. package/src/parsing/operations/aggregated_with.ts +0 -18
  367. package/src/parsing/operations/call.ts +0 -69
  368. package/src/parsing/operations/create_node.ts +0 -39
  369. package/src/parsing/operations/create_relationship.ts +0 -38
  370. package/src/parsing/operations/delete_node.ts +0 -33
  371. package/src/parsing/operations/delete_relationship.ts +0 -32
  372. package/src/parsing/operations/group_by.ts +0 -137
  373. package/src/parsing/operations/limit.ts +0 -31
  374. package/src/parsing/operations/load.ts +0 -146
  375. package/src/parsing/operations/match.ts +0 -54
  376. package/src/parsing/operations/operation.ts +0 -69
  377. package/src/parsing/operations/order_by.ts +0 -126
  378. package/src/parsing/operations/projection.ts +0 -18
  379. package/src/parsing/operations/return.ts +0 -76
  380. package/src/parsing/operations/union.ts +0 -114
  381. package/src/parsing/operations/union_all.ts +0 -16
  382. package/src/parsing/operations/unwind.ts +0 -36
  383. package/src/parsing/operations/where.ts +0 -42
  384. package/src/parsing/operations/with.ts +0 -20
  385. package/src/parsing/parser.ts +0 -1641
  386. package/src/parsing/parser_state.ts +0 -25
  387. package/src/parsing/token_to_node.ts +0 -114
  388. package/src/tokenization/keyword.ts +0 -50
  389. package/src/tokenization/operator.ts +0 -25
  390. package/src/tokenization/string_walker.ts +0 -197
  391. package/src/tokenization/symbol.ts +0 -15
  392. package/src/tokenization/token.ts +0 -764
  393. package/src/tokenization/token_mapper.ts +0 -53
  394. package/src/tokenization/token_type.ts +0 -16
  395. package/src/tokenization/tokenizer.ts +0 -250
  396. package/src/tokenization/trie.ts +0 -117
  397. package/src/utils/object_utils.ts +0 -17
  398. package/src/utils/string_utils.ts +0 -114
  399. package/tests/compute/runner.test.ts +0 -4559
  400. package/tests/extensibility.test.ts +0 -643
  401. package/tests/graph/create.test.ts +0 -36
  402. package/tests/graph/data.test.ts +0 -58
  403. package/tests/graph/match.test.ts +0 -29
  404. package/tests/parsing/context.test.ts +0 -27
  405. package/tests/parsing/expression.test.ts +0 -303
  406. package/tests/parsing/parser.test.ts +0 -1327
  407. package/tests/tokenization/token_mapper.test.ts +0 -47
  408. package/tests/tokenization/tokenizer.test.ts +0 -191
  409. package/tests/tokenization/trie.test.ts +0 -20
  410. package/tsconfig.json +0 -19
  411. package/typedoc.json +0 -16
  412. package/vscode-settings.json.recommended +0 -16
  413. package/webpack.config.js +0 -26
@@ -1,708 +0,0 @@
1
- /**
2
- * FlowQuery Agent
3
- *
4
- * Orchestrates the multi-step flow:
5
- * 1. Send user query to LLM to generate a FlowQuery statement
6
- * 2. Execute the FlowQuery statement
7
- * 3. Send results back to LLM for interpretation
8
- * 4. Return final response to user
9
- */
10
- import { generateInterpretationPrompt } from "../prompts";
11
- import { FlowQueryExecutionResult, FlowQueryExecutor } from "../utils/FlowQueryExecutor";
12
- import { FlowQueryExtraction, extractFlowQuery } from "../utils/FlowQueryExtractor";
13
- import { LlmOptions, llm, llmStream } from "../utils/Llm";
14
- import { isAdaptiveCard } from "./AdaptiveCardRenderer";
15
-
16
- /**
17
- * Represents a step in the agent's execution process.
18
- */
19
- export interface AgentStep {
20
- type: "query_generation" | "query_execution" | "interpretation" | "direct_response" | "retry";
21
- content: string;
22
- timestamp: Date;
23
- metadata?: {
24
- query?: string;
25
- executionResult?: FlowQueryExecutionResult;
26
- extraction?: FlowQueryExtraction;
27
- };
28
- }
29
-
30
- /**
31
- * Result of the agent's processing.
32
- */
33
- export interface AgentResult {
34
- /** Final response text to show the user */
35
- finalResponse: string;
36
- /** Steps taken during processing (for debugging/transparency) */
37
- steps: AgentStep[];
38
- /** Whether processing was successful */
39
- success: boolean;
40
- /** Error message if processing failed */
41
- error?: string;
42
- }
43
-
44
- /**
45
- * Callback for streaming agent responses.
46
- */
47
- export type AgentStreamCallback = (chunk: string, step: AgentStep["type"]) => void;
48
-
49
- /**
50
- * Options for the FlowQuery agent.
51
- */
52
- export interface FlowQueryAgentOptions {
53
- /** System prompt for query generation */
54
- systemPrompt: string;
55
- /** LLM options to use */
56
- llmOptions?: LlmOptions;
57
- /** Conversation history */
58
- conversationHistory?: Array<{ role: "user" | "assistant"; content: string }>;
59
- /** Callback for streaming responses */
60
- onStream?: AgentStreamCallback;
61
- /** Whether to show intermediate steps to the user */
62
- showIntermediateSteps?: boolean;
63
- /** Maximum number of retry attempts for query execution (default: 2) */
64
- maxRetries?: number;
65
- }
66
-
67
- /**
68
- * FlowQuery Agent class that orchestrates the multi-step query processing flow.
69
- *
70
- * @example
71
- * ```typescript
72
- * const agent = new FlowQueryAgent();
73
- * const result = await agent.processQuery("Show me all users", {
74
- * systemPrompt: "You are a helpful assistant..."
75
- * });
76
- * ```
77
- */
78
- export class FlowQueryAgent {
79
- private readonly flowQueryExecutor: FlowQueryExecutor;
80
-
81
- /**
82
- * Creates a new FlowQueryAgent instance.
83
- * @param executor - Optional custom FlowQueryExecutor instance. If not provided, a new one will be created.
84
- */
85
- constructor(executor?: FlowQueryExecutor) {
86
- this.flowQueryExecutor = executor ?? new FlowQueryExecutor();
87
- }
88
-
89
- /**
90
- * Process a user query through the FlowQuery agent.
91
- *
92
- * @param userQuery - The natural language query from the user
93
- * @param options - Agent configuration options
94
- * @returns The agent result including final response and steps taken
95
- */
96
- async processQuery(userQuery: string, options: FlowQueryAgentOptions): Promise<AgentResult> {
97
- const steps: AgentStep[] = [];
98
- const {
99
- systemPrompt,
100
- llmOptions = {},
101
- conversationHistory = [],
102
- onStream,
103
- showIntermediateSteps = true,
104
- } = options;
105
-
106
- try {
107
- // Step 1: Generate FlowQuery from natural language
108
- const generationResponse = await llm(userQuery, {
109
- ...llmOptions,
110
- systemPrompt,
111
- messages: conversationHistory,
112
- });
113
-
114
- const generationContent = generationResponse.choices[0]?.message?.content || "";
115
-
116
- steps.push({
117
- type: "query_generation",
118
- content: generationContent,
119
- timestamp: new Date(),
120
- });
121
-
122
- // Step 2: Extract the FlowQuery from the response
123
- const extraction = extractFlowQuery(generationContent);
124
-
125
- // If no query needed (direct response from LLM)
126
- if (extraction.noQueryNeeded || !extraction.found) {
127
- const directResponse = extraction.directResponse || generationContent;
128
-
129
- steps.push({
130
- type: "direct_response",
131
- content: directResponse,
132
- timestamp: new Date(),
133
- metadata: { extraction },
134
- });
135
-
136
- return {
137
- finalResponse: directResponse,
138
- steps,
139
- success: true,
140
- };
141
- }
142
-
143
- // Step 3: Execute the FlowQuery
144
- let executionResult = await this.flowQueryExecutor.execute(extraction.query!);
145
-
146
- steps.push({
147
- type: "query_execution",
148
- content: this.flowQueryExecutor.formatResult(executionResult),
149
- timestamp: new Date(),
150
- metadata: {
151
- query: extraction.query!,
152
- executionResult,
153
- extraction,
154
- },
155
- });
156
-
157
- // If execution failed, attempt retry with error context
158
- if (!executionResult.success) {
159
- const maxRetries = options.maxRetries ?? 2;
160
- let retryCount = 0;
161
- let currentQuery = extraction.query!;
162
- let currentError = executionResult.error;
163
- let currentResult = executionResult;
164
-
165
- while (!currentResult.success && retryCount < maxRetries) {
166
- retryCount++;
167
-
168
- steps.push({
169
- type: "retry",
170
- content: `Retry ${retryCount}: Error was "${currentError}"`,
171
- timestamp: new Date(),
172
- metadata: {
173
- query: currentQuery,
174
- executionResult: currentResult,
175
- },
176
- });
177
-
178
- // Ask LLM to generate a corrected query
179
- const correctedQuery = await this.generateCorrectedQuery(
180
- userQuery,
181
- currentQuery,
182
- currentError || "Unknown error",
183
- steps,
184
- options
185
- );
186
-
187
- if (!correctedQuery) {
188
- // LLM couldn't generate a correction, fall back to error interpretation
189
- const errorInterpretation = await this.interpretError(
190
- userQuery,
191
- currentQuery,
192
- currentResult,
193
- options
194
- );
195
-
196
- return {
197
- finalResponse: errorInterpretation,
198
- steps,
199
- success: false,
200
- error: currentResult.error,
201
- };
202
- }
203
-
204
- // Try executing the corrected query
205
- currentQuery = correctedQuery;
206
- currentResult = await this.flowQueryExecutor.execute(correctedQuery);
207
- currentError = currentResult.error;
208
-
209
- steps.push({
210
- type: "query_execution",
211
- content: this.flowQueryExecutor.formatResult(currentResult),
212
- timestamp: new Date(),
213
- metadata: {
214
- query: correctedQuery,
215
- executionResult: currentResult,
216
- },
217
- });
218
- }
219
-
220
- // If still failing after retries, interpret the error
221
- if (!currentResult.success) {
222
- const errorInterpretation = await this.interpretError(
223
- userQuery,
224
- currentQuery,
225
- currentResult,
226
- options
227
- );
228
-
229
- return {
230
- finalResponse: errorInterpretation,
231
- steps,
232
- success: false,
233
- error: currentResult.error,
234
- };
235
- }
236
-
237
- // Update for interpretation phase
238
- executionResult = currentResult;
239
- extraction.query = currentQuery;
240
- }
241
-
242
- // Step 4: Send results to LLM for interpretation
243
- const interpretationPrompt = this.buildInterpretationPrompt(
244
- userQuery,
245
- extraction.query!,
246
- executionResult
247
- );
248
-
249
- let finalResponse = "";
250
-
251
- if (onStream) {
252
- // Stream the interpretation response
253
- for await (const chunk of llmStream(interpretationPrompt, {
254
- ...llmOptions,
255
- systemPrompt: generateInterpretationPrompt(),
256
- messages: conversationHistory,
257
- })) {
258
- const deltaContent = chunk.choices?.[0]?.delta?.content || "";
259
- if (deltaContent) {
260
- finalResponse += deltaContent;
261
- onStream(deltaContent, "interpretation");
262
- }
263
- }
264
- } else {
265
- const interpretationResponse = await llm(interpretationPrompt, {
266
- ...llmOptions,
267
- systemPrompt: generateInterpretationPrompt(),
268
- messages: conversationHistory,
269
- });
270
- finalResponse = interpretationResponse.choices[0]?.message?.content || "";
271
- }
272
-
273
- steps.push({
274
- type: "interpretation",
275
- content: finalResponse,
276
- timestamp: new Date(),
277
- });
278
-
279
- // Build the complete response with optional intermediate steps
280
- let completeResponse = "";
281
-
282
- if (showIntermediateSteps && extraction.explanation) {
283
- completeResponse += extraction.explanation + "\n\n";
284
- }
285
-
286
- if (showIntermediateSteps) {
287
- completeResponse += `**Query executed:**\n\`\`\`flowquery\n${extraction.query}\n\`\`\`\n\n`;
288
- }
289
-
290
- completeResponse += finalResponse;
291
-
292
- return {
293
- finalResponse: completeResponse,
294
- steps,
295
- success: true,
296
- };
297
- } catch (error) {
298
- const errorMessage = error instanceof Error ? error.message : String(error);
299
-
300
- return {
301
- finalResponse: `⚠️ An error occurred: ${errorMessage}`,
302
- steps,
303
- success: false,
304
- error: errorMessage,
305
- };
306
- }
307
- }
308
-
309
- /**
310
- * Process a query with streaming support for the final interpretation.
311
- */
312
- async *processQueryStream(
313
- userQuery: string,
314
- options: FlowQueryAgentOptions
315
- ): AsyncGenerator<
316
- {
317
- chunk: string;
318
- step: AgentStep["type"];
319
- done: boolean;
320
- steps?: AgentStep[];
321
- adaptiveCard?: Record<string, unknown>;
322
- newMessage?: boolean;
323
- },
324
- void,
325
- unknown
326
- > {
327
- const steps: AgentStep[] = [];
328
- const {
329
- systemPrompt,
330
- llmOptions = {},
331
- conversationHistory = [],
332
- showIntermediateSteps = true,
333
- } = options;
334
-
335
- try {
336
- // Step 1: Generate FlowQuery from natural language (non-streaming for speed)
337
- const generationResponse = await llm(userQuery, {
338
- ...llmOptions,
339
- systemPrompt,
340
- messages: conversationHistory,
341
- });
342
-
343
- const generationContent = generationResponse.choices[0]?.message?.content || "";
344
-
345
- steps.push({
346
- type: "query_generation",
347
- content: generationContent,
348
- timestamp: new Date(),
349
- });
350
-
351
- // Step 2: Extract the FlowQuery
352
- const extraction = extractFlowQuery(generationContent);
353
-
354
- // If no query needed
355
- if (extraction.noQueryNeeded || !extraction.found) {
356
- const directResponse = extraction.directResponse || generationContent;
357
-
358
- steps.push({
359
- type: "direct_response",
360
- content: directResponse,
361
- timestamp: new Date(),
362
- metadata: { extraction },
363
- });
364
-
365
- yield { chunk: directResponse, step: "direct_response", done: true, steps };
366
- return;
367
- }
368
-
369
- // Emit intermediate step: show the query being executed
370
- if (showIntermediateSteps) {
371
- yield {
372
- chunk: `\`\`\`flowquery\n${extraction.query}\n\`\`\`\n\n`,
373
- step: "query_generation",
374
- done: false,
375
- };
376
- }
377
-
378
- // Step 3: Execute the FlowQuery
379
- let executionResult = await this.flowQueryExecutor.execute(extraction.query!);
380
-
381
- steps.push({
382
- type: "query_execution",
383
- content: this.flowQueryExecutor.formatResult(executionResult),
384
- timestamp: new Date(),
385
- metadata: {
386
- query: extraction.query!,
387
- executionResult,
388
- extraction,
389
- },
390
- });
391
-
392
- // Handle execution errors with retry logic
393
- if (!executionResult.success) {
394
- const maxRetries = options.maxRetries ?? 2;
395
- let retryCount = 0;
396
- let currentQuery = extraction.query!;
397
- let currentError = executionResult.error;
398
- let currentResult = executionResult;
399
-
400
- while (!currentResult.success && retryCount < maxRetries) {
401
- retryCount++;
402
-
403
- // Show the failure in the current message before marking it complete
404
- yield {
405
- chunk: `\n⚠️ **Query execution failed:** ${currentError}\n`,
406
- step: "query_execution",
407
- done: false,
408
- };
409
-
410
- // Complete the previous message before starting a new one
411
- yield {
412
- chunk: "",
413
- step: "query_execution",
414
- done: true,
415
- };
416
-
417
- // Notify user of retry attempt - start a new message for the retry
418
- yield {
419
- chunk: `🔄 Attempting to fix (retry ${retryCount}/${maxRetries})...\n\n`,
420
- step: "retry",
421
- done: false,
422
- newMessage: true,
423
- };
424
-
425
- steps.push({
426
- type: "retry",
427
- content: `Retry ${retryCount}: Error was "${currentError}"`,
428
- timestamp: new Date(),
429
- metadata: {
430
- query: currentQuery,
431
- executionResult: currentResult,
432
- },
433
- });
434
-
435
- // Ask LLM to generate a corrected query
436
- const correctedQuery = await this.generateCorrectedQuery(
437
- userQuery,
438
- currentQuery,
439
- currentError || "Unknown error",
440
- steps,
441
- options
442
- );
443
-
444
- if (!correctedQuery) {
445
- // LLM couldn't generate a correction
446
- yield {
447
- chunk: `Unable to generate a corrected query. Please try rephrasing your request.\n`,
448
- step: "retry",
449
- done: true,
450
- steps,
451
- };
452
- return;
453
- }
454
-
455
- // Show the corrected query
456
- if (showIntermediateSteps) {
457
- yield {
458
- chunk: `**Corrected query:**\n\`\`\`flowquery\n${correctedQuery}\n\`\`\`\n\n`,
459
- step: "retry",
460
- done: false,
461
- };
462
- }
463
-
464
- // Try executing the corrected query
465
- currentQuery = correctedQuery;
466
- currentResult = await this.flowQueryExecutor.execute(correctedQuery);
467
- currentError = currentResult.error;
468
-
469
- steps.push({
470
- type: "query_execution",
471
- content: this.flowQueryExecutor.formatResult(currentResult),
472
- timestamp: new Date(),
473
- metadata: {
474
- query: correctedQuery,
475
- executionResult: currentResult,
476
- },
477
- });
478
- }
479
-
480
- // If still failing after retries, give up
481
- if (!currentResult.success) {
482
- const errorMessage = `⚠️ Query execution failed after ${maxRetries} retries: ${currentError}\n\nLast query attempted:\n\`\`\`flowquery\n${currentQuery}\n\`\`\``;
483
- yield { chunk: errorMessage, step: "query_execution", done: true, steps };
484
- return;
485
- }
486
-
487
- // Mark the retry message as complete before proceeding to interpretation
488
- yield {
489
- chunk: "",
490
- step: "retry",
491
- done: true,
492
- };
493
-
494
- // Update executionResult for interpretation phase
495
- executionResult = currentResult;
496
- extraction.query = currentQuery;
497
- }
498
-
499
- // Check if the result contains an Adaptive Card
500
- const adaptiveCard = this.extractAdaptiveCardFromResults(executionResult.results);
501
-
502
- // Step 4: Stream the interpretation
503
- const interpretationPrompt = this.buildInterpretationPrompt(
504
- userQuery,
505
- extraction.query!,
506
- executionResult,
507
- !!adaptiveCard
508
- );
509
-
510
- let interpretationContent = "";
511
-
512
- for await (const chunk of llmStream(interpretationPrompt, {
513
- ...llmOptions,
514
- systemPrompt: generateInterpretationPrompt(),
515
- messages: conversationHistory,
516
- })) {
517
- const deltaContent = chunk.choices?.[0]?.delta?.content || "";
518
- if (deltaContent) {
519
- interpretationContent += deltaContent;
520
- yield { chunk: deltaContent, step: "interpretation", done: false };
521
- }
522
- }
523
-
524
- steps.push({
525
- type: "interpretation",
526
- content: interpretationContent,
527
- timestamp: new Date(),
528
- });
529
-
530
- yield { chunk: "", step: "interpretation", done: true, steps, adaptiveCard };
531
- } catch (error) {
532
- const errorMessage = error instanceof Error ? error.message : String(error);
533
- yield {
534
- chunk: `⚠️ An error occurred: ${errorMessage}`,
535
- step: "interpretation",
536
- done: true,
537
- steps,
538
- };
539
- }
540
- }
541
-
542
- /**
543
- * Extract an Adaptive Card from the execution results.
544
- * Checks if any result is an Adaptive Card (type: "AdaptiveCard") and returns it.
545
- * Searches for Adaptive Cards at the top level or within any property of result objects.
546
- */
547
- private extractAdaptiveCardFromResults(
548
- results: unknown[] | undefined
549
- ): Record<string, unknown> | undefined {
550
- if (!results || !Array.isArray(results)) {
551
- return undefined;
552
- }
553
-
554
- for (const result of results) {
555
- // Check if the result itself is an Adaptive Card
556
- if (isAdaptiveCard(result)) {
557
- return result;
558
- }
559
-
560
- // Check if any property of the result object is an Adaptive Card
561
- if (typeof result === "object" && result !== null) {
562
- const obj = result as Record<string, unknown>;
563
- for (const value of Object.values(obj)) {
564
- if (isAdaptiveCard(value)) {
565
- return value as Record<string, unknown>;
566
- }
567
- }
568
- }
569
- }
570
-
571
- return undefined;
572
- }
573
-
574
- /**
575
- * Build the prompt for the interpretation phase.
576
- */
577
- private buildInterpretationPrompt(
578
- originalQuery: string,
579
- flowQuery: string,
580
- executionResult: FlowQueryExecutionResult,
581
- hasAdaptiveCard: boolean = false
582
- ): string {
583
- const resultsJson = JSON.stringify(executionResult.results, null, 2);
584
- const resultCount = executionResult.results?.length || 0;
585
-
586
- let prompt = `The user asked: "${originalQuery}"
587
-
588
- This was translated to the following FlowQuery:
589
- \`\`\`flowquery
590
- ${flowQuery}
591
- \`\`\`
592
-
593
- The query executed successfully in ${executionResult.executionTime.toFixed(2)}ms and returned ${resultCount} result(s):
594
-
595
- \`\`\`json
596
- ${resultsJson}
597
- \`\`\`
598
-
599
- `;
600
-
601
- if (hasAdaptiveCard) {
602
- prompt += `The result is an Adaptive Card that will be rendered automatically in the UI. Please provide a brief introduction or context for the data shown in the card, but do NOT recreate the table or list the data in your response since the card will display it visually.`;
603
- } else {
604
- prompt += `Please interpret these results and provide a helpful response to the user's original question.`;
605
- }
606
-
607
- return prompt;
608
- }
609
-
610
- /**
611
- * Generate a corrected FlowQuery by sending the error back to the LLM.
612
- * This is used for retry logic when query execution fails.
613
- */
614
- private async generateCorrectedQuery(
615
- originalQuery: string,
616
- failedQuery: string,
617
- errorMessage: string,
618
- previousSteps: AgentStep[],
619
- options: FlowQueryAgentOptions
620
- ): Promise<string | null> {
621
- const { systemPrompt, llmOptions = {}, conversationHistory = [] } = options;
622
-
623
- // Build context from previous steps
624
- const stepsContext = previousSteps
625
- .filter((step) => step.type === "query_execution" || step.type === "retry")
626
- .map((step) => {
627
- if (step.type === "retry") {
628
- return `- Retry attempt: ${step.content}`;
629
- }
630
- return `- Query: \`${step.metadata?.query}\` → Error: ${step.metadata?.executionResult?.error || "unknown"}`;
631
- })
632
- .join("\n");
633
-
634
- const retryPrompt = `The user asked: "${originalQuery}"
635
-
636
- I generated the following FlowQuery:
637
- \`\`\`flowquery
638
- ${failedQuery}
639
- \`\`\`
640
-
641
- However, the query failed with this error:
642
- ${errorMessage}
643
-
644
- ${stepsContext ? `Previous attempts:\n${stepsContext}\n\n` : ""}Please analyze the error and generate a CORRECTED FlowQuery that will work. Pay close attention to:
645
- - Syntax errors in the query
646
- - Incorrect loader names or function names
647
- - Missing or incorrect parameters
648
- - Data type mismatches
649
-
650
- Generate the corrected query using the same format as before (with explanation if needed).`;
651
-
652
- try {
653
- const response = await llm(retryPrompt, {
654
- ...llmOptions,
655
- systemPrompt,
656
- messages: conversationHistory,
657
- });
658
-
659
- const responseContent = response.choices[0]?.message?.content || "";
660
- const extraction = extractFlowQuery(responseContent);
661
-
662
- if (extraction.found && extraction.query) {
663
- return extraction.query;
664
- }
665
-
666
- return null;
667
- } catch (error) {
668
- console.error("Error generating corrected query:", error);
669
- return null;
670
- }
671
- }
672
-
673
- /**
674
- * Handle execution errors by asking LLM to explain or suggest fixes.
675
- */
676
- private async interpretError(
677
- originalQuery: string,
678
- flowQuery: string,
679
- executionResult: FlowQueryExecutionResult,
680
- options: FlowQueryAgentOptions
681
- ): Promise<string> {
682
- const errorPrompt = `The user asked: "${originalQuery}"
683
-
684
- This was translated to the following FlowQuery:
685
- \`\`\`flowquery
686
- ${flowQuery}
687
- \`\`\`
688
-
689
- However, the query failed with the following error:
690
- ${executionResult.error}
691
-
692
- Please explain what went wrong in user-friendly terms and, if possible, suggest how to fix the issue or rephrase their request.`;
693
-
694
- const response = await llm(errorPrompt, {
695
- ...options.llmOptions,
696
- systemPrompt:
697
- "You are a helpful assistant explaining query errors. Be concise and helpful.",
698
- messages: options.conversationHistory,
699
- });
700
-
701
- return (
702
- response.choices[0]?.message?.content ||
703
- `The query failed with error: ${executionResult.error}`
704
- );
705
- }
706
- }
707
-
708
- export default FlowQueryAgent;