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

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

Potentially problematic release.


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

Files changed (588) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +213 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +889 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +228 -0
  26. rasa/agents/validation.py +538 -0
  27. rasa/api.py +23 -9
  28. rasa/builder/README.md +120 -0
  29. rasa/builder/__init__.py +0 -0
  30. rasa/builder/auth.py +176 -0
  31. rasa/builder/config.py +96 -0
  32. rasa/builder/copilot/__init__.py +0 -0
  33. rasa/builder/copilot/constants.py +38 -0
  34. rasa/builder/copilot/copilot.py +562 -0
  35. rasa/builder/copilot/copilot_response_handler.py +522 -0
  36. rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
  37. rasa/builder/copilot/exceptions.py +32 -0
  38. rasa/builder/copilot/models.py +690 -0
  39. rasa/builder/copilot/prompts/__init__.py +0 -0
  40. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
  41. rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
  42. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
  43. rasa/builder/copilot/signing.py +305 -0
  44. rasa/builder/copilot/telemetry.py +234 -0
  45. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  46. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  47. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
  48. rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
  49. rasa/builder/document_retrieval/__init__.py +0 -0
  50. rasa/builder/document_retrieval/constants.py +15 -0
  51. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  52. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  53. rasa/builder/document_retrieval/models.py +62 -0
  54. rasa/builder/download.py +140 -0
  55. rasa/builder/exceptions.py +91 -0
  56. rasa/builder/guardrails/__init__.py +1 -0
  57. rasa/builder/guardrails/clients.py +256 -0
  58. rasa/builder/guardrails/constants.py +12 -0
  59. rasa/builder/guardrails/exceptions.py +4 -0
  60. rasa/builder/guardrails/models.py +266 -0
  61. rasa/builder/guardrails/policy_checker.py +324 -0
  62. rasa/builder/guardrails/store.py +238 -0
  63. rasa/builder/guardrails/utils.py +94 -0
  64. rasa/builder/job_manager.py +87 -0
  65. rasa/builder/jobs.py +609 -0
  66. rasa/builder/llm_service.py +273 -0
  67. rasa/builder/logging_utils.py +265 -0
  68. rasa/builder/main.py +234 -0
  69. rasa/builder/models.py +229 -0
  70. rasa/builder/project_generator.py +463 -0
  71. rasa/builder/project_info.py +72 -0
  72. rasa/builder/service.py +1367 -0
  73. rasa/builder/shared/tracker_context.py +212 -0
  74. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  75. rasa/builder/template_cache.py +69 -0
  76. rasa/builder/training_service.py +188 -0
  77. rasa/builder/validation_service.py +101 -0
  78. rasa/cli/arguments/data.py +9 -0
  79. rasa/cli/arguments/default_arguments.py +12 -0
  80. rasa/cli/arguments/run.py +2 -0
  81. rasa/cli/arguments/train.py +2 -0
  82. rasa/cli/data.py +78 -10
  83. rasa/cli/dialogue_understanding_test.py +11 -7
  84. rasa/cli/e2e_test.py +10 -6
  85. rasa/cli/evaluate.py +4 -2
  86. rasa/cli/export.py +5 -2
  87. rasa/cli/inspect.py +9 -4
  88. rasa/cli/interactive.py +8 -4
  89. rasa/cli/llm_fine_tuning.py +12 -6
  90. rasa/cli/project_templates/basic/README.md +23 -0
  91. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  92. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  93. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  94. rasa/cli/project_templates/basic/config.yml +29 -0
  95. rasa/cli/project_templates/basic/credentials.yml +33 -0
  96. rasa/cli/project_templates/basic/data/data.md +8 -0
  97. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  98. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  99. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  100. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  101. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  102. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  103. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  104. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  105. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  106. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  107. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  108. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  109. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  110. rasa/cli/project_templates/basic/domain/domain.md +11 -0
  111. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  112. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  113. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  114. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  115. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  116. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  117. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  118. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  119. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  120. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  121. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  122. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  123. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  124. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
  125. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
  126. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
  127. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
  128. rasa/cli/project_templates/default/config.yml +4 -0
  129. rasa/cli/project_templates/default/endpoints.yml +4 -0
  130. rasa/cli/project_templates/defaults.py +1 -0
  131. rasa/cli/project_templates/finance/README.md +26 -0
  132. rasa/cli/project_templates/finance/actions/__init__.py +0 -0
  133. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  134. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  135. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  136. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  137. rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
  138. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  139. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  140. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  141. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  142. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  143. rasa/cli/project_templates/finance/actions/db.py +117 -0
  144. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  145. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  146. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  147. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  148. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  149. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  150. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  151. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  152. rasa/cli/project_templates/finance/config.yml +29 -0
  153. rasa/cli/project_templates/finance/credentials.yml +33 -0
  154. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
  155. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  156. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  157. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  158. rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
  159. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  160. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  161. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  162. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  163. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  164. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  165. rasa/cli/project_templates/finance/data/data.md +14 -0
  166. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  167. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  168. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  169. rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
  170. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  171. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  172. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  173. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  174. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  175. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  176. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  177. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  178. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  179. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  180. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
  181. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  182. rasa/cli/project_templates/finance/db/cards.json +18 -0
  183. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  184. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  185. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  186. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  187. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  188. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  189. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  190. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  191. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  192. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  193. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  194. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  195. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  196. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  197. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
  198. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  199. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  200. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  201. rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
  202. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  203. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  204. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  205. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  206. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  207. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  208. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  209. rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
  210. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  211. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
  212. rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
  213. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  214. rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
  215. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
  216. rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
  217. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  218. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  219. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  220. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
  221. rasa/cli/project_templates/finance/endpoints.yml +67 -0
  222. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  223. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
  224. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
  225. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
  226. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  227. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  228. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  229. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  230. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  231. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
  232. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
  233. rasa/cli/project_templates/telco/README.md +25 -0
  234. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  235. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  236. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  238. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  240. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  242. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  243. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  244. rasa/cli/project_templates/telco/config.yml +29 -0
  245. rasa/cli/project_templates/telco/credentials.yml +33 -0
  246. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  247. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  248. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  249. rasa/cli/project_templates/telco/data/data.md +11 -0
  250. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  251. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  252. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  253. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  254. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  255. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  256. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  257. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  258. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  259. rasa/cli/project_templates/telco/docs/docs.md +8 -0
  260. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  261. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  262. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  263. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  264. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  265. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  266. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  267. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  268. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  269. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  270. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  271. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  272. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  273. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  274. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
  275. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  276. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  277. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  278. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
  279. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
  280. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
  281. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  282. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  283. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  284. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  285. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  286. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
  287. rasa/cli/project_templates/tutorial/config.yml +2 -1
  288. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  289. rasa/cli/run.py +8 -10
  290. rasa/cli/scaffold.py +50 -6
  291. rasa/cli/shell.py +10 -5
  292. rasa/cli/studio/studio.py +1 -1
  293. rasa/cli/test.py +34 -14
  294. rasa/cli/train.py +44 -30
  295. rasa/cli/utils.py +1 -393
  296. rasa/cli/validation/__init__.py +0 -0
  297. rasa/cli/validation/bot_config.py +232 -0
  298. rasa/cli/validation/config_path_validation.py +257 -0
  299. rasa/cli/x.py +8 -4
  300. rasa/constants.py +7 -1
  301. rasa/core/actions/action.py +53 -13
  302. rasa/core/actions/action_exceptions.py +1 -1
  303. rasa/core/actions/action_run_slot_rejections.py +1 -1
  304. rasa/core/actions/direct_custom_actions_executor.py +9 -2
  305. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  306. rasa/core/agent.py +22 -2
  307. rasa/core/available_agents.py +239 -0
  308. rasa/core/brokers/broker.py +1 -1
  309. rasa/core/brokers/kafka.py +56 -8
  310. rasa/core/channels/__init__.py +82 -35
  311. rasa/core/channels/channel.py +4 -3
  312. rasa/core/channels/constants.py +3 -0
  313. rasa/core/channels/development_inspector.py +29 -16
  314. rasa/core/channels/hangouts.py +2 -2
  315. rasa/core/channels/inspector/README.md +25 -13
  316. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  320. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  323. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  329. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  335. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  353. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  354. rasa/core/channels/inspector/dist/index.html +1 -1
  355. rasa/core/channels/inspector/package.json +18 -18
  356. rasa/core/channels/inspector/src/App.tsx +56 -12
  357. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  358. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  359. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  360. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  361. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
  362. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  363. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
  364. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  365. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  366. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  367. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  368. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  369. rasa/core/channels/inspector/src/types.ts +55 -1
  370. rasa/core/channels/inspector/yarn.lock +336 -189
  371. rasa/core/channels/socketio.py +212 -51
  372. rasa/core/channels/studio_chat.py +82 -32
  373. rasa/core/channels/telegram.py +4 -9
  374. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  375. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  376. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  377. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  378. rasa/core/channels/voice_stream/audiocodes.py +11 -6
  379. rasa/core/channels/voice_stream/browser_audio.py +91 -4
  380. rasa/core/channels/voice_stream/call_state.py +13 -2
  381. rasa/core/channels/voice_stream/genesys.py +19 -15
  382. rasa/core/channels/voice_stream/jambonz.py +22 -12
  383. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  384. rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
  385. rasa/core/channels/voice_stream/util.py +11 -1
  386. rasa/core/channels/voice_stream/voice_channel.py +170 -32
  387. rasa/core/concurrent_lock_store.py +83 -16
  388. rasa/core/config/__init__.py +0 -0
  389. rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
  390. rasa/core/config/configuration.py +295 -0
  391. rasa/core/config/credentials.py +19 -0
  392. rasa/core/config/message_procesing_config.py +34 -0
  393. rasa/core/constants.py +17 -0
  394. rasa/core/exceptions.py +1 -1
  395. rasa/core/featurizers/tracker_featurizers.py +3 -2
  396. rasa/core/iam_credentials_providers/__init__.py +0 -0
  397. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
  398. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
  399. rasa/core/lock_store.py +50 -10
  400. rasa/core/nlg/contextual_response_rephraser.py +5 -0
  401. rasa/core/nlg/generator.py +1 -1
  402. rasa/core/persistor.py +7 -7
  403. rasa/core/policies/enterprise_search_policy.py +9 -10
  404. rasa/core/policies/flow_policy.py +4 -4
  405. rasa/core/policies/flows/agent_executor.py +720 -0
  406. rasa/core/policies/flows/flow_exceptions.py +5 -2
  407. rasa/core/policies/flows/flow_executor.py +146 -77
  408. rasa/core/policies/flows/mcp_tool_executor.py +304 -0
  409. rasa/core/policies/intentless_policy.py +1 -1
  410. rasa/core/policies/rule_policy.py +1 -1
  411. rasa/core/policies/ted_policy.py +20 -12
  412. rasa/core/policies/unexpected_intent_policy.py +6 -0
  413. rasa/core/processor.py +100 -44
  414. rasa/core/redis_connection_factory.py +474 -0
  415. rasa/core/run.py +49 -10
  416. rasa/core/test.py +4 -0
  417. rasa/core/tracker_stores/redis_tracker_store.py +36 -14
  418. rasa/core/tracker_stores/sql_tracker_store.py +59 -1
  419. rasa/core/tracker_stores/tracker_store.py +3 -7
  420. rasa/core/train.py +1 -1
  421. rasa/core/training/interactive.py +20 -18
  422. rasa/core/training/story_conflict.py +5 -5
  423. rasa/core/utils.py +22 -23
  424. rasa/dialogue_understanding/commands/__init__.py +8 -0
  425. rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
  426. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  427. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  428. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  429. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  430. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  431. rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
  432. rasa/dialogue_understanding/commands/utils.py +135 -2
  433. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  434. rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
  435. rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
  436. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  437. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  438. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  439. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  440. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  441. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  442. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  443. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  444. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  445. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  446. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  447. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  448. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
  449. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  450. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  451. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  452. rasa/dialogue_understanding/stack/utils.py +57 -3
  453. rasa/dialogue_understanding/utils.py +24 -4
  454. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  455. rasa/e2e_test/e2e_test_runner.py +13 -3
  456. rasa/engine/caching.py +2 -2
  457. rasa/engine/constants.py +1 -1
  458. rasa/engine/graph.py +5 -1
  459. rasa/engine/loader.py +12 -0
  460. rasa/engine/recipes/default_components.py +138 -49
  461. rasa/engine/recipes/default_recipe.py +108 -11
  462. rasa/engine/runner/dask.py +8 -5
  463. rasa/engine/validation.py +25 -8
  464. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  465. rasa/hooks.py +5 -5
  466. rasa/llm_fine_tuning/utils.py +2 -2
  467. rasa/model_manager/model_api.py +4 -5
  468. rasa/model_manager/runner_service.py +2 -2
  469. rasa/model_manager/socket_bridge.py +21 -17
  470. rasa/model_manager/trainer_service.py +12 -9
  471. rasa/model_manager/utils.py +1 -29
  472. rasa/model_manager/warm_rasa_process.py +13 -3
  473. rasa/model_training.py +60 -47
  474. rasa/nlu/classifiers/diet_classifier.py +198 -98
  475. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  476. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  477. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  478. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  479. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  480. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  481. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  482. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  483. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  484. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  485. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  486. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  487. rasa/nlu/selectors/response_selector.py +10 -2
  488. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  489. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  490. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  491. rasa/nlu/utils/mitie_utils.py +3 -0
  492. rasa/nlu/utils/spacy_utils.py +3 -2
  493. rasa/plugin.py +8 -8
  494. rasa/privacy/privacy_config.py +1 -1
  495. rasa/privacy/privacy_manager.py +12 -3
  496. rasa/server.py +15 -3
  497. rasa/shared/agents/__init__.py +0 -0
  498. rasa/shared/agents/auth/__init__.py +0 -0
  499. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  500. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  501. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  502. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  503. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  504. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  505. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
  506. rasa/shared/agents/auth/constants.py +13 -0
  507. rasa/shared/agents/auth/types.py +12 -0
  508. rasa/shared/agents/auth/utils.py +85 -0
  509. rasa/shared/agents/utils.py +35 -0
  510. rasa/shared/constants.py +11 -0
  511. rasa/shared/core/constants.py +17 -1
  512. rasa/shared/core/domain.py +62 -22
  513. rasa/shared/core/events.py +329 -0
  514. rasa/shared/core/flows/constants.py +5 -0
  515. rasa/shared/core/flows/flow.py +1 -1
  516. rasa/shared/core/flows/flow_step.py +7 -1
  517. rasa/shared/core/flows/flows_list.py +21 -5
  518. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  519. rasa/shared/core/flows/steps/call.py +57 -6
  520. rasa/shared/core/flows/steps/collect.py +98 -13
  521. rasa/shared/core/flows/validation.py +372 -8
  522. rasa/shared/core/flows/yaml_flows_io.py +19 -10
  523. rasa/shared/core/slots.py +6 -2
  524. rasa/shared/core/trackers.py +5 -2
  525. rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
  526. rasa/shared/exceptions.py +39 -2
  527. rasa/shared/importers/importer.py +6 -0
  528. rasa/shared/importers/rasa.py +1 -1
  529. rasa/shared/importers/utils.py +86 -4
  530. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  531. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  532. rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
  533. rasa/shared/providers/llm/llm_client.py +7 -3
  534. rasa/shared/providers/llm/llm_response.py +66 -0
  535. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  536. rasa/shared/utils/common.py +26 -1
  537. rasa/shared/utils/health_check/health_check.py +7 -3
  538. rasa/shared/utils/llm.py +92 -19
  539. rasa/shared/utils/mcp/__init__.py +0 -0
  540. rasa/shared/utils/mcp/server_connection.py +250 -0
  541. rasa/shared/utils/mcp/utils.py +20 -0
  542. rasa/shared/utils/schemas/events.py +42 -0
  543. rasa/shared/utils/yaml.py +3 -1
  544. rasa/studio/download.py +3 -0
  545. rasa/studio/prompts.py +1 -0
  546. rasa/studio/pull/pull.py +3 -2
  547. rasa/studio/train.py +8 -7
  548. rasa/studio/upload.py +19 -52
  549. rasa/telemetry.py +166 -28
  550. rasa/tracing/config.py +45 -12
  551. rasa/tracing/constants.py +14 -0
  552. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  553. rasa/tracing/instrumentation/instrumentation.py +626 -21
  554. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  555. rasa/tracing/instrumentation/metrics.py +32 -0
  556. rasa/tracing/metric_instrument_provider.py +68 -0
  557. rasa/utils/common.py +92 -1
  558. rasa/utils/endpoints.py +11 -2
  559. rasa/utils/io.py +27 -9
  560. rasa/utils/json_utils.py +6 -1
  561. rasa/utils/licensing.py +21 -10
  562. rasa/utils/log_utils.py +121 -7
  563. rasa/utils/ml_utils.py +1 -1
  564. rasa/utils/openapi.py +144 -0
  565. rasa/utils/plotting.py +1 -1
  566. rasa/utils/pypred.py +45 -0
  567. rasa/utils/tensorflow/__init__.py +7 -0
  568. rasa/utils/tensorflow/callback.py +136 -101
  569. rasa/utils/tensorflow/crf.py +1 -1
  570. rasa/utils/tensorflow/data_generator.py +21 -8
  571. rasa/utils/tensorflow/layers.py +21 -11
  572. rasa/utils/tensorflow/metrics.py +7 -3
  573. rasa/utils/tensorflow/models.py +56 -8
  574. rasa/utils/tensorflow/rasa_layers.py +8 -6
  575. rasa/utils/tensorflow/transformer.py +2 -3
  576. rasa/utils/train_utils.py +54 -24
  577. rasa/validator.py +149 -16
  578. rasa/version.py +1 -1
  579. rasa_pro-3.14.0.dist-info/METADATA +212 -0
  580. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +583 -271
  581. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  582. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  583. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  584. rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
  585. rasa_pro-3.13.11.dist-info/METADATA +0 -192
  586. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
  587. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
  588. {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,291 @@
1
+ import os
2
+ import threading
3
+ import time
4
+ from typing import Dict, Optional, Tuple
5
+ from urllib.parse import ParseResult, urlencode, urlunparse
6
+
7
+ import boto3
8
+ import redis
9
+ import structlog
10
+ from aws_msk_iam_sasl_signer import MSKAuthTokenProvider
11
+ from botocore.exceptions import BotoCoreError
12
+ from botocore.model import ServiceId
13
+ from botocore.session import get_session
14
+ from botocore.signers import RequestSigner
15
+ from cachetools import TTLCache, cached
16
+
17
+ from rasa.core.constants import (
18
+ ELASTICACHE_REDIS_AWS_IAM_ENABLED_ENV_VAR_NAME,
19
+ KAFKA_MSK_AWS_IAM_ENABLED_ENV_VAR_NAME,
20
+ KAFKA_SERVICE_NAME,
21
+ RDS_SQL_DB_AWS_IAM_ENABLED_ENV_VAR_NAME,
22
+ REDIS_SERVICE_NAME,
23
+ SQL_SERVICE_NAME,
24
+ )
25
+ from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
26
+ IAMCredentialsProvider,
27
+ IAMCredentialsProviderInput,
28
+ SupportedServiceType,
29
+ TemporaryCredentials,
30
+ )
31
+ from rasa.shared.exceptions import ConnectionException
32
+
33
+ structlogger = structlog.get_logger(__name__)
34
+
35
+ SERVICE_CONFIG: Dict[Tuple[SupportedServiceType, str], str] = {
36
+ (
37
+ SupportedServiceType.TRACKER_STORE,
38
+ SQL_SERVICE_NAME,
39
+ ): RDS_SQL_DB_AWS_IAM_ENABLED_ENV_VAR_NAME,
40
+ (
41
+ SupportedServiceType.TRACKER_STORE,
42
+ REDIS_SERVICE_NAME,
43
+ ): ELASTICACHE_REDIS_AWS_IAM_ENABLED_ENV_VAR_NAME,
44
+ (
45
+ SupportedServiceType.EVENT_BROKER,
46
+ KAFKA_SERVICE_NAME,
47
+ ): KAFKA_MSK_AWS_IAM_ENABLED_ENV_VAR_NAME,
48
+ (
49
+ SupportedServiceType.LOCK_STORE,
50
+ REDIS_SERVICE_NAME,
51
+ ): ELASTICACHE_REDIS_AWS_IAM_ENABLED_ENV_VAR_NAME,
52
+ }
53
+
54
+
55
+ class AWSRDSIAMCredentialsProvider(IAMCredentialsProvider):
56
+ """Generates temporary credentials for AWS RDS using IAM roles."""
57
+
58
+ def __init__(self, username: str, host: str, port: int) -> None:
59
+ """Initializes the provider."""
60
+ self.username = username
61
+ self.host = host
62
+ self.port = port
63
+
64
+ def get_temporary_credentials(self) -> TemporaryCredentials:
65
+ """Generates temporary credentials for AWS RDS."""
66
+ structlogger.debug(
67
+ "rasa.core.aws_rds_iam_credentials_provider.get_credentials",
68
+ event_info="IAM authentication for AWS RDS enabled. "
69
+ "Generating temporary auth token...",
70
+ )
71
+
72
+ try:
73
+ client = boto3.client("rds")
74
+ auth_token = client.generate_db_auth_token(
75
+ DBHostname=self.host,
76
+ Port=self.port,
77
+ DBUsername=self.username,
78
+ )
79
+ structlogger.info(
80
+ "rasa.core.aws_rds_iam_credentials_provider.generated_credentials",
81
+ event_info="Successfully generated temporary auth token for AWS RDS.",
82
+ )
83
+ return TemporaryCredentials(auth_token=auth_token)
84
+ except (BotoCoreError, ValueError) as exc:
85
+ structlogger.error(
86
+ "rasa.core.aws_rds_iam_credentials_provider.error_generating_credentials",
87
+ event_info="Failed to generate temporary auth token for AWS RDS.",
88
+ error=str(exc),
89
+ )
90
+ return TemporaryCredentials(auth_token=None)
91
+
92
+
93
+ class AWSMSKafkaIAMCredentialsProvider(IAMCredentialsProvider):
94
+ """Generates temporary credentials for AWS MSK using IAM roles."""
95
+
96
+ def __init__(self) -> None:
97
+ self.region = os.getenv("AWS_DEFAULT_REGION", os.getenv("AWS_REGION"))
98
+ self._token: Optional[str] = None
99
+ self._expires_at: float = 0
100
+ self.refresh_margin_seconds = 60 # Refresh 60 seconds before expiry
101
+ # ensure thread safety when refreshing token because the
102
+ # kafka client library we use (confluent-kafka) is multithreaded
103
+ self.lock = threading.Lock()
104
+
105
+ @property
106
+ def token(self) -> Optional[str]:
107
+ return self._token
108
+
109
+ @token.setter
110
+ def token(self, value: str) -> None:
111
+ self._token = value
112
+
113
+ @property
114
+ def expires_at(self) -> float:
115
+ return self._expires_at
116
+
117
+ @expires_at.setter
118
+ def expires_at(self, value: float) -> None:
119
+ self._expires_at = value
120
+
121
+ def get_temporary_credentials(self) -> TemporaryCredentials:
122
+ """Generates temporary credentials for AWS MSK."""
123
+ with self.lock:
124
+ current_time = time.time() # Current time in seconds
125
+ if (
126
+ not self.token
127
+ or current_time >= self.expires_at - self.refresh_margin_seconds
128
+ ):
129
+ try:
130
+ auth_token, expiry_ms = MSKAuthTokenProvider.generate_auth_token(
131
+ self.region
132
+ )
133
+ structlogger.debug(
134
+ "rasa.core.aws_msk_iam_credentials_provider.get_credentials",
135
+ event_info="Successfully generated AWS IAM token for "
136
+ "Kafka authentication.",
137
+ )
138
+ self.token = auth_token
139
+ self.expires_at = int(expiry_ms) / 1000 # Convert ms to seconds
140
+ return TemporaryCredentials(
141
+ auth_token=auth_token,
142
+ expiration=self.expires_at,
143
+ )
144
+ except Exception as exc:
145
+ raise ConnectionException(
146
+ f"Failed to generate AWS IAM token "
147
+ f"for MSK authentication. Original exception: {exc}"
148
+ ) from exc
149
+ else:
150
+ structlogger.debug(
151
+ "rasa.core.aws_msk_iam_credentials_provider.get_credentials",
152
+ event_info="Using cached AWS IAM token for Kafka authentication.",
153
+ )
154
+ return TemporaryCredentials(
155
+ auth_token=self.token,
156
+ expiration=self.expires_at,
157
+ )
158
+
159
+
160
+ class AWSElasticacheRedisIAMCredentialsProvider(redis.CredentialProvider):
161
+ """Generates temporary credentials for AWS ElastiCache Redis using IAM roles."""
162
+
163
+ def __init__(self, username: str, cluster_name: Optional[str] = None) -> None:
164
+ """Initializes the provider."""
165
+ self.username = username
166
+ self.cluster_name = cluster_name
167
+ self.region = os.getenv("AWS_DEFAULT_REGION", os.getenv("AWS_REGION"))
168
+ self.session = get_session()
169
+ self.request_signer = RequestSigner(
170
+ ServiceId("elasticache"),
171
+ self.region,
172
+ "elasticache",
173
+ "v4",
174
+ self.session.get_credentials(),
175
+ self.session.get_component("event_emitter"),
176
+ )
177
+
178
+ # Generated IAM tokens are valid for 15 minutes
179
+ @cached(cache=TTLCache(maxsize=128, ttl=900))
180
+ def get_credentials(self) -> Tuple[str, str]:
181
+ """Generates temporary credentials for AWS ElastiCache Redis.
182
+
183
+ Required method implementation by redis-py CredentialProvider parent class.
184
+ Used internally by redis-py when connecting to Redis.
185
+ """
186
+ query_params = {"Action": "connect", "User": self.username}
187
+ url = urlunparse(
188
+ ParseResult(
189
+ scheme="https",
190
+ netloc=self.cluster_name,
191
+ path="/",
192
+ query=urlencode(query_params),
193
+ params="",
194
+ fragment="",
195
+ )
196
+ )
197
+ signed_url = self.request_signer.generate_presigned_url(
198
+ {"method": "GET", "url": url, "body": {}, "headers": {}, "context": {}},
199
+ operation_name="connect",
200
+ expires_in=900,
201
+ region_name=self.region,
202
+ )
203
+
204
+ # RequestSigner only seems to work if the URL has a protocol, but
205
+ # Elasticache only accepts the URL without a protocol
206
+ # So strip it off the signed URL before returning
207
+ return self.username, signed_url.removeprefix("https://")
208
+
209
+ def get_temporary_credentials(self) -> TemporaryCredentials:
210
+ """Generates temporary credentials for AWS ElastiCache Redis.
211
+
212
+ Implemented to comply with the IAMCredentialsProvider rasa-pro interface.
213
+ Calls the get_credentials method which is used internally by redis-py.
214
+ """
215
+ try:
216
+ username, signed_url = self.get_credentials()
217
+ structlogger.info(
218
+ "rasa.core.aws_elasticache_redis_iam_credentials_provider.generated_credentials",
219
+ event_info="Successfully generated temporary credentials for "
220
+ "AWS ElastiCache Redis.",
221
+ )
222
+ return TemporaryCredentials(username=username, presigned_url=signed_url)
223
+ except Exception as exc:
224
+ structlogger.error(
225
+ "rasa.core.aws_elasticache_redis_iam_credentials_provider.error_generating_credentials",
226
+ event_info="Failed to generate temporary credentials for "
227
+ "AWS ElastiCache Redis.",
228
+ error=str(exc),
229
+ )
230
+ return TemporaryCredentials()
231
+
232
+
233
+ def is_iam_enabled(provider_input: "IAMCredentialsProviderInput") -> bool:
234
+ """Checks if IAM authentication is enabled for the given service."""
235
+ service_type = provider_input.service_type
236
+ service_name = provider_input.service_name
237
+ iam_enabled_env_var_name = SERVICE_CONFIG.get((service_type, service_name))
238
+
239
+ if not iam_enabled_env_var_name:
240
+ structlogger.warning(
241
+ "rasa.core.aws_iam_credentials_providers.is_iam_enabled.unsupported_service",
242
+ event_info=f"IAM authentication check requested for unsupported service: "
243
+ f"{service_name}",
244
+ )
245
+ return False
246
+
247
+ return os.getenv(iam_enabled_env_var_name, "false").lower() == "true"
248
+
249
+
250
+ def create_aws_iam_credentials_provider(
251
+ provider_input: "IAMCredentialsProviderInput",
252
+ ) -> Optional["IAMCredentialsProvider"]:
253
+ """Factory function to create an AWS IAM credentials provider."""
254
+ iam_enabled = is_iam_enabled(provider_input)
255
+ if not iam_enabled:
256
+ structlogger.debug(
257
+ "rasa.core.aws_iam_credentials_providers.create_provider.iam_not_enabled",
258
+ event_info=f"IAM authentication not enabled for service: "
259
+ f"{provider_input.service_type}",
260
+ )
261
+ return None
262
+
263
+ if (
264
+ provider_input.service_type == SupportedServiceType.TRACKER_STORE
265
+ and provider_input.service_name == SQL_SERVICE_NAME
266
+ ):
267
+ return AWSRDSIAMCredentialsProvider(
268
+ username=provider_input.username,
269
+ host=provider_input.host,
270
+ port=provider_input.port,
271
+ )
272
+
273
+ if (
274
+ provider_input.service_type == SupportedServiceType.TRACKER_STORE
275
+ and provider_input.service_name == REDIS_SERVICE_NAME
276
+ ):
277
+ return AWSElasticacheRedisIAMCredentialsProvider(
278
+ username=provider_input.username,
279
+ cluster_name=provider_input.cluster_name,
280
+ )
281
+
282
+ if provider_input.service_type == SupportedServiceType.EVENT_BROKER:
283
+ return AWSMSKafkaIAMCredentialsProvider()
284
+
285
+ if provider_input.service_type == SupportedServiceType.LOCK_STORE:
286
+ return AWSElasticacheRedisIAMCredentialsProvider(
287
+ username=provider_input.username,
288
+ cluster_name=provider_input.cluster_name,
289
+ )
290
+
291
+ return None
@@ -0,0 +1,91 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ from enum import Enum
5
+ from typing import Optional, Protocol, runtime_checkable
6
+
7
+ import structlog
8
+ from pydantic import BaseModel
9
+
10
+ from rasa.core.constants import IAM_CLOUD_PROVIDER_ENV_VAR_NAME
11
+
12
+ structlogger = structlog.get_logger(__name__)
13
+
14
+
15
+ class TemporaryCredentials(BaseModel):
16
+ """Dataclass storing temporary credentials."""
17
+
18
+ auth_token: Optional[str] = None
19
+ expiration: Optional[float] = None
20
+ username: Optional[str] = None
21
+ presigned_url: Optional[str] = None
22
+
23
+
24
+ @runtime_checkable
25
+ class IAMCredentialsProvider(Protocol):
26
+ """Interface for generating temporary credentials using IAM roles."""
27
+
28
+ def get_temporary_credentials(self) -> TemporaryCredentials:
29
+ """Generates temporary credentials using IAM roles."""
30
+ ...
31
+
32
+
33
+ class IAMCredentialsProviderType(Enum):
34
+ """Enum for supported IAM credentials provider types."""
35
+
36
+ AWS = "aws"
37
+
38
+
39
+ class SupportedServiceType(Enum):
40
+ """Enum for supported services using IAM credentials providers."""
41
+
42
+ TRACKER_STORE = "tracker_store"
43
+ EVENT_BROKER = "event_broker"
44
+ LOCK_STORE = "lock_store"
45
+
46
+
47
+ class IAMCredentialsProviderInput(BaseModel):
48
+ """Input data for creating an IAM credentials provider."""
49
+
50
+ service_type: SupportedServiceType
51
+ service_name: str
52
+ username: Optional[str] = None
53
+ host: Optional[str] = None
54
+ port: Optional[int] = None
55
+ cluster_name: Optional[str] = None
56
+
57
+
58
+ def create_iam_credentials_provider(
59
+ provider_input: IAMCredentialsProviderInput,
60
+ ) -> Optional[IAMCredentialsProvider]:
61
+ """Factory function to create an IAM credentials provider.
62
+
63
+ Args:
64
+ provider_input: Input data for creating an IAM credentials provider.
65
+
66
+ Returns:
67
+ An instance of the specified IAM credentials provider or
68
+ None if the type is unsupported.
69
+ """
70
+ iam_cloud_provider = os.getenv(IAM_CLOUD_PROVIDER_ENV_VAR_NAME)
71
+
72
+ if iam_cloud_provider is None:
73
+ return None
74
+
75
+ try:
76
+ provider_type = IAMCredentialsProviderType(iam_cloud_provider.lower())
77
+ except ValueError:
78
+ structlogger.warning(
79
+ "rasa.core.iam_credentials_provider.create_iam_credentials_provider.unsupported_provider",
80
+ event_info=f"Unsupported IAM cloud provider: {iam_cloud_provider}",
81
+ )
82
+ return None
83
+
84
+ if provider_type == IAMCredentialsProviderType.AWS:
85
+ from rasa.core.iam_credentials_providers.aws_iam_credentials_providers import (
86
+ create_aws_iam_credentials_provider,
87
+ )
88
+
89
+ return create_aws_iam_credentials_provider(provider_input)
90
+
91
+ return None
rasa/core/lock_store.py CHANGED
@@ -4,7 +4,7 @@ import asyncio
4
4
  import json
