rasa-pro 3.13.7__py3-none-any.whl → 3.14.0a1__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 (387) hide show
  1. rasa/builder/README.md +120 -0
  2. rasa/builder/__init__.py +0 -0
  3. rasa/builder/auth.py +176 -0
  4. rasa/builder/config.py +91 -0
  5. rasa/builder/copilot/__init__.py +0 -0
  6. rasa/builder/copilot/constants.py +28 -0
  7. rasa/builder/copilot/copilot.py +376 -0
  8. rasa/builder/copilot/copilot_response_handler.py +522 -0
  9. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  10. rasa/builder/copilot/exceptions.py +32 -0
  11. rasa/builder/copilot/models.py +464 -0
  12. rasa/builder/copilot/prompts/__init__.py +0 -0
  13. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +771 -0
  14. rasa/builder/copilot/signing.py +305 -0
  15. rasa/builder/copilot/telemetry.py +200 -0
  16. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  17. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  18. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  19. rasa/builder/document_retrieval/__init__.py +0 -0
  20. rasa/builder/document_retrieval/constants.py +15 -0
  21. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  22. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  23. rasa/builder/document_retrieval/models.py +62 -0
  24. rasa/builder/download.py +147 -0
  25. rasa/builder/exceptions.py +91 -0
  26. rasa/builder/guardrails/__init__.py +1 -0
  27. rasa/builder/guardrails/constants.py +9 -0
  28. rasa/builder/guardrails/exceptions.py +4 -0
  29. rasa/builder/guardrails/lakera.py +206 -0
  30. rasa/builder/guardrails/models.py +231 -0
  31. rasa/builder/guardrails/store.py +238 -0
  32. rasa/builder/guardrails/utils.py +328 -0
  33. rasa/builder/job_manager.py +87 -0
  34. rasa/builder/jobs.py +276 -0
  35. rasa/builder/llm_service.py +246 -0
  36. rasa/builder/logging_utils.py +265 -0
  37. rasa/builder/main.py +199 -0
  38. rasa/builder/models.py +216 -0
  39. rasa/builder/project_generator.py +462 -0
  40. rasa/builder/project_info.py +72 -0
  41. rasa/builder/scrape_rasa_docs.py +97 -0
  42. rasa/builder/service.py +1335 -0
  43. rasa/builder/shared/tracker_context.py +212 -0
  44. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  45. rasa/builder/training_service.py +183 -0
  46. rasa/builder/validation_service.py +97 -0
  47. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  48. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  49. rasa/cli/project_templates/basic/config.yml +30 -0
  50. rasa/cli/project_templates/basic/credentials.yml +33 -0
  51. rasa/cli/project_templates/basic/data/data.md +9 -0
  52. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  53. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  54. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  55. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  56. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  57. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  58. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  59. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  60. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  61. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  62. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  63. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  64. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  65. rasa/cli/project_templates/basic/domain/domain.md +9 -0
  66. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  67. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  68. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  69. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  70. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  71. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  72. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  73. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  74. rasa/cli/project_templates/basic/endpoints.yml +77 -0
  75. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  76. rasa/cli/project_templates/default/config.yml +5 -1
  77. rasa/cli/project_templates/default/endpoints.yml +15 -0
  78. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  79. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  80. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  81. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  82. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  83. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  84. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  85. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  86. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  87. rasa/cli/project_templates/finance/actions/database.py +277 -0
  88. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  89. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  90. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  91. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  92. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  93. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  94. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  95. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  96. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  97. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  98. rasa/cli/project_templates/finance/config.yml +23 -0
  99. rasa/cli/project_templates/finance/credentials.yml +32 -0
  100. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  101. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  102. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  103. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  104. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  105. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  106. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  107. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  108. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  109. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  110. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  111. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  112. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  113. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  114. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  115. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  116. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  117. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  118. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  119. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  120. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  121. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  122. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  123. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  124. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  125. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  126. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  127. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  128. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  129. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  130. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  131. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  132. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  133. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  134. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  135. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  136. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  137. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  138. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  139. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  140. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  141. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  142. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  143. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  144. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  145. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  146. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  147. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  148. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  149. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  154. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  155. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  156. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  157. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  158. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  159. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  160. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  161. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  162. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  163. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  164. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  165. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  166. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  167. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  168. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  169. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  216. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  217. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  218. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  219. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
  220. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  221. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  222. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  223. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  224. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  225. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  226. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  227. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  228. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  229. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  230. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  231. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  232. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  233. rasa/cli/project_templates/finance/endpoints.yml +76 -0
  234. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  235. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  236. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  238. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  240. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  242. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  243. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  244. rasa/cli/project_templates/telco/config.yml +29 -0
  245. rasa/cli/project_templates/telco/credentials.yml +33 -0
  246. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  247. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  248. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  249. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  250. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  251. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  252. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  253. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  254. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  255. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  256. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  257. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  258. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  259. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  260. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  261. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  262. rasa/cli/project_templates/telco/domain/billing/domain_undertand_bill.yml +102 -0
  263. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  264. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  265. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  266. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  267. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +29 -0
  268. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  269. rasa/cli/project_templates/telco/domain/network/domain_reboot_router.yml +21 -0
  270. rasa/cli/project_templates/telco/domain/network/domain_reset_router.yml +12 -0
  271. rasa/cli/project_templates/telco/domain/network/domain_run_speed_test.yml +25 -0
  272. rasa/cli/project_templates/telco/domain/network/domain_solve_internet_issue.yml +75 -0
  273. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  274. rasa/cli/project_templates/telco/endpoints.yml +77 -0
  275. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  276. rasa/cli/project_templates/tutorial/config.yml +2 -1
  277. rasa/cli/scaffold.py +46 -2
  278. rasa/cli/train.py +2 -2
  279. rasa/core/actions/action.py +27 -38
  280. rasa/core/actions/action_run_slot_rejections.py +1 -1
  281. rasa/core/channels/channel.py +4 -3
  282. rasa/core/channels/constants.py +3 -0
  283. rasa/core/channels/development_inspector.py +48 -15
  284. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-18042c22.js} +1 -1
  285. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  287. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  288. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  290. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  291. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-31422447.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-518a90db.js} +1 -1
  293. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-e048c2be.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  296. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  297. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  299. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-14702d8a.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-f18b534b.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{index-c804b295.js → index-4d4bdf3a.js} +254 -254
  303. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-5a3b2123.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-2272a8c7.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-35bcf273.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-980de489.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-3c03abde.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  320. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  322. rasa/core/channels/inspector/dist/index.html +1 -1
  323. rasa/core/channels/inspector/src/App.tsx +60 -15
  324. rasa/core/channels/inspector/src/components/Chat.tsx +3 -2
  325. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  326. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  327. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +268 -0
  328. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  329. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +8 -3
  330. rasa/core/channels/inspector/src/types.ts +8 -0
  331. rasa/core/channels/socketio.py +212 -51
  332. rasa/core/channels/studio_chat.py +161 -50
  333. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  334. rasa/core/channels/voice_stream/audiocodes.py +9 -6
  335. rasa/core/channels/voice_stream/browser_audio.py +39 -4
  336. rasa/core/channels/voice_stream/call_state.py +13 -2
  337. rasa/core/channels/voice_stream/genesys.py +16 -13
  338. rasa/core/channels/voice_stream/jambonz.py +13 -11
  339. rasa/core/channels/voice_stream/twilio_media_streams.py +14 -13
  340. rasa/core/channels/voice_stream/util.py +11 -1
  341. rasa/core/channels/voice_stream/voice_channel.py +106 -32
  342. rasa/core/nlg/contextual_response_rephraser.py +11 -7
  343. rasa/core/nlg/generator.py +21 -5
  344. rasa/core/nlg/response.py +43 -6
  345. rasa/core/nlg/translate.py +8 -0
  346. rasa/core/policies/enterprise_search_policy.py +4 -7
  347. rasa/core/policies/flows/flow_executor.py +8 -1
  348. rasa/core/run.py +13 -3
  349. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  350. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  351. rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
  352. rasa/e2e_test/e2e_test_schema.yml +3 -3
  353. rasa/engine/storage/local_model_storage.py +45 -2
  354. rasa/model_manager/model_api.py +4 -5
  355. rasa/model_manager/runner_service.py +1 -1
  356. rasa/model_manager/socket_bridge.py +27 -15
  357. rasa/model_manager/trainer_service.py +12 -9
  358. rasa/model_manager/utils.py +1 -29
  359. rasa/shared/core/domain.py +62 -15
  360. rasa/shared/core/flows/flow_step.py +7 -1
  361. rasa/shared/core/flows/steps/call.py +8 -1
  362. rasa/shared/core/flows/yaml_flows_io.py +16 -8
  363. rasa/shared/core/slots.py +4 -0
  364. rasa/shared/importers/importer.py +6 -0
  365. rasa/shared/importers/utils.py +77 -1
  366. rasa/shared/providers/_utils.py +60 -44
  367. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  368. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  369. rasa/shared/utils/common.py +2 -1
  370. rasa/studio/upload.py +12 -46
  371. rasa/telemetry.py +97 -23
  372. rasa/utils/io.py +27 -9
  373. rasa/utils/json_utils.py +6 -1
  374. rasa/utils/licensing.py +21 -10
  375. rasa/utils/log_utils.py +5 -1
  376. rasa/utils/openapi.py +144 -0
  377. rasa/utils/plotting.py +1 -1
  378. rasa/validator.py +7 -3
  379. rasa/version.py +1 -1
  380. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/METADATA +22 -23
  381. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/RECORD +384 -108
  382. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  383. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  384. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  385. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/NOTICE +0 -0
  386. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/WHEEL +0 -0
  387. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/entry_points.txt +0 -0
