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
rasa/validator.py CHANGED
@@ -4,16 +4,16 @@ import string
4
4
  from collections import defaultdict
5
5
  from typing import Any, Dict, List, Optional, Set, Text, Tuple
6
6
 
7
+ import jinja2.exceptions
7
8
  import structlog
8
9
  from jinja2 import Template
9
- from pypred import Predicate
10
10
  from pypred.ast import CompareOperator, Literal, NegateOperator
11
11
 
12
12
  import rasa.core.training.story_conflict
13
13
  import rasa.shared.nlu.constants
14
- import rasa.shared.utils.cli
15
- import rasa.shared.utils.io
14
+ from rasa.agents.validation import validate_agent_names_not_conflicting_with_flows
16
15
  from rasa.core.channels import UserMessage
16
+ from rasa.core.config.configuration import Configuration
17
17
  from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
18
18
  from rasa.engine.language import Language
19
19
  from rasa.exceptions import ValidationError
@@ -70,10 +70,11 @@ from rasa.shared.core.training_data.structures import StoryGraph
70
70
  from rasa.shared.data import create_regex_pattern_reader
71
71
  from rasa.shared.exceptions import RasaException
72
72
  from rasa.shared.importers.importer import TrainingDataImporter
73
- from rasa.shared.nlu.constants import COMMANDS
73
+ from rasa.shared.nlu.constants import COMMANDS, INTENT
74
74
  from rasa.shared.nlu.training_data.message import Message
75
75
  from rasa.shared.nlu.training_data.training_data import TrainingData
76
76
  from rasa.telemetry import track_validation_error_log
77
+ from rasa.utils.pypred import Predicate
77
78
 
78
79
  logger = logging.getLogger(__name__)
79
80
 
@@ -130,7 +131,7 @@ class Validator:
130
131
  """Compares list of intents in domain with intents in NLU training data."""
131
132
  everything_is_alright = True
132
133
 
133
- nlu_data_intents = {e.data["intent"] for e in self.intents.intent_examples}
134
+ nlu_data_intents = {e.data[INTENT] for e in self.intents.intent_examples}
134
135
 
135
136
  for intent in self._non_default_intents():
136
137
  if intent not in nlu_data_intents:
@@ -172,7 +173,7 @@ class Validator:
172
173
  duplication_hash = defaultdict(set)
173
174
  for example in self.intents.intent_examples:
174
175
  text = example.get(rasa.shared.nlu.constants.TEXT)
175
- duplication_hash[text].add(example.get("intent"))
176
+ duplication_hash[text].add(example.get(INTENT))
176
177
 
177
178
  for text, intents in duplication_hash.items():
178
179
  if len(duplication_hash[text]) > 1:
@@ -629,11 +630,14 @@ class Validator:
629
630
  flow_id: str,
630
631
  ) -> bool:
631
632
  """Validates that a collect step can have either an action or an utterance.
633
+
632
634
  Also logs an error if neither an action nor an utterance is defined.
633
635
 
634
636
  Args:
635
637
  collect: the name of the slot to collect
636
638
  all_good: boolean value indicating the validation status
639
+ domain_slots: dictionary of domain slots
640
+ flow_id: the ID of the flow being validated
637
641
 
638
642
  Returns:
639
643
  False, if validation failed, true, otherwise
@@ -682,9 +686,10 @@ class Validator:
682
686
  has_action_defined=has_action_defined,
683
687
  flow=flow_id,
684
688
  event_info=(
685
- f"The collect step '{collect.collect}' has neither an utterance "
686
- f"nor an action defined, or an initial value defined in the domain."
687
- f"You need to define either an utterance or an action."
689
+ f"The collect step '{collect.collect}' has neither a response "
690
+ f"nor an action defined, nor an initial value defined in the "
691
+ f"domain. You can fix this by adding a response named "
692
+ f"'{collect.utter}' used in the collect step."
688
693
  ),
689
694
  )
690
695
  all_good = False
@@ -1179,23 +1184,27 @@ class Validator:
1179
1184
  )
1180
1185
 
1181
1186
  if isinstance(step, CollectInformationFlowStep):
1182
- predicates = [predicate.if_ for predicate in step.rejections]
1183
- for predicate in predicates:
1187
+ dumped_predicates = [predicate.if_ for predicate in step.rejections]
1188
+ for dumped_predicate in dumped_predicates:
1184
1189
  all_good = self._verify_namespaces(
1185
- predicate, step.id, flow.id, all_good
1190
+ dumped_predicate, step.id, flow.id, all_good
1186
1191
  )
1187
1192
 
1188
- pred, all_good = self._construct_predicate(
1189
- predicate, step.id, context, is_step=True, all_good=all_good
1193
+ predicate, all_good = self._construct_predicate(
1194
+ dumped_predicate,
1195
+ step.id,
1196
+ context,
1197
+ is_step=True,
1198
+ all_good=all_good,
1190
1199
  )
1191
- if pred and not pred.is_valid():
1200
+ if predicate and not predicate.is_valid():
1192
1201
  structlogger.error(
1193
1202
  "validator.verify_predicates.invalid_rejection",
1194
1203
  step=step.id,
1195
1204
  rejection=predicate,
1196
1205
  flow=flow.id,
1197
1206
  event_info=(
1198
- f"Detected invalid rejection '{predicate}' "
1207
+ f"Detected invalid rejection '{dumped_predicate}' "
1199
1208
  f"at `collect` step '{step.id}' "
1200
1209
  f"for flow id '{flow.id}'. "
1201
1210
  f"Please make sure that all conditions are valid."
@@ -1280,6 +1289,41 @@ class Validator:
1280
1289
 
1281
1290
  return all_good
1282
1291
 
1292
+ def validate_agent_flow_conflicts(self, sub_agents_path: str) -> bool:
1293
+ """Validates that agent names don't conflict with flow names.
1294
+
1295
+ Args:
1296
+ sub_agents_path: Path to the sub-agents directory.
1297
+
1298
+ Returns:
1299
+ True if validation passes, False otherwise.
1300
+ """
1301
+ if self.flows.is_empty():
1302
+ return True
1303
+
1304
+ try:
1305
+ configuration = Configuration.get_instance()
1306
+ available_agents = configuration.available_agents
1307
+ flow_names = {flow.id for flow in self.flows.underlying_flows}
1308
+
1309
+ structlogger.debug(
1310
+ "validator.agent_flow_conflicts.debug",
1311
+ event_info="Checking conflicts between agents and flows",
1312
+ )
1313
+
1314
+ validate_agent_names_not_conflicting_with_flows(
1315
+ available_agents.agents, flow_names
1316
+ )
1317
+ return True
1318
+ except Exception as e:
1319
+ structlogger.error(
1320
+ "validator.agent_flow_conflicts",
1321
+ sub_agents_path=sub_agents_path,
1322
+ error=str(e),
1323
+ event_info=f"Agent-flow name conflict validation failed: {e}",
1324
+ )
1325
+ return False
1326
+
1283
1327
  def _get_response_translation_warnings(self) -> list:
1284
1328
  """Collect warnings for responses missing translations.
1285
1329
 
@@ -1932,6 +1976,95 @@ class Validator:
1932
1976
 
1933
1977
  return all_good
1934
1978
 
1979
+ def verify_prompt_templates(self) -> bool:
1980
+ """Verify that all prompt templates have valid Jinja2 syntax.
1981
+
1982
+ Returns:
1983
+ True if all templates are valid, False otherwise.
1984
+ """
1985
+ all_good = True
1986
+
1987
+ # Check the components in the pipeline and policies for prompt templates
1988
+ pipeline = self.config.get(CONFIG_PIPELINE_KEY, [])
1989
+ for component in pipeline:
1990
+ if isinstance(component, dict):
1991
+ component_name = component.get("name", "")
1992
+ prompt_template = component.get("prompt_template")
1993
+ if prompt_template:
1994
+ all_good = (
1995
+ self._validate_template_file(
1996
+ prompt_template, component_name, "pipeline component"
1997
+ )
1998
+ and all_good
1999
+ )
2000
+
2001
+ # Check policies for prompt templates
2002
+ policies = self.config.get("policies") or []
2003
+ for policy in policies:
2004
+ if isinstance(policy, dict):
2005
+ policy_name = policy.get("name", "")
2006
+ prompt_template = policy.get("prompt_template")
2007
+ if prompt_template:
2008
+ all_good = (
2009
+ self._validate_template_file(
2010
+ prompt_template, policy_name, "policy"
2011
+ )
2012
+ and all_good
2013
+ )
2014
+
2015
+ return all_good
2016
+
2017
+ def _validate_template_file(
2018
+ self, prompt_template: str, component_name: str, component_type: str
2019
+ ) -> bool:
2020
+ """Validate a single prompt template file.
2021
+
2022
+ Args:
2023
+ prompt_template: The template file path to validate
2024
+ component_name: Name of the component using the template
2025
+ component_type: Type of component (e.g., "policy", "pipeline component")
2026
+
2027
+ Returns:
2028
+ True if template is valid, False otherwise.
2029
+ """
2030
+ try:
2031
+ # Use a simple default template, as we're assuming
2032
+ # that the default templates are valid
2033
+ default_template = "{{ content }}"
2034
+ template_content = rasa.shared.utils.llm.get_prompt_template(
2035
+ prompt_template,
2036
+ default_template,
2037
+ log_source_component=f"validator.{component_name}",
2038
+ log_source_method="init",
2039
+ )
2040
+
2041
+ # Validate Jinja2 syntax using the shared validation function
2042
+ rasa.shared.utils.llm.validate_jinja2_template(template_content)
2043
+ return True
2044
+ except jinja2.exceptions.TemplateSyntaxError as e:
2045
+ structlogger.error(
2046
+ "validator.verify_prompt_templates.syntax_error",
2047
+ component=component_name,
2048
+ component_type=component_type,
2049
+ event_info=(
2050
+ f"Invalid Jinja2 template syntax in file {prompt_template} "
2051
+ f"at line {e.lineno}: {e.message}"
2052
+ ),
2053
+ error=str(e),
2054
+ template_line=e.lineno,
2055
+ template_file=prompt_template,
2056
+ )
2057
+ return False
2058
+ except Exception as e:
2059
+ structlogger.error(
2060
+ "validator.verify_prompt_templates.error",
2061
+ component=component_name,
2062
+ component_type=component_type,
2063
+ event_info=f"Error validating prompt template: {e}",
2064
+ error=str(e),
2065
+ )
2066
+ return False
2067
+
1935
2068
  def validate_conditional_response_variation_predicates(self) -> bool:
1936
2069
  """Validate the conditional response variation predicates."""
1937
2070
  context = {SLOTS: {slot.name: None for slot in self.domain.slots}}
rasa/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  # this file will automatically be changed,
2
2
  # do not add anything but the version number here!
