rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__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 (586) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +213 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +889 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +228 -0
  26. rasa/agents/validation.py +538 -0
  27. rasa/api.py +23 -9
  28. rasa/builder/README.md +120 -0
  29. rasa/builder/__init__.py +0 -0
  30. rasa/builder/auth.py +176 -0
  31. rasa/builder/config.py +96 -0
  32. rasa/builder/copilot/__init__.py +0 -0
  33. rasa/builder/copilot/constants.py +38 -0
  34. rasa/builder/copilot/copilot.py +562 -0
  35. rasa/builder/copilot/copilot_response_handler.py +522 -0
  36. rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
  37. rasa/builder/copilot/exceptions.py +32 -0
  38. rasa/builder/copilot/models.py +690 -0
  39. rasa/builder/copilot/prompts/__init__.py +0 -0
  40. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
  41. rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
  42. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
  43. rasa/builder/copilot/signing.py +305 -0
  44. rasa/builder/copilot/telemetry.py +234 -0
  45. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  46. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  47. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
  48. rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
  49. rasa/builder/document_retrieval/__init__.py +0 -0
  50. rasa/builder/document_retrieval/constants.py +15 -0
  51. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  52. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  53. rasa/builder/document_retrieval/models.py +62 -0
  54. rasa/builder/download.py +140 -0
  55. rasa/builder/exceptions.py +91 -0
  56. rasa/builder/guardrails/__init__.py +1 -0
  57. rasa/builder/guardrails/clients.py +256 -0
  58. rasa/builder/guardrails/constants.py +12 -0
  59. rasa/builder/guardrails/exceptions.py +4 -0
  60. rasa/builder/guardrails/models.py +266 -0
  61. rasa/builder/guardrails/policy_checker.py +324 -0
  62. rasa/builder/guardrails/store.py +238 -0
  63. rasa/builder/guardrails/utils.py +94 -0
  64. rasa/builder/job_manager.py +87 -0
  65. rasa/builder/jobs.py +609 -0
  66. rasa/builder/llm_service.py +273 -0
  67. rasa/builder/logging_utils.py +265 -0
  68. rasa/builder/main.py +234 -0
  69. rasa/builder/models.py +229 -0
  70. rasa/builder/project_generator.py +463 -0
  71. rasa/builder/project_info.py +72 -0
  72. rasa/builder/service.py +1367 -0
  73. rasa/builder/shared/tracker_context.py +212 -0
  74. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  75. rasa/builder/template_cache.py +69 -0
  76. rasa/builder/training_service.py +188 -0
  77. rasa/builder/validation_service.py +101 -0
  78. rasa/cli/arguments/data.py +9 -0
  79. rasa/cli/arguments/default_arguments.py +12 -0
  80. rasa/cli/arguments/run.py +2 -0
  81. rasa/cli/arguments/train.py +2 -0
  82. rasa/cli/data.py +78 -10
  83. rasa/cli/dialogue_understanding_test.py +11 -7
  84. rasa/cli/e2e_test.py +10 -6
  85. rasa/cli/evaluate.py +4 -2
  86. rasa/cli/export.py +5 -2
  87. rasa/cli/inspect.py +9 -4
  88. rasa/cli/interactive.py +8 -4
  89. rasa/cli/llm_fine_tuning.py +12 -6
  90. rasa/cli/project_templates/basic/README.md +23 -0
  91. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  92. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  93. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  94. rasa/cli/project_templates/basic/config.yml +29 -0
  95. rasa/cli/project_templates/basic/credentials.yml +33 -0
  96. rasa/cli/project_templates/basic/data/data.md +8 -0
  97. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  98. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  99. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  100. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  101. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  102. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  103. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  104. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  105. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  106. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  107. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  108. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  109. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  110. rasa/cli/project_templates/basic/domain/domain.md +11 -0
  111. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  112. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  113. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  114. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  115. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  116. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  117. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  118. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  119. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  120. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  121. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  122. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  123. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  124. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
  125. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
  126. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
  127. rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
  128. rasa/cli/project_templates/default/config.yml +4 -0
  129. rasa/cli/project_templates/default/endpoints.yml +4 -0
  130. rasa/cli/project_templates/defaults.py +1 -0
  131. rasa/cli/project_templates/finance/README.md +26 -0
  132. rasa/cli/project_templates/finance/actions/__init__.py +0 -0
  133. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  134. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  135. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  136. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  137. rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
  138. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  139. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  140. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  141. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  142. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  143. rasa/cli/project_templates/finance/actions/db.py +117 -0
  144. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  145. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  146. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  147. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  148. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  149. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  150. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  151. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  152. rasa/cli/project_templates/finance/config.yml +29 -0
  153. rasa/cli/project_templates/finance/credentials.yml +33 -0
  154. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
  155. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  156. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  157. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  158. rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
  159. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  160. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  161. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  162. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  163. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  164. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  165. rasa/cli/project_templates/finance/data/data.md +14 -0
  166. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  167. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  168. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  169. rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
  170. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  171. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  172. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  173. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  174. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  175. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  176. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  177. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  178. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  179. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  180. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
  181. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  182. rasa/cli/project_templates/finance/db/cards.json +18 -0
  183. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  184. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  185. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  186. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  187. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  188. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  189. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  190. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  191. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  192. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  193. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  194. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  195. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  196. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  197. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
  198. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  199. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  200. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  201. rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
  202. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  203. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  204. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  205. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  206. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  207. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  208. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  209. rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
  210. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  211. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
  212. rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
  213. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  214. rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
  215. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
  216. rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
  217. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  218. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  219. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  220. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
  221. rasa/cli/project_templates/finance/endpoints.yml +67 -0
  222. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  223. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
  224. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
  225. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
  226. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  227. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  228. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  229. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  230. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  231. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
  232. rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
  233. rasa/cli/project_templates/telco/README.md +25 -0
  234. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  235. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  236. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  238. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  240. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  242. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  243. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  244. rasa/cli/project_templates/telco/config.yml +29 -0
  245. rasa/cli/project_templates/telco/credentials.yml +33 -0
  246. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  247. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  248. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  249. rasa/cli/project_templates/telco/data/data.md +11 -0
  250. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  251. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  252. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  253. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  254. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  255. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  256. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  257. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  258. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  259. rasa/cli/project_templates/telco/docs/docs.md +8 -0
  260. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  261. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  262. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  263. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  264. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  265. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  266. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  267. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  268. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  269. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  270. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  271. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  272. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  273. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  274. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
  275. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  276. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  277. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  278. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
  279. rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
  280. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
  281. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
  282. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
  283. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
  284. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
  285. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
  286. rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
  287. rasa/cli/project_templates/tutorial/config.yml +2 -1
  288. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  289. rasa/cli/run.py +8 -10
  290. rasa/cli/scaffold.py +50 -6
  291. rasa/cli/shell.py +10 -5
  292. rasa/cli/studio/studio.py +1 -1
  293. rasa/cli/test.py +34 -14
  294. rasa/cli/train.py +44 -30
  295. rasa/cli/utils.py +1 -393
  296. rasa/cli/validation/__init__.py +0 -0
  297. rasa/cli/validation/bot_config.py +232 -0
  298. rasa/cli/validation/config_path_validation.py +257 -0
  299. rasa/cli/x.py +8 -4
  300. rasa/constants.py +7 -1
  301. rasa/core/actions/action.py +53 -13
  302. rasa/core/actions/action_exceptions.py +1 -1
  303. rasa/core/actions/action_run_slot_rejections.py +1 -1
  304. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  305. rasa/core/agent.py +22 -2
  306. rasa/core/available_agents.py +239 -0
  307. rasa/core/brokers/broker.py +1 -1
  308. rasa/core/brokers/kafka.py +56 -8
  309. rasa/core/channels/__init__.py +82 -35
  310. rasa/core/channels/channel.py +4 -3
  311. rasa/core/channels/constants.py +3 -0
  312. rasa/core/channels/development_inspector.py +29 -16
  313. rasa/core/channels/hangouts.py +2 -2
  314. rasa/core/channels/inspector/README.md +25 -13
  315. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  319. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  320. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  322. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  328. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  334. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  353. rasa/core/channels/inspector/dist/index.html +1 -1
  354. rasa/core/channels/inspector/package.json +18 -18
  355. rasa/core/channels/inspector/src/App.tsx +56 -12
  356. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  357. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  358. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  359. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  360. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
  361. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  362. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
  363. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  364. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  365. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  366. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  367. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  368. rasa/core/channels/inspector/src/types.ts +55 -1
  369. rasa/core/channels/inspector/yarn.lock +336 -189
  370. rasa/core/channels/socketio.py +212 -51
  371. rasa/core/channels/studio_chat.py +82 -32
  372. rasa/core/channels/telegram.py +4 -9
  373. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  374. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  375. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  376. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  377. rasa/core/channels/voice_stream/audiocodes.py +11 -6
  378. rasa/core/channels/voice_stream/browser_audio.py +91 -4
  379. rasa/core/channels/voice_stream/call_state.py +13 -2
  380. rasa/core/channels/voice_stream/genesys.py +19 -15
  381. rasa/core/channels/voice_stream/jambonz.py +22 -12
  382. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  383. rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
  384. rasa/core/channels/voice_stream/util.py +11 -1
  385. rasa/core/channels/voice_stream/voice_channel.py +170 -32
  386. rasa/core/concurrent_lock_store.py +83 -16
  387. rasa/core/config/__init__.py +0 -0
  388. rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
  389. rasa/core/config/configuration.py +295 -0
  390. rasa/core/config/credentials.py +19 -0
  391. rasa/core/config/message_procesing_config.py +34 -0
  392. rasa/core/constants.py +17 -0
  393. rasa/core/exceptions.py +1 -1
  394. rasa/core/featurizers/tracker_featurizers.py +3 -2
  395. rasa/core/iam_credentials_providers/__init__.py +0 -0
  396. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
  397. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
  398. rasa/core/lock_store.py +50 -10
  399. rasa/core/nlg/contextual_response_rephraser.py +5 -0
  400. rasa/core/nlg/generator.py +1 -1
  401. rasa/core/persistor.py +7 -7
  402. rasa/core/policies/enterprise_search_policy.py +9 -10
  403. rasa/core/policies/flow_policy.py +4 -4
  404. rasa/core/policies/flows/agent_executor.py +720 -0
  405. rasa/core/policies/flows/flow_exceptions.py +5 -2
  406. rasa/core/policies/flows/flow_executor.py +146 -77
  407. rasa/core/policies/flows/mcp_tool_executor.py +304 -0
  408. rasa/core/policies/intentless_policy.py +1 -1
  409. rasa/core/policies/rule_policy.py +1 -1
  410. rasa/core/policies/ted_policy.py +20 -12
  411. rasa/core/policies/unexpected_intent_policy.py +6 -0
  412. rasa/core/processor.py +100 -44
  413. rasa/core/redis_connection_factory.py +474 -0
  414. rasa/core/run.py +49 -10
  415. rasa/core/test.py +4 -0
  416. rasa/core/tracker_stores/redis_tracker_store.py +36 -14
  417. rasa/core/tracker_stores/sql_tracker_store.py +59 -1
  418. rasa/core/tracker_stores/tracker_store.py +3 -7
  419. rasa/core/train.py +1 -1
  420. rasa/core/training/interactive.py +20 -18
  421. rasa/core/training/story_conflict.py +5 -5
  422. rasa/core/utils.py +22 -23
  423. rasa/dialogue_understanding/commands/__init__.py +8 -0
  424. rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
  425. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  426. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  427. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  428. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  429. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  430. rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
  431. rasa/dialogue_understanding/commands/utils.py +135 -2
  432. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  433. rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
  434. rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
  435. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  436. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  437. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  438. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  439. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  440. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  441. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  442. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  443. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  444. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  445. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  446. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  447. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
  448. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  449. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  450. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  451. rasa/dialogue_understanding/stack/utils.py +57 -3
  452. rasa/dialogue_understanding/utils.py +24 -4
  453. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  454. rasa/e2e_test/e2e_test_runner.py +13 -3
  455. rasa/engine/caching.py +2 -2
  456. rasa/engine/constants.py +1 -1
  457. rasa/engine/graph.py +5 -1
  458. rasa/engine/loader.py +12 -0
  459. rasa/engine/recipes/default_components.py +138 -49
  460. rasa/engine/recipes/default_recipe.py +108 -11
  461. rasa/engine/runner/dask.py +8 -5
  462. rasa/engine/validation.py +25 -8
  463. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  464. rasa/hooks.py +5 -5
  465. rasa/llm_fine_tuning/utils.py +2 -2
  466. rasa/model_manager/model_api.py +4 -5
  467. rasa/model_manager/runner_service.py +2 -2
  468. rasa/model_manager/socket_bridge.py +21 -17
  469. rasa/model_manager/trainer_service.py +12 -9
  470. rasa/model_manager/utils.py +1 -29
  471. rasa/model_manager/warm_rasa_process.py +13 -3
  472. rasa/model_training.py +60 -47
  473. rasa/nlu/classifiers/diet_classifier.py +198 -98
  474. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  475. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  476. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  477. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  478. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  479. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  480. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  481. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  482. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  483. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  484. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  485. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  486. rasa/nlu/selectors/response_selector.py +10 -2
  487. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  488. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  489. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  490. rasa/nlu/utils/mitie_utils.py +3 -0
  491. rasa/nlu/utils/spacy_utils.py +3 -2
  492. rasa/plugin.py +8 -8
  493. rasa/privacy/privacy_config.py +1 -1
  494. rasa/privacy/privacy_manager.py +12 -3
  495. rasa/server.py +15 -3
  496. rasa/shared/agents/__init__.py +0 -0
  497. rasa/shared/agents/auth/__init__.py +0 -0
  498. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  499. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  500. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  501. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  502. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  503. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  504. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
  505. rasa/shared/agents/auth/constants.py +13 -0
  506. rasa/shared/agents/auth/types.py +12 -0
  507. rasa/shared/agents/auth/utils.py +85 -0
  508. rasa/shared/agents/utils.py +35 -0
  509. rasa/shared/constants.py +11 -0
  510. rasa/shared/core/constants.py +17 -1
  511. rasa/shared/core/domain.py +62 -22
  512. rasa/shared/core/events.py +329 -0
  513. rasa/shared/core/flows/constants.py +5 -0
  514. rasa/shared/core/flows/flow.py +1 -1
  515. rasa/shared/core/flows/flow_step.py +7 -1
  516. rasa/shared/core/flows/flows_list.py +21 -5
  517. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  518. rasa/shared/core/flows/steps/call.py +57 -6
  519. rasa/shared/core/flows/steps/collect.py +98 -13
  520. rasa/shared/core/flows/validation.py +372 -8
  521. rasa/shared/core/flows/yaml_flows_io.py +19 -10
  522. rasa/shared/core/slots.py +6 -2
  523. rasa/shared/core/trackers.py +5 -2
  524. rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
  525. rasa/shared/exceptions.py +39 -2
  526. rasa/shared/importers/importer.py +6 -0
  527. rasa/shared/importers/rasa.py +1 -1
  528. rasa/shared/importers/utils.py +86 -4
  529. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  530. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  531. rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
  532. rasa/shared/providers/llm/llm_client.py +7 -3
  533. rasa/shared/providers/llm/llm_response.py +66 -0
  534. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  535. rasa/shared/utils/common.py +26 -1
  536. rasa/shared/utils/health_check/health_check.py +7 -3
  537. rasa/shared/utils/llm.py +92 -19
  538. rasa/shared/utils/mcp/__init__.py +0 -0
  539. rasa/shared/utils/mcp/server_connection.py +250 -0
  540. rasa/shared/utils/mcp/utils.py +20 -0
  541. rasa/shared/utils/schemas/events.py +42 -0
  542. rasa/shared/utils/yaml.py +3 -1
  543. rasa/studio/download.py +3 -0
  544. rasa/studio/prompts.py +1 -0
  545. rasa/studio/pull/pull.py +3 -2
  546. rasa/studio/train.py +8 -7
  547. rasa/studio/upload.py +19 -52
  548. rasa/telemetry.py +166 -28
  549. rasa/tracing/config.py +45 -12
  550. rasa/tracing/constants.py +14 -0
  551. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  552. rasa/tracing/instrumentation/instrumentation.py +626 -21
  553. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  554. rasa/tracing/instrumentation/metrics.py +32 -0
  555. rasa/tracing/metric_instrument_provider.py +68 -0
  556. rasa/utils/common.py +92 -1
  557. rasa/utils/endpoints.py +11 -2
  558. rasa/utils/io.py +27 -9
  559. rasa/utils/json_utils.py +6 -1
  560. rasa/utils/log_utils.py +121 -7
  561. rasa/utils/ml_utils.py +1 -1
  562. rasa/utils/openapi.py +144 -0
  563. rasa/utils/plotting.py +1 -1
  564. rasa/utils/pypred.py +45 -0
  565. rasa/utils/tensorflow/__init__.py +7 -0
  566. rasa/utils/tensorflow/callback.py +136 -101
  567. rasa/utils/tensorflow/crf.py +1 -1
  568. rasa/utils/tensorflow/data_generator.py +21 -8
  569. rasa/utils/tensorflow/layers.py +21 -11
  570. rasa/utils/tensorflow/metrics.py +7 -3
  571. rasa/utils/tensorflow/models.py +56 -8
  572. rasa/utils/tensorflow/rasa_layers.py +8 -6
  573. rasa/utils/tensorflow/transformer.py +2 -3
  574. rasa/utils/train_utils.py +54 -24
  575. rasa/validator.py +149 -16
  576. rasa/version.py +1 -1
  577. rasa_pro-3.14.0.dist-info/METADATA +212 -0
  578. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
  579. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  580. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  581. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  582. rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
  583. rasa_pro-3.13.12.dist-info/METADATA +0 -192
  584. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
  585. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
  586. {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
@@ -12,7 +12,11 @@ from rasa.dialogue_understanding.commands.free_form_answer_command import (
12
12
  FreeFormAnswerCommand,
13
13
  )
14
14
  from rasa.dialogue_understanding.patterns.search import SearchPatternFlowStackFrame
15
- from rasa.shared.core.events import Event
15
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
16
+ AgentStackFrame,
17
+ AgentState,
18
+ )
19
+ from rasa.shared.core.events import AgentInterrupted, Event
16
20
  from rasa.shared.core.flows import FlowsList
