rasa-pro 3.14.0.dev3__py3-none-any.whl → 3.14.0.dev5__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 (437) hide show
  1. rasa/api.py +0 -5
  2. rasa/builder/README.md +120 -0
  3. rasa/builder/auth.py +176 -0
  4. rasa/builder/config.py +115 -0
  5. rasa/builder/copilot/constants.py +25 -0
  6. rasa/builder/copilot/copilot.py +372 -0
  7. rasa/builder/copilot/copilot_response_handler.py +487 -0
  8. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  9. rasa/builder/copilot/exceptions.py +20 -0
  10. rasa/builder/copilot/models.py +431 -0
  11. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +726 -0
  12. rasa/builder/copilot/telemetry.py +195 -0
  13. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  14. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +26 -0
  15. rasa/builder/document_retrieval/constants.py +15 -0
  16. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  17. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  18. rasa/builder/document_retrieval/models.py +62 -0
  19. rasa/builder/download.py +140 -0
  20. rasa/builder/exceptions.py +55 -0
  21. rasa/builder/guardrails/__init__.py +1 -0
  22. rasa/builder/guardrails/constants.py +3 -0
  23. rasa/builder/guardrails/exceptions.py +4 -0
  24. rasa/builder/guardrails/lakera.py +206 -0
  25. rasa/builder/guardrails/models.py +199 -0
  26. rasa/builder/guardrails/utils.py +305 -0
  27. rasa/builder/job_manager.py +87 -0
  28. rasa/builder/jobs.py +234 -0
  29. rasa/builder/llm_service.py +246 -0
  30. rasa/builder/logging_utils.py +209 -0
  31. rasa/builder/main.py +174 -0
  32. rasa/builder/models.py +197 -0
  33. rasa/builder/project_generator.py +450 -0
  34. rasa/builder/project_info.py +72 -0
  35. rasa/builder/scrape_rasa_docs.py +97 -0
  36. rasa/builder/service.py +1142 -0
  37. rasa/builder/shared/tracker_context.py +212 -0
  38. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  39. rasa/builder/training_service.py +132 -0
  40. rasa/builder/validation_service.py +93 -0
  41. rasa/cli/arguments/default_arguments.py +0 -12
  42. rasa/cli/arguments/run.py +0 -2
  43. rasa/cli/dialogue_understanding_test.py +0 -4
  44. rasa/cli/e2e_test.py +0 -4
  45. rasa/cli/inspect.py +0 -3
  46. rasa/cli/llm_fine_tuning.py +0 -5
  47. rasa/cli/project_templates/basic/actions/action_api.py +15 -0
  48. rasa/cli/project_templates/basic/actions/action_human_handoff.py +44 -0
  49. rasa/cli/project_templates/basic/config.yml +23 -0
  50. rasa/cli/project_templates/basic/credentials.yml +34 -0
  51. rasa/cli/project_templates/basic/data/general/feedback.yml +20 -0
  52. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  53. rasa/cli/project_templates/basic/data/general/hello.yml +7 -0
  54. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  55. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  56. rasa/cli/project_templates/basic/data/general/welcome.yml +9 -0
  57. rasa/cli/project_templates/basic/data/system/pattern_completed.yml +7 -0
  58. rasa/cli/project_templates/basic/data/system/pattern_correction.yml +7 -0
  59. rasa/cli/project_templates/basic/data/system/pattern_search.yml +8 -0
  60. rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +8 -0
  61. rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +65 -0
  62. rasa/cli/project_templates/basic/docs/template.txt +7 -0
  63. rasa/cli/project_templates/basic/domain/general/assistant_details.yml +12 -0
  64. rasa/cli/project_templates/basic/domain/general/bot_identity.yml +5 -0
  65. rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +5 -0
  66. rasa/cli/project_templates/basic/domain/general/feedback.yml +28 -0
  67. rasa/cli/project_templates/basic/domain/general/goodbye.yml +7 -0
  68. rasa/cli/project_templates/basic/domain/general/help.yml +5 -0
  69. rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +35 -0
  70. rasa/cli/project_templates/basic/domain/general/utils.yml +13 -0
  71. rasa/cli/project_templates/basic/domain/general/welcome.yml +7 -0
  72. rasa/cli/project_templates/basic/endpoints.yml +73 -0
  73. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  74. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  75. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  76. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  77. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  78. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  79. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  80. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  81. rasa/cli/project_templates/finance/actions/database.py +277 -0
  82. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  83. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  84. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  85. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  86. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  87. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  88. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  89. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  90. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  91. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  92. rasa/cli/project_templates/finance/config.yml +21 -0
  93. rasa/cli/project_templates/finance/credentials.yml +32 -0
  94. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  95. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  96. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  97. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  98. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  99. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  100. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  101. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  102. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  103. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  104. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  105. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  106. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  107. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  108. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  109. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  110. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  111. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  112. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  113. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  114. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  115. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  116. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  117. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  118. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  119. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  120. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  121. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  122. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  123. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  124. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  125. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  126. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  127. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  128. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  129. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  130. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  131. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  132. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  133. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  134. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  135. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  136. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  137. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  138. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  139. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  140. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  141. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  142. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  143. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  144. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  145. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  146. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  147. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  148. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  149. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  150. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  151. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  152. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  153. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  154. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  155. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  156. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  157. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  158. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  159. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  160. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  161. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  162. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  163. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  164. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  165. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  166. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  167. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  168. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  169. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  210. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  211. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  212. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  213. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
  214. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  215. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  216. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  217. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  218. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  219. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  220. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  221. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  222. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  223. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  224. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  225. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  226. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  227. rasa/cli/project_templates/finance/endpoints.yml +63 -0
  228. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  229. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  230. rasa/cli/project_templates/telco/actions/actions_billing.py +204 -0
  231. rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +48 -0
  232. rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +28 -0
  233. rasa/cli/project_templates/telco/actions/actions_session_start.py +18 -0
  234. rasa/cli/project_templates/telco/config.yml +25 -0
  235. rasa/cli/project_templates/telco/credentials.yml +33 -0
  236. rasa/cli/project_templates/telco/csvs/billing.csv +10 -0
  237. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  238. rasa/cli/project_templates/telco/data/flows/flow_global.yml +5 -0
  239. rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +8 -0
  240. rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +7 -0
  241. rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +73 -0
  242. rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +45 -0
  243. rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +7 -0
  244. rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +6 -0
  245. rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +7 -0
  246. rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +9 -0
  247. rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +1 -0
  248. rasa/cli/project_templates/telco/docs/restart_router.txt +6 -0
  249. rasa/cli/project_templates/telco/docs/run_speed_test.txt +6 -0
  250. rasa/cli/project_templates/telco/domain/domain_global.yml +29 -0
  251. rasa/cli/project_templates/telco/domain/domain_patterns.yml +17 -0
  252. rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +20 -0
  253. rasa/cli/project_templates/telco/domain/domain_reset_router.yml +11 -0
  254. rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +24 -0
  255. rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +74 -0
  256. rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +102 -0
  257. rasa/cli/project_templates/telco/endpoints.yml +60 -0
  258. rasa/{dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 → cli/project_templates/telco/prompts/command-generator.jinja2} +3 -7
  259. rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +62 -0
  260. rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +130 -0
  261. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +68 -0
  262. rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +13 -0
  263. rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +47 -0
  264. rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +21 -0
  265. rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +15 -0
  266. rasa/cli/project_templates/tutorial/config.yml +2 -1
  267. rasa/cli/run.py +0 -4
  268. rasa/cli/scaffold.py +46 -2
  269. rasa/cli/shell.py +0 -3
  270. rasa/constants.py +0 -6
  271. rasa/core/actions/action.py +2 -43
  272. rasa/core/agent.py +0 -16
  273. rasa/core/available_endpoints.py +0 -30
  274. rasa/core/channels/channel.py +4 -3
  275. rasa/core/channels/constants.py +3 -0
  276. rasa/core/channels/development_inspector.py +1 -1
  277. rasa/core/channels/inspector/dist/assets/{arc-2e78c586.js → arc-18042c22.js} +1 -1
  278. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-806b712e.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  279. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0745efa9.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  280. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  281. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-7bd1082b.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  282. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-d937ba49.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  283. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  284. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-a2a564ca.js → createText-2e5e7dd3-31422447.js} +1 -1
  285. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b5256940.js → edges-e0da2a9e-518a90db.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-e6883ad2.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  287. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e576fc02.js → flowDb-956e92f1-e048c2be.js} +1 -1
  288. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-2e298d01.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  290. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-dd7b150a.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  291. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-5b79575c.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-3016f40a.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  293. rasa/core/channels/inspector/dist/assets/{graph-3e19170f.js → graph-14702d8a.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{index-3862675e-eb9c86de.js → index-3862675e-f18b534b.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +1335 -0
  296. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-b4280e4d.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  297. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-556091f8.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{layout-08436411.js → layout-5a3b2123.js} +1 -1
  299. rasa/core/channels/inspector/dist/assets/{line-683c4f3b.js → line-2272a8c7.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{linear-cee6d791.js → linear-35bcf273.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-a0bf0b1a.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-3730d5c4.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  303. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-12a20fed.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-b9732102.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-a2e72776.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-8b7a76bb.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-e65853ac.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-6f58a44b.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-df25b934.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-88357141.js → styles-9a916d00-980de489.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-d600174d.js → styles-c10674c1-3c03abde.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-4adc3e0b.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-42816fa1.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-621eb66a.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  315. rasa/core/channels/inspector/dist/index.html +2 -2
  316. rasa/core/channels/inspector/index.html +1 -1
  317. rasa/core/channels/inspector/src/App.tsx +10 -11
  318. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  319. rasa/core/channels/inspector/src/components/DialogueStack.tsx +5 -7
  320. rasa/core/channels/inspector/src/helpers/formatters.ts +3 -24
  321. rasa/core/channels/inspector/src/theme/base/styles.ts +1 -19
  322. rasa/core/channels/inspector/src/types.ts +0 -4
  323. rasa/core/channels/socketio.py +212 -51
  324. rasa/core/channels/studio_chat.py +43 -23
  325. rasa/core/channels/voice_stream/voice_channel.py +5 -3
  326. rasa/core/constants.py +0 -4
  327. rasa/core/policies/enterprise_search_policy.py +6 -11
  328. rasa/core/policies/flow_policy.py +4 -4
  329. rasa/core/policies/flows/flow_executor.py +45 -415
  330. rasa/core/processor.py +1 -6
  331. rasa/core/run.py +14 -11
  332. rasa/core/utils.py +1 -21
  333. rasa/dialogue_understanding/commands/__init__.py +0 -8
  334. rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -97
  335. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +0 -11
  336. rasa/dialogue_understanding/commands/clarify_command.py +0 -10
  337. rasa/dialogue_understanding/commands/knowledge_answer_command.py +0 -11
  338. rasa/dialogue_understanding/commands/start_flow_command.py +8 -164
  339. rasa/dialogue_understanding/commands/utils.py +2 -6
  340. rasa/dialogue_understanding/generator/command_parser.py +0 -4
  341. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  342. rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -50
  343. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +6 -7
  344. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +6 -7
  345. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -41
  346. rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -163
  347. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +8 -52
  348. rasa/dialogue_understanding/processor/command_processor.py +15 -31
  349. rasa/dialogue_understanding/stack/dialogue_stack.py +2 -123
  350. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +0 -57
  351. rasa/dialogue_understanding/stack/utils.py +2 -17
  352. rasa/dialogue_understanding_test/du_test_runner.py +2 -7
  353. rasa/e2e_test/e2e_test_runner.py +0 -5
  354. rasa/engine/storage/local_model_storage.py +45 -2
  355. rasa/model_manager/model_api.py +4 -5
  356. rasa/model_manager/runner_service.py +1 -1
  357. rasa/model_manager/socket_bridge.py +20 -14
  358. rasa/model_manager/trainer_service.py +12 -9
  359. rasa/model_manager/utils.py +1 -29
  360. rasa/server.py +0 -10
  361. rasa/shared/constants.py +0 -5
  362. rasa/shared/core/constants.py +1 -12
  363. rasa/shared/core/domain.py +58 -11
  364. rasa/shared/core/events.py +0 -319
  365. rasa/shared/core/flows/flow_step.py +7 -1
  366. rasa/shared/core/flows/flows_list.py +2 -2
  367. rasa/shared/core/flows/flows_yaml_schema.json +186 -112
  368. rasa/shared/core/flows/steps/call.py +5 -53
  369. rasa/shared/core/flows/validation.py +7 -46
  370. rasa/shared/core/flows/yaml_flows_io.py +16 -8
  371. rasa/shared/core/slots.py +4 -0
  372. rasa/shared/importers/importer.py +6 -0
  373. rasa/shared/importers/utils.py +77 -1
  374. rasa/shared/providers/_utils.py +60 -44
  375. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  376. rasa/shared/providers/llm/_base_litellm_client.py +7 -39
  377. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  378. rasa/shared/providers/llm/litellm_router_llm_client.py +4 -8
  379. rasa/shared/providers/llm/llm_client.py +3 -7
  380. rasa/shared/providers/llm/llm_response.py +0 -49
  381. rasa/shared/providers/llm/self_hosted_llm_client.py +4 -8
  382. rasa/shared/utils/llm.py +5 -28
  383. rasa/shared/utils/schemas/events.py +0 -42
  384. rasa/studio/upload.py +16 -47
  385. rasa/telemetry.py +97 -23
  386. rasa/tracing/instrumentation/instrumentation.py +2 -4
  387. rasa/utils/common.py +0 -79
  388. rasa/utils/io.py +27 -9
  389. rasa/utils/json_utils.py +6 -1
  390. rasa/utils/log_utils.py +5 -1
  391. rasa/utils/openapi.py +144 -0
  392. rasa/validator.py +7 -3
  393. rasa/version.py +1 -1
  394. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/METADATA +3 -3
  395. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/RECORD +405 -174
  396. rasa/agents/agent_factory.py +0 -122
  397. rasa/agents/agent_manager.py +0 -162
  398. rasa/agents/constants.py +0 -32
  399. rasa/agents/core/agent_protocol.py +0 -108
  400. rasa/agents/core/types.py +0 -70
  401. rasa/agents/exceptions.py +0 -8
  402. rasa/agents/protocol/__init__.py +0 -5
  403. rasa/agents/protocol/a2a/a2a_agent.py +0 -51
  404. rasa/agents/protocol/mcp/mcp_base_agent.py +0 -674
  405. rasa/agents/protocol/mcp/mcp_open_agent.py +0 -276
  406. rasa/agents/protocol/mcp/mcp_task_agent.py +0 -469
  407. rasa/agents/schemas/__init__.py +0 -12
  408. rasa/agents/schemas/agent_input.py +0 -38
  409. rasa/agents/schemas/agent_output.py +0 -26
  410. rasa/agents/schemas/agent_tool_result.py +0 -51
  411. rasa/agents/schemas/agent_tool_schema.py +0 -134
  412. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +0 -15
  413. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +0 -17
  414. rasa/agents/utils.py +0 -72
  415. rasa/core/available_agents.py +0 -196
  416. rasa/core/channels/inspector/dist/assets/channel-c436ca7c.js +0 -1
  417. rasa/core/channels/inspector/dist/assets/clone-50dd656b.js +0 -1
  418. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b2aeaf8.js +0 -1
  419. rasa/core/channels/inspector/dist/assets/index-1bd9135e.js +0 -1353
  420. rasa/core/policies/flows/mcp_tool_executor.py +0 -277
  421. rasa/dialogue_understanding/commands/continue_agent_command.py +0 -91
  422. rasa/dialogue_understanding/commands/restart_agent_command.py +0 -162
  423. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +0 -61
  424. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +0 -81
  425. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +0 -81
  426. rasa/shared/agents/utils.py +0 -35
  427. rasa/shared/utils/mcp/server_connection.py +0 -157
  428. /rasa/{agents → builder}/__init__.py +0 -0
  429. /rasa/{agents/core → builder/copilot}/__init__.py +0 -0
  430. /rasa/{agents/protocol/a2a → builder/copilot/prompts}/__init__.py +0 -0
  431. /rasa/{agents/protocol/mcp → builder/copilot/templated_messages}/__init__.py +0 -0
  432. /rasa/{agents/templates → builder/document_retrieval}/__init__.py +0 -0
  433. /rasa/{shared/agents → cli/project_templates/finance/actions/accounts}/__init__.py +0 -0
  434. /rasa/{shared/utils/mcp → cli/project_templates/finance/actions/cards}/__init__.py +0 -0
  435. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/NOTICE +0 -0
  436. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/WHEEL +0 -0
  437. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/entry_points.txt +0 -0
rasa/shared/utils/llm.py CHANGED
@@ -49,15 +49,7 @@ from rasa.shared.constants import (
49
49
  RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG,
50
50
  ROUTER_CONFIG_KEY,
51
51
  )
52
- from rasa.shared.core.events import (
53
- AgentCancelled,
54
- AgentCompleted,
55
- AgentInterrupted,
56
- AgentResumed,
57
- AgentStarted,
58
- BotUttered,
59
- UserUttered,
60
- )
52
+ from rasa.shared.core.events import BotUttered, UserUttered
61
53
  from rasa.shared.core.slots import BooleanSlot, CategoricalSlot, Slot
62
54
  from rasa.shared.engine.caching import get_local_cache_location
63
55
  from rasa.shared.exceptions import (
@@ -120,7 +112,7 @@ DEPLOYMENT_CENTRIC_PROVIDERS = [AZURE_OPENAI_PROVIDER]
120
112
 
121
113
  # Placeholder messages used in the transcript for
122
114
  # instances where user input results in an error
123
- ERROR_PLACEHOLDER: Dict[str, str] = {
115
+ ERROR_PLACEHOLDER = {
124
116
  RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_TOO_LONG: "[User sent really long message]",
125
117
  RASA_PATTERN_INTERNAL_ERROR_USER_INPUT_EMPTY: "",
126
118
  "default": "[User input triggered an error]",
@@ -233,7 +225,6 @@ def tracker_as_readable_transcript(
233
225
  ai_prefix: str = AI,
234
226
  max_turns: Optional[int] = 20,
235
227
  turns_wrapper: Optional[Callable[[List[str]], List[str]]] = None,
236
- highlight_agent_turns: bool = False,
237
228
  ) -> str:
238
229
  """Creates a readable dialogue from a tracker.
239
230
 
@@ -243,7 +234,6 @@ def tracker_as_readable_transcript(
243
234
  ai_prefix: the prefix to use for ai utterances
244
235
  max_turns: the maximum number of turns to include in the transcript
245
236
  turns_wrapper: optional function to wrap the turns in a custom way
246
- highlight_agent_turns: whether to highlight agent turns in the transcript
247
237
 
248
238
  Example:
249
239
  >>> tracker = Tracker(
@@ -261,9 +251,7 @@ def tracker_as_readable_transcript(
261
251
  Returns:
262
252
  A string representing the transcript of the tracker
263
253
  """
264
- transcript: List[str] = []
265
-
266
- current_ai_prefix = ai_prefix
254
+ transcript = []
267
255
 
268
256
  # using `applied_events` rather than `events` means that only events after the
269
257
  # most recent `Restart` or `SessionStarted` are included in the transcript
@@ -278,20 +266,9 @@ def tracker_as_readable_transcript(
278
266
  else:
279
267
  message = sanitize_message_for_prompt(event.text)
280
268
  transcript.append(f"{human_prefix}: {message}")
281
- elif isinstance(event, BotUttered):
282
- transcript.append(
283
- f"{current_ai_prefix}: {sanitize_message_for_prompt(event.text)}"
284
- )
285
269
 
286
- if highlight_agent_turns:
287
- if isinstance(event, AgentStarted) or isinstance(event, AgentResumed):
288
- current_ai_prefix = event.agent_id
289
- elif (
290
- isinstance(event, AgentCompleted)
291
- or isinstance(event, AgentCancelled)
292
- or isinstance(event, AgentInterrupted)
293
- ):
294
- current_ai_prefix = ai_prefix
270
+ elif isinstance(event, BotUttered):
271
+ transcript.append(f"{ai_prefix}: {sanitize_message_for_prompt(event.text)}")
295
272
 
296
273
  # turns_wrapper to count multiple utterances by bot/user as single turn
297
274
  if turns_wrapper:
@@ -160,43 +160,6 @@ FLOW_CANCELLED = {
160
160
  "step_id": {"type": "string"},
161
161
  }
162
162
  }
163
- AGENT_STARTED = {
164
- "properties": {
165
- "event": {"const": "agent_started"},
166
- "agent_id": {"type": "string"},
167
- "flow_id": {"type": "string"},
168
- }
169
- }
170
- AGENT_COMPLETED = {
171
- "properties": {
172
- "event": {"const": "agent_completed"},
173
- "agent_id": {"type": "string"},
174
- "flow_id": {"type": "string"},
175
- "status": {"type": "string"},
176
- }
177
- }
178
- AGENT_INTERRUPTED = {
179
- "properties": {
180
- "event": {"const": "agent_interrupted"},
181
- "agent_id": {"type": "string"},
182
- "flow_id": {"type": "string"},
183
- }
184
- }
185
- AGENT_RESUMED = {
186
- "properties": {
187
- "event": {"const": "agent_resumed"},
188
- "agent_id": {"type": "string"},
189
- "flow_id": {"type": "string"},
190
- }
191
- }
192
- AGENT_CANCELLED = {
193
- "properties": {
194
- "event": {"const": "agent_cancelled"},
195
- "agent_id": {"type": "string"},
196
- "flow_id": {"type": "string"},
197
- "reason": {"type": "string"},
198
- }
199
- }
200
163
  DIALOGUE_STACK_UPDATED = {
201
164
  "properties": {"event": {"const": "stack"}, "update": {"type": "string"}}
202
165
  }
@@ -241,11 +204,6 @@ EVENT_SCHEMA = {
241
204
  FLOW_RESUMED,
242
205
  FLOW_COMPLETED,
243
206
  FLOW_CANCELLED,
244
- AGENT_STARTED,
245
- AGENT_COMPLETED,
246
- AGENT_INTERRUPTED,
247
- AGENT_RESUMED,
248
- AGENT_CANCELLED,
249
207
  DIALOGUE_STACK_UPDATED,
250
208
  ROUTING_SESSION_ENDED,
251
209
  SESSION_ENDED,
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],
@@ -115,9 +108,10 @@ def run_validation(args: argparse.Namespace) -> None:
115
108
  """
116
109
  from rasa.validator import Validator
117
110
 
111
+ training_data_paths = args.data if isinstance(args.data, list) else [args.data]
118
112
  training_data_importer = TrainingDataImporter.load_from_dict(
119
113
  domain_path=args.domain,
120
- training_data_paths=[args.data],
114
+ training_data_paths=training_data_paths,
121
115
  config_path=args.config,
122
116
  expand_env_vars=False,
123
117
  )
@@ -194,11 +188,6 @@ config_keys = [
194
188
  ]
195
189
 
196
190
 
197
- def extract_values(data: Dict, keys: List[Text]) -> Dict:
198
- """Extracts values for given keys from a dictionary."""
199
- return {key: data.get(key) for key in keys if data.get(key)}
200
-
201
-
202
191
  def _get_assistant_name(config: Dict[Text, Any]) -> str:
203
192
  config_assistant_id = config.get("assistant_id", "")
204
193
  assistant_name = questionary.text(
@@ -237,7 +226,7 @@ def build_calm_import_parts(
237
226
  config_path: Text,
238
227
  endpoints_path: Optional[Text] = None,
239
228
  assistant_name: Optional[Text] = None,
240
- ) -> Tuple[str, CALMImportParts]:
229
+ ) -> Tuple[str, CALMUserData]:
241
230
  """Builds the parts of the assistant to be uploaded to Studio.
242
231
 
243
232
  Args:
@@ -250,9 +239,11 @@ def build_calm_import_parts(
250
239
  Returns:
251
240
  The assistant name and the parts to be uploaded
252
241
  """
242
+ training_data_paths = data_path if isinstance(data_path, list) else [str(data_path)]
253
243
  importer = TrainingDataImporter.load_from_dict(
254
244
  domain_path=domain_path,
255
245
  config_path=config_path,
246
+ training_data_paths=training_data_paths,
256
247
  expand_env_vars=False,
257
248
  )
258
249
 
@@ -260,33 +251,10 @@ def build_calm_import_parts(
260
251
  endpoints = read_yaml_file(endpoints_path, expand_env_vars=False)
261
252
  assistant_name = assistant_name or _get_assistant_name(config)
262
253
 
263
- domain_from_files = importer.get_user_domain().as_dict()
264
- domain = extract_values(domain_from_files, DOMAIN_KEYS)
265
-
266
- flow_importer = FlowSyncImporter.load_from_dict(
267
- training_data_paths=[str(data_path)], expand_env_vars=False
268
- )
269
-
270
- flows = list(flow_importer.get_user_flows())
271
- flows_yaml = YamlFlowsWriter().dumps(flows)
272
- flows = read_yaml(flows_yaml, expand_env_vars=False)
273
-
274
- nlu_importer = TrainingDataImporter.load_from_dict(
275
- training_data_paths=[str(data_path)], expand_env_vars=False
276
- )
277
- nlu_data = nlu_importer.get_nlu_data()
278
- nlu_examples = nlu_data.filter_training_examples(
279
- lambda ex: ex.get("intent") in nlu_data.intents
280
- )
281
- nlu_examples_yaml = RasaYAMLWriter().dumps(nlu_examples)
282
- nlu = read_yaml(nlu_examples_yaml, expand_env_vars=False)
283
-
284
- parts = CALMImportParts(
285
- flows=flows,
286
- domain=domain,
254
+ parts = extract_calm_import_parts_from_importer(
255
+ importer=importer,
287
256
  config=config,
288
257
  endpoints=endpoints,
289
- nlu=nlu,
290
258
  )
291
259
 
292
260
  return assistant_name, parts
@@ -349,9 +317,10 @@ def upload_nlu_assistant(
349
317
  "rasa.studio.upload.nlu_data_read",
350
318
  event_info="Found DM1 assistant data, parsing...",
351
319
  )
320
+ training_data_paths = args.data if isinstance(args.data, list) else [args.data]
352
321
  importer = TrainingDataImporter.load_from_dict(
353
322
  domain_path=args.domain,
354
- training_data_paths=[args.data],
323
+ training_data_paths=training_data_paths,
355
324
  config_path=args.config,
356
325
  expand_env_vars=False,
357
326
  )
rasa/telemetry.py CHANGED
@@ -3,7 +3,6 @@ import contextlib
3
3
  import hashlib
4
4
  import inspect
5
5
  import json
6
- import logging
7
6
  import multiprocessing
8
7
  import os
9
8
  import platform
@@ -70,7 +69,7 @@ if typing.TYPE_CHECKING:
70
69
  from rasa.shared.importers.importer import TrainingDataImporter
71
70
  from rasa.shared.nlu.training_data.training_data import TrainingData
72
71
 
73
- logger = logging.getLogger(__name__)
72
+ structlogger = structlog.get_logger()
74
73
 
75
74
  SEGMENT_TRACK_ENDPOINT = "https://api.segment.io/v1/track"
76
75
  SEGMENT_IDENTIFY_ENDPOINT = "https://api.segment.io/v1/identify"
@@ -197,6 +196,10 @@ TELEMETRY_E2E_TEST_CONVERSION_EVENT = "E2E Test Conversion Completed"
197
196
  E2E_TEST_CONVERSION_FILE_TYPE = "file_type"
198
197
  E2E_TEST_CONVERSION_TEST_CASE_COUNT = "test_case_count"
199
198
 
199
+ # Copilot telemetry
200
+ TELEMETRY_COPILOT_USER_MESSAGE_EVENT = "copilot_user_message"
201
+ TELEMETRY_COPILOT_BOT_MESSAGE_EVENT = "copilot_bot_message"
202
+
200
203
 
201
204
  def print_telemetry_reporting_info() -> None:
202
205
  """Print telemetry information to std out."""
@@ -255,7 +258,11 @@ def _is_telemetry_enabled_in_configuration() -> bool:
255
258
 
256
259
  return stored_config[CONFIG_TELEMETRY_ENABLED]
257
260
  except ValueError as e:
258
- logger.debug(f"Could not read telemetry settings from configuration file: {e}")
261
+ structlogger.debug(
262
+ "telemetry.is_telemetry_enabled_in_configuration.error",
263
+ error=str(e),
264
+ event_info="Could not read telemetry settings from configuration file",
265
+ )
259
266
 
260
267
  # seems like there is no config, we'll create one and enable telemetry
261
268
  success = _write_default_telemetry_configuration()
@@ -272,7 +279,10 @@ def is_telemetry_enabled() -> bool:
272
279
  from rasa.utils import licensing
273
280
 
274
281
  if licensing.is_champion_server_license():
275
- logger.debug("Telemetry is enabled for developer licenses.")
282
+ structlogger.debug(
283
+ "telemetry.enabled.developer_license",
284
+ event_info="Telemetry is enabled for developer licenses.",
285
+ )
276
286
  return True
277
287
 
278
288
  telemetry_environ = os.environ.get(TELEMETRY_ENABLED_ENVIRONMENT_VARIABLE)
@@ -308,9 +318,13 @@ def initialize_telemetry() -> bool:
308
318
 
309
319
  return telemetry_environ.lower() == "true"
310
320
  except Exception as e: # skipcq:PYL-W0703
311
- logger.exception(
312
- f"Failed to initialize telemetry reporting: {e}."
313
- f"Telemetry reporting will be disabled."
321
+ structlogger.exception(
322
+ "telemetry.initialize_telemetry.error",
323
+ error=str(e),
324
+ event_info=(
325
+ "Failed to initialize telemetry reporting. "
326
+ "Telemetry reporting will be disabled."
327
+ ),
314
328
  )
315
329
  return False
316
330
 
@@ -481,7 +495,10 @@ def print_telemetry_payload(payload: Dict[Text, Any]) -> None:
481
495
  payload: payload to be delivered to segment.
482
496
  """
483
497
  payload_json = json.dumps(payload, indent=2)
484
- logger.debug(f"Telemetry payload: {payload_json}")
498
+ structlogger.debug(
499
+ "telemetry.print_telemetry_payload.debug",
500
+ event_info=f"Telemetry payload: {payload_json}",
501
+ )
485
502
 
486
503
 
487
504
  def _get_telemetry_write_key() -> Optional[Text]:
@@ -535,10 +552,24 @@ def _send_request(url: Text, payload: Dict[Text, Any]) -> None:
535
552
  if not write_key:
536
553
  # If RASA_TELEMETRY_WRITE_KEY is empty or `None`, telemetry has not
537
554
  # been enabled for this build (e.g. because it is running from source)
538
- logger.debug("Skipping request to external service: telemetry key not set.")
555
+ structlogger.debug(
556
+ "telemetry.send_request.no_telemetry_key",
557
+ event_info="Skipping request to external service: telemetry key not set.",
558
+ )
539
559
  return
540
560
 
541
- headers = rasa.telemetry.segment_request_header(write_key)
561
+ send_segment_request(url, payload, write_key)
562
+
563
+
564
+ def send_segment_request(url: Text, payload: Dict[Text, Any], write_key: Text) -> None:
565
+ """Send a request to the Segment API.
566
+
567
+ Args:
568
+ url: URL of the Segment API endpoint
569
+ payload: payload to send to the Segment API
570
+ write_key: write key for the Segment API
571
+ """
572
+ headers = segment_request_header(write_key)
542
573
 
543
574
  resp = requests.post(
544
575
  url=url,
@@ -548,15 +579,22 @@ def _send_request(url: Text, payload: Dict[Text, Any]) -> None:
548
579
  )
549
580
  # handle different failure cases
550
581
  if resp.status_code != 200:
551
- logger.debug(
552
- f"Segment telemetry request returned a {resp.status_code} response. "
553
- f"Body: {resp.text}"
582
+ structlogger.debug(
583
+ "telemetry.send_segment_request.error_response",
584
+ event_info=(
585
+ f"Segment telemetry request returned a {resp.status_code} "
586
+ f"response. Body: {resp.text}"
587
+ ),
554
588
  )
555
589
  else:
556
590
  data = resp.json()
557
591
  if not data.get("success"):
558
- logger.debug(
559
- f"Segment telemetry request returned a failure. Response: {data}"
592
+ structlogger.debug(
593
+ "telemetry.send_segment_request.failure",
594
+ event_info=(
595
+ f"Segment telemetry request returned a failure. "
596
+ f"Response: {data}"
597
+ ),
560
598
  )
561
599
 
562
600
 
@@ -609,6 +647,15 @@ def with_default_context_fields(
609
647
  return {**_default_context_fields(), **context}
610
648
 
611
649
 
650
+ def get_deployment_stack() -> Text:
651
+ """Return the deployment stack.
652
+
653
+ Returns:
654
+ The deployment stack.
655
+ """
656
+ return os.environ.get("DEPLOYMENT_STACK", "")
657
+
658
+
612
659
  def _default_context_fields() -> Dict[Text, Any]:
613
660
  """Return a dictionary that contains the default context values.
614
661
 
@@ -632,6 +679,7 @@ def _default_context_fields() -> Dict[Text, Any]:
632
679
  "cpu": multiprocessing.cpu_count(),
633
680
  "docker": _is_docker(),
634
681
  "license_hash": get_license_hash(),
682
+ "deployment_stack": get_deployment_stack(),
635
683
  "company": property_of_active_license(
636
684
  lambda active_license: active_license.company
637
685
  ),
@@ -663,7 +711,10 @@ def _track(
663
711
  telemetry_id = get_telemetry_id()
664
712
 
665
713
  if not telemetry_id:
666
- logger.debug("Will not report telemetry events as no ID was found.")
714
+ structlogger.debug(
715
+ "telemetry.track.no_id_found",
716
+ event_info="Will not report telemetry events as no ID was found.",
717
+ )
667
718
  return
668
719
 
669
720
  if not properties:
@@ -681,7 +732,11 @@ def _track(
681
732
  with_default_context_fields(context),
682
733
  )
683
734
  except Exception as e: # skipcq:PYL-W0703
684
- logger.debug(f"Skipping telemetry reporting: {e}")
735
+ structlogger.debug(
736
+ "telemetry.track.error",
737
+ error=str(e),
738
+ event_info="Skipping telemetry reporting",
739
+ )
685
740
 
686
741
 
687
742
  def _identify(
@@ -702,7 +757,10 @@ def _identify(
702
757
  telemetry_id = get_telemetry_id()
703
758
 
704
759
  if not telemetry_id:
705
- logger.debug("Will not report telemetry events as no ID was found.")
760
+ structlogger.debug(
761
+ "telemetry.identify.no_id_found",
762
+ event_info="Will not report telemetry events as no ID was found.",
763
+ )
706
764
  return
707
765
 
708
766
  if not traits:
@@ -710,7 +768,11 @@ def _identify(
710
768
 
711
769
  _send_traits(telemetry_id, traits, with_default_context_fields(context))
712
770
  except Exception as e:
713
- logger.debug(f"Skipping telemetry reporting: {e}")
771
+ structlogger.debug(
772
+ "telemetry.identify.error",
773
+ error=str(e),
774
+ event_info="Skipping telemetry reporting",
775
+ )
714
776
 
715
777
 
716
778
  def _send_traits(
@@ -868,13 +930,16 @@ def strip_sensitive_data_from_sentry_event(
868
930
 
869
931
 
870
932
  @ensure_telemetry_enabled
871
- def initialize_error_reporting() -> None:
933
+ def initialize_error_reporting(private_mode: bool = True) -> None:
872
934
  """Sets up automated error reporting.
873
935
 
874
936
  Exceptions are reported to sentry. We avoid sending any metadata (local
875
937
  variables, paths, ...) to make sure we don't compromise any data. Only the
876
938
  exception and its stacktrace is logged and only if the exception origins
877
939
  from the `rasa` package.
940
+
941
+ Args:
942
+ private_mode: If True, try to send as little data as possible.
878
943
  """
879
944
  import sentry_sdk
880
945
  from sentry_sdk import configure_scope
@@ -892,11 +957,18 @@ def initialize_error_reporting() -> None:
892
957
 
893
958
  telemetry_id = get_telemetry_id()
894
959
 
960
+ # in hello rasa we use a different project, so we need to be able
961
+ # to set the whole url. since we can't change the behavior of sentry in pro
962
+ # we have two kinds of keys, full urls and jsut the key within the fixed rasa
963
+ # pro project.
964
+ if not key.startswith("https://"):
965
+ key = f"https://{key}.ingest.sentry.io/2801673"
966
+
895
967
  # this is a very defensive configuration, avoiding as many integrations as
896
968
  # possible. it also submits very little data (exception with error message
897
969
  # and line numbers).
898
970
  sentry_sdk.init(
899
- f"https://{key}.ingest.sentry.io/2801673",
971
+ key,
900
972
  before_send=before_send,
901
973
  integrations=[
902
974
  ExcepthookIntegration(),
@@ -916,7 +988,7 @@ def initialize_error_reporting() -> None:
916
988
  OSError,
917
989
  ],
918
990
  in_app_include=["rasa"], # only submit errors in this package
919
- include_local_variables=False, # don't submit local variables
991
+ include_local_variables=not private_mode,
920
992
  release=f"rasa-{rasa.__version__}",
921
993
  default_integrations=False,
922
994
  environment="development" if in_continuous_integration() else "production",
@@ -937,6 +1009,7 @@ def initialize_error_reporting() -> None:
937
1009
  # os is a nested dict, hence we report it separately
938
1010
  scope.set_context("Operating System", default_context.pop("os"))
939
1011
  scope.set_context("Environment", default_context)
1012
+ structlogger.debug("telemetry.sentry.initialized")
940
1013
 
941
1014
 
942
1015
  @contextlib.contextmanager
@@ -1426,6 +1499,7 @@ def track_shell_started(model_type: Text, assistant_id: Text) -> None:
1426
1499
 
1427
1500
  Args:
1428
1501
  model_type: Type of the model, core / nlu or rasa.
1502
+ assistant_id: ID of the assistant being inspected.
1429
1503
  """
1430
1504
  _track(
1431
1505
  TELEMETRY_SHELL_STARTED_EVENT,
@@ -1997,7 +2071,7 @@ def _extract_stream_pii(event_broker: Optional["EventBroker"]) -> bool:
1997
2071
  def track_privacy_enabled(
1998
2072
  privacy_config: "PrivacyConfig", event_broker: Optional["EventBroker"]
1999
2073
  ) -> None:
2000
- """Track when PII management capability is enabled"""
2074
+ """Track when PII management capability is enabled."""
2001
2075
  stream_pii = _extract_stream_pii(event_broker)
2002
2076
  privacy_properties = _extract_privacy_enabled_event_properties(
2003
2077
  privacy_config, stream_pii
@@ -1088,15 +1088,13 @@ def _instrument_advance_flows_until_next_action(
1088
1088
  ) -> None:
1089
1089
  def tracing_advance_flows_until_next_action_wrapper(fn: Callable) -> Callable:
1090
1090
  @functools.wraps(fn)
1091
- async def wrapper(
1091
+ def wrapper(
1092
1092
  tracker: DialogueStateTracker,
1093
1093
  available_actions: List[str],
1094
1094
  flows: FlowsList,
1095
1095
  ) -> FlowActionPrediction:
1096
1096
  with tracer.start_as_current_span(f"{module_name}.{fn.__name__}") as span:
1097
- prediction: FlowActionPrediction = await fn(
1098
- tracker, available_actions, flows
1099
- )
1097
+ prediction: FlowActionPrediction = fn(tracker, available_actions, flows)
1100
1098
 
1101
1099
  span.set_attributes(
1102
1100
  {
rasa/utils/common.py CHANGED
@@ -1,6 +1,5 @@
1
1
  import copy
2
2
  import inspect
3
- import json
4
3
  import logging
5
4
  import logging.config
6
5
  import logging.handlers
@@ -35,9 +34,7 @@ from rasa.constants import (
35
34
  ENV_LOG_LEVEL_KAFKA,
36
35
  ENV_LOG_LEVEL_LIBRARIES,
37
36
  ENV_LOG_LEVEL_MATPLOTLIB,
38
- ENV_LOG_LEVEL_MCP,
39
37
  ENV_LOG_LEVEL_RABBITMQ,
40
- ENV_MCP_LOGGING_ENABLED,
41
38
  )
42
39
  from rasa.shared.constants import DEFAULT_LOG_LEVEL, ENV_LOG_LEVEL, TCP_PROTOCOL
43
40
  from rasa.shared.exceptions import RasaException
@@ -284,7 +281,6 @@ def configure_library_logging() -> None:
284
281
  update_kafka_log_level(library_log_level)
285
282
  update_rabbitmq_log_level(library_log_level)
286
283
  update_websockets_log_level(library_log_level)
287
- update_mcp_log_level()
288
284
 
289
285
 
290
286
  def update_apscheduler_log_level() -> None:
@@ -419,56 +415,6 @@ def update_websockets_log_level(library_log_level: Text) -> None:
419
415
  logging.getLogger("websockets").propagate = False
420
416
 
421
417
 
422
- def update_mcp_log_level() -> None:
423
- """Set the log level for MCP-related loggers.
424
-
425
- This function configures logging levels for MCP (Model Context Protocol) related
426
- loggers to reduce noise from HTTP and MCP client libraries.
427
-
428
- Environment Variables:
429
- LOG_LEVEL_MCP: Set the log level for MCP-related loggers.
430
- Valid values: DEBUG, INFO, WARNING, ERROR, CRITICAL
431
- Default: ERROR
432
-
433
- MCP_LOGGING_ENABLED: Enable or disable MCP logging completely.
434
- Valid values: true, false
435
- Default: true
436
-
437
- Examples:
438
- # Show only ERROR and above for MCP logs
439
- export LOG_LEVEL_MCP=ERROR
440
-
441
- # Show DEBUG level MCP logs (very verbose)
442
- export LOG_LEVEL_MCP=DEBUG
443
-
444
- # Completely disable MCP logging
445
- export MCP_LOGGING_ENABLED=false
446
- """
447
- # Check if MCP logging is completely disabled
448
- mcp_logging_enabled = (
449
- os.environ.get(ENV_MCP_LOGGING_ENABLED, "true").lower() == "true"
450
- )
451
-
452
- # Default to ERROR level for MCP logs to reduce noise
453
- mcp_log_level: Union[int, str] = os.environ.get(ENV_LOG_LEVEL_MCP, "ERROR")
454
- if not mcp_logging_enabled:
455
- # Completely disable MCP logging
456
- mcp_log_level = logging.CRITICAL + 1 # Higher than CRITICAL to disable all logs
457
-
458
- # MCP client and HTTP-related loggers that are commonly noisy
459
- mcp_loggers = [
460
- "mcp.client.streamable_http",
461
- "mcp.client",
462
- "httpcore.connection",
463
- "httpcore.http11",
464
- "httpx",
465
- ]
466
-
467
- for logger_name in mcp_loggers:
468
- logging.getLogger(logger_name).setLevel(mcp_log_level)
469
- logging.getLogger(logger_name).propagate = False
470
-
471
-
472
418
  def sort_list_of_dicts_by_first_key(dicts: List[Dict]) -> List[Dict]:
473
419
  """Sorts a list of dictionaries by their first key."""
474
420
  return sorted(dicts, key=lambda d: next(iter(d.keys())))
@@ -700,28 +646,3 @@ def get_bool_env_variable(variable_name: str, default_variable_value: bool) -> b
700
646
  f"Available values are `{true_values + false_values}`"
701
647
  )
702
648
  return value.lower() in true_values
703
-
704
-
705
- def try_parse_json(value: Any) -> Any:
706
- """If value is a JSON string, parse it into a dict/list, else return as-is."""
707
- if isinstance(value, str):
708
- try:
709
- return json.loads(value)
710
- except json.JSONDecodeError:
711
- return value
712
- return value
713
-
714
-
715
- def ensure_jsonified_iterable(value: Any) -> Any:
716
- """Convert iterables to JSON strings, flatten nested JSON strings in dicts/lists."""
717
- if isinstance(value, dict):
718
- # Recursively process dict values
719
- return {
720
- key: ensure_jsonified_iterable(try_parse_json(val))
721
- for key, val in value.items()
722
- }
723
- elif isinstance(value, list):
724
- # Recursively process each item
725
- return [ensure_jsonified_iterable(try_parse_json(val)) for val in value]
726
- # Keep primitives as-is
727
- return value