@@ -52,7 +52,13 @@ def step_from_json(flow_id: Text, data: Dict[Text, Any]) -> FlowStep:
52
52
  return SetSlotsFlowStep.from_json(flow_id, data)
53
53
  if "noop" in data:
54
54
  return NoOperationFlowStep.from_json(flow_id, data)
55
- raise RasaException(f"Failed to parse step from json. Unknown type for {data}.")
55
+
56
+ required_properties = ["action", "collect", "link", "call", "set_slots", "noop"]
57
+ raise RasaException(
58
+ f"Failed to parse step from json. Unknown type for {data}. "
59
+ f"At least one of the following properties is required: "
60
+ f"{', '.join(required_properties)}"
61
+ )
56
62
 
57
63
 
58
64
  @dataclass
@@ -50,7 +50,14 @@ class CallFlowStep(FlowStep):
50
50
 
51
51
  if should_resolve_calls:
52
52
  if not self.called_flow_reference:
53
- raise ValueError("Call flow reference not set.")
53
+ raise ValueError(
54
+ f"Flow step '{self.id}' in flow '{self.flow_id}' is trying "
55
+ f"to call flow '{self.call}', but the flow reference could "
56
+ f"not be resolved. Please ensure that:\n"
57
+ f"1. A flow named '{self.call}' is defined in your domain\n"
58
+ f"2. The flow name is spelled correctly (case-sensitive)\n"
59
+ f"3. The called flow is properly formatted with valid YAML syntax"
60
+ )
54
61
 
