rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (586) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +213 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +889 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +228 -0
  26. rasa/agents/validation.py +538 -0
  27. rasa/api.py +23 -9
  28. rasa/builder/README.md +120 -0
  29. rasa/builder/__init__.py +0 -0
  30. rasa/builder/auth.py +176 -0
  31. rasa/builder/config.py +96 -0
  32. rasa/builder/copilot/__init__.py +0 -0
  33. rasa/builder/copilot/constants.py +38 -0
  34. rasa/builder/copilot/copilot.py +562 -0
  35. rasa/builder/copilot/copilot_response_handler.py +522 -0
  36. rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
  37. rasa/builder/copilot/exceptions.py +32 -0
  38. rasa/builder/copilot/models.py +690 -0
  39. rasa/builder/copilot/prompts/__init__.py +0 -0
  40. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
  41. rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
  42. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
  43. rasa/builder/copilot/signing.py +305 -0
  44. rasa/builder/copilot/telemetry.py +234 -0
  45. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  46. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  47. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
  48. rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
  49. rasa/builder/document_retrieval/__init__.py +0 -0
  50. rasa/builder/document_retrieval/constants.py +15 -0
  51. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  52. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  53. rasa/builder/document_retrieval/models.py +62 -0
  54. rasa/builder/download.py +140 -0
  55. rasa/builder/exceptions.py +91 -0
  56. rasa/builder/guardrails/__init__.py +1 -0
  57. rasa/builder/guardrails/clients.py +256 -0
  58. rasa/builder/guardrails/constants.py +12 -0
  59. rasa/builder/guardrails/exceptions.py +4 -0
  60. rasa/builder/guardrails/models.py +266 -0
  61. rasa/builder/guardrails/policy_checker.py +324 -0
  62. rasa/builder/guardrails/store.py +238 -0
  63. rasa/builder/guardrails/utils.py +94 -0
  64. rasa/builder/job_manager.py +87 -0
  65. rasa/builder/jobs.py +609 -0
  66. rasa/builder/llm_service.py +273 -0
  67. rasa/builder/logging_utils.py +265 -0
  68. rasa/builder/main.py +234 -0
  69. rasa/builder/models.py +229 -0
  70. rasa/builder/project_generator.py +463 -0
  71. rasa/builder/project_info.py +72 -0
  72. rasa/builder/service.py +1367 -0
  73. rasa/builder/shared/tracker_context.py +212 -0
  74. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  75. rasa/builder/template_cache.py +69 -0
  76. rasa/builder/training_service.py +188 -0
  77. rasa/builder/validation_service.py +101 -0
  78. rasa/cli/arguments/data.py +9 -0
  79. rasa/cli/arguments/default_arguments.py +12 -0
  80. rasa/cli/arguments/run.py +2 -0
  81. rasa/cli/arguments/train.py +2 -0
  82. rasa/cli/data.py +78 -10
  83. rasa/cli/dialogue_understanding_test.py +11 -7
  84. rasa/cli/e2e_test.py +10 -6
  85. rasa/cli/evaluate.py +4 -2
  86. rasa/cli/export.py +5 -2
  87. rasa/cli/inspect.py +9 -4
  88. rasa/cli/interactive.py +8 -4
  89. rasa/cli/llm_fine_tuning.py +12 -6
  90. rasa/cli/project_templates/basic/README.md +23 -0
  91. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  92. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  93. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  94. rasa/cli/project_templates/basic/config.yml +29 -0
  95. rasa/cli/project_templates/basic/credentials.yml +33 -0
  96. rasa/cli/project_templates/basic/data/data.md +8 -0
  97. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  98. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  99. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  100. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  101. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  102. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  103. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  104. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  105. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  106. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  107. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  108. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  109. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  110. rasa/cli/project_templates/basic/domain/domain.md +11 -0
  111. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  112. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  113. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  114. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  115. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  116. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  117. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  118. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  119. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  120. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  121. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  122. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  123. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  124. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
  125. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
  126. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
  127. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
  128. rasa/cli/project_templates/default/config.yml +4 -0
  129. rasa/cli/project_templates/default/endpoints.yml +4 -0
  130. rasa/cli/project_templates/defaults.py +1 -0
  131. rasa/cli/project_templates/finance/README.md +26 -0
  132. rasa/cli/project_templates/finance/actions/__init__.py +0 -0
  133. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  134. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  135. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  136. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  137. rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
  138. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  139. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  140. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  141. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  142. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  143. rasa/cli/project_templates/finance/actions/db.py +117 -0
  144. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  145. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  146. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  147. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  148. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  149. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  150. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  151. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  152. rasa/cli/project_templates/finance/config.yml +29 -0
  153. rasa/cli/project_templates/finance/credentials.yml +33 -0
  154. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
  155. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  156. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  157. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  158. rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
  159. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  160. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  161. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  162. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  163. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  164. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  165. rasa/cli/project_templates/finance/data/data.md +14 -0
  166. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  167. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  168. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  169. rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
  170. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  171. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  172. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  173. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  174. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  175. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  176. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  177. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  178. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  179. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  180. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
  181. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  182. rasa/cli/project_templates/finance/db/cards.json +18 -0
  183. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  184. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  185. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  186. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  187. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  188. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  189. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  190. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  191. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  192. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  193. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  194. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  195. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  196. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  197. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
  198. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  199. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  200. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  201. rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
  202. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  203. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  204. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  205. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  206. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  207. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  208. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  209. rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
  210. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  211. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
  212. rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
  213. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  214. rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
  215. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
  216. rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
  217. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  218. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  219. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  220. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
  221. rasa/cli/project_templates/finance/endpoints.yml +67 -0
  222. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  223. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
  224. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
  225. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
  226. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  227. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  228. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  229. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  230. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  231. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
  232. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
  233. rasa/cli/project_templates/telco/README.md +25 -0
  234. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  235. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  236. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  238. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  240. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  242. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  243. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  244. rasa/cli/project_templates/telco/config.yml +29 -0
  245. rasa/cli/project_templates/telco/credentials.yml +33 -0
  246. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  247. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  248. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  249. rasa/cli/project_templates/telco/data/data.md +11 -0
  250. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  251. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  252. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  253. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  254. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  255. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  256. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  257. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  258. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  259. rasa/cli/project_templates/telco/docs/docs.md +8 -0
  260. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  261. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  262. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  263. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  264. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  265. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  266. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  267. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  268. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  269. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  270. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  271. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  272. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  273. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  274. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
  275. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  276. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  277. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  278. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
  279. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
  280. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
  281. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  282. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  283. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  284. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  285. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  286. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
  287. rasa/cli/project_templates/tutorial/config.yml +2 -1
  288. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  289. rasa/cli/run.py +8 -10
  290. rasa/cli/scaffold.py +50 -6
  291. rasa/cli/shell.py +10 -5
  292. rasa/cli/studio/studio.py +1 -1
  293. rasa/cli/test.py +34 -14
  294. rasa/cli/train.py +44 -30
  295. rasa/cli/utils.py +1 -393
  296. rasa/cli/validation/__init__.py +0 -0
  297. rasa/cli/validation/bot_config.py +232 -0
  298. rasa/cli/validation/config_path_validation.py +257 -0
  299. rasa/cli/x.py +8 -4
  300. rasa/constants.py +7 -1
  301. rasa/core/actions/action.py +53 -13
  302. rasa/core/actions/action_exceptions.py +1 -1
  303. rasa/core/actions/action_run_slot_rejections.py +1 -1
  304. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  305. rasa/core/agent.py +22 -2
  306. rasa/core/available_agents.py +239 -0
  307. rasa/core/brokers/broker.py +1 -1
  308. rasa/core/brokers/kafka.py +56 -8
  309. rasa/core/channels/__init__.py +82 -35
  310. rasa/core/channels/channel.py +4 -3
  311. rasa/core/channels/constants.py +3 -0
  312. rasa/core/channels/development_inspector.py +29 -16
  313. rasa/core/channels/hangouts.py +2 -2
  314. rasa/core/channels/inspector/README.md +25 -13
  315. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  319. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  320. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  322. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  328. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  334. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  353. rasa/core/channels/inspector/dist/index.html +1 -1
  354. rasa/core/channels/inspector/package.json +18 -18
  355. rasa/core/channels/inspector/src/App.tsx +56 -12
  356. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  357. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  358. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  359. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  360. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
  361. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  362. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
  363. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  364. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  365. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  366. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  367. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  368. rasa/core/channels/inspector/src/types.ts +55 -1
  369. rasa/core/channels/inspector/yarn.lock +336 -189
  370. rasa/core/channels/socketio.py +212 -51
  371. rasa/core/channels/studio_chat.py +82 -32
  372. rasa/core/channels/telegram.py +4 -9
  373. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  374. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  375. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  376. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  377. rasa/core/channels/voice_stream/audiocodes.py +11 -6
  378. rasa/core/channels/voice_stream/browser_audio.py +91 -4
  379. rasa/core/channels/voice_stream/call_state.py +13 -2
  380. rasa/core/channels/voice_stream/genesys.py +19 -15
  381. rasa/core/channels/voice_stream/jambonz.py +22 -12
  382. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  383. rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
  384. rasa/core/channels/voice_stream/util.py +11 -1
  385. rasa/core/channels/voice_stream/voice_channel.py +170 -32
  386. rasa/core/concurrent_lock_store.py +83 -16
  387. rasa/core/config/__init__.py +0 -0
  388. rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
  389. rasa/core/config/configuration.py +295 -0
  390. rasa/core/config/credentials.py +19 -0
  391. rasa/core/config/message_procesing_config.py +34 -0
  392. rasa/core/constants.py +17 -0
  393. rasa/core/exceptions.py +1 -1
  394. rasa/core/featurizers/tracker_featurizers.py +3 -2
  395. rasa/core/iam_credentials_providers/__init__.py +0 -0
  396. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
  397. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
  398. rasa/core/lock_store.py +50 -10
  399. rasa/core/nlg/contextual_response_rephraser.py +5 -0
  400. rasa/core/nlg/generator.py +1 -1
  401. rasa/core/persistor.py +7 -7
  402. rasa/core/policies/enterprise_search_policy.py +9 -10
  403. rasa/core/policies/flow_policy.py +4 -4
  404. rasa/core/policies/flows/agent_executor.py +720 -0
  405. rasa/core/policies/flows/flow_exceptions.py +5 -2
  406. rasa/core/policies/flows/flow_executor.py +146 -77
  407. rasa/core/policies/flows/mcp_tool_executor.py +304 -0
  408. rasa/core/policies/intentless_policy.py +1 -1
  409. rasa/core/policies/rule_policy.py +1 -1
  410. rasa/core/policies/ted_policy.py +20 -12
  411. rasa/core/policies/unexpected_intent_policy.py +6 -0
  412. rasa/core/processor.py +100 -44
  413. rasa/core/redis_connection_factory.py +474 -0
  414. rasa/core/run.py +49 -10
  415. rasa/core/test.py +4 -0
  416. rasa/core/tracker_stores/redis_tracker_store.py +36 -14
  417. rasa/core/tracker_stores/sql_tracker_store.py +59 -1
  418. rasa/core/tracker_stores/tracker_store.py +3 -7
  419. rasa/core/train.py +1 -1
  420. rasa/core/training/interactive.py +20 -18
  421. rasa/core/training/story_conflict.py +5 -5
  422. rasa/core/utils.py +22 -23
  423. rasa/dialogue_understanding/commands/__init__.py +8 -0
  424. rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
  425. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  426. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  427. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  428. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  429. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  430. rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
  431. rasa/dialogue_understanding/commands/utils.py +135 -2
  432. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  433. rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
  434. rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
  435. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  436. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  437. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  438. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  439. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  440. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  441. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  442. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  443. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  444. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  445. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  446. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  447. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
  448. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  449. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  450. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  451. rasa/dialogue_understanding/stack/utils.py +57 -3
  452. rasa/dialogue_understanding/utils.py +24 -4
  453. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  454. rasa/e2e_test/e2e_test_runner.py +13 -3
  455. rasa/engine/caching.py +2 -2
  456. rasa/engine/constants.py +1 -1
  457. rasa/engine/graph.py +5 -1
  458. rasa/engine/loader.py +12 -0
  459. rasa/engine/recipes/default_components.py +138 -49
  460. rasa/engine/recipes/default_recipe.py +108 -11
  461. rasa/engine/runner/dask.py +8 -5
  462. rasa/engine/validation.py +25 -8
  463. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  464. rasa/hooks.py +5 -5
  465. rasa/llm_fine_tuning/utils.py +2 -2
  466. rasa/model_manager/model_api.py +4 -5
  467. rasa/model_manager/runner_service.py +2 -2
  468. rasa/model_manager/socket_bridge.py +21 -17
  469. rasa/model_manager/trainer_service.py +12 -9
  470. rasa/model_manager/utils.py +1 -29
  471. rasa/model_manager/warm_rasa_process.py +13 -3
  472. rasa/model_training.py +60 -47
  473. rasa/nlu/classifiers/diet_classifier.py +198 -98
  474. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  475. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  476. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  477. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  478. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  479. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  480. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  481. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  482. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  483. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  484. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  485. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  486. rasa/nlu/selectors/response_selector.py +10 -2
  487. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  488. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  489. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  490. rasa/nlu/utils/mitie_utils.py +3 -0
  491. rasa/nlu/utils/spacy_utils.py +3 -2
  492. rasa/plugin.py +8 -8
  493. rasa/privacy/privacy_config.py +1 -1
  494. rasa/privacy/privacy_manager.py +12 -3
  495. rasa/server.py +15 -3
  496. rasa/shared/agents/__init__.py +0 -0
  497. rasa/shared/agents/auth/__init__.py +0 -0
  498. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  499. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  500. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  501. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  502. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  503. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  504. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
  505. rasa/shared/agents/auth/constants.py +13 -0
  506. rasa/shared/agents/auth/types.py +12 -0
  507. rasa/shared/agents/auth/utils.py +85 -0
  508. rasa/shared/agents/utils.py +35 -0
  509. rasa/shared/constants.py +11 -0
  510. rasa/shared/core/constants.py +17 -1
  511. rasa/shared/core/domain.py +62 -22
  512. rasa/shared/core/events.py +329 -0
  513. rasa/shared/core/flows/constants.py +5 -0
  514. rasa/shared/core/flows/flow.py +1 -1
  515. rasa/shared/core/flows/flow_step.py +7 -1
  516. rasa/shared/core/flows/flows_list.py +21 -5
  517. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  518. rasa/shared/core/flows/steps/call.py +57 -6
  519. rasa/shared/core/flows/steps/collect.py +98 -13
  520. rasa/shared/core/flows/validation.py +372 -8
  521. rasa/shared/core/flows/yaml_flows_io.py +19 -10
  522. rasa/shared/core/slots.py +6 -2
  523. rasa/shared/core/trackers.py +5 -2
  524. rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
  525. rasa/shared/exceptions.py +39 -2
  526. rasa/shared/importers/importer.py +6 -0
  527. rasa/shared/importers/rasa.py +1 -1
  528. rasa/shared/importers/utils.py +86 -4
  529. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  530. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  531. rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
  532. rasa/shared/providers/llm/llm_client.py +7 -3
  533. rasa/shared/providers/llm/llm_response.py +66 -0
  534. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  535. rasa/shared/utils/common.py +26 -1
  536. rasa/shared/utils/health_check/health_check.py +7 -3
  537. rasa/shared/utils/llm.py +92 -19
  538. rasa/shared/utils/mcp/__init__.py +0 -0
  539. rasa/shared/utils/mcp/server_connection.py +250 -0
  540. rasa/shared/utils/mcp/utils.py +20 -0
  541. rasa/shared/utils/schemas/events.py +42 -0
  542. rasa/shared/utils/yaml.py +3 -1
  543. rasa/studio/download.py +3 -0
  544. rasa/studio/prompts.py +1 -0
  545. rasa/studio/pull/pull.py +3 -2
  546. rasa/studio/train.py +8 -7
  547. rasa/studio/upload.py +19 -52
  548. rasa/telemetry.py +166 -28
  549. rasa/tracing/config.py +45 -12
  550. rasa/tracing/constants.py +14 -0
  551. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  552. rasa/tracing/instrumentation/instrumentation.py +626 -21
  553. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  554. rasa/tracing/instrumentation/metrics.py +32 -0
  555. rasa/tracing/metric_instrument_provider.py +68 -0
  556. rasa/utils/common.py +92 -1
  557. rasa/utils/endpoints.py +11 -2
  558. rasa/utils/io.py +27 -9
  559. rasa/utils/json_utils.py +6 -1
  560. rasa/utils/log_utils.py +121 -7
  561. rasa/utils/ml_utils.py +1 -1
  562. rasa/utils/openapi.py +144 -0
  563. rasa/utils/plotting.py +1 -1
  564. rasa/utils/pypred.py +45 -0
  565. rasa/utils/tensorflow/__init__.py +7 -0
  566. rasa/utils/tensorflow/callback.py +136 -101
  567. rasa/utils/tensorflow/crf.py +1 -1
  568. rasa/utils/tensorflow/data_generator.py +21 -8
  569. rasa/utils/tensorflow/layers.py +21 -11
  570. rasa/utils/tensorflow/metrics.py +7 -3
  571. rasa/utils/tensorflow/models.py +56 -8
  572. rasa/utils/tensorflow/rasa_layers.py +8 -6
  573. rasa/utils/tensorflow/transformer.py +2 -3
  574. rasa/utils/train_utils.py +54 -24
  575. rasa/validator.py +149 -16
  576. rasa/version.py +1 -1
  577. rasa_pro-3.14.0.dist-info/METADATA +212 -0
  578. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
  579. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  580. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  581. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  582. rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
  583. rasa_pro-3.13.12.dist-info/METADATA +0 -192
  584. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
  585. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
  586. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
