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
@@ -1,14 +1,25 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, List, Optional, Text
3
+ import asyncio
4
+ from typing import Any, Dict, List, Optional, Text, cast
4
5
 
5
6
  import structlog
6
7
  from jinja2 import Template
7
8
  from pypred import Predicate
8
- from structlog.contextvars import (
9
- bound_contextvars,
9
+ from structlog.contextvars import bound_contextvars
10
+
11
+ from rasa.agents.agent_manager import AgentManager
12
+ from rasa.agents.constants import (
13
+ A2A_AGENT_CONTEXT_ID_KEY,
14
+ AGENT_METADATA_AGENT_RESPONSE_KEY,
15
+ AGENT_METADATA_EXIT_IF_KEY,
16
+ AGENT_METADATA_TOOL_RESULTS_KEY,
17
+ MAX_AGENT_RETRY_DELAY_SECONDS,
10
18
  )
11
-
19
+ from rasa.agents.core.types import AgentStatus, ProtocolType
20
+ from rasa.agents.schemas import AgentInput, AgentOutput
21
+ from rasa.agents.schemas.agent_input import AgentInputSlot
22
+ from rasa.core.available_agents import AvailableAgents
12
23
  from rasa.core.available_endpoints import AvailableEndpoints
13
24
  from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
14
25
  from rasa.core.policies.flows.flow_exceptions import (
@@ -22,7 +33,8 @@ from rasa.core.policies.flows.flow_step_result import (
22
33
  FlowStepResult,
23
34
  PauseFlowReturnPrediction,
24
35
  )
25
- from rasa.dialogue_understanding.commands import CancelFlowCommand
36
+ from rasa.core.policies.flows.mcp_tool_executor import call_mcp_tool
37
+ from rasa.core.utils import get_slot_names_from_exit_conditions
26
38
  from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
27
39
  from rasa.dialogue_understanding.patterns.collect_information import (
28
40
  FLOW_PATTERN_COLLECT_INFORMATION,
@@ -49,17 +61,27 @@ from rasa.dialogue_understanding.stack.frames import (
49
61
  UserFlowStackFrame,
50
62
  )
51
63
  from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
64
+ AgentStackFrame,
65
+ AgentState,
52
66
  FlowStackFrameType,
53
67
  )
54
- from rasa.dialogue_understanding.stack.utils import (
55
- top_user_flow_frame,
56
- )
68
+ from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
69
+ from rasa.shared.agents.utils import get_protocol_type
57
70
  from rasa.shared.constants import RASA_PATTERN_HUMAN_HANDOFF
58
71
  from rasa.shared.core.constants import (
72
+ ACTION_AGENT_REQUEST_USER_INPUT_NAME,
59
73
  ACTION_LISTEN_NAME,
74
+ ACTION_METADATA_MESSAGE_KEY,
75
+ ACTION_METADATA_TEXT_KEY,
76
+ ACTION_SEND_TEXT_NAME,
77
+ FLOW_HASHES_SLOT,
60
78
  SILENCE_TIMEOUT_SLOT,
61
79
  )
62
80
  from rasa.shared.core.events import (
81
+ AgentCancelled,
82
+ AgentCompleted,
83
+ AgentResumed,
84
+ AgentStarted,
63
85
  Event,
64
86
  FlowCompleted,
65
87
  FlowResumed,
@@ -67,11 +89,7 @@ from rasa.shared.core.events import (
67
89
  SlotSet,
68
90
  )
69
91
  from rasa.shared.core.flows import FlowsList
70
- from rasa.shared.core.flows.flow import (
71
- END_STEP,
72
- Flow,
73
- FlowStep,
74
- )
92
+ from rasa.shared.core.flows.flow import END_STEP, Flow, FlowStep
75
93
  from rasa.shared.core.flows.flow_step_links import (
76
94
  ElseFlowStepLink,
77
95
  IfFlowStepLink,
@@ -88,15 +106,19 @@ from rasa.shared.core.flows.steps import (
88
106
  SetSlotsFlowStep,
89
107
  )
90
108
  from rasa.shared.core.flows.steps.constants import START_STEP
91
- from rasa.shared.core.slots import Slot, SlotRejection
92
- from rasa.shared.core.trackers import (
93
- DialogueStateTracker,
94
- )
109
+ from rasa.shared.core.slots import CategoricalSlot, Slot, SlotRejection
110
+ from rasa.shared.core.trackers import DialogueStateTracker
111
+ from rasa.shared.utils.llm import tracker_as_readable_transcript
95
112
 
96
113
  structlogger = structlog.get_logger()
97
114
 
98
115
  MAX_NUMBER_OF_STEPS = 250
99
116
 
117
+ MAX_AGENT_RETRIES = 3
118
+
119
+ # Slots that should not be forwarded to sub-agents via AgentInput
120
+ SLOTS_EXCLUDED_FOR_AGENT = [FLOW_HASHES_SLOT]
121
+
100
122
 
101
123
  def render_template_variables(text: str, context: Dict[Text, Any]) -> str:
102
124
  """Replace context variables in a text."""
@@ -148,6 +170,13 @@ def select_next_step_id(
148
170
  tracker: DialogueStateTracker,
149
171
  ) -> Optional[Text]:
150
172
  """Selects the next step id based on the current step."""
173
+ # if the current step is a call step to an agent, and we already have an
174
+ # AgentStackFrame on top of the stack, we need to return the current
175
+ # step id again in order to loop back to the agent.
176
+ agent_stack_frame = tracker.stack.top()
177
+ if agent_stack_frame and isinstance(agent_stack_frame, AgentStackFrame):
178
+ return current.id
179
+
151
180
  next_step = current.next
152
181
  if len(next_step.links) == 1 and isinstance(next_step.links[0], StaticFlowStepLink):
153
182
  return next_step.links[0].target
@@ -359,8 +388,11 @@ def reset_scoped_slots(
359
388
  return events
360
389
 
361
390
 
362
- def advance_flows(
363
- tracker: DialogueStateTracker, available_actions: List[str], flows: FlowsList
391
+ async def advance_flows(
392
+ tracker: DialogueStateTracker,
393
+ available_actions: List[str],
394
+ flows: FlowsList,
395
+ slots: List[Slot],
364
396
  ) -> FlowActionPrediction:
365
397
  """Advance the current flows until the next action.
366
398
 
@@ -368,6 +400,7 @@ def advance_flows(
368
400
  tracker: The tracker to get the next action for.
369
401
  available_actions: The actions that are available in the domain.
370
402
  flows: All flows.
403
+ slots: The slots that are available in the domain.
371
404
 
372
405
  Returns:
373
406
  The predicted action and the events to run.
@@ -377,13 +410,16 @@ def advance_flows(
377
410
  # if there are no flows, there is nothing to do
378
411
  return FlowActionPrediction(None, 0.0)
379
412
 
380
- return advance_flows_until_next_action(tracker, available_actions, flows)
413
+ return await advance_flows_until_next_action(
414
+ tracker, available_actions, flows, slots
415
+ )
381
416
 
382
417
 
383
- def advance_flows_until_next_action(
418
+ async def advance_flows_until_next_action(
384
419
  tracker: DialogueStateTracker,
385
420
  available_actions: List[str],
386
421
  flows: FlowsList,
422
+ slots: List[Slot],
387
423
  ) -> FlowActionPrediction:
388
424
  """Advance the flow and select the next action to execute.
389
425
 
@@ -441,7 +477,7 @@ def advance_flows_until_next_action(
441
477
 
442
478
  with bound_contextvars(step_id=next_step.id):
443
479
  step_stack = tracker.stack
444
- step_result = run_step(
480
+ step_result = await run_step(
445
481
  next_step,
446
482
  current_flow,
447
483
  step_stack,
@@ -449,6 +485,7 @@ def advance_flows_until_next_action(
449
485
  available_actions,
450
486
  flows,
451
487
  previous_step_id,
488
+ slots,
452
489
  )
453
490
  new_events = step_result.events
454
491
  if (
@@ -477,10 +514,9 @@ def advance_flows_until_next_action(
477
514
  # make sure we really return all events that got created during the
478
515
  # step execution of all steps (not only the last one)
479
516
  prediction.events = gathered_events
480
- prediction.metadata = {
481
- ACTIVE_FLOW_METADATA_KEY: tracker.active_flow,
482
- STEP_ID_METADATA_KEY: tracker.current_step_id,
483
- }
517
+ prediction.metadata = prediction.metadata or {}
518
+ prediction.metadata[ACTIVE_FLOW_METADATA_KEY] = tracker.active_flow
519
+ prediction.metadata[STEP_ID_METADATA_KEY] = tracker.current_step_id
484
520
  return prediction
485
521
  else:
486
522
  structlogger.warning("flow.step.execution.no_action")
@@ -522,6 +558,8 @@ def validate_collect_step(
522
558
 
523
559
  def cancel_flow_and_push_internal_error(stack: DialogueStack, flow_name: str) -> None:
524
560
  """Cancel the top user flow and push the internal error pattern."""
561
+ from rasa.dialogue_understanding.commands import CancelFlowCommand
562
+
525
563
  top_frame = stack.top()
526
564
 
527
565
  if isinstance(top_frame, BaseFlowStackFrame):
@@ -550,7 +588,7 @@ def attach_stack_metadata_to_events(
550
588
  event.metadata[ACTIVE_FLOW_METADATA_KEY] = flow_id
551
589
 
552
590
 
553
- def run_step(
591
+ async def run_step(
554
592
  step: FlowStep,
555
593
  flow: Flow,
556
594
  stack: DialogueStack,
@@ -558,6 +596,7 @@ def run_step(
558
596
  available_actions: List[str],
559
597
  flows: FlowsList,
560
598
  previous_step_id: str,
599
+ slots: List[Slot],
561
600
  ) -> FlowStepResult:
562
601
  """Run a single step of a flow.
563
602
 
@@ -576,6 +615,7 @@ def run_step(
576
615
  available_actions: The actions that are available in the domain.
577
616
  flows: All flows.
578
617
  previous_step_id: The ID of the previous step.
618
+ slots: The slots that are available in the domain.
579
619
 
580
620
  Returns:
581
621
  A result of running the step describing where to transition to.
@@ -615,7 +655,7 @@ def run_step(
615
655
  return _run_link_step(initial_events, stack, step)
616
656
 
617
657
  elif isinstance(step, CallFlowStep):
618
- return _run_call_step(initial_events, stack, step)
658
+ return await _run_call_step(initial_events, stack, step, tracker, slots)
619
659
 
620
660
  elif isinstance(step, SetSlotsFlowStep):
621
661
  return _run_set_slot_step(initial_events, step)
@@ -684,17 +724,26 @@ def _run_set_slot_step(
684
724
  return ContinueFlowWithNextStep(events=initial_events + slot_events)
685
725
 
686
726
 
687
- def _run_call_step(
688
- initial_events: List[Event], stack: DialogueStack, step: CallFlowStep
727
+ async def _run_call_step(
728
+ initial_events: List[Event],
729
+ stack: DialogueStack,
730
+ step: CallFlowStep,
731
+ tracker: DialogueStateTracker,
732
+ slots: List[Slot],
689
733
  ) -> FlowStepResult:
690
734
  structlogger.debug("flow.step.run.call")
691
- stack.push(
692
- UserFlowStackFrame(
693
- flow_id=step.call,
694
- frame_type=FlowStackFrameType.CALL,
695
- ),
696
- )
697
- return ContinueFlowWithNextStep(events=initial_events)
735
+ if step.is_calling_mcp_tool():
736
+ return await call_mcp_tool(initial_events, stack, step, tracker)
737
+ elif step.is_calling_agent():
738
+ return await run_agent(initial_events, stack, step, tracker, slots)
739
+ else:
740
+ stack.push(
741
+ UserFlowStackFrame(
742
+ flow_id=step.call,
743
+ frame_type=FlowStackFrameType.CALL,
744
+ ),
745
+ )
746
+ return ContinueFlowWithNextStep(events=initial_events)
698
747
 
699
748
 
700
749
  def _run_link_step(
@@ -740,14 +789,7 @@ def _run_action_step(
740
789
  # do not log about non-existing validation actions of collect steps
741
790
  utter_action_name = render_template_variables("{{context.utter}}", context)
742
791
  if utter_action_name not in available_actions:
743
- structlogger.warning(
744
- "flow.step.run.action.unknown",
745
- action=action_name,
746
- event_info=(
747
- f"The action '{action_name}' is not defined in the domain but "
748
- f"getting triggered by the flow '{step.flow_id}'."
749
- ),
750
- )
792
+ structlogger.warning("flow.step.run.action.unknown", action=action_name)
751
793
  return ContinueFlowWithNextStep(events=initial_events)
752
794
 
753
795
 
@@ -839,3 +881,386 @@ def _append_global_silence_timeout_event(
839
881
  AvailableEndpoints.get_instance().interaction_handling.global_silence_timeout,
840
882
  )
841
883
  )
884
+
885
+
886
+ def _reset_slots_covered_by_exit_if(
887
+ exit_conditions: List[str], tracker: DialogueStateTracker
888
+ ) -> None:
889
+ """Reset the slots covered by the exit_if condition."""
890
+ reset_slot_names = get_slot_names_from_exit_conditions(exit_conditions)
891
+ for slot_name in reset_slot_names:
892
+ if tracker.slots.get(slot_name) is not None:
893
+ tracker.update(SlotSet(slot_name, None))
894
+
895
+
896
+ async def run_agent(
897
+ initial_events: List[Event],
898
+ stack: DialogueStack,
899
+ step: CallFlowStep,
900
+ tracker: DialogueStateTracker,
901
+ slots: List[Slot],
902
+ ) -> FlowStepResult:
903
+ """Run an agent call step."""
904
+ structlogger.debug(
905
+ "flow.step.run_agent", agent_id=step.call, step_id=step.id, flow_id=step.flow_id
906
+ )
907
+
908
+ final_events = initial_events
909
+ agent_stack_frame = tracker.stack.find_agent_stack_frame_by_agent(
910
+ agent_id=step.call
911
+ )
912
+
913
+ if (
914
+ agent_stack_frame
915
+ and agent_stack_frame == stack.top()
916
+ and agent_stack_frame.state == AgentState.INTERRUPTED
917
+ ):
918
+ structlogger.debug(
919
+ "flow.step.run_agent.resume_interrupted_agent",
920
+ agent_id=step.call,
921
+ step_id=step.id,
922
+ flow_id=step.flow_id,
923
+ )
924
+ # The agent was previously interrupted when waiting for user input.
925
+ # Now we're back to the agent execution step and need to output the last message
926
+ # from the agent (user input request) again and wait for user input
927
+ cast(AgentStackFrame, stack.top()).state = AgentState.WAITING_FOR_INPUT
928
+ tracker.update_stack(stack)
929
+ utterance = (
930
+ agent_stack_frame.metadata.get(AGENT_METADATA_AGENT_RESPONSE_KEY, "")
931
+ if agent_stack_frame.metadata
932
+ else ""
933
+ )
934
+ final_events.append(AgentResumed(agent_id=step.call, flow_id=step.flow_id))
935
+ return PauseFlowReturnPrediction(
936
+ _create_agent_request_user_input_prediction(utterance, final_events)
937
+ )
938
+
939
+ agent_input_metadata = (
940
+ agent_stack_frame.metadata
941
+ if agent_stack_frame and agent_stack_frame.metadata
942
+ else {}
943
+ )
944
+ _update_agent_input_metadata_with_events(
945
+ agent_input_metadata, step.call, step.flow_id, tracker
946
+ )
947
+ if step.exit_if:
948
+ # TODO: this is a temporary fix to reset the slots covered by the exit_if
949
+ if (
950
+ agent_stack_frame
951
+ and agent_stack_frame.frame_id == f"restart_agent_{step.call}"
952
+ ):
953
+ # when restarting an agent, we need to reset the slots covered by the
954
+ # exit_if condition so that the agent can run again.
955
+ _reset_slots_covered_by_exit_if(step.exit_if, tracker)
956
+ agent_input_metadata[AGENT_METADATA_EXIT_IF_KEY] = step.exit_if
957
+ agent_input = AgentInput(
958
+ id=step.call,
959
+ user_message=tracker.latest_message.text or ""
960
+ if tracker.latest_message
961
+ else "",
962
+ slots=_prepare_slots_for_agent(tracker.current_slot_values(), slots),
963
+ conversation_history=tracker_as_readable_transcript(tracker),
964
+ events=tracker.current_state().get("events") or [],
965
+ metadata=agent_input_metadata,
966
+ )
967
+
968
+ final_events.append(AgentStarted(step.call, step.flow_id))
969
+
970
+ protocol_type = get_protocol_type(step, AvailableAgents.get_agent_config(step.call))
971
+ # send the input to the agent and wait for a response
972
+ structlogger.debug(
973
+ "flow.step.run_agent.agent_input",
974
+ agent_name=step.call,
975
+ step_id=step.id,
976
+ flow_id=step.flow_id,
977
+ agent_input=agent_input,
978
+ )
979
+ output: AgentOutput = await _call_agent_with_retry(
980
+ agent_name=step.call,
981
+ protocol_type=protocol_type,
982
+ agent_input=agent_input,
983
+ max_retries=MAX_AGENT_RETRIES,
984
+ )
985
+ structlogger.debug(
986
+ "flow.step.run_agent.agent_response",
987
+ agent_name=step.call,
988
+ step_id=step.id,
989
+ flow_id=step.flow_id,
990
+ agent_response=output,
991
+ )
992
+
993
+ # add the set slot events returned by the agent to the list of final events
994
+ if output.events:
995
+ final_events.extend(output.events)
996
+
997
+ if output.status == AgentStatus.INPUT_REQUIRED:
998
+ output.metadata = output.metadata or {}
999
+ output.metadata[AGENT_METADATA_AGENT_RESPONSE_KEY] = (
1000
+ output.response_message or ""
1001
+ )
1002
+ output.metadata[AGENT_METADATA_TOOL_RESULTS_KEY] = output.tool_results or []
1003
+ _update_agent_events(final_events, output.metadata)
1004
+
1005
+ top_stack_frame = stack.top()
1006
+ # update the agent stack frame if it is already on the stack
1007
+ # otherwise push a new one
1008
+ if isinstance(top_stack_frame, AgentStackFrame):
1009
+ top_stack_frame.state = AgentState.WAITING_FOR_INPUT
1010
+ top_stack_frame.metadata = output.metadata
1011
+ top_stack_frame.step_id = step.id
1012
+ top_stack_frame.agent_id = step.call
1013
+ top_stack_frame.flow_id = step.flow_id
1014
+ else:
1015
+ stack.push(
1016
+ AgentStackFrame(
1017
+ flow_id=step.flow_id,
1018
+ agent_id=step.call,
1019
+ state=AgentState.WAITING_FOR_INPUT,
1020
+ step_id=step.id,
1021
+ metadata=output.metadata,
1022
+ )
1023
+ )
1024
+
1025
+ action_prediction = _create_agent_request_user_input_prediction(
1026
+ output.response_message, final_events
1027
+ )
1028
+ return PauseFlowReturnPrediction(action_prediction)
1029
+ elif output.status == AgentStatus.COMPLETED:
1030
+ output.metadata = output.metadata or {}
1031
+ _update_agent_events(final_events, output.metadata)
1032
+ structlogger.debug(
1033
+ "flow.step.run_agent.completed",
1034
+ agent_name=step.call,
1035
+ step_id=step.id,
1036
+ flow_id=step.flow_id,
1037
+ )
1038
+ remove_agent_stack_frame(stack, step.call)
1039
+ agent_completed_event = AgentCompleted(agent_id=step.call, flow_id=step.flow_id)
1040
+ final_events.append(agent_completed_event)
1041
+ if output.response_message:
1042
+ # for open-ended agents we want to utter the last agent message
1043
+
1044
+ return PauseFlowReturnPrediction(
1045
+ _create_send_text_prediction(output.response_message, final_events)
1046
+ )
1047
+ else:
1048
+ return ContinueFlowWithNextStep(events=final_events)
1049
+ elif output.status == AgentStatus.FATAL_ERROR:
1050
+ output.metadata = output.metadata or {}
1051
+ _update_agent_events(final_events, output.metadata)
1052
+ # the agent failed, trigger pattern_internal_error
1053
+ structlogger.error(
1054
+ "flow.step.run_agent.fatal_error",
1055
+ agent_name=step.call,
1056
+ step_id=step.id,
1057
+ flow_id=step.flow_id,
1058
+ error_message=output.error_message,
1059
+ )
1060
+ remove_agent_stack_frame(stack, step.call)
1061
+ final_events.append(
1062
+ AgentCancelled(
1063
+ agent_id=step.call, flow_id=step.flow_id, reason=output.error_message
1064
+ )
1065
+ )
1066
+ stack.push(InternalErrorPatternFlowStackFrame())
1067
+ return ContinueFlowWithNextStep(events=final_events)
1068
+ else:
1069
+ output.metadata = output.metadata or {}
1070
+ _update_agent_events(final_events, output.metadata)
1071
+ structlogger.error(
1072
+ "flow.step.run_agent.unknown_status",
1073
+ agent_name=step.call,
1074
+ step_id=step.id,
1075
+ flow_id=step.flow_id,
1076
+ status=output.status,
1077
+ )
1078
+ remove_agent_stack_frame(stack, step.call)
1079
+ final_events.append(AgentCancelled(agent_id=step.call, flow_id=step.flow_id))
1080
+ stack.push(InternalErrorPatternFlowStackFrame())
1081
+ return ContinueFlowWithNextStep(events=final_events)
1082
+
1083
+
1084
+ def remove_agent_stack_frame(stack: DialogueStack, agent_id: str) -> None:
1085
+ """Finishes the agentic loop by popping the agent stack frame from the
1086
+ provided `stack`. The `tracker.stack` is NOT modified.
1087
+ """
1088
+ agent_stack_frame = stack.find_agent_stack_frame_by_agent(agent_id)
1089
+ if not agent_stack_frame:
1090
+ return
1091
+
1092
+ while removed_frame := stack.pop():
1093
+ structlogger.debug(
1094
+ "flow_executor.remove_agent_stack_frame",
1095
+ removed_frame=removed_frame,
1096
+ )
1097
+ if removed_frame == agent_stack_frame:
1098
+ break
1099
+
1100
+
1101
+ def _create_action_prediction(
1102
+ action_name: str, message: Optional[str], events: Optional[List[Event]]
1103
+ ) -> FlowActionPrediction:
1104
+ """Create a prediction for an action with a text message."""
1105
+ action_metadata = {
1106
+ ACTION_METADATA_MESSAGE_KEY: {
1107
+ ACTION_METADATA_TEXT_KEY: message,
1108
+ }
1109
+ }
1110
+ return FlowActionPrediction(
1111
+ action_name,
1112
+ 1.0,
1113
+ events=events if events else [],
1114
+ metadata=action_metadata,
1115
+ )
1116
+
1117
+
1118
+ def _create_agent_request_user_input_prediction(
1119
+ message: Optional[str], events: Optional[List[Event]]
1120
+ ) -> FlowActionPrediction:
1121
+ """Create a prediction for requesting user input from the agent
1122
+ and waiting for it.
1123
+ """
1124
+ return _create_action_prediction(
1125
+ ACTION_AGENT_REQUEST_USER_INPUT_NAME, message, events
1126
+ )
1127
+
1128
+
1129
+ def _create_send_text_prediction(
1130
+ message: Optional[str], events: Optional[List[Event]]
1131
+ ) -> FlowActionPrediction:
1132
+ """Create a prediction for sending a text message to the user."""
1133
+ return _create_action_prediction(ACTION_SEND_TEXT_NAME, message, events)
1134
+
1135
+
1136
+ async def _call_agent_with_retry(
1137
+ agent_name: str,
1138
+ protocol_type: ProtocolType,
1139
+ agent_input: AgentInput,
1140
+ max_retries: int,
1141
+ ) -> AgentOutput:
1142
+ """Call an agent with retries in case of recoverable errors."""
1143
+ for attempt in range(max_retries):
1144
+ if attempt > 0:
1145
+ structlogger.debug(
1146
+ "flow_executor.call_agent_with_retry.retrying",
1147
+ agent_name=agent_name,
1148
+ attempt=attempt + 1,
1149
+ num_retries=max_retries,
1150
+ )
1151
+ try:
1152
+ agent_response: AgentOutput = await AgentManager().run_agent(
1153
+ agent_name=agent_name, protocol_type=protocol_type, context=agent_input
1154
+ )
1155
+ except Exception as e:
1156
+ # We don't have a vaild agent response at this time to act based
1157
+ # on the agent status, so we return a fatal error.
1158
+ structlogger.error(
1159
+ "flow_executor.call_agent_with_retry.exception",
1160
+ agent_name=agent_name,
1161
+ error_message=str(e),
1162
+ )
1163
+ return AgentOutput(
1164
+ id=agent_name,
1165
+ status=AgentStatus.FATAL_ERROR,
1166
+ error_message=str(e),
1167
+ )
1168
+
1169
+ if agent_response.status != AgentStatus.RECOVERABLE_ERROR:
1170
+ return agent_response
1171
+
1172
+ structlogger.warning(
1173
+ "flow_executor.call_agent_with_retry.recoverable_error",
1174
+ agent_name=agent_name,
1175
+ attempt=attempt + 1,
1176
+ num_retries=max_retries,
1177
+ error_message=agent_response.error_message,
1178
+ )
1179
+ if attempt < max_retries - 1:
1180
+ # exponential backoff - wait longer with each retry
1181
+ # 1 second, 2 seconds, 4 seconds, etc.
1182
+ await asyncio.sleep(min(2**attempt, MAX_AGENT_RETRY_DELAY_SECONDS))
1183
+
1184
+ # we exhausted all retries, return fatal error
1185
+ structlogger.warning(
1186
+ "flow_executor.call_agent_with_retry.exhausted_retries",
1187
+ agent_name=agent_name,
1188
+ num_retries=max_retries,
1189
+ )
1190
+ return AgentOutput(
1191
+ id=agent_name,
1192
+ status=AgentStatus.FATAL_ERROR,
1193
+ error_message="Exhausted all retries for agent call.",
1194
+ )
1195
+
1196
+
1197
+ def _prepare_slots_for_agent(
1198
+ slot_values: Dict[str, Any], slot_definitions: List[Slot]
1199
+ ) -> List[AgentInputSlot]:
1200
+ """Prepare the slots for the agent.
1201
+
1202
+ Filter out slots that should not be forwarded to agents.
1203
+ Add the slot type and allowed values to the slot dictionary.
1204
+
1205
+ Args:
1206
+ slot_values: The full slot dictionary from the tracker.
1207
+ slot_definitions: The slot definitions from the domain.
1208
+
1209
+ Returns:
1210
+ A list of slots containing the name, current value, type, and allowed values.
1211
+ """
1212
+
1213
+ def _get_slot_definition(slot_name: str) -> Optional[Slot]:
1214
+ for slot in slot_definitions:
1215
+ if slot.name == slot_name:
1216
+ return slot
1217
+ return None
1218
+
1219
+ filtered_slots: List[AgentInputSlot] = []
1220
+ for key, value in slot_values.items():
1221
+ if key in SLOTS_EXCLUDED_FOR_AGENT:
1222
+ continue
1223
+ slot_definition = _get_slot_definition(key)
1224
+ if slot_definition:
1225
+ filtered_slots.append(
1226
+ AgentInputSlot(
1227
+ name=key,
1228
+ value=value,
1229
+ type=slot_definition.type_name if slot_definition else "any",
1230
+ allowed_values=slot_definition.values
1231
+ if isinstance(slot_definition, CategoricalSlot)
1232
+ else None,
1233
+ )
1234
+ )
1235
+
1236
+ return filtered_slots
1237
+
1238
+
1239
+ def _update_agent_events(events: List[Event], metadata: Dict[str, Any]) -> None:
1240
+ """Update the agent events based on the agent output metadata if needed."""
1241
+ if A2A_AGENT_CONTEXT_ID_KEY in metadata:
1242
+ # If the context ID is present, we need to store it in the AgentStarted
1243
+ # event, so that it can be re-used later in case the agent is restarted.
1244
+ for event in events:
1245
+ if isinstance(event, AgentStarted):
1246
+ event.context_id = metadata[A2A_AGENT_CONTEXT_ID_KEY]
1247
+
1248
+
1249
+ def _update_agent_input_metadata_with_events(
1250
+ metadata: Dict[str, Any], agent_id: str, flow_id: str, tracker: DialogueStateTracker
1251
+ ) -> None:
1252
+ """Update the agent input metadata with the events."""
1253
+ agent_started_events = [
1254
+ event
1255
+ for event in tracker.events
1256
+ if type(event) == AgentStarted
1257
+ and event.agent_id == agent_id
1258
+ and event.flow_id == flow_id
1259
+ ]
1260
+ if agent_started_events:
1261
+ # If we have context ID from the previous agent run, we want to
1262
+ # include it in the metadata so that the agent can continue the same
1263
+ # context.
1264
+ agent_started_event = agent_started_events[-1]
1265
+ if agent_started_event.context_id:
1266
+ metadata[A2A_AGENT_CONTEXT_ID_KEY] = agent_started_event.context_id