rasa-pro 3.14.0.dev7__py3-none-any.whl → 3.14.0.dev9__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 (471) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  4. rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
  5. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  6. rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
  7. rasa/agents/schemas/agent_output.py +1 -1
  8. rasa/agents/utils.py +90 -1
  9. rasa/builder/README.md +120 -0
  10. rasa/builder/__init__.py +0 -0
  11. rasa/builder/auth.py +176 -0
  12. rasa/builder/config.py +92 -0
  13. rasa/builder/copilot/__init__.py +0 -0
  14. rasa/builder/copilot/constants.py +31 -0
  15. rasa/builder/copilot/copilot.py +450 -0
  16. rasa/builder/copilot/copilot_response_handler.py +522 -0
  17. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  18. rasa/builder/copilot/exceptions.py +32 -0
  19. rasa/builder/copilot/models.py +500 -0
  20. rasa/builder/copilot/prompts/__init__.py +0 -0
  21. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  22. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  23. rasa/builder/copilot/signing.py +305 -0
  24. rasa/builder/copilot/telemetry.py +210 -0
  25. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  26. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  27. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  28. rasa/builder/document_retrieval/__init__.py +0 -0
  29. rasa/builder/document_retrieval/constants.py +15 -0
  30. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  31. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  32. rasa/builder/document_retrieval/models.py +62 -0
  33. rasa/builder/download.py +140 -0
  34. rasa/builder/exceptions.py +91 -0
  35. rasa/builder/guardrails/__init__.py +1 -0
  36. rasa/builder/guardrails/constants.py +9 -0
  37. rasa/builder/guardrails/exceptions.py +4 -0
  38. rasa/builder/guardrails/lakera.py +206 -0
  39. rasa/builder/guardrails/models.py +231 -0
  40. rasa/builder/guardrails/store.py +238 -0
  41. rasa/builder/guardrails/utils.py +328 -0
  42. rasa/builder/job_manager.py +87 -0
  43. rasa/builder/jobs.py +282 -0
  44. rasa/builder/llm_service.py +246 -0
  45. rasa/builder/logging_utils.py +265 -0
  46. rasa/builder/main.py +243 -0
  47. rasa/builder/models.py +216 -0
  48. rasa/builder/project_generator.py +458 -0
  49. rasa/builder/project_info.py +72 -0
  50. rasa/builder/scrape_rasa_docs.py +97 -0
  51. rasa/builder/service.py +1345 -0
  52. rasa/builder/shared/tracker_context.py +212 -0
  53. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  54. rasa/builder/template_cache.py +244 -0
  55. rasa/builder/training_service.py +194 -0
  56. rasa/builder/validation_service.py +97 -0
  57. rasa/cli/project_templates/basic/README.md +23 -0
  58. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  59. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  60. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  61. rasa/cli/project_templates/basic/config.yml +29 -0
  62. rasa/cli/project_templates/basic/credentials.yml +33 -0
  63. rasa/cli/project_templates/basic/data/data.md +9 -0
  64. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  65. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  66. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  67. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  68. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  69. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  70. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  71. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  72. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  73. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  74. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  75. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  76. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  77. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  78. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  79. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  80. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  81. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  82. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  83. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  84. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  85. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  86. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  87. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  88. rasa/cli/project_templates/default/config.yml +4 -0
  89. rasa/cli/project_templates/default/endpoints.yml +4 -0
  90. rasa/cli/project_templates/finance/README.md +25 -0
  91. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  92. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  93. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  94. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  95. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  96. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  97. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  99. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  100. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  101. rasa/cli/project_templates/finance/actions/database.py +277 -0
  102. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  104. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  105. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  106. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  107. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  112. rasa/cli/project_templates/finance/config.yml +23 -0
  113. rasa/cli/project_templates/finance/credentials.yml +32 -0
  114. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  115. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  116. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  117. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  118. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  119. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  120. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  121. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  122. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  123. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  124. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  125. rasa/cli/project_templates/finance/data/data.md +11 -0
  126. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  127. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  128. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  129. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  130. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  131. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  132. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  133. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  134. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  135. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  136. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  137. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  138. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  139. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  140. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  141. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  142. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  143. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  144. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  145. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  146. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  147. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  148. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  149. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  154. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  231. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  232. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  233. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  234. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  235. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  236. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  237. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  238. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  239. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  240. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  241. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  243. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  244. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  245. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  246. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  247. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  248. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  249. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  250. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  251. rasa/cli/project_templates/telco/README.md +25 -0
  252. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  253. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  254. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  255. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  256. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  257. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  258. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  259. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  260. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  261. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  262. rasa/cli/project_templates/telco/config.yml +29 -0
  263. rasa/cli/project_templates/telco/credentials.yml +33 -0
  264. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  265. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  266. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  267. rasa/cli/project_templates/telco/data/data.md +11 -0
  268. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  269. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  270. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  271. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  272. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  273. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  274. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  275. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  276. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  277. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  278. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  279. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  280. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  281. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  282. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  283. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  284. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  285. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  286. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  287. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  288. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  289. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  290. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  291. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  292. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  293. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  294. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  295. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  296. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  297. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  298. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  299. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  300. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  304. rasa/cli/project_templates/tutorial/config.yml +2 -1
  305. rasa/cli/scaffold.py +46 -2
  306. rasa/core/actions/action.py +0 -1
  307. rasa/core/available_agents.py +2 -0
  308. rasa/core/available_endpoints.py +17 -2
  309. rasa/core/channels/channel.py +4 -3
  310. rasa/core/channels/constants.py +3 -0
  311. rasa/core/channels/development_inspector.py +2 -22
  312. rasa/core/channels/inspector/README.md +26 -14
  313. rasa/core/channels/inspector/dist/assets/{arc-cce7e0a8.js → arc-edef10dd.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  317. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  320. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  326. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.js → index-3862675e-ecdce073.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  332. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  351. rasa/core/channels/inspector/dist/index.html +2 -2
  352. rasa/core/channels/inspector/index.html +1 -1
  353. rasa/core/channels/inspector/src/App.tsx +16 -42
  354. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  355. rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
  356. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  357. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  358. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  359. rasa/core/channels/inspector/src/types.ts +32 -7
  360. rasa/core/channels/socketio.py +212 -51
  361. rasa/core/channels/studio_chat.py +59 -57
  362. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  363. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  364. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  365. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  366. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  367. rasa/core/channels/voice_stream/genesys.py +2 -1
  368. rasa/core/channels/voice_stream/jambonz.py +9 -1
  369. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  370. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  371. rasa/core/constants.py +6 -0
  372. rasa/core/iam_credentials_providers/__init__.py +0 -0
  373. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  374. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  375. rasa/core/policies/enterprise_search_policy.py +4 -7
  376. rasa/core/policies/flows/flow_executor.py +14 -5
  377. rasa/core/policies/ted_policy.py +7 -5
  378. rasa/core/processor.py +32 -0
  379. rasa/core/redis_connection_factory.py +411 -0
  380. rasa/core/run.py +13 -3
  381. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  382. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  383. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  384. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  385. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  386. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  387. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  388. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  389. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  390. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  391. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  392. rasa/engine/graph.py +5 -1
  393. rasa/engine/recipes/default_components.py +78 -10
  394. rasa/engine/recipes/default_recipe.py +41 -1
  395. rasa/engine/storage/local_model_storage.py +83 -3
  396. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  397. rasa/model_manager/model_api.py +4 -5
  398. rasa/model_manager/runner_service.py +1 -1
  399. rasa/model_manager/socket_bridge.py +20 -15
  400. rasa/model_manager/trainer_service.py +12 -9
  401. rasa/model_manager/utils.py +1 -29
  402. rasa/model_manager/warm_rasa_process.py +1 -1
  403. rasa/model_training.py +14 -0
  404. rasa/nlu/classifiers/diet_classifier.py +22 -6
  405. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  406. rasa/nlu/extractors/extractor.py +1 -2
  407. rasa/shared/agents/auth/__init__.py +0 -0
  408. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  409. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  410. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  411. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  412. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  413. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  414. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  415. rasa/shared/agents/auth/constants.py +11 -0
  416. rasa/shared/agents/auth/types.py +11 -0
  417. rasa/shared/core/constants.py +1 -0
  418. rasa/shared/core/domain.py +58 -11
  419. rasa/shared/core/events.py +2 -0
  420. rasa/shared/core/flows/constants.py +5 -0
  421. rasa/shared/core/flows/flow_step.py +7 -1
  422. rasa/shared/core/flows/flows_list.py +6 -0
  423. rasa/shared/core/flows/steps/call.py +15 -12
  424. rasa/shared/core/flows/validation.py +238 -44
  425. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  426. rasa/shared/core/slots.py +4 -0
  427. rasa/shared/exceptions.py +12 -0
  428. rasa/shared/importers/importer.py +6 -0
  429. rasa/shared/importers/utils.py +77 -1
  430. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  431. rasa/shared/providers/_utils.py +60 -44
  432. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  433. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  434. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  435. rasa/shared/providers/llm/llm_response.py +4 -4
  436. rasa/shared/utils/common.py +24 -0
  437. rasa/shared/utils/llm.py +2 -1
  438. rasa/shared/utils/mcp/server_connection.py +84 -23
  439. rasa/shared/utils/mcp/utils.py +20 -0
  440. rasa/studio/upload.py +16 -47
  441. rasa/telemetry.py +97 -23
  442. rasa/tracing/config.py +38 -12
  443. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  444. rasa/tracing/instrumentation/instrumentation.py +85 -8
  445. rasa/utils/common.py +1 -1
  446. rasa/utils/io.py +27 -9
  447. rasa/utils/json_utils.py +6 -1
  448. rasa/utils/log_utils.py +5 -1
  449. rasa/utils/openapi.py +144 -0
  450. rasa/utils/tensorflow/__init__.py +29 -0
  451. rasa/utils/tensorflow/callback.py +1 -1
  452. rasa/utils/tensorflow/crf.py +1 -1
  453. rasa/utils/tensorflow/data_generator.py +21 -8
  454. rasa/utils/tensorflow/layers.py +11 -4
  455. rasa/utils/tensorflow/metrics.py +7 -3
  456. rasa/utils/tensorflow/models.py +41 -6
  457. rasa/utils/tensorflow/rasa_layers.py +6 -4
  458. rasa/utils/tensorflow/transformer.py +2 -3
  459. rasa/utils/train_utils.py +68 -38
  460. rasa/validator.py +18 -16
  461. rasa/version.py +1 -1
  462. rasa_pro-3.14.0.dev9.dist-info/METADATA +199 -0
  463. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/RECORD +466 -156
  464. rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
  465. rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
  466. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
  467. rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
  468. rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
  469. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/NOTICE +0 -0
  470. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/WHEEL +0 -0
  471. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,411 @@
1
+ from enum import Enum
2
+ from typing import Any, Dict, List, Optional, Text, Tuple, Union
3
+
4
+ import redis
5
+ import structlog
6
+ from pydantic import BaseModel
7
+
8
+ from rasa.shared.exceptions import ConnectionException, RasaException
9
+
10
+ structlogger = structlog.getLogger(__name__)
11
+
12
+ DEFAULT_SOCKET_TIMEOUT_IN_SECONDS = 10
13
+
14
+
15
+ class DeploymentMode(Enum):
16
+ """Supported Redis deployment modes."""
17
+
18
+ STANDARD = "standard"
19
+ CLUSTER = "cluster"
20
+ SENTINEL = "sentinel"
21
+
22
+
23
+ class StandardRedisConfig(BaseModel):
24
+ """Base configuration for Redis connections."""
25
+
26
+ host: Text = "localhost"
27
+ port: int = 6379
28
+ username: Optional[Text] = None
29
+ password: Optional[Text] = None
30
+ use_ssl: bool = False
31
+ ssl_keyfile: Optional[Text] = None
32
+ ssl_certfile: Optional[Text] = None
33
+ ssl_ca_certs: Optional[Text] = None
34
+ db: int = 0
35
+ socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
36
+ decode_responses: bool = False
37
+
38
+
39
+ class ClusterRedisConfig(StandardRedisConfig):
40
+ """Configuration for Redis Cluster connections."""
41
+
42
+ endpoints: List[Tuple[Text, int]]
43
+
44
+
45
+ class SentinelRedisConfig(StandardRedisConfig):
46
+ """Configuration for Redis Sentinel connections."""
47
+
48
+ endpoints: List[Tuple[Text, int]]
49
+ sentinel_service: Optional[Text] = "mymaster"
50
+
51
+
52
+ class RedisConfig(BaseModel):
53
+ """Base configuration for Redis connections."""
54
+
55
+ host: Text = "localhost"
56
+ port: int = 6379
57
+ username: Optional[Text] = None
58
+ password: Optional[Text] = None
59
+ use_ssl: bool = False
60
+ ssl_keyfile: Optional[Text] = None
61
+ ssl_certfile: Optional[Text] = None
62
+ ssl_ca_certs: Optional[Text] = None
63
+ db: int = 0
64
+ socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
65
+ decode_responses: bool = False
66
+ deployment_mode: Text = DeploymentMode.STANDARD.value
67
+ endpoints: Optional[List[Text]] = None
68
+ sentinel_service: Optional[Text] = None
69
+
70
+
71
+ class RedisConnectionFactory:
72
+ """Factory class for creating Redis connections with different modes."""
73
+
74
+ @classmethod
75
+ def create_connection(
76
+ cls,
77
+ config: RedisConfig,
78
+ ) -> Union[redis.Redis, redis.RedisCluster]:
79
+ """Create a Redis connection based on the configuration.
80
+
81
+ Args:
82
+ config: Redis configuration object containing all connection parameters.
83
+
84
+ Returns:
85
+ A Redis connection - either a standard Redis connection, a RedisCluster
86
+ connection, or a Redis master connection managed by Sentinel.
87
+
88
+ Raises:
89
+ RasaException: If configuration is invalid.
90
+ """
91
+ if config.endpoints is None:
92
+ config.endpoints = []
93
+
94
+ try:
95
+ deployment_mode_enum = DeploymentMode(config.deployment_mode)
96
+ except ValueError:
97
+ valid_modes = [mode.value for mode in DeploymentMode]
98
+ raise RasaException(
99
+ f"Invalid deployment_mode '{config.deployment_mode}'. "
100
+ f"Must be one of: {', '.join(valid_modes)}"
101
+ )
102
+
103
+ parsed_endpoints = cls._parse_and_validate_endpoints(
104
+ deployment_mode_enum, config.endpoints, config.host, config.port
105
+ )
106
+
107
+ if deployment_mode_enum == DeploymentMode.CLUSTER:
108
+ cls._log_cluster_db_warning(deployment_mode_enum, config.db)
109
+ cluster_config = ClusterRedisConfig(
110
+ username=config.username,
111
+ password=config.password,
112
+ use_ssl=config.use_ssl,
113
+ ssl_certfile=config.ssl_certfile,
114
+ ssl_keyfile=config.ssl_keyfile,
115
+ ssl_ca_certs=config.ssl_ca_certs,
116
+ db=config.db,
117
+ socket_timeout=config.socket_timeout,
118
+ decode_responses=config.decode_responses,
119
+ endpoints=parsed_endpoints,
120
+ )
121
+ return cls._create_cluster_connection(cluster_config)
122
+ elif deployment_mode_enum == DeploymentMode.SENTINEL:
123
+ sentinel_kwargs = {
124
+ "username": config.username,
125
+ "password": config.password,
126
+ "use_ssl": config.use_ssl,
127
+ "ssl_certfile": config.ssl_certfile,
128
+ "ssl_keyfile": config.ssl_keyfile,
129
+ "ssl_ca_certs": config.ssl_ca_certs,
130
+ "db": config.db,
131
+ "socket_timeout": config.socket_timeout,
132
+ "decode_responses": config.decode_responses,
133
+ "endpoints": parsed_endpoints,
134
+ }
135
+
136
+ if config.sentinel_service is not None:
137
+ sentinel_kwargs["sentinel_service"] = config.sentinel_service
138
+
139
+ sentinel_config = SentinelRedisConfig(**sentinel_kwargs)
140
+ return cls._create_sentinel_connection(sentinel_config)
141
+ else:
142
+ standard_config = StandardRedisConfig(
143
+ host=config.host,
144
+ port=config.port,
145
+ username=config.username,
146
+ password=config.password,
147
+ use_ssl=config.use_ssl,
148
+ ssl_certfile=config.ssl_certfile,
149
+ ssl_keyfile=config.ssl_keyfile,
150
+ ssl_ca_certs=config.ssl_ca_certs,
151
+ db=config.db,
152
+ socket_timeout=config.socket_timeout,
153
+ decode_responses=config.decode_responses,
154
+ )
155
+ return cls._create_standard_connection(standard_config)
156
+
157
+ @classmethod
158
+ def _parse_and_validate_endpoints(
159
+ cls,
160
+ deployment_mode: DeploymentMode,
161
+ endpoints: List[str],
162
+ host: Text,
163
+ port: int,
164
+ ) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
165
+ """Parse and validate endpoints based on deployment mode."""
166
+ if deployment_mode == DeploymentMode.STANDARD:
167
+ if endpoints:
168
+ structlogger.warning(
169
+ "redis_connection_factory.standard_endpoints_ignored",
170
+ event_info="Parameter `endpoints` ignored in standard mode. "
171
+ "Only 'host' and 'port' are used for standard Redis connections.",
172
+ )
173
+ return []
174
+
175
+ if not endpoints:
176
+ endpoints = cls._get_default_endpoints(deployment_mode, host, port)
177
+
178
+ # Parse endpoints into appropriate format
179
+ parsed_endpoints = cls._parse_all_endpoints(endpoints, deployment_mode)
180
+
181
+ if not parsed_endpoints:
182
+ raise RasaException(
183
+ f"No valid '{deployment_mode.value}' endpoints provided"
184
+ )
185
+
186
+ return parsed_endpoints
187
+
188
+ @classmethod
189
+ def _get_default_endpoints(
190
+ cls,
191
+ deployment_mode: DeploymentMode,
192
+ host: Text,
193
+ port: int,
194
+ ) -> List[str]:
195
+ """Get default endpoints when none provided."""
196
+ if deployment_mode == DeploymentMode.CLUSTER:
197
+ structlogger.warning(
198
+ "redis_connection_factory.cluster_endpoints_not_provided",
199
+ event_info="No endpoints provided for cluster mode. "
200
+ "Using default 'host:port' configuration.",
201
+ )
202
+ return [f"{host}:{port}"]
203
+ elif deployment_mode == DeploymentMode.SENTINEL:
204
+ raise RasaException("Sentinel mode requires endpoints configuration")
205
+
206
+ return []
207
+
208
+ @classmethod
209
+ def _parse_single_endpoint(
210
+ cls, endpoint: str, deployment_mode: DeploymentMode
211
+ ) -> Optional[Union[Dict[str, Any], Tuple[str, int]]]:
212
+ """Parse a single endpoint string into the appropriate format."""
213
+ if not isinstance(endpoint, str):
214
+ structlogger.warning(
215
+ f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_type",
216
+ event_info=f"Invalid endpoint type for endpoint '{endpoint}'. "
217
+ "Expected string in 'host:port' format.",
218
+ )
219
+ return None
220
+
221
+ if ":" not in endpoint:
222
+ structlogger.warning(
223
+ f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_format",
224
+ event_info=f"Invalid format for endpoint '{endpoint}'. "
225
+ "Expected 'host:port'.",
226
+ )
227
+ return None
228
+
229
+ host, port_str = endpoint.rsplit(":", 1)
230
+ try:
231
+ port = int(port_str)
232
+ except ValueError:
233
+ structlogger.warning(
234
+ f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint",
235
+ event_info=f"Invalid port in endpoint '{endpoint}'. "
236
+ "Expected format 'host:port'.",
237
+ )
238
+ return None
239
+
240
+ return (host, port)
241
+
242
+ @classmethod
243
+ def _parse_all_endpoints(
244
+ cls,
245
+ endpoints: List[str],
246
+ deployment_mode: DeploymentMode,
247
+ ) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
248
+ """Parse a list of endpoint strings into appropriate format."""
249
+ parsed_endpoints = []
250
+ for endpoint in endpoints:
251
+ parsed = cls._parse_single_endpoint(endpoint, deployment_mode)
252
+ if parsed:
253
+ parsed_endpoints.append(parsed)
254
+ return parsed_endpoints
255
+
256
+ @classmethod
257
+ def _create_cluster_connection(
258
+ cls,
259
+ config: ClusterRedisConfig,
260
+ ) -> redis.RedisCluster:
261
+ """Create a Redis Cluster connection.
262
+
263
+ Note: Database parameter is ignored in cluster mode (always uses db=0).
264
+
265
+ Args:
266
+ config: Cluster configuration containing all connection parameters.
267
+
268
+ Returns:
269
+ redis.RedisCluster: Configured cluster connection.
270
+
271
+ Raises:
272
+ ConnectionException: If cluster initialization fails.
273
+ """
274
+ from redis.cluster import ClusterNode
275
+
276
+ structlogger.info(
277
+ "redis_connection_factory.cluster_mode",
278
+ event_info=f"Initializing Redis Cluster with {len(config.endpoints)} nodes",
279
+ )
280
+
281
+ cluster_nodes = [ClusterNode(host, port) for host, port in config.endpoints]
282
+ try:
283
+ redis_cluster: redis.RedisCluster = redis.RedisCluster(
284
+ startup_nodes=cluster_nodes,
285
+ username=config.username,
286
+ password=config.password,
287
+ ssl=config.use_ssl,
288
+ ssl_certfile=config.ssl_certfile,
289
+ ssl_keyfile=config.ssl_keyfile,
290
+ ssl_ca_certs=config.ssl_ca_certs,
291
+ socket_timeout=config.socket_timeout,
292
+ decode_responses=config.decode_responses,
293
+ )
294
+ except Exception as e:
295
+ raise ConnectionException(f"Error initializing Redis Cluster: {e}")
296
+
297
+ return redis_cluster
298
+
299
+ @classmethod
300
+ def _create_sentinel_connection(
301
+ cls,
302
+ config: SentinelRedisConfig,
303
+ ) -> redis.Redis:
304
+ """Create a Sentinel-managed Redis connection.
305
+
306
+ Connects to Redis master through Sentinel service discovery.
307
+ Tests connection with ping() before returning.
308
+
309
+ Args:
310
+ config: Sentinel configuration containing all connection parameters.
311
+
312
+ Returns:
313
+ redis.Redis: Connection to the Redis master via sentinel.
314
+
315
+ Raises:
316
+ ConnectionException: If sentinel initialization or connection test fails.
317
+ """
318
+ from redis.sentinel import Sentinel
319
+
320
+ structlogger.info(
321
+ "redis_connection_factory.sentinel_mode",
322
+ event_info=f"Initializing Redis Sentinel with {len(config.endpoints)} "
323
+ f"sentinel endpoints and service: {config.sentinel_service}",
324
+ )
325
+
326
+ # Configuration for Sentinel connection
327
+ sentinel_kwargs = {
328
+ "username": config.username,
329
+ "password": config.password,
330
+ "socket_timeout": config.socket_timeout,
331
+ }
332
+
333
+ # SSL configuration
334
+ if config.use_ssl:
335
+ sentinel_kwargs.update(
336
+ {
337
+ "ssl": config.use_ssl,
338
+ "ssl_certfile": config.ssl_certfile,
339
+ "ssl_keyfile": config.ssl_keyfile,
340
+ "ssl_ca_certs": config.ssl_ca_certs,
341
+ }
342
+ )
343
+
344
+ # Configuration for Redis client (master/replica)
345
+ client_kwargs = {
346
+ "db": config.db,
347
+ "decode_responses": config.decode_responses,
348
+ "socket_timeout": config.socket_timeout,
349
+ }
350
+
351
+ # Create Sentinel instance
352
+ try:
353
+ sentinel = Sentinel(config.endpoints, **sentinel_kwargs)
354
+ master = sentinel.master_for(config.sentinel_service, **client_kwargs)
355
+
356
+ # Test the connection
357
+ master.ping()
358
+
359
+ except Exception as e:
360
+ raise ConnectionException(f"Error initializing Redis Sentinel: {e}")
361
+
362
+ return master
363
+
364
+ @classmethod
365
+ def _create_standard_connection(
366
+ cls,
367
+ config: StandardRedisConfig,
368
+ ) -> redis.Redis:
369
+ """Create a standard Redis connection.
370
+
371
+ Args:
372
+ config: Standard configuration containing all connection parameters.
373
+
374
+ Returns:
375
+ redis.Redis: Configured Redis connection.
376
+ """
377
+ structlogger.info(
378
+ "redis_connection_factory.standard_mode",
379
+ event_info="Initializing Redis connection",
380
+ )
381
+ # Build connection arguments
382
+ connection_args: Dict[str, Any] = {
383
+ "host": config.host,
384
+ "port": int(config.port),
385
+ "db": config.db,
386
+ "password": config.password,
387
+ "socket_timeout": float(config.socket_timeout),
388
+ "ssl": config.use_ssl,
389
+ "ssl_certfile": config.ssl_certfile,
390
+ "ssl_keyfile": config.ssl_keyfile,
391
+ "ssl_ca_certs": config.ssl_ca_certs,
392
+ "username": config.username,
393
+ "decode_responses": config.decode_responses,
394
+ }
395
+
396
+ try:
397
+ standard_redis = redis.StrictRedis(**connection_args)
398
+ except Exception as e:
399
+ raise ConnectionException(f"Error initializing Redis connection: {e}")
400
+
401
+ return standard_redis
402
+
403
+ @classmethod
404
+ def _log_cluster_db_warning(cls, deployment_mode: DeploymentMode, db: int) -> None:
405
+ """Log warning if db parameter is set in cluster mode."""
406
+ if deployment_mode == DeploymentMode.CLUSTER and db != 0:
407
+ structlogger.warning(
408
+ "redis_connection_factory.cluster_db_ignored",
409
+ event_info=f"Database parameter 'db={db}' ignored in cluster mode. "
410
+ "Redis Cluster only supports database 0.",
411
+ )
rasa/core/run.py CHANGED
@@ -43,10 +43,20 @@ from rasa.utils import licensing
43
43
  logger = logging.getLogger() # get the root logger
44
44
 
45
45
 
46
- def create_http_input_channels(
46
+ def create_input_channels(
47
47
  channel: Optional[Text], credentials_file: Optional[Text]
48
48
  ) -> List[InputChannel]:
49
- """Instantiate the chosen input channel."""
49
+ """Instantiate the chosen input channel.
50
+
51
+ Args:
52
+ channel (optional): The name of the specific input channel to create.
53
+ credentials_file: Path to the credentials file containing channel credentials.
54
+
55
+ Returns:
56
+ A list of instantiated input channels. If a specific channel is provided,
57
+ it returns a list with that single channel. If no channel is specified,
58
+ it returns a list of all channels defined in the credentials file.
59
+ """
50
60
  if credentials_file:
51
61
  all_credentials = read_config_file(credentials_file)
52
62
  else:
@@ -257,7 +267,7 @@ def serve_application(
257
267
  if not channel and not credentials:
258
268
  channel = "cmdline"
259
269
 
260
- input_channels = create_http_input_channels(channel, credentials)
270
+ input_channels = create_input_channels(channel, credentials)
261
271
 
262
272
  if inspect:
263
273
  logger.info("Starting development inspector.")
@@ -4,12 +4,19 @@ from datetime import datetime
4
4
  from typing import Any, Dict, Iterable, Optional, Text
5
5
 
6
6
  import structlog
7
+ from pydantic import ValidationError
7
8
 
8
9
  import rasa.shared
9
10
  from rasa.core.brokers.broker import EventBroker
11
+ from rasa.core.redis_connection_factory import (
12
+ DeploymentMode,
13
+ RedisConfig,
14
+ RedisConnectionFactory,
15
+ )
10
16
  from rasa.core.tracker_stores.tracker_store import SerializedTrackerAsText, TrackerStore
11
17
  from rasa.shared.core.domain import Domain
12
18
  from rasa.shared.core.trackers import DialogueStateTracker
19
+ from rasa.shared.exceptions import RasaException
13
20
 
14
21
  structlogger = structlog.get_logger(__name__)
15
22
 
@@ -35,23 +42,34 @@ class RedisTrackerStore(TrackerStore, SerializedTrackerAsText):
35
42
  ssl_keyfile: Optional[Text] = None,
36
43
  ssl_certfile: Optional[Text] = None,
37
44
  ssl_ca_certs: Optional[Text] = None,
45
+ deployment_mode: Text = DeploymentMode.STANDARD.value,
46
+ endpoints: Optional[list] = None,
47
+ sentinel_service: Optional[Text] = None,
38
48
  **kwargs: Dict[Text, Any],
39
49
  ) -> None:
40
50
  """Initializes the tracker store."""
41
- import redis
42
-
43
- self.red = redis.StrictRedis(
44
- host=host,
45
- port=port,
46
- db=db,
47
- username=username,
48
- password=password,
49
- ssl=use_ssl,
50
- ssl_keyfile=ssl_keyfile,
51
- ssl_certfile=ssl_certfile,
52
- ssl_ca_certs=ssl_ca_certs,
53
- decode_responses=True,
54
- )
51
+
52
+ # Create Redis connection using the factory directly
53
+ try:
54
+ config = RedisConfig(
55
+ host=host,
56
+ port=port,
57
+ db=db,
58
+ username=username,
59
+ password=password,
60
+ use_ssl=use_ssl,
61
+ ssl_keyfile=ssl_keyfile,
62
+ ssl_certfile=ssl_certfile,
63
+ ssl_ca_certs=ssl_ca_certs,
64
+ deployment_mode=deployment_mode,
65
+ endpoints=endpoints,
66
+ sentinel_service=sentinel_service,
67
+ decode_responses=True,
68
+ )
69
+ self.red = RedisConnectionFactory.create_connection(config)
70
+ except ValidationError as e:
71
+ raise RasaException(f"Invalid Redis configuration: {e}")
72
+
55
73
  self.record_exp = record_exp
56
74
 
57
75
  self.key_prefix = DEFAULT_REDIS_TRACKER_STORE_KEY_PREFIX
@@ -27,6 +27,13 @@ from rasa.core.constants import (
27
27
  POSTGRESQL_MAX_OVERFLOW,
28
28
  POSTGRESQL_POOL_SIZE,
29
29
  POSTGRESQL_SCHEMA,
30
+ SQL_TRACKER_STORE_SSL_MODE_ENV_VAR_NAME,
31
+ SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE_ENV_VAR_NAME,
32
+ )
33
+ from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
34
+ IAMCredentialsProviderInput,
35
+ SupportedServiceType,
36
+ create_iam_credentials_provider,
30
37
  )
31
38
  from rasa.core.tracker_stores.tracker_store import (
32
39
  SerializedTrackerAsText,
@@ -85,6 +92,21 @@ def is_postgresql_url(url: Union[Text, "URL"]) -> bool:
85
92
  return url.drivername == "postgresql"
86
93
 
87
94
 
95
+ def get_ssl_args() -> Dict[str, Any]:
96
+ """Get SSL arguments for PostgreSQL connection from environment variables."""
97
+ ssl_mode = os.getenv(SQL_TRACKER_STORE_SSL_MODE_ENV_VAR_NAME)
98
+ ssl_root_cert = os.getenv(SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE_ENV_VAR_NAME)
99
+ ssl_args = {}
100
+
101
+ if ssl_mode:
102
+ ssl_args["sslmode"] = ssl_mode
103
+
104
+ if ssl_root_cert:
105
+ ssl_args["sslrootcert"] = ssl_root_cert
106
+
107
+ return ssl_args
108
+
109
+
88
110
  def create_engine_kwargs(url: Union[Text, "URL"]) -> Dict[Text, Any]:
89
111
  """Get `sqlalchemy.create_engine()` kwargs.
90
112
 
@@ -119,6 +141,14 @@ def create_engine_kwargs(url: Union[Text, "URL"]) -> Dict[Text, Any]:
119
141
  os.environ.get(POSTGRESQL_MAX_OVERFLOW, POSTGRESQL_DEFAULT_MAX_OVERFLOW)
120
142
  )
121
143
 
144
+ ssl_args = get_ssl_args()
145
+
146
+ if ssl_args:
147
+ if "connect_args" in kwargs:
148
+ kwargs["connect_args"].update(ssl_args)
149
+ else:
150
+ kwargs["connect_args"] = ssl_args
151
+
122
152
  return kwargs
123
153
 
124
154
 
@@ -197,6 +227,32 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
197
227
 
198
228
  port = validate_port(port)
199
229
 
230
+ iam_credentials_provider = create_iam_credentials_provider(
231
+ IAMCredentialsProviderInput(
232
+ service_name=SupportedServiceType.TRACKER_STORE,
233
+ username=username,
234
+ host=host,
235
+ port=port,
236
+ )
237
+ )
238
+ if iam_credentials_provider is not None:
239
+ credentials = iam_credentials_provider.get_credentials()
240
+ if credentials.auth_token:
241
+ password = credentials.auth_token
242
+ structlogger.debug(
243
+ "sql_tracker_store.iam_credentials_provider",
244
+ event_info="Using temporary auth token from "
245
+ "IAM credentials provider.",
246
+ )
247
+ else:
248
+ structlogger.warning(
249
+ "sql_tracker_store.iam_credentials_provider.no_auth_token",
250
+ event_info=(
251
+ "IAM credentials provider did not return an auth token. "
252
+ "Falling back to provided password or no password."
253
+ ),
254
+ )
255
+
200
256
  engine_url = self.get_db_url(
201
257
  dialect, host, port, db, username, password, login_db, query
202
258
  )
@@ -272,7 +328,7 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
272
328
  host: Database network host.
273
329
  port: Database network port.
274
330
  db: Database name.
275
- username: User name to use when connecting to the database.
331
+ username: Username to use when connecting to the database.
276
332
  password: Password for database user.
277
333
  login_db: Alternative database name to which initially connect, and create
278
334
  the database specified by `db` (PostgreSQL only).
@@ -219,11 +219,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
219
219
  if self.vector_store is not None:
220
220
  with self._model_storage.write_to(self._resource) as model_path:
221
221
  self.vector_store.save_local(model_path)
222
- else:
223
- structlogger.warning(
224
- "flow_retrieval.persist_vector_store.not_initialized",
225
- event_info="Vector store is None, not persisted.",
226
- )
227
222
 
228
223
  def _persist_config(self) -> None:
229
224
  with self._model_storage.write_to(self._resource) as path:
@@ -249,6 +244,16 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
249
244
  )
250
245
 
251
246
  flows_to_embedd = flows.exclude_link_only_flows()
247
+
248
+ if not flows_to_embedd:
249
+ structlogger.debug(
250
+ "flow_retrieval.populate_vector_store.no_flows_to_embed",
251
+ event_info=(
252
+ "No flows to embed in the vector store, skipping population."
253
+ ),
254
+ )
255
+ return
256
+
252
257
  embeddings = self._create_embedder(self.config)
253
258
  documents = self._generate_flow_documents(flows_to_embedd, domain)
254
259
  try:
@@ -420,10 +425,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
420
425
  The top k documents with similarity scores.
421
426
  """
422
427
  if self.vector_store is None:
423
- structlogger.error(
424
- "flow_retrieval.query_vector_store.vector_store_not_configured",
425
- event_info="Vector store is not configured",
426
- )
427
428
  return []
428
429
  try:
429
430
  documents_with_scores = (