@@ -8,7 +8,6 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
8
8
  import numpy as np
9
9
  import tensorflow as tf
10
10
  from keras import Model
11
- from keras.src.utils import tf_utils
12
11
 
13
12
  import rasa.utils.train_utils
14
13
  from rasa.shared.constants import DIAGNOSTIC_DATA
@@ -78,6 +77,7 @@ class RasaModel(Model):
78
77
 
79
78
  Args:
80
79
  random_seed: set the random seed to get reproducible results
80
+ **kwargs: Additional keyword arguments passed to the parent class
81
81
  """
82
82
  # make sure that keras releases resources from previously trained model
83
83
  tf.keras.backend.clear_session()
@@ -273,7 +273,8 @@ class RasaModel(Model):
273
273
  if self._run_eagerly:
274
274
  # Once we take advantage of TF's distributed training, this is where
275
275
  # scheduled functions will be forced to execute and return actual values.
276
- outputs = tf_utils.sync_to_numpy_or_python_type(self.predict_step(batch_in))
276
+ step_output = self.predict_step(batch_in)
277
+ outputs = self._convert_tensors_to_numpy(step_output)
277
278
  if DIAGNOSTIC_DATA in outputs:
278
279
  outputs[DIAGNOSTIC_DATA] = self._empty_lists_to_none_in_dict(
279
280
  outputs[DIAGNOSTIC_DATA]
@@ -287,9 +288,8 @@ class RasaModel(Model):
287
288
 
288
289
  # Once we take advantage of TF's distributed training, this is where
289
290
  # scheduled functions will be forced to execute and return actual values.
290
- outputs = tf_utils.sync_to_numpy_or_python_type(
291
- self._tf_predict_step(list(batch_in))
292
- )
291
+ step_output = self._tf_predict_step(list(batch_in))
292
+ outputs = self._convert_tensors_to_numpy(step_output)
293
293
  if DIAGNOSTIC_DATA in outputs:
294
294
  outputs[DIAGNOSTIC_DATA] = self._empty_lists_to_none_in_dict(
295
295
  outputs[DIAGNOSTIC_DATA]
@@ -388,6 +388,35 @@ class RasaModel(Model):
388
388
 
389
389
  return {k: _recurse(v) for k, v in input_dict.items()}
390
390
 
391
+ def _convert_tensors_to_numpy(
392
+ self, step_output: Dict[Text, Any]
393
+ ) -> Dict[Text, Any]:
394
+ """ "Recursively convert TensorFlow tensors to numpy arrays for Keras 3.x
395
+ compatibility.
396
+ Replaces the deprecated tf_utils.sync_to_numpy_or_python_type() function.
397
+ Converts tensors (objects with 'numpy' method) to numpy arrays,
398
+ leaves others unchanged.
399
+ """
400
+
401
+ def to_numpy(obj: Any) -> Any:
402
+ if hasattr(obj, "numpy"):
403
+ try:
404
+ return obj.numpy()
405
+ except Exception:
406
+ # Fallback: return as-is if not convertible
407
+ return obj
408
+ # Dict: recurse into values
409
+ if isinstance(obj, dict):
410
+ return {k: to_numpy(v) for k, v in obj.items()}
411
+ # List/Tuple: recurse preserving type
412
+ if isinstance(obj, list):
413
+ return [to_numpy(v) for v in obj]
414
+ if isinstance(obj, tuple):
415
+ return tuple(to_numpy(v) for v in obj)
416
+ return obj
417
+
418
+ return {key: to_numpy(value) for key, value in step_output.items()}
419
+
391
420
  def _get_metric_results(self, prefix: Optional[Text] = "") -> Dict[Text, float]:
392
421
  return {
393
422
  f"{prefix}{metric.name}": metric.result()
@@ -403,7 +432,21 @@ class RasaModel(Model):
403
432
  overwrite: If 'True' an already existing model with the same file name will
404
433
  be overwritten.
405
434
  """