5
5
  import os
6
6
  from contextlib import asynccontextmanager
7
- from typing import Any, AsyncGenerator, Dict, Literal, Optional, Text, Union
7
+ from typing import Any, AsyncGenerator, Dict, List, Literal, Optional, Text, Union
8
8
 
9
9
  import structlog
10
10
  from pydantic import (
@@ -12,12 +12,21 @@ from pydantic import (
12
12
  BaseModel,
13
13
  Field,
14
14
  NonNegativeInt,
15
+ ValidationError,
15
16
  model_validator,
16
17
  )
17
18
 
18
19
  import rasa.shared.utils.common
19
- from rasa.core.constants import DEFAULT_LOCK_LIFETIME
20
+ from rasa.core.constants import DEFAULT_LOCK_LIFETIME, IAM_CLOUD_PROVIDER_ENV_VAR_NAME
21
+ from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
22
+ SupportedServiceType,
23
+ )
20
24
  from rasa.core.lock import TicketLock
25
+ from rasa.core.redis_connection_factory import (
26
+ DeploymentMode,
27
+ RedisConfig,
28
+ RedisConnectionFactory,
29
+ )
21
30
  from rasa.shared.exceptions import ConnectionException, RasaException
22
31
  from rasa.shared.utils.io import raise_deprecation_warning
