rasa-pro 3.14.0.dev5__py3-none-any.whl → 3.14.0.dev6__py3-none-any.whl

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.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (464) hide show
  1. rasa/agents/agent_factory.py +122 -0
  2. rasa/agents/agent_manager.py +163 -0
  3. rasa/agents/constants.py +40 -0
  4. rasa/agents/core/agent_protocol.py +107 -0
  5. rasa/agents/core/types.py +70 -0
  6. rasa/agents/exceptions.py +8 -0
  7. rasa/agents/protocol/__init__.py +5 -0
  8. rasa/agents/protocol/a2a/a2a_agent.py +662 -0
  9. rasa/agents/protocol/mcp/mcp_base_agent.py +684 -0
  10. rasa/agents/protocol/mcp/mcp_open_agent.py +290 -0
  11. rasa/agents/protocol/mcp/mcp_task_agent.py +484 -0
  12. rasa/agents/schemas/__init__.py +12 -0
  13. rasa/agents/schemas/agent_input.py +38 -0
  14. rasa/agents/schemas/agent_output.py +26 -0
  15. rasa/agents/schemas/agent_tool_result.py +67 -0
  16. rasa/agents/schemas/agent_tool_schema.py +134 -0
  17. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +15 -0
  18. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +17 -0
  19. rasa/agents/utils.py +72 -0
  20. rasa/api.py +5 -0
  21. rasa/cli/arguments/default_arguments.py +12 -0
  22. rasa/cli/arguments/run.py +2 -0
  23. rasa/cli/dialogue_understanding_test.py +4 -0
  24. rasa/cli/e2e_test.py +4 -0
  25. rasa/cli/inspect.py +3 -0
  26. rasa/cli/llm_fine_tuning.py +5 -0
  27. rasa/cli/project_templates/tutorial/config.yml +1 -2
  28. rasa/cli/run.py +4 -0
  29. rasa/cli/scaffold.py +2 -46
  30. rasa/cli/shell.py +3 -0
  31. rasa/constants.py +6 -0
  32. rasa/core/actions/action.py +56 -10
  33. rasa/core/agent.py +19 -1
  34. rasa/core/available_agents.py +199 -0
  35. rasa/core/available_endpoints.py +30 -0
  36. rasa/core/channels/channel.py +3 -4
  37. rasa/core/channels/development_inspector.py +4 -4
  38. rasa/core/channels/hangouts.py +2 -2
  39. rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-63212852.js} +1 -1
  40. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-eecf6b13.js} +1 -1
  41. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-8f798a9a.js} +1 -1
  42. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +1 -0
  43. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-df71a04c.js} +1 -1
  44. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-9b275968.js} +1 -1
  45. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +1 -0
  46. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-1c669cad.js} +1 -1
  47. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-b1553799.js} +1 -1
  48. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-112388d6.js} +1 -1
  49. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-fdebec47.js} +1 -1
  50. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-6280ede1.js} +1 -1
  51. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +1 -0
  52. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-e1dc03e5.js} +1 -1
  53. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-83f68c51.js} +1 -1
  54. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-22f8666f.js} +1 -1
  55. rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-ca9e6217.js} +1 -1
  56. rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-c5ceb692.js} +1 -1
  57. rasa/core/channels/inspector/dist/assets/index-3e293924.js +1353 -0
  58. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-faa9999b.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-c4dda8d9.js} +1 -1
  60. rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-d4307784.js} +1 -1
  61. rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-0567aaa7.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-c11b95cf.js} +1 -1
  63. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-0c7d3ca9.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-34b433fa.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-4cab816e.js} +1 -1
  66. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-8c22fa9e.js} +1 -1
  67. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-70ce9e8e.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fbcd7fc9.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-45f05ea6.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-beab1ea6.js} +1 -1
  71. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-2f29dbd5.js} +1 -1
  72. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-951eac83.js} +1 -1
  73. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-897fbfdd.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-d667fac1.js} +1 -1
  75. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e3205144.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-4abeb0e2.js} +1 -1
  77. rasa/core/channels/inspector/dist/index.html +2 -2
  78. rasa/core/channels/inspector/index.html +1 -1
  79. rasa/core/channels/inspector/src/App.tsx +11 -10
  80. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +3 -12
  81. rasa/core/channels/inspector/src/components/DialogueStack.tsx +6 -4
  82. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  83. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  84. rasa/core/channels/inspector/src/types.ts +4 -0
  85. rasa/core/channels/socketio.py +51 -212
  86. rasa/core/channels/studio_chat.py +29 -49
  87. rasa/core/channels/voice_stream/genesys.py +1 -1
  88. rasa/core/channels/voice_stream/voice_channel.py +3 -5
  89. rasa/core/constants.py +4 -0
  90. rasa/core/policies/enterprise_search_policy.py +11 -6
  91. rasa/core/policies/flow_policy.py +4 -4
  92. rasa/core/policies/flows/flow_executor.py +470 -45
  93. rasa/core/policies/flows/mcp_tool_executor.py +277 -0
  94. rasa/core/policies/intentless_policy.py +1 -1
  95. rasa/core/policies/unexpected_intent_policy.py +1 -0
  96. rasa/core/processor.py +18 -15
  97. rasa/core/run.py +11 -14
  98. rasa/core/tracker_stores/tracker_store.py +3 -7
  99. rasa/core/train.py +1 -1
  100. rasa/core/training/interactive.py +16 -16
  101. rasa/core/training/story_conflict.py +5 -5
  102. rasa/core/utils.py +21 -1
  103. rasa/dialogue_understanding/commands/__init__.py +8 -0
  104. rasa/dialogue_understanding/commands/cancel_flow_command.py +97 -4
  105. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +11 -0
  106. rasa/dialogue_understanding/commands/clarify_command.py +10 -0
  107. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  108. rasa/dialogue_understanding/commands/knowledge_answer_command.py +11 -0
  109. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  110. rasa/dialogue_understanding/commands/start_flow_command.py +164 -8
  111. rasa/dialogue_understanding/commands/utils.py +6 -2
  112. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  113. rasa/dialogue_understanding/generator/flow_retrieval.py +9 -10
  114. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  115. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  116. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  117. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +61 -0
  118. rasa/{cli/project_templates/telco/prompts/command-generator.jinja2 → dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2} +7 -3
  119. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +81 -0
  120. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +81 -0
  121. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +7 -6
  122. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +7 -6
  123. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +41 -2
  124. rasa/dialogue_understanding/patterns/continue_interrupted.py +163 -1
  125. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +52 -8
  126. rasa/dialogue_understanding/processor/command_processor.py +31 -15
  127. rasa/dialogue_understanding/stack/dialogue_stack.py +123 -2
  128. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  129. rasa/dialogue_understanding/stack/utils.py +17 -2
  130. rasa/dialogue_understanding_test/du_test_runner.py +7 -2
  131. rasa/e2e_test/e2e_test_runner.py +12 -2
  132. rasa/engine/caching.py +2 -2
  133. rasa/engine/recipes/default_components.py +10 -18
  134. rasa/engine/storage/local_model_storage.py +2 -45
  135. rasa/graph_components/validators/default_recipe_validator.py +134 -134
  136. rasa/hooks.py +5 -5
  137. rasa/llm_fine_tuning/utils.py +2 -2
  138. rasa/model_manager/model_api.py +5 -4
  139. rasa/model_manager/runner_service.py +1 -1
  140. rasa/model_manager/socket_bridge.py +14 -20
  141. rasa/model_manager/trainer_service.py +9 -12
  142. rasa/model_manager/utils.py +29 -1
  143. rasa/model_manager/warm_rasa_process.py +1 -1
  144. rasa/nlu/extractors/extractor.py +2 -1
  145. rasa/plugin.py +8 -8
  146. rasa/privacy/privacy_manager.py +11 -2
  147. rasa/server.py +14 -2
  148. rasa/shared/agents/utils.py +35 -0
  149. rasa/shared/constants.py +5 -0
  150. rasa/shared/core/constants.py +12 -1
  151. rasa/shared/core/domain.py +11 -58
  152. rasa/shared/core/events.py +327 -0
  153. rasa/shared/core/flows/flow_step.py +1 -7
  154. rasa/shared/core/flows/flows_list.py +15 -5
  155. rasa/shared/core/flows/flows_yaml_schema.json +112 -186
  156. rasa/shared/core/flows/steps/call.py +53 -5
  157. rasa/shared/core/flows/validation.py +177 -7
  158. rasa/shared/core/flows/yaml_flows_io.py +9 -17
  159. rasa/shared/core/slots.py +2 -6
  160. rasa/shared/core/trackers.py +5 -2
  161. rasa/shared/exceptions.py +4 -0
  162. rasa/shared/importers/importer.py +0 -6
  163. rasa/shared/importers/rasa.py +1 -1
  164. rasa/shared/importers/utils.py +10 -80
  165. rasa/shared/providers/_utils.py +44 -60
  166. rasa/shared/providers/embedding/default_litellm_embedding_client.py +0 -2
  167. rasa/shared/providers/llm/_base_litellm_client.py +39 -7
  168. rasa/shared/providers/llm/default_litellm_llm_client.py +0 -2
  169. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  170. rasa/shared/providers/llm/llm_client.py +7 -3
  171. rasa/shared/providers/llm/llm_response.py +66 -0
  172. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  173. rasa/shared/utils/llm.py +28 -5
  174. rasa/shared/utils/mcp/server_connection.py +166 -0
  175. rasa/shared/utils/schemas/events.py +42 -0
  176. rasa/shared/utils/yaml.py +3 -1
  177. rasa/studio/upload.py +47 -16
  178. rasa/telemetry.py +23 -97
  179. rasa/tracing/instrumentation/instrumentation.py +14 -10
  180. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  181. rasa/utils/common.py +79 -0
  182. rasa/utils/io.py +9 -27
  183. rasa/utils/json_utils.py +1 -6
  184. rasa/utils/log_utils.py +2 -6
  185. rasa/utils/ml_utils.py +1 -1
  186. rasa/utils/tensorflow/rasa_layers.py +1 -1
  187. rasa/utils/train_utils.py +15 -15
  188. rasa/validator.py +19 -21
  189. rasa/version.py +1 -1
  190. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/METADATA +14 -17
  191. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/RECORD +201 -432
  192. rasa/builder/README.md +0 -120
  193. rasa/builder/auth.py +0 -176
  194. rasa/builder/config.py +0 -115
  195. rasa/builder/copilot/constants.py +0 -25
  196. rasa/builder/copilot/copilot.py +0 -372
  197. rasa/builder/copilot/copilot_response_handler.py +0 -487
  198. rasa/builder/copilot/copilot_templated_message_provider.py +0 -58
  199. rasa/builder/copilot/exceptions.py +0 -20
  200. rasa/builder/copilot/models.py +0 -431
  201. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +0 -726
  202. rasa/builder/copilot/telemetry.py +0 -195
  203. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +0 -16
  204. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +0 -26
  205. rasa/builder/document_retrieval/constants.py +0 -15
  206. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +0 -64
  207. rasa/builder/document_retrieval/inkeep_document_retrieval.py +0 -238
  208. rasa/builder/document_retrieval/models.py +0 -62
  209. rasa/builder/download.py +0 -140
  210. rasa/builder/exceptions.py +0 -55
  211. rasa/builder/guardrails/__init__.py +0 -1
  212. rasa/builder/guardrails/constants.py +0 -3
  213. rasa/builder/guardrails/exceptions.py +0 -4
  214. rasa/builder/guardrails/lakera.py +0 -206
  215. rasa/builder/guardrails/models.py +0 -199
  216. rasa/builder/guardrails/utils.py +0 -305
  217. rasa/builder/job_manager.py +0 -87
  218. rasa/builder/jobs.py +0 -234
  219. rasa/builder/llm_service.py +0 -246
  220. rasa/builder/logging_utils.py +0 -209
  221. rasa/builder/main.py +0 -174
  222. rasa/builder/models.py +0 -197
  223. rasa/builder/project_generator.py +0 -450
  224. rasa/builder/project_info.py +0 -72
  225. rasa/builder/scrape_rasa_docs.py +0 -97
  226. rasa/builder/service.py +0 -1142
  227. rasa/builder/shared/tracker_context.py +0 -212
  228. rasa/builder/skill_to_bot_prompt.jinja2 +0 -164
  229. rasa/builder/training_service.py +0 -132
  230. rasa/builder/validation_service.py +0 -93
  231. rasa/cli/project_templates/basic/actions/action_api.py +0 -15
  232. rasa/cli/project_templates/basic/actions/action_human_handoff.py +0 -44
  233. rasa/cli/project_templates/basic/config.yml +0 -23
  234. rasa/cli/project_templates/basic/credentials.yml +0 -34
  235. rasa/cli/project_templates/basic/data/general/feedback.yml +0 -20
  236. rasa/cli/project_templates/basic/data/general/goodbye.yml +0 -6
  237. rasa/cli/project_templates/basic/data/general/hello.yml +0 -7
  238. rasa/cli/project_templates/basic/data/general/help.yml +0 -6
  239. rasa/cli/project_templates/basic/data/general/human_handoff.yml +0 -16
  240. rasa/cli/project_templates/basic/data/general/welcome.yml +0 -9
  241. rasa/cli/project_templates/basic/data/system/pattern_completed.yml +0 -7
  242. rasa/cli/project_templates/basic/data/system/pattern_correction.yml +0 -7
  243. rasa/cli/project_templates/basic/data/system/pattern_search.yml +0 -8
  244. rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +0 -8
  245. rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +0 -65
  246. rasa/cli/project_templates/basic/docs/template.txt +0 -7
  247. rasa/cli/project_templates/basic/domain/general/assistant_details.yml +0 -12
  248. rasa/cli/project_templates/basic/domain/general/bot_identity.yml +0 -5
  249. rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +0 -5
  250. rasa/cli/project_templates/basic/domain/general/feedback.yml +0 -28
  251. rasa/cli/project_templates/basic/domain/general/goodbye.yml +0 -7
  252. rasa/cli/project_templates/basic/domain/general/help.yml +0 -5
  253. rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +0 -35
  254. rasa/cli/project_templates/basic/domain/general/utils.yml +0 -13
  255. rasa/cli/project_templates/basic/domain/general/welcome.yml +0 -7
  256. rasa/cli/project_templates/basic/endpoints.yml +0 -73
  257. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
  258. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  259. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  260. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  261. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  262. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  263. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  264. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  265. rasa/cli/project_templates/finance/actions/database.py +0 -277
  266. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  267. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  268. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  269. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  270. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  271. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  272. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +0 -18
  273. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  274. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  275. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  276. rasa/cli/project_templates/finance/config.yml +0 -21
  277. rasa/cli/project_templates/finance/credentials.yml +0 -32
  278. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  279. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  280. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  281. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  282. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  283. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  284. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  285. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  286. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +0 -10
  287. rasa/cli/project_templates/finance/data/cards/block_card.yml +0 -66
  288. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  289. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  290. rasa/cli/project_templates/finance/data/general/feedback.yml +0 -20
  291. rasa/cli/project_templates/finance/data/general/goodbye.yml +0 -6
  292. rasa/cli/project_templates/finance/data/general/hello.yml +0 -7
  293. rasa/cli/project_templates/finance/data/general/help.yml +0 -9
  294. rasa/cli/project_templates/finance/data/general/human_handoff.yml +0 -16
  295. rasa/cli/project_templates/finance/data/general/welcome.yml +0 -9
  296. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  297. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +0 -7
  298. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +0 -7
  299. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +0 -8
  300. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +0 -8
  301. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  302. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  303. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  304. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  305. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  306. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  307. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  308. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  309. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  310. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  311. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  312. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +0 -67
  313. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  314. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  315. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  316. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  317. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  318. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  319. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  320. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  321. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  322. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  323. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  324. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  325. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  326. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  327. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  328. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  329. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  330. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  331. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  332. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  333. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  334. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  335. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  336. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  337. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  338. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  339. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  340. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  341. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  342. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  343. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  344. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  345. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  346. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  347. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  348. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  349. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  350. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  351. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  352. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  353. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  354. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  355. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  356. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  357. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  358. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  359. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  360. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  361. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  362. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  363. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  364. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  365. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  366. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  367. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  368. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  369. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  370. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  371. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  372. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  373. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  374. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  375. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  376. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  377. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  378. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  379. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  380. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  381. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  382. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  383. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  384. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  385. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  386. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  387. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  388. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  389. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  390. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  391. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  392. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  393. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  394. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +0 -11
  395. rasa/cli/project_templates/finance/domain/cards/block_card.yml +0 -101
  396. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  397. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
  398. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  399. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +0 -5
  400. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  401. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -28
  402. rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
  403. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  404. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +0 -30
  405. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  406. rasa/cli/project_templates/finance/domain/general/welcome.yml +0 -8
  407. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  408. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  409. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  410. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +0 -79
  411. rasa/cli/project_templates/finance/endpoints.yml +0 -63
  412. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
  413. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  414. rasa/cli/project_templates/telco/actions/actions_billing.py +0 -204
  415. rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +0 -48
  416. rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +0 -28
  417. rasa/cli/project_templates/telco/actions/actions_session_start.py +0 -18
  418. rasa/cli/project_templates/telco/config.yml +0 -25
  419. rasa/cli/project_templates/telco/credentials.yml +0 -33
  420. rasa/cli/project_templates/telco/csvs/billing.csv +0 -10
  421. rasa/cli/project_templates/telco/csvs/customers.csv +0 -5
  422. rasa/cli/project_templates/telco/data/flows/flow_global.yml +0 -5
  423. rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +0 -8
  424. rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +0 -7
  425. rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +0 -73
  426. rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +0 -45
  427. rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +0 -7
  428. rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +0 -6
  429. rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +0 -7
  430. rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +0 -9
  431. rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +0 -1
  432. rasa/cli/project_templates/telco/docs/restart_router.txt +0 -6
  433. rasa/cli/project_templates/telco/docs/run_speed_test.txt +0 -6
  434. rasa/cli/project_templates/telco/domain/domain_global.yml +0 -29
  435. rasa/cli/project_templates/telco/domain/domain_patterns.yml +0 -17
  436. rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +0 -20
  437. rasa/cli/project_templates/telco/domain/domain_reset_router.yml +0 -11
  438. rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +0 -24
  439. rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +0 -74
  440. rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +0 -102
  441. rasa/cli/project_templates/telco/endpoints.yml +0 -60
  442. rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +0 -62
  443. rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +0 -130
  444. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +0 -68
  445. rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +0 -13
  446. rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +0 -47
  447. rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +0 -21
  448. rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +0 -15
  449. rasa/core/channels/constants.py +0 -3
  450. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
  451. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
  452. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
  453. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
  454. rasa/utils/openapi.py +0 -144
  455. /rasa/{builder → agents}/__init__.py +0 -0
  456. /rasa/{builder/copilot → agents/core}/__init__.py +0 -0
  457. /rasa/{builder/copilot/prompts → agents/protocol/a2a}/__init__.py +0 -0
  458. /rasa/{builder/copilot/templated_messages → agents/protocol/mcp}/__init__.py +0 -0
  459. /rasa/{builder/document_retrieval → agents/templates}/__init__.py +0 -0
  460. /rasa/{cli/project_templates/finance/actions/accounts → shared/agents}/__init__.py +0 -0
  461. /rasa/{cli/project_templates/finance/actions/cards → shared/utils/mcp}/__init__.py +0 -0
  462. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/NOTICE +0 -0
  463. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/WHEEL +0 -0
  464. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/entry_points.txt +0 -0
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import re
4
4
  from dataclasses import dataclass