406
- self.save_weights(model_file_name, overwrite=overwrite, save_format="tf")
435
+ # Ensure filename ends with .weights.h5 and model is built for Keras 3.x
436
+ # compatibility
437
+ model_file_name = str(model_file_name)
438
+ if not model_file_name.endswith(".weights.h5"):
439
+ model_file_name += ".weights.h5"
440
+
441
+ if not self.built:
442
+ import tensorflow as tf
443
+
444
+ _ = self(tf.zeros((1, 1)))
445
+
446
+ # TensorFlow 2.19: save weights with different file extension
447
+ if not model_file_name.endswith(".weights.h5"):
448
+ model_file_name += ".weights.h5"
449
+ self.save_weights(model_file_name, overwrite=overwrite)
407
450
 
408
451
  @classmethod
409
452
  def load(
@@ -438,18 +481,23 @@ class RasaModel(Model):
438
481
  learning_rate = kwargs.get("config", {}).get(LEARNING_RATE, 0.001)
439
482
  run_eagerly = kwargs.get("config", {}).get(RUN_EAGERLY)
440
483
 
441
- # need to train on 1 example to build weights of the correct size
442
484
  model.compile(
443
485
  optimizer=tf.keras.optimizers.Adam(learning_rate), run_eagerly=run_eagerly
444
486
  )
445
487
  data_generator = RasaBatchDataGenerator(model_data_example, batch_size=1)
446
488
  model.fit(data_generator, verbose=False)
489
+
490
+ # Ensure model is built before loading weights
491
+ if not model.built:
492
+ sample_batch = next(iter(data_generator))
493
+ _ = model(sample_batch)
494
+
447
495
  # load trained weights
448
496
  model.load_weights(model_file_name)
449
497
 
450
498
  # predict on one data example to speed up prediction during inference
451
499
  # the first prediction always takes a bit longer to trace tf function
452
- if not finetune_mode and predict_data_example:
500
+ if predict_data_example:
453
501
  model.run_inference(predict_data_example)
454
502
 
455
503
  logger.debug("Finished loading the model.")
@@ -291,7 +291,7 @@ class ConcatenateSparseDenseFeatures(RasaCustomLayer):
291
291
  [
292
292
  config[DENSE_DIMENSION][attribute]
293
293
  if signature.is_sparse
294
- else signature.units
294
+ else (signature.units or 0)
295
295
  for signature in feature_type_signature
296
296
  ]
297
297
  )