17
21
  from rasa.shared.core.trackers import DialogueStateTracker
18
22
 
@@ -52,8 +56,23 @@ class KnowledgeAnswerCommand(FreeFormAnswerCommand):
52
56
  The events to apply to the tracker.
53
57
  """
54
58
  stack = tracker.stack
59
+
60
+ applied_events: List[Event] = []
61
+
62
+ # if the top stack frame is an agent stack frame, we need to
63
+ # update the state to INTERRUPTED and add an AgentInterrupted event
64
+ if top_stack_frame := stack.top():
65
+ if isinstance(top_stack_frame, AgentStackFrame):
66
+ applied_events.append(
67
+ AgentInterrupted(
68
+ top_stack_frame.agent_id,
69
+ top_stack_frame.flow_id,
70
+ )
71
+ )
72
+ top_stack_frame.state = AgentState.INTERRUPTED
73
+
55
74
  stack.push(SearchPatternFlowStackFrame())
56
- return tracker.create_stack_updated_events(stack)
75
+ return applied_events + tracker.create_stack_updated_events(stack)
57
76
 
58
77
  def __hash__(self) -> int:
59
78
  return hash(self.command())
@@ -0,0 +1,162 @@
1
+ from __future__ import annotations
2
+
3
+ import re
4
+ from dataclasses import dataclass
5
+ from typing import Any, Dict, List, Optional
6
+
7
+ from rasa.dialogue_understanding.commands.command import Command
8
+ from rasa.dialogue_understanding.commands.command_syntax_manager import (
9
+ CommandSyntaxManager,
10
+ CommandSyntaxVersion,
11
+ )
12
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
13
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
14
+ AgentStackFrame,
15
+ AgentState,
16
+ )
17
+ from rasa.shared.core.events import AgentStarted, Event
18
+ from rasa.shared.core.flows import FlowsList
19
+ from rasa.shared.core.flows.steps import CallFlowStep
20
+ from rasa.shared.core.trackers import DialogueStateTracker
21
+
22
+
23
+ @dataclass
24
+ class RestartAgentCommand(Command):
25
+ """A command to restart an agentic loop within a flow."""
26
+
27
+ agent_id: str
28
+
29
+ @classmethod
30
+ def command(cls) -> str:
31
+ """Returns the command type."""
32
+ return "restart agent"
33
+
34
+ @classmethod
35
+ def from_dict(cls, data: Dict[str, Any]) -> RestartAgentCommand:
36
+ """Converts the dictionary to a command.
37
+
38
+ Returns:
39
+ The converted dictionary.
40
+ """
41
+ try:
42
+ return RestartAgentCommand(agent_id=data["agent_id"])
43
+ except KeyError as e:
44
+ raise ValueError(
45
+ f"Missing parameter '{e}' while parsing RestartAgentCommand."
46
+ ) from e
47
+
48
+ def run_command_on_tracker(
49
+ self,
50
+ tracker: DialogueStateTracker,
51
+ all_flows: FlowsList,
52
+ original_tracker: DialogueStateTracker,
53
+ ) -> List[Event]:
54
+ """Runs the command on the tracker.
55
+
56
+ Args:
57
+ tracker: The tracker to run the command on.
58
+ all_flows: All flows in the assistant.
59
+ original_tracker: The tracker before any command was executed.
60
+
61
+ Returns:
62
+ The events to apply to the tracker.
63
+ """
64
+ stack = tracker.stack
65
+
66
+ # get the agent flow
67
+ agent_flow_id = self._get_agent_flow(original_tracker)
68
+
69
+ # create a new agent stack frame to restart the agent
70
+ restart_agent_frame = self.create_restart_agent_stack_frame(
71
+ all_flows, agent_flow_id
72
+ )
73
+
74
+ # if the stack contains an agent stack frame with status
75
+ # "waiting for input" update the status to "interrupted"
76
+ self.update_agent_stack_frames_on_stack(stack)
77
+
78
+ # push the stack frame on the top of the stack
79
+ stack.push(restart_agent_frame)
80
+ return tracker.create_stack_updated_events(stack)
81
+
82
+ def __hash__(self) -> int:
83
+ return hash(self.command())
84
+
85
+ def __eq__(self, other: object) -> bool:
86
+ return isinstance(other, RestartAgentCommand)
87
+
88
+ def to_dsl(self) -> str:
89
+ """Converts the command to a DSL string."""
90
+ mapper = {
91
+ CommandSyntaxVersion.v1: f"RestartAgent({self.agent_id})",
92
+ CommandSyntaxVersion.v2: f"restart agent {self.agent_id}",
93
+ CommandSyntaxVersion.v3: f"restart agent {self.agent_id}",
94
+ }
95
+ return mapper.get(
96
+ CommandSyntaxManager.get_syntax_version(),
97
+ mapper[CommandSyntaxManager.get_default_syntax_version()],
98
+ )
99
+
100
+ @classmethod
101
+ def from_dsl(cls, match: re.Match, **kwargs: Any) -> RestartAgentCommand:
102
+ """Converts a DSL string to a command."""
103
+ return RestartAgentCommand(agent_id=str(match.group(1).strip()))
104
+
105
+ @staticmethod
106
+ def regex_pattern() -> str:
107
+ mapper = {
108
+ CommandSyntaxVersion.v1: r"RestartAgent\(['\"]?([a-zA-Z0-9_-]+)['\"]?\)",
109
+ CommandSyntaxVersion.v2: (
110
+ r"""^[\s\W\d]*restart agent ['"`]?([a-zA-Z0-9_-]+)['"`]*"""
111
+ ),
112
+ CommandSyntaxVersion.v3: (
113
+ r"""^[\s\W\d]*restart agent ['"`]?([a-zA-Z0-9_-]+)['"`]*"""
114
+ ),
115
+ }
116
+ return mapper.get(
117
+ CommandSyntaxManager.get_syntax_version(),
118
+ mapper[CommandSyntaxManager.get_default_syntax_version()],
119
+ )
120
+
121
+ def create_restart_agent_stack_frame(
122
+ self, all_flows: FlowsList, agent_flow_id: str
123
+ ) -> AgentStackFrame:
124
+ # get the agent flow
125
+ agent_flow = all_flows.flow_by_id(agent_flow_id)
126
+ if not agent_flow:
127
+ raise ValueError(f"Agent flow {agent_flow_id} not found")
128
+
129
+ # find the call flow step for the agent
130
+ # set the state to "waiting for input" so that the agent can process
131
+ # the latest user message
132
+ for step in agent_flow.steps:
133
+ if isinstance(step, CallFlowStep) and step.call == self.agent_id:
134
+ return AgentStackFrame(
135
+ frame_id=f"restart_agent_{self.agent_id}",
136
+ flow_id=agent_flow_id,
137
+ step_id=step.id,
138
+ agent_id=self.agent_id,
139
+ state=AgentState.WAITING_FOR_INPUT,
140
+ )
141
+
142
+ raise ValueError(f"Call step in agent flow {agent_flow_id} not found")
143
+
144
+ def update_agent_stack_frames_on_stack(self, stack: DialogueStack) -> None:
145
+ for frame in stack.frames:
146
+ if (
147
+ isinstance(frame, AgentStackFrame)
148
+ and frame.state == AgentState.WAITING_FOR_INPUT
149
+ ):
150
+ frame.state = AgentState.INTERRUPTED
151
+
152
+ def _get_agent_flow(self, tracker: DialogueStateTracker) -> Optional[str]:
153
+ # find events associated with the agent
154
+ agent_started_events = [
155
+ event
156
+ for event in tracker.events
157
+ if type(event) == AgentStarted and event.agent_id == self.agent_id
158
+ ]
159
+ # take the last one if the agent was started multiple times
160
+ if agent_started_events:
161
+ return agent_started_events[-1].flow_id
162
+ return None
@@ -11,15 +11,25 @@ from rasa.dialogue_understanding.commands.command_syntax_manager import (
11
11
  CommandSyntaxManager,
12
12
  CommandSyntaxVersion,
13
13
  )
14
+ from rasa.dialogue_understanding.commands.utils import (
15
+ remove_pattern_continue_interrupted_frames,
16
+ resume_flow,
17
+ )
14
18
  from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
19
+ AgentState,
15
20
  FlowStackFrameType,
16
21
  UserFlowStackFrame,
17
22
  )
18
23
  from rasa.dialogue_understanding.stack.utils import (
24
+ is_continue_interrupted_flow_active,
19
25
  top_user_flow_frame,
20
26
  user_flows_on_the_stack,
21
27
  )
22
- from rasa.shared.core.events import Event, FlowInterrupted
28
+ from rasa.shared.core.events import (
29
+ AgentInterrupted,
30
+ Event,
31
+ FlowInterrupted,
32
+ )
23
33
  from rasa.shared.core.flows import FlowsList
24
34
  from rasa.shared.core.trackers import DialogueStateTracker
25
35
 
@@ -71,12 +81,7 @@ class StartFlowCommand(Command):
71
81
  original_stack = original_tracker.stack
72
82
  applied_events: List[Event] = []
73
83
 
74
- if self.flow in user_flows_on_the_stack(stack):
75
- structlogger.debug(
76
- "start_flow_command.skip_command.already_started_flow", command=self
77
- )
78
- return []
79
- elif self.flow not in all_flows.flow_ids:
84
+ if self.flow not in all_flows.flow_ids:
80
85
  structlogger.debug(
81
86
  "start_flow_command.skip_command.start_invalid_flow_id", command=self
82
87
  )
@@ -87,9 +92,54 @@ class StartFlowCommand(Command):
87
92
  original_user_frame.flow(all_flows) if original_user_frame else None
88
93
  )
89
94
 
95
+ # if the original top flow is the same as the flow to start, the flow is
96
+ # already active, do nothing
97
+ if original_top_flow is not None and original_top_flow.id == self.flow:
98
+ # in case continue_interrupted is not active, skip the already active start
99
+ # flow command
100
+ if not is_continue_interrupted_flow_active(stack):
101
+ return []
102
+
103
+ # if the continue interrupted flow is active, and the command generator
104
+ # predicted a start flow command for the flow which is on top of the stack,
105
+ # we just need to remove the pattern_continue_interrupted frame(s) from the
106
+ # stack
107
+ stack, flow_completed_events = remove_pattern_continue_interrupted_frames(
108
+ stack
109
+ )
110
+ applied_events.extend(flow_completed_events)
111
+ return applied_events + tracker.create_stack_updated_events(stack)
112
+
113
+ # if the flow is already on the stack, resume it
114
+ if (
115
+ self.flow in user_flows_on_the_stack(stack)
116
+ and original_user_frame is not None
117
+ ):
118
+ # if pattern_continue_interrupted is active, we need to remove it
119
+ # from the stack before resuming the flow
120
+ stack, flow_completed_events = remove_pattern_continue_interrupted_frames(
121
+ stack
122
+ )
123
+ applied_events.extend(flow_completed_events)
124
+ applied_events.extend(resume_flow(self.flow, tracker, stack))
125
+ # the current active flow is interrupted
126
+ applied_events.append(
127
+ FlowInterrupted(
128
+ original_user_frame.flow_id, original_user_frame.step_id
129
+ )
130
+ )
131
+ return applied_events
132
+
90
133
  frame_type = FlowStackFrameType.REGULAR
91
134
 
135
+ # remove the pattern_continue_interrupted frames from the stack
136
+ # if it is currently active but the user digressed from the pattern
137
+ stack, flow_completed_events = remove_pattern_continue_interrupted_frames(stack)
138
+ applied_events.extend(flow_completed_events)
139
+
92
140
  if original_top_flow:
141
+ # if the original top flow is not the same as the flow to start,
142
+ # interrupt the current active flow
93
143
  frame_type = FlowStackFrameType.INTERRUPT
94
144
 
95
145
  if original_user_frame is not None:
@@ -99,6 +149,24 @@ class StartFlowCommand(Command):
99
149
  )
100
150
  )
101
151
 
152
+ # If there is an active agent frame, interrupt it
153
+ active_agent_stack_frame = stack.find_active_agent_frame()
154
+ if active_agent_stack_frame:
155
+ structlogger.debug(
156
+ "start_flow_command.interrupt_agent",
157
+ command=self,
158
+ agent_id=active_agent_stack_frame.agent_id,
159
+ frame_id=active_agent_stack_frame.frame_id,
160
+ flow_id=active_agent_stack_frame.flow_id,
161
+ )
162
+ active_agent_stack_frame.state = AgentState.INTERRUPTED
163
+ applied_events.append(
164
+ AgentInterrupted(
165
+ active_agent_stack_frame.agent_id,
166
+ active_agent_stack_frame.flow_id,
167
+ )
168
+ )
169
+
102
170
  structlogger.debug("start_flow_command.start_flow", command=self)
103
171
  stack.push(UserFlowStackFrame(flow_id=self.flow, frame_type=frame_type))
104
172
  return applied_events + tracker.create_stack_updated_events(stack)
@@ -5,8 +5,24 @@ import structlog
5
5
  from rasa.dialogue_understanding.patterns.validate_slot import (
6
6
  ValidateSlotPatternFlowStackFrame,
7
7
  )
8
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
9
+ from rasa.dialogue_understanding.stack.frames.dialogue_stack_frame import (
10
+ DialogueStackFrame,
11
+ )
12
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
13
+ AgentStackFrame,
14
+ FlowStackFrameType,
15
+ UserFlowStackFrame,
16
+ )
17
+ from rasa.dialogue_understanding.stack.frames.pattern_frame import PatternFlowStackFrame
8
18
  from rasa.shared.constants import ACTION_ASK_PREFIX, UTTER_ASK_PREFIX
9
- from rasa.shared.core.events import Event, SlotSet
19
+ from rasa.shared.core.events import (
20
+ AgentResumed,
21
+ Event,
22
+ FlowCompleted,
23
+ FlowResumed,
24
+ SlotSet,
25
+ )
10
26
  from rasa.shared.core.flows import FlowsList
11
27
  from rasa.shared.core.slots import Slot
12
28
  from rasa.shared.core.trackers import DialogueStateTracker
@@ -103,7 +119,8 @@ def create_validate_frames_from_slot_set_events(
103
119
  Args:
104
120
  tracker: The dialogue state tracker.
105
121
  events: List of events to process.
106
- should_break: whether or not to break after the first non-SlotSet event.
122
+ validate_frames: List to collect validation frames.
123
+ should_break: whether to break after the first non-SlotSet event.
107
124
  if True, break out of the event loop as soon as the first non-SlotSet
108
125
  event is encountered.
109
126
  if False, continue processing the events until the end.
@@ -150,3 +167,119 @@ def find_default_flows_collecting_slot(
150
167
  for step in flow.get_collect_steps()
151
168
  )
152
169
  ]