5
- from typing import Any, Dict, List, Optional
5
+ from typing import Any, Dict, List, Optional, Tuple
6
6
 
7
7
  import structlog
8
8
 
@@ -11,15 +11,29 @@ from rasa.dialogue_understanding.commands.command_syntax_manager import (
11
11
  CommandSyntaxManager,
12
12
  CommandSyntaxVersion,
13
13
  )
14
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
15
+ from rasa.dialogue_understanding.stack.frames.dialogue_stack_frame import (
16
+ DialogueStackFrame,
17
+ )
14
18
  from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
19
+ AgentStackFrame,
20
+ AgentState,
15
21
  FlowStackFrameType,
16
22
  UserFlowStackFrame,
17
23
  )
24
+ from rasa.dialogue_understanding.stack.frames.pattern_frame import PatternFlowStackFrame
18
25
  from rasa.dialogue_understanding.stack.utils import (
26
+ is_continue_interrupted_flow_active,
19
27
  top_user_flow_frame,
20
28
  user_flows_on_the_stack,
21
29
  )
22
- from rasa.shared.core.events import Event, FlowInterrupted
30
+ from rasa.shared.core.events import (
31
+ AgentInterrupted,
32
+ AgentResumed,
33
+ Event,
34
+ FlowInterrupted,
35
+ FlowResumed,
36
+ )
23
37
  from rasa.shared.core.flows import FlowsList
