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
@@ -1,31 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Dict, List, Optional, Text
4
+ from typing import Any, Dict
5
5
 
6
- from rasa.core.actions.action import Action
7
- from rasa.core.channels import OutputChannel
8
- from rasa.core.nlg import NaturalLanguageGenerator
9
6
  from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
10
- from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
11
7
  from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
12
- from rasa.shared.core.constants import (
13
- ACTION_ASK_INTERRUPTED_FLOW_TO_CONTINUE,
14
- ACTION_CANCEL_INTERRUPTED_FLOW,
15
- ACTION_CONTINUE_INTERRUPTED_FLOW,
16
- ACTION_SET_INTERRUPTED_FLOWS,
17
- )
18
- from rasa.shared.core.domain import Domain
19
- from rasa.shared.core.events import Event, SlotSet
20
- from rasa.shared.core.trackers import DialogueStateTracker
21
8
 
22
9
  FLOW_PATTERN_CONTINUE_INTERRUPTED = (
23
10
  RASA_DEFAULT_FLOW_PATTERN_PREFIX + "continue_interrupted"
24
11
  )
25
- INTERRUPTED_FLOWS_SLOT = "interrupted_flows"
26
- INTERRUPTED_FLOW_TO_CONTINUE_SLOT = "interrupted_flow_to_continue"
27
- MULTIPLE_FLOWS_INTERRUPTED_SLOT = "multiple_flows_interrupted"
28
- CONFIRMATION_CONTINUE_INTERRUPTED_FLOW_SLOT = "confirmation_continue_interrupted_flow"
29
12
 
30
13
 
31
14
  @dataclass
@@ -66,148 +49,3 @@ class ContinueInterruptedPatternFlowStackFrame(PatternFlowStackFrame):
66
49
  and self.step_id == other.step_id
67
50
  and self.previous_flow_name == other.previous_flow_name
68
51
  )