170
+
171
+
172
+ def resume_flow(
173
+ flow_to_resume: str,
174
+ tracker: DialogueStateTracker,
175
+ stack: DialogueStack,
176
+ ) -> List[Event]:
177
+ """Resumes a flow by reordering frames."""
178
+ applied_events: List[Event] = []
179
+
180
+ # Resume existing flow by reordering frames
181
+ frames_to_resume, user_frame_to_resume = collect_frames_to_resume(
182
+ stack, flow_to_resume
183
+ )
184
+
185
+ # if the flow is not on the stack, do nothing
186
+ # this should not happen, but just in case
187
+ if user_frame_to_resume is None:
188
+ structlogger.error(
189
+ "resume_flow.no_user_frame_to_resume",
190
+ flow_to_resume=flow_to_resume,
191
+ )
192
+ return []
193
+
194
+ # move the frames to the top of the stack, e.g. reorder the frames
195
+ # on the stack
196
+ stack.move_frames_to_top(frames_to_resume)
197
+
198
+ # create agent resumed events if the agent frame is now on top of the stack
199
+ agent_stack_frame = next(
200
+ (frame for frame in frames_to_resume if isinstance(frame, AgentStackFrame)),
201
+ None,
202
+ )
203
+ if agent_stack_frame:
204
+ agent_id = agent_stack_frame.agent_id
205
+ applied_events.append(AgentResumed(agent_id, agent_stack_frame.flow_id))
206
+
207
+ # Create flow interruption and resumption events
208
+ applied_events.extend(
209
+ [
210
+ # the flow, which was on the stack, is resumed
211
+ FlowResumed(user_frame_to_resume.flow_id, user_frame_to_resume.step_id),
212
+ ]
213
+ )
214
+
215
+ return applied_events + tracker.create_stack_updated_events(stack)
216
+
217
+
218
+ def collect_frames_to_resume(
219
+ stack: DialogueStack,
220
+ target_flow_id: str, # pyright: ignore[reportUndefinedVariable]
221
+ ) -> Tuple[List[DialogueStackFrame], Optional[UserFlowStackFrame]]:
222
+ """Collect frames that need to be resumed for the target flow.
223
+
224
+ Args:
225
+ stack: The stack to collect frames from.
226
+ target_flow_id: The ID of the flow to resume.
227
+
228
+ Returns:
229
+ A tuple containing (frames_to_resume, frame_to_resume).
230
+ """
231
+ frames_to_resume: List[DialogueStackFrame] = []
232
+ frame_found = False
233
+ frame_to_resume = None
234
+
235
+ for frame in stack.frames:
236
+ if isinstance(frame, UserFlowStackFrame) and (
237
+ frame.frame_type == FlowStackFrameType.REGULAR
238
+ or frame.frame_type == FlowStackFrameType.INTERRUPT
239
+ ):
240
+ if frame.flow_id == target_flow_id:
241
+ frames_to_resume.append(frame)
242
+ frame_to_resume = frame
243
+ frame_found = True
244
+ continue
245
+ elif frame_found:
246
+ break
247
+
248
+ if frame_found:
249
+ frames_to_resume.append(frame)
250
+
251
+ return list(frames_to_resume), frame_to_resume
252
+
253
+
254
+ def remove_pattern_continue_interrupted_frames(
255
+ stack: DialogueStack,
256
+ ) -> Tuple[DialogueStack, List[FlowCompleted]]:
257
+ """Remove pattern_continue_interrupted frames from the stack and return events.
258
+
259
+ Returns:
260
+ A tuple containing (updated_stack, flow_completed_events)
261
+ """
262
+ from rasa.dialogue_understanding.stack.utils import (
263
+ is_continue_interrupted_flow_active,
264
+ )
265
+
266
+ if not is_continue_interrupted_flow_active(stack):
267
+ return stack, []
268
+
269
+ events = []
270
+ # remove pattern_continue_interrupted from the stack
271
+ top_frame = stack.top()
272
+ while isinstance(top_frame, PatternFlowStackFrame):
273
+ # Create FlowCompleted event for the pattern frame being removed
274
+ events.append(FlowCompleted(top_frame.flow_id, top_frame.step_id))
275
+
276
+ # If the top frame is a pattern frame, we need to remove it
277
+ # before continuing with the active user flow frame.
278
+ # This prevents the pattern frame
279
+ # from being left on the stack when the flow is started
280
+ # which would prevent pattern_completed to be triggered
281
+ # once the user flow is completed.
282
+ stack.pop()
283
+ top_frame = stack.top()
284
+
285
+ return stack, events
@@ -9,9 +9,11 @@ from rasa.dialogue_understanding.commands import (
9
9
  ChitChatAnswerCommand,
10
10
  ClarifyCommand,
11
11
  Command,
12
+ ContinueAgentCommand,
12
13
  HumanHandoffCommand,
13
14
  KnowledgeAnswerCommand,
14
15
  RepeatBotMessagesCommand,
16
+ RestartAgentCommand,
15
17
  SetSlotCommand,
16
18
  SkipQuestionCommand,
17
19
  StartFlowCommand,
@@ -34,6 +36,8 @@ DEFAULT_COMMANDS = [
34
36
  HumanHandoffCommand,
35
37
  ClarifyCommand,
36
38
  RepeatBotMessagesCommand,
39
+ ContinueAgentCommand,
40
+ RestartAgentCommand,
37
41
  ]
38
42
 
39
43
 
@@ -219,11 +219,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
219
219
  if self.vector_store is not None:
220
220
  with self._model_storage.write_to(self._resource) as model_path:
221
221
  self.vector_store.save_local(model_path)
222
- else:
223
- structlogger.warning(
224
- "flow_retrieval.persist_vector_store.not_initialized",
225
- event_info="Vector store is None, not persisted.",
226
- )
227
222
 
228
223
  def _persist_config(self) -> None:
229
224
  with self._model_storage.write_to(self._resource) as path:
@@ -430,10 +425,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
430
425
  The top k documents with similarity scores.
431
426
  """
432
427
  if self.vector_store is None:
433
- structlogger.error(
434
- "flow_retrieval.query_vector_store.vector_store_not_configured",
435
- event_info="Vector store is not configured",
436
- )
437
428
  return []
438
429
  try:
439
430
  documents_with_scores = (
@@ -7,6 +7,7 @@ from jinja2 import Environment, Template, select_autoescape
7
7
 
8
8
  import rasa.dialogue_understanding.generator.utils
9
9
  import rasa.shared.utils.io
10
+ from rasa.core.config.configuration import Configuration
10
11
  from rasa.dialogue_understanding.commands import (
11
12
  Command,
12
13
  SetSlotCommand,
@@ -31,6 +32,7 @@ from rasa.engine.storage.resource import Resource
31
32
  from rasa.engine.storage.storage import ModelStorage
32
33
  from rasa.shared.core.constants import SetSlotExtractor
33
34
  from rasa.shared.core.domain import Domain
35
+ from rasa.shared.core.events import AgentStarted
34
36
  from rasa.shared.core.flows import Flow, FlowsList, FlowStep
35
37
  from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
36
38
  from rasa.shared.core.slot_mappings import SlotFillingManager
@@ -225,8 +227,7 @@ class LLMBasedCommandGenerator(
225
227
 
226
228
  @lru_cache
227
229
  def compile_template(self, template: str) -> Template:
228
- """
229
- Compile the prompt template and register custom filters.
230
+ """Compile the prompt template and register custom filters.
230
231
 
231
232
  Compiling the template is an expensive operation,
232
233
  so we cache the result.
@@ -361,20 +362,24 @@ class LLMBasedCommandGenerator(
361
362
  )
362
363
 
363
364
  def prepare_flows_for_template(
364
- self, flows: FlowsList, tracker: DialogueStateTracker
365
+ self,
366
+ flows: FlowsList,
367
+ tracker: DialogueStateTracker,
368
+ add_agent_info: bool = False,
365
369
  ) -> List[Dict[str, Any]]:
366
370
  """Format data on available flows for insertion into the prompt template.
367
371
 
368
372
  Args:
369
373
  flows: The flows available to the user.
370
374
  tracker: The tracker containing the current state of the conversation.
375
+ add_agent_info: Whether to add agent info to flows or not.
371
376
 
372
377
  Returns:
373
378
  The inputs for the prompt template.
374
379
  """
375
- result = []
380
+ result: List[Dict[str, Any]] = []
376
381
  for flow in flows.user_flows:
377
- slots_with_info = [
382
+ slots_with_info: List[Dict[str, Any]] = [
378
383
  {
379
384
  "name": q.collect,
380
385
  "description": q.description,
@@ -383,13 +388,48 @@ class LLMBasedCommandGenerator(
383
388
  for q in flow.get_collect_steps()
384
389
  if self.is_extractable(q, tracker)
385
390
  ]
386
- result.append(
387
- {
388
- "name": flow.id,
389
- "description": flow.description,
390
- "slots": slots_with_info,
391
- }
392
- )
391
+
392
+ agent_info: List[Dict[str, Any]] = []
393
+ if add_agent_info:
394
+ # add information about agents that have been started for this flow
395
+ agent_events = [
396
+ event
397
+ for event in tracker.events
398
+ if isinstance(event, AgentStarted) and event.flow_id == flow.id
399
+ ]
400
+ available_agents = [
401
+ Configuration.get_instance().available_agents.get_agent_config(
402
+ event.agent_id
403
+ )
404
+ for event in agent_events
405
+ ]
406
+ if available_agents:
407
+ agent_info = [
408
+ {
409
+ "name": available_agent.agent.name,
410
+ "description": available_agent.agent.description,
411
+ }
412
+ for available_agent in available_agents
413
+ if available_agent is not None
414
+ ]
415
+
416
+ if agent_info:
417
+ result.append(
418
+ {
419
+ "name": flow.id,
420
+ "description": flow.description,
421
+ "slots": slots_with_info,
422
+ "agent_info": agent_info,
423
+ }
424
+ )
425
+ else:
426
+ result.append(
427
+ {
428
+ "name": flow.id,
429
+ "description": flow.description,
430
+ "slots": slots_with_info,
431
+ }
432
+ )
393
433
  return result
394
434
 
395
435
  @staticmethod
@@ -1,7 +1,7 @@
1
1
  from typing import Any, Dict, List, Optional, Text, Union
2
2
 
3
3
  import structlog
4
- from deprecated import deprecated # type: ignore[import]
4
+ from deprecated import deprecated # type: ignore[import-untyped]
5
5
 
6
6
  from rasa.dialogue_understanding.generator.single_step.single_step_llm_command_generator import ( # noqa: E501
7
7
  SingleStepLLMCommandGenerator,
@@ -2,7 +2,7 @@ import importlib.resources
2
2
  from typing import Any, Dict, List, Optional, Text, Tuple, Union
3
3
 
4
4
  import structlog
5
- from deprecated import deprecated # type: ignore[import]
5
+ from deprecated import deprecated # type: ignore[import-untyped]
6
6
  from jinja2 import Template
7
7
 
8
8
  import rasa.shared.utils.io