24
38
  from rasa.shared.core.trackers import DialogueStateTracker
25
39
 
@@ -71,12 +85,7 @@ class StartFlowCommand(Command):
71
85
  original_stack = original_tracker.stack
72
86
  applied_events: List[Event] = []
73
87
 
74
- if self.flow in user_flows_on_the_stack(stack):
75
- structlogger.debug(
76
- "start_flow_command.skip_command.already_started_flow", command=self
77
- )
78
- return []
79
- elif self.flow not in all_flows.flow_ids:
88
+ if self.flow not in all_flows.flow_ids:
80
89
  structlogger.debug(
81
90
  "start_flow_command.skip_command.start_invalid_flow_id", command=self
82
91
  )
@@ -87,9 +96,36 @@ class StartFlowCommand(Command):
87
96
  original_user_frame.flow(all_flows) if original_user_frame else None
88
97
  )
89
98
 
99
+ # if the original top flow is the same as the flow to start, the flow is
100
+ # already active, do nothing
101
+ if original_top_flow is not None and original_top_flow.id == self.flow:
102
+ # in case continue_interrupted is not active, skip the already active start
103
+ # flow command
104
+ if not is_continue_interrupted_flow_active(stack):
105
+ return []
106
+
107
+ # if the continue interrupted flow is active, and the command generator
108
+ # predicted a start flow command for the flow which is on top of the stack,
109
+ # we just need to remove the pattern_continue_interrupted frame(s) from the
110
+ # stack
111
+ stack = _remove_pattern_continue_interrupted_frames(stack)
112
+ return applied_events + tracker.create_stack_updated_events(stack)
113
+
114
+ # if the flow is already on the stack, resume it
115
+ if (
116
+ self.flow in user_flows_on_the_stack(stack)
117
+ and original_user_frame is not None
118
+ ):
119
+ # if pattern_continue_interrupted is active, we need to remove it
120
+ # from the stack before resuming the flow
121
+ stack = _remove_pattern_continue_interrupted_frames(stack)
122
+ return self.resume_flow(tracker, stack, original_user_frame)
123
+
90
124
  frame_type = FlowStackFrameType.REGULAR