23
32
  from rasa.utils.endpoints import EndpointConfig
@@ -221,7 +230,7 @@ class LockStore:
221
230
 
222
231
 
223
232
  class RedisLockStoreConfig(BaseModel):
224
- host: Union[AnyUrl, Literal["localhost"]] = Field(
233
+ host: Union[AnyUrl, Literal["localhost"], str] = Field(
225
234
  default="localhost", description="The host of the redis server."
226
235
  )
227
236
  port: NonNegativeInt = Field(
@@ -269,6 +278,18 @@ class RedisLockStoreConfig(BaseModel):
269
278
  "will be raised in case Redis doesn't respond "
270
279
  "within `socket_timeout` seconds.",
271
280
  )
281
+ deployment_mode: DeploymentMode = Field(
282
+ default=DeploymentMode.STANDARD,
283
+ description="Redis deployment mode: 'standard', 'cluster', or 'sentinel'",
284
+ )
285
+ endpoints: Optional[List[str]] = Field(
286
+ default=None,
287
+ description="List of endpoints for cluster/sentinel mode in 'host:port' format",
288
+ )
289
+ sentinel_service: Optional[str] = Field(
290
+ default=None,
291
+ description="Sentinel service name",
292
+ )
272
293
 
273
294
  @model_validator(mode="before")
274
295
  @classmethod
@@ -290,7 +311,9 @@ class RedisLockStoreConfig(BaseModel):
290
311
 
291
312
  @model_validator(mode="after")
292
313
  def verify_username_password(self) -> RedisLockStoreConfig:
293
- if bool(self.username) ^ bool(self.password):
314
+ if os.getenv(IAM_CLOUD_PROVIDER_ENV_VAR_NAME) is None and (
315
+ bool(self.username) ^ bool(self.password)
316
+ ):
294
317
  raise ValueError(
295
318
  f"Expected username and password. "
296
319
  f"Found: username: {'<has value>' if self.username else '<N/A>'}, "
@@ -298,9 +321,6 @@ class RedisLockStoreConfig(BaseModel):
298
321
  )
299
322
  return self
300
323
 
301
- def to_strict_redis(self) -> Dict[str, Any]:
302
- return self.model_dump(by_alias=True, exclude={"key_prefix"})
303
-
304
324
 
305
325
  class RedisLockStore(LockStore):
306
326
  """Redis store for ticket locks."""
@@ -314,10 +334,27 @@ class RedisLockStore(LockStore):
314
334
  Args:
315
335
  config: Redis lock store configuration.
316
336
  """
317
- import redis
318
-
319
337
  self.config = config
320
- self.red = redis.StrictRedis(**self.config.to_strict_redis())
338
+ try:
339
+ redis_config = RedisConfig(
340
+ host=str(self.config.host),
341
+ port=self.config.port,
342
+ service_type=SupportedServiceType.LOCK_STORE,
343
+ db=self.config.db,
344
+ username=self.config.username,
345
+ password=self.config.password,
346
+ use_ssl=self.config.use_ssl,
347
+ ssl_keyfile=self.config.ssl_keyfile,
348
+ ssl_certfile=self.config.ssl_certfile,
349
+ ssl_ca_certs=self.config.ssl_ca_certs,
350
+ deployment_mode=self.config.deployment_mode.value,
351
+ endpoints=self.config.endpoints,
352
+ sentinel_service=self.config.sentinel_service,
353
+ socket_timeout=self.config.socket_timeout,
354
+ )
355
+ self.red = RedisConnectionFactory.create_connection(redis_config)
356
+ except ValidationError as e:
357
+ raise RasaException(f"Invalid Redis configuration: {e}")
321
358
 
322
359
  self.key_prefix = DEFAULT_REDIS_LOCK_STORE_KEY_PREFIX
323
360
  if self.config.key_prefix:
@@ -349,6 +386,9 @@ class RedisLockStore(LockStore):
349
386
  """Retrieves lock (see parent docstring for more information)."""
350
387
  serialised_lock = self.red.get(self.key_prefix + conversation_id)
351
388
  if serialised_lock:
389
+ # Handle bytes to string conversion for JSON parsing
390
+ if isinstance(serialised_lock, bytes):
391
+ serialised_lock = serialised_lock.decode("utf-8")
352
392
  return TicketLock.from_dict(json.loads(serialised_lock))
353
393
 
354
394
  return None
@@ -317,14 +317,18 @@ class ContextualResponseRephraser(
317
317
  return response
318
318
 
319
319
  prompt_template_text = self._template_for_response_rephrasing(response)
320
+
321
+ # Last user message (=current input) should always be in prompt if available
320
322
  last_message_by_user = getattr(tracker.latest_message, "text", "")
321
323
  current_input = (
322
324
  f"{USER}: {last_message_by_user}" if last_message_by_user else ""
323
325
  )
324
326
 
327
+ # Only summarise conversation history if flagged
325
328
  if self.summarize_history:
326
329
  history = await self._create_history(tracker)
327
330
  else:
331
+ # Count multiple utterances by bot/user as single turn
328
332
  turns_wrapper = (
329
333
  _count_multiple_utterances_as_single_turn
330
334
  if self.count_multiple_utterances_as_single_turn
@@ -367,6 +371,7 @@ class ContextualResponseRephraser(
367
371
  )
368
372
 
369
373
  if not (llm_response and llm_response.choices and llm_response.choices[0]):
374
+ # If the LLM fails to generate a response, return the original response.
370
375
  return response
371
376
 
372
377
  updated_text = llm_response.choices[0]
@@ -2,7 +2,6 @@ from typing import Any, Dict, List, Optional, Text, Union
2
2
 
3
3
  import structlog
4
4
  from jinja2 import Template
5
- from pypred import Predicate
6
5
 
7
6
  import rasa.shared.utils.common
8
7
  import rasa.shared.utils.io
@@ -12,6 +11,7 @@ from rasa.shared.constants import CHANNEL, RESPONSE_CONDITION
12
11
  from rasa.shared.core.domain import Domain
13
12
  from rasa.shared.core.trackers import DialogueStateTracker
14
13
  from rasa.utils.endpoints import EndpointConfig
14
+ from rasa.utils.pypred import Predicate
15
15
 
16
16
  structlogger = structlog.get_logger()
17
17
 
rasa/core/persistor.py CHANGED
@@ -314,7 +314,7 @@ class AWSPersistor(Persistor):
314
314
  obj = self.s3.Object(self.bucket_name, model_path)
315
315
  return obj.content_length
316
316
  except Exception:
317
- raise ModelNotFound()
317
+ raise ModelNotFound("Model not found")
318
318
 
319
319
  def _retrieve_tar(
320
320
  self, target_filename: str, target_path: Optional[str] = None
@@ -349,7 +349,7 @@ class AWSPersistor(Persistor):
349
349
  target_filename=target_filename,
350
350
  event_info=log,
351
351
  )
352
- raise ModelNotFound() from exc
352
+ raise ModelNotFound("Model not found") from exc
353
353
  except exceptions.BotoCoreError as exc:
354
354
  structlogger.error(
355
355
  "aws_persistor.retrieve_tar.model_download_error",
@@ -357,7 +357,7 @@ class AWSPersistor(Persistor):
357
357
  target_filename=target_filename,
358
358
  event_info=log,
359
359
  )
360
- raise ModelNotFound() from exc
360
+ raise ModelNotFound("Model not found") from exc
361
361
 
362
362
 
363
363
  class GCSPersistor(Persistor):
@@ -447,7 +447,7 @@ class GCSPersistor(Persistor):
447
447
  blob = self.bucket.blob(target_filename)
448
448
  return blob.size
449
449
  except Exception:
450
- raise ModelNotFound()
450
+ raise ModelNotFound("Model not found")
451
451
 
452
452
  def _retrieve_tar(
453
453
  self, target_filename: str, target_path: Optional[str] = None
@@ -481,7 +481,7 @@ class GCSPersistor(Persistor):
481
481
  target_filename=target_filename,
482
482
  event_info=log,
483
483
  )
484
- raise ModelNotFound() from exc
484
+ raise ModelNotFound("Model not found") from exc
485
485
 
486
486
 
487
487
  class AzurePersistor(Persistor):
@@ -534,7 +534,7 @@ class AzurePersistor(Persistor):
534
534
  properties = blob_client.get_blob_properties()
535
535
  return properties.size
536
536
  except Exception:
537
- raise ModelNotFound()
537
+ raise ModelNotFound("Model not found")
538
538
 
539
539
  def _retrieve_tar(
540
540
  self, target_filename: Text, target_path: Optional[str] = None
@@ -570,4 +570,4 @@ class AzurePersistor(Persistor):
570
570
  event_info=log,
571
571
  exception=exc,
572
572
  )
573
- raise ModelNotFound() from exc
573
+ raise ModelNotFound("Model not found") from exc
@@ -12,7 +12,7 @@ from jinja2 import Template
12
12
  from pydantic import ValidationError
13
13
 
14
14
  import rasa.shared.utils.io
15
- from rasa.core.available_endpoints import AvailableEndpoints
15
+ from rasa.core.config.available_endpoints import AvailableEndpoints
16
16
  from rasa.core.constants import (
17
17
  UTTER_SOURCE_METADATA_KEY,
18
18
  )
@@ -63,6 +63,8 @@ from rasa.shared.constants import (
63
63
  )
64
64
  from rasa.shared.core.constants import (
65
65
  ACTION_CANCEL_FLOW,
66
+ ACTION_METADATA_MESSAGE_KEY,
67
+ ACTION_METADATA_TEXT_KEY,
66
68
  ACTION_SEND_TEXT_NAME,
67
69
  DEFAULT_SLOT_NAMES,
68
70
  )
@@ -585,8 +587,8 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
585
587
  return self._create_prediction_internal_error(domain, tracker)
586
588
 
587
589
  action_metadata = {
588
- "message": {
589
- "text": response,
590
+ ACTION_METADATA_MESSAGE_KEY: {
591
+ ACTION_METADATA_TEXT_KEY: response,
590
592
  SEARCH_RESULTS_METADATA_KEY: [
591
593
  result.text for result in documents.results
592
594
  ],
@@ -781,7 +783,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
781
783
  if not os.path.exists(docs_folder) or not os.path.isdir(docs_folder):
782
784
  error_message = (
783
785
  f"Document source directory does not exist or is not a "
784
- f"directory: '{docs_folder}'. "
786
+ f"directory: '{os.path.abspath(docs_folder)}'. "
785
787
  "Please specify a valid path to the documents source directory in the "
786
788
  "vector_store configuration."
787
789
  )
@@ -1130,8 +1132,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
1130
1132
  embeddings_config: Dict[Text, Any],
1131
1133
  log_source_method: str,
1132
1134
  ) -> None:
1133
- """
1134
- Perform the health checks using resolved LLM and embeddings configurations.
1135
+ """Perform the health checks using resolved LLM and embeddings configurations.
1135
1136
  Resolved means the configuration is either:
1136
1137
  - A reference to a model group that has already been expanded into
1137
1138
  its corresponding configuration using the information from
@@ -1160,8 +1161,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
1160
1161
 
1161
1162
  @classmethod
1162
1163
  def get_system_default_prompt_based_on_config(cls, config: Dict[str, Any]) -> str:
1163
- """
1164
- Resolves the default prompt template for Enterprise Search Policy based on
1164
+ """Resolves the default prompt template for Enterprise Search Policy based on
1165
1165
  the component's configuration.
1166
1166
 
1167
1167
  - The old prompt is selected when both citation and relevancy check are either
@@ -1192,8 +1192,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
1192
1192
  relevancy_check_enabled: bool,
1193
1193
  citation_enabled: bool,
1194
1194
  ) -> str:
1195
- """
1196
- Returns the appropriate default prompt template based on the feature flags.
1195
+ """Returns the appropriate default prompt template based on the feature flags.
1197
1196
 
1198
1197
  The selection follows this priority:
1199
1198
  1. If relevancy check is enabled, return the prompt that includes both relevancy