69
-
70
-
71
- class ActionSetInterruptedFlows(Action):
72
- def name(self) -> str:
73
- return ACTION_SET_INTERRUPTED_FLOWS
74
-
75
- async def run(
76
- self,
77
- output_channel: OutputChannel,
78
- nlg: NaturalLanguageGenerator,
79
- tracker: DialogueStateTracker,
80
- domain: Domain,
81
- metadata: Optional[Dict[Text, Any]] = None,
82
- ) -> list[Event]:
83
- interrupted_flows_set = set()
84
- interrupted_user_flow_stack_frames = tracker.stack.get_all_user_flow_frames()
85
-
86
- for frame in interrupted_user_flow_stack_frames:
87
- interrupted_flows_set.add(frame.flow_id)
88
-
89
- interrupted_flows = list(interrupted_flows_set)
90
- multiple_flows_interrupted = len(interrupted_flows) > 1
91
-
92
- return [
93
- SlotSet(INTERRUPTED_FLOWS_SLOT, interrupted_flows),
94
- SlotSet(MULTIPLE_FLOWS_INTERRUPTED_SLOT, multiple_flows_interrupted),
95
- ]
96
-
97
-
98
- class ActionAskInterruptedFlowToContinue(Action):
99
- def name(self) -> str:
100
- return ACTION_ASK_INTERRUPTED_FLOW_TO_CONTINUE
101
-
102
- async def run(
103
- self,
104
- output_channel: OutputChannel,
105
- nlg: NaturalLanguageGenerator,
106
- tracker: DialogueStateTracker,
107
- domain: Domain,
108
- metadata: Optional[Dict[Text, Any]] = None,
109
- ) -> List[Event]:
110
- interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
111
-
112
- buttons = [
113
- {
114
- "title": flow_id,
115
- "payload": f'/SetSlots{{"{INTERRUPTED_FLOW_TO_CONTINUE_SLOT}": '
116
- f'"{flow_id}"}}',
117
- }
118
- for flow_id in interrupted_flows or []
119
- ]
120
- buttons.append(
121
- {
122
- "title": "None of them",
123
- "payload": f'/SetSlots{{"{INTERRUPTED_FLOW_TO_CONTINUE_SLOT}": '
124
- f'"none"}}',
125
- }
126
- )
127
-
128
- await output_channel.send_text_with_buttons(
129
- tracker.sender_id,
130
- "You previously started several other tasks. "
131
- "Would you like to resume any of them?",
132
- buttons=buttons,
133
- )
134
-
135
- return []
136
-
137
-
138
- class ActionContinueInterruptedFlow(Action):
139
- def name(self) -> str:
140
- return ACTION_CONTINUE_INTERRUPTED_FLOW
141
-
142
- async def run(
143
- self,
144
- output_channel: OutputChannel,
145
- nlg: NaturalLanguageGenerator,
146
- tracker: DialogueStateTracker,
147
- domain: Domain,
148
- metadata: Optional[Dict[Text, Any]] = None,
149
- ) -> List[Event]:
150
- from rasa.dialogue_understanding.commands import StartFlowCommand
151
-
152
- # get all necessary slot values
153
- multiple = tracker.get_slot(MULTIPLE_FLOWS_INTERRUPTED_SLOT)
154
- selected_flow = tracker.get_slot(INTERRUPTED_FLOW_TO_CONTINUE_SLOT)
155
- interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
156
-
157
- original_user_frame = top_user_flow_frame(tracker.stack)
158
-
159
- # case of multiple interrupted flows, where the user selected a flow to continue
160
- if multiple:
161
- flow_id = selected_flow if selected_flow else None
162
- # case of single interrupted flow, so there is only one flow to continue
163
- else:
164
- flow_id = interrupted_flows[0] if interrupted_flows else None
165
-
166
- event_list = []
167
- if flow_id:
168
- # TODO: refactor to avoid creating a StartFlowCommand first
169
- # resume the flow with the provided flow id
170
- start_flow_command = StartFlowCommand(flow_id)
171
- event_list = start_flow_command.resume_flow(
172
- tracker, tracker.stack, original_user_frame
173
- )
174
- else:
175
- await output_channel.send_text_message(
176
- tracker.sender_id,
177
- "You haven't selected a valid task to resume. "
178
- "Please specify the task you would like to continue.",
179
- )
180
-
181
- return event_list
182
-
183
-
184
- class ActionCancelInterruptedFlow(Action):
185
- def name(self) -> str:
186
- return ACTION_CANCEL_INTERRUPTED_FLOW
187
-
188
- async def run(
189
- self,
190
- output_channel: OutputChannel,
191
- nlg: NaturalLanguageGenerator,
192
- tracker: DialogueStateTracker,
193
- domain: Domain,
194
- metadata: Optional[Dict[Text, Any]] = None,
195
- ) -> List[Event]:
196
- from rasa.dialogue_understanding.commands import CancelFlowCommand
197
-
198
- interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
199
-
200
- event_list = []
201
- for flow_id in interrupted_flows:
202
- # TODO: refactor to avoid creating a CancelFlowCommand first
203
- cancel_flow_command = CancelFlowCommand()
204
- event_list.extend(
205
- cancel_flow_command.cancel_flow(tracker, tracker.stack, flow_id)
206
- )
207
-
208
- return event_list + [
209
- SlotSet(INTERRUPTED_FLOWS_SLOT, None),
210
- SlotSet(INTERRUPTED_FLOW_TO_CONTINUE_SLOT, None),
211
- SlotSet(MULTIPLE_FLOWS_INTERRUPTED_SLOT, None),
212
- SlotSet(CONFIRMATION_CONTINUE_INTERRUPTED_FLOW_SLOT, None),
213
- ]
@@ -1,17 +1,6 @@
1
1
  version: "3.1"
2
2
  responses:
3
3
 
4
- utter_ask_continue_interrupted_flow:
5
- - text: "Would you like to continue with {{ context.previous_flow_name }}?"
6
- metadata:
7
- rephrase: True
8
- template: jinja
9
- buttons:
10
- - title: "Yes"
11
- payload: "/SetSlots(confirmation_continue_interrupted_flow=true)"
12
- - title: "No"
13
- payload: "/SetSlots(confirmation_continue_interrupted_flow=false)"
14
-
15
4
  utter_ask_rephrase:
16
5
  - text: I’m sorry I am unable to understand you, could you please rephrase?
17
6
 
@@ -64,6 +53,12 @@ responses:
64
53
  rephrase: True
65
54
  template: jinja
66
55
 
56
+ utter_flow_continue_interrupted:
57
+ - text: "Let's continue with {{ context.previous_flow_name }}."
58
+ metadata:
59
+ rephrase: True
60
+ template: jinja
61
+
67
62
  utter_free_chitchat_response:
68
63
  - text: "Sorry, I'm not able to answer that right now."
69
64
  metadata:
@@ -86,7 +81,7 @@ responses:
86
81
  rephrase: True
87
82
 
88
83
  utter_inform_hangup:
89
- - text: It seems you are not there anymore. I will hang up shortly.
84
+ - text: I haven’t heard from you, so I’ll end our conversation shortly.
90
85
  metadata:
91
86
  rephrase: True
92
87
 
@@ -129,19 +124,6 @@ slots:
129
124
  type: float
130
125
  initial_value: 0.0
131
126
  max_value: 1000000
132
- interrupted_flows:
133
- type: list
134
- multiple_flows_interrupted:
135
- type: bool
136
- initial_value: false
137
- confirmation_continue_interrupted_flow:
138
- type: bool
139
- mappings:
140
- - type: from_llm
141
- interrupted_flow_to_continue:
142
- type: text
143
- mappings:
144
- - type: from_llm
145
127
 
146
128
  flows:
147
129
  pattern_cancel_flow:
@@ -228,33 +210,7 @@ flows:
228
210
  description: Conversation repair flow for managing when users switch between different flows
229
211
  name: pattern continue interrupted
230
212
  steps:
231
- - action: action_set_interrupted_flows
232
- - noop: true
233
- next:
234
- - if: slots.multiple_flows_interrupted
235
- then:
236
- - collect: interrupted_flow_to_continue
237
- description: "Fill this slot with the name of the flow the user wants to continue. If the user does not want to continue any of the interrupted flows, fill this slot with 'none'."
238
- next:
239
- - if: slots.interrupted_flow_to_continue != "none"
240
- then:
241
- - action: action_continue_interrupted_flow
242
- next: END
243
- - else:
244
- - action: action_cancel_interrupted_flow
245
- next: END
246
- - else:
247
- - collect: confirmation_continue_interrupted_flow
248
- description: "If the user wants to continue the interrupted flow, fill this slot with true. If the user does not want to continue the interrupted flow, fill this slot with false."
249
- utter: utter_ask_continue_interrupted_flow
250
- next:
251
- - if: slots.confirmation_continue_interrupted_flow
252
- then:
253
- - action: action_continue_interrupted_flow
254
- next: END
255
- - else:
256
- - action: action_cancel_interrupted_flow
257
- next: END
213
+ - action: utter_flow_continue_interrupted
258
214
 
259
215
  pattern_correction:
260
216
  description: Conversation repair flow for managing user input changes or error corrections
@@ -37,7 +37,6 @@ from rasa.dialogue_understanding.stack.frames import (
37
37
  BaseFlowStackFrame,
38
38
  )
39
39
  from rasa.dialogue_understanding.stack.utils import (
40
- is_continue_interrupted_flow_active,
41
40
  top_flow_frame,
42
41
  top_user_flow_frame,
43
42
  )
@@ -429,9 +428,22 @@ def clean_up_commands(
429
428
  )
430
429
 
431
430
  elif isinstance(command, StartFlowCommand):