@@ -301,12 +301,12 @@ class ConcatenateSparseDenseFeatures(RasaCustomLayer):
301
301
  ) -> tf.Tensor:
302
302
  """Turns sparse tensor into dense, possibly adds dropout before and/or after."""
303
303
  if self.SPARSE_DROPOUT in self._tf_layers:
304
- feature = self._tf_layers[self.SPARSE_DROPOUT](feature, training)
304
+ feature = self._tf_layers[self.SPARSE_DROPOUT](feature, training=training)
305
305
 
306
306
  feature = self._tf_layers[self.SPARSE_TO_DENSE](feature)
307
307
 
308
308
  if self.DENSE_DROPOUT in self._tf_layers:
309
- feature = self._tf_layers[self.DENSE_DROPOUT](feature, training)
309
+ feature = self._tf_layers[self.DENSE_DROPOUT](feature, training=training)
310
310
 
311
311
  return feature
312
312
 
@@ -944,7 +944,7 @@ class RasaSequenceLayer(RasaCustomLayer):
944
944
  # Note that only sequence-level features are masked, nothing happens to the
945
945
  # sentence-level features in the combined features tensor.
946
946
  seq_sent_features, mlm_boolean_mask = self._tf_layers[self.MLM_INPUT_MASK](
947
- seq_sent_features, mask_sequence, training
947
+ seq_sent_features, mask_sequence, training=training
948
948
  )
