rasa-pro 3.14.0.dev7__py3-none-any.whl → 3.14.0.dev8__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.dev8.dist-info/METADATA +199 -0
  463. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.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.dev8.dist-info}/NOTICE +0 -0
  470. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
  471. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
rasa/shared/exceptions.py CHANGED
@@ -163,6 +163,10 @@ class ProviderClientAPIException(RasaException):
163
163
  return s
164
164
 
165
165
 
166
+ class LLMToolResponseDecodeError(ProviderClientAPIException):
167
+ """Raised when a JSON decoding error occurs in LLM tool response."""
168
+
169
+
166
170
  class ProviderClientValidationError(RasaException):
167
171
  """Raised for errors that occur during validation of the API client."""
168
172
 
@@ -173,3 +177,11 @@ class FinetuningDataPreparationException(RasaException):
173
177
 
174
178
  class AgentInitializationException(RasaException):
175
179
  """Raised when there is an error during the initialization of an agent."""
180
+
181
+
182
+ class AgentAuthInitializationException(RasaException):
183
+ """Raised when there is an error during the initialization of agent auth client."""
184
+
185
+
186
+ class AuthenticationError(RasaException):
187
+ """Raised when there is an authentication error."""
@@ -207,6 +207,12 @@ class TrainingDataImporter(ABC):
207
207
  )
208
208
  ]
209
209
 
