rasa-pro 3.13.11__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 (588) 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/direct_custom_actions_executor.py +9 -2
  305. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  306. rasa/core/agent.py +22 -2
  307. rasa/core/available_agents.py +239 -0
  308. rasa/core/brokers/broker.py +1 -1
  309. rasa/core/brokers/kafka.py +56 -8
  310. rasa/core/channels/__init__.py +82 -35
  311. rasa/core/channels/channel.py +4 -3
  312. rasa/core/channels/constants.py +3 -0
  313. rasa/core/channels/development_inspector.py +29 -16
  314. rasa/core/channels/hangouts.py +2 -2
  315. rasa/core/channels/inspector/README.md +25 -13
  316. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  320. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  323. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  329. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  335. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  353. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  354. rasa/core/channels/inspector/dist/index.html +1 -1
  355. rasa/core/channels/inspector/package.json +18 -18
  356. rasa/core/channels/inspector/src/App.tsx +56 -12
  357. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  358. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  359. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  360. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  361. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
  362. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  363. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
  364. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  365. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  366. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  367. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  368. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  369. rasa/core/channels/inspector/src/types.ts +55 -1
  370. rasa/core/channels/inspector/yarn.lock +336 -189
  371. rasa/core/channels/socketio.py +212 -51
  372. rasa/core/channels/studio_chat.py +82 -32
  373. rasa/core/channels/telegram.py +4 -9
  374. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  375. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  376. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  377. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  378. rasa/core/channels/voice_stream/audiocodes.py +11 -6
  379. rasa/core/channels/voice_stream/browser_audio.py +91 -4
  380. rasa/core/channels/voice_stream/call_state.py +13 -2
  381. rasa/core/channels/voice_stream/genesys.py +19 -15
  382. rasa/core/channels/voice_stream/jambonz.py +22 -12
  383. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  384. rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
  385. rasa/core/channels/voice_stream/util.py +11 -1
  386. rasa/core/channels/voice_stream/voice_channel.py +170 -32
  387. rasa/core/concurrent_lock_store.py +83 -16
  388. rasa/core/config/__init__.py +0 -0
  389. rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
  390. rasa/core/config/configuration.py +295 -0
  391. rasa/core/config/credentials.py +19 -0
  392. rasa/core/config/message_procesing_config.py +34 -0
  393. rasa/core/constants.py +17 -0
  394. rasa/core/exceptions.py +1 -1
  395. rasa/core/featurizers/tracker_featurizers.py +3 -2
  396. rasa/core/iam_credentials_providers/__init__.py +0 -0
  397. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
  398. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
  399. rasa/core/lock_store.py +50 -10
  400. rasa/core/nlg/contextual_response_rephraser.py +5 -0
  401. rasa/core/nlg/generator.py +1 -1
  402. rasa/core/persistor.py +7 -7
  403. rasa/core/policies/enterprise_search_policy.py +9 -10
  404. rasa/core/policies/flow_policy.py +4 -4
  405. rasa/core/policies/flows/agent_executor.py +720 -0
  406. rasa/core/policies/flows/flow_exceptions.py +5 -2
  407. rasa/core/policies/flows/flow_executor.py +146 -77
  408. rasa/core/policies/flows/mcp_tool_executor.py +304 -0
  409. rasa/core/policies/intentless_policy.py +1 -1
  410. rasa/core/policies/rule_policy.py +1 -1
  411. rasa/core/policies/ted_policy.py +20 -12
  412. rasa/core/policies/unexpected_intent_policy.py +6 -0
  413. rasa/core/processor.py +100 -44
  414. rasa/core/redis_connection_factory.py +474 -0
  415. rasa/core/run.py +49 -10
  416. rasa/core/test.py +4 -0
  417. rasa/core/tracker_stores/redis_tracker_store.py +36 -14
  418. rasa/core/tracker_stores/sql_tracker_store.py +59 -1
  419. rasa/core/tracker_stores/tracker_store.py +3 -7
  420. rasa/core/train.py +1 -1
  421. rasa/core/training/interactive.py +20 -18
  422. rasa/core/training/story_conflict.py +5 -5
  423. rasa/core/utils.py +22 -23
  424. rasa/dialogue_understanding/commands/__init__.py +8 -0
  425. rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
  426. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  427. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  428. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  429. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  430. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  431. rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
  432. rasa/dialogue_understanding/commands/utils.py +135 -2
  433. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  434. rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
  435. rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
  436. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  437. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  438. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  439. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  440. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  441. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  442. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  443. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  444. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  445. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  446. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  447. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  448. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
  449. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  450. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  451. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  452. rasa/dialogue_understanding/stack/utils.py +57 -3
  453. rasa/dialogue_understanding/utils.py +24 -4
  454. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  455. rasa/e2e_test/e2e_test_runner.py +13 -3
  456. rasa/engine/caching.py +2 -2
  457. rasa/engine/constants.py +1 -1
  458. rasa/engine/graph.py +5 -1
  459. rasa/engine/loader.py +12 -0
  460. rasa/engine/recipes/default_components.py +138 -49
  461. rasa/engine/recipes/default_recipe.py +108 -11
  462. rasa/engine/runner/dask.py +8 -5
  463. rasa/engine/validation.py +25 -8
  464. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  465. rasa/hooks.py +5 -5
  466. rasa/llm_fine_tuning/utils.py +2 -2
  467. rasa/model_manager/model_api.py +4 -5
  468. rasa/model_manager/runner_service.py +2 -2
  469. rasa/model_manager/socket_bridge.py +21 -17
  470. rasa/model_manager/trainer_service.py +12 -9
  471. rasa/model_manager/utils.py +1 -29
  472. rasa/model_manager/warm_rasa_process.py +13 -3
  473. rasa/model_training.py +60 -47
  474. rasa/nlu/classifiers/diet_classifier.py +198 -98
  475. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  476. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  477. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  478. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  479. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  480. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  481. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  482. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  483. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  484. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  485. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  486. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  487. rasa/nlu/selectors/response_selector.py +10 -2
  488. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  489. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  490. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  491. rasa/nlu/utils/mitie_utils.py +3 -0
  492. rasa/nlu/utils/spacy_utils.py +3 -2
  493. rasa/plugin.py +8 -8
  494. rasa/privacy/privacy_config.py +1 -1
  495. rasa/privacy/privacy_manager.py +12 -3
  496. rasa/server.py +15 -3
  497. rasa/shared/agents/__init__.py +0 -0
  498. rasa/shared/agents/auth/__init__.py +0 -0
  499. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  500. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  501. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  502. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  503. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  504. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  505. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
  506. rasa/shared/agents/auth/constants.py +13 -0
  507. rasa/shared/agents/auth/types.py +12 -0
  508. rasa/shared/agents/auth/utils.py +85 -0
  509. rasa/shared/agents/utils.py +35 -0
  510. rasa/shared/constants.py +11 -0
  511. rasa/shared/core/constants.py +17 -1
  512. rasa/shared/core/domain.py +62 -22
  513. rasa/shared/core/events.py +329 -0
  514. rasa/shared/core/flows/constants.py +5 -0
  515. rasa/shared/core/flows/flow.py +1 -1
  516. rasa/shared/core/flows/flow_step.py +7 -1
  517. rasa/shared/core/flows/flows_list.py +21 -5
  518. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  519. rasa/shared/core/flows/steps/call.py +57 -6
  520. rasa/shared/core/flows/steps/collect.py +98 -13
  521. rasa/shared/core/flows/validation.py +372 -8
  522. rasa/shared/core/flows/yaml_flows_io.py +19 -10
  523. rasa/shared/core/slots.py +6 -2
  524. rasa/shared/core/trackers.py +5 -2
  525. rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
  526. rasa/shared/exceptions.py +39 -2
  527. rasa/shared/importers/importer.py +6 -0
  528. rasa/shared/importers/rasa.py +1 -1
  529. rasa/shared/importers/utils.py +86 -4
  530. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  531. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  532. rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
  533. rasa/shared/providers/llm/llm_client.py +7 -3
  534. rasa/shared/providers/llm/llm_response.py +66 -0
  535. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  536. rasa/shared/utils/common.py +26 -1
  537. rasa/shared/utils/health_check/health_check.py +7 -3
  538. rasa/shared/utils/llm.py +92 -19
  539. rasa/shared/utils/mcp/__init__.py +0 -0
  540. rasa/shared/utils/mcp/server_connection.py +250 -0
  541. rasa/shared/utils/mcp/utils.py +20 -0
  542. rasa/shared/utils/schemas/events.py +42 -0
  543. rasa/shared/utils/yaml.py +3 -1
  544. rasa/studio/download.py +3 -0
  545. rasa/studio/prompts.py +1 -0
  546. rasa/studio/pull/pull.py +3 -2
  547. rasa/studio/train.py +8 -7
  548. rasa/studio/upload.py +19 -52
  549. rasa/telemetry.py +166 -28
  550. rasa/tracing/config.py +45 -12
  551. rasa/tracing/constants.py +14 -0
  552. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  553. rasa/tracing/instrumentation/instrumentation.py +626 -21
  554. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  555. rasa/tracing/instrumentation/metrics.py +32 -0
  556. rasa/tracing/metric_instrument_provider.py +68 -0
  557. rasa/utils/common.py +92 -1
  558. rasa/utils/endpoints.py +11 -2
  559. rasa/utils/io.py +27 -9
  560. rasa/utils/json_utils.py +6 -1
  561. rasa/utils/licensing.py +21 -10
  562. rasa/utils/log_utils.py +121 -7
  563. rasa/utils/ml_utils.py +1 -1
  564. rasa/utils/openapi.py +144 -0
  565. rasa/utils/plotting.py +1 -1
  566. rasa/utils/pypred.py +45 -0
  567. rasa/utils/tensorflow/__init__.py +7 -0
  568. rasa/utils/tensorflow/callback.py +136 -101
  569. rasa/utils/tensorflow/crf.py +1 -1
  570. rasa/utils/tensorflow/data_generator.py +21 -8
  571. rasa/utils/tensorflow/layers.py +21 -11
  572. rasa/utils/tensorflow/metrics.py +7 -3
  573. rasa/utils/tensorflow/models.py +56 -8
  574. rasa/utils/tensorflow/rasa_layers.py +8 -6
  575. rasa/utils/tensorflow/transformer.py +2 -3
  576. rasa/utils/train_utils.py +54 -24
  577. rasa/validator.py +149 -16
  578. rasa/version.py +1 -1
  579. rasa_pro-3.14.0.dist-info/METADATA +212 -0
  580. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +583 -271
  581. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  582. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  583. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  584. rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
  585. rasa_pro-3.13.11.dist-info/METADATA +0 -192
  586. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
  587. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
  588. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,101 @@
1
+ """Functions for validating Rasa projects."""
2
+
3
+ import sys
4
+ from contextlib import contextmanager
5
+ from typing import Any, Dict, Generator, Optional
6
+
7
+ import structlog
8
+
9
+ from rasa.builder import config
10
+ from rasa.builder.exceptions import ValidationError
11
+ from rasa.builder.logging_utils import capture_validation_logs
12
+ from rasa.cli.validation.bot_config import validate_files
13
+ from rasa.shared.importers.importer import TrainingDataImporter
14
+
15
+ structlogger = structlog.get_logger()
16
+
17
+
18
+ @contextmanager
19
+ def _mock_sys_exit() -> Generator[Dict[str, bool], Any, None]:
20
+ """Context manager to prevent sys.exit from being called during validation."""
21
+ was_sys_exit_called = {"value": False}
22
+
23
+ def sys_exit_mock(code: int = 0) -> None:
24
+ was_sys_exit_called["value"] = True
25
+
26
+ original_exit = sys.exit
27
+ sys.exit = sys_exit_mock # type: ignore[assignment]
28
+
29
+ try:
30
+ yield was_sys_exit_called
31
+ finally:
32
+ sys.exit = original_exit
33
+
34
+
35
+ async def validate_project(importer: TrainingDataImporter) -> Optional[str]:
36
+ """Validate a Rasa project.
37
+
38
+ Args:
39
+ importer: Training data importer with domain, flows, and config
40
+
41
+ Returns:
42
+ None if validation passes, error message if validation fails.
43
+
44
+ Raises:
45
+ ValidationError: If validation fails
46
+ """
47
+ with capture_validation_logs() as captured_logs:
48
+ try:
49
+ with _mock_sys_exit() as exit_tracker:
50
+ from rasa.core.config.configuration import Configuration
51
+
52
+ Configuration.initialise_empty()
53
+
54
+ validate_files(
55
+ fail_on_warnings=config.VALIDATION_FAIL_ON_WARNINGS,
56
+ max_history=config.VALIDATION_MAX_HISTORY,
57
+ importer=importer,
58
+ )
59
+
60
+ if exit_tracker["value"]:
61
+ error_logs = [
62
+ log for log in captured_logs if log.get("log_level") != "debug"
63
+ ]
64
+ structlogger.error(
65
+ "validation.failed.sys_exit",
66
+ error_logs=error_logs,
67
+ )
68
+ raise ValidationError(
69
+ "Validation failed with sys.exit", validation_logs=error_logs
70
+ )
71
+
72
+ structlogger.info("validation.success")
73
+ return None
74
+
75
+ except ValidationError:
76
+ raise
77
+
78
+ except Exception as e:
79
+ error_msg = f"Validation failed with exception: {e}"
80
+
81
+ error_logs = [
82
+ log for log in captured_logs if log.get("log_level") != "debug"
83
+ ]
84
+
85
+ structlogger.error(
86
+ "validation.failed.exception", error=str(e), validation_logs=error_logs
87
+ )
88
+ raise ValidationError(error_msg, validation_logs=error_logs)
89
+
90
+ except SystemExit as e:
91
+ error_logs = [
92
+ log for log in captured_logs if log.get("log_level") != "debug"
93
+ ]
94
+
95
+ structlogger.error(
96
+ "validation.failed.sys_exit",
97
+ error_logs=error_logs,
98
+ )
99
+ raise ValidationError(
100
+ f"SystemExit during validation: {e}", validation_logs=error_logs
101
+ )
@@ -4,8 +4,10 @@ from typing import Text
4
4
  from rasa.cli.arguments.default_arguments import (
5
5
  add_data_param,
6
6
  add_domain_param,
7
+ add_endpoint_param,
7
8
  add_nlu_data_param,
8
9
  add_out_param,
10
+ add_sub_agents_param,
9
11
  )
10
12
  from rasa.shared.constants import DEFAULT_CONVERTED_DATA_PATH
11
13
 
@@ -91,6 +93,13 @@ def set_validator_arguments(parser: argparse.ArgumentParser) -> None:
91
93
  )
92
94
  add_domain_param(parser)
93
95
  add_data_param(parser)
96
+ add_sub_agents_param(parser)
97
+ # Endpoints are optional for `data validate` command
98
+ add_endpoint_param(
99
+ parser,
100
+ help_text="Configuration file for the connectors as a yml file.",
101
+ default=None,
102
+ )
94
103
 
95
104
 
96
105
  def set_migrate_arguments(parser: argparse.ArgumentParser) -> None:
@@ -3,6 +3,7 @@ import logging
3
3
  from enum import Enum
4
4
  from typing import List, Optional, Text, Union
5
5
 
6
+ from rasa.core.constants import DEFAULT_SUB_AGENTS
6
7
  from rasa.core.persistor import RemoteStorageType, StorageType, parse_remote_storage
7
8
  from rasa.shared.constants import (
8
9
  DEFAULT_CONFIG_PATH,
@@ -217,3 +218,14 @@ def add_skip_validation_flag(
217
218
  action="append",
218
219
  help="Skip YAML validation for selected parts of the training data.",
219
220
  )
221
+
222
+
223
+ def add_sub_agents_param(
224
+ parser: Union[argparse.ArgumentParser, argparse._ActionsContainer],
225
+ ) -> None:
226
+ parser.add_argument(
227
+ "--sub-agents",
228
+ type=str,
229
+ default=DEFAULT_SUB_AGENTS,
230
+ help="Directory that specifies sub-agents to use (default: %(default)s).",
231
+ )
rasa/cli/arguments/run.py CHANGED
@@ -7,6 +7,7 @@ from rasa.cli.arguments.default_arguments import (
7
7
  add_model_param,
8
8
  add_remote_storage_param,
9
9
  add_skip_validation_flag,
10
+ add_sub_agents_param,
10
11
  )
11
12
  from rasa.core import constants
12
13
  from rasa.env import (
@@ -24,6 +25,7 @@ def set_run_arguments(parser: argparse.ArgumentParser) -> None:
24
25
  add_server_arguments(parser)
25
26
  add_inspect_argument(parser)
26
27
  add_skip_validation_flag(parser)
28
+ add_sub_agents_param(parser)
27
29
 
28
30
 
29
31
  def set_run_action_arguments(parser: argparse.ArgumentParser) -> None:
@@ -10,6 +10,7 @@ from rasa.cli.arguments.default_arguments import (
10
10
  add_remote_root_only_param,
11
11
  add_remote_storage_param,
12
12
  add_stories_param,
13
+ add_sub_agents_param,
13
14
  )
14
15
  from rasa.graph_components.providers.training_tracker_provider import (
15
16
  TrainingTrackerProvider,
@@ -43,6 +44,7 @@ def set_train_arguments(parser: argparse.ArgumentParser) -> None:
43
44
  )
44
45
  add_remote_storage_param(parser)
45
46
  add_remote_root_only_param(parser)
47
+ add_sub_agents_param(parser)
46
48
 
47
49
 
48
50
  def set_train_core_arguments(parser: argparse.ArgumentParser) -> None:
rasa/cli/data.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import argparse
2
2
  import logging
3
3
  import pathlib
4
- from typing import List
4
+ from typing import List, Optional
5
5
 
6
6
  import rasa.cli.utils
7
7
  import rasa.shared.core.domain
@@ -15,6 +15,9 @@ from rasa import telemetry
15
15
  from rasa.cli import SubParsersAction
16
16
  from rasa.cli.arguments import data as arguments
17
17
  from rasa.cli.arguments import default_arguments
18
+ from rasa.cli.validation.bot_config import validate_files
19
+ from rasa.cli.validation.config_path_validation import get_validated_path
20
+ from rasa.core.config.configuration import Configuration
18
21
  from rasa.e2e_test.e2e_config import create_llm_e2e_test_converter_config
19
22
  from rasa.e2e_test.e2e_test_converter import E2ETestConverter
20
23
  from rasa.e2e_test.utils.e2e_yaml_utils import E2ETestYAMLWriter
@@ -137,8 +140,12 @@ def _add_data_validate_parsers(
137
140
  )
138
141
  _append_story_structure_arguments(validate_parser)
139
142
  validate_parser.set_defaults(
140
- func=lambda args: rasa.cli.utils.validate_files(
141
- args.fail_on_warnings, args.max_history, _build_training_data_importer(args)
143
+ func=lambda args: _validate_files_with_configuration(
144
+ args.fail_on_warnings,
145
+ args.max_history,
146
+ _build_training_data_importer(args),
147
+ sub_agents=args.sub_agents,
148
+ endpoints=args.endpoints,
142
149
  )
143
150
  )
144
151
  arguments.set_validator_arguments(validate_parser)
@@ -153,10 +160,12 @@ def _add_data_validate_parsers(
153
160
  _append_story_structure_arguments(story_structure_parser)
154
161
 
155
162
  story_structure_parser.set_defaults(
156
- func=lambda args: rasa.cli.utils.validate_files(
163
+ func=lambda args: _validate_files_with_configuration(
157
164
  args.fail_on_warnings,
158
165
  args.max_history,
159
166
  _build_training_data_importer(args),
167
+ sub_agents=args.sub_agents,
168
+ endpoints=args.endpoints,
160
169
  stories_only=True,
161
170
  )
162
171
  )
@@ -169,10 +178,12 @@ def _add_data_validate_parsers(
169
178
  help="Checks for inconsistencies in the flows files.",
170
179
  )
171
180
  flows_structure_parser.set_defaults(
172
- func=lambda args: rasa.cli.utils.validate_files(
181
+ func=lambda args: _validate_files_with_configuration(
173
182
  args.fail_on_warnings,
174
183
  args.max_history,
175
184
  _build_training_data_importer(args),
185
+ sub_agents=args.sub_agents,
186
+ endpoints=args.endpoints,
176
187
  flows_only=True,
177
188
  )
178
189
  )
@@ -185,10 +196,12 @@ def _add_data_validate_parsers(
185
196
  help="Checks for inconsistencies of the flow and response translation.",
186
197
  )
187
198
  translations_structure_parser.set_defaults(
188
- func=lambda args: rasa.cli.utils.validate_files(
199
+ func=lambda args: _validate_files_with_configuration(
189
200
  args.fail_on_warnings,
190
201
  args.max_history,
191
202
  _build_training_data_importer(args),
203
+ sub_agents=args.sub_agents,
204
+ endpoints=args.endpoints,
192
205
  translations_only=True,
193
206
  )
194
207
  )
@@ -196,12 +209,12 @@ def _add_data_validate_parsers(
196
209
 
197
210
 
198
211
  def _build_training_data_importer(args: argparse.Namespace) -> "TrainingDataImporter":
199
- config = rasa.cli.utils.get_validated_path(
212
+ config = get_validated_path(
200
213
  args.config, "config", DEFAULT_CONFIG_PATH, none_is_valid=True
201
214
  )
202
215
 
203
216
  # Exit the validation if the domain path is invalid
204
- domain = rasa.cli.utils.get_validated_path(
217
+ domain = get_validated_path(
205
218
  args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=False
206
219
  )
207
220
 
@@ -231,7 +244,7 @@ def split_nlu_data(args: argparse.Namespace) -> None:
231
244
  Args:
232
245
  args: Commandline arguments
233
246
  """
234
- data_path = rasa.cli.utils.get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
247
+ data_path = get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
235
248
  data_path = rasa.shared.data.get_nlu_directory(data_path)
236
249
 
237
250
  nlu_data = rasa.shared.nlu.training_data.loading.load_data(data_path)
@@ -258,7 +271,7 @@ def split_stories_data(args: argparse.Namespace) -> None:
258
271
  YAMLStoryReader,
259
272
  )
260
273
 
261
- data_path = rasa.cli.utils.get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
274
+ data_path = get_validated_path(args.nlu, "nlu", DEFAULT_DATA_PATH)
262
275
  data_files = rasa.shared.data.get_data_files(
263
276
  data_path, YAMLStoryReader.is_stories_file
264
277
  )
@@ -374,3 +387,58 @@ def convert_data_to_e2e_tests(args: argparse.Namespace) -> None:
374
387
  rasa.shared.utils.cli.print_error_and_exit(
375
388
  f"Failed to convert the data into E2E tests. Error: {exc}"
376
389
  )
390
+
391
+
392
+ def _initialize_configuration_for_validation(
393
+ sub_agents: Optional[str] = None, endpoints: Optional[str] = None
394
+ ) -> None:
395
+ """Initialize Configuration before validation.
396
+
397
+ Args:
398
+ sub_agents: Path to sub-agents directory for validation.
399
+ endpoints: Path to the endpoints configuration file.
400
+ """
401
+ if endpoints:
402
+ Configuration.initialise_endpoints(endpoints_path=pathlib.Path(endpoints))
403
+ if sub_agents:
404
+ Configuration.initialise_sub_agents(pathlib.Path(sub_agents))
405
+ if not endpoints and not sub_agents:
406
+ Configuration.initialise_empty()
407
+
408
+
409
+ def _validate_files_with_configuration(
410
+ fail_on_warnings: bool,
411
+ max_history: int,
412
+ importer: TrainingDataImporter,
413
+ sub_agents: Optional[str] = None,
414
+ endpoints: Optional[str] = None,
415
+ stories_only: bool = False,
416
+ flows_only: bool = False,
417
+ translations_only: bool = False,
418
+ ) -> None:
419
+ """Wrapper for validate_files that ensures Configuration is initialized first.
420
+
421
+ Args:
422
+ fail_on_warnings: `True` if the process should exit with a non-zero status
423
+ max_history: The max history to use when validating the story structure.
424
+ importer: The `TrainingDataImporter` to use to load the training data.
425
+ sub_agents: Path to sub-agents directory for validation.
426
+ endpoints: Path to the endpoints configuration file.
427
+ stories_only: If `True`, only the story structure is validated.
428
+ flows_only: If `True`, only the flows are validated.
429
+ translations_only: If `True`, only the translations data is validated.
430
+ """
431
+ # Initialize Configuration before calling validate_files
432
+ _initialize_configuration_for_validation(sub_agents=sub_agents, endpoints=endpoints)
433
+
434
+ # Call the original validate_files function
435
+ validate_files(
436
+ fail_on_warnings=fail_on_warnings,
437
+ max_history=max_history,
438
+ importer=importer,
439
+ stories_only=stories_only,
440
+ flows_only=flows_only,
441
+ translations_only=translations_only,
442
+ sub_agents=sub_agents,
443
+ endpoints=endpoints,
444
+ )
@@ -3,6 +3,7 @@ import asyncio
3
3
  import datetime
4
4
  import importlib
5
5
  import sys
6
+ from pathlib import Path
6
7
  from typing import Any, Dict, List, Optional, Type, cast
7
8
 
8
9
  import structlog
@@ -14,9 +15,11 @@ from rasa.cli.arguments.default_arguments import (
14
15
  add_endpoint_param,
15
16
  add_model_param,
16
17
  add_remote_storage_param,
18
+ add_sub_agents_param,
17
19
  )
18
20
  from rasa.core.agent import Agent
19
- from rasa.core.available_endpoints import AvailableEndpoints
21
+ from rasa.core.config.available_endpoints import AvailableEndpoints
22
+ from rasa.core.config.configuration import Configuration
20
23
  from rasa.core.exceptions import AgentNotReady
21
24
  from rasa.core.processor import MessageProcessor
22
25
  from rasa.dialogue_understanding.commands import Command
@@ -47,7 +50,6 @@ from rasa.dialogue_understanding_test.validation import (
47
50
  from rasa.e2e_test.e2e_test_case import TestSuite
48
51
  from rasa.exceptions import RasaException
49
52
  from rasa.shared.constants import (
50
- DEFAULT_ENDPOINTS_PATH,
51
53
  LLM_CONFIG_KEY,
52
54
  ROUTE_TO_CALM_SLOT,
53
55
  )
@@ -174,6 +176,8 @@ def add_du_test_arguments(parser: argparse.ArgumentParser) -> None:
174
176
  ),
175
177
  )
176
178
 
179
+ add_sub_agents_param(du_arguments)
180
+
177
181
 
178
182
  def ensure_calm_only_bot(agent: Agent) -> None:
179
183
  if agent.domain is None or agent.processor is None:
@@ -210,6 +214,7 @@ def execute_dialogue_understanding_tests(args: argparse.Namespace) -> None:
210
214
 
211
215
  # initialization of endpoints
212
216
  endpoints = set_up_available_endpoints(args)
217
+ Configuration.initialise_sub_agents(args.sub_agents)
213
218
 
214
219
  # set up the test runner, e.g. start the agent
215
220
  try:
@@ -218,6 +223,7 @@ def execute_dialogue_understanding_tests(args: argparse.Namespace) -> None:
218
223
  model_path=args.model,
219
224
  model_server=endpoints.model,
220
225
  remote_storage=args.remote_storage,
226
+ sub_agents_path=args.sub_agents,
221
227
  )
222
228
  except AgentNotReady as error:
223
229
  structlogger.error(
@@ -323,11 +329,9 @@ def get_valid_test_suite(
323
329
 
324
330
 
325
331
  def set_up_available_endpoints(args: argparse.Namespace) -> AvailableEndpoints:
326
- """Set up the available endpoints for the test runner."""
327
- args.endpoints = rasa.cli.utils.get_validated_path(
328
- args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
329
- )
330
- endpoints = AvailableEndpoints.get_instance(args.endpoints)
332
+ endpoints = Configuration.initialise_endpoints(
333
+ endpoints_path=Path(args.endpoints)
334
+ ).endpoints
331
335
 
332
336
  # Ignore all endpoints apart from action server, model, and nlu
333
337
  # to ensure InMemoryTrackerStore is being used instead of production
rasa/cli/e2e_test.py CHANGED
@@ -17,8 +17,9 @@ from rasa.cli.arguments.default_arguments import (
17
17
  add_endpoint_param,
18
18
  add_model_param,
19
19
  add_remote_storage_param,
20
+ add_sub_agents_param,
20
21
  )
21
- from rasa.core.available_endpoints import AvailableEndpoints
22
+ from rasa.core.config.configuration import Configuration, EndpointsConfigPath
22
23
  from rasa.core.exceptions import AgentNotReady
23
24
  from rasa.e2e_test.aggregate_test_stats_calculator import (
24
25
  AggregateTestStatsCalculator,
@@ -50,7 +51,7 @@ from rasa.e2e_test.utils.io import (
50
51
  )
51
52
  from rasa.e2e_test.utils.validation import validate_model_path
52
53
  from rasa.exceptions import RasaException
53
- from rasa.shared.constants import DEFAULT_ENDPOINTS_PATH, DEFAULT_MODELS_PATH
54
+ from rasa.shared.constants import DEFAULT_MODELS_PATH
54
55
  from rasa.utils.endpoints import EndpointConfig
55
56
 
56
57
  RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME = "RASA_PRO_BETA_FINE_TUNING_RECIPE"
@@ -147,6 +148,8 @@ def add_e2e_test_arguments(parser: argparse.ArgumentParser) -> None:
147
148
  help="Directory where to save coverage report to.",
148
149
  )
149
150
 
151
+ add_sub_agents_param(parser)
152
+
150
153
 
151
154
  def execute_e2e_tests(args: argparse.Namespace) -> None:
152
155
  """Run the end-to-end tests.
@@ -154,10 +157,10 @@ def execute_e2e_tests(args: argparse.Namespace) -> None:
154
157
  Args:
155
158
  args: Commandline arguments.
156
159
  """
157
- args.endpoints = rasa.cli.utils.get_validated_path(
158
- args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
159
- )
160
- endpoints = AvailableEndpoints.get_instance(args.endpoints)
160
+ endpoints = Configuration.initialise_endpoints(
161
+ endpoints_path=EndpointsConfigPath.validate(args.endpoints)
162
+ ).endpoints
163
+ Configuration.initialise_sub_agents(args.sub_agents)
161
164
 
162
165
  # Ignore all endpoints apart from action server, model, nlu and nlg
163
166
  # to ensure InMemoryTrackerStore is being used instead of production
@@ -192,6 +195,7 @@ def execute_e2e_tests(args: argparse.Namespace) -> None:
192
195
  model_server=endpoints.model,
193
196
  endpoints=endpoints,
194
197
  test_case_path=Path(test_case_path),
198
+ sub_agents_path=args.sub_agents,
195
199
  )
196
200
  except AgentNotReady as error:
197
201
  structlogger.error(
rasa/cli/evaluate.py CHANGED
@@ -6,7 +6,7 @@ import rasa.cli.arguments.evaluate as arguments
6
6
  import rasa.shared.utils.cli
7
7
  from rasa import telemetry
8
8
  from rasa.cli import SubParsersAction
9
- from rasa.core.available_endpoints import AvailableEndpoints
9
+ from rasa.core.config.configuration import Configuration
10
10
  from rasa.core.evaluation.marker_base import Marker, OperatorMarker
11
11
  from rasa.core.evaluation.marker_tracker_loader import MarkerTrackerLoader
12
12
  from rasa.core.tracker_stores.tracker_store import TrackerStore
@@ -217,6 +217,8 @@ def _create_tracker_loader(
217
217
  A MarkerTrackerLoader object configured with the specified strategy against
218
218
  the configured tracker store.
219
219
  """
220
- endpoints = AvailableEndpoints.get_instance(endpoint_config)
220
+ endpoints = Configuration.initialise_endpoints(
221
+ endpoints_path=Path(endpoint_config)
222
+ ).endpoints
221
223
  tracker_store = TrackerStore.create(endpoints.tracker_store, domain=domain)
222
224
  return MarkerTrackerLoader(tracker_store, strategy, count, seed)
rasa/cli/export.py CHANGED
@@ -11,13 +11,14 @@ from rasa import telemetry
11
11
  from rasa.cli import SubParsersAction
12
12
  from rasa.cli.arguments import export as arguments
13
13
  from rasa.core.brokers.pika import PikaEventBroker
14
+ from rasa.core.config.configuration import Configuration
14
15
  from rasa.exceptions import PublishingError
15
16
  from rasa.shared.constants import DOCS_URL_EVENT_BROKERS, DOCS_URL_TRACKER_STORES
16
17
  from rasa.shared.exceptions import RasaException
17
18
 
18
19
  if typing.TYPE_CHECKING:
19
- from rasa.core.available_endpoints import AvailableEndpoints
20
20
  from rasa.core.brokers.broker import EventBroker
21
+ from rasa.core.config.available_endpoints import AvailableEndpoints
21
22
  from rasa.core.exporter import Exporter
22
23
  from rasa.core.tracker_stores.tracker_store import TrackerStore
23
24
 
@@ -179,7 +180,9 @@ def export_trackers(args: argparse.Namespace) -> None:
179
180
  async def _export_trackers(args: argparse.Namespace) -> None:
180
181
  _assert_max_timestamp_is_greater_than_min_timestamp(args)
181
182
 
182
- endpoints = rasa.core.utils.read_endpoints_from_path(args.endpoints)
183
+ endpoints = Configuration.initialise_endpoints(
184
+ endpoints_path=args.endpoints
185
+ ).endpoints
183
186
  tracker_store = _get_tracker_store(endpoints)
184
187
  event_broker = await _get_event_broker(endpoints)
185
188
  _prepare_event_broker(event_broker)
rasa/cli/inspect.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import argparse
2
2
  import webbrowser
3
3
  from asyncio import AbstractEventLoop
4
+ from pathlib import Path
4
5
  from typing import List, Optional, Text
5
6
 
6
7
  from sanic import Sanic
@@ -8,8 +9,9 @@ from sanic import Sanic
8
9
  from rasa import telemetry
9
10
  from rasa.cli import SubParsersAction
10
11
  from rasa.cli.arguments import shell as arguments
12
+ from rasa.cli.arguments.default_arguments import add_sub_agents_param
11
13
  from rasa.core import constants
12
- from rasa.core.available_endpoints import AvailableEndpoints
14
+ from rasa.core.config.configuration import Configuration
13
15
  from rasa.engine.storage.local_model_storage import LocalModelStorage
14
16
  from rasa.exceptions import ModelNotFound
15
17
  from rasa.model import get_local_model
@@ -44,6 +46,8 @@ def add_subparser(
44
46
  "--voice", help="Enable voice", action="store_true", default=False
45
47
  )
46
48
 
49
+ add_sub_agents_param(inspect_parser)
50
+
47
51
  # it'd be confusing to expose those arguments to the user,
48
52
  # so we remove them
49
53
  remove_argument_from_parser(inspect_parser, "--credentials")
@@ -64,7 +68,7 @@ async def open_inspector_in_browser(
64
68
  def inspect(args: argparse.Namespace) -> None:
65
69
  """Inspect the bot using the most recent model."""
66
70
  import rasa.cli.run
67
- from rasa.cli.utils import get_validated_path
71
+ from rasa.cli.validation.config_path_validation import get_validated_path
68
72
  from rasa.shared.constants import DEFAULT_MODELS_PATH
69
73
 
70
74
  async def after_start_hook_open_inspector(_: Sanic, __: AbstractEventLoop) -> None:
@@ -87,8 +91,9 @@ def inspect(args: argparse.Namespace) -> None:
87
91
  # Load endpoints with proper endpoint file location
88
92
  # This will initialise the endpoints singleton properly so that
89
93
  # it can be used safely throughout the codebase with
90
- # `AvailableEndpoints.get_instance()`
91
- AvailableEndpoints.get_instance(args.endpoints)
94
+ # `Configuration.get_instance().endpoints`
95
+ Configuration.initialise_endpoints(endpoints_path=Path(args.endpoints))
96
+ Configuration.initialise_sub_agents(args.sub_agents)
92
97
 
93
98
  try:
94
99
  model = get_local_model(model)
rasa/cli/interactive.py CHANGED
@@ -11,6 +11,9 @@ import rasa.utils.common
11
11
  from rasa import model
12
12
  from rasa.cli import SubParsersAction
13
13
  from rasa.cli.arguments import interactive as arguments
14
+ from rasa.cli.validation.config_path_validation import get_validated_path
15
+ from rasa.core.config.configuration import Configuration
16
+ from rasa.core.constants import DEFAULT_SUB_AGENTS
14
17
  from rasa.engine.storage.local_model_storage import LocalModelStorage
15
18
  from rasa.shared.constants import (
16
19
  ASSISTANT_ID_DEFAULT_VALUE,
@@ -109,6 +112,7 @@ def _set_not_required_args(args: argparse.Namespace) -> None:
109
112
  args.validation_max_history = None
110
113
  args.remote_storage = None
111
114
  args.keep_local_model_copy = False
115
+ args.sub_agents = DEFAULT_SUB_AGENTS # Default value for sub-agents
112
116
 
113
117
 
114
118
  def perform_interactive_learning(
@@ -133,18 +137,18 @@ def perform_interactive_learning(
133
137
  "Can not run interactive learning on an NLU-only model."
134
138
  )
135
139
 
136
- args.endpoints = rasa.cli.utils.get_validated_path(
140
+ args.endpoints = get_validated_path(
137
141
  args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
138
142
  )
139
143
 
144
+ Configuration.initialise_endpoints(endpoints_path=Path(args.endpoints))
145
+
140
146
  do_interactive_learning(args, file_importer)
141
147
 
142
148
 
143
149
  def get_provided_model(arg_model: Text) -> Optional[Union[Text, Path]]:
144
150
  """Checks model path input and selects model from it."""
145
- model_path = rasa.cli.utils.get_validated_path(
146
- arg_model, "model", DEFAULT_MODELS_PATH
147
- )
151
+ model_path = get_validated_path(arg_model, "model", DEFAULT_MODELS_PATH)
148
152
 
149
153
  return (
150
154
  model.get_latest_model(model_path) if os.path.isdir(model_path) else model_path
@@ -1,6 +1,7 @@
1
1
  import argparse
2
2
  import asyncio
3
3
  import sys
4
+ from pathlib import Path
4
5
  from typing import Any, Dict, List, Type, cast
5
6
 
6
7
  import structlog
@@ -14,13 +15,15 @@ from rasa.cli.arguments.default_arguments import (
14
15
  add_endpoint_param,
15
16
  add_model_param,
16
17
  add_remote_storage_param,
18
+ add_sub_agents_param,
17
19
  )
18
20
  from rasa.cli.e2e_test import (
19
21
  RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
20
22
  read_test_cases,
21
23
  validate_model_path,
22
24
  )
23
- from rasa.core.available_endpoints import AvailableEndpoints
25
+ from rasa.core.config.available_endpoints import AvailableEndpoints
26
+ from rasa.core.config.configuration import Configuration
24
27
  from rasa.core.exceptions import AgentNotReady
25
28
  from rasa.dialogue_understanding.generator.llm_based_command_generator import (
26
29
  LLMBasedCommandGenerator,
@@ -46,7 +49,6 @@ from rasa.llm_fine_tuning.train_test_split_module import (
46
49
  split_llm_fine_tuning_data,
47
50
  )
48
51
  from rasa.shared.constants import (
49
- DEFAULT_ENDPOINTS_PATH,
50
52
  DEFAULT_MODELS_PATH,
51
53
  LLM_CONFIG_KEY,
52
54
  )
@@ -137,6 +139,8 @@ def add_data_preparation_arguments(parser: argparse.ArgumentParser) -> None:
137
139
  default=DEFAULT_INPUT_E2E_TEST_PATH,
138
140
  )
139
141
 
142
+ add_sub_agents_param(parser)
143
+
140
144
  add_remote_storage_param(parser)
141
145
 
142
146
  rephrasing_arguments = parser.add_argument_group("Rephrasing Module")
@@ -376,6 +380,7 @@ def write_params(
376
380
  "rephrase_config": rephrase_config,
377
381
  "model": args.model,
378
382
  "endpoints": args.endpoints,
383
+ "sub-agents": args.sub_agents,
379
384
  "remote-storage": args.remote_storage,
380
385
  "train_frac": args.train_frac,
381
386
  "output_format": args.output_format,
@@ -393,10 +398,9 @@ def write_statistics(statistics: Dict[str, Any], output_path: str) -> None:
393
398
 
394
399
 
395
400
  def get_valid_endpoints(endpoints_file: str) -> AvailableEndpoints:
396
- validated_endpoints_file = rasa.cli.utils.get_validated_path(
397
- endpoints_file, "endpoints", DEFAULT_ENDPOINTS_PATH, True
398
- )
399
- endpoints = AvailableEndpoints.get_instance(validated_endpoints_file)
401
+ endpoints = Configuration.initialise_endpoints(
402
+ endpoints_path=Path(endpoints_file)
403
+ ).endpoints
400
404
 
401
405
  # Ignore all endpoints apart from action server, model, nlu and nlg
402
406
  # to ensure InMemoryTrackerStore is being used instead of production
@@ -410,6 +414,7 @@ def get_valid_endpoints(endpoints_file: str) -> AvailableEndpoints:
410
414
 
411
415
  def set_up_e2e_test_runner(args: argparse.Namespace) -> E2ETestRunner:
412
416
  endpoints = get_valid_endpoints(args.endpoints)
417
+ Configuration.initialise_sub_agents(args.sub_agents)
413
418
 
414
419
  if endpoints.model is None:
415
420
  args.model = validate_model_path(args.model, "model", DEFAULT_MODELS_PATH)
@@ -420,6 +425,7 @@ def set_up_e2e_test_runner(args: argparse.Namespace) -> E2ETestRunner:
420
425
  model_path=args.model,
421
426
  model_server=endpoints.model,
422
427
  endpoints=endpoints,
428
+ sub_agents_path=args.sub_agents,
423
429
  )
424
430
  except AgentNotReady as error:
425
431
  structlogger.error(