55
62
  yield from self.called_flow_reference.steps_with_calls_resolved
56
63
 
@@ -262,12 +262,9 @@ class YamlFlowsWriter:
262
262
  Returns:
263
263
  The dumped YAML.
264
264
  """
265
- dump = {}
266
- for flow in flows:
267
- dumped_flow = get_flow_as_json(flow, should_clean_json)
268
- del dumped_flow["id"]
269
- dump[flow.id] = dumped_flow
270
- return dump_obj_as_yaml_to_string({KEY_FLOWS: dump})
265
+ return dump_obj_as_yaml_to_string(
266
+ {KEY_FLOWS: get_flows_as_json(flows, should_clean_json)}
267
+ )
271
268
 
272
269
  @staticmethod
273
270
  def dump(
@@ -424,9 +421,20 @@ def process_yaml_content(yaml_content: Dict[str, Any]) -> Dict[str, Any]:
424
421
  return yaml_content
425
422
 
426
423
 
424
+ def get_flows_as_json(
425
+ flows: FlowsList, should_clean_json: bool = False
426
+ ) -> Dict[str, Any]:
427
+ """Get the flows as a JSON dictionary."""
428
+ dump = {}
429
+ for flow in flows:
430
+ dumped_flow = get_flow_as_json(flow, should_clean_json)
431
+ del dumped_flow["id"]
432
+ dump[flow.id] = dumped_flow
433
+ return dump
434
+
435
+
427
436
  def get_flow_as_json(flow: Flow, should_clean_json: bool = False) -> Dict[str, Any]:
428
- """
429
- Clean the Flow JSON by removing default values and empty fields.
437
+ """Clean the Flow JSON by removing default values and empty fields.
430
438
 
431
439
  Args:
432
440
  flow: The Flow object to clean.
rasa/shared/core/slots.py CHANGED
@@ -273,10 +273,14 @@ class Slot(ABC):
273
273
  try:
274
274
  return rasa.shared.utils.common.class_from_module_path(type_name)
275
275
  except (ImportError, AttributeError):
276
+ known_types = [
277
+ cls.type_name for cls in rasa.shared.utils.common.all_subclasses(Slot)
278
+ ]
276
279
  raise InvalidSlotTypeException(
277
280
  f"Failed to find slot type, '{type_name}' is neither a known type nor "
278
281
  f"user-defined. If you are creating your own slot type, make "
279
282
  f"sure its module path is correct. "
283
+ f"Known types: {', '.join(known_types)} "
280
284
  f"You can find all build in types at {DOCS_URL_SLOTS}"
281
285
  )
282
286
 
@@ -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:
@@ -34,3 +62,51 @@ def flows_from_paths(files: List[Text]) -> FlowsList:
34
62
  )
35
63
  flows.validate()
36
64
  return flows
65
+
66
+
67
+ def extract_calm_import_parts_from_importer(
68
+ importer: TrainingDataImporter,
69
+ config: Optional[Dict[str, Any]] = None,
70
+ endpoints: Optional[Dict[str, Any]] = None,
71
+ ) -> CALMUserData:
72
+ """Extracts CALMUserData from a TrainingDataImporter.
73
+
74
+ Args:
75
+ importer: The training data importer
76
+ data_paths: The path(s) to the training data for flows
77
+ config: Optional config dict, if not provided will use importer.get_config()
78
+ endpoints: Optional endpoints dict, defaults to empty dict
79
+
80
+ Returns:
81
+ CALMUserData containing flows, domain, config, endpoints, and nlu data
82
+ """
83
+ # Extract config
84
+ if config is None:
85
+ config = importer.get_config()
86
+
87
+ # Extract domain
88
+ domain_from_files = importer.get_user_domain().as_dict()
89
+ domain = extract_values(domain_from_files, DOMAIN_KEYS)
90
+
91
+ # Extract flows
92
+ flows = importer.get_user_flows()
93
+ flows_dict = {KEY_FLOWS: get_flows_as_json(flows)}
94
+
95
+ # Extract NLU data
96
+ nlu_data = importer.get_nlu_data()
97
+ nlu_examples = nlu_data.filter_training_examples(
98
+ lambda ex: ex.get("intent") in nlu_data.intents
99
+ )
100
+ nlu_dict = RasaYAMLWriter().training_data_to_dict(nlu_examples)
101
+
102
+ # Use provided endpoints or default to empty dict
103
+ if endpoints is None:
104
+ endpoints = {}
105
+
106
+ return CALMUserData(
107
+ flows=flows_dict or {},
108
+ domain=domain or {},
109
+ config=config or {},
110
+ endpoints=endpoints or {},
111
+ nlu=nlu_dict or {},
112
+ )
@@ -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()
@@ -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()
@@ -373,7 +373,8 @@ def validate_environment(
373
373
  importlib.import_module(p)
374
374
  except ImportError:
375
375
  raise MissingDependencyException(
376
- f"Missing package for {component_name}: {p}"
376
+ f"Missing dependency for {component_name}: {p}. "
377
+ f"Please ensure the correct package is installed."
377
378
  )
378
379
 
379
380
 
rasa/studio/upload.py CHANGED
@@ -7,7 +7,6 @@ from typing import Any, Dict, Iterable, List, Optional, Set, Text, Tuple, Union
7
7
  import questionary
8
8
  import requests
9
9
  import structlog
10
- from pydantic import BaseModel, Field
11
10
 
12
11
  import rasa.cli.telemetry
13
12
  import rasa.cli.utils
@@ -24,9 +23,13 @@ from rasa.shared.constants import (
24
23
  DEFAULT_DOMAIN_PATHS,
25
24
  )
26
25
  from rasa.shared.core.domain import Domain
27
- from rasa.shared.core.flows.yaml_flows_io import YAMLFlowsReader, YamlFlowsWriter
26
+ from rasa.shared.core.flows.yaml_flows_io import YAMLFlowsReader
28
27
  from rasa.shared.exceptions import RasaException
29
- from rasa.shared.importers.importer import FlowSyncImporter, TrainingDataImporter
28
+ from rasa.shared.importers.importer import TrainingDataImporter
29
+ from rasa.shared.importers.utils import (
30
+ CALMUserData,
31
+ extract_calm_import_parts_from_importer,
32
+ )
30
33
  from rasa.shared.nlu.training_data.formats.rasa_yaml import (
31
34
  RasaYAMLReader,
32
35
  RasaYAMLWriter,
@@ -34,7 +37,6 @@ from rasa.shared.nlu.training_data.formats.rasa_yaml import (
34
37
  from rasa.shared.utils.llm import collect_custom_prompts
35
38
  from rasa.shared.utils.yaml import (
36
39
  dump_obj_as_yaml_to_string,
37
- read_yaml,
38
40
  read_yaml_file,
39
41
  )
40
42
  from rasa.studio import results_logger
@@ -43,6 +45,7 @@ from rasa.studio.config import StudioConfig
43
45
  from rasa.studio.results_logger import StudioResult, with_studio_error_handler
44
46
  from rasa.studio.utils import validate_argument_paths
45
47
  from rasa.telemetry import track_upload_to_studio_failed
48
+ from rasa.utils.json_utils import extract_values
46
49
 
47
50
  structlogger = structlog.get_logger()
48
51
 
@@ -68,16 +71,6 @@ DOMAIN_KEYS = [
68
71
  ]
69
72
 
70
73
 
71
- class CALMImportParts(BaseModel):
72
- """All pieces that will be uploaded to Rasa Studio."""
73
-
74
- flows: Dict[str, Any]
75
- domain: Dict[str, Any]
76
- config: Dict[str, Any]
77
- endpoints: Dict[str, Any]
78
- nlu: Dict[str, Any] = Field(default_factory=dict)
79
-
80
-
81
74
  def _get_selected_entities_and_intents(
82
75
  args: argparse.Namespace,
83
76
  intents_from_files: Set[Text],
@@ -195,11 +188,6 @@ config_keys = [
195
188
  ]
196
189
 
197
190
 
198
- def extract_values(data: Dict, keys: List[Text]) -> Dict:
199
- """Extracts values for given keys from a dictionary."""
200
- return {key: data.get(key) for key in keys if data.get(key)}
201
-
202
-
203
191
  def _get_assistant_name(config: Dict[Text, Any]) -> str:
204
192
  config_assistant_id = config.get("assistant_id", "")
205
193
  assistant_name = questionary.text(
@@ -238,7 +226,7 @@ def build_calm_import_parts(
238
226
  config_path: Text,
239
227
  endpoints_path: Optional[Text] = None,
240
228
  assistant_name: Optional[Text] = None,
241
- ) -> Tuple[str, CALMImportParts]:
229
+ ) -> Tuple[str, CALMUserData]:
242
230
  """Builds the parts of the assistant to be uploaded to Studio.
