rasa-pro 3.14.0.dev7__py3-none-any.whl → 3.14.0.dev9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (471) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  4. rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
  5. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  6. rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
  7. rasa/agents/schemas/agent_output.py +1 -1
  8. rasa/agents/utils.py +90 -1
  9. rasa/builder/README.md +120 -0
  10. rasa/builder/__init__.py +0 -0
  11. rasa/builder/auth.py +176 -0
  12. rasa/builder/config.py +92 -0
  13. rasa/builder/copilot/__init__.py +0 -0
  14. rasa/builder/copilot/constants.py +31 -0
  15. rasa/builder/copilot/copilot.py +450 -0
  16. rasa/builder/copilot/copilot_response_handler.py +522 -0
  17. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  18. rasa/builder/copilot/exceptions.py +32 -0
  19. rasa/builder/copilot/models.py +500 -0
  20. rasa/builder/copilot/prompts/__init__.py +0 -0
  21. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  22. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  23. rasa/builder/copilot/signing.py +305 -0
  24. rasa/builder/copilot/telemetry.py +210 -0
  25. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  26. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  27. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  28. rasa/builder/document_retrieval/__init__.py +0 -0
  29. rasa/builder/document_retrieval/constants.py +15 -0
  30. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  31. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  32. rasa/builder/document_retrieval/models.py +62 -0
  33. rasa/builder/download.py +140 -0
  34. rasa/builder/exceptions.py +91 -0
  35. rasa/builder/guardrails/__init__.py +1 -0
  36. rasa/builder/guardrails/constants.py +9 -0
  37. rasa/builder/guardrails/exceptions.py +4 -0
  38. rasa/builder/guardrails/lakera.py +206 -0
  39. rasa/builder/guardrails/models.py +231 -0
  40. rasa/builder/guardrails/store.py +238 -0
  41. rasa/builder/guardrails/utils.py +328 -0
  42. rasa/builder/job_manager.py +87 -0
  43. rasa/builder/jobs.py +282 -0
  44. rasa/builder/llm_service.py +246 -0
  45. rasa/builder/logging_utils.py +265 -0
  46. rasa/builder/main.py +243 -0
  47. rasa/builder/models.py +216 -0
  48. rasa/builder/project_generator.py +458 -0
  49. rasa/builder/project_info.py +72 -0
  50. rasa/builder/scrape_rasa_docs.py +97 -0
  51. rasa/builder/service.py +1345 -0
  52. rasa/builder/shared/tracker_context.py +212 -0
  53. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  54. rasa/builder/template_cache.py +244 -0
  55. rasa/builder/training_service.py +194 -0
  56. rasa/builder/validation_service.py +97 -0
  57. rasa/cli/project_templates/basic/README.md +23 -0
  58. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  59. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  60. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  61. rasa/cli/project_templates/basic/config.yml +29 -0
  62. rasa/cli/project_templates/basic/credentials.yml +33 -0
  63. rasa/cli/project_templates/basic/data/data.md +9 -0
  64. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  65. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  66. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  67. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  68. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  69. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  70. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  71. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  72. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  73. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  74. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  75. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  76. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  77. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  78. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  79. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  80. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  81. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  82. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  83. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  84. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  85. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  86. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  87. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  88. rasa/cli/project_templates/default/config.yml +4 -0
  89. rasa/cli/project_templates/default/endpoints.yml +4 -0
  90. rasa/cli/project_templates/finance/README.md +25 -0
  91. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  92. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  93. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  94. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  95. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  96. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  97. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  99. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  100. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  101. rasa/cli/project_templates/finance/actions/database.py +277 -0
  102. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  104. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  105. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  106. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  107. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  112. rasa/cli/project_templates/finance/config.yml +23 -0
  113. rasa/cli/project_templates/finance/credentials.yml +32 -0
  114. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  115. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  116. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  117. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  118. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  119. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  120. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  121. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  122. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  123. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  124. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  125. rasa/cli/project_templates/finance/data/data.md +11 -0
  126. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  127. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  128. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  129. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  130. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  131. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  132. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  133. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  134. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  135. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  136. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  137. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  138. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  139. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  140. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  141. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  142. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  143. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  144. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  145. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  146. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  147. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  148. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  149. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  154. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  231. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  232. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  233. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  234. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  235. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  236. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  237. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  238. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  239. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  240. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  241. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  243. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  244. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  245. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  246. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  247. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  248. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  249. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  250. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  251. rasa/cli/project_templates/telco/README.md +25 -0
  252. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  253. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  254. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  255. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  256. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  257. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  258. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  259. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  260. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  261. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  262. rasa/cli/project_templates/telco/config.yml +29 -0
  263. rasa/cli/project_templates/telco/credentials.yml +33 -0
  264. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  265. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  266. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  267. rasa/cli/project_templates/telco/data/data.md +11 -0
  268. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  269. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  270. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  271. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  272. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  273. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  274. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  275. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  276. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  277. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  278. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  279. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  280. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  281. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  282. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  283. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  284. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  285. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  286. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  287. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  288. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  289. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  290. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  291. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  292. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  293. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  294. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  295. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  296. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  297. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  298. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  299. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  300. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  304. rasa/cli/project_templates/tutorial/config.yml +2 -1
  305. rasa/cli/scaffold.py +46 -2
  306. rasa/core/actions/action.py +0 -1
  307. rasa/core/available_agents.py +2 -0
  308. rasa/core/available_endpoints.py +17 -2
  309. rasa/core/channels/channel.py +4 -3
  310. rasa/core/channels/constants.py +3 -0
  311. rasa/core/channels/development_inspector.py +2 -22
  312. rasa/core/channels/inspector/README.md +26 -14
  313. rasa/core/channels/inspector/dist/assets/{arc-cce7e0a8.js → arc-edef10dd.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  317. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  320. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  326. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.js → index-3862675e-ecdce073.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  332. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  351. rasa/core/channels/inspector/dist/index.html +2 -2
  352. rasa/core/channels/inspector/index.html +1 -1
  353. rasa/core/channels/inspector/src/App.tsx +16 -42
  354. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  355. rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
  356. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  357. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  358. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  359. rasa/core/channels/inspector/src/types.ts +32 -7
  360. rasa/core/channels/socketio.py +212 -51
  361. rasa/core/channels/studio_chat.py +59 -57
  362. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  363. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  364. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  365. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  366. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  367. rasa/core/channels/voice_stream/genesys.py +2 -1
  368. rasa/core/channels/voice_stream/jambonz.py +9 -1
  369. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  370. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  371. rasa/core/constants.py +6 -0
  372. rasa/core/iam_credentials_providers/__init__.py +0 -0
  373. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  374. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  375. rasa/core/policies/enterprise_search_policy.py +4 -7
  376. rasa/core/policies/flows/flow_executor.py +14 -5
  377. rasa/core/policies/ted_policy.py +7 -5
  378. rasa/core/processor.py +32 -0
  379. rasa/core/redis_connection_factory.py +411 -0
  380. rasa/core/run.py +13 -3
  381. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  382. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  383. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  384. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  385. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  386. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  387. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  388. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  389. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  390. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  391. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  392. rasa/engine/graph.py +5 -1
  393. rasa/engine/recipes/default_components.py +78 -10
  394. rasa/engine/recipes/default_recipe.py +41 -1
  395. rasa/engine/storage/local_model_storage.py +83 -3
  396. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  397. rasa/model_manager/model_api.py +4 -5
  398. rasa/model_manager/runner_service.py +1 -1
  399. rasa/model_manager/socket_bridge.py +20 -15
  400. rasa/model_manager/trainer_service.py +12 -9
  401. rasa/model_manager/utils.py +1 -29
  402. rasa/model_manager/warm_rasa_process.py +1 -1
  403. rasa/model_training.py +14 -0
  404. rasa/nlu/classifiers/diet_classifier.py +22 -6
  405. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  406. rasa/nlu/extractors/extractor.py +1 -2
  407. rasa/shared/agents/auth/__init__.py +0 -0
  408. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  409. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  410. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  411. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  412. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  413. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  414. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  415. rasa/shared/agents/auth/constants.py +11 -0
  416. rasa/shared/agents/auth/types.py +11 -0
  417. rasa/shared/core/constants.py +1 -0
  418. rasa/shared/core/domain.py +58 -11
  419. rasa/shared/core/events.py +2 -0
  420. rasa/shared/core/flows/constants.py +5 -0
  421. rasa/shared/core/flows/flow_step.py +7 -1
  422. rasa/shared/core/flows/flows_list.py +6 -0
  423. rasa/shared/core/flows/steps/call.py +15 -12
  424. rasa/shared/core/flows/validation.py +238 -44
  425. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  426. rasa/shared/core/slots.py +4 -0
  427. rasa/shared/exceptions.py +12 -0
  428. rasa/shared/importers/importer.py +6 -0
  429. rasa/shared/importers/utils.py +77 -1
  430. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  431. rasa/shared/providers/_utils.py +60 -44
  432. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  433. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  434. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  435. rasa/shared/providers/llm/llm_response.py +4 -4
  436. rasa/shared/utils/common.py +24 -0
  437. rasa/shared/utils/llm.py +2 -1
  438. rasa/shared/utils/mcp/server_connection.py +84 -23
  439. rasa/shared/utils/mcp/utils.py +20 -0
  440. rasa/studio/upload.py +16 -47
  441. rasa/telemetry.py +97 -23
  442. rasa/tracing/config.py +38 -12
  443. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  444. rasa/tracing/instrumentation/instrumentation.py +85 -8
  445. rasa/utils/common.py +1 -1
  446. rasa/utils/io.py +27 -9
  447. rasa/utils/json_utils.py +6 -1
  448. rasa/utils/log_utils.py +5 -1
  449. rasa/utils/openapi.py +144 -0
  450. rasa/utils/tensorflow/__init__.py +29 -0
  451. rasa/utils/tensorflow/callback.py +1 -1
  452. rasa/utils/tensorflow/crf.py +1 -1
  453. rasa/utils/tensorflow/data_generator.py +21 -8
  454. rasa/utils/tensorflow/layers.py +11 -4
  455. rasa/utils/tensorflow/metrics.py +7 -3
  456. rasa/utils/tensorflow/models.py +41 -6
  457. rasa/utils/tensorflow/rasa_layers.py +6 -4
  458. rasa/utils/tensorflow/transformer.py +2 -3
  459. rasa/utils/train_utils.py +68 -38
  460. rasa/validator.py +18 -16
  461. rasa/version.py +1 -1
  462. rasa_pro-3.14.0.dev9.dist-info/METADATA +199 -0
  463. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/RECORD +466 -156
  464. rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
  465. rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
  466. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
  467. rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
  468. rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
  469. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/NOTICE +0 -0
  470. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/WHEEL +0 -0
  471. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/entry_points.txt +0 -0
@@ -5,15 +5,15 @@ Your task is to analyze the current conversation context and generate a list of
5
5
 
6
6
  ## Available Actions:
7
7
  * `start flow flow_name`: Starting a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
8
- * `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
8
+ * `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values. ONLY use slots that are explicitly defined in the flow's slot list.
9
9
  * `cancel flow`: Cancelling the current flow.
10
10
  * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: Disambiguate which flow should be started when user input is ambiguous by listing the potential flows as options. For example, `disambiguate flows list_contacts add_contact remove_contact ...` if the user just wrote "contacts".
11
11
  * `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
12
12
  * `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
13
13
  * `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
14
14
  * `repeat message`: Repeating the last bot message.
15
- {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
16
- {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
15
+ {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}. This has HIGHEST PRIORITY when an agent is active and the user is responding to agent questions.{% endif %}
16
+ {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user changed his mind about the car he wants to buy. ONLY use agents that are listed in the `completed_agents` section.{% endif %}
17
17
 
18
18
  --
19
19
 
@@ -23,13 +23,18 @@ Your task is to analyze the current conversation context and generate a list of
23
23
  * Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
24
24
  * Always refer to the slot description to determine what information should be extracted and how it should be formatted.
25
25
  * For text slots, extract values exactly as provided by the user unless the slot description specifies otherwise. Preserve formatting and avoid rewording, truncation, or making assumptions.
26
+ * ONLY use `set slot` with slots that are explicitly defined in the current flow's slot list. Do NOT create or assume slots that don't exist.
26
27
  * Only use information provided by the user.
27
28
  * Use clarification in ambiguous cases.
28
29
  * Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
29
30
  * Do not cancel the flow unless the user explicitly requests it.
30
31
  * Strictly adhere to the provided action format.
32
+ * ONLY use the exact actions listed above. Do NOT invent new actions like "respond <message>" or any other variations.
31
33
  * Focus on the last message and take it one step at a time.
32
- * Use the previous conversation steps only to aid understanding.
34
+ * Use the previous conversation steps only to aid understanding.{% if active_agent %}
35
+ * When an agent is active, ALWAYS prioritize `continue agent` over `provide info` or `offtopic reply` unless the user is clearly asking something unrelated to the agent's task.{% endif %}{% if completed_agents %}
36
+ * ONLY use `restart agent` with agents that are listed in the `completed_agents` section. Do NOT restart non-existent agents.{% endif %}{% if active_agent or completed_agents %}
37
+ * If you're unsure about agent names, refer to the structured data provided in the `Current State` section.{% endif %}
33
38
 
34
39
  --
35
40
 
@@ -44,7 +49,7 @@ Use the following structured data:
44
49
  ## Current State
45
50
  {% if current_flow != None %}Use the following structured data:
46
51
  ```json
47
- {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
52
+ {"active_flow":{"name":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":{{ current_slot_description | to_json_escaped_string }}},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}{% if active_agent %},"active_agent":{"name":"{{ active_agent.name }}","description":{{ active_agent.description | to_json_escaped_string }}}{% endif %}{% if completed_agents %},"completed_agents":[{% for agent in completed_agents %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
48
53
  ```{% else %}
49
54
  You are currently not inside any flow.{% endif %}
50
55
 
@@ -13,15 +13,15 @@ Use the following structured data:
13
13
 
14
14
  ## Available Actions:
15
15
  * `start flow flow_name`: Starting a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
16
- * `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
16
+ * `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values. ONLY use slots that are explicitly defined in the flow's slot list.
17
17
  * `cancel flow`: Cancelling the current flow.
18
18
  * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: Disambiguate which flow should be started when user input is ambiguous by listing the potential flows as options. For example, `disambiguate flows list_contacts add_contact remove_contact ...` if the user just wrote "contacts".
19
19
  * `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
20
20
  * `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
21
21
  * `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
22
22
  * `repeat message`: Repeating the last bot message.
23
- {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
24
- {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
23
+ {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}. This has HIGHEST PRIORITY when an agent is active and the user is responding to agent questions.{% endif %}
24
+ {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user changed his mind about the car he wants to buy. ONLY use agents that are listed in the `completed_agents` section.{% endif %}
25
25
 
26
26
  ---
27
27
 
@@ -30,13 +30,18 @@ Use the following structured data:
30
30
  * For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
31
31
  * Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
32
32
  * Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
33
+ * ONLY use `set slot` with slots that are explicitly defined in the current flow's slot list. Do NOT create or assume slots that don't exist.
33
34
  * Only use information provided by the user.
34
35
  * Use clarification in ambiguous cases.
35
36
  * Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
36
37
  * Do not cancel the flow unless the user explicitly requests it.
37
38
  * Strictly adhere to the provided action format.
39
+ * ONLY use the exact actions listed above. Do NOT invent new actions like "respond <message>" or any other variations.
38
40
  * Focus on the last message and take it one step at a time.
39
- * Use the previous conversation steps only to aid understanding.
41
+ * Use the previous conversation steps only to aid understanding.{% if active_agent %}
42
+ * When an agent is active, ALWAYS prioritize `continue agent` over `provide info` or `offtopic reply` unless the user is clearly asking something unrelated to the agent's task.{% endif %}{% if completed_agents %}
43
+ * ONLY use `restart agent` with agents that are listed in the `completed_agents` section. Do NOT restart non-existent agents.{% endif %}{% if active_agent or completed_agents %}
44
+ * If you're unsure about agent names, refer to the structured data provided in the `Current State` section.{% endif %}
40
45
 
41
46
  ---
42
47
 
@@ -44,7 +49,7 @@ Use the following structured data:
44
49
  {% if current_flow != None %}
45
50
  Use the following structured data:
46
51
  ```json
47
- {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
52
+ {"active_flow":{"name":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":{{ current_slot_description | to_json_escaped_string }}},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}{% if active_agent %},"active_agent":{"name":"{{ active_agent.name }}","description":{{ active_agent.description | to_json_escaped_string }}}{% endif %}{% if completed_agents %},"completed_agents":[{% for agent in completed_agents %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
48
53
  ```{% else %}
49
54
  You are currently not inside any flow.{% endif %}
50
55
 
@@ -5,13 +5,13 @@ Your task is to analyze the current conversation context and generate a list of
5
5
 
6
6
  ## Available Actions:
7
7
  * `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
8
- * `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
8
+ * `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values. ONLY use slots that are explicitly defined in the flow's slot list.
9
9
  * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
10
10
  * `search and reply`: Provide a response from the knowledge base to address the user's inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
11
11
  * `cancel flow`: Cancel the current flow if the user requests it.
12
12
  * `repeat message`: Repeat the last bot message.
13
- {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
14
- {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
13
+ {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}. This has HIGHEST PRIORITY when an agent is active and the user is responding to agent questions.{% endif %}
14
+ {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user changed his mind about the car he wants to buy. ONLY use agents that are listed in the `completed_agents` section.{% endif %}
15
15
 
16
16
  ---
17
17
 
@@ -24,6 +24,7 @@ Your task is to analyze the current conversation context and generate a list of
24
24
  * For categorical slots, try to match the user message with allowed slot values. Use "other" if you cannot match it.
25
25
  * Set the boolean slots based on the user's response. Map positive responses to `True`, and negative to `False`.
26
26
  * Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
27
+ * ONLY use `set slot` with slots that are explicitly defined in the current flow's slot list. Do NOT create or assume slots that don't exist.
27
28
  ### Disambiguate Flows
28
29
  * Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
29
30
  * If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
@@ -34,22 +35,29 @@ Your task is to analyze the current conversation context and generate a list of
34
35
  * Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
35
36
  ### Cancel Flow
36
37
  * Do not cancel any flow unless the user explicitly requests it.
37
- * Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
38
- ### General Tips
38
+ * Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.{% if active_agent or completed_agents %}
39
+ ### Agents{% if active_agent %}
40
+ * When an agent is active, ALWAYS prioritize `continue agent` over `search and reply` unless the user is clearly asking something unrelated to the agent's task.{% endif %}{% if completed_agents %}
41
+ * ONLY use `restart agent` with agents that are listed in the `completed_agents` section. Do NOT restart non-existent agents.{% endif %}
42
+ * If you're unsure about agent names, refer to the structured data provided in the `Current State` section.
43
+ {% endif %}### General Tips
39
44
  * Only use information provided by the user.
40
45
  * Strictly adhere to the provided action format.
46
+ * ONLY use the exact actions listed above. Do NOT invent new actions like "respond <message>" or any other variations.
41
47
  * Focus on the last message and take it one step at a time.
42
48
  * Use the previous conversation steps only to aid understanding.
43
49
 
50
+
44
51
  ---
45
52
 
46
53
  ## Decision Rule Table
47
- | Condition | Action |
48
- |-------------------------------------------------------|--------------------|
49
- | Flow perfectly matches user's message | start flow |
50
- | Multiple flows are equally strong, relevant matches | disambiguate flows |
51
- | User's message is unclear or imprecise | disambiguate flows |
52
- | No flow fits at all, but knowledge base may help | search and reply |
54
+ | Condition | Action |
55
+ |---------------------------------------------------------------|--------------------|{% if active_agent %}
56
+ | Agent is active and the user is responding to agent questions | continue agent |{% endif %}
57
+ | Flow perfectly matches user's message | start flow |
58
+ | Multiple flows are equally strong, relevant matches | disambiguate flows |
59
+ | User's message is unclear or imprecise | disambiguate flows |
60
+ | No flow fits at all, but knowledge base may help | search and reply |
53
61
 
54
62
  ---
55
63
 
@@ -64,7 +72,7 @@ Use the following structured data:
64
72
  ## Current State
65
73
  {% if current_flow != None %}Use the following structured data:
66
74
  ```json
67
- {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
75
+ {"active_flow":{"name":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":{{ current_slot_description | to_json_escaped_string }}},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}{% if active_agent %},"active_agent":{"name":"{{ active_agent.name }}","description":{{ active_agent.description | to_json_escaped_string }}}{% endif %}{% if completed_agents %},"completed_agents":[{% for agent in completed_agents %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
68
76
  ```{% else %}
69
77
  You are currently not inside any flow.{% endif %}
70
78
 
@@ -13,13 +13,13 @@ Use the following structured data:
13
13
 
14
14
  ## Available Actions:
15
15
  * `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
16
- * `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
16
+ * `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values. ONLY use slots that are explicitly defined in the flow's slot list.
17
17
  * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
18
18
  * `search and reply`: Provide a response from the knowledge base to address the user’s inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
19
19
  * `cancel flow`: Cancel the current flow if the user requests it.
20
20
  * `repeat message`: Repeat the last bot message.
21
- {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
22
- {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
21
+ {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}. This has HIGHEST PRIORITY when an agent is active and the user is responding to agent questions.{% endif %}
22
+ {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user changed his mind about the car he wants to buy. ONLY use agents that are listed in the `completed_agents` section.{% endif %}
23
23
 
24
24
  ---
25
25
 
@@ -32,6 +32,7 @@ Use the following structured data:
32
32
  * For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
33
33
  * Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
34
34
  * Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
35
+ * ONLY use `set slot` with slots that are explicitly defined in the current flow's slot list. Do NOT create or assume slots that don't exist.
35
36
  ### Disambiguate Flows
36
37
  * Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
37
38
  * If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
@@ -42,29 +43,35 @@ Use the following structured data:
42
43
  * Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
43
44
  ### Cancel Flow
44
45
  * Do not cancel any flow unless the user explicitly requests it.
45
- * Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
46
- ### General Tips
46
+ * Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.{% if active_agent or completed_agents %}
47
+ ### Agents{% if active_agent %}
48
+ * When an agent is active, ALWAYS prioritize `continue agent` over `search and reply` unless the user is clearly asking something unrelated to the agent's task.{% endif %}{% if completed_agents %}
49
+ * ONLY use `restart agent` with agents that are listed in the `completed_agents` section. Do NOT restart non-existent agents.{% endif %}
50
+ * If you're unsure about agent names, refer to the structured data provided in the `Current State` section.
51
+ {% endif %}### General Tips
47
52
  * Only use information provided by the user.
48
53
  * Strictly adhere to the provided action format.
54
+ * ONLY use the exact actions listed above. Do NOT invent new actions like "respond <message>" or any other variations.
49
55
  * Focus on the last message and take it one step at a time.
50
56
  * Use the previous conversation steps only to aid understanding.
51
57
 
52
58
  ---
53
59
 
54
60
  ## Decision Rule Table
55
- | Condition | Action |
56
- |-------------------------------------------------------|--------------------|
57
- | Flow perfectly matches user's message | start flow |
58
- | Multiple flows are equally strong, relevant matches | disambiguate flows |
59
- | User's message is unclear or imprecise | disambiguate flows |
60
- | No flow fits at all, but knowledge base may help | search and reply |
61
+ | Condition | Action |
62
+ |---------------------------------------------------------------|--------------------|{% if active_agent %}
63
+ | Agent is active and the user is responding to agent questions | continue agent |{% endif %}
64
+ | Flow perfectly matches user's message | start flow |
65
+ | Multiple flows are equally strong, relevant matches | disambiguate flows |
66
+ | User's message is unclear or imprecise | disambiguate flows |
67
+ | No flow fits at all, but knowledge base may help | search and reply |
61
68
 
62
69
  ---
63
70
 
64
71
  ## Current State
65
72
  {% if current_flow != None %}Use the following structured data:
66
73
  ```json
67
- {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
74
+ {"active_flow":{"name":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":{{ current_slot_description | to_json_escaped_string }}},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}{% if active_agent %},"active_agent":{"name":"{{ active_agent.name }}","description":{{ active_agent.description | to_json_escaped_string }}}{% endif %}{% if completed_agents %},"completed_agents":[{% for agent in completed_agents %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
68
75
  ```{% else %}
69
76
  You are currently not inside any flow.{% endif %}
70
77
 
@@ -5,7 +5,10 @@ from typing import Any, Dict, List, Literal, Optional, Text
5
5
  import structlog
6
6
 
7
7
  import rasa.shared.utils.io
8
- from rasa.core.available_agents import AvailableAgents
8
+ from rasa.agents.utils import (
9
+ get_active_agent_info,
10
+ get_completed_agents_info,
11
+ )
9
12
  from rasa.dialogue_understanding.commands import (
10
13
  CannotHandleCommand,
11
14
  Command,
@@ -45,7 +48,6 @@ from rasa.shared.constants import (
45
48
  PROMPT_TEMPLATE_CONFIG_KEY,
46
49
  ROUTE_TO_CALM_SLOT,
47
50
  )
48
- from rasa.shared.core.events import AgentCompleted
49
51
  from rasa.shared.core.flows import FlowsList
50
52
  from rasa.shared.core.trackers import DialogueStateTracker
51
53
  from rasa.shared.exceptions import ProviderClientAPIException
@@ -416,10 +418,10 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
416
418
  "current_slot_type": current_slot_type,
417
419
  "current_slot_allowed_values": current_slot_allowed_values,
418
420
  "user_message": latest_user_message,
419
- "active_agent": self._get_active_agent(tracker, top_flow.id)
421
+ "active_agent": get_active_agent_info(tracker, top_flow.id)
420
422
  if top_flow
421
423
  else None,
422
- "completed_agents": self._get_completed_agents(tracker),
424
+ "completed_agents": get_completed_agents_info(tracker),
423
425
  }
424
426
 
425
427
  return self.compile_template(self.prompt_template).render(**inputs)
@@ -467,34 +469,3 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
467
469
  ) -> Optional[str]:
468
470
  """Get the prompt template from the config or the default prompt template."""
469
471
  pass
470
-
471
- def _get_active_agent(
472
- self, tracker: DialogueStateTracker, active_flow_id: str
473
- ) -> Optional[Dict[str, Any]]:
474
- agent_frame = tracker.stack.find_active_agent_stack_frame_for_flow(
475
- active_flow_id
476
- )
477
- if agent_frame:
478
- return self._get_agent_info(agent_frame.agent_id)
479
- return None
480
-
481
- def _get_completed_agents(
482
- self, tracker: DialogueStateTracker
483
- ) -> List[Dict[str, Any]]:
484
- completed_agents: List[Dict[str, Any]] = []
485
- for event in reversed(tracker.events):
486
- if isinstance(event, AgentCompleted):
487
- agent_info = self._get_agent_info(event.agent_id)
488
- if agent_info:
489
- completed_agents.append(agent_info)
490
- return completed_agents
491
-
492
- def _get_agent_info(self, agent_id: str) -> Optional[Dict[str, Any]]:
493
- agent_config = AvailableAgents.get_agent_config(agent_id)
494
- if agent_config is None:
495
- return None
496
-
497
- return {
498
- "name": agent_config.agent.name,
499
- "description": agent_config.agent.description,
500
- }
@@ -8,10 +8,12 @@ import structlog
8
8
  from rasa.core.actions import action
9
9
  from rasa.core.channels.channel import OutputChannel
10
10
  from rasa.core.nlg.generator import NaturalLanguageGenerator
11
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
11
12
  from rasa.dialogue_understanding.stack.frames import (
12
13
  BaseFlowStackFrame,
13
14
  PatternFlowStackFrame,
14
15
  )
16
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import AgentStackFrame
15
17
  from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
16
18
  from rasa.shared.core.constants import ACTION_CANCEL_FLOW
17
19
  from rasa.shared.core.domain import Domain
@@ -30,7 +32,8 @@ class CancelPatternFlowStackFrame(PatternFlowStackFrame):
30
32
  """A pattern flow stack frame which cancels a flow.
31
33
 
32
34
  The frame contains the information about the stack frames that should
33
- be canceled."""
35
+ be canceled.
36
+ """
34
37
 
35
38
  flow_id: str = FLOW_PATTERN_CANCEL
36
39
  """The ID of the flow."""
@@ -93,19 +96,37 @@ class ActionCancelFlow(action.Action):
93
96
  structlogger.warning("action.cancel_flow.no_cancel_frame")
94
97
  return []
95
98
 
99
+ agent_frame_ids_to_cancel = []
96
100
  for canceled_frame_id in top.canceled_frames:
97
101
  for frame in stack.frames:
98
102
  if frame.frame_id == canceled_frame_id and isinstance(
99
103
  frame, BaseFlowStackFrame
100
104
  ):
101
- # Setting the stack frame to the end step so it is properly
102
- # wrapped up by the flow policy
103
- frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
104
- break
105
+ if isinstance(frame, AgentStackFrame):
106
+ # When an AgentStackFrame needs to be canceled, we can
107
+ # remove it directly from the stack. No extra logic is
108
+ # required in the flow executor, since
109
+ # the AgentCanceled event has already been created by
110
+ # ActionCancelInterruptedFlows or CancelFlowCommand, and the
111
+ # steps following the agentic call step should not be executed.
112
+ agent_frame_ids_to_cancel.append(frame.frame_id)
113
+ break
114
+ else:
115
+ # Setting the stack frame to the end step so it is
116
+ # properly wrapped up by the flow policy
117
+ frame.step_id = ContinueFlowStep.continue_step_for_id(END_STEP)
118
+ break
105
119
  else:
106
120
  structlogger.warning(
107
121
  "action.cancel_flow.frame_not_found",
108
122
  frame_id=canceled_frame_id,
109
123
  )
110
124
 
111
- return tracker.create_stack_updated_events(stack)
125
+ # Create a copy of the stack without the agentic frames that should
126
+ # be canceled
127
+ new_stack = DialogueStack.empty()
128
+ for frame in stack.frames:
129
+ if frame.frame_id not in agent_frame_ids_to_cancel:
130
+ new_stack.push(frame)
131
+
132
+ return tracker.create_stack_updated_events(new_stack)
@@ -87,7 +87,7 @@ responses:
87
87
  rephrase: True
88
88
 
89
89
  utter_inform_hangup:
90
- - text: It seems you are not there anymore. I will hang up shortly.
90
+ - text: I haven’t heard from you, so I’ll end our conversation shortly.
91
91
  metadata:
92
92
  rephrase: True
93
93
 
@@ -2,16 +2,22 @@ from typing import Dict, List, Optional, Set, Type
2
2
 
3
3
  import structlog
4
4
 
5
+ from rasa.agents.utils import (
6
+ is_agent_completed,
7
+ is_agent_valid,
8
+ )
5
9
  from rasa.dialogue_understanding.commands import (
6
10
  CancelFlowCommand,
7
11
  CannotHandleCommand,
8
12
  ChitChatAnswerCommand,
9
13
  ClarifyCommand,
10
14
  Command,
15
+ ContinueAgentCommand,
11
16
  CorrectedSlot,
12
17
  CorrectSlotsCommand,
13
18
  FreeFormAnswerCommand,
14
19
  RepeatBotMessagesCommand,
20
+ RestartAgentCommand,
15
21
  SetSlotCommand,
16
22
  StartFlowCommand,
17
23
  )
@@ -461,6 +467,35 @@ def clean_up_commands(
461
467
  "drop_clarify_given_other_commands",
462
468
  command=command,
463
469
  )
470
+
471
+ # Keep the Restart agent commands only if the command is referencing
472
+ # a valid agent that was already completed
473
+ elif isinstance(command, RestartAgentCommand):
474
+ if not is_agent_valid(command.agent_id):
475
+ structlogger.debug(
476
+ "command_processor.clean_up_commands.skip_restart_agent_invalid_agent",
477
+ agent_id=command.agent_id,
478
+ command=command,
479
+ )
480
+ elif not is_agent_completed(tracker, command.agent_id):
481
+ structlogger.debug(
482
+ "command_processor.clean_up_commands.skip_restart_agent_not_completed",
483
+ agent_id=command.agent_id,
484
+ command=command,
485
+ )
486
+ else:
487
+ clean_commands.append(command)
488
+
489
+ # Clean up Continue agent commands if there is currently no active agent
490
+ elif isinstance(command, ContinueAgentCommand):
491
+ if not tracker.stack.agent_is_active():
492
+ structlogger.debug(
493
+ "command_processor.clean_up_commands.skip_continue_agent_no_active_agent",
494
+ command=command,
495
+ )
496
+ else:
497
+ clean_commands.append(command)
498
+
464
499
  else:
465
500
  clean_commands.append(command)
466
501
 
rasa/engine/graph.py CHANGED
@@ -69,6 +69,7 @@ class SchemaNode:
69
69
 
70
70
  def matches_type(self, node_type: Type, include_subtypes: bool = True) -> bool:
71
71
  """Checks if schema node's 'uses' is of specified node type.
72
+
72
73
  By default, it also checks for subtypes of the specified node type.
73
74
  """
74
75
  return (self.uses is node_type) or (
@@ -171,6 +172,7 @@ class GraphSchema:
171
172
 
172
173
  def has_node(self, node_type: Type, include_subtypes: bool = True) -> bool:
173
174
  """Checks if the graph schema contains a node of the specified node type.
175
+
174
176
  By default, it also checks for subtypes of the specified node type.
175
177
  """
176
178
  for node in self.nodes.values():
@@ -181,7 +183,7 @@ class GraphSchema:
181
183
  def count_nodes_of_a_given_type(
182
184
  self, node_type: Type, include_subtypes: bool = True
183
185
  ) -> int:
184
- """Counts the number of the nodes of specified class"""
186
+ """Counts the number of the nodes of specified class."""
185
187
  counter = 0
186
188
  for node in self.nodes.values():
187
189
  if (node.uses is node_type) or (
@@ -353,6 +355,7 @@ class ExecutionContext:
353
355
 
354
356
  def has_node(self, node_type: Type, include_subtypes: bool = True) -> bool:
355
357
  """Checks if the graph node of the given type is present in the graph schema.
358
+
356
359
  By default, it also checks for subtypes of the specified node type.
357
360
  """
358
361
  return self.graph_schema.has_node(node_type, include_subtypes)
@@ -555,6 +558,7 @@ class GraphNode:
555
558
  structlogger.error(
556
559
  "graph.node.error_running_component",
557
560
  node_name=self._node_name,
561
+ error=str(e),
558
562
  )
559
563
  raise
560
564