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
@@ -16,6 +16,7 @@ from typing import (
16
16
  Text,
17
17
  Type,
18
18
  TypeVar,
19
+ cast,
19
20
  )
20
21
 
21
22
  from multidict import MultiDict
@@ -24,6 +25,9 @@ from opentelemetry.sdk.trace import TracerProvider
24
25
  from opentelemetry.trace import SpanKind, Tracer
25
26
  from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
26
27
 
28
+ from rasa.agents.core.agent_protocol import AgentProtocol
29
+ from rasa.agents.protocol.mcp.mcp_base_agent import MCPBaseAgent
30
+ from rasa.agents.schemas import AgentInput, AgentOutput, AgentToolSchema
27
31
  from rasa.core.actions.action import Action, CustomActionExecutor, RemoteAction
28
32
  from rasa.core.actions.custom_action_executor import RetryCustomActionExecutor
29
33
  from rasa.core.actions.grpc_custom_action_executor import GRPCCustomActionExecutor
@@ -49,14 +53,27 @@ from rasa.dialogue_understanding.generator import (
49
53
  )
50
54
  from rasa.dialogue_understanding.generator.flow_retrieval import FlowRetrieval
51
55
  from rasa.dialogue_understanding.generator.nlu_command_adapter import NLUCommandAdapter
56
+ from rasa.dialogue_understanding.patterns.internal_error import (
57
+ InternalErrorPatternFlowStackFrame,
58
+ )
59
+ from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
52
60
  from rasa.engine.graph import GraphNode
53
61
  from rasa.engine.training.graph_trainer import GraphTrainer
62
+ from rasa.shared.agents.utils import make_agent_identifier
54
63
  from rasa.shared.core.domain import Domain
64
+ from rasa.shared.core.events import Event
55
65
  from rasa.shared.core.flows import FlowsList
66
+ from rasa.shared.core.flows.steps.call import CallFlowStep
67
+ from rasa.shared.core.slots import Slot
56
68
  from rasa.shared.core.trackers import DialogueStateTracker
57
69
  from rasa.shared.nlu.constants import SET_SLOT_COMMAND
58
70
  from rasa.shared.nlu.training_data.message import Message
59
- from rasa.tracing.constants import REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME
71
+ from rasa.tracing.constants import (
72
+ AGENT_EXECUTION_DURATION_METRIC_NAME,
73
+ MCP_TOOL_EXECUTION_DURATION_METRIC_NAME,
74
+ REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME,
75
+ TOOL_OUTPUT_VALUE_MAX_LENGTH,
76
+ )
60
77
  from rasa.tracing.instrumentation import attribute_extractors
61
78
  from rasa.tracing.instrumentation.intentless_policy_instrumentation import (
62
79
  _instrument_extract_ai_responses,
@@ -69,11 +86,13 @@ from rasa.tracing.instrumentation.metrics import (
69
86
  record_compact_llm_command_generator_metrics,
70
87
  record_enterprise_search_policy_metrics,
71
88
  record_llm_command_generator_metrics,
89
+ record_mcp_agent_llm_metrics,
72
90
  record_multi_step_llm_command_generator_metrics,
73
91
  record_request_size_in_bytes,
74
92
  record_search_ready_llm_command_generator_metrics,
75
93
  record_single_step_llm_command_generator_metrics,
76
94
  )
95
+ from rasa.tracing.metric_instrument_provider import MetricInstrumentProvider
77
96
  from rasa.utils.endpoints import EndpointConfig, concat_url
78
97
 
79
98
  # The `TypeVar` representing the return type for a function to be wrapped.
@@ -89,6 +108,7 @@ COMMAND_PROCESSOR_MODULE_NAME = (
89
108
  "rasa.dialogue_understanding.processor.command_processor"
90
109
  )
91
110
  FLOW_EXECUTOR_MODULE_NAME = "rasa.core.policies.flows.flow_executor"
111
+ AGENT_EXECUTOR_MODULE_NAME = "rasa.core.policies.flows.agent_executor"
92
112
  DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME = "rasa.dialogue_understanding_test.io"
93
113
 
94
114
 
@@ -244,6 +264,67 @@ def traceable_async(
244
264
  return async_wrapper
245
265
 
246
266
 
267
+ def traceable_module_async(
268
+ fn: Callable[..., Awaitable[S]],
269
+ tracer: Tracer,
270
+ attr_extractor: Optional[Callable[..., Dict[str, Any]]],
271
+ header_extractor: Optional[Callable[..., Dict[str, Any]]],
272
+ metrics_recorder: Optional[Callable],
273
+ ) -> Callable[..., Awaitable[S]]:
274
+ """Wrap a module-level async function with tracing functionality.
275
+
276
+ :param fn: The async function to be wrapped.
277
+ :param tracer: The `Tracer` that shall be used for tracing this function.
278
+ :param attr_extractor: A function that is applied to the function's arguments.
279
+ :param header_extractor: A function that is applied to the function's arguments.
280
+ :param metrics_recorder: A function that records metric measurements.
281
+ :return: The wrapped function.
282
+ """
283
+ should_extract_args = _check_extractor_argument_list(fn, attr_extractor)
284
+
285
+ @functools.wraps(fn)
286
+ async def async_wrapper(*args: Any, **kwargs: Any) -> S:
287
+ attrs = (
288
+ attr_extractor(*args, **kwargs)
289
+ if attr_extractor and should_extract_args
290
+ else {}
291
+ )
292
+ headers = header_extractor(*args, **kwargs) if header_extractor else {}
293
+ context = extract_tracing_context_from_headers(headers)
294
+
295
+ # Use module name from attrs or fallback to function module
296
+ module_name = attrs.pop("module_name", "")
297
+ if module_name in [
298
+ "command_processor",
299
+ FLOW_EXECUTOR_MODULE_NAME,
300
+ DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
301
+ ]:
302
+ span_name = f"{module_name}.{fn.__name__}"
303
+ else:
304
+ span_name = f"{fn.__module__}.{fn.__name__}"
305
+
306
+ with tracer.start_as_current_span(
307
+ span_name,
308
+ attributes=attrs,
309
+ context=context,
310
+ ) as span:
311
+ TraceContextTextMapPropagator().inject(headers)
312
+
313
+ ctx = span.get_span_context()
314
+ logger.debug(
315
+ f"The trace id for the current span '{span_name}' is '{ctx.trace_id}'."
316
+ )
317
+
318
+ result = await fn(*args, **kwargs)
319
+
320
+ if metrics_recorder:
321
+ metrics_recorder(attrs)
322
+
323
+ return result
324
+
325
+ return async_wrapper
326
+
327
+
247
328
  def traceable_async_generator(
248
329
  fn: Callable[[T, Any, Any], AsyncIterator[S]],
249
330
  tracer: Tracer,
@@ -278,6 +359,9 @@ def traceable_async_generator(
278
359
 
279
360
  # This `TypeVar` restricts the agent_class to be instrumented to subclasses of `Agent`.
280
361
  AgentType = TypeVar("AgentType", bound=Agent)
362
+ # This `TypeVar` restricts the subagent_class to be instrumented to subclasses of
363
+ # `AgentProtocol`.
364
+ AgentProtocolType = TypeVar("AgentProtocolType", bound=AgentProtocol)
281
365
  # This `TypeVar` restricts the processor_class to be instrumented to subclasses of
282
366
  # `MessageProcessor`.
283
367
  ProcessorType = TypeVar("ProcessorType", bound=MessageProcessor)
@@ -342,6 +426,7 @@ def instrument(
342
426
  List[Type[CustomActionExecutor]]
343
427
  ] = None,
344
428
  flow_retrieval_class: Optional[Type[FlowRetrievalType]] = None,
429
+ subagent_classes: Optional[List[Type[AgentProtocolType]]] = None,
345
430
  ) -> None:
346
431
  """Substitute methods to be traced by their traced counterparts.
347
432
 
@@ -395,8 +480,10 @@ def instrument(
395
480
  to be instrumented. If `None` is given, no `MultiStepLLMCommandGenerator` will
396
481
  be instrumented.
397
482
  :param custom_action_executor_subclasses: The subclasses of `CustomActionExecutor`
398
- to be instrumented. If `None` is given, no subclass of `CustomActionExecutor`
399
- will be instrumented.
483
+ to be instrumented. If `None` is given, no subclass of `CustomActionExecutor`
484
+ will be instrumented.
485
+ :param subagent_classes: The `AgentProtocol` classes to be instrumented.
486
+ If `None` is given, no `AgentProtocol` classes will be instrumented.
400
487
  """
401
488
  if agent_class is not None and not class_is_instrumented(agent_class):
402
489
  _instrument_method(
@@ -408,6 +495,49 @@ def instrument(
408
495
  )
409
496
  mark_class_as_instrumented(agent_class)
410
497
 
498
+ if subagent_classes is not None:
499
+ for subagent_class in subagent_classes:
500
+ if not class_is_instrumented(subagent_class):
501
+ # Instrument _execute_tool_call method if it exists
502
+ if hasattr(subagent_class, "_execute_tool_call"):
503
+ _instrument_execute_tool_call(
504
+ tracer_provider.get_tracer(subagent_class.__module__),
505
+ subagent_class,
506
+ )
507
+
508
+ # Instrument send_message method for MCP agents
509
+ if hasattr(subagent_class, "send_message"):
510
+ _instrument_method(
511
+ tracer_provider.get_tracer(subagent_class.__module__),
512
+ subagent_class,
513
+ "send_message",
514
+ attribute_extractors.extract_attrs_for_mcp_agent_llm_call,
515
+ metrics_recorder=record_mcp_agent_llm_metrics,
516
+ )
517
+
518
+ _instrument_mcp_agent_send_message_response_capture(
519
+ tracer_provider.get_tracer(subagent_class.__module__),
520
+ subagent_class,
521
+ )
522
+
523
+ # Instrument get_available_tools method for MCP agents
524
+ if hasattr(subagent_class, "get_available_tools"):
525
+ _instrument_mcp_agent_get_available_tools_response_capture(
526
+ tracer_provider.get_tracer(subagent_class.__module__),
527
+ subagent_class,
528
+ )
529
+
530
+ # Instrument health check method for A2A agents
531
+ if hasattr(subagent_class, "_perform_health_check"):
532
+ _instrument_method(
533
+ tracer_provider.get_tracer(subagent_class.__module__),
534
+ subagent_class,
535
+ "_perform_health_check",
536
+ attribute_extractors.extract_attrs_for_a2a_agent_perform_health_check,
537
+ )
538
+
539
+ mark_class_as_instrumented(subagent_class)
540
+
411
541
  if processor_class is not None and not class_is_instrumented(processor_class):
412
542
  _instrument_processor(tracer_provider, processor_class)
413
543
  mark_class_as_instrumented(processor_class)
@@ -443,7 +573,7 @@ def instrument(
443
573
  tracer_provider.get_tracer(lock_store_class.__module__),
444
574
  attribute_extractors.extract_attrs_for_lock_store,
445
575
  )
446
- lock_store_class.lock = contextlib.asynccontextmanager(traced_lock_method) # type: ignore[assignment]
576
+ lock_store_class.lock = contextlib.asynccontextmanager(traced_lock_method) # type: ignore[method-assign]
447
577
 
448
578
  logger.debug(f"Instrumented '{lock_store_class.__name__}.lock'.")
449
579
 
@@ -761,6 +891,96 @@ def instrument(
761
891
  mark_class_as_instrumented(custom_action_executor_subclass)
762
892
 
763
893
 
894
+ def _instrument_mcp_agent_send_message_response_capture(
895
+ tracer: Tracer, agent_class: Type["MCPBaseAgent"]
896
+ ) -> None:
897
+ """Add response capture to the send_message method."""
898
+
899
+ def tracing_send_message_response_wrapper(fn: Callable) -> Callable:
900
+ @functools.wraps(fn)
901
+ async def wrapper(
902
+ self: "MCPBaseAgent",
903
+ agent_input: "AgentInput",
904
+ ) -> "AgentOutput":
905
+ agent_output = await fn(self, agent_input)
906
+
907
+ # Only create response span if there's actually a response to capture
908
+ if agent_output:
909
+ with tracer.start_as_current_span(
910
+ f"{self.__class__.__name__}.{fn.__name__}.llm_response"
911
+ ) as span:
912
+ span.set_attributes(
913
+ {
914
+ "agent_output_response_message": (
915
+ agent_output.response_message or ""
916
+ ),
917
+ "agent_output_id": str(agent_output.id),
918
+ "agent_output_status": str(agent_output.status),
919
+ "agent_output_events_count": (
920
+ len(agent_output.events) if agent_output.events else 0
921
+ ),
922
+ }
923
+ )
924
+
925
+ return agent_output
926
+
927
+ return wrapper
928
+
929
+ agent_class.send_message = tracing_send_message_response_wrapper( # type: ignore[method-assign]
930
+ agent_class.send_message
931
+ )
932
+ logger.debug(
933
+ f"Instrumented '{agent_class.__name__}.send_message' for response capture."
934
+ )
935
+
936
+
937
+ def _instrument_mcp_agent_get_available_tools_response_capture(
938
+ tracer: Tracer, agent_class: Type["MCPBaseAgent"]
939
+ ) -> None:
940
+ """Add response capture to the get_available_tools method."""
941
+
942
+ def tracing_get_available_tools_response_wrapper(fn: Callable) -> Callable:
943
+ @functools.wraps(fn)
944
+ def wrapper(
945
+ self: "MCPBaseAgent",
946
+ agent_input: "AgentInput",
947
+ ) -> List["AgentToolSchema"]:
948
+ # Call the original method
949
+ available_tools = fn(self, agent_input)
950
+
951
+ # Create a span to capture the tool information
952
+ with tracer.start_as_current_span(
953
+ f"{self.__class__.__name__}.{fn.__name__}"
954
+ ) as span:
955
+ # Create a simple dictionary of tool names and descriptions
956
+ tools_dict = {
957
+ tool.name: tool.description or "" for tool in available_tools
958
+ }
959
+
960
+ span.set_attributes(
961
+ {
962
+ "agent_name": self._name,
963
+ "agent_id": str(
964
+ make_agent_identifier(self._name, self.protocol_type)
965
+ ),
966
+ "total_available_tools_count": len(available_tools),
967
+ "available_tools": json.dumps(tools_dict),
968
+ }
969
+ )
970
+
971
+ return available_tools
972
+
973
+ return wrapper
974
+
975
+ agent_class.get_available_tools = tracing_get_available_tools_response_wrapper( # type: ignore[method-assign]
976
+ agent_class.get_available_tools
977
+ )
978
+ logger.debug(
979
+ f"Instrumented '{agent_class.__name__}.get_available_tools' "
980
+ f"for response capture."
981
+ )
982
+
983
+
764
984
  def _instrument_nlu_command_adapter_predict_commands(
765
985
  tracer: Tracer, nlu_command_adapter_class: Type[NLUCommandAdapterType]
766
986
  ) -> None:
@@ -790,7 +1010,7 @@ def _instrument_nlu_command_adapter_predict_commands(
790
1010
 
791
1011
  return wrapper
792
1012
 
793
- nlu_command_adapter_class.predict_commands = ( # type: ignore[assignment]
1013
+ nlu_command_adapter_class.predict_commands = ( # type: ignore[method-assign]
794
1014
  tracing_nlu_command_adapter_predict_commands_wrapper(
795
1015
  nlu_command_adapter_class.predict_commands
796
1016
  )
@@ -839,7 +1059,7 @@ def _instrument_multi_step_llm_command_generator_parse_commands(
839
1059
 
840
1060
  return wrapper
841
1061
 
842
- multi_step_llm_command_generator_class.parse_commands = ( # type: ignore[assignment]
1062
+ multi_step_llm_command_generator_class.parse_commands = ( # type: ignore[method-assign]
843
1063
  tracing_multi_step_llm_command_generator_parse_commands_wrapper(
844
1064
  multi_step_llm_command_generator_class.parse_commands
845
1065
  )
@@ -873,7 +1093,7 @@ def _instrument_information_retrieval_search(
873
1093
 
874
1094
  return wrapper
875
1095
 
876
- vector_store_class.search = tracing_information_retrieval_search_wrapper( # type: ignore[assignment]
1096
+ vector_store_class.search = tracing_information_retrieval_search_wrapper( # type: ignore[method-assign]
877
1097
  vector_store_class.search
878
1098
  )
879
1099
 
@@ -1013,7 +1233,7 @@ def _instrument_get_tracker(
1013
1233
 
1014
1234
  return wrapper
1015
1235
 
1016
- processor_class.get_tracker = tracing_get_tracker_wrapper( # type: ignore[assignment]
1236
+ processor_class.get_tracker = tracing_get_tracker_wrapper( # type: ignore[method-assign]
1017
1237
  processor_class.get_tracker
1018
1238
  )
1019
1239
 
@@ -1066,6 +1286,21 @@ def _instrument_flow_executor_module(tracer_provider: TracerProvider) -> None:
1066
1286
  "run_step",
1067
1287
  attribute_extractors.extract_attrs_for_run_step,
1068
1288
  )
1289
+ # Instrument the agent execution function
1290
+ _instrument_call_agent_with_retry(
1291
+ tracer_provider.get_tracer(FLOW_EXECUTOR_MODULE_NAME),
1292
+ AGENT_EXECUTOR_MODULE_NAME,
1293
+ )
1294
+ # Instrument the MCP tool execution function
1295
+ _instrument_execute_mcp_tool_call(
1296
+ tracer_provider.get_tracer("rasa.core.policies.flows.mcp_tool_executor"),
1297
+ "rasa.core.policies.flows.mcp_tool_executor",
1298
+ )
1299
+ # Instrument agent internal state transitions
1300
+ _instrument_agent_internal_state_transitions(
1301
+ tracer_provider.get_tracer(FLOW_EXECUTOR_MODULE_NAME),
1302
+ FLOW_EXECUTOR_MODULE_NAME,
1303
+ )
1069
1304
  mark_module_as_instrumented(FLOW_EXECUTOR_MODULE_NAME)
1070
1305
 
1071
1306
 
@@ -1088,13 +1323,16 @@ def _instrument_advance_flows_until_next_action(
1088
1323
  ) -> None:
1089
1324
  def tracing_advance_flows_until_next_action_wrapper(fn: Callable) -> Callable:
1090
1325
  @functools.wraps(fn)
1091
- def wrapper(
1326
+ async def wrapper(
1092
1327
  tracker: DialogueStateTracker,
1093
1328
  available_actions: List[str],
1094
1329
  flows: FlowsList,
1330
+ slots: List[Slot],
1095
1331
  ) -> FlowActionPrediction:
1096
1332
  with tracer.start_as_current_span(f"{module_name}.{fn.__name__}") as span:
1097
- prediction: FlowActionPrediction = fn(tracker, available_actions, flows)
1333
+ prediction: FlowActionPrediction = await fn(
1334
+ tracker, available_actions, flows, slots
1335
+ )
1098
1336
 
1099
1337
  span.set_attributes(
1100
1338
  {
@@ -1129,6 +1367,288 @@ def _instrument_advance_flows_until_next_action(
1129
1367
  )
1130
1368
 
1131
1369
 
1370
+ def _instrument_call_agent_with_retry(
1371
+ tracer: Tracer,
1372
+ module_name: str,
1373
+ ) -> None:
1374
+ """Instrument the actual agent execution function to capture inputs/outputs."""
1375
+ module = importlib.import_module(module_name)
1376
+
1377
+ original_function = getattr(module, "_call_agent_with_retry")
1378
+
1379
+ @functools.wraps(original_function)
1380
+ async def traced_call_agent_with_retry(
1381
+ agent_name: str,
1382
+ protocol_type: Any,
1383
+ agent_input: Any,
1384
+ max_retries: int,
1385
+ ) -> Any:
1386
+ agent_input_attrs = {
1387
+ "agent_name": agent_name,
1388
+ "protocol_type": str(protocol_type),
1389
+ "max_retries": max_retries,
1390
+ "agent_input_id": agent_input.id,
1391
+ "agent_input_user_message": agent_input.user_message,
1392
+ "agent_input_slots_count": len(agent_input.slots),
1393
+ "agent_input_events_count": len(agent_input.events),
1394
+ "agent_input_conversation_history_length": len(
1395
+ agent_input.conversation_history
1396
+ ),
1397
+ }
1398
+
1399
+ if agent_input.metadata:
1400
+ agent_input_attrs["agent_input_metadata"] = json.dumps(
1401
+ agent_input.metadata, sort_keys=True
1402
+ )
1403
+
1404
+ span_name = f"{module_name}._call_agent_with_retry"
1405
+ with tracer.start_as_current_span(
1406
+ span_name, attributes=agent_input_attrs
1407
+ ) as span:
1408
+ start_time = time.perf_counter_ns()
1409
+ result = await original_function(
1410
+ agent_name, protocol_type, agent_input, max_retries
1411
+ )
1412
+ end_time = time.perf_counter_ns()
1413
+ duration_ns = end_time - start_time
1414
+
1415
+ span.set_attribute(AGENT_EXECUTION_DURATION_METRIC_NAME, duration_ns)
1416
+ span.set_attribute("agent_output_id", str(result.id))
1417
+ span.set_attribute("agent_output_status", str(result.status))
1418
+
1419
+ instrument_provider = MetricInstrumentProvider()
1420
+ if not instrument_provider.instruments:
1421
+ logger.warning(
1422
+ "MetricInstrumentProvider has no instruments registered. "
1423
+ "Agent execution metrics will not be recorded."
1424
+ )
1425
+ else:
1426
+ agent_metric = instrument_provider.get_instrument(
1427
+ AGENT_EXECUTION_DURATION_METRIC_NAME
1428
+ )
1429
+ if agent_metric is None:
1430
+ logger.warning(
1431
+ f"Failed to get instrument "
1432
+ f"'{AGENT_EXECUTION_DURATION_METRIC_NAME}'. "
1433
+ f"Agent execution metrics will not be recorded."
1434
+ )
1435
+ else:
1436
+ agent_metric_attrs = {
1437
+ "agent_name": agent_name,
1438
+ "protocol_type": str(protocol_type),
1439
+ "status": str(result.status),
1440
+ }
1441
+ agent_metric.record(
1442
+ amount=duration_ns, attributes=agent_metric_attrs
1443
+ )
1444
+
1445
+ if result.response_message:
1446
+ span.set_attribute(
1447
+ "agent_output_response_message", result.response_message
1448
+ )
1449
+
1450
+ if result.events:
1451
+ span.set_attribute("agent_output_events_count", len(result.events))
1452
+
1453
+ if result.structured_results:
1454
+ span.set_attribute(
1455
+ "agent_output_structured_results_count",
1456
+ len(result.structured_results),
1457
+ )
1458
+
1459
+ if result.error_message:
1460
+ span.set_attribute("agent_output_error", result.error_message)
1461
+
1462
+ if result.metadata:
1463
+ span.set_attribute("agent_output_metadata", json.dumps(result.metadata))
1464
+
1465
+ return result
1466
+
1467
+ setattr(module, "_call_agent_with_retry", traced_call_agent_with_retry)
1468
+ logger.debug(
1469
+ f"Instrumented function '_call_agent_with_retry' in module '{module_name}'"
1470
+ )
1471
+
1472
+
1473
+ def _instrument_execute_mcp_tool_call(
1474
+ tracer: Tracer,
1475
+ module_name: str,
1476
+ ) -> None:
1477
+ """Instrument the actual MCP tool execution function to capture inputs/outputs."""
1478
+ module = importlib.import_module(module_name)
1479
+
1480
+ original_function = getattr(module, "_execute_mcp_tool_call")
1481
+
1482
+ @functools.wraps(original_function)
1483
+ async def traced_execute_mcp_tool_call(
1484
+ initial_events: List[Event],
1485
+ stack: DialogueStack,
1486
+ step: "CallFlowStep",
1487
+ tracker: DialogueStateTracker,
1488
+ ) -> Any:
1489
+ tool_input_attrs = {
1490
+ "tool_id": step.call,
1491
+ "mcp_server": step.mcp_server or "unknown",
1492
+ "execution_context": "flow",
1493
+ "tool_input_mapping": (
1494
+ json.dumps(step.mapping["input"])
1495
+ if step.mapping and "input" in step.mapping
1496
+ else "{}"
1497
+ ),
1498
+ }
1499
+
1500
+ if step.mapping and "input" in step.mapping and step.mapping["input"]:
1501
+ try:
1502
+ from rasa.core.policies.flows.mcp_tool_executor import (
1503
+ _prepare_tool_arguments,
1504
+ )
1505
+
1506
+ arguments = _prepare_tool_arguments(step.mapping["input"], tracker)
1507
+ tool_input_attrs["tool_input_arguments"] = json.dumps(arguments)
1508
+ except Exception as e:
1509
+ logger.warning(f"Failed to prepare tool arguments: {e}")
1510
+ tool_input_attrs["tool_input_arguments"] = "{}"
1511
+
1512
+ span_name = f"{module_name}._execute_mcp_tool_call"
1513
+ with tracer.start_as_current_span(
1514
+ span_name, attributes=tool_input_attrs
1515
+ ) as span:
1516
+ start_time = time.perf_counter_ns()
1517
+ result = await original_function(initial_events, stack, step, tracker)
1518
+ end_time = time.perf_counter_ns()
1519
+ duration_ns = end_time - start_time
1520
+
1521
+ span.set_attribute(MCP_TOOL_EXECUTION_DURATION_METRIC_NAME, duration_ns)
1522
+
1523
+ # Count events that were generated by the tool execution
1524
+ # Success: result.events contains initial_events + new tool events
1525
+ # Error: result.events contains only initial_events (unchanged)
1526
+ tool_generated_events_count = len(result.events) - len(initial_events)
1527
+ span.set_attribute("tool_output_events_count", tool_generated_events_count)
1528
+
1529
+ instrument_provider = MetricInstrumentProvider()
1530
+ if not instrument_provider.instruments:
1531
+ logger.warning(
1532
+ "MetricInstrumentProvider has no instruments registered. "
1533
+ "MCP tool execution metrics will not be recorded."
1534
+ )
1535
+ else:
1536
+ tool_metric = instrument_provider.get_instrument(
1537
+ MCP_TOOL_EXECUTION_DURATION_METRIC_NAME
1538
+ )
1539
+ if tool_metric is None:
1540
+ logger.warning(
1541
+ f"Failed to get instrument "
1542
+ f"'{MCP_TOOL_EXECUTION_DURATION_METRIC_NAME}'. "
1543
+ "MCP tool execution metrics will not be recorded."
1544
+ )
1545
+ else:
1546
+ success = "true"
1547
+ if len(result.events) == len(initial_events):
1548
+ for frame in stack.frames:
1549
+ if isinstance(frame, InternalErrorPatternFlowStackFrame):
1550
+ success = "false"
1551
+ break
1552
+ tool_metric_attrs = {
1553
+ "tool_id": step.call,
1554
+ "mcp_server": step.mcp_server or "unknown",
1555
+ "execution_context": "flow",
1556
+ "success": success,
1557
+ }
1558
+ tool_metric.record(amount=duration_ns, attributes=tool_metric_attrs)
1559
+
1560
+ tool_output_events = []
1561
+ if result.events and len(result.events) > len(initial_events):
1562
+ for event in result.events[len(initial_events) :]:
1563
+ if hasattr(event, "key") and hasattr(event, "value"):
1564
+ tool_output_events.append(
1565
+ {
1566
+ "slot": str(event.key),
1567
+ "value": (
1568
+ str(event.value)[:TOOL_OUTPUT_VALUE_MAX_LENGTH]
1569
+ if event.value
1570
+ else None
1571
+ ),
1572
+ }
1573
+ )
1574
+
1575
+ if tool_output_events:
1576
+ span.set_attribute("tool_output_slots", json.dumps(tool_output_events))
1577
+
1578
+ return result
1579
+
1580
+ setattr(module, "_execute_mcp_tool_call", traced_execute_mcp_tool_call)
1581
+ logger.debug(
1582
+ f"Instrumented function '_execute_mcp_tool_call' in module '{module_name}'"
1583
+ )
1584
+
1585
+
1586
+ def _instrument_execute_tool_call(
1587
+ tracer: Tracer,
1588
+ agent_class: Type[AgentProtocolType],
1589
+ ) -> None:
1590
+ """Instrument the agent's _execute_tool_call method."""
1591
+ original_method = getattr(agent_class, "_execute_tool_call")
1592
+
1593
+ @functools.wraps(original_method)
1594
+ async def traced_execute_tool_call(
1595
+ self: AgentProtocolType, tool_name: str, arguments: Dict[str, Any]
1596
+ ) -> Any:
1597
+ tool_input_attrs = {
1598
+ "tool_name": tool_name,
1599
+ "tool_arguments": json.dumps(arguments, sort_keys=True),
1600
+ "agent_name": getattr(self, "_name", None),
1601
+ "protocol_type": str(self.protocol_type),
1602
+ "execution_context": "agent",
1603
+ }
1604
+
1605
+ span_name = f"{agent_class.__name__}._execute_tool_call"
1606
+ with tracer.start_as_current_span(
1607
+ span_name, attributes=tool_input_attrs
1608
+ ) as span:
1609
+ start_time = time.perf_counter_ns()
1610
+ result = await original_method(self, tool_name, arguments)
1611
+ end_time = time.perf_counter_ns()
1612
+ duration_ns = end_time - start_time
1613
+
1614
+ # Set execution time
1615
+ span.set_attribute("tool_execution_duration_ns", duration_ns)
1616
+
1617
+ # Set tool result attributes
1618
+ span.set_attribute("tool_result_name", result.tool_name)
1619
+ span.set_attribute("tool_result_is_error", result.is_error)
1620
+
1621
+ if result.result:
1622
+ # Truncate result if too long
1623
+ result_str = str(result.result)
1624
+ if len(result_str) > TOOL_OUTPUT_VALUE_MAX_LENGTH:
1625
+ result_str = result_str[:TOOL_OUTPUT_VALUE_MAX_LENGTH] + "..."
1626
+ span.set_attribute("tool_result_content", result_str)
1627
+
1628
+ if result.error_message:
1629
+ span.set_attribute("tool_result_error_message", result.error_message)
1630
+
1631
+ # Record metrics
1632
+ instrument_provider = MetricInstrumentProvider()
1633
+ if instrument_provider.instruments:
1634
+ tool_metric = instrument_provider.get_instrument(
1635
+ MCP_TOOL_EXECUTION_DURATION_METRIC_NAME
1636
+ )
1637
+ if tool_metric:
1638
+ tool_metric_attrs = {
1639
+ "tool_name": tool_name,
1640
+ "agent_name": getattr(self, "_name", None),
1641
+ "execution_context": "agent",
1642
+ "success": "false" if result.is_error else "true",
1643
+ }
1644
+ tool_metric.record(amount=duration_ns, attributes=tool_metric_attrs)
1645
+
1646
+ return result
1647
+
1648
+ setattr(agent_class, "_execute_tool_call", traced_execute_tool_call)
1649
+ logger.debug(f"Instrumented '{agent_class.__name__}._execute_tool_call'.")
1650
+
1651
+
1132
1652
  def _instrument_method(
1133
1653
  tracer: Tracer,
1134
1654
  instrumented_class: Type,
@@ -1156,7 +1676,11 @@ def _instrument_function(
1156
1676
  module = importlib.import_module(module_name)
1157
1677
  function_to_trace = getattr(module, function_name)
1158
1678
  traced_function = _wrap_with_tracing_decorator(
1159
- function_to_trace, tracer, attr_extractor, header_extractor
1679
+ function_to_trace,
1680
+ tracer,
1681
+ attr_extractor,
1682
+ header_extractor,
1683
+ is_module_function=True,
1160
1684
  )
1161
1685
 
1162
1686
  setattr(module, function_name, traced_function)
@@ -1172,15 +1696,27 @@ def _wrap_with_tracing_decorator(
1172
1696
  attr_extractor: Optional[Callable],
1173
1697
  header_extractor: Optional[Callable] = None,
1174
1698
  metrics_recorder: Optional[Callable] = None,
1699
+ is_module_function: bool = False,
1175
1700
  ) -> Callable:
1176
1701
  if inspect.iscoroutinefunction(callable_to_trace):
1177
- traced_callable = traceable_async(
1178
- callable_to_trace,
1179
- tracer,
1180
- attr_extractor,
1181
- header_extractor,
1182
- metrics_recorder,
1183
- )
1702
+ if is_module_function:
1703
+ # This is a module-level async function
1704
+ traced_callable = traceable_module_async(
1705
+ callable_to_trace,
1706
+ tracer,
1707
+ attr_extractor,
1708
+ header_extractor,
1709
+ metrics_recorder,
1710
+ )
1711
+ else:
1712
+ # This is a class method
1713
+ traced_callable = traceable_async(
1714
+ callable_to_trace,
1715
+ tracer,
1716
+ attr_extractor,
1717
+ header_extractor,
1718
+ metrics_recorder,
1719
+ )
1184
1720
  else:
1185
1721
  traced_callable = traceable(
1186
1722
  callable_to_trace, tracer, attr_extractor, metrics_recorder
@@ -1223,7 +1759,7 @@ def _instrument_run_action(
1223
1759
 
1224
1760
  return wrapper
1225
1761
 
1226
- processor_class._run_action = tracing_run_action_wrapper( # type: ignore[assignment]
1762
+ processor_class._run_action = tracing_run_action_wrapper( # type: ignore[method-assign]
1227
1763
  processor_class._run_action
1228
1764
  )
1229
1765
 
@@ -1282,7 +1818,7 @@ def _instrument_endpoint_config(
1282
1818
 
1283
1819
  return wrapper
1284
1820
 
1285
- endpoint_config_class.request = tracing_endpoint_config_wrapper( # type: ignore[assignment]
1821
+ endpoint_config_class.request = tracing_endpoint_config_wrapper( # type: ignore[method-assign]
1286
1822
  endpoint_config_class.request
1287
1823
  )
1288
1824
 
@@ -1314,7 +1850,7 @@ def _instrument_grpc_custom_action_executor(
1314
1850
 
1315
1851
  return wrapper
1316
1852
 
1317
- grpc_custom_action_executor_class.run = tracing_grpc_custom_action_executor_wrapper( # type: ignore[assignment]
1853
+ grpc_custom_action_executor_class.run = tracing_grpc_custom_action_executor_wrapper( # type: ignore[method-assign]
1318
1854
  grpc_custom_action_executor_class.run
1319
1855
  )
1320
1856
 
@@ -1411,3 +1947,72 @@ def mark_module_as_instrumented(module_name: Text) -> None:
1411
1947
  module = importlib.import_module(module_name)
1412
1948
  if not module_is_instrumented(module_name):
1413
1949
  setattr(module, _instrumented_module_boolean_attribute_name(module_name), True)
1950
+
1951
+
1952
+ def _instrument_agent_internal_state_transitions(
1953
+ tracer: Tracer,
1954
+ module_name: str,
1955
+ ) -> None:
1956
+ """Instrument agent internal state transitions."""
1957
+ # Import agent stack frame
1958
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
1959
+ AgentStackFrame,
1960
+ )
1961
+
1962
+ # Store original __setattr__ method
1963
+ original_setattr = AgentStackFrame.__setattr__
1964
+
1965
+ def traced_setattr(self: object, name: str, value: Any) -> None:
1966
+ # Type assertion: we know this is called only on AgentStackFrame instances
1967
+ agent_frame = cast("AgentStackFrame", self)
1968
+
1969
+ # Check if we're setting the state field
1970
+ if name == "state":
1971
+ # Get current state before change
1972
+ current_state = agent_frame.state
1973
+
1974
+ # Call original setattr
1975
+ original_setattr(self, name, value)
1976
+
1977
+ # Track state transition if state actually changed
1978
+ if current_state != value:
1979
+ _track_agent_internal_state_transition(
1980
+ tracer=tracer,
1981
+ agent_id=agent_frame.agent_id,
1982
+ flow_id=agent_frame.flow_id,
1983
+ from_state=current_state.value,
1984
+ to_state=value.value,
1985
+ step_id=agent_frame.step_id,
1986
+ )
1987
+ else:
1988
+ # For other attributes, just call original setattr
1989
+ original_setattr(self, name, value)
1990
+
1991
+ # Replace the __setattr__ method with our traced version
1992
+ AgentStackFrame.__setattr__ = traced_setattr # type: ignore[method-assign]
1993
+
1994
+
1995
+ def _track_agent_internal_state_transition(
1996
+ tracer: Tracer,
1997
+ agent_id: str,
1998
+ flow_id: str,
1999
+ from_state: str,
2000
+ to_state: str,
2001
+ step_id: str,
2002
+ ) -> None:
2003
+ """Track an agent internal state transition."""
2004
+ # Create span for state transition
2005
+ span_name = "AgentStackFrame.state_transition"
2006
+ with tracer.start_as_current_span(
2007
+ span_name,
2008
+ attributes={
2009
+ "agent_id": agent_id,
2010
+ "flow_id": flow_id,
2011
+ "from_state": from_state,
2012
+ "to_state": to_state,
2013
+ "step_id": step_id,
2014
+ },
2015
+ ):
2016
+ # Context manager ensures proper span lifecycle (start/end)
2017
+ # No additional work needed - span attributes are set at creation
2018
+ pass