91
125
 
92
126
  if original_top_flow:
127
+ # if the original top flow is not the same as the flow to start,
128
+ # interrupt the current active flow
93
129
  frame_type = FlowStackFrameType.INTERRUPT
94
130
 
95
131
  if original_user_frame is not None:
@@ -99,6 +135,24 @@ class StartFlowCommand(Command):
99
135
  )
100
136
  )
101
137
 
138
+ # If there is an active agent frame, interrupt it
139
+ active_agent_stack_frame = stack.find_active_agent_frame()
140
+ if active_agent_stack_frame:
141
+ structlogger.debug(
142
+ "start_flow_command.interrupt_agent",
143
+ command=self,
144
+ agent_id=active_agent_stack_frame.agent_id,
145
+ frame_id=active_agent_stack_frame.frame_id,
146
+ flow_id=active_agent_stack_frame.flow_id,
147
+ )
148
+ active_agent_stack_frame.state = AgentState.INTERRUPTED
149
+ applied_events.append(
150
+ AgentInterrupted(
151
+ active_agent_stack_frame.agent_id,
152
+ active_agent_stack_frame.flow_id,
153
+ )
154
+ )
155
+
102
156
  structlogger.debug("start_flow_command.start_flow", command=self)
103
157
  stack.push(UserFlowStackFrame(flow_id=self.flow, frame_type=frame_type))
104
158
  return applied_events + tracker.create_stack_updated_events(stack)
@@ -144,3 +198,105 @@ class StartFlowCommand(Command):
144
198
  CommandSyntaxManager.get_syntax_version(),
145
199
  mapper[CommandSyntaxManager.get_default_syntax_version()],
146
200
  )
201
+
202
+ def resume_flow(
203
+ self,
204
+ tracker: DialogueStateTracker,
205
+ stack: DialogueStack,
206
+ original_user_frame: UserFlowStackFrame,
207
+ ) -> List[Event]:
208
+ """Resumes a flow by reordering frames."""
209
+ applied_events: List[Event] = []
210
+
211
+ # Resume existing flow by reordering frames
212
+ frames_to_resume, user_frame_to_resume = self._collect_frames_to_resume(
213
+ stack, self.flow
214
+ )
215
+
216
+ # if the flow is not on the stack, do nothing
217
+ # this should not happen, but just in case
218
+ if user_frame_to_resume is None:
219
+ structlogger.error(
220
+ "start_flow_command.resume_flow.no_user_frame_to_resume",
221
+ command=self,
222
+ )
223
+ return []
224
+
225
+ # move the frames to the top of the stack, e.g. reorder the frames
226
+ # on the stack
227
+ stack.move_frames_to_top(frames_to_resume)
228
+ agent_stack_frame = next(
229
+ (frame for frame in frames_to_resume if isinstance(frame, AgentStackFrame)),
230
+ None,
231
+ )
232
+ if agent_stack_frame:
233
+ agent_id = agent_stack_frame.agent_id
234
+ applied_events.append(AgentResumed(agent_id, agent_stack_frame.flow_id))
235
+
236
+ # Create flow interruption and resumption events
237
+ applied_events.extend(
238
+ [
239
+ # the current active flow is interrupted
240
+ FlowInterrupted(
241
+ original_user_frame.flow_id, original_user_frame.step_id
242
+ ),
243
+ # the flow, which was on the stack, is resumed
244
+ FlowResumed(user_frame_to_resume.flow_id, user_frame_to_resume.step_id),
245
+ ]
246
+ )
247
+
248
+ return applied_events + tracker.create_stack_updated_events(stack)
249
+
250
+ def _collect_frames_to_resume(
251
+ self, stack: DialogueStack, target_flow_id: str
252
+ ) -> Tuple[List[DialogueStackFrame], Optional[UserFlowStackFrame]]:
253
+ """Collect frames that need to be resumed for the target flow.
254
+
255
+ Args:
256
+ stack: The stack to collect frames from.
257
+ target_flow_id: The ID of the flow to resume.
258
+
259
+ Returns:
260
+ A tuple containing (frames_to_resume, frame_to_resume).
261
+ """
262
+ frames_to_resume: List[DialogueStackFrame] = []
263
+ frame_found = False
264
+ frame_to_resume = None
265
+
266
+ for frame in stack.frames:
267
+ if isinstance(frame, UserFlowStackFrame) and (
268
+ frame.frame_type == FlowStackFrameType.REGULAR
269
+ or frame.frame_type == FlowStackFrameType.INTERRUPT
270
+ ):
271
+ if frame.flow_id == target_flow_id:
272
+ frames_to_resume.append(frame)
273
+ frame_to_resume = frame
274
+ frame_found = True
275
+ continue
276
+ elif frame_found:
277
+ break
278
+
279
+ if frame_found:
280
+ frames_to_resume.append(frame)
281
+
282
+ return list(frames_to_resume), frame_to_resume
283
+
284
+
285
+ def _remove_pattern_continue_interrupted_frames(stack: DialogueStack) -> DialogueStack:
286
+ """Remove pattern_continue_interrupted frames from the stack."""
287
+ if not is_continue_interrupted_flow_active(stack):
288
+ return stack
289
+
290
+ # remove pattern_continue_interrupted from the stack
291
+ top_frame = stack.top()
292
+ while isinstance(top_frame, PatternFlowStackFrame):
293
+ # If the top frame is a pattern frame, we need to remove it
294
+ # before continuing with the active user flow frame.
295
+ # This prevents the pattern frame
296
+ # from being left on the stack when the flow is started
297
+ # which would prevent pattern_completed to be triggered
298
+ # once the user flow is completed.
299
+ stack.pop()
300
+ top_frame = stack.top()
301
+
302
+ return stack
@@ -6,7 +6,10 @@ from rasa.dialogue_understanding.patterns.validate_slot import (
6
6
  ValidateSlotPatternFlowStackFrame,
7
7
  )
