rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__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 (586) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +213 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +889 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +228 -0
  26. rasa/agents/validation.py +538 -0
  27. rasa/api.py +23 -9
  28. rasa/builder/README.md +120 -0
  29. rasa/builder/__init__.py +0 -0
  30. rasa/builder/auth.py +176 -0
  31. rasa/builder/config.py +96 -0
  32. rasa/builder/copilot/__init__.py +0 -0
  33. rasa/builder/copilot/constants.py +38 -0
  34. rasa/builder/copilot/copilot.py +562 -0
  35. rasa/builder/copilot/copilot_response_handler.py +522 -0
  36. rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
  37. rasa/builder/copilot/exceptions.py +32 -0
  38. rasa/builder/copilot/models.py +690 -0
  39. rasa/builder/copilot/prompts/__init__.py +0 -0
  40. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
  41. rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
  42. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
  43. rasa/builder/copilot/signing.py +305 -0
  44. rasa/builder/copilot/telemetry.py +234 -0
  45. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  46. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  47. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
  48. rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
  49. rasa/builder/document_retrieval/__init__.py +0 -0
  50. rasa/builder/document_retrieval/constants.py +15 -0
  51. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  52. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  53. rasa/builder/document_retrieval/models.py +62 -0
  54. rasa/builder/download.py +140 -0
  55. rasa/builder/exceptions.py +91 -0
  56. rasa/builder/guardrails/__init__.py +1 -0
  57. rasa/builder/guardrails/clients.py +256 -0
  58. rasa/builder/guardrails/constants.py +12 -0
  59. rasa/builder/guardrails/exceptions.py +4 -0
  60. rasa/builder/guardrails/models.py +266 -0
  61. rasa/builder/guardrails/policy_checker.py +324 -0
  62. rasa/builder/guardrails/store.py +238 -0
  63. rasa/builder/guardrails/utils.py +94 -0
  64. rasa/builder/job_manager.py +87 -0
  65. rasa/builder/jobs.py +609 -0
  66. rasa/builder/llm_service.py +273 -0
  67. rasa/builder/logging_utils.py +265 -0
  68. rasa/builder/main.py +234 -0
  69. rasa/builder/models.py +229 -0
  70. rasa/builder/project_generator.py +463 -0
  71. rasa/builder/project_info.py +72 -0
  72. rasa/builder/service.py +1367 -0
  73. rasa/builder/shared/tracker_context.py +212 -0
  74. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  75. rasa/builder/template_cache.py +69 -0
  76. rasa/builder/training_service.py +188 -0
  77. rasa/builder/validation_service.py +101 -0
  78. rasa/cli/arguments/data.py +9 -0
  79. rasa/cli/arguments/default_arguments.py +12 -0
  80. rasa/cli/arguments/run.py +2 -0
  81. rasa/cli/arguments/train.py +2 -0
  82. rasa/cli/data.py +78 -10
  83. rasa/cli/dialogue_understanding_test.py +11 -7
  84. rasa/cli/e2e_test.py +10 -6
  85. rasa/cli/evaluate.py +4 -2
  86. rasa/cli/export.py +5 -2
  87. rasa/cli/inspect.py +9 -4
  88. rasa/cli/interactive.py +8 -4
  89. rasa/cli/llm_fine_tuning.py +12 -6
  90. rasa/cli/project_templates/basic/README.md +23 -0
  91. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  92. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  93. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  94. rasa/cli/project_templates/basic/config.yml +29 -0
  95. rasa/cli/project_templates/basic/credentials.yml +33 -0
  96. rasa/cli/project_templates/basic/data/data.md +8 -0
  97. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  98. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  99. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  100. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  101. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  102. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  103. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  104. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  105. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  106. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  107. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  108. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  109. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  110. rasa/cli/project_templates/basic/domain/domain.md +11 -0
  111. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  112. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  113. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  114. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  115. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  116. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  117. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  118. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  119. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  120. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  121. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  122. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  123. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  124. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
  125. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
  126. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
  127. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
  128. rasa/cli/project_templates/default/config.yml +4 -0
  129. rasa/cli/project_templates/default/endpoints.yml +4 -0
  130. rasa/cli/project_templates/defaults.py +1 -0
  131. rasa/cli/project_templates/finance/README.md +26 -0
  132. rasa/cli/project_templates/finance/actions/__init__.py +0 -0
  133. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  134. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  135. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  136. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  137. rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
  138. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  139. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  140. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  141. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  142. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  143. rasa/cli/project_templates/finance/actions/db.py +117 -0
  144. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  145. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  146. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  147. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  148. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  149. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  150. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  151. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  152. rasa/cli/project_templates/finance/config.yml +29 -0
  153. rasa/cli/project_templates/finance/credentials.yml +33 -0
  154. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
  155. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  156. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  157. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  158. rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
  159. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  160. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  161. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  162. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  163. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  164. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  165. rasa/cli/project_templates/finance/data/data.md +14 -0
  166. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  167. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  168. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  169. rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
  170. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  171. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  172. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  173. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  174. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  175. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  176. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  177. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  178. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  179. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  180. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
  181. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  182. rasa/cli/project_templates/finance/db/cards.json +18 -0
  183. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  184. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  185. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  186. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  187. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  188. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  189. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  190. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  191. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  192. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  193. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  194. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  195. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  196. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  197. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
  198. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  199. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  200. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  201. rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
  202. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  203. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  204. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  205. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  206. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  207. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  208. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  209. rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
  210. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  211. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
  212. rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
  213. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  214. rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
  215. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
  216. rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
  217. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  218. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  219. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  220. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
  221. rasa/cli/project_templates/finance/endpoints.yml +67 -0
  222. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  223. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
  224. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
  225. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
  226. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  227. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  228. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  229. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  230. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  231. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
  232. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
  233. rasa/cli/project_templates/telco/README.md +25 -0
  234. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  235. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  236. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  238. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  240. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  242. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  243. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  244. rasa/cli/project_templates/telco/config.yml +29 -0
  245. rasa/cli/project_templates/telco/credentials.yml +33 -0
  246. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  247. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  248. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  249. rasa/cli/project_templates/telco/data/data.md +11 -0
  250. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  251. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  252. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  253. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  254. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  255. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  256. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  257. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  258. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  259. rasa/cli/project_templates/telco/docs/docs.md +8 -0
  260. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  261. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  262. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  263. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  264. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  265. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  266. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  267. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  268. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  269. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  270. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  271. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  272. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  273. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  274. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
  275. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  276. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  277. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  278. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
  279. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
  280. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
  281. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  282. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  283. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  284. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  285. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  286. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
  287. rasa/cli/project_templates/tutorial/config.yml +2 -1
  288. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  289. rasa/cli/run.py +8 -10
  290. rasa/cli/scaffold.py +50 -6
  291. rasa/cli/shell.py +10 -5
  292. rasa/cli/studio/studio.py +1 -1
  293. rasa/cli/test.py +34 -14
  294. rasa/cli/train.py +44 -30
  295. rasa/cli/utils.py +1 -393
  296. rasa/cli/validation/__init__.py +0 -0
  297. rasa/cli/validation/bot_config.py +232 -0
  298. rasa/cli/validation/config_path_validation.py +257 -0
  299. rasa/cli/x.py +8 -4
  300. rasa/constants.py +7 -1
  301. rasa/core/actions/action.py +53 -13
  302. rasa/core/actions/action_exceptions.py +1 -1
  303. rasa/core/actions/action_run_slot_rejections.py +1 -1
  304. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  305. rasa/core/agent.py +22 -2
  306. rasa/core/available_agents.py +239 -0
  307. rasa/core/brokers/broker.py +1 -1
  308. rasa/core/brokers/kafka.py +56 -8
  309. rasa/core/channels/__init__.py +82 -35
  310. rasa/core/channels/channel.py +4 -3
  311. rasa/core/channels/constants.py +3 -0
  312. rasa/core/channels/development_inspector.py +29 -16
  313. rasa/core/channels/hangouts.py +2 -2
  314. rasa/core/channels/inspector/README.md +25 -13
  315. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  319. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  320. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  322. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  328. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  334. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  353. rasa/core/channels/inspector/dist/index.html +1 -1
  354. rasa/core/channels/inspector/package.json +18 -18
  355. rasa/core/channels/inspector/src/App.tsx +56 -12
  356. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  357. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  358. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  359. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  360. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
  361. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  362. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
  363. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  364. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  365. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  366. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  367. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  368. rasa/core/channels/inspector/src/types.ts +55 -1
  369. rasa/core/channels/inspector/yarn.lock +336 -189
  370. rasa/core/channels/socketio.py +212 -51
  371. rasa/core/channels/studio_chat.py +82 -32
  372. rasa/core/channels/telegram.py +4 -9
  373. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  374. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  375. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  376. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  377. rasa/core/channels/voice_stream/audiocodes.py +11 -6
  378. rasa/core/channels/voice_stream/browser_audio.py +91 -4
  379. rasa/core/channels/voice_stream/call_state.py +13 -2
  380. rasa/core/channels/voice_stream/genesys.py +19 -15
  381. rasa/core/channels/voice_stream/jambonz.py +22 -12
  382. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  383. rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
  384. rasa/core/channels/voice_stream/util.py +11 -1
  385. rasa/core/channels/voice_stream/voice_channel.py +170 -32
  386. rasa/core/concurrent_lock_store.py +83 -16
  387. rasa/core/config/__init__.py +0 -0
  388. rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
  389. rasa/core/config/configuration.py +295 -0
  390. rasa/core/config/credentials.py +19 -0
  391. rasa/core/config/message_procesing_config.py +34 -0
  392. rasa/core/constants.py +17 -0
  393. rasa/core/exceptions.py +1 -1
  394. rasa/core/featurizers/tracker_featurizers.py +3 -2
  395. rasa/core/iam_credentials_providers/__init__.py +0 -0
  396. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
  397. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
  398. rasa/core/lock_store.py +50 -10
  399. rasa/core/nlg/contextual_response_rephraser.py +5 -0
  400. rasa/core/nlg/generator.py +1 -1
  401. rasa/core/persistor.py +7 -7
  402. rasa/core/policies/enterprise_search_policy.py +9 -10
  403. rasa/core/policies/flow_policy.py +4 -4
  404. rasa/core/policies/flows/agent_executor.py +720 -0
  405. rasa/core/policies/flows/flow_exceptions.py +5 -2
  406. rasa/core/policies/flows/flow_executor.py +146 -77
  407. rasa/core/policies/flows/mcp_tool_executor.py +304 -0
  408. rasa/core/policies/intentless_policy.py +1 -1
  409. rasa/core/policies/rule_policy.py +1 -1
  410. rasa/core/policies/ted_policy.py +20 -12
  411. rasa/core/policies/unexpected_intent_policy.py +6 -0
  412. rasa/core/processor.py +100 -44
  413. rasa/core/redis_connection_factory.py +474 -0
  414. rasa/core/run.py +49 -10
  415. rasa/core/test.py +4 -0
  416. rasa/core/tracker_stores/redis_tracker_store.py +36 -14
  417. rasa/core/tracker_stores/sql_tracker_store.py +59 -1
  418. rasa/core/tracker_stores/tracker_store.py +3 -7
  419. rasa/core/train.py +1 -1
  420. rasa/core/training/interactive.py +20 -18
  421. rasa/core/training/story_conflict.py +5 -5
  422. rasa/core/utils.py +22 -23
  423. rasa/dialogue_understanding/commands/__init__.py +8 -0
  424. rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
  425. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  426. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  427. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  428. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  429. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  430. rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
  431. rasa/dialogue_understanding/commands/utils.py +135 -2
  432. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  433. rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
  434. rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
  435. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  436. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  437. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  438. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  439. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  440. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  441. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  442. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  443. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  444. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  445. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  446. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  447. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
  448. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  449. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  450. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  451. rasa/dialogue_understanding/stack/utils.py +57 -3
  452. rasa/dialogue_understanding/utils.py +24 -4
  453. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  454. rasa/e2e_test/e2e_test_runner.py +13 -3
  455. rasa/engine/caching.py +2 -2
  456. rasa/engine/constants.py +1 -1
  457. rasa/engine/graph.py +5 -1
  458. rasa/engine/loader.py +12 -0
  459. rasa/engine/recipes/default_components.py +138 -49
  460. rasa/engine/recipes/default_recipe.py +108 -11
  461. rasa/engine/runner/dask.py +8 -5
  462. rasa/engine/validation.py +25 -8
  463. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  464. rasa/hooks.py +5 -5
  465. rasa/llm_fine_tuning/utils.py +2 -2
  466. rasa/model_manager/model_api.py +4 -5
  467. rasa/model_manager/runner_service.py +2 -2
  468. rasa/model_manager/socket_bridge.py +21 -17
  469. rasa/model_manager/trainer_service.py +12 -9
  470. rasa/model_manager/utils.py +1 -29
  471. rasa/model_manager/warm_rasa_process.py +13 -3
  472. rasa/model_training.py +60 -47
  473. rasa/nlu/classifiers/diet_classifier.py +198 -98
  474. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  475. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  476. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  477. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  478. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  479. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  480. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  481. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  482. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  483. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  484. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  485. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  486. rasa/nlu/selectors/response_selector.py +10 -2
  487. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  488. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  489. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  490. rasa/nlu/utils/mitie_utils.py +3 -0
  491. rasa/nlu/utils/spacy_utils.py +3 -2
  492. rasa/plugin.py +8 -8
  493. rasa/privacy/privacy_config.py +1 -1
  494. rasa/privacy/privacy_manager.py +12 -3
  495. rasa/server.py +15 -3
  496. rasa/shared/agents/__init__.py +0 -0
  497. rasa/shared/agents/auth/__init__.py +0 -0
  498. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  499. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  500. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  501. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  502. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  503. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  504. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
  505. rasa/shared/agents/auth/constants.py +13 -0
  506. rasa/shared/agents/auth/types.py +12 -0
  507. rasa/shared/agents/auth/utils.py +85 -0
  508. rasa/shared/agents/utils.py +35 -0
  509. rasa/shared/constants.py +11 -0
  510. rasa/shared/core/constants.py +17 -1
  511. rasa/shared/core/domain.py +62 -22
  512. rasa/shared/core/events.py +329 -0
  513. rasa/shared/core/flows/constants.py +5 -0
  514. rasa/shared/core/flows/flow.py +1 -1
  515. rasa/shared/core/flows/flow_step.py +7 -1
  516. rasa/shared/core/flows/flows_list.py +21 -5
  517. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  518. rasa/shared/core/flows/steps/call.py +57 -6
  519. rasa/shared/core/flows/steps/collect.py +98 -13
  520. rasa/shared/core/flows/validation.py +372 -8
  521. rasa/shared/core/flows/yaml_flows_io.py +19 -10
  522. rasa/shared/core/slots.py +6 -2
  523. rasa/shared/core/trackers.py +5 -2
  524. rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
  525. rasa/shared/exceptions.py +39 -2
  526. rasa/shared/importers/importer.py +6 -0
  527. rasa/shared/importers/rasa.py +1 -1
  528. rasa/shared/importers/utils.py +86 -4
  529. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  530. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  531. rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
  532. rasa/shared/providers/llm/llm_client.py +7 -3
  533. rasa/shared/providers/llm/llm_response.py +66 -0
  534. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  535. rasa/shared/utils/common.py +26 -1
  536. rasa/shared/utils/health_check/health_check.py +7 -3
  537. rasa/shared/utils/llm.py +92 -19
  538. rasa/shared/utils/mcp/__init__.py +0 -0
  539. rasa/shared/utils/mcp/server_connection.py +250 -0
  540. rasa/shared/utils/mcp/utils.py +20 -0
  541. rasa/shared/utils/schemas/events.py +42 -0
  542. rasa/shared/utils/yaml.py +3 -1
  543. rasa/studio/download.py +3 -0
  544. rasa/studio/prompts.py +1 -0
  545. rasa/studio/pull/pull.py +3 -2
  546. rasa/studio/train.py +8 -7
  547. rasa/studio/upload.py +19 -52
  548. rasa/telemetry.py +166 -28
  549. rasa/tracing/config.py +45 -12
  550. rasa/tracing/constants.py +14 -0
  551. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  552. rasa/tracing/instrumentation/instrumentation.py +626 -21
  553. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  554. rasa/tracing/instrumentation/metrics.py +32 -0
  555. rasa/tracing/metric_instrument_provider.py +68 -0
  556. rasa/utils/common.py +92 -1
  557. rasa/utils/endpoints.py +11 -2
  558. rasa/utils/io.py +27 -9
  559. rasa/utils/json_utils.py +6 -1
  560. rasa/utils/log_utils.py +121 -7
  561. rasa/utils/ml_utils.py +1 -1
  562. rasa/utils/openapi.py +144 -0
  563. rasa/utils/plotting.py +1 -1
  564. rasa/utils/pypred.py +45 -0
  565. rasa/utils/tensorflow/__init__.py +7 -0
  566. rasa/utils/tensorflow/callback.py +136 -101
  567. rasa/utils/tensorflow/crf.py +1 -1
  568. rasa/utils/tensorflow/data_generator.py +21 -8
  569. rasa/utils/tensorflow/layers.py +21 -11
  570. rasa/utils/tensorflow/metrics.py +7 -3
  571. rasa/utils/tensorflow/models.py +56 -8
  572. rasa/utils/tensorflow/rasa_layers.py +8 -6
  573. rasa/utils/tensorflow/transformer.py +2 -3
  574. rasa/utils/train_utils.py +54 -24
  575. rasa/validator.py +149 -16
  576. rasa/version.py +1 -1
  577. rasa_pro-3.14.0.dist-info/METADATA +212 -0
  578. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
  579. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  580. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  581. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  582. rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
  583. rasa_pro-3.13.12.dist-info/METADATA +0 -192
  584. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
  585. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
  586. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
