rasa-pro 3.14.0.dev20250901__py3-none-any.whl → 3.14.0rc1__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 (584) 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 +211 -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 +879 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +726 -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 +206 -0
  26. rasa/agents/validation.py +485 -0
  27. rasa/api.py +24 -9
  28. rasa/builder/config.py +7 -2
  29. rasa/builder/copilot/constants.py +3 -0
  30. rasa/builder/copilot/copilot.py +128 -54
  31. rasa/builder/copilot/models.py +39 -3
  32. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +183 -188
  33. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  34. rasa/builder/copilot/telemetry.py +46 -20
  35. rasa/builder/document_retrieval/models.py +3 -3
  36. rasa/builder/download.py +1 -8
  37. rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
  38. rasa/builder/guardrails/constants.py +3 -0
  39. rasa/builder/guardrails/models.py +45 -10
  40. rasa/builder/guardrails/policy_checker.py +324 -0
  41. rasa/builder/guardrails/utils.py +42 -276
  42. rasa/builder/jobs.py +33 -21
  43. rasa/builder/llm_service.py +32 -5
  44. rasa/builder/main.py +38 -62
  45. rasa/builder/models.py +8 -7
  46. rasa/builder/project_generator.py +149 -148
  47. rasa/builder/service.py +58 -40
  48. rasa/builder/template_cache.py +69 -0
  49. rasa/builder/training_service.py +84 -20
  50. rasa/builder/validation_service.py +1 -1
  51. rasa/cli/arguments/default_arguments.py +12 -0
  52. rasa/cli/arguments/run.py +2 -0
  53. rasa/cli/arguments/train.py +2 -0
  54. rasa/cli/data.py +10 -8
  55. rasa/cli/dialogue_understanding_test.py +10 -7
  56. rasa/cli/e2e_test.py +9 -6
  57. rasa/cli/evaluate.py +4 -2
  58. rasa/cli/export.py +5 -2
  59. rasa/cli/inspect.py +8 -4
  60. rasa/cli/interactive.py +5 -4
  61. rasa/cli/llm_fine_tuning.py +11 -6
  62. rasa/cli/project_templates/basic/README.md +23 -0
  63. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  64. rasa/cli/project_templates/basic/config.yml +6 -4
  65. rasa/cli/project_templates/basic/data/data.md +5 -6
  66. rasa/cli/project_templates/basic/domain/domain.md +7 -5
  67. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +1 -1
  68. rasa/cli/project_templates/basic/endpoints.yml +5 -1
  69. rasa/cli/project_templates/default/config.yml +4 -0
  70. rasa/cli/project_templates/default/endpoints.yml +4 -0
  71. rasa/cli/project_templates/finance/README.md +26 -0
  72. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  73. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  74. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  75. rasa/cli/project_templates/finance/actions/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
  76. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  77. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  78. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  79. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  80. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  81. rasa/cli/project_templates/finance/actions/db.py +117 -0
  82. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  83. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  84. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  85. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  86. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  87. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  88. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  89. rasa/cli/project_templates/finance/config.yml +8 -0
  90. rasa/cli/project_templates/finance/credentials.yml +7 -6
  91. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
  92. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  93. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  94. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  95. rasa/cli/project_templates/finance/data/cards/block_card.yml +37 -58
  96. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  97. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  98. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  99. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  100. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  101. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  102. rasa/cli/project_templates/finance/data/data.md +14 -0
  103. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  104. rasa/cli/project_templates/finance/data/general/goodbye.yml +1 -1
  105. rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
  106. rasa/cli/project_templates/finance/data/general/help.yml +2 -2
  107. rasa/cli/project_templates/finance/data/general/human_handoff.yml +2 -2
  108. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +1 -1
  109. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  110. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  111. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  112. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +29 -62
  113. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  114. rasa/cli/project_templates/finance/db/cards.json +18 -0
  115. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  116. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  117. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  118. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  119. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  120. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  121. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  122. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  123. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  124. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  125. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  126. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  127. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  128. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  129. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +9 -5
  130. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  131. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  132. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  133. rasa/cli/project_templates/finance/domain/cards/block_card.yml +33 -90
  134. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  135. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  136. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  137. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  138. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  139. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  140. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  141. rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
  142. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  143. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -2
  144. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
  145. rasa/cli/project_templates/finance/domain/general/goodbye.yml +6 -6
  146. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +10 -9
  147. rasa/cli/project_templates/finance/domain/general/welcome.yml +33 -2
  148. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  149. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  150. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  151. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +203 -61
  152. rasa/cli/project_templates/finance/endpoints.yml +8 -4
  153. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
  154. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/check_balance.yml +9 -0
  155. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/download_statements.yml +43 -0
  156. rasa/cli/project_templates/finance/tests/e2e_test_cases/cards/block_card.yml +55 -0
  157. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  158. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/feedback.yml +46 -0
  159. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/goodbye.yml +9 -0
  160. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/hello.yml +8 -0
  161. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  162. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/patterns.yml +22 -0
  163. rasa/cli/project_templates/finance/tests/e2e_test_cases/transfers/transfer_money.yml +56 -0
  164. rasa/cli/project_templates/telco/README.md +25 -0
  165. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  166. rasa/cli/project_templates/telco/config.yml +6 -4
  167. rasa/cli/project_templates/telco/data/data.md +11 -0
  168. rasa/cli/project_templates/telco/data/general/human_handoff.yml +1 -1
  169. rasa/cli/project_templates/telco/docs/docs.md +3 -0
  170. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  171. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +3 -6
  172. rasa/cli/project_templates/telco/endpoints.yml +5 -1
  173. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +1 -1
  174. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  175. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  176. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  177. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  178. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  179. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  180. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  181. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  182. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  183. rasa/cli/run.py +12 -10
  184. rasa/cli/scaffold.py +4 -4
  185. rasa/cli/shell.py +9 -5
  186. rasa/cli/studio/studio.py +1 -1
  187. rasa/cli/test.py +34 -14
  188. rasa/cli/train.py +41 -28
  189. rasa/cli/utils.py +1 -393
  190. rasa/cli/validation/__init__.py +0 -0
  191. rasa/cli/validation/bot_config.py +223 -0
  192. rasa/cli/validation/config_path_validation.py +257 -0
  193. rasa/cli/x.py +8 -4
  194. rasa/constants.py +7 -1
  195. rasa/core/actions/action.py +51 -10
  196. rasa/core/actions/action_run_slot_rejections.py +1 -1
  197. rasa/core/actions/direct_custom_actions_executor.py +9 -2
  198. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  199. rasa/core/agent.py +19 -2
  200. rasa/core/available_agents.py +229 -0
  201. rasa/core/brokers/broker.py +1 -1
  202. rasa/core/brokers/kafka.py +52 -8
  203. rasa/core/channels/__init__.py +82 -35
  204. rasa/core/channels/development_inspector.py +4 -24
  205. rasa/core/channels/hangouts.py +2 -2
  206. rasa/core/channels/inspector/README.md +25 -13
  207. rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-6177260a.js} +1 -1
  208. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  209. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  210. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  211. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  212. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  213. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  214. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-088372e2.js} +1 -1
  215. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-58676240.js} +1 -1
  216. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  217. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  218. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  219. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  220. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  221. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  222. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  223. rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-0a6f8466.js} +1 -1
  224. rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-7610671a.js} +1 -1
  225. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  226. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  227. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  228. rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-e7fbc2bf.js} +1 -1
  229. rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-a8aa457c.js} +1 -1
  230. rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-3351e0d2.js} +1 -1
  231. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  232. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  233. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  234. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  235. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  236. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  237. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-0e770395.js} +1 -1
  238. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  239. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  240. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-884a8b5b.js} +1 -1
  241. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-dc097813.js} +1 -1
  242. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  243. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  244. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  245. rasa/core/channels/inspector/dist/index.html +1 -1
  246. rasa/core/channels/inspector/package.json +18 -18
  247. rasa/core/channels/inspector/src/App.tsx +34 -35
  248. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  249. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  250. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  251. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +9 -1
  252. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  253. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +20 -3
  254. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  255. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  256. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  257. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  258. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  259. rasa/core/channels/inspector/src/types.ts +53 -7
  260. rasa/core/channels/inspector/yarn.lock +336 -189
  261. rasa/core/channels/studio_chat.py +29 -47
  262. rasa/core/channels/telegram.py +4 -9
  263. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  264. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  265. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  266. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  267. rasa/core/channels/voice_stream/browser_audio.py +55 -3
  268. rasa/core/channels/voice_stream/genesys.py +3 -2
  269. rasa/core/channels/voice_stream/jambonz.py +9 -1
  270. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  271. rasa/core/channels/voice_stream/twilio_media_streams.py +21 -1
  272. rasa/core/channels/voice_stream/voice_channel.py +64 -0
  273. rasa/core/concurrent_lock_store.py +66 -16
  274. rasa/core/config/__init__.py +0 -0
  275. rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
  276. rasa/core/config/configuration.py +260 -0
  277. rasa/core/config/credentials.py +19 -0
  278. rasa/core/config/message_procesing_config.py +34 -0
  279. rasa/core/constants.py +11 -0
  280. rasa/core/iam_credentials_providers/__init__.py +0 -0
  281. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +226 -0
  282. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +90 -0
  283. rasa/core/lock_store.py +46 -10
  284. rasa/core/nlg/generator.py +1 -1
  285. rasa/core/policies/enterprise_search_policy.py +5 -3
  286. rasa/core/policies/flow_policy.py +4 -4
  287. rasa/core/policies/flows/agent_executor.py +632 -0
  288. rasa/core/policies/flows/flow_executor.py +137 -76
  289. rasa/core/policies/flows/mcp_tool_executor.py +298 -0
  290. rasa/core/policies/intentless_policy.py +1 -1
  291. rasa/core/policies/ted_policy.py +20 -12
  292. rasa/core/policies/unexpected_intent_policy.py +6 -0
  293. rasa/core/processor.py +100 -44
  294. rasa/core/redis_connection_factory.py +469 -0
  295. rasa/core/run.py +37 -8
  296. rasa/core/test.py +4 -0
  297. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  298. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  299. rasa/core/tracker_stores/tracker_store.py +3 -7
  300. rasa/core/train.py +1 -1
  301. rasa/core/training/interactive.py +20 -18
  302. rasa/core/training/story_conflict.py +5 -5
  303. rasa/core/utils.py +22 -23
  304. rasa/dialogue_understanding/commands/__init__.py +8 -0
  305. rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
  306. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  307. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  308. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  309. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  310. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  311. rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
  312. rasa/dialogue_understanding/commands/utils.py +124 -2
  313. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  314. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  315. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  316. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  317. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  318. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  319. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  320. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  321. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  322. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  323. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  324. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  325. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  326. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  327. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
  328. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  329. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  330. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  331. rasa/dialogue_understanding/stack/utils.py +57 -3
  332. rasa/dialogue_understanding/utils.py +24 -4
  333. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  334. rasa/e2e_test/e2e_test_runner.py +13 -3
  335. rasa/engine/caching.py +2 -2
  336. rasa/engine/constants.py +1 -1
  337. rasa/engine/graph.py +5 -1
  338. rasa/engine/loader.py +12 -0
  339. rasa/engine/recipes/default_components.py +138 -49
  340. rasa/engine/recipes/default_recipe.py +108 -11
  341. rasa/engine/runner/dask.py +8 -5
  342. rasa/engine/storage/local_model_storage.py +41 -4
  343. rasa/engine/validation.py +19 -6
  344. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  345. rasa/hooks.py +5 -5
  346. rasa/llm_fine_tuning/utils.py +2 -2
  347. rasa/model_manager/socket_bridge.py +1 -2
  348. rasa/model_manager/warm_rasa_process.py +13 -3
  349. rasa/model_training.py +60 -47
  350. rasa/nlu/classifiers/diet_classifier.py +198 -98
  351. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  352. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  353. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  354. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  355. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  356. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  357. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  358. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  359. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  360. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  361. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  362. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  363. rasa/nlu/selectors/response_selector.py +10 -2
  364. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  365. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  366. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  367. rasa/nlu/utils/mitie_utils.py +3 -0
  368. rasa/nlu/utils/spacy_utils.py +3 -2
  369. rasa/plugin.py +8 -8
  370. rasa/privacy/privacy_manager.py +12 -3
  371. rasa/server.py +15 -3
  372. rasa/shared/agents/__init__.py +0 -0
  373. rasa/shared/agents/auth/__init__.py +0 -0
  374. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  375. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  376. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  377. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  378. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  379. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  380. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
  381. rasa/shared/agents/auth/constants.py +12 -0
  382. rasa/shared/agents/auth/types.py +12 -0
  383. rasa/shared/agents/utils.py +35 -0
  384. rasa/shared/constants.py +8 -0
  385. rasa/shared/core/constants.py +17 -1
  386. rasa/shared/core/domain.py +0 -7
  387. rasa/shared/core/events.py +329 -0
  388. rasa/shared/core/flows/constants.py +5 -0
  389. rasa/shared/core/flows/flow.py +1 -1
  390. rasa/shared/core/flows/flows_list.py +21 -5
  391. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  392. rasa/shared/core/flows/steps/call.py +49 -5
  393. rasa/shared/core/flows/steps/collect.py +98 -13
  394. rasa/shared/core/flows/validation.py +372 -8
  395. rasa/shared/core/flows/yaml_flows_io.py +3 -2
  396. rasa/shared/core/slots.py +2 -2
  397. rasa/shared/core/trackers.py +5 -2
  398. rasa/shared/exceptions.py +16 -0
  399. rasa/shared/importers/rasa.py +1 -1
  400. rasa/shared/importers/utils.py +9 -3
  401. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  402. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  403. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  404. rasa/shared/providers/llm/llm_client.py +7 -3
  405. rasa/shared/providers/llm/llm_response.py +66 -0
  406. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  407. rasa/shared/utils/common.py +24 -0
  408. rasa/shared/utils/health_check/health_check.py +7 -3
  409. rasa/shared/utils/llm.py +39 -16
  410. rasa/shared/utils/mcp/__init__.py +0 -0
  411. rasa/shared/utils/mcp/server_connection.py +247 -0
  412. rasa/shared/utils/mcp/utils.py +20 -0
  413. rasa/shared/utils/schemas/events.py +42 -0
  414. rasa/shared/utils/yaml.py +3 -1
  415. rasa/studio/pull/pull.py +3 -2
  416. rasa/studio/train.py +8 -7
  417. rasa/studio/upload.py +3 -6
  418. rasa/telemetry.py +69 -5
  419. rasa/tracing/config.py +45 -12
  420. rasa/tracing/constants.py +14 -0
  421. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  422. rasa/tracing/instrumentation/instrumentation.py +626 -21
  423. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  424. rasa/tracing/instrumentation/metrics.py +32 -0
  425. rasa/tracing/metric_instrument_provider.py +68 -0
  426. rasa/utils/common.py +92 -1
  427. rasa/utils/endpoints.py +11 -2
  428. rasa/utils/log_utils.py +96 -5
  429. rasa/utils/ml_utils.py +1 -1
  430. rasa/utils/pypred.py +38 -0
  431. rasa/utils/tensorflow/__init__.py +7 -0
  432. rasa/utils/tensorflow/callback.py +136 -101
  433. rasa/utils/tensorflow/crf.py +1 -1
  434. rasa/utils/tensorflow/data_generator.py +21 -8
  435. rasa/utils/tensorflow/layers.py +21 -11
  436. rasa/utils/tensorflow/metrics.py +7 -3
  437. rasa/utils/tensorflow/models.py +56 -8
  438. rasa/utils/tensorflow/rasa_layers.py +8 -6
  439. rasa/utils/tensorflow/transformer.py +2 -3
  440. rasa/utils/train_utils.py +54 -24
  441. rasa/validator.py +17 -13
  442. rasa/version.py +1 -1
  443. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/METADATA +59 -51
  444. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/RECORD +452 -428
  445. rasa/builder/scrape_rasa_docs.py +0 -97
  446. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  447. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  448. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  449. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  450. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  451. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  452. rasa/cli/project_templates/finance/actions/database.py +0 -277
  453. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  454. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  455. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  456. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  457. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  458. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  459. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  460. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  461. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  462. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  463. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  464. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  465. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  466. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  467. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  468. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  469. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  470. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  471. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  472. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  473. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  474. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  475. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  476. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  477. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  478. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  479. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  480. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  481. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  482. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  483. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  484. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  485. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  486. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  487. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  488. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  489. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  490. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  491. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  492. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  493. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  494. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  495. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  496. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  497. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  498. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  499. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  500. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  501. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  502. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  503. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  504. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  505. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  506. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  507. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  508. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  509. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  510. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  511. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  512. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  513. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  514. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  515. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  516. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  517. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  518. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  519. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  520. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  521. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  522. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  523. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  524. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  525. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  526. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  527. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  528. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  529. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  530. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  531. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  532. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  533. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  534. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  535. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  536. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  537. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  538. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  539. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  540. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  541. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  542. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  543. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  544. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  545. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  546. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  547. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  548. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  549. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  550. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  551. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  552. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  553. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  554. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  555. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  556. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  557. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  558. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  559. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  560. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  561. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  562. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  563. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  564. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  565. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
  566. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  567. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  568. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  569. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  570. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  571. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  572. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  573. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
  574. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
  575. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
  576. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
  577. /rasa/cli/project_templates/telco/domain/billing/{domain_undertand_bill.yml → understand_bill.yml} +0 -0
  578. /rasa/cli/project_templates/telco/domain/network/{domain_reboot_router.yml → reboot_router.yml} +0 -0
  579. /rasa/cli/project_templates/telco/domain/network/{domain_reset_router.yml → reset_router.yml} +0 -0
  580. /rasa/cli/project_templates/telco/domain/network/{domain_run_speed_test.yml → run_speed_test.yml} +0 -0
  581. /rasa/cli/project_templates/telco/domain/network/{domain_solve_internet_issue.yml → solve_internet_issue.yml} +0 -0
  582. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/NOTICE +0 -0
  583. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/WHEEL +0 -0
  584. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,632 @@