8
8
  from rasa.shared.constants import ACTION_ASK_PREFIX, UTTER_ASK_PREFIX
9
- from rasa.shared.core.events import Event, SlotSet
9
+ from rasa.shared.core.events import (
10
+ Event,
11
+ SlotSet,
12
+ )
10
13
  from rasa.shared.core.flows import FlowsList
11
14
  from rasa.shared.core.slots import Slot
12
15
  from rasa.shared.core.trackers import DialogueStateTracker
@@ -103,7 +106,8 @@ def create_validate_frames_from_slot_set_events(
103
106
  Args:
104
107
  tracker: The dialogue state tracker.
105
108
  events: List of events to process.
106
- should_break: whether or not to break after the first non-SlotSet event.
109
+ validate_frames: List to collect validation frames.
110
+ should_break: whether to break after the first non-SlotSet event.
107
111
  if True, break out of the event loop as soon as the first non-SlotSet
108
112
  event is encountered.
109
113
  if False, continue processing the events until the end.
@@ -9,9 +9,11 @@ from rasa.dialogue_understanding.commands import (
9
9
  ChitChatAnswerCommand,
10
10
  ClarifyCommand,
11
11
  Command,
12
+ ContinueAgentCommand,
12
13
  HumanHandoffCommand,
13
14
  KnowledgeAnswerCommand,
14
15
  RepeatBotMessagesCommand,
16
+ RestartAgentCommand,
15
17
  SetSlotCommand,
16
18
  SkipQuestionCommand,
17
19
  StartFlowCommand,
@@ -34,6 +36,8 @@ DEFAULT_COMMANDS = [
34
36
  HumanHandoffCommand,
35
37
  ClarifyCommand,
36
38
  RepeatBotMessagesCommand,
39
+ ContinueAgentCommand,
40
+ RestartAgentCommand,
37
41
  ]
38
42
 
39
43
 
@@ -219,6 +219,11 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
219
219
  if self.vector_store is not None:
220
220
  with self._model_storage.write_to(self._resource) as model_path:
221
221
  self.vector_store.save_local(model_path)
222
+ else:
223
+ structlogger.warning(
224
+ "flow_retrieval.persist_vector_store.not_initialized",
225
+ event_info="Vector store is None, not persisted.",
226
+ )
222
227
 
223
228
  def _persist_config(self) -> None:
224
229
  with self._model_storage.write_to(self._resource) as path:
@@ -244,16 +249,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
244
249
  )
245
250
 
246
251
  flows_to_embedd = flows.exclude_link_only_flows()
247
-
248
- if not flows_to_embedd:
249
- structlogger.debug(
250
- "flow_retrieval.populate_vector_store.no_flows_to_embed",
251
- event_info=(
252
- "No flows to embed in the vector store, skipping population."
253
- ),
254
- )
255
- return
256
-
257
252
  embeddings = self._create_embedder(self.config)
258
253
  documents = self._generate_flow_documents(flows_to_embedd, domain)
259
254
  try:
@@ -425,6 +420,10 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
425
420
  The top k documents with similarity scores.
426
421
  """
427
422
  if self.vector_store is None:
423
+ structlogger.error(
424
+ "flow_retrieval.query_vector_store.vector_store_not_configured",
425
+ event_info="Vector store is not configured",
426
+ )
428
427
  return []
429
428
  try:
430
429
  documents_with_scores = (
@@ -7,6 +7,7 @@ from jinja2 import Environment, Template, select_autoescape
7
7
 
8
8
  import rasa.dialogue_understanding.generator.utils
9
9
  import rasa.shared.utils.io
10
+ from rasa.core.available_agents import AvailableAgents
10
11
  from rasa.dialogue_understanding.commands import (
11
12
  Command,
12
13
  SetSlotCommand,
@@ -31,6 +32,7 @@ from rasa.engine.storage.resource import Resource
31
32
  from rasa.engine.storage.storage import ModelStorage
32
33
  from rasa.shared.core.constants import SetSlotExtractor
33
34
  from rasa.shared.core.domain import Domain
35
+ from rasa.shared.core.events import AgentStarted
34
36
  from rasa.shared.core.flows import Flow, FlowsList, FlowStep
35
37
  from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
36
38
  from rasa.shared.core.slot_mappings import SlotFillingManager
@@ -225,8 +227,7 @@ class LLMBasedCommandGenerator(
225
227
 
226
228
  @lru_cache
227
229
  def compile_template(self, template: str) -> Template:
228
- """
229
- Compile the prompt template and register custom filters.
230
+ """Compile the prompt template and register custom filters.
230
231
 
231
232
  Compiling the template is an expensive operation,
232
233
  so we cache the result.
@@ -361,20 +362,24 @@ class LLMBasedCommandGenerator(
361
362
  )
362
363
 
363
364
  def prepare_flows_for_template(
364
- self, flows: FlowsList, tracker: DialogueStateTracker
365
+ self,
366
+ flows: FlowsList,
367
+ tracker: DialogueStateTracker,
368
+ add_agent_info: bool = False,
365
369
  ) -> List[Dict[str, Any]]:
366
370
  """Format data on available flows for insertion into the prompt template.
367
371
 
368
372
  Args:
369
373
  flows: The flows available to the user.
370
374
  tracker: The tracker containing the current state of the conversation.
375
+ add_agent_info: Whether to add agent info to flows or not.
371
376
 
372
377
  Returns:
373
378
  The inputs for the prompt template.
374
379
  """
375
- result = []
380
+ result: List[Dict[str, Any]] = []
376
381
  for flow in flows.user_flows:
377
- slots_with_info = [
382
+ slots_with_info: List[Dict[str, Any]] = [
378
383
  {
379
384
  "name": q.collect,
380
385
  "description": q.description,
@@ -383,13 +388,46 @@ class LLMBasedCommandGenerator(
383
388
  for q in flow.get_collect_steps()
384
389
  if self.is_extractable(q, tracker)
385
390
  ]
386
- result.append(
387
- {
388
- "name": flow.id,
389
- "description": flow.description,
390
- "slots": slots_with_info,
391
- }
392
- )
391
+
392
+ agent_info: List[Dict[str, Any]] = []
393
+ if add_agent_info:
394
+ # add information about agents that have been started for this flow
395
+ agent_events = [
396
+ event
397
+ for event in tracker.events
398
+ if isinstance(event, AgentStarted) and event.flow_id == flow.id
399
+ ]
400
+ available_agents = [
401
+ AvailableAgents.get_agent_config(event.agent_id)
402
+ for event in agent_events
403
+ ]
404
+ if available_agents:
405
+ agent_info = [
406
+ {
407
+ "name": available_agent.agent.name,
408
+ "description": available_agent.agent.description,
409
+ }
410
+ for available_agent in available_agents
411
+ if available_agent is not None
412
+ ]
413
+
414
+ if agent_info:
415
+ result.append(
416
+ {
417
+ "name": flow.id,
418
+ "description": flow.description,
419
+ "slots": slots_with_info,
420
+ "agent_info": agent_info,
421
+ }
422
+ )
423
+ else:
424
+ result.append(
425
+ {
426
+ "name": flow.id,
427
+ "description": flow.description,
428
+ "slots": slots_with_info,
429
+ }
430
+ )
393
431
  return result
394
432
 
395
433
  @staticmethod
@@ -1,7 +1,7 @@
1
1
  from typing import Any, Dict, List, Optional, Text, Union
2
2
 
3
3
  import structlog
4
- from deprecated import deprecated # type: ignore[import]
4
+ from deprecated import deprecated # type: ignore[import-untyped]
5
5
 
6
6
  from rasa.dialogue_understanding.generator.single_step.single_step_llm_command_generator import ( # noqa: E501
7
7
  SingleStepLLMCommandGenerator,
@@ -2,7 +2,7 @@ import importlib.resources
2
2
  from typing import Any, Dict, List, Optional, Text, Tuple, Union
3
3
 
4
4
  import structlog
5
- from deprecated import deprecated # type: ignore[import]
5
+ from deprecated import deprecated # type: ignore[import-untyped]
6
6
  from jinja2 import Template
7
7
 
8
8
  import rasa.shared.utils.io
@@ -0,0 +1,61 @@
1
+ ## Task Description
2
+ Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests.
3
+
4
+ --
5
+
6
+ ## Available Actions:
7
+ * `start flow flow_name`: Starting a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
8
+ * `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
9
+ * `cancel flow`: Cancelling the current flow.
10
+ * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: Disambiguate which flow should be started when user input is ambiguous by listing the potential flows as options. For example, `disambiguate flows list_contacts add_contact remove_contact ...` if the user just wrote "contacts".
11
+ * `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
12
+ * `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
13
+ * `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
14
+ * `repeat message`: Repeating the last bot message.
15
+ {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
16
+ {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
17
+
18
+ --
19
+
20
+ ## General Tips
21
+ * Do not fill slots with abstract values or placeholders.
22
+ * For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
23
+ * Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
24
+ * Always refer to the slot description to determine what information should be extracted and how it should be formatted.
25
+ * For text slots, extract values exactly as provided by the user unless the slot description specifies otherwise. Preserve formatting and avoid rewording, truncation, or making assumptions.
26
+ * Only use information provided by the user.
27
+ * Use clarification in ambiguous cases.
28
+ * Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
29
+ * Do not cancel the flow unless the user explicitly requests it.
30
+ * Strictly adhere to the provided action format.
31
+ * Focus on the last message and take it one step at a time.
32
+ * Use the previous conversation steps only to aid understanding.
33
+
34
+ --
35
+
36
+ ## Available Flows and Slots
37
+ Use the following structured data:
38
+ ```json
39
+ {"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
40
+ ```
41
+
42
+ --
43
+
44
+ ## Current State
45
+ {% if current_flow != None %}Use the following structured data:
46
+ ```json
47
+ {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
48
+ ```{% else %}
49
+ You are currently not inside any flow.{% endif %}
50
+
51
+ ---
52
+
53
+ ## Conversation History
54
+ {{ current_conversation }}
55
+
56
+ ---
57
+
58
+ ## Task
59
+ Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
60
+
61
+ Your action list:
@@ -6,7 +6,7 @@ Your task is to analyze the current conversation context and generate a list of
6
6
  ## Available Flows and Slots
7
7
  Use the following structured data:
8
8
  ```json
9
- {"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":"{{ flow.description }}"{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":"{{ slot.description }}"{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
9
+ {"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
10
10
  ```
11
11
 
12
12
  ---
@@ -19,6 +19,9 @@ Use the following structured data:
19
19
  * `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
20
20
  * `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
21
21
  * `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
22
+ * `repeat message`: Repeating the last bot message.
23
+ {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
24
+ {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
22
25
 
23
26
  ---
24
27
 
@@ -38,9 +41,10 @@ Use the following structured data:
38
41
  ---
39
42
 
40
43
  ## Current State
41
- {% if current_flow != None %}Use the following structured data:
44
+ {% if current_flow != None %}
45
+ Use the following structured data:
42
46
  ```json
43
- {"active_flow":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":"{{ current_slot_description }}"},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":"{{ slot.description }}"{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
47
+ {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
44
48
  ```{% else %}
45
49
  You are currently not inside any flow.{% endif %}
46
50
 
@@ -0,0 +1,81 @@
1
+ ## Task Description
2
+ Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to off-topic and knowledge requests.
3
+
4
+ ---
5
+
6
+ ## Available Actions:
7
+ * `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
8
+ * `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
9
+ * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
10
+ * `search and reply`: Provide a response from the knowledge base to address the user's inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
11
+ * `cancel flow`: Cancel the current flow if the user requests it.
12
+ * `repeat message`: Repeat the last bot message.
13
+ {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
14
+ {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
15
+
16
+ ---
17
+
18
+ ## General Instructions
19
+ ### Start Flow
20
+ * Only start a flow if the user's message is clear and fully addressed by that flow's description and purpose.
21
+ * Pay close attention to exact wording and scope in the flow description — do not assume or “stretch” the intended use of a flow.
22
+ ### Set Slot
23
+ * Do not fill slots with abstract values or placeholders.
24
+ * For categorical slots, try to match the user message with allowed slot values. Use "other" if you cannot match it.
25
+ * Set the boolean slots based on the user's response. Map positive responses to `True`, and negative to `False`.
26
+ * Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
27
+ ### Disambiguate Flows
28
+ * Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
29
+ * If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
30
+ * If a single flow is a strong/plausible fit, prefer starting that flow directly.
31
+ * If a user's message unambiguously and distinctly matches multiple flows, start all relevant flows at once (rather than disambiguating).
32
+ ### Search and Reply
33
+ * Only start `search and reply` if the user intent is clear.
34
+ * Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
35
+ ### Cancel Flow
36
+ * Do not cancel any flow unless the user explicitly requests it.
37
+ * Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
38
+ ### General Tips
39
+ * Only use information provided by the user.
40
+ * Strictly adhere to the provided action format.
41
+ * Focus on the last message and take it one step at a time.
42
+ * Use the previous conversation steps only to aid understanding.
43
+
44
+ ---
45
+
46
+ ## Decision Rule Table
47
+ | Condition | Action |
48
+ |-------------------------------------------------------|--------------------|
49
+ | Flow perfectly matches user's message | start flow |
50
+ | Multiple flows are equally strong, relevant matches | disambiguate flows |
51
+ | User's message is unclear or imprecise | disambiguate flows |
52
+ | No flow fits at all, but knowledge base may help | search and reply |
53
+
54
+ ---
55
+
56
+ ## Available Flows and Slots
57
+ Use the following structured data:
58
+ ```json
59
+ {"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Current State
65
+ {% if current_flow != None %}Use the following structured data:
66
+ ```json
67
+ {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
68
+ ```{% else %}
69
+ You are currently not inside any flow.{% endif %}
70
+
71
+ ---
72
+
73
+ ## Conversation History
74
+ {{ current_conversation }}
75
+
76
+ ---
77
+
78
+ ## Task
79
+ Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
80
+
81
+ Your action list: