rasa-pro 3.14.0.dev4__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 (463) 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 +10 -56
  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 +4 -4
  277. rasa/core/channels/hangouts.py +2 -2
  278. rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-18042c22.js} +1 -1
  279. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  280. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  281. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  282. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  283. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  284. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  285. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-31422447.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-518a90db.js} +1 -1
  287. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  288. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-e048c2be.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  290. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  291. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  293. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-14702d8a.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-f18b534b.js} +1 -1
  296. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +1335 -0
  297. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  299. rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-5a3b2123.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-2272a8c7.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-35bcf273.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  303. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-980de489.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-3c03abde.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  316. rasa/core/channels/inspector/dist/index.html +2 -2
  317. rasa/core/channels/inspector/index.html +1 -1
  318. rasa/core/channels/inspector/src/App.tsx +10 -11
  319. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  320. rasa/core/channels/inspector/src/components/DialogueStack.tsx +4 -6
  321. rasa/core/channels/inspector/src/helpers/formatters.ts +3 -24
  322. rasa/core/channels/inspector/src/theme/base/styles.ts +1 -19
  323. rasa/core/channels/inspector/src/types.ts +0 -4
  324. rasa/core/channels/socketio.py +212 -51
  325. rasa/core/channels/studio_chat.py +49 -29
  326. rasa/core/channels/voice_stream/genesys.py +1 -1
  327. rasa/core/channels/voice_stream/voice_channel.py +5 -3
  328. rasa/core/constants.py +0 -4
  329. rasa/core/policies/enterprise_search_policy.py +6 -11
  330. rasa/core/policies/flow_policy.py +4 -4
  331. rasa/core/policies/flows/flow_executor.py +45 -456
  332. rasa/core/policies/intentless_policy.py +1 -1
  333. rasa/core/policies/unexpected_intent_policy.py +0 -1
  334. rasa/core/processor.py +15 -18
  335. rasa/core/run.py +14 -11
  336. rasa/core/tracker_stores/tracker_store.py +7 -3
  337. rasa/core/train.py +1 -1
  338. rasa/core/training/interactive.py +16 -16
  339. rasa/core/training/story_conflict.py +5 -5
  340. rasa/core/utils.py +1 -21
  341. rasa/dialogue_understanding/commands/__init__.py +0 -8
  342. rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -97
  343. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +0 -11
  344. rasa/dialogue_understanding/commands/clarify_command.py +0 -10
  345. rasa/dialogue_understanding/commands/knowledge_answer_command.py +0 -11
  346. rasa/dialogue_understanding/commands/start_flow_command.py +8 -164
  347. rasa/dialogue_understanding/commands/utils.py +2 -6
  348. rasa/dialogue_understanding/generator/command_parser.py +0 -4
  349. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  350. rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -50
  351. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  352. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  353. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +6 -7
  354. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +6 -7
  355. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -41
  356. rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -163
  357. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +8 -52
  358. rasa/dialogue_understanding/processor/command_processor.py +15 -31
  359. rasa/dialogue_understanding/stack/dialogue_stack.py +2 -123
  360. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +0 -57
  361. rasa/dialogue_understanding/stack/utils.py +2 -17
  362. rasa/dialogue_understanding_test/du_test_runner.py +2 -7
  363. rasa/e2e_test/e2e_test_runner.py +2 -12
  364. rasa/engine/caching.py +2 -2
  365. rasa/engine/recipes/default_components.py +18 -10
  366. rasa/engine/storage/local_model_storage.py +45 -2
  367. rasa/graph_components/validators/default_recipe_validator.py +134 -134
  368. rasa/hooks.py +5 -5
  369. rasa/llm_fine_tuning/utils.py +2 -2
  370. rasa/model_manager/model_api.py +4 -5
  371. rasa/model_manager/runner_service.py +1 -1
  372. rasa/model_manager/socket_bridge.py +20 -14
  373. rasa/model_manager/trainer_service.py +12 -9
  374. rasa/model_manager/utils.py +1 -29
  375. rasa/model_manager/warm_rasa_process.py +1 -1
  376. rasa/nlu/extractors/extractor.py +1 -2
  377. rasa/plugin.py +8 -8
  378. rasa/privacy/privacy_manager.py +2 -11
  379. rasa/server.py +2 -14
  380. rasa/shared/constants.py +0 -5
  381. rasa/shared/core/constants.py +1 -12
  382. rasa/shared/core/domain.py +58 -11
  383. rasa/shared/core/events.py +0 -327
  384. rasa/shared/core/flows/flow_step.py +7 -1
  385. rasa/shared/core/flows/flows_list.py +2 -2
  386. rasa/shared/core/flows/flows_yaml_schema.json +186 -112
  387. rasa/shared/core/flows/steps/call.py +5 -53
  388. rasa/shared/core/flows/validation.py +7 -46
  389. rasa/shared/core/flows/yaml_flows_io.py +17 -9
  390. rasa/shared/core/slots.py +6 -2
  391. rasa/shared/core/trackers.py +2 -5
  392. rasa/shared/exceptions.py +0 -4
  393. rasa/shared/importers/importer.py +6 -0
  394. rasa/shared/importers/utils.py +77 -1
  395. rasa/shared/providers/_utils.py +60 -44
  396. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  397. rasa/shared/providers/llm/_base_litellm_client.py +7 -39
  398. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  399. rasa/shared/providers/llm/litellm_router_llm_client.py +4 -8
  400. rasa/shared/providers/llm/llm_client.py +3 -7
  401. rasa/shared/providers/llm/llm_response.py +0 -49
  402. rasa/shared/providers/llm/self_hosted_llm_client.py +4 -8
  403. rasa/shared/utils/llm.py +5 -28
  404. rasa/shared/utils/schemas/events.py +0 -42
  405. rasa/shared/utils/yaml.py +1 -3
  406. rasa/studio/upload.py +16 -47
  407. rasa/telemetry.py +97 -23
  408. rasa/tracing/instrumentation/instrumentation.py +10 -12
  409. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  410. rasa/utils/common.py +0 -79
  411. rasa/utils/io.py +27 -9
  412. rasa/utils/json_utils.py +6 -1
  413. rasa/utils/log_utils.py +6 -2
  414. rasa/utils/ml_utils.py +1 -1
  415. rasa/utils/openapi.py +144 -0
  416. rasa/utils/tensorflow/rasa_layers.py +1 -1
  417. rasa/utils/train_utils.py +15 -15
  418. rasa/validator.py +21 -19
  419. rasa/version.py +1 -1
  420. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/METADATA +17 -14
  421. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/RECORD +431 -200
  422. rasa/agents/agent_factory.py +0 -122
  423. rasa/agents/agent_manager.py +0 -162
  424. rasa/agents/constants.py +0 -40
  425. rasa/agents/core/agent_protocol.py +0 -107
  426. rasa/agents/core/types.py +0 -70
  427. rasa/agents/exceptions.py +0 -8
  428. rasa/agents/protocol/__init__.py +0 -5
  429. rasa/agents/protocol/a2a/a2a_agent.py +0 -662
  430. rasa/agents/protocol/mcp/mcp_base_agent.py +0 -676
  431. rasa/agents/protocol/mcp/mcp_open_agent.py +0 -276
  432. rasa/agents/protocol/mcp/mcp_task_agent.py +0 -469
  433. rasa/agents/schemas/__init__.py +0 -12
  434. rasa/agents/schemas/agent_input.py +0 -38
  435. rasa/agents/schemas/agent_output.py +0 -26
  436. rasa/agents/schemas/agent_tool_result.py +0 -51
  437. rasa/agents/schemas/agent_tool_schema.py +0 -134
  438. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +0 -15
  439. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +0 -17
  440. rasa/agents/utils.py +0 -72
  441. rasa/core/available_agents.py +0 -199
  442. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
  443. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
  444. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
  445. rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
  446. rasa/core/policies/flows/mcp_tool_executor.py +0 -277
  447. rasa/dialogue_understanding/commands/continue_agent_command.py +0 -91
  448. rasa/dialogue_understanding/commands/restart_agent_command.py +0 -162
  449. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +0 -61
  450. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +0 -81
  451. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +0 -81
  452. rasa/shared/agents/utils.py +0 -35
  453. rasa/shared/utils/mcp/server_connection.py +0 -157
  454. /rasa/{agents → builder}/__init__.py +0 -0
  455. /rasa/{agents/core → builder/copilot}/__init__.py +0 -0
  456. /rasa/{agents/protocol/a2a → builder/copilot/prompts}/__init__.py +0 -0
  457. /rasa/{agents/protocol/mcp → builder/copilot/templated_messages}/__init__.py +0 -0
  458. /rasa/{agents/templates → builder/document_retrieval}/__init__.py +0 -0
  459. /rasa/{shared/agents → cli/project_templates/finance/actions/accounts}/__init__.py +0 -0
  460. /rasa/{shared/utils/mcp → cli/project_templates/finance/actions/cards}/__init__.py +0 -0
  461. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/NOTICE +0 -0
  462. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/WHEEL +0 -0
  463. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/entry_points.txt +0 -0
@@ -443,7 +443,7 @@ def instrument(
443
443
  tracer_provider.get_tracer(lock_store_class.__module__),
444
444
  attribute_extractors.extract_attrs_for_lock_store,
445
445
  )
446
- lock_store_class.lock = contextlib.asynccontextmanager(traced_lock_method) # type: ignore[method-assign]
446
+ lock_store_class.lock = contextlib.asynccontextmanager(traced_lock_method) # type: ignore[assignment]
447
447
 
448
448
  logger.debug(f"Instrumented '{lock_store_class.__name__}.lock'.")
449
449
 
@@ -790,7 +790,7 @@ def _instrument_nlu_command_adapter_predict_commands(
790
790
 
791
791
  return wrapper
792
792
 
793
- nlu_command_adapter_class.predict_commands = ( # type: ignore[method-assign]
793
+ nlu_command_adapter_class.predict_commands = ( # type: ignore[assignment]
794
794
  tracing_nlu_command_adapter_predict_commands_wrapper(
795
795
  nlu_command_adapter_class.predict_commands
796
796
  )
@@ -839,7 +839,7 @@ def _instrument_multi_step_llm_command_generator_parse_commands(
839
839
 
840
840
  return wrapper
841
841
 
842
- multi_step_llm_command_generator_class.parse_commands = ( # type: ignore[method-assign]
842
+ multi_step_llm_command_generator_class.parse_commands = ( # type: ignore[assignment]
843
843
  tracing_multi_step_llm_command_generator_parse_commands_wrapper(
844
844
  multi_step_llm_command_generator_class.parse_commands
845
845
  )
@@ -873,7 +873,7 @@ def _instrument_information_retrieval_search(
873
873
 
874
874
  return wrapper
875
875
 
876
- vector_store_class.search = tracing_information_retrieval_search_wrapper( # type: ignore[method-assign]
876
+ vector_store_class.search = tracing_information_retrieval_search_wrapper( # type: ignore[assignment]
877
877
  vector_store_class.search
878
878
  )
879
879
 
@@ -1013,7 +1013,7 @@ def _instrument_get_tracker(
1013
1013
 
1014
1014
  return wrapper
1015
1015
 
1016
- processor_class.get_tracker = tracing_get_tracker_wrapper( # type: ignore[method-assign]
1016
+ processor_class.get_tracker = tracing_get_tracker_wrapper( # type: ignore[assignment]
1017
1017
  processor_class.get_tracker
1018
1018
  )
1019
1019
 
@@ -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
  {
@@ -1225,7 +1223,7 @@ def _instrument_run_action(
1225
1223
 
1226
1224
  return wrapper
1227
1225
 
1228
- processor_class._run_action = tracing_run_action_wrapper( # type: ignore[method-assign]
1226
+ processor_class._run_action = tracing_run_action_wrapper( # type: ignore[assignment]
1229
1227
  processor_class._run_action
1230
1228
  )
1231
1229
 
@@ -1284,7 +1282,7 @@ def _instrument_endpoint_config(
1284
1282
 
1285
1283
  return wrapper
1286
1284
 
1287
- endpoint_config_class.request = tracing_endpoint_config_wrapper( # type: ignore[method-assign]
1285
+ endpoint_config_class.request = tracing_endpoint_config_wrapper( # type: ignore[assignment]
1288
1286
  endpoint_config_class.request
1289
1287
  )
1290
1288
 
@@ -1316,7 +1314,7 @@ def _instrument_grpc_custom_action_executor(
1316
1314
 
1317
1315
  return wrapper
1318
1316
 
1319
- grpc_custom_action_executor_class.run = tracing_grpc_custom_action_executor_wrapper( # type: ignore[method-assign]
1317
+ grpc_custom_action_executor_class.run = tracing_grpc_custom_action_executor_wrapper( # type: ignore[assignment]
1320
1318
  grpc_custom_action_executor_class.run
1321
1319
  )
1322
1320
 
@@ -37,7 +37,7 @@ def _instrument_select_response_examples(
37
37
 
38
38
  return wrapper
39
39
 
40
- policy_class.select_response_examples = tracing_select_response_examples_wrapper( # type: ignore[method-assign]
40
+ policy_class.select_response_examples = tracing_select_response_examples_wrapper( # type: ignore[assignment]
41
41
  policy_class.select_response_examples
42
42
  )
43
43
 
@@ -72,7 +72,7 @@ def _instrument_select_few_shot_conversations(
72
72
 
73
73
  return wrapper
74
74
 
75
- policy_class.select_few_shot_conversations = ( # type: ignore[method-assign]
75
+ policy_class.select_few_shot_conversations = ( # type: ignore[assignment]
76
76
  tracing_select_few_shot_conversations_wrapper(
77
77
  policy_class.select_few_shot_conversations
78
78
  )
@@ -104,7 +104,7 @@ def _instrument_extract_ai_responses(
104
104
 
105
105
  return wrapper
106
106
 
107
- policy_class.extract_ai_responses = tracing_extract_ai_responses_wrapper( # type: ignore[method-assign]
107
+ policy_class.extract_ai_responses = tracing_extract_ai_responses_wrapper( # type: ignore[assignment]
108
108
  policy_class.extract_ai_responses
109
109
  )
110
110
 
@@ -137,7 +137,7 @@ def _instrument_generate_answer(
137
137
 
138
138
  return wrapper
139
139
 
140
- policy_class.generate_answer = tracing_generate_answer_wrapper( # type: ignore[method-assign]
140
+ policy_class.generate_answer = tracing_generate_answer_wrapper( # type: ignore[assignment]
141
141
  policy_class.generate_answer
142
142
  )
143
143
 
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
rasa/utils/io.py CHANGED
@@ -26,6 +26,7 @@ from typing_extensions import Protocol
26
26
 
27
27
  import rasa.shared.constants
28
28
  import rasa.shared.utils.io
29
+ from rasa.shared.exceptions import RasaException
29
30
 
30
31
  if TYPE_CHECKING:
31
32
  from prompt_toolkit.validation import Validator
@@ -124,9 +125,7 @@ def create_path(file_path: Text) -> None:
124
125
  def file_type_validator(
125
126
  valid_file_types: List[Text], error_message: Text
126
127
  ) -> Type["Validator"]:
127
- """Creates a `Validator` class which can be used with `questionary` to validate
128
- file paths.
129
- """
128
+ """Creates a file type validator class for the questionary package."""
130
129
 
131
130
  def is_valid(path: Text) -> bool:
132
131
  return path is not None and any(
@@ -137,9 +136,7 @@ def file_type_validator(
137
136
 
138
137
 
139
138
  def not_empty_validator(error_message: Text) -> Type["Validator"]:
140
- """Creates a `Validator` class which can be used with `questionary` to validate
141
- that the user entered something other than whitespace.
142
- """
139
+ """Creates a not empty validator class for the questionary package."""
143
140
 
144
141
  def is_valid(input: Text) -> bool:
145
142
  return input is not None and input.strip() != ""
@@ -150,9 +147,7 @@ def not_empty_validator(error_message: Text) -> Type["Validator"]:
150
147
  def create_validator(
151
148
  function: Callable[[Text], bool], error_message: Text
152
149
  ) -> Type["Validator"]:
153
- """Helper method to create `Validator` classes from callable functions. Should be
154
- removed when questionary supports `Validator` objects.
155
- """
150
+ """Helper method to create a validator class from a callable function."""
156
151
  from prompt_toolkit.document import Document
157
152
  from prompt_toolkit.validation import ValidationError, Validator
158
153
 
@@ -250,3 +245,26 @@ def write_yaml(
250
245
 
251
246
  with Path(target).open("w", encoding="utf-8") as outfile:
252
247
  dumper.dump(data, outfile, transform=transform)
248
+
249
+
250
+ class InvalidPathException(RasaException):
251
+ """Raised if a path is invalid - e.g. path traversal is detected."""
252
+
253
+
254
+ def subpath(parent: str, child: str) -> str:
255
+ """Return the path to the child directory of the parent directory.
256
+
257
+ Ensures, that child doesn't navigate to parent directories. Prevents
258
+ path traversal. Raises an InvalidPathException if the path is invalid.
259
+
260
+ Based on Snyk's directory traversal mitigation:
261
+ https://learn.snyk.io/lesson/directory-traversal/
262
+ """
263
+ safe_path = os.path.abspath(os.path.join(parent, child))
264
+ parent = os.path.abspath(parent)
265
+
266
+ common_base = os.path.commonpath([parent, safe_path])
267
+ if common_base != parent:
268
+ raise InvalidPathException(f"Invalid path: {safe_path}")
269
+
270
+ return safe_path
rasa/utils/json_utils.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from decimal import Decimal
3
- from typing import Any, Text
3
+ from typing import Any, Dict, List, Text
4
4
 
5
5
 
6
6
  class DecimalEncoder(json.JSONEncoder):
@@ -58,3 +58,8 @@ def replace_decimals_with_floats(obj: Any) -> Any:
58
58
  Input `obj` with all `Decimal` types replaced by `float`s.
59
59
  """
60
60
  return json.loads(json.dumps(obj, cls=DecimalEncoder))
61
+
62
+
63
+ def extract_values(data: Dict, keys: List[Text]) -> Dict:
64
+ """Extracts values for given keys from a dictionary."""
65
+ return {key: data.get(key) for key in keys if data.get(key)}
rasa/utils/log_utils.py CHANGED
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  import os
5
5
  import sys
6
- from typing import Any, Optional
6
+ from typing import Any, List, Optional
7
7
 
8
8
  import structlog
9
9
  from structlog.dev import ConsoleRenderer
@@ -37,6 +37,7 @@ class HumanConsoleRenderer(ConsoleRenderer):
37
37
  def configure_structlog(
38
38
  log_level: Optional[int] = None,
39
39
  include_time: bool = False,
40
+ additional_processors: Optional[List[structlog.typing.Processor]] = None,
40
41
  ) -> None:
41
42
  """Configure logging of the server."""
42
43
  if log_level is None: # Log level NOTSET is 0 so we use `is None` here
@@ -75,6 +76,9 @@ def configure_structlog(
75
76
  if include_time:
76
77
  shared_processors.append(structlog.processors.TimeStamper(fmt="iso"))
77
78
 
79
+ if additional_processors:
80
+ shared_processors.extend(additional_processors)
81
+
78
82
  if not FORCE_JSON_LOGGING and sys.stderr.isatty():
79
83
  # Pretty printing when we run in a terminal session.
80
84
  # Automatically prints pretty tracebacks when "rich" is installed
@@ -90,7 +94,7 @@ def configure_structlog(
90
94
  ]
91
95
 
92
96
  structlog.configure(
93
- processors=processors,
97
+ processors=processors, # type: ignore
94
98
  context_class=dict,
95
99
  # `logger_factory` is used to create wrapped loggers that are used for
96
100
  # OUTPUT. This one returns a `logging.Logger`. The final value (a JSON
rasa/utils/ml_utils.py CHANGED
@@ -119,7 +119,7 @@ def response_for_template(
119
119
  rsps = responses.get(template_name, [])
120
120
  usuable_responses = [r for r in rsps if r.get(KEY_RESPONSES_TEXT)]
121
121
  if usuable_responses:
122
- selected_response = np.random.choice(usuable_responses)
122
+ selected_response = np.random.choice(usuable_responses) # type: ignore
123
123
  return selected_response.get(KEY_RESPONSES_TEXT)
124
124
  else:
125
125
  structlogger.warning(
rasa/utils/openapi.py ADDED
@@ -0,0 +1,144 @@
1
+ from typing import Any, Dict, List, Type
2
+
3
+ from pydantic.main import BaseModel
4
+ from sanic_openapi import openapi
5
+ from sanic_openapi.openapi3.types import Schema
6
+
7
+ _SUPPORTED_ATTRIBUTES = frozenset(["format", "enum", "required", "example"])
8
+
9
+
10
+ def _to_schema(
11
+ definition_stack: List[str], schema_def: Dict[str, Any], definitions: Dict[str, Any]
12
+ ) -> Schema:
13
+ type = schema_def.get("type")
14
+
15
+ if type == "object":
16
+ properties_spec = schema_def.get("properties", {})
17
+ properties = {}
18
+ for key in properties_spec:
19
+ properties[key] = _to_schema(
20
+ definition_stack=definition_stack,
21
+ schema_def=properties_spec[key],
22
+ definitions=definitions,
23
+ )
24
+ schema = openapi.Object(
25
+ title=schema_def.get("title"),
26
+ description=schema_def.get("description"),
27
+ required=schema_def.get("required"),
28
+ properties=properties,
29
+ )
30
+ elif type == "array":
31
+ schema = openapi.Array(
32
+ description=schema_def.get("description"),
33
+ required=schema_def.get("required"),
34
+ items=_to_schema(
35
+ definition_stack=definition_stack,
36
+ schema_def=schema_def.get("items"),
37
+ definitions=definitions,
38
+ ),
39
+ )
40
+ elif type is None:
41
+ if allof_spec := schema_def.get("allOf"): # Model, Enum
42
+ definition = allof_spec[0]["$ref"].split("/")[-1]
43
+ definition_data = definitions.get(definition)
44
+ if definition_data is None:
45
+ schema = openapi.Object(
46
+ title=definition, description=schema_def.get("description")
47
+ )
48
+ else:
49
+ schema = (
50
+ _to_schema(
51
+ definition_stack=definition_stack + [definition],
52
+ schema_def={**definition_data},
53
+ definitions=definitions,
54
+ )
55
+ if definition not in definition_stack
56
+ else openapi.Object(
57
+ title=definition, description=schema_def.get("description")
58
+ )
59
+ )
60
+
61
+ elif anyof_spec := schema_def.get("anyOf"): # Union
62
+ anyof = []
63
+ for any in anyof_spec:
64
+ if any.get("type"):
65
+ schema_type_obj = Schema(
66
+ **{
67
+ "type": any.get("type"),
68
+ "description": any.get("description"),
69
+ }
70
+ )
71
+ anyof.append(schema_type_obj)
72
+ else:
73
+ definition = any["$ref"].split("/")[-1]
74
+ if definition not in definition_stack:
75
+ definition_data = definitions.get(definition)
76
+ if definition_data is not None:
77
+ anyof.append(
78
+ _to_schema(
79
+ definition_stack=definition_stack + [definition],
80
+ schema_def=definition_data,
81
+ definitions=definitions,
82
+ )
83
+ )
84
+ else:
85
+ anyof.append(
86
+ openapi.Object(
87
+ title=definition,
88
+ description=schema_def.get(
89
+ "description", definition
90
+ ),
91
+ properties={},
92
+ )
93
+ )
94
+ else:
95
+ anyof.append(
96
+ openapi.Object(
97
+ title=definition,
98
+ description=schema_def.get("description", definition),
99
+ properties={},
100
+ )
101
+ )
102
+ schema = Schema(anyOf=anyof)
103
+ elif ref := schema_def.get("$ref"): # $ref
104
+ definition = ref.split("/")[-1]
105
+ definition_data = definitions.get(definition)
106
+ if definition_data is not None:
107
+ schema = _to_schema(
108
+ definition_stack=definition_stack,
109
+ schema_def=definition_data,
110
+ definitions=definitions,
111
+ )
112
+ else:
113
+ schema = openapi.Object(
114
+ title=definition, description=schema_def.get("description")
115
+ )
116
+ else: # Any type
117
+ schema = Schema(
118
+ **{"type": "object", "description": schema_def.get("description")}
119
+ )
120
+
121
+ else:
122
+ schema_spec = {
123
+ "type": schema_def.get("type"),
124
+ "description": schema_def.get("description"),
125
+ }
126
+ for spec in _SUPPORTED_ATTRIBUTES:
127
+ if schema_def.get(spec):
128
+ schema_spec[spec] = schema_def.get(spec)
129
+ schema = Schema(**schema_spec)
130
+
131
+ return schema
132
+
133
+
134
+ def model_to_schema(model: Type[BaseModel]) -> Schema:
135
+ schema = model.model_json_schema()
136
+ # Handle both $defs (newer JSON Schema) and definitions (older JSON Schema)
137
+ definitions = schema.get("$defs") or schema.get("definitions") or {}
138
+ return _to_schema(
139
+ definition_stack=[],
140
+ schema_def=dict(
141
+ filter(lambda key: key[0] not in ("definitions", "$defs"), schema.items())
142
+ ),
143
+ definitions=definitions,
144
+ )
@@ -291,7 +291,7 @@ class ConcatenateSparseDenseFeatures(RasaCustomLayer):
291
291
  [
292
292
  config[DENSE_DIMENSION][attribute]
293
293
  if signature.is_sparse
294
- else (signature.units or 0)
294
+ else signature.units
295
295
  for signature in feature_type_signature
296
296
  ]
297
297
  )
rasa/utils/train_utils.py CHANGED
@@ -11,7 +11,7 @@ from rasa.nlu.constants import NUMBER_OF_SUB_TOKENS
11
11
  from rasa.shared.constants import NEXT_MAJOR_VERSION_FOR_DEPRECATIONS
12
12
  from rasa.shared.exceptions import InvalidConfigException
13
13
  from rasa.shared.nlu.constants import SPLIT_ENTITIES_BY_COMMA
14
- from rasa.utils.tensorflow.callback import RasaModelCheckpoint
14
+ from rasa.utils.tensorflow.callback import RasaModelCheckpoint, RasaTrainingLogger
15
15
  from rasa.utils.tensorflow.constants import (
16
16
  AUTO,
17
17
  CHECKPOINT_MODEL,
@@ -371,20 +371,20 @@ def create_common_callbacks(
371
371
  Returns:
372
372
  A list of callbacks.
373
373
  """
374
- # import tensorflow as tf
375
-
376
- callbacks = []
377
-
378
- # if tensorboard_log_dir:
379
- # callbacks.append(
380
- # tf.keras.callbacks.TensorBoard(
381
- # log_dir=tensorboard_log_dir,
382
- # update_freq=tensorboard_log_level,
383
- # write_graph=True,
384
- # write_images=True,
385
- # histogram_freq=10,
386
- # )
387
- # )
374
+ import tensorflow as tf
375
+
376
+ callbacks = [RasaTrainingLogger(epochs, silent=False)]
377
+
378
+ if tensorboard_log_dir:
379
+ callbacks.append(
380
+ tf.keras.callbacks.TensorBoard(
381
+ log_dir=tensorboard_log_dir,
382
+ update_freq=tensorboard_log_level,
383
+ write_graph=True,
384
+ write_images=True,
385
+ histogram_freq=10,
386
+ )
387
+ )
388
388
 
389
389
  if checkpoint_dir:
390
390
  callbacks.append(RasaModelCheckpoint(checkpoint_dir))
rasa/validator.py CHANGED
@@ -9,7 +9,7 @@ from jinja2 import Template
9
9
  from pypred import Predicate
10
10
  from pypred.ast import CompareOperator, Literal, NegateOperator
11
11
 
12
- # import rasa.core.training.story_conflict
12
+ import rasa.core.training.story_conflict
13
13
  import rasa.shared.nlu.constants
14
14
  import rasa.shared.utils.cli
15
15
  import rasa.shared.utils.io
@@ -60,8 +60,7 @@ from rasa.shared.core.flows.utils import (
60
60
  get_invalid_slot_persistence_config_error_message,
61
61
  warn_deprecated_collect_step_config,
62
62
  )
63
-
64
- # from rasa.shared.core.generator import TrainingDataGenerator
63
+ from rasa.shared.core.generator import TrainingDataGenerator
65
64
  from rasa.shared.core.slot_mappings import CoexistenceSystemType
66
65
  from rasa.shared.core.slots import BooleanSlot, CategoricalSlot, ListSlot, Slot
67
66
  from rasa.shared.core.training_data.story_reader.yaml_story_reader import (
@@ -71,7 +70,7 @@ from rasa.shared.core.training_data.structures import StoryGraph
71
70
  from rasa.shared.data import create_regex_pattern_reader
72
71
  from rasa.shared.exceptions import RasaException
73
72
  from rasa.shared.importers.importer import TrainingDataImporter
74
- from rasa.shared.nlu.constants import COMMANDS, INTENT
73
+ from rasa.shared.nlu.constants import COMMANDS
75
74
  from rasa.shared.nlu.training_data.message import Message
76
75
  from rasa.shared.nlu.training_data.training_data import TrainingData
77
76
  from rasa.telemetry import track_validation_error_log
@@ -131,7 +130,7 @@ class Validator:
131
130
  """Compares list of intents in domain with intents in NLU training data."""
132
131
  everything_is_alright = True
133
132
 
134
- nlu_data_intents = {e.data[INTENT] for e in self.intents.intent_examples}
133
+ nlu_data_intents = {e.data["intent"] for e in self.intents.intent_examples}
135
134
 
136
135
  for intent in self._non_default_intents():
137
136
  if intent not in nlu_data_intents:
@@ -173,7 +172,7 @@ class Validator:
173
172
  duplication_hash = defaultdict(set)
174
173
  for example in self.intents.intent_examples:
175
174
  text = example.get(rasa.shared.nlu.constants.TEXT)
176
- duplication_hash[text].add(example.get(INTENT))
175
+ duplication_hash[text].add(example.get("intent"))
177
176
 
178
177
  for text, intents in duplication_hash.items():
179
178
  if len(duplication_hash[text]) > 1:
@@ -447,18 +446,17 @@ class Validator:
447
446
  event_info="Story structure validation...",
448
447
  )
449
448
 
450
- # trackers = TrainingDataGenerator(
451
- # self.story_graph,
452
- # domain=self.domain,
453
- # remove_duplicates=False,
454
- # augmentation_factor=0,
455
- # ).generate_story_trackers()
449
+ trackers = TrainingDataGenerator(
450
+ self.story_graph,
451
+ domain=self.domain,
452
+ remove_duplicates=False,
453
+ augmentation_factor=0,
454
+ ).generate_story_trackers()
456
455
 
457
456
  # Create a list of `StoryConflict` objects
458
- # conflicts = rasa.core.training.story_conflict.find_story_conflicts(
459
- # trackers, self.domain, max_history
460
- # )
461
- conflicts = None
457
+ conflicts = rasa.core.training.story_conflict.find_story_conflicts(
458
+ trackers, self.domain, max_history
459
+ )
462
460
 
463
461
  if not conflicts:
464
462
  structlogger.info(
@@ -631,11 +629,14 @@ class Validator:
631
629
  flow_id: str,
632
630
  ) -> bool:
633
631
  """Validates that a collect step can have either an action or an utterance.
632
+
634
633
  Also logs an error if neither an action nor an utterance is defined.
635
634
 
636
635
  Args:
637
636
  collect: the name of the slot to collect
638
637
  all_good: boolean value indicating the validation status
638
+ domain_slots: the slots of the domain
639
+ flow_id: the id of the flow
639
640
 
640
641
  Returns:
641
642
  False, if validation failed, true, otherwise
@@ -684,9 +685,10 @@ class Validator:
684
685
  has_action_defined=has_action_defined,
685
686
  flow=flow_id,
686
687
  event_info=(
687
- f"The collect step '{collect.collect}' has neither an utterance "
688
- f"nor an action defined, or an initial value defined in the domain."
689
- f"You need to define either an utterance or an action."
688
+ f"The collect step '{collect.collect}' has neither a response "
689
+ f"nor an action defined, nor an initial value defined in the "
690
+ f"domain. You can fix this by adding a response named "
691
+ f"'{collect.utter}' used in the collect step."
690
692
  ),
691
693
  )
692
694
  all_good = False
rasa/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  # this file will automatically be changed,
2
2
  # do not add anything but the version number here!
3
- __version__ = "3.14.0.dev4"
3
+ __version__ = "3.14.0.dev5"