3
- __version__ = "3.13.11"
3
+ __version__ = "3.14.0"
@@ -0,0 +1,212 @@
1
+ Metadata-Version: 2.3
2
+ Name: rasa-pro
3
+ Version: 3.14.0
4
+ Summary: State-of-the-art open-core Conversational AI framework for Enterprises that natively leverages generative AI for effortless assistant development.
5
+ Keywords: nlp,machine-learning,machine-learning-library,bot,bots,botkit,rasa conversational-agents,conversational-ai,chatbot,chatbot-framework,bot-framework
6
+ Author: Rasa Technologies GmbH
7
+ Author-email: hi@rasa.com
8
+ Maintainer: Tom Bocklisch
9
+ Maintainer-email: tom@rasa.com
10
+ Requires-Python: >=3.10.0,<3.14
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Libraries
19
+ Provides-Extra: channels
20
+ Provides-Extra: full
21
+ Provides-Extra: gh-release-notes
22
+ Provides-Extra: jieba
23
+ Provides-Extra: metal
24
+ Provides-Extra: nlu
25
+ Provides-Extra: pii
26
+ Provides-Extra: spacy
27
+ Provides-Extra: transformers
28
+ Requires-Dist: CacheControl (>=0.14.2,<0.15.0)
29
+ Requires-Dist: PyJWT[crypto] (>=2.8.0,<3.0.0)
30
+ Requires-Dist: SQLAlchemy (>=2.0.42,<2.1.0)
31
+ Requires-Dist: a2a-sdk (>=0.3.4,<0.4.0)
32
+ Requires-Dist: absl-py (>=2.3.1,<2.4)
33
+ Requires-Dist: aio-pika (>=8.2.3,<9.4.4)
34
+ Requires-Dist: aiogram (>=3.22.0,<3.23.0) ; extra == "full" or extra == "channels"
35
+ Requires-Dist: aiohttp (>=3.10,<3.11)
36
+ Requires-Dist: aioshutil (>=1.5,<1.6)
37
+ Requires-Dist: apscheduler (>=3.11,<3.12)
38
+ Requires-Dist: attrs (>=23.1,<25.0)
39
+ Requires-Dist: audioop-lts (>=0.2.2,<0.3.0) ; python_version >= "3.13"
40
+ Requires-Dist: aws-msk-iam-sasl-signer-python (>=1.0.2,<1.1.0)
41
+ Requires-Dist: azure-identity (>=1.24.0,<1.25.0)
42
+ Requires-Dist: azure-storage-blob (>=12.26.0,<12.27.0)
43
+ Requires-Dist: boto3 (>=1.40.21,<1.41.0)
44
+ Requires-Dist: certifi (>=2025.10.5,<2025.11.0)
45
+ Requires-Dist: colorama (>=0.4.6,<0.5.0) ; sys_platform == "win32"
46
+ Requires-Dist: colorclass (>=2.2,<2.3)
47
+ Requires-Dist: coloredlogs (>=15,<16)
48
+ Requires-Dist: colorhash (>=2.0,<2.1.0)
49
+ Requires-Dist: confluent-kafka (>=2.11.0,<3.0.0)
50
+ Requires-Dist: cryptography (>=45.0.6,<45.1.0)
51
+ Requires-Dist: cvg-python-sdk (>=0.5.1,<0.6.0) ; extra == "full" or extra == "channels"
52
+ Requires-Dist: dask (>=2024.8.0,<2024.9.0)
53
+ Requires-Dist: demoji (>=1.1.0,<2.0.0)
54
+ Requires-Dist: diskcache (>=5.6.3,<5.7.0)
55
+ Requires-Dist: dnspython (==2.6.1)
56
+ Requires-Dist: faiss-cpu (>=1.11.0,<1.12.0)
57
+ Requires-Dist: fbmessenger (>=6.0.0,<6.1.0) ; extra == "full" or extra == "channels"
58
+ Requires-Dist: github3.py (>=3.2.0,<3.3.0) ; extra == "gh-release-notes"
59
+ Requires-Dist: gitpython (>=3.1.41,<3.2.0) ; extra == "full"
60
+ Requires-Dist: gliner (>=0.2.20,<0.3.0) ; extra == "full" or extra == "pii"
61
+ Requires-Dist: google-auth (>=2.40.3,<2.41.0)
62
+ Requires-Dist: google-cloud-storage (>=2.14.0,<2.15.0)
63
+ Requires-Dist: hvac (>=2.3.0,<2.4.0)
64
+ Requires-Dist: importlib-metadata (>=8.5.0,<8.6.0)
65
+ Requires-Dist: importlib-resources (>=6.5.2,<7.0.0)
66
+ Requires-Dist: jieba (>=0.42.1,<0.43) ; extra == "jieba" or extra == "full" or extra == "nlu"
67
+ Requires-Dist: jinja2 (>=3.1.6,<3.2.0)
68
+ Requires-Dist: jsonpatch (>=1.33,<2.0)
69
+ Requires-Dist: jsonpickle (>=3.3.0,<3.4)
70
+ Requires-Dist: jsonschema (>=4.22)
71
+ Requires-Dist: keras (>=3.11.0)
72
+ Requires-Dist: langchain (>=0.3.27,<0.4.0)
73
+ Requires-Dist: langchain-community (>=0.3.29,<0.4.0)
74
+ Requires-Dist: langcodes (>=3.5.0,<4.0.0)
75
+ Requires-Dist: litellm (>=1.69.0,<1.70.0)
76
+ Requires-Dist: matplotlib (>=3.9.4,<3.10.0)
77
+ Requires-Dist: mattermostwrapper (>=2.2,<2.3) ; extra == "full" or extra == "channels"
78
+ Requires-Dist: mcp (>=1.12.0,<1.13.0)
79
+ Requires-Dist: mitie (>=0.7.36,<0.8.0) ; extra == "full" or extra == "nlu"
80
+ Requires-Dist: networkx (>=3.1,<3.2)
81
+ Requires-Dist: numpy (>=2.1.3,<2.2.0)
82
+ Requires-Dist: onnxruntime (==1.22.1) ; extra == "full" or extra == "pii"
83
+ Requires-Dist: openai (>=1.68.2,<1.69.0)
84
+ Requires-Dist: openpyxl (>=3.1.5,<4.0.0)
85
+ Requires-Dist: opentelemetry-api (>=1.33.0,<1.34.0)
86
+ Requires-Dist: opentelemetry-exporter-otlp (>=1.33.0,<1.34.0)
87
+ Requires-Dist: opentelemetry-sdk (>=1.33.0,<1.34.0)
88
+ Requires-Dist: packaging (>=23.2,<23.3)
89
+ Requires-Dist: pep440-version-utils (>=1.2.0,<1.3.0)
90
+ Requires-Dist: pluggy (>=1.2.0,<2.0.0)
91
+ Requires-Dist: portalocker (>=2.7.0,<3.0.0)
92
+ Requires-Dist: prompt-toolkit (>=3.0.28,<3.0.29)
93
+ Requires-Dist: protobuf (>=5.29.5,<5.30.0)
94
+ Requires-Dist: psutil (>=5.9.5,<6.0.0)
95
+ Requires-Dist: psycopg2-binary (>=2.9.10,<2.10.0)
96
+ Requires-Dist: pydot (>=1.4,<1.5)
97
+ Requires-Dist: pykwalify (>=1.8,<1.9)
98
+ Requires-Dist: pymilvus (>=2.6.1,<3.0.0)
99
+ Requires-Dist: pymongo (>=4.10.1,<4.11.0)
100
+ Requires-Dist: pypred (>=0.4.0,<0.5.0)
101
+ Requires-Dist: python-dateutil (>=2.8.2,<2.9.0)
102
+ Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
103
+ Requires-Dist: python-engineio (>=4.12.2,<4.13.0)
104
+ Requires-Dist: python-keycloak (>=5.8.1,<5.9.0)
105
+ Requires-Dist: python-socketio (>=5.13,<6)
106
+ Requires-Dist: pytz (>=2022.7.1,<2023.0)
107
+ Requires-Dist: pyyaml (>=6.0.2,<6.1.0)
108
+ Requires-Dist: qdrant-client (>=1.9.1,<1.10.0)
109
+ Requires-Dist: questionary (>=2.1.1,<2.2.0)
110
+ Requires-Dist: randomname (>=0.2.1,<0.3.0)
111
+ Requires-Dist: rasa-sdk (==3.14.0)
112
+ Requires-Dist: redis (>=4.6.0,<6.0)
113
+ Requires-Dist: regex (>=2024.7.24,<2024.8.0)
114
+ Requires-Dist: requests (>=2.32.5,<2.33.0)
115
+ Requires-Dist: rich (>=14.1.0,<14.2.0)
116
+ Requires-Dist: rocketchat_API (>=1.32.0,<1.33.0) ; extra == "full" or extra == "channels"
117
+ Requires-Dist: ruamel.yaml (>=0.17.21,<0.17.22)
118
+ Requires-Dist: safetensors (>=0.4.5,<0.5.0)
119
+ Requires-Dist: sanic (>=22.12,<22.13)
120
+ Requires-Dist: sanic-cors (>=2.2.0,<2.3.0)
121
+ Requires-Dist: sanic-jwt (>=1.8.0,<2.0.0)
122
+ Requires-Dist: sanic-openapi (>=21.12.0,<22.0.0)
123
+ Requires-Dist: sanic-routing (>=22.8.0,<23.0.0)
124
+ Requires-Dist: scikit-learn (>=1.6.1,<1.7.0)
125
+ Requires-Dist: scipy (>=1.13.1,<1.14.0) ; python_version < "3.12"
126
+ Requires-Dist: scipy (>=1.14.0,<1.15.0) ; python_version >= "3.12"
127
+ Requires-Dist: sentencepiece (>=0.1.99,<0.2.0) ; (python_version < "3.12") and (extra == "transformers" or extra == "full" or extra == "full" or extra == "nlu")
128
+ Requires-Dist: sentry-sdk (>=2.8.0,<3)
129
+ Requires-Dist: setuptools (>=78.1.1,<78.2.0)
130
+ Requires-Dist: sklearn-crfsuite (>=0.5.0,<0.6.0) ; extra == "full" or extra == "nlu"
131
+ Requires-Dist: skops (>=0.13.0,<0.14.0) ; extra == "full" or extra == "nlu"
132
+ Requires-Dist: slack-sdk (>=3.36.0,<3.37.0) ; extra == "full" or extra == "channels"
133
+ Requires-Dist: spacy (>=3.5.4,<4.0.0) ; extra == "spacy" or extra == "full" or extra == "nlu"
134
+ Requires-Dist: structlog (>=25.4.0,<25.5.0)
135
+ Requires-Dist: structlog-sentry (>=2.0.3,<2.1.0)
136
+ Requires-Dist: tarsafe (>=0.0.5,<0.0.6)
137
+ Requires-Dist: tenacity (>=8.4.1,<8.5.0)
138
+ Requires-Dist: tensorflow (>=2.19.0,<3.0.0) ; (sys_platform != "darwin" or platform_machine != "arm64" and python_version < "3.12") and (extra == "full" or extra == "nlu")
139
+ Requires-Dist: tensorflow-hub (>=0.16.0,<0.17.0) ; (python_version < "3.12") and (extra == "full" or extra == "nlu")
140
+ Requires-Dist: tensorflow-io-gcs-filesystem (==0.31) ; (sys_platform == "win32" and python_version < "3.12") and (extra == "full" or extra == "nlu")
141
+ Requires-Dist: tensorflow-io-gcs-filesystem (==0.34) ; (sys_platform == "darwin" and platform_machine != "arm64" and python_version < "3.12") and (extra == "full" or extra == "nlu")
142
+ Requires-Dist: tensorflow-io-gcs-filesystem (==0.34) ; (sys_platform == "linux" and python_version < "3.12") and (extra == "full" or extra == "nlu")
143
+ Requires-Dist: tensorflow-metal (>=1.2.0,<2.0.0) ; (sys_platform == "darwin" and platform_machine == "arm64" and python_version < "3.12") and (extra == "full" or extra == "metal" or extra == "nlu")
144
+ Requires-Dist: tensorflow-text (>=2.19.0,<3.0.0) ; (sys_platform != "win32" and platform_machine != "arm64" and platform_machine != "aarch64" and python_version < "3.12") and (extra == "full" or extra == "nlu")
145
+ Requires-Dist: terminaltables (>=3.1.10,<3.2.0)
146
+ Requires-Dist: tf-keras (>=2.15.0,<3.0.0) ; (python_version < "3.12") and (extra == "full" or extra == "nlu")
147
+ Requires-Dist: tiktoken (>=0.9.0,<0.10.0)
148
+ Requires-Dist: tqdm (>=4.66.2,<5.0.0)
149
+ Requires-Dist: transformers (>=4.38.2,<4.39.0) ; extra == "transformers" or extra == "full" or extra == "nlu"
150
+ Requires-Dist: twilio (>=9.7.2,<9.8.0) ; extra == "full" or extra == "channels"
151
+ Requires-Dist: types-cachetools (>=6.2.0.20250827,<6.3.0.0)
152
+ Requires-Dist: types-protobuf (==4.25.0.20240417)
153
+ Requires-Dist: typing-extensions (>=4.7.1,<5.0.0)
154
+ Requires-Dist: typing-utils (>=0.1.0,<0.2.0)
155
+ Requires-Dist: ujson (>=5.8,<6.0)
156
+ Requires-Dist: webexteamssdk (>=1.6.1,<1.7.0) ; extra == "full" or extra == "channels"
157
+ Requires-Dist: websockets (>=10.4,<11.0)
158
+ Requires-Dist: werkzeug (>=3.1.3,<4.0.0)
159
+ Requires-Dist: wheel (>=0.40.0)
160
+ Project-URL: Documentation, https://rasa.com/docs
161
+ Project-URL: Homepage, https://rasa.com
162
+ Project-URL: Repository, https://github.com/rasahq/rasa
163
+ Description-Content-Type: text/markdown
164
+
165
+ <h1 align="center">Rasa</h1>
166
+
167
+ <div align="center">
168
+
169
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=RasaHQ_rasa&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=RasaHQ_rasa)
170
+ [![Documentation Status](https://img.shields.io/badge/docs-stable-brightgreen.svg)](https://rasa.com/docs/docs/pro/intro)
171
+ ![Python version support](https://img.shields.io/pypi/pyversions/rasa-pro)
172
+
173
+ </div>
174
+
175
+ <hr />
176
+
177
+ Rasa is a framework for building scalable, dynamic conversational AI assistants that integrate large language models (LLMs) to enable more contextually aware and agentic interactions. Whether you’re new to conversational AI or an experienced developer, Rasa offers enhanced flexibility, control, and performance for mission-critical applications.
178
+
179
+ **Key Features:**
180
+
181
+ - **Flows for Business Logic:** Easily define business logic through Flows, a simplified way to describe how your AI assistant should handle conversations. Flows help streamline the development process, focusing on key tasks and reducing the complexity involved in managing conversations.
182
+ - **Automatic Conversation Repair:** Ensure seamless interactions by automatically handling interruptions or unexpected inputs. Developers have full control to customize these repairs based on specific use cases.
183
+ - **Customizable and Open:** Fully customizable code that allows developers to modify Rasa to meet specific requirements, ensuring flexibility and adaptability to various conversational AI needs.
184
+ - **Robustness and Control:** Maintain strict adherence to business logic, preventing unwanted behaviors like prompt injection and hallucinations, leading to more reliable responses and secure interactions.
185
+ - **Built-in Security:** Safeguard sensitive data, control access, and ensure secure deployment, essential for production environments that demand high levels of security and compliance. Secrets are managed through Pulumi's built-in secrets management system and can be integrated with HashiCorp Vault for enterprise-grade secret management.
186
+
187
+ A [free developer license](https://rasa.com/docs/pro/intro/#who-rasa-pro-is-for) is available so you can explore and get to know Rasa. It allows you to take your assistant live in production a limited capacity. A paid license is required for larger-scale production use, but all code is visible and can be customized as needed.
188
+
189
+ To get started right now, you can
190
+
191
+ `pip install rasa-pro`
192
+
193
+ Check out our
194
+
195
+ - [Rasa Quickstart](https://rasa.com/docs/learn/quickstart/pro),
196
+ - [Conversational AI with Language Models (CALM) conceptual rundown](https://rasa.com/docs/learn/concepts/calm),
197
+ - [Rasa tutorial](https://rasa.com/docs/pro/tutorial), and
198
+ - [Changelog](https://rasa.com/docs/reference/changelogs/rasa-pro-changelog)
199
+
200
+ for more. Also feel free to reach out to us on the [Rasa forum](https://forum.rasa.com/).
201
+
202
+ ## Secrets Management
203
+
204
+ This project uses a multi-layered approach to secrets management:
205
+
206
+ - **Pulumi Secrets**: Primary secrets management through Pulumi's built-in configuration system (`pulumi.Config()`)
207
+ - **Kubernetes Secrets**: Application secrets are stored as Kubernetes secrets in the cluster
208
+ - **Vault Integration**: Optional HashiCorp Vault support for enterprise-grade secret management
209
+ - **AWS Secrets Manager**: Used selectively for specific services (e.g., database credentials in integration tests)
210
+
211
+ For infrastructure deployment, secrets are managed through Pulumi configuration files and environment variables, providing secure and flexible secret management across different deployment environments.
212
+