949
949
 
950
950
  return seq_sent_features, token_ids, mlm_boolean_mask
@@ -1002,7 +1002,9 @@ class RasaSequenceLayer(RasaCustomLayer):
1002
1002
  ]((sequence_features, sentence_features, sequence_feature_lengths))
1003
1003
 
1004
1004
  # Apply one or more dense layers.
1005
- seq_sent_features = self._tf_layers[self.FFNN](seq_sent_features, training)
1005
+ seq_sent_features = self._tf_layers[self.FFNN](
1006
+ seq_sent_features, training=training
1007
+ )
1006
1008
 
1007
1009
  # If using masked language modeling, mask the transformer inputs and get labels
1008
1010
  # for the masked tokens and a boolean mask. Note that TED does not use MLM loss,
@@ -1031,7 +1033,7 @@ class RasaSequenceLayer(RasaCustomLayer):
1031
1033
  if self._has_transformer:
1032
1034
  mask_padding = 1 - mask_combined_sequence_sentence
1033
1035
  outputs, attention_weights = self._tf_layers[self.TRANSFORMER](
1034
- seq_sent_features_masked, mask_padding, training
1036
+ seq_sent_features_masked, mask_padding, training=training
1035
1037
  )
1036
1038
  outputs = tf.nn.gelu(outputs)