432
- clean_commands = clean_up_start_flow_command(
433
- clean_commands, tracker, command
431
+ top_user_frame = top_user_flow_frame(
432
+ tracker.stack, ignore_call_and_link_frames=False
434
433
  )
434
+ top_flow_id = top_user_frame.flow_id if top_user_frame else ""
435
+
436
+ if top_flow_id == command.flow:
437
+ # drop a start flow command if the starting flow is equal
438
+ # to the currently active flow
439
+ structlogger.debug(
440
+ "command_processor.clean_up_commands."
441
+ "skip_command_flow_already_active",
442
+ command=command,
443
+ )
444
+ continue
445
+
446
+ clean_commands.append(command)
435
447
 
436
448
  # handle chitchat command differently from other free-form answer commands
437
449
  elif isinstance(command, ChitChatAnswerCommand):
@@ -517,34 +529,6 @@ def ensure_max_number_of_command_type(
517
529
  return filtered
518
530
 
519
531
 
520
- def clean_up_start_flow_command(
521
- clean_commands: List[Command],
522
- tracker: DialogueStateTracker,
523
- command: StartFlowCommand,
524
- ) -> List[Command]:
525
- """Clean up a start flow command."""
526
- continue_interrupted_flow_active = is_continue_interrupted_flow_active(
527
- tracker.stack
528
- )
529
-
530
- top_user_frame = top_user_flow_frame(
531
- tracker.stack, ignore_call_and_link_frames=False
532
- )
533
- top_flow_id = top_user_frame.flow_id if top_user_frame else ""
534
-
535
- if top_flow_id == command.flow and not continue_interrupted_flow_active:
536
- # drop a start flow command if the starting flow is equal
537
- # to the currently active flow
538
- structlogger.debug(
539
- "command_processor.clean_up_commands." "skip_command_flow_already_active",
540
- command=command,
541
- )
542
- return clean_commands
543
-
544
- clean_commands.append(command)
545
- return clean_commands
546
-
547
-
548
532
  def clean_up_clarify_command(
549
533
  commands_so_far: List[Command],
550
534
  all_commands: List[Command],
@@ -8,13 +8,6 @@ from typing import Any, Callable, Dict, List, Optional
8
8
  import jsonpatch
9
9
  import structlog
10
10
 
11
- from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
12
- AgentStackFrame,
13
- AgentState,
14
- FlowStackFrameType,
15
- UserFlowStackFrame,
16
- )
17
-
18
11
  if typing.TYPE_CHECKING:
19
12
  from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
20
13
 
@@ -98,42 +91,6 @@ class DialogueStack:
98
91
  """
99
92
  return self.frames.pop()
100
93
 
101
- def move_frames_to_top(self, frames_to_move: List["DialogueStackFrame"]) -> None:
102
- """Moves specified frames to top of stack while preserving their relative order.
103
-
104
- Args:
105
- frames_to_move: The frames to move to the top of the stack.
106
- """
107
- # Get frames that are not being moved
108
- frames_to_keep = [frame for frame in self.frames if frame not in frames_to_move]
109
-
110
- # Reorder: keep frames first, then moved frames
111
- self.frames = frames_to_keep + frames_to_move
112
-
113
- # set all frames to interrupt except for LINK and CALL
114
- for frame in self.frames:
115
- if (
116
- isinstance(frame, UserFlowStackFrame)
117
- and frame.frame_type == FlowStackFrameType.LINK
118
- ):
119
- continue
120
- if (
121
- isinstance(frame, UserFlowStackFrame)
122
- and frame.frame_type == FlowStackFrameType.CALL
123
- ):
124
- continue
125
- if (
126
- isinstance(frame, UserFlowStackFrame)
127
- and frame.frame_type == FlowStackFrameType.REGULAR
128
- ):
129
- frame.frame_type = FlowStackFrameType.INTERRUPT
130
-
131
- # set the first frame to regular
132
- for frame in self.frames:
133
- if isinstance(frame, UserFlowStackFrame):
134
- frame.frame_type = FlowStackFrameType.REGULAR
135
- return
136
-
137
94
  def current_context(self) -> Dict[str, Any]:
138
95
  """Returns the context of the topmost frame.
139
96
 
@@ -152,7 +109,7 @@ class DialogueStack:
152
109
  """Returns the topmost frame from the stack.
153
110
 
154
111
  Args:
155
- ignore: The ID of the flow to ignore. Picks the top most
112
+ ignore_frame: The ID of the flow to ignore. Picks the top most
156
113
  frame that has a different flow ID.
157
114
 
158
115
  Returns:
@@ -179,8 +136,7 @@ class DialogueStack:
179
136
  patch_dump: The patch to apply to the stack.
180
137
 
181
138
  Returns:
182
- The updated stack.
183
- """
139
+ The updated stack."""
184
140
  patch = jsonpatch.JsonPatch.from_string(patch_dump)
185
141
  dialogue_stack_dump = patch.apply(self.as_dict())
186
142
  return DialogueStack.from_dict(dialogue_stack_dump)
@@ -221,80 +177,3 @@ class DialogueStack:
221
177
  if patch:
222
178
  return patch.to_string()
223
179
  return None
224
-
225
- def _find_agent_frame_by_predicate(
226
- self, predicate: Callable[[AgentStackFrame], bool]
227
- ) -> List[AgentStackFrame]:
228
- stack_frames: List[AgentStackFrame] = []
229
- for stack_frame in reversed(self.frames):
230
- if isinstance(stack_frame, AgentStackFrame) and predicate(stack_frame):
231
- stack_frames.append(stack_frame)
232
- return stack_frames
233
-
234
- def find_active_agent_frame(self) -> Optional[AgentStackFrame]:
235
- stack_frames = self._find_agent_frame_by_predicate(
236
- lambda frame: frame.state == AgentState.WAITING_FOR_INPUT
237
- )
238
- if stack_frames:
239
- return stack_frames[0]
240
- return None
241
-
242
- def find_agent_stack_frame_by_agent(
243
- self, agent_id: str
244
- ) -> Optional[AgentStackFrame]:
245
- """Get the agent stack frame for a specific agent ID.
246
-
247
- May also include the agent stack frame in the INTERRUPTED state.
248
- """
249
- stack_frames = self._find_agent_frame_by_predicate(
250
- lambda frame: frame.agent_id == agent_id
251
- )
252
- if stack_frames:
253
- return stack_frames[0]
254
- return None
255
-
256
- def find_active_agent_stack_frame_for_flow(
257
- self, flow_id: str
258
- ) -> Optional[AgentStackFrame]:
259
- """Get the agent stack frame of a specific flow."""
260
- stack_frames = self._find_agent_frame_by_predicate(
261
- lambda frame: frame.flow_id == flow_id
262
- )
263
- for stack_frame in stack_frames:
264
- if stack_frame.state == AgentState.WAITING_FOR_INPUT:
265
- return stack_frame
266
- return None
267
-
268
- def get_active_agent_id(self) -> Optional[typing.Text]:
269
- agent_frame = self.find_active_agent_frame()
270
- if agent_frame:
271
- return agent_frame.agent_id
272
- return None
273
-
274
- def agent_is_active(self) -> bool:
275
- return self.find_active_agent_frame() is not None
276
-
277
- def get_all_user_flow_frames(
278
- self, ignore_call_and_link_frames: bool = True
279
- ) -> List[UserFlowStackFrame]:
280
- """Get all user flow frames from the dialogue stack.
281
-
282
- Args:
283
- ignore_call_and_link_frames: Whether to ignore user frames of type `call`
284
- and `link`. By default, these frames are ignored.
285
-
286
- Returns:
287
- A list of all user flow frames in the dialogue stack.
288
- """
289
- return [
290
- frame
291
- for frame in self.frames
292
- if isinstance(frame, UserFlowStackFrame)
293
- and (
294
- not ignore_call_and_link_frames
295
- or (
296
- frame.frame_type != FlowStackFrameType.CALL
297
- and frame.frame_type != FlowStackFrameType.LINK
298
- )
299
- )
300
- ]
@@ -94,18 +94,6 @@ class InvalidFlowStepIdException(Exception):
94
94
  super().__init__(f"Invalid flow step ID '{step_id}' for flow '{flow_id}'.")
95
95
 
96
96
 
97
- class InvalidAgentState(RasaException):
98
- """Raised if the agent state is invalid."""
99
-
100
- def __init__(self, invalid_state: str) -> None:
101
- """Creates a `InvalidAgentState`.
102
-
103
- Args:
104
- invalid_state: The invalid agent state.
105
- """
106
- super().__init__(f"Invalid agent state '{invalid_state}'.")
107
-
108
-
109
97
  @dataclass
110
98
  class BaseFlowStackFrame(DialogueStackFrame):
111
99
  flow_id: str = "" # needed to avoid "default arg before non-default" error
@@ -183,48 +171,3 @@ class UserFlowStackFrame(BaseFlowStackFrame):
183
171
  step_id=data["step_id"],
184
172
  frame_type=FlowStackFrameType.from_str(data.get("frame_type")),
185
173
  )
186
-
187
-
188
- class AgentState(str, Enum):
189
- INTERRUPTED = "interrupted"
190
- WAITING_FOR_INPUT = "waiting_for_input"
191
-
192
- @staticmethod
193
- def from_str(state: Optional[str]) -> AgentState:
194
- if state == AgentState.WAITING_FOR_INPUT.value:
195
- return AgentState.WAITING_FOR_INPUT
196
- elif state == AgentState.INTERRUPTED.value:
197
- return AgentState.INTERRUPTED
198
- else:
199
- raise InvalidAgentState(state)
200
-
201
-
202
- @dataclass
203
- class AgentStackFrame(BaseFlowStackFrame):
204
- agent_id: str = ""
205
- state: AgentState = AgentState.WAITING_FOR_INPUT
206
- metadata: Optional[Dict[str, Any]] = None
207
-
208
- @classmethod
209
- def type(cls) -> str:
210
- """Returns the type of the frame."""
211
- return "agent"
212
-
213
- @staticmethod
214
- def from_dict(data: Dict[str, Any]) -> AgentStackFrame:
215
- """Creates a `AgentStackFrame` from a dictionary.
216
-
217
- Args:
218
- data: The dictionary to create the `AgentStackFrame` from.
219
-
220
- Returns:
221
- The created `AgentStackFrame`.
222
- """
223
- return AgentStackFrame(
224
- frame_id=data["frame_id"],
225
- flow_id=data["flow_id"],
226
- step_id=data["step_id"],
227
- agent_id=data["agent_id"],
228
- state=AgentState.from_str(data["state"]),
229
- metadata=data.get("metadata"),
230
- )
@@ -198,9 +198,8 @@ def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
198
198
  def get_collect_steps_excluding_ask_before_filling_for_active_flow(
199
199
  dialogue_stack: DialogueStack, all_flows: FlowsList
200
200
  ) -> Set[str]:
201
- """Get all collect steps that are part of the current flow.
202
-
203
- Collect steps that have to be asked before filling are not considered.
201
+ """Get all collect steps that are part of the current flow, without
202
+ considering the collect steps that has to be asked before filling.
204
203
 
205
204
  Args:
206
205
  dialogue_stack: The dialogue stack.
@@ -231,17 +230,3 @@ def get_collect_steps_excluding_ask_before_filling_for_active_flow(
231
230
  for step in active_flow.get_collect_steps()
232
231
  if not step.ask_before_filling
233
232
  )
234
-
235
-
236
- def is_continue_interrupted_flow_active(stack: DialogueStack) -> bool:
237
- """Check if the continue interrupted flow is active."""
238
- from rasa.dialogue_understanding.patterns.continue_interrupted import (
239
- ContinueInterruptedPatternFlowStackFrame,
240
- )
241
-
242
- for frame in reversed(stack.frames):
243
- if isinstance(frame, ContinueInterruptedPatternFlowStackFrame):
244
- return True
245
- if isinstance(frame, UserFlowStackFrame):
246
- return False
247
- return False
@@ -1,12 +1,10 @@
1
1
  import asyncio
2
2
  import time
3
- from pathlib import Path
4
- from typing import Any, Dict, List, Optional, Union
3
+ from typing import Any, Dict, List, Optional, Text
5
4
 
6
5
  import structlog
7
6
  from tqdm import tqdm
8
7
 
9
- from rasa.core.available_agents import AvailableAgents
10
8
  from rasa.core.available_endpoints import AvailableEndpoints
11
9
  from rasa.core.channels import CollectingOutputChannel, UserMessage
12
10
  from rasa.core.exceptions import AgentNotReady
@@ -54,11 +52,10 @@ class DialogueUnderstandingTestRunner:
54
52
 
55
53
  def __init__(
56
54
  self,
57
- model_path: Optional[str] = None,
55
+ model_path: Optional[Text] = None,
58
56
  model_server: Optional[EndpointConfig] = None,
59
57
  remote_storage: Optional[StorageType] = None,
60
58
  endpoints: Optional[AvailableEndpoints] = None,
61
- sub_agents_path: Optional[Union[Path, str]] = None,
62
59
  ) -> None:
63
60
  """Initializes the Dialogue Understanding test suite runner.
64
61
 
@@ -71,7 +68,6 @@ class DialogueUnderstandingTestRunner:
71
68
  import rasa.core.agent
72
69
 
73
70
  self._check_action_server(endpoints)
74
- sub_agents = AvailableAgents.get_instance(sub_agents_path)
75
71
 
76
72
  self.agent = asyncio.run(
77
73
  rasa.core.agent.load_agent(
@@ -79,7 +75,6 @@ class DialogueUnderstandingTestRunner:
79
75
  model_server=model_server,
80
76
  remote_storage=remote_storage,
81
77
  endpoints=endpoints,
82
- sub_agents=sub_agents,
83
78
  )
84
79
  )
85
80
  if not self.agent.is_ready():
@@ -13,7 +13,6 @@ import structlog
13
13
  from tqdm import tqdm
14
14
 
15
15
  import rasa.shared.utils.io
16
- from rasa.core.available_agents import AvailableAgents
17
16
  from rasa.core.available_endpoints import AvailableEndpoints
18
17
  from rasa.core.channels import CollectingOutputChannel, UserMessage
19
18
  from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
@@ -66,7 +65,6 @@ class E2ETestRunner:
66
65
  model_server: Optional[EndpointConfig] = None,
67
66
  remote_storage: Optional[StorageType] = None,
68
67
  endpoints: Optional[AvailableEndpoints] = None,
69
- sub_agents_path: Optional[Text] = None,
70
68
  **kwargs: Any,
71
69
  ) -> None:
72
70
  """Initializes the E2E test suite runner.
@@ -96,15 +94,12 @@ class E2ETestRunner:
96
94
  if endpoints and not are_custom_actions_stubbed:
97
95
  self._action_server_is_reachable(endpoints)
98
96
 
99
- sub_agents = AvailableAgents.get_instance(sub_agents_path)
100
-
101
97
  self.agent = asyncio.run(
102
98
  rasa.core.agent.load_agent(
103
99
  model_path=model_path,
104
100
  model_server=model_server,
105
101
  remote_storage=remote_storage,
106
102
  endpoints=endpoints,
107
- sub_agents=sub_agents,
108
103
  )
109
104
  )
110
105
 
@@ -747,7 +742,7 @@ class E2ETestRunner:
747
742
  test_result = test_turns[index]
748
743
  if index in failure_points:
749
744
  diff_test_text, diff_actual_text = cls._handle_fail_diff(
750
- test_result,
745
+ test_result, # type: ignore[arg-type]
751
746
  latest_response,
752
747
  cls._select_bot_utter_turns(test_turns, index),
753
748
  ) # test_result can only be TestStep in failure_points
@@ -811,12 +806,7 @@ class E2ETestRunner:
811
806
  """
812
807
  # This will only be used when the TestCase is not started
813
808
  # with a user step
814
- latest_response_event = test_turns[-1]
815
- if not isinstance(latest_response_event, ActualStepOutput):
816
- raise ValueError(
817
- f"Expected ActualStepOutput, got {type(latest_response_event)}"
818
- )
819
- latest_response: ActualStepOutput = latest_response_event
809
+ latest_response: ActualStepOutput = test_turns[-1] # type: ignore[assignment]
820
810
  failures = []
821
811
  match = None
822
812
  for position in range(last_user_step_position, len(test_turns) - 1):