1
+ from __future__ import annotations
2
+
3
+ import asyncio
4
+ from typing import Any, Dict, List, Optional, cast
5
+
6
+ import structlog
7
+
8
+ from rasa.agents.agent_manager import AgentManager
9
+ from rasa.agents.constants import (
10
+ A2A_AGENT_CONTEXT_ID_KEY,
11
+ AGENT_METADATA_AGENT_RESPONSE_KEY,
12
+ AGENT_METADATA_EXIT_IF_KEY,
13
+ AGENT_METADATA_STRUCTURED_RESULTS_KEY,
14
+ MAX_AGENT_RETRY_DELAY_SECONDS,
15
+ )
16
+ from rasa.agents.core.types import AgentStatus, ProtocolType
17
+ from rasa.agents.schemas import AgentInput, AgentOutput
18
+ from rasa.agents.schemas.agent_input import AgentInputSlot
19
+ from rasa.core.available_agents import AvailableAgents
20
+ from rasa.core.policies.flows.flow_step_result import (
21
+ ContinueFlowWithNextStep,
22
+ FlowActionPrediction,
23
+ FlowStepResult,
24
+ PauseFlowReturnPrediction,
25
+ )
26
+ from rasa.core.utils import get_slot_names_from_exit_conditions
27
+ from rasa.dialogue_understanding.patterns.internal_error import (
28
+ InternalErrorPatternFlowStackFrame,
29
+ )
30
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
31
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
32
+ AgentStackFrame,
33
+ AgentState,
34
+ )
35
+ from rasa.shared.agents.utils import get_protocol_type
36
+ from rasa.shared.core.constants import (
37
+ ACTION_AGENT_REQUEST_USER_INPUT_NAME,
38
+ ACTION_METADATA_MESSAGE_KEY,
39
+ ACTION_METADATA_TEXT_KEY,
40
+ ACTION_SEND_TEXT_NAME,
41
+ SLOTS_EXCLUDED_FOR_AGENT,
42
+ )
43
+ from rasa.shared.core.events import (
44
+ AgentCancelled,
45
+ AgentCompleted,
46
+ AgentResumed,
47
+ AgentStarted,
48
+ Event,
49
+ SlotSet,
50
+ )
51
+ from rasa.shared.core.flows.steps import (
52
+ CallFlowStep,
53
+ )
54
+ from rasa.shared.core.slots import CategoricalSlot, Slot
55
+ from rasa.shared.core.trackers import DialogueStateTracker
56
+ from rasa.shared.utils.llm import tracker_as_readable_transcript
57
+
58
+ structlogger = structlog.get_logger()
59
+
60
+ MAX_AGENT_RETRIES = 3
61
+
62
+
63
+ def remove_agent_stack_frame(stack: DialogueStack, agent_id: str) -> None:
64
+ """Finishes the agentic loop by popping the agent stack frame from the
65
+ provided `stack`. The `tracker.stack` is NOT modified.
66
+ """
67
+ agent_stack_frame = stack.find_agent_stack_frame_by_agent(agent_id)
68
+ if not agent_stack_frame:
69
+ return
70
+
71
+ while removed_frame := stack.pop():
72
+ structlogger.debug(
73
+ "flow_executor.remove_agent_stack_frame",
74
+ removed_frame=removed_frame,
75
+ )
76
+ if removed_frame == agent_stack_frame:
77
+ break
78
+
79
+
80
+ async def run_agent(
81
+ initial_events: List[Event],
82
+ stack: DialogueStack,
83
+ step: CallFlowStep,
84
+ tracker: DialogueStateTracker,
85
+ slots: List[Slot],
86
+ ) -> FlowStepResult:
87
+ """Run an agent call step."""
88
+ structlogger.debug(
89
+ "flow.step.run_agent",
90
+ agent_id=step.call,
91
+ step_id=step.id,
92
+ flow_id=step.flow_id,
93
+ event_info=f"Agent {step.call} started",
94
+ highlight=True,
95
+ )
96
+
97
+ final_events = initial_events
98
+ agent_stack_frame = tracker.stack.find_agent_stack_frame_by_agent(
99
+ agent_id=step.call
100
+ )
101
+
102
+ if (
103
+ agent_stack_frame
104
+ and agent_stack_frame == stack.top()
105
+ and agent_stack_frame.state == AgentState.INTERRUPTED
106
+ ):
107
+ # if an agent is interrupted, repeat the last message from the
108
+ # agent and wait for user input
109
+ return _handle_resume_interrupted_agent(
110
+ agent_stack_frame, final_events, stack, step, tracker
111
+ )
112
+
113
+ # Reset the slots covered by the exit_if
114
+ # Code smell: this is a temporary fix and will be addressed in ENG-2148
115
+ if (
116
+ step.exit_if
117
+ and agent_stack_frame
118
+ and agent_stack_frame.frame_id == f"restart_agent_{step.call}"
119
+ ):
120
+ # when restarting an agent, we need to reset the slots covered by the
121
+ # exit_if condition so that the agent can run again.
122
+ _reset_slots_covered_by_exit_if(step.exit_if, tracker)
123
+
124
+ # generate the agent input
125
+ agent_input = _prepare_agent_input(agent_stack_frame, step, tracker, slots)
126
+ structlogger.debug(
127
+ "flow.step.run_agent.agent_input",
128
+ agent_name=step.call,
129
+ step_id=step.id,
130
+ flow_id=step.flow_id,
131
+ agent_input=agent_input.model_dump(),
132
+ json_formatting=["agent_input"],
133
+ )
134
+
135
+ # add the AgentStarted event to the list of final events
136
+ final_events.append(AgentStarted(step.call, step.flow_id))
137
+
138
+ # send the input to the agent and wait for a response
139
+ protocol_type = get_protocol_type(step, AvailableAgents.get_agent_config(step.call))
140
+ output: AgentOutput = await _call_agent_with_retry(
141
+ agent_name=step.call,
142
+ protocol_type=protocol_type,
143
+ agent_input=agent_input,
144
+ max_retries=MAX_AGENT_RETRIES,
145
+ )
146
+
147
+ structlogger.debug(
148
+ "flow.step.run_agent.agent_response",
149
+ agent_name=step.call,
150
+ step_id=step.id,
151
+ flow_id=step.flow_id,
152
+ agent_response=output.model_dump(),
153
+ json_formatting=["agent_response"],
154
+ event_info="Agent Output",
155
+ )
156
+ structlogger.debug(
157
+ "flow.step.run_agent.agent_finished",
158
+ agent_name=step.call,
159
+ flow_id=step.flow_id,
160
+ agent_state=str(output.status),
161
+ agent_response_message=output.response_message,
162
+ highlight=True,
163
+ event_info=f"Agent {step.call} finished",
164
+ )
165
+
166
+ # add the set slot events returned by the agent to the list of final events
167
+ if output.events:
168
+ final_events.extend(output.events)
169
+
170
+ # handle the agent output based on the agent status
171
+ if output.status == AgentStatus.INPUT_REQUIRED:
172
+ return _handle_agent_input_required(output, final_events, stack, step)
173
+ elif output.status == AgentStatus.COMPLETED:
174
+ return _handle_agent_completed(output, final_events, stack, step)
175
+ elif output.status == AgentStatus.FATAL_ERROR:
176
+ return _handle_agent_fatal_error(output, final_events, stack, step)
177
+ else:
178
+ return _handle_agent_unknown_status(output, final_events, stack, step)
179
+
180
+
181
+ async def _call_agent_with_retry(
182
+ agent_name: str,
183
+ protocol_type: ProtocolType,
184
+ agent_input: AgentInput,
185
+ max_retries: int,
186
+ ) -> AgentOutput:
187
+ """Call an agent with retries in case of recoverable errors."""
188
+ for attempt in range(max_retries):
189
+ if attempt > 0:
190
+ structlogger.debug(
191
+ "flow_executor.call_agent_with_retry.retrying",
192
+ agent_name=agent_name,
193
+ attempt=attempt + 1,
194
+ num_retries=max_retries,
195
+ )
196
+ try:
197
+ agent_response: AgentOutput = await AgentManager().run_agent(
198
+ agent_name=agent_name, protocol_type=protocol_type, context=agent_input
199
+ )
200
+ except Exception as e:
201
+ # We don't have a vaild agent response at this time to act based
202
+ # on the agent status, so we return a fatal error.
203
+ structlogger.error(
204
+ "flow_executor.call_agent_with_retry.exception",
205
+ agent_name=agent_name,
206
+ error_message=str(e),
207
+ )
208
+ return AgentOutput(
209
+ id=agent_name,
210
+ status=AgentStatus.FATAL_ERROR,
211
+ error_message=str(e),
212
+ )
213
+
214
+ if agent_response.status != AgentStatus.RECOVERABLE_ERROR:
215
+ return agent_response
216
+
217
+ structlogger.warning(
218
+ "flow_executor.call_agent_with_retry.recoverable_error",
219
+ agent_name=agent_name,
220
+ attempt=attempt + 1,
221
+ num_retries=max_retries,
222
+ error_message=agent_response.error_message,
223
+ )
224
+ if attempt < max_retries - 1:
225
+ # exponential backoff - wait longer with each retry
226
+ # 1 second, 2 seconds, 4 seconds, etc.
227
+ await asyncio.sleep(min(2**attempt, MAX_AGENT_RETRY_DELAY_SECONDS))
228
+
229
+ # we exhausted all retries, return fatal error
230
+ structlogger.warning(
231
+ "flow_executor.call_agent_with_retry.exhausted_retries",
232
+ agent_name=agent_name,
233
+ num_retries=max_retries,
234
+ )
235
+ return AgentOutput(
236
+ id=agent_name,
237
+ status=AgentStatus.FATAL_ERROR,
238
+ error_message="Exhausted all retries for agent call.",
239
+ )
240
+
241
+
242
+ ################################################################################
243
+ # Handle resume interrupted agent
244
+ ################################################################################
245
+
246
+
247
+ def _handle_resume_interrupted_agent(
248
+ agent_stack_frame: AgentStackFrame,
249
+ final_events: List[Event],
250
+ stack: DialogueStack,
251
+ step: CallFlowStep,
252
+ tracker: DialogueStateTracker,
253
+ ) -> FlowStepResult:
254
+ """Handle resuming an interrupted agent.
255
+
256
+ Args:
257
+ agent_stack_frame: The interrupted agent stack frame
258
+ final_events: List of events to be added to the final result
259
+ stack: The dialogue stack
260
+ step: The flow step that called the agent
261
+ tracker: The dialogue state tracker
262
+
263
+ Returns:
264
+ FlowStepResult indicating to pause for user input
265
+ """
266
+ structlogger.debug(
267
+ "flow.step.run_agent.resume_interrupted_agent",
268
+ agent_id=step.call,
269
+ step_id=step.id,
270
+ flow_id=step.flow_id,
271
+ )
272
+ # The agent was previously interrupted when waiting for user input.
273
+ # Now we're back to the agent execution step and need to output the last message
274
+ # from the agent (user input request) again and wait for user input
275
+ cast(AgentStackFrame, stack.top()).state = AgentState.WAITING_FOR_INPUT
276
+ tracker.update_stack(stack)
277
+ utterance = (
278
+ agent_stack_frame.metadata.get(AGENT_METADATA_AGENT_RESPONSE_KEY, "")
279
+ if agent_stack_frame.metadata
280
+ else ""
281
+ )
282
+ final_events.append(AgentResumed(agent_id=step.call, flow_id=step.flow_id))
283
+ return PauseFlowReturnPrediction(
284
+ _create_agent_request_user_input_prediction(utterance, final_events)
285
+ )
286
+
287
+
288
+ ################################################################################
289
+ # Handle agent output
290
+ ################################################################################
291
+
292
+
293
+ def _handle_agent_unknown_status(
294
+ output: AgentOutput,
295
+ final_events: List[Event],
296
+ stack: DialogueStack,
297
+ step: CallFlowStep,
298
+ ) -> FlowStepResult:
299
+ """Handle unknown agent status.
300
+
301
+ Args:
302
+ output: The agent output with unknown status
303
+ final_events: List of events to be added to the final result
304
+ stack: The dialogue stack
305
+ step: The flow step that called the agent
306
+
307
+ Returns:
308
+ FlowStepResult indicating to continue with internal error pattern
309
+ """
310
+ output.metadata = output.metadata or {}
311
+ _update_agent_events(final_events, output.metadata)
312
+ structlogger.error(
313
+ "flow.step.run_agent.unknown_status",
314
+ agent_name=step.call,
315
+ step_id=step.id,
316
+ flow_id=step.flow_id,
317
+ status=output.status,
318
+ )
319
+ remove_agent_stack_frame(stack, step.call)
320
+ final_events.append(AgentCancelled(agent_id=step.call, flow_id=step.flow_id))
321
+ stack.push(InternalErrorPatternFlowStackFrame())
322
+ return ContinueFlowWithNextStep(events=final_events)
323
+
324
+
325
+ def _handle_agent_input_required(
326
+ output: AgentOutput,
327
+ final_events: List[Event],
328
+ stack: DialogueStack,
329
+ step: CallFlowStep,
330
+ ) -> FlowStepResult:
331
+ """Handle agent that requires user input.
332
+
333
+ Args:
334
+ output: The agent output containing input request information
335
+ final_events: List of events to be added to the final result
336
+ stack: The dialogue stack
337
+ step: The flow step that called the agent
338
+
339
+ Returns:
340
+ FlowStepResult indicating to pause for user input
341
+ """
342
+ output.metadata = output.metadata or {}
343
+ output.metadata[AGENT_METADATA_AGENT_RESPONSE_KEY] = output.response_message or ""
344
+ output.metadata[AGENT_METADATA_STRUCTURED_RESULTS_KEY] = (
345
+ output.structured_results or []
346
+ )
347
+ _update_agent_events(final_events, output.metadata)
348
+
349
+ top_stack_frame = stack.top()
350
+ # update the agent stack frame if it is already on the stack
351
+ # otherwise push a new one
352
+ if isinstance(top_stack_frame, AgentStackFrame):
353
+ top_stack_frame.state = AgentState.WAITING_FOR_INPUT
354
+ top_stack_frame.metadata = output.metadata
355
+ top_stack_frame.step_id = step.id
356
+ top_stack_frame.agent_id = step.call
357
+ top_stack_frame.flow_id = step.flow_id
358
+ else:
359
+ stack.push(
360
+ AgentStackFrame(
361
+ flow_id=step.flow_id,
362
+ agent_id=step.call,
363
+ state=AgentState.WAITING_FOR_INPUT,
364
+ step_id=step.id,
365
+ metadata=output.metadata,
366
+ )
367
+ )
368
+
369
+ action_prediction = _create_agent_request_user_input_prediction(
370
+ output.response_message, final_events
371
+ )
372
+ return PauseFlowReturnPrediction(action_prediction)
373
+
374
+
375
+ def _handle_agent_completed(
376
+ output: AgentOutput,
377
+ final_events: List[Event],
378
+ stack: DialogueStack,
379
+ step: CallFlowStep,
380
+ ) -> FlowStepResult:
381
+ """Handle completed agent execution.
382
+
383
+ Args:
384
+ output: The agent output containing completion information
385
+ final_events: List of events to be added to the final result
386
+ stack: The dialogue stack
387
+ step: The flow step that called the agent
388
+
389
+ Returns:
390
+ FlowStepResult indicating to continue with next step or pause for response
391
+ """
392
+ output.metadata = output.metadata or {}
393
+ _update_agent_events(final_events, output.metadata)
394
+ structlogger.debug(
395
+ "flow.step.run_agent.completed",
396
+ agent_name=step.call,
397
+ step_id=step.id,
398
+ flow_id=step.flow_id,
399
+ )
400
+ remove_agent_stack_frame(stack, step.call)
401
+ agent_completed_event = AgentCompleted(agent_id=step.call, flow_id=step.flow_id)
402
+ final_events.append(agent_completed_event)
403
+ if output.response_message:
404
+ # for open-ended agents we want to utter the last agent message
405
+ return PauseFlowReturnPrediction(
406
+ _create_send_text_prediction(output.response_message, final_events)
407
+ )
408
+ else:
409
+ return ContinueFlowWithNextStep(events=final_events)
410
+
411
+
412
+ def _handle_agent_fatal_error(
413
+ output: AgentOutput,
414
+ final_events: List[Event],
415
+ stack: DialogueStack,
416
+ step: CallFlowStep,
417
+ ) -> FlowStepResult:
418
+ """Handle fatal error from agent execution.
419
+
420
+ Args:
421
+ output: The agent output containing error information
422
+ final_events: List of events to be added to the final result
423
+ stack: The dialogue stack
424
+ step: The flow step that called the agent
425
+
426
+ Returns:
427
+ FlowStepResult indicating to continue with internal error pattern
428
+ """
429
+ output.metadata = output.metadata or {}
430
+ _update_agent_events(final_events, output.metadata)
431
+ # the agent failed, trigger pattern_internal_error
432
+ structlogger.error(
433
+ "flow.step.run_agent.fatal_error",
434
+ agent_name=step.call,
435
+ step_id=step.id,
436
+ flow_id=step.flow_id,
437
+ error_message=output.error_message,
438
+ )
439
+ remove_agent_stack_frame(stack, step.call)
440
+ final_events.append(
441
+ AgentCancelled(
442
+ agent_id=step.call, flow_id=step.flow_id, reason=output.error_message
443
+ )
444
+ )
445
+ stack.push(InternalErrorPatternFlowStackFrame())
446
+ return ContinueFlowWithNextStep(events=final_events)
447
+
448
+
449
+ ################################################################################
450
+ # Create predictions
451
+ ################################################################################
452
+
453
+
454
+ def _create_action_prediction(
455
+ action_name: str, message: Optional[str], events: Optional[List[Event]]
456
+ ) -> FlowActionPrediction:
457
+ """Create a prediction for an action with a text message."""
458
+ action_metadata = {
459
+ ACTION_METADATA_MESSAGE_KEY: {
460
+ ACTION_METADATA_TEXT_KEY: message,
461
+ }
462
+ }
463
+ return FlowActionPrediction(
464
+ action_name,
465
+ 1.0,
466
+ events=events if events else [],
467
+ metadata=action_metadata,
468
+ )
469
+
470
+
471
+ def _create_agent_request_user_input_prediction(
472
+ message: Optional[str], events: Optional[List[Event]]
473
+ ) -> FlowActionPrediction:
474
+ """Create a prediction for requesting user input from the agent
475
+ and waiting for it.
476
+ """
477
+ return _create_action_prediction(
478
+ ACTION_AGENT_REQUEST_USER_INPUT_NAME, message, events
479
+ )
480
+
481
+
482
+ def _create_send_text_prediction(
483
+ message: Optional[str], events: Optional[List[Event]]
484
+ ) -> FlowActionPrediction:
485
+ """Create a prediction for sending a text message to the user."""
486
+ return _create_action_prediction(ACTION_SEND_TEXT_NAME, message, events)
487
+
488
+
489
+ ################################################################################
490
+ # Prepare agent input
491
+ ################################################################################
492
+
493
+
494
+ def _prepare_agent_input(
495
+ agent_stack_frame: Optional[AgentStackFrame],
496
+ step: CallFlowStep,
497
+ tracker: DialogueStateTracker,
498
+ slots: List[Slot],
499
+ ) -> AgentInput:
500
+ """Prepare the agent input data.
501
+
502
+ Args:
503
+ agent_stack_frame: The agent stack frame if it exists
504
+ step: The flow step that called the agent
505
+ tracker: The dialogue state tracker
506
+ slots: List of slot definitions
507
+
508
+ Returns:
509
+ AgentInput object ready for agent execution
510
+ """
511
+ agent_input_metadata = (
512
+ agent_stack_frame.metadata
513
+ if agent_stack_frame and agent_stack_frame.metadata
514
+ else {}
515
+ )
516
+ _update_agent_input_metadata_with_events(
517
+ agent_input_metadata, step.call, step.flow_id, tracker
518
+ )
519
+
520
+ if step.exit_if:
521
+ agent_input_metadata[AGENT_METADATA_EXIT_IF_KEY] = step.exit_if
522
+
523
+ return AgentInput(
524
+ id=step.call,
525
+ user_message=tracker.latest_message.text or ""
526
+ if tracker.latest_message
527
+ else "",
528
+ slots=_prepare_slots_for_agent(
529
+ tracker.current_slot_values(), slots, step.exit_if
530
+ ),
531
+ conversation_history=tracker_as_readable_transcript(tracker),
532
+ events=tracker.current_state().get("events") or [],
533
+ metadata=agent_input_metadata,
534
+ )
535
+
536
+
537
+ def _prepare_slots_for_agent(
538
+ slot_values: Dict[str, Any],
539
+ slot_definitions: List[Slot],
540
+ exit_if: Optional[List[str]],
541
+ ) -> List[AgentInputSlot]:
542
+ """Prepare the slots for the agent.
543
+
544
+ Filter out slots that should not be forwarded to agents.
545
+ Add the slot type and allowed values to the slot dictionary.
546
+
547
+ Filter out slots that are None.
548
+ Keep slots that are part of the exit_if conditions.
549
+
550
+ Args:
551
+ slot_values: The full slot dictionary from the tracker.
552
+ slot_definitions: The slot definitions from the domain.
553
+
554
+ Returns:
555
+ A list of slots containing the name, current value, type, and allowed values.
556
+ """
557
+
558
+ def _get_slot_definition(slot_name: str) -> Optional[Slot]:
559
+ for slot in slot_definitions:
560
+ if slot.name == slot_name:
561
+ return slot
562
+ return None
563
+
564
+ exit_if_slot_names = []
565
+ if exit_if:
566
+ exit_if_slot_names = get_slot_names_from_exit_conditions(exit_if)
567
+
568
+ filtered_slots: List[AgentInputSlot] = []
569
+ for key, value in slot_values.items():
570
+ if key in SLOTS_EXCLUDED_FOR_AGENT:
571
+ continue
572
+ if value is None and key not in exit_if_slot_names:
573
+ continue
574
+ slot_definition = _get_slot_definition(key)
575
+ if slot_definition:
576
+ filtered_slots.append(
577
+ AgentInputSlot(
578
+ name=key,
579
+ value=value,
580
+ type=slot_definition.type_name if slot_definition else "any",
581
+ allowed_values=slot_definition.values
582
+ if isinstance(slot_definition, CategoricalSlot)
583
+ else None,
584
+ )
585
+ )
586
+
587
+ return filtered_slots
588
+
589
+
590
+ def _update_agent_input_metadata_with_events(
591
+ metadata: Dict[str, Any], agent_id: str, flow_id: str, tracker: DialogueStateTracker
592
+ ) -> None:
593
+ """Update the agent input metadata with the events."""
594
+ agent_started_events = [
595
+ event
596
+ for event in tracker.events
597
+ if type(event) == AgentStarted
598
+ and event.agent_id == agent_id
599
+ and event.flow_id == flow_id
600
+ ]
601
+ if agent_started_events:
602
+ # If we have context ID from the previous agent run, we want to
603
+ # include it in the metadata so that the agent can continue the same
604
+ # context.
605
+ agent_started_event = agent_started_events[-1]
606
+ if agent_started_event.context_id:
607
+ metadata[A2A_AGENT_CONTEXT_ID_KEY] = agent_started_event.context_id
608
+
609
+
610
+ ################################################################################
611
+ # Other helper methods
612
+ ################################################################################
613
+
614
+
615
+ def _update_agent_events(events: List[Event], metadata: Dict[str, Any]) -> None:
616
+ """Update the agent events based on the agent output metadata if needed."""
617
+ if A2A_AGENT_CONTEXT_ID_KEY in metadata:
618
+ # If the context ID is present, we need to store it in the AgentStarted
619
+ # event, so that it can be re-used later in case the agent is restarted.
620
+ for event in events:
621
+ if isinstance(event, AgentStarted):
622
+ event.context_id = metadata[A2A_AGENT_CONTEXT_ID_KEY]
623
+
624
+
625
+ def _reset_slots_covered_by_exit_if(
626
+ exit_conditions: List[str], tracker: DialogueStateTracker
627
+ ) -> None:
628
+ """Reset the slots covered by the exit_if condition."""
629
+ reset_slot_names = get_slot_names_from_exit_conditions(exit_conditions)
630
+ for slot_name in reset_slot_names:
631
+ if tracker.slots.get(slot_name) is not None:
632
+ tracker.update(SlotSet(slot_name, None))