1037
1039
  else:
@@ -2,10 +2,8 @@ from typing import Optional, Text, Tuple, Union
2
2
 
3
3
  import numpy as np
4
4
  import tensorflow as tf
5
-
6
- # TODO: The following is not (yet) available via tf.keras
7
- from keras.src.utils.control_flow_util import smart_cond
8
5
  from tensorflow.keras import backend as K
6
+ from tensorflow.python.keras.utils.control_flow_util import smart_cond
9
7
 
10
8
  from rasa.utils.tensorflow.exceptions import TFLayerConfigException
11
9
  from rasa.utils.tensorflow.layers import RandomlyConnectedDense
@@ -280,6 +278,7 @@ class MultiHeadAttention(tf.keras.layers.Layer):
280
278
  value: A tensor with shape (..., length, depth).
281
279
  pad_mask: Float tensor with shape broadcastable
282
280
  to (..., length, length). Defaults to None.
281
+ training: A tensor
283
282
 
284
283
  Returns:
285
284
  output: A tensor with shape (..., length, depth).
rasa/utils/train_utils.py CHANGED
@@ -11,29 +11,57 @@ from rasa.nlu.constants import NUMBER_OF_SUB_TOKENS
11
11
  from rasa.shared.constants import NEXT_MAJOR_VERSION_FOR_DEPRECATIONS