243
231
 
244
232
  Args:
@@ -251,9 +239,11 @@ def build_calm_import_parts(
251
239
  Returns:
252
240
  The assistant name and the parts to be uploaded
253
241
  """
242
+ training_data_paths = data_path if isinstance(data_path, list) else [str(data_path)]
254
243
  importer = TrainingDataImporter.load_from_dict(
255
244
  domain_path=domain_path,
256
245
  config_path=config_path,
246
+ training_data_paths=training_data_paths,
257
247
  expand_env_vars=False,
258
248
  )
259
249
 
@@ -261,34 +251,10 @@ def build_calm_import_parts(
261
251
  endpoints = read_yaml_file(endpoints_path, expand_env_vars=False)
262
252
  assistant_name = assistant_name or _get_assistant_name(config)
263
253
 
264
- domain_from_files = importer.get_user_domain().as_dict()
265
- domain = extract_values(domain_from_files, DOMAIN_KEYS)
266
-
267
- training_data_paths = data_path if isinstance(data_path, list) else [str(data_path)]
268
- flow_importer = FlowSyncImporter.load_from_dict(
269
- training_data_paths=training_data_paths, expand_env_vars=False
270
- )
271
-
272
- flows = list(flow_importer.get_user_flows())
273
- flows_yaml = YamlFlowsWriter().dumps(flows)
274
- flows = read_yaml(flows_yaml, expand_env_vars=False)
275
-
276
- nlu_importer = TrainingDataImporter.load_from_dict(
277
- training_data_paths=training_data_paths, expand_env_vars=False
278
- )
279
- nlu_data = nlu_importer.get_nlu_data()
280
- nlu_examples = nlu_data.filter_training_examples(
281
- lambda ex: ex.get("intent") in nlu_data.intents
282
- )
283
- nlu_examples_yaml = RasaYAMLWriter().dumps(nlu_examples)
284
- nlu = read_yaml(nlu_examples_yaml, expand_env_vars=False)
285
-
286
- parts = CALMImportParts(
287
- flows=flows,
288
- domain=domain,
254
+ parts = extract_calm_import_parts_from_importer(
255
+ importer=importer,
289
256
  config=config,
290
257
  endpoints=endpoints,
291
- nlu=nlu,
292
258
  )
293
259
 
294
260
  return assistant_name, parts