210
+ return TrainingDataImporter.wrap_in_builtins(importers)
211
+
212
+ @staticmethod
213
+ def wrap_in_builtins(
214
+ importers: List["TrainingDataImporter"],
215
+ ) -> "TrainingDataImporter":
210
216
  return LanguageImporter(
211
217
  E2EImporter(
212
218
  FlowSyncImporter(ResponsesSyncImporter(CombinedDataImporter(importers)))
@@ -1,9 +1,37 @@
1
- from typing import Iterable, List, Optional, Text
1
+ from typing import Any, Dict, Iterable, List, Optional, Text
2
+
3
+ from pydantic import BaseModel, Field
2
4
 
3
5
  from rasa.shared.core.domain import Domain
4
6
  from rasa.shared.core.flows import FlowsList
7
+ from rasa.shared.core.flows.yaml_flows_io import KEY_FLOWS, get_flows_as_json
5
8
  from rasa.shared.core.training_data.structures import StoryGraph
9
+ from rasa.shared.importers.importer import TrainingDataImporter
10
+ from rasa.shared.nlu.training_data.formats.rasa_yaml import RasaYAMLWriter
6
11
  from rasa.shared.nlu.training_data.training_data import TrainingData
12
+ from rasa.utils.json_utils import extract_values
13
+
14
+
15
+ class CALMUserData(BaseModel):
16
+ """All pieces that will be uploaded to Rasa Studio."""
17
+
18
+ flows: Dict[str, Any] = Field(default_factory=dict)
19
+ domain: Dict[str, Any] = Field(default_factory=dict)
20
+ config: Dict[str, Any] = Field(default_factory=dict)
21
+ endpoints: Dict[str, Any] = Field(default_factory=dict)
22
+ nlu: Dict[str, Any] = Field(default_factory=dict)
23
+
24
+
25
+ DOMAIN_KEYS = [
26
+ "version",
27
+ "actions",
28
+ "responses",
29
+ "slots",
30
+ "intents",
31
+ "entities",
32
+ "forms",
33
+ "session_config",
34
+ ]
7
35
 
8
36
 
9
37
  def training_data_from_paths(paths: Iterable[Text], language: Text) -> TrainingData:
@@ -40,3 +68,51 @@ def flows_from_paths(files: List[Text], domain: Optional[Domain] = None) -> Flow
40
68
  )
41
69
  flows.validate(domain)
42
70
  return flows
71
+
72
+
73
+ def extract_calm_import_parts_from_importer(
74
+ importer: TrainingDataImporter,
75
+ config: Optional[Dict[str, Any]] = None,
76
+ endpoints: Optional[Dict[str, Any]] = None,
77
+ ) -> CALMUserData:
78
+ """Extracts CALMUserData from a TrainingDataImporter.
79
+
80
+ Args:
81
+ importer: The training data importer
82
+ data_paths: The path(s) to the training data for flows
83
+ config: Optional config dict, if not provided will use importer.get_config()
84
+ endpoints: Optional endpoints dict, defaults to empty dict
85
+
86
+ Returns:
87
+ CALMUserData containing flows, domain, config, endpoints, and nlu data
88
+ """
89
+ # Extract config
90
+ if config is None:
91
+ config = importer.get_config()
92
+
93
+ # Extract domain
94
+ domain_from_files = importer.get_user_domain().as_dict()
95
+ domain = extract_values(domain_from_files, DOMAIN_KEYS)
96
+
97
+ # Extract flows
98
+ flows = importer.get_user_flows()
99
+ flows_dict = {KEY_FLOWS: get_flows_as_json(flows)}
100
+
101
+ # Extract NLU data
102
+ nlu_data = importer.get_nlu_data()
103
+ nlu_examples = nlu_data.filter_training_examples(
104
+ lambda ex: ex.get("intent") in nlu_data.intents
105
+ )
106
+ nlu_dict = RasaYAMLWriter().training_data_to_dict(nlu_examples)
107
+
108
+ # Use provided endpoints or default to empty dict
109
+ if endpoints is None:
110
+ endpoints = {}
111
+
112
+ return CALMUserData(
113
+ flows=flows_dict or {},
114
+ domain=domain or {},
115
+ config=config or {},
116
+ endpoints=endpoints or {},
117
+ nlu=nlu_dict or {},
118
+ )
@@ -72,6 +72,9 @@ schema;responses:
72
72
  allowempty: True
73
73
  channel:
74
74
  type: "str"
75
+ allow_interruptions:
76
+ type: "bool"
77
+ required: False
75
78
  metadata:
76
79
  type: "any"
77
80
  condition:
@@ -1,87 +1,103 @@
1
1
  from typing import Any, Dict, Optional
2
2
 
3
+ import boto3
3
4
  import structlog
4
- from litellm import validate_environment
5
+ from botocore.exceptions import BotoCoreError, ClientError
5
6
 
6
7
  from rasa.shared.constants import (
7
8
  API_BASE_CONFIG_KEY,
8
9
  API_VERSION_CONFIG_KEY,
9
10
  AWS_ACCESS_KEY_ID_CONFIG_KEY,
10
- AWS_ACCESS_KEY_ID_ENV_VAR,
11
+ AWS_BEDROCK_PROVIDER,
11
12
  AWS_REGION_NAME_CONFIG_KEY,
12
- AWS_REGION_NAME_ENV_VAR,
13
+ AWS_SAGEMAKER_CHAT_PROVIDER,
14
+ AWS_SAGEMAKER_PROVIDER,
13
15
  AWS_SECRET_ACCESS_KEY_CONFIG_KEY,
14
- AWS_SECRET_ACCESS_KEY_ENV_VAR,
15
16
  AWS_SESSION_TOKEN_CONFIG_KEY,
16
- AWS_SESSION_TOKEN_ENV_VAR,
17
17
  AZURE_API_BASE_ENV_VAR,
18
18
  AZURE_API_VERSION_ENV_VAR,
19
19
  DEPLOYMENT_CONFIG_KEY,
20
20
  )
21
21
  from rasa.shared.exceptions import ProviderClientValidationError
22
- from rasa.shared.providers.embedding._base_litellm_embedding_client import (
23
- _VALIDATE_ENVIRONMENT_MISSING_KEYS_KEY,
24
- )
22
+ from rasa.shared.utils.io import resolve_environment_variables
25
23
 
26
24
  structlogger = structlog.get_logger()
27
25
 
28
26
 
29
27
  def validate_aws_setup_for_litellm_clients(
30
- litellm_model_name: str, litellm_call_kwargs: dict, source_log: str
28
+ litellm_model_name: str, litellm_call_kwargs: Dict, source_log: str, provider: str
31
29
  ) -> None:
32
- """Validates the AWS setup for LiteLLM clients to ensure all required
33
- environment variables or corresponding call kwargs are set.
30
+ """Validates the AWS setup for LiteLLM clients to ensure credentials are set.
34
31
 
35
32
  Args:
36
33
  litellm_model_name (str): The name of the LiteLLM model being validated.
37
34
  litellm_call_kwargs (dict): Additional keyword arguments passed to the client,
38
35
  which may include configuration values for AWS credentials.
39
36
  source_log (str): The source log identifier for structured logging.
37
+ provider (str): The provider for which the validation is being performed.
40
38
 
41
39
  Raises:
42
40
  ProviderClientValidationError: If any required AWS environment variable
43
41
  or corresponding configuration key is missing.
44
42
  """
45
-
46
- # Mapping of environment variable names to their corresponding config keys
47
- envs_to_args = {
48
- AWS_ACCESS_KEY_ID_ENV_VAR: AWS_ACCESS_KEY_ID_CONFIG_KEY,
49
- AWS_SECRET_ACCESS_KEY_ENV_VAR: AWS_SECRET_ACCESS_KEY_CONFIG_KEY,
50
- AWS_REGION_NAME_ENV_VAR: AWS_REGION_NAME_CONFIG_KEY,
51
- AWS_SESSION_TOKEN_ENV_VAR: AWS_SESSION_TOKEN_CONFIG_KEY,
52
- }
53
-
54
- # Validate the environment setup for the model
55
- validation_info = validate_environment(litellm_model_name)
56
- missing_environment_variables = validation_info.get(
57
- _VALIDATE_ENVIRONMENT_MISSING_KEYS_KEY, []
43
+ # expand environment variables if referenced in the config
44
+ resolved_litellm_call_kwargs: Dict = resolve_environment_variables(
45
+ litellm_call_kwargs
46
+ ) # type: ignore[assignment]
47
+
48
+ # boto3 only accepts bedrock and sagemaker as valid clients
49
+ # therefore we need to convert the provider name if it is defined
50
+ # as sagemaker_chat
51
+ provider = (
52
+ AWS_SAGEMAKER_PROVIDER if provider == AWS_SAGEMAKER_CHAT_PROVIDER else provider
58
53
  )
59
- # Filter out missing environment variables that have been set trough arguments
60
- # in extra parameters
61
- missing_environment_variables = [
62
- missing_env_var
63
- for missing_env_var in missing_environment_variables
64
- if litellm_call_kwargs.get(envs_to_args.get(missing_env_var)) is None
65
- ]
66
54
 
67
- if missing_environment_variables:
68
- missing_environment_details = [
69
- (
70
- f"'{missing_env_var}' environment variable or "
71
- f"'{envs_to_args.get(missing_env_var)}' config key"
72
- )
73
- for missing_env_var in missing_environment_variables
55
+ # if the AWS credentials are defined in the endpoints yaml model config,
56
+ # either as referenced secret env vars or direct values, we need to pass them
57
+ # to the boto3 client to ensure that the client can connect to the AWS service.
58
+ additional_kwargs: Dict[str, Any] = {}
59
+ if AWS_ACCESS_KEY_ID_CONFIG_KEY in resolved_litellm_call_kwargs:
60
+ additional_kwargs[AWS_ACCESS_KEY_ID_CONFIG_KEY] = resolved_litellm_call_kwargs[
61
+ AWS_ACCESS_KEY_ID_CONFIG_KEY
74
62
  ]
63
+ if AWS_SECRET_ACCESS_KEY_CONFIG_KEY in resolved_litellm_call_kwargs:
64
+ additional_kwargs[AWS_SECRET_ACCESS_KEY_CONFIG_KEY] = (
65
+ resolved_litellm_call_kwargs[AWS_SECRET_ACCESS_KEY_CONFIG_KEY]
66
+ )
67
+ if AWS_SESSION_TOKEN_CONFIG_KEY in resolved_litellm_call_kwargs:
68
+ additional_kwargs[AWS_SESSION_TOKEN_CONFIG_KEY] = resolved_litellm_call_kwargs[
69
+ AWS_SESSION_TOKEN_CONFIG_KEY
70
+ ]
71
+ if AWS_REGION_NAME_CONFIG_KEY in resolved_litellm_call_kwargs:
72
+ additional_kwargs["region_name"] = resolved_litellm_call_kwargs[
73
+ AWS_REGION_NAME_CONFIG_KEY
74
+ ]
75
+
76
+ try:
77
+ # We are using the boto3 client because it can discover the AWS credentials
78
+ # from the environment variables, credentials file, or IAM roles.
79
+ # This is necessary to ensure that the client can connect to the AWS service.
80
+ aws_client = boto3.client(provider, **additional_kwargs)
81
+
82
+ # Using different method calls available to different AWS clients
83
+ # to test the connection
84
+ if provider == AWS_SAGEMAKER_PROVIDER:
85
+ aws_client.list_models()
86
+ elif provider == AWS_BEDROCK_PROVIDER:
87
+ aws_client.get_model_invocation_logging_configuration()
88
+
89
+ except (ClientError, BotoCoreError) as exc:
75
90
  event_info = (
76
- f"The following environment variables or configuration keys are "
77
- f"missing: "
78
- f"{', '.join(missing_environment_details)}. "
79
- f"These settings are required for API calls."
91
+ f"Failed to validate AWS setup for LiteLLM clients: {exc}. "
92
+ f"Ensure that you are using one of the available authentication methods:"
93
+ f"credentials file, environment variables, or IAM roles. "
94
+ f"Also, ensure that the AWS region is set correctly. "
80
95
  )
81
96
  structlogger.error(
82
- f"{source_log}.validate_aws_environment_variables",
97
+ f"{source_log}.validate_aws_credentials_for_litellm_clients",
83
98
  event_info=event_info,
84
- missing_environment_variables=missing_environment_variables,
99
+ exception=str(exc),
100
+ model_name=litellm_model_name,
85
101
  )
86
102
  raise ProviderClientValidationError(event_info)
87
103
 
@@ -37,6 +37,7 @@ class DefaultLiteLLMEmbeddingClient(_BaseLiteLLMEmbeddingClient):
37
37
 
38
38
  @classmethod
39
39
  def from_config(cls, config: Dict[str, Any]) -> "DefaultLiteLLMEmbeddingClient":
40
+ """Creates a DefaultLiteLLMEmbeddingClient instance from a config dict."""
40
41
  default_config = DefaultLiteLLMClientConfig.from_dict(config)
41
42
  return cls(
42
43
  model=default_config.model,
@@ -121,6 +122,7 @@ class DefaultLiteLLMEmbeddingClient(_BaseLiteLLMEmbeddingClient):
121
122
  self._litellm_model_name,
122
123
  self._litellm_extra_parameters,
123
124
  "default_litellm_embedding_client",
125
+ provider=self.provider,
124
126
  )
125
127
  else:
126
128
  super().validate_client_setup()
@@ -158,7 +158,7 @@ class _BaseLiteLLMClient:
158
158
  )
159
159
  return self._format_response(response)
160
160
  except Exception as e:
161
- raise ProviderClientAPIException(e)
161
+ raise ProviderClientAPIException(e) from e
162
162
 
163
163
  @suppress_logs(log_level=logging.WARNING)
164
164
  async def acompletion(
@@ -209,7 +209,7 @@ class _BaseLiteLLMClient:
209
209
  "In case you are getting OpenAI connection errors, such as missing "
210
210
  "API key, your configuration is incorrect."
211
211
  )
212
- raise ProviderClientAPIException(e, message)
212
+ raise ProviderClientAPIException(e, message) from e
213
213
 
214
214
  def _get_formatted_messages(
215
215
  self, messages: Union[List[dict], List[str], str]
@@ -39,6 +39,7 @@ class DefaultLiteLLMClient(_BaseLiteLLMClient):
39
39
 
40
40
  @classmethod
41
41
  def from_config(cls, config: Dict[str, Any]) -> DefaultLiteLLMClient:
42
+ """Creates a DefaultLiteLLMClient instance from a configuration dictionary."""
42
43
  default_config = DefaultLiteLLMClientConfig.from_dict(config)
43
44
  return cls(
44
45
  model=default_config.model,
@@ -110,6 +111,7 @@ class DefaultLiteLLMClient(_BaseLiteLLMClient):
110
111
  self._litellm_model_name,
111
112
  self._litellm_extra_parameters,
112
113
  "default_litellm_llm_client",
114
+ provider=self.provider,
113
115
  )
114
116
  else:
115
117
  super().validate_client_setup()
@@ -9,7 +9,7 @@ from litellm.utils import ChatCompletionMessageToolCall
9
9
  from pydantic import BaseModel
10
10
 
11
11
  from rasa.shared.constants import KEY_TOOL_CALLS
12
- from rasa.shared.exceptions import ProviderClientAPIException
12
+ from rasa.shared.exceptions import LLMToolResponseDecodeError
13
13
 
14
14
  structlogger = structlog.get_logger()
15
15
 
@@ -75,13 +75,13 @@ class LLMToolCall(BaseModel):
75
75
  tool_name=data.function.name,
76
76
  tool_call=data.function.arguments,
77
77
  )
78
- raise ProviderClientAPIException(
78
+ raise LLMToolResponseDecodeError(
79
79
  original_exception=e,
80
80
  message=(
81
- f"Invalid arguments for tool call `{data.function.name}`: "
81
+ f"Invalid arguments for tool call - `{data.function.name}`: "
82
82
  f"`{data.function.arguments}`"
83
83
  ),
84
- )
84
+ ) from e
85
85
 
86
86
  return cls(
87
87
  id=data.id,
@@ -17,6 +17,7 @@ from typing import (
17
17
  Optional,
18
18
  Sequence,
19
19
  Text,
20
+ Tuple,
20
21
  Type,
21
22
  )
22
23
 
@@ -102,9 +103,12 @@ def sort_list_of_dicts_by_first_key(dicts: List[Dict]) -> List[Dict]:
102
103
 
103
104
  def cached_method(f: Callable[..., Any]) -> Callable[..., Any]:
104
105
  """Caches method calls based on the call's `args` and `kwargs`.
106
+
105
107
  Works for `async` and `sync` methods. Don't apply this to functions.
108
+
106
109
  Args:
107
110
  f: The decorated method whose return value should be cached.
111
+
108
112
  Returns:
109
113
  The return value which the method gives for the first call with the given
110
114
  arguments.
@@ -358,6 +362,7 @@ def validate_environment(
358
362
  component_name: str,
359
363
  ) -> None:
360
364
  """Make sure all needed requirements for a component are met.
365
+
361
366
  Args:
362
367
  required_env_vars: List of environment variables that should be set
363
368
  required_packages: List of packages that should be installed
@@ -389,3 +394,22 @@ Sign up at: https://feedback.rasa.com
389
394
  {separator}
390
395
  """
391
396
  print_success(message)
397
+
398
+
399
+ def conditional_import(module_name: str, class_name: str) -> Tuple[Any, bool]:
400
+ """Conditionally import a class, returning (class, is_available) tuple.
401
+
402
+ Args:
403
+ module_name: The module path to import from
404
+ class_name: The class name to import
405
+
406
+ Returns:
407
+ A tuple of (class, is_available) where class is the imported class
408
+ or None if import failed, and is_available is a boolean indicating
409
+ whether the import was successful.
410
+ """
411
+ try:
412
+ module = __import__(module_name, fromlist=[class_name])
413
+ return getattr(module, class_name), True
414
+ except ImportError:
415
+ return None, False
rasa/shared/utils/llm.py CHANGED
@@ -762,7 +762,7 @@ def get_prompt_template(
762
762
  log_source_method=log_source_method,
763
763
  )
764
764
  return prompt_template
765
- except (FileIOException, FileNotFoundException):
765
+ except (FileIOException, FileNotFoundException) as e:
766
766
  structlogger.warning(
767
767
  "utils.llm.get_prompt_template" ".failed_to_read_custom_prompt_template",
768
768
  event_info=(
@@ -770,6 +770,7 @@ def get_prompt_template(
770
770
  ),
771
771
  log_source_component=log_source_component,
772
772
  log_source_method=log_source_method,
773
+ error=str(e),
773
774
  )
774
775
  return default_prompt_template
775
776
 
@@ -2,13 +2,18 @@
2
2
 
3
3
  import asyncio
4
4
  import warnings
5
- from contextlib import AsyncExitStack
6
- from typing import Any, Dict, Optional
5
+ from contextlib import AsyncExitStack, asynccontextmanager
6
+ from typing import Any, AsyncIterator, ClassVar, Dict, List, Optional
7
7
 
8
8
  import structlog
9
+ from httpx import HTTPStatusError
9
10
  from mcp import ClientSession
10
11
  from mcp.client.streamable_http import streamablehttp_client
11
12
 
13
+ from rasa.shared.agents.auth.agent_auth_manager import AgentAuthManager
14
+ from rasa.shared.agents.auth.auth_strategy import AgentAuthStrategy
15
+ from rasa.shared.exceptions import AuthenticationError
16
+
12
17
  structlogger = structlog.get_logger()
13
18
 
14
19
 
@@ -22,16 +27,26 @@ warnings.filterwarnings(
22
27
 
23
28
  class MCPServerConnection:
24
29
  """
25
- Manages connection to an MCP server.
30
+ Manages connection to an MCP server, with optional authentication.
26
31
 
27
- This class handles the lifecycle of connections to MCP servers,
28
- including connection establishment, session management, and cleanup.
32
+ This class handles:
33
+ - Connection establishment and cleanup
34
+ - Session lifecycle management
35
+ - Authentication via AgentAuthManager (API Key, OAuth2, mTLS, etc.)
29
36
  """
30
37
 
31
38
  # Timeout for ping operations in seconds
32
39
  PING_TIMEOUT_SECONDS = 3.0
33
40
 
34
- def __init__(self, server_name: str, server_url: str, server_type: str):
41
+ _SUPPORTED_SERVER_TYPES: ClassVar[List[str]] = ["http", "https"]
42
+
43
+ def __init__(
44
+ self,
45
+ server_name: str,
46
+ server_url: str,
47
+ server_type: str,
48
+ auth_manager: Optional[AgentAuthManager] = None,
49
+ ):
35
50
  """
36
51
  Initialize the MCP server connection.
37
52
 
@@ -39,43 +54,101 @@ class MCPServerConnection:
39
54
  server_name: Server name to identify the server
40
55
  server_url: Server URL
41
56
  server_type: Server type (currently only 'http' is supported)
57
+ auth_manager: Optional AgentAuthManager instance for this connection
42
58
  """
43
59
  self.server_name = server_name
44
60
  self.server_url = server_url
45
61
  self.server_type = server_type
62
+ self._auth_manager = auth_manager
46
63
  self.session: Optional[ClientSession] = None
47
64
  self.exit_stack: Optional[AsyncExitStack] = None
48
65
 
49
66
  @classmethod
50
67
  def from_config(cls, server_config: Dict[str, Any]) -> "MCPServerConnection":
51
68
  """Initialize the MCP server connection from a configuration dictionary."""
69
+ auth_config = server_config.get("additional_params")
70
+ _auth_manager = AgentAuthManager.load_auth(auth_config) if auth_config else None
52
71
  return cls(
53
72
  server_config["name"],
54
73
  server_config["url"],
55
74
  server_config.get("type", "http"),
75
+ _auth_manager,
56
76
  )
57
77
 
78
+ @staticmethod
79
+ @asynccontextmanager
80
+ async def open_mcp_session(
81
+ url: str, auth_strategy: Optional[AgentAuthStrategy] = None
82
+ ) -> AsyncIterator[ClientSession]:
83
+ """
84
+ Open a streamable MCP session, ensuring that initialization
85
+ completes before yielding.
86
+ """
87
+ async with streamablehttp_client(url, auth=auth_strategy) as (
88
+ read_stream,
89
+ write_stream,
90
+ _,
91
+ ):
92
+ async with ClientSession(read_stream, write_stream) as session:
93
+ await session.initialize() # handshake done here
94
+ yield session
95
+
58
96
  async def connect(self) -> None:
59
97
  """Establish connection to the MCP server.
60
98
 
61
99
  Raises:
62
100
  ValueError: If the server type is not supported.
63
101
  ConnectionError: If connection fails.
102
+ AuthenticationError: If authentication fails.
64
103
  """
65
- if self.server_type != "http":
104
+ if self.server_type not in self._SUPPORTED_SERVER_TYPES:
66
105
  raise ValueError(f"Unsupported server type: {self.server_type}")
67
106
 
68
107
  # Create a new exit stack for this connection to avoid task boundary issues
69
108
  self.exit_stack = AsyncExitStack()
70
109
 
71
110
  try:
72
- read_stream, write_stream, _ = await self.exit_stack.enter_async_context(
73
- streamablehttp_client(self.server_url)
111
+ # Get authentication strategy that adheres to httpx.Auth.
112
+ auth_strategy = (
113
+ self._auth_manager.get_auth() if self._auth_manager else None
74
114
  )
115
+
116
+ # Register the wrapped context manager in the stack
75
117
  self.session = await self.exit_stack.enter_async_context(
76
- ClientSession(read_stream, write_stream)
118
+ self.open_mcp_session(self.server_url, auth_strategy)
77
119
  )
78
- await self.session.initialize()
120
+
121
+ except Exception as eg:
122
+ for exc in getattr(eg, "exceptions", [eg]):
123
+ event_info = (
124
+ f"Failed to connect to MCP server `{self.server_name}`: {exc!s}"
125
+ )
126
+ if isinstance(exc, HTTPStatusError):
127
+ status_code = exc.response.status_code
128
+ structlogger.error(
129
+ "mcp_server_connection.connect.http_status_error",
130
+ event_info=event_info,
131
+ server_name=self.server_name,
132
+ server_url=self.server_url,
133
+ status_code=status_code,
134
+ response_text=exc.response.reason_phrase,
135
+ )
136
+ await self._cleanup()
137
+ if status_code in [400, 401, 403]:
138
+ raise AuthenticationError(eg) from eg
139
+ else:
140
+ raise ConnectionError(eg) from eg
141
+ else:
142
+ structlogger.error(
143
+ "mcp_server_connection.connect.other_exception",
144
+ event_info=event_info,
145
+ server_name=self.server_name,
146
+ server_url=self.server_url,
147
+ error=str(exc),
148
+ )
149
+ await self._cleanup()
150
+ raise ConnectionError(eg) from eg
151
+
79
152
  except asyncio.CancelledError as e:
80
153
  event_info = f"Connection to MCP server `{self.server_name}` was cancelled."
81
154
  structlogger.error(
@@ -88,18 +161,6 @@ class MCPServerConnection:
88
161
  await self._cleanup()
89
162
  raise ConnectionError(e) from e
90
163
 
91
- except Exception as e:
92
- event_info = f"Failed to connect to MCP server `{self.server_name}`: {e}"
93
- structlogger.error(
94
- "mcp_server_connection.connect.connection_failed",
95
- event_info=event_info,
96
- server_name=self.server_name,
97
- server_url=self.server_url,
98
- )
99
- # Clean up on error
100
- await self._cleanup()
101
- raise ConnectionError(e) from e
102
-
103
164
  async def ensure_active_session(self) -> ClientSession:
104
165
  """
105
166
  Ensure an active session is available.
@@ -0,0 +1,20 @@
1
+ """MCP utilities."""
2
+
3
+
4
+ def mcp_server_exists(mcp_server: str) -> bool:
5
+ """Check if an MCP server exists in the configured endpoints.
6
+
7
+ Args:
8
+ mcp_server: The name of the MCP server to check.
9
+
10
+ Returns:
11
+ True if the MCP server exists, False otherwise.
12
+ """
13
+ from rasa.core.available_endpoints import AvailableEndpoints
14
+
15
+ mcp_server_list = AvailableEndpoints.get_instance().mcp_servers
16
+ if mcp_server_list is None:
17
+ return False
18
+
19
+ mcp_server_names = [server.name for server in mcp_server_list]
20
+ return mcp_server in mcp_server_names