12
12
  from rasa.shared.exceptions import InvalidConfigException
13
13
  from rasa.shared.nlu.constants import SPLIT_ENTITIES_BY_COMMA
14
- from rasa.utils.tensorflow.callback import RasaModelCheckpoint, RasaTrainingLogger
15
- from rasa.utils.tensorflow.constants import (
16
- AUTO,
17
- CHECKPOINT_MODEL,
18
- CONSTRAIN_SIMILARITIES,
19
- COSINE,
20
- CROSS_ENTROPY,
21
- EPOCHS,
22
- EVAL_NUM_EPOCHS,
23
- EVAL_NUM_EXAMPLES,
24
- INNER,
25
- LOSS_TYPE,
26
- MARGIN,
27
- MODEL_CONFIDENCE,
28
- RANKING_LENGTH,
29
- RENORMALIZE_CONFIDENCES,
30
- SEQUENCE,
31
- SIMILARITY_TYPE,
32
- SOFTMAX,
33
- TOLERANCE,
34
- )
35
- from rasa.utils.tensorflow.data_generator import RasaBatchDataGenerator
36
- from rasa.utils.tensorflow.model_data import RasaModelData
14
+ from rasa.utils.tensorflow import TENSORFLOW_AVAILABLE
15
+
16
+ # Conditional imports for TensorFlow-dependent modules
17
+ if TENSORFLOW_AVAILABLE:
18
+ from rasa.utils.tensorflow.callback import RasaModelCheckpoint, RasaTrainingLogger
19
+ from rasa.utils.tensorflow.constants import (
20
+ AUTO,
21
+ CHECKPOINT_MODEL,
22
+ CONSTRAIN_SIMILARITIES,
23
+ COSINE,
24
+ CROSS_ENTROPY,
25
+ EPOCHS,
26
+ EVAL_NUM_EPOCHS,
27
+ EVAL_NUM_EXAMPLES,
28
+ INNER,
29
+ LOSS_TYPE,
30
+ MARGIN,
31
+ MODEL_CONFIDENCE,
32
+ RANKING_LENGTH,
33
+ RENORMALIZE_CONFIDENCES,
34
+ SEQUENCE,
35
+ SIMILARITY_TYPE,
36
+ SOFTMAX,
37
+ TOLERANCE,
38
+ )
39
+ from rasa.utils.tensorflow.data_generator import RasaBatchDataGenerator
40
+ from rasa.utils.tensorflow.model_data import RasaModelData
41
+ else:
42
+ # Placeholder values when TensorFlow is not available
43
+ RasaModelCheckpoint = None # type: ignore
44
+ RasaTrainingLogger = None # type: ignore
45
+ RasaBatchDataGenerator = None # type: ignore
46
+ RasaModelData = None # type: ignore
47
+ AUTO = "auto"
48
+ CHECKPOINT_MODEL = "checkpoint_model"
49
+ CONSTRAIN_SIMILARITIES = "constrain_similarities"
50
+ COSINE = "cosine"
51
+ CROSS_ENTROPY = "cross_entropy"
52
+ EPOCHS = "epochs"
53
+ EVAL_NUM_EPOCHS = "eval_num_epochs"
54
+ EVAL_NUM_EXAMPLES = "eval_num_examples"
55
+ INNER = "inner"
56
+ LOSS_TYPE = "loss_type"
57
+ MARGIN = "margin"
58
+ MODEL_CONFIDENCE = "model_confidence"
59
+ RANKING_LENGTH = "ranking_length"
60
+ RENORMALIZE_CONFIDENCES = "renormalize_confidences"
61
+ SEQUENCE = "sequence"
62
+ SIMILARITY_TYPE = "similarity_type"
63
+ SOFTMAX = "softmax"
64
+ TOLERANCE = "tolerance"
37
65
 
38
66
  if TYPE_CHECKING:
39
67
  from tensorflow.keras.callbacks import Callback
@@ -87,7 +115,9 @@ def rank_and_mask(
87
115
 
88
116
 
89
117
  def update_similarity_type(config: Dict[Text, Any]) -> Dict[Text, Any]:
90
- """If SIMILARITY_TYPE is set to 'auto', update the SIMILARITY_TYPE depending
118
+ """Function to update the similarity type in the model configuration.
119
+
120
+ If SIMILARITY_TYPE is set to 'auto', update the SIMILARITY_TYPE depending
91
121
  on the LOSS_TYPE.
92
122
 
93
123
  Args:
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.12"
3
+ __version__ = "3.14.0"