@@ -32,7 +32,6 @@ from ruamel.yaml.scalarstring import DoubleQuotedScalarString
32
32
  import rasa.shared.core.slot_mappings
33
33
  import rasa.shared.utils.common
34
34
  import rasa.shared.utils.io
35
- from rasa.core.available_endpoints import AvailableEndpoints
36
35
  from rasa.shared.constants import (
37
36
  DEFAULT_CARRY_OVER_SLOTS_TO_NEW_SESSION,
38
37
  DEFAULT_SESSION_EXPIRATION_TIME_IN_MINUTES,
@@ -49,7 +48,6 @@ from rasa.shared.core.constants import (
49
48
  ACTION_SHOULD_SEND_DOMAIN,
50
49
  KEY_MAPPING_TYPE,
51
50
  KNOWLEDGE_BASE_SLOT_NAMES,
52
- SILENCE_TIMEOUT_SLOT,
53
51
  SLOT_MAPPINGS,
54
52
  SlotMappingType,
55
53
  )
@@ -98,6 +96,8 @@ IS_RETRIEVAL_INTENT_KEY = "is_retrieval_intent"
98
96
  ENTITY_ROLES_KEY = "roles"
99
97
  ENTITY_GROUPS_KEY = "groups"
100
98
  ENTITY_FEATURIZATION_KEY = "influence_conversation"
99
+ STORE_ENTITIES_AS_SLOTS_KEY = "store_entities_as_slots"
100
+ DOMAIN_CONFIG_KEY = "config"
101
101
 
102
102
  KEY_SLOTS = "slots"
103
103
  KEY_INTENTS = "intents"
@@ -146,6 +146,8 @@ MERGE_FUNC_MAPPING: Dict[Text, Callable[..., Any]] = {
146
146
  KEY_FORMS: rasa.shared.utils.common.merge_dicts,
147
147
  }
148
148
 
149
+ DEFAULT_STORE_ENTITIES_AS_SLOTS = True
150
+
149
151
  DICT_DATA_KEYS = [
150
152
  key
151
153
  for key, value in MERGE_FUNC_MAPPING.items()
@@ -308,17 +310,12 @@ class Domain:
308
310
  responses = data.get(KEY_RESPONSES, {})
309
311
 
310
312
  domain_slots = data.get(KEY_SLOTS, {})
311
- for slot_name, slot in domain_slots.items():
312
- if slot_name == SILENCE_TIMEOUT_SLOT:
313
- slot["initial_value"] = (
314
- AvailableEndpoints.get_instance().interaction_handling.global_silence_timeout
315
- )
316
313
  slots = cls.collect_slots(domain_slots)
317
314
  domain_actions = data.get(KEY_ACTIONS, [])
318
315
  actions = cls._collect_action_names(domain_actions)
319
316
 
320
317
  additional_arguments = {
321
- **data.get("config", {}),
318
+ **data.get(DOMAIN_CONFIG_KEY, {}),
322
319
  "actions_which_explicitly_need_domain": (
323
320
  cls._collect_actions_which_explicitly_need_domain(domain_actions)
324
321
  ),
@@ -468,9 +465,9 @@ class Domain:
468
465
  return domain_dict
469
466
 
470
467
  if override:
471
- config = domain_dict.get("config", {})
468
+ config = domain_dict.get(DOMAIN_CONFIG_KEY, {})
472
469
  for key, val in config.items():
473
- combined["config"][key] = val
470
+ combined[DOMAIN_CONFIG_KEY][key] = val
474
471
 
475
472
  if (
476
473
  override
@@ -508,10 +505,10 @@ class Domain:
508
505
  return combined
509
506
 
510
507
  def partial_merge(self, other: Domain) -> Domain:
511
- """
512
- Returns a new Domain with intersection-based merging:
513
- - For each domain section only overwrite items that already exist in self.
514
- - Brand-new items in `other` are ignored.
508
+ """Returns a new Domain with intersection-based merging.
509
+
510
+ For each domain section only overwrite items that already exist in self.
511
+ Brand-new items in `other` are ignored.
515
512
 
516
513
  Args:
517
514
  other: The domain to merge with.
@@ -543,9 +540,9 @@ class Domain:
543
540
  return Domain.from_dict(updated_self)
544
541
 
545
542
  def difference(self, other: Domain) -> Domain:
546
- """
547
- Returns a new Domain containing items in `self` that are NOT in `other`,
548
- using simple equality checks for dict/list items.
543
+ """Returns a new Domain containing items in `self` that are NOT in `other`.
544
+
545
+ Uses simple equality checks for dict/list items.
549
546
 
550
547
  Args:
551
548
  other: The domain to compare with.
@@ -598,9 +595,16 @@ class Domain:
598
595
  ) -> Dict:
599
596
  # add the config, session_config and training data version defaults
600
597
  # if not included in the original domain dict
601
- if "config" not in data and not store_entities_as_slots:
598
+ if (
599
+ DOMAIN_CONFIG_KEY not in data
600
+ and store_entities_as_slots != DEFAULT_STORE_ENTITIES_AS_SLOTS
601
+ ):
602
602
  data.update(
603
- {"config": {"store_entities_as_slots": store_entities_as_slots}}
603
+ {
604
+ DOMAIN_CONFIG_KEY: {
605
+ STORE_ENTITIES_AS_SLOTS_KEY: store_entities_as_slots
606
+ }
607
+ }
604
608
  )
605
609
 
606
610
  if SESSION_CONFIG_KEY not in data:
@@ -937,7 +941,7 @@ class Domain:
937
941
  forms: Union[Dict[Text, Any], List[Text]],
938
942
  data: Dict,
939
943
  action_texts: Optional[List[Text]] = None,
940
- store_entities_as_slots: bool = True,
944
+ store_entities_as_slots: bool = DEFAULT_STORE_ENTITIES_AS_SLOTS,
941
945
  session_config: SessionConfig = SessionConfig.default(),
942
946
  **kwargs: Any,
943
947
  ) -> None:
@@ -1711,9 +1715,45 @@ class Domain:
1711
1715
  else:
1712
1716
  return True
1713
1717
 
1714
- def as_dict(self) -> Dict[Text, Any]:
1718
+ def _uses_custom_session_config(self) -> bool:
1719
+ """Check if the domain uses a custom session config."""
1720
+ return self._data.get(SESSION_CONFIG_KEY) != SessionConfig.default().as_dict()
1721
+
1722
+ def _uses_custom_domain_config(self) -> bool:
1723
+ """Check if the domain uses a custom domain config."""
1724
+ return self._data.get(DOMAIN_CONFIG_KEY) != {
1725
+ STORE_ENTITIES_AS_SLOTS_KEY: DEFAULT_STORE_ENTITIES_AS_SLOTS
1726
+ }
1727
+
1728
+ def _cleaned_json_data(self) -> Dict[Text, Any]:
1729
+ """Remove default values from the domain data.
1730
+
1731
+ Only retains data that was customized by the user.
1732
+
1733
+ Returns:
1734
+ A cleaned dictionary version of the domain.
1735
+ """
1736
+ cleaned_data = copy.deepcopy(self._data)
1737
+
1738
+ # Remove default config if it only contains store_entities_as_slots: False
1739
+ if DOMAIN_CONFIG_KEY in cleaned_data and not self._uses_custom_domain_config():
1740
+ del cleaned_data[DOMAIN_CONFIG_KEY]
1741
+
1742
+ # Remove default session config if it matches the default values
1743
+ if (
1744
+ SESSION_CONFIG_KEY in cleaned_data
1745
+ and not self._uses_custom_session_config()
1746
+ ):
1747
+ del cleaned_data[SESSION_CONFIG_KEY]
1748
+
1749
+ return cleaned_data
1750
+
1751
+ def as_dict(self, should_clean_json: bool = False) -> Dict[Text, Any]:
1715
1752
  """Return serialized `Domain`."""
1716
- return self._data
1753
+ if should_clean_json:
1754
+ return self._cleaned_json_data()
1755
+ else:
1756
+ return self._data
1717
1757
 
1718
1758
  @staticmethod
1719
1759
  def get_responses_with_multilines(
@@ -35,6 +35,7 @@ from rasa.shared.core.constants import (
35
35
  ACTION_LISTEN_NAME,
36
36
  ACTION_METADATA_EXECUTION_ERROR_MESSAGE,
37
37
  ACTION_METADATA_EXECUTION_SUCCESS,
38
+ ACTION_METADATA_EXECUTION_TIME,
38
39
  ACTION_NAME_SENDER_ID_CONNECTOR_STR,
39
40
  ACTION_SESSION_START_NAME,
40
41
  ENTITY_LABEL_SEPARATOR,
@@ -1815,6 +1816,7 @@ class ActionExecuted(Event):
1815
1816
  items_to_ignore = [
1816
1817
  ACTION_METADATA_EXECUTION_SUCCESS,
1817
1818
  ACTION_METADATA_EXECUTION_ERROR_MESSAGE,
1819
+ ACTION_METADATA_EXECUTION_TIME,
1818
1820
  ]
1819
1821
  meta_no_nones = {
1820
1822
  k: v
@@ -2646,6 +2648,333 @@ class FlowCancelled(SkipEventInMDStoryMixin):
2646
2648
  raise ValueError(f"Failed to parse flow_cancelled event. {e}")
2647
2649
 
2648
2650
 
2651
+ class AgentCompleted(SkipEventInMDStoryMixin):
2652
+ """Mark the completion of an agent."""
2653
+
2654
+ type_name = "agent_completed"
2655
+
2656
+ def __init__(
2657
+ self,
2658
+ agent_id: str,
2659
+ flow_id: str,
2660
+ status: Optional[str] = None,
2661
+ timestamp: Optional[float] = None,
2662
+ metadata: Optional[Dict[str, Any]] = None,
2663
+ ) -> None:
2664
+ self.agent_id = agent_id
2665
+ self.flow_id = flow_id
2666
+ self.status = status
2667
+ super().__init__(timestamp, metadata)
2668
+
2669
+ def __repr__(self) -> Text:
2670
+ """Returns event as string for debugging."""
2671
+ return (
2672
+ f"AgentCompleted(agent: {self.agent_id}, flow: {self.flow_id}, "
2673
+ f"status: {self.status})"
2674
+ )
2675
+
2676
+ def __str__(self) -> str:
2677
+ """Returns event as human-readable string."""
2678
+ return (
2679
+ f"{self.__class__.__name__}({self.agent_id}, {self.flow_id}, {self.status})"
2680
+ )
2681
+
2682
+ def __hash__(self) -> int:
2683
+ """Returns unique hash for event."""
2684
+ return hash((self.agent_id, self.flow_id, self.status))
2685
+
2686
+ def __eq__(self, other: Any) -> bool:
2687
+ """Compares object with other object."""
2688
+ if not isinstance(other, AgentCompleted):
2689
+ return NotImplemented
2690
+ return (self.agent_id, self.flow_id, self.status) == (
2691
+ other.agent_id,
2692
+ other.flow_id,
2693
+ other.status,
2694
+ )
2695
+
2696
+ def as_dict(self) -> Dict[str, Any]:
2697
+ """Returns serialized event."""
2698
+ serialized = super().as_dict()
2699
+ serialized.update(
2700
+ {"agent_id": self.agent_id, "flow_id": self.flow_id, "status": self.status}
2701
+ )
2702
+ return serialized
2703
+
2704
+ @classmethod
2705
+ def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentCompleted":
2706
+ if "agent_id" not in parameters:
2707
+ raise ValueError(
2708
+ "Failed to parse agent_completed event: agent_id is required"
2709
+ )
2710
+ if "flow_id" not in parameters:
2711
+ raise ValueError(
2712
+ "Failed to parse agent_completed event: flow_id is required"
2713
+ )
2714
+
2715
+ return AgentCompleted(
2716
+ parameters["agent_id"],
2717
+ parameters["flow_id"],
2718
+ parameters.get("status"),
2719
+ parameters.get("timestamp"),
2720
+ parameters.get("metadata"),
2721
+ )
2722
+
2723
+
2724
+ class AgentStarted(SkipEventInMDStoryMixin):
2725
+ """Mark the start of an agent."""
2726
+
2727
+ type_name = "agent_started"
2728
+
2729
+ def __init__(
2730
+ self,
2731
+ agent_id: str,
2732
+ flow_id: str,
2733
+ timestamp: Optional[float] = None,
2734
+ metadata: Optional[Dict[str, Any]] = None,
2735
+ context_id: Optional[str] = None,
2736
+ ) -> None:
2737
+ self.agent_id = agent_id
2738
+ self.flow_id = flow_id
2739
+ self.context_id = context_id
2740
+ super().__init__(timestamp, metadata)
2741
+
2742
+ def __repr__(self) -> str:
2743
+ """Returns event as string for debugging."""
2744
+ if self.context_id:
2745
+ return (
2746
+ f"AgentStarted(agent: {self.agent_id}, flow: {self.flow_id}, "
2747
+ f"context_id: {self.context_id})"
2748
+ )
2749
+ else:
2750
+ return f"AgentStarted(agent: {self.agent_id}, flow: {self.flow_id})"
2751
+
2752
+ def __str__(self) -> str:
2753
+ """Returns event as human-readable string."""
2754
+ return f"{self.__class__.__name__}({self.agent_id}, {self.flow_id})"
2755
+
2756
+ def __hash__(self) -> int:
2757
+ """Returns unique hash for event."""
2758
+ return hash((self.agent_id, self.flow_id))
2759
+
2760
+ def __eq__(self, other: Any) -> bool:
2761
+ """Compares object with other object."""
2762
+ if not isinstance(other, AgentStarted):
2763
+ return NotImplemented
2764
+ return (self.agent_id, self.flow_id) == (other.agent_id, other.flow_id)
2765
+
2766
+ def as_dict(self) -> Dict[str, Any]:
2767
+ """Returns serialized event."""
2768
+ serialized = super().as_dict()
2769
+ serialized.update({"agent_id": self.agent_id, "flow_id": self.flow_id})
2770
+ return serialized
2771
+
2772
+ @classmethod
2773
+ def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentStarted":
2774
+ if "agent_id" not in parameters:
2775
+ raise ValueError(
2776
+ "Failed to parse agent_started event: agent_id is required"
2777
+ )
2778
+ if "flow_id" not in parameters:
2779
+ raise ValueError("Failed to parse agent_started event: flow_id is required")
2780
+
2781
+ return AgentStarted(
2782
+ parameters["agent_id"],
2783
+ parameters["flow_id"],
2784
+ parameters.get("timestamp"),
2785
+ parameters.get("metadata"),
2786
+ )
2787
+
2788
+
2789
+ class AgentInterrupted(SkipEventInMDStoryMixin):
2790
+ """Mark the interruption of an agent."""
2791
+
2792
+ type_name = "agent_interrupted"
2793
+
2794
+ def __init__(
2795
+ self,
2796
+ agent_id: str,
2797
+ flow_id: str,
2798
+ timestamp: Optional[float] = None,
2799
+ metadata: Optional[Dict[str, Any]] = None,
2800
+ ) -> None:
2801
+ self.agent_id = agent_id
2802
+ self.flow_id = flow_id
2803
+ super().__init__(timestamp, metadata)
2804
+
2805
+ def __repr__(self) -> str:
2806
+ """Returns event as string for debugging."""
2807
+ return f"AgentInterrupted(agent: {self.agent_id}, flow: {self.flow_id})"
2808
+
2809
+ def __str__(self) -> str:
2810
+ """Returns event as human-readable string."""
2811
+ return f"{self.__class__.__name__}({self.agent_id}, {self.flow_id})"
2812
+
2813
+ def __hash__(self) -> int:
2814
+ """Returns unique hash for event."""
2815
+ return hash((self.agent_id, self.flow_id))
2816
+
2817
+ def __eq__(self, other: Any) -> bool:
2818
+ """Compares object with other object."""
2819
+ if not isinstance(other, AgentInterrupted):
2820
+ return NotImplemented
2821
+ return (self.agent_id, self.flow_id) == (other.agent_id, other.flow_id)
2822
+
2823
+ def as_dict(self) -> Dict[str, Any]:
2824
+ """Returns serialized event."""
2825
+ serialized = super().as_dict()
2826
+ serialized.update({"agent_id": self.agent_id, "flow_id": self.flow_id})
2827
+ return serialized
2828
+
2829
+ @classmethod
2830
+ def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentInterrupted":
2831
+ if "agent_id" not in parameters:
2832
+ raise ValueError(
2833
+ "Failed to parse agent_interrupted event: agent_id is required"
2834
+ )
2835
+ if "flow_id" not in parameters:
2836
+ raise ValueError(
2837
+ "Failed to parse agent_interrupted event: flow_id is required"
2838
+ )
2839
+
2840
+ return AgentInterrupted(
2841
+ parameters["agent_id"],
2842
+ parameters["flow_id"],
2843
+ parameters.get("timestamp"),
2844
+ parameters.get("metadata"),
2845
+ )
2846
+
2847
+
2848
+ class AgentCancelled(SkipEventInMDStoryMixin):
2849
+ """Mark the cancellation of an agent."""
2850
+
2851
+ type_name = "agent_cancelled"
2852
+
2853
+ def __init__(
2854
+ self,
2855
+ agent_id: str,
2856
+ flow_id: str,
2857
+ reason: Optional[str] = None,
2858
+ timestamp: Optional[float] = None,
2859
+ metadata: Optional[Dict[str, Any]] = None,
2860
+ ) -> None:
2861
+ self.agent_id = agent_id
2862
+ self.flow_id = flow_id
2863
+ self.reason = reason
2864
+ super().__init__(timestamp, metadata)
2865
+
2866
+ def __repr__(self) -> str:
2867
+ """Returns event as string for debugging."""
2868
+ return (
2869
+ f"AgentCancelled(agent: {self.agent_id}, flow: {self.flow_id}, "
2870
+ f"reason: {self.reason})"
2871
+ )
2872
+
2873
+ def __str__(self) -> str:
2874
+ """Returns event as human-readable string."""
2875
+ return (
2876
+ f"{self.__class__.__name__}({self.agent_id}, {self.flow_id}, {self.reason})"
2877
+ )
2878
+
2879
+ def __hash__(self) -> int:
2880
+ """Returns unique hash for event."""
2881
+ return hash((self.agent_id, self.flow_id, self.reason))
2882
+
2883
+ def __eq__(self, other: Any) -> bool:
2884
+ """Compares object with other object."""
2885
+ if not isinstance(other, AgentCancelled):
2886
+ return NotImplemented
2887
+ return (self.agent_id, self.flow_id, self.reason) == (
2888
+ other.agent_id,
2889
+ other.flow_id,
2890
+ other.reason,
2891
+ )
2892
+
2893
+ def as_dict(self) -> Dict[str, Any]:
2894
+ """Returns serialized event."""
2895
+ serialized = super().as_dict()
2896
+ serialized.update(
2897
+ {"agent_id": self.agent_id, "flow_id": self.flow_id, "reason": self.reason}
2898
+ )
2899
+ return serialized
2900
+
2901
+ @classmethod
2902
+ def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentCancelled":
2903
+ if "agent_id" not in parameters:
2904
+ raise ValueError(
2905
+ "Failed to parse agent_cancelled event: agent_id is required"
2906
+ )
2907
+ if "flow_id" not in parameters:
2908
+ raise ValueError(
2909
+ "Failed to parse agent_cancelled event: flow_id is required"
2910
+ )
2911
+
2912
+ return AgentCancelled(
2913
+ parameters["agent_id"],
2914
+ parameters["flow_id"],
2915
+ parameters.get("reason"),
2916
+ parameters.get("timestamp"),
2917
+ parameters.get("metadata"),
2918
+ )
2919
+
2920
+
2921
+ class AgentResumed(SkipEventInMDStoryMixin):
2922
+ """Mark the resumption of an agent."""
2923
+
2924
+ type_name = "agent_resumed"
2925
+
2926
+ def __init__(
2927
+ self,
2928
+ agent_id: str,
2929
+ flow_id: str,
2930
+ timestamp: Optional[float] = None,
2931
+ metadata: Optional[Dict[str, Any]] = None,
2932
+ ) -> None:
2933
+ self.agent_id = agent_id
2934
+ self.flow_id = flow_id
2935
+ super().__init__(timestamp, metadata)
2936
+
2937
+ def __repr__(self) -> str:
2938
+ """Returns event as string for debugging."""
2939
+ return f"AgentResumed(agent: {self.agent_id}, flow: {self.flow_id})"
2940
+
2941
+ def __str__(self) -> str:
2942
+ """Returns event as human-readable string."""
2943
+ return f"{self.__class__.__name__}({self.agent_id}, {self.flow_id})"
2944
+
2945
+ def __hash__(self) -> int:
2946
+ """Returns unique hash for event."""
2947
+ return hash((self.agent_id, self.flow_id))
2948
+
2949
+ def __eq__(self, other: Any) -> bool:
2950
+ """Compares object with other object."""
2951
+ if not isinstance(other, AgentResumed):
2952
+ return NotImplemented
2953
+ return (self.agent_id, self.flow_id) == (other.agent_id, other.flow_id)
2954
+
2955
+ def as_dict(self) -> Dict[str, Any]:
2956
+ """Returns serialized event."""
2957
+ serialized = super().as_dict()
2958
+ serialized.update({"agent_id": self.agent_id, "flow_id": self.flow_id})
2959
+ return serialized
2960
+
2961
+ @classmethod
2962
+ def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentResumed":
2963
+ if "agent_id" not in parameters:
2964
+ raise ValueError(
2965
+ "Failed to parse agent_resumed event: agent_id is required"
2966
+ )
2967
+ if "flow_id" not in parameters:
2968
+ raise ValueError("Failed to parse agent_resumed event: flow_id is required")
2969
+
2970
+ return AgentResumed(
2971
+ parameters["agent_id"],
2972
+ parameters["flow_id"],
2973
+ parameters.get("timestamp"),
2974
+ parameters.get("metadata"),
2975
+ )
2976
+
2977
+
2649
2978
  class SessionEnded(AlwaysEqualEventMixin):
2650
2979
  """Mark the end of a conversation session."""
2651
2980
 
@@ -11,3 +11,8 @@ KEY_RUN_PATTERN_COMPLETED = "run_pattern_completed"
11
11
  KEY_TRANSLATION = "translation"
12
12
  KEY_CALLED_FLOW = "called_flow"
13
13
  KEY_LINKED_FLOW = "linked_flow"
14
+
15
+ # MCP mapping field names
16
+ KEY_MAPPING_INPUT = "input"
17
+ KEY_MAPPING_OUTPUT = "output"
18
+ KEY_MAPPING_SLOT = "slot"
@@ -8,7 +8,6 @@ from typing import Any, Dict, List, Optional, Set, Text, Tuple, Union
8
8
 
9
9
  import structlog
10
10
  from pydantic import BaseModel
11
- from pypred import Predicate
12
11
 
13
12
  import rasa.shared.utils.io
14
13
  from rasa.engine.language import Language
@@ -53,6 +52,7 @@ from rasa.shared.core.flows.steps.constants import (
53
52
  )
54
53
  from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
55
54
  from rasa.shared.core.slots import Slot
55
+ from rasa.utils.pypred import Predicate
56
56
 
57
57
  structlogger = structlog.get_logger()
58
58
 
@@ -52,7 +52,13 @@ def step_from_json(flow_id: Text, data: Dict[Text, Any]) -> FlowStep:
52
52
  return SetSlotsFlowStep.from_json(flow_id, data)
53
53
  if "noop" in data:
54
54
  return NoOperationFlowStep.from_json(flow_id, data)
55
- raise RasaException(f"Failed to parse step from json. Unknown type for {data}.")
55
+
56
+ required_properties = ["action", "collect", "link", "call", "set_slots", "noop"]
57
+ raise RasaException(
58
+ f"Failed to parse step from json. Unknown type for {data}. "
59
+ f"At least one of the following properties is required: "
60
+ f"{', '.join(required_properties)}"
61
+ )
56
62
 
57
63
 
58
64
  @dataclass
@@ -2,17 +2,21 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from pathlib import Path
5
- from typing import Any, Dict, Generator, List, Optional, Set, Text, Union
5
+ from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, Set, Text, Union
6
6
 
7
7
  import rasa.shared.utils.io
8
8
  from rasa.shared.core.flows import Flow
9
9
  from rasa.shared.core.flows.flow_path import FlowPathsList
10
10
  from rasa.shared.core.flows.validation import (
11
11
  DuplicatedFlowIdException,
12
- validate_called_flows_exists,
12
+ validate_call_steps,
13
+ validate_exit_if_conditions,
14
+ validate_exit_if_exclusivity,
13
15
  validate_flow,
14
16
  validate_link_in_call_restriction,
15
17
  validate_linked_flows_exists,
18
+ validate_mcp_mapping_slots,
19
+ validate_mcp_server_references,
16
20
  validate_nlu_trigger,
17
21
  validate_patterns_are_not_called_or_linked,
18
22
  validate_patterns_are_not_calling_or_linking_other_flows,
@@ -20,6 +24,9 @@ from rasa.shared.core.flows.validation import (
20
24
  )
21
25
  from rasa.shared.core.slots import Slot
22
26
 
27
+ if TYPE_CHECKING:
28
+ from rasa.shared.core.domain import Domain
29
+
23
30
 
24
31
  @dataclass
25
32
  class FlowsList:
@@ -160,17 +167,26 @@ class FlowsList:
160
167
  else:
161
168
  return None
162
169
 
163
- def validate(self) -> None:
164
- """Validate the flows."""
170
+ def validate(self, domain: Optional["Domain"] = None) -> None:
171
+ """Validate the flows.
172
+
173
+ Args:
174
+ domain: Optional domain containing slot definitions. If provided,
175
+ exit_if conditions will be validated against defined slots.
176
+ """
165
177
  for flow in self.underlying_flows:
166
178
  validate_flow(flow)
167
179
  validate_nlu_trigger(self.underlying_flows)
168
180
  validate_link_in_call_restriction(self)
169
- validate_called_flows_exists(self)
181
+ validate_call_steps(self)
182
+ validate_mcp_server_references(self)
183
+ validate_mcp_mapping_slots(self, domain)
170
184
  validate_linked_flows_exists(self)
171
185
  validate_patterns_are_not_called_or_linked(self)
172
186
  validate_patterns_are_not_calling_or_linking_other_flows(self)
173
187
  validate_step_ids_are_unique(self)
188
+ validate_exit_if_conditions(self, domain)
189
+ validate_exit_if_exclusivity(self)
174
190
 
175
191
  @property
176
192
  def user_flow_ids(self) -> Set[str]: