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,247 @@
1
+ """MCP server connection utilities."""
2
+
3
+ import asyncio
4
+ import warnings
5
+ from contextlib import AsyncExitStack, asynccontextmanager
6
+ from typing import Any, AsyncIterator, ClassVar, Dict, List, Optional
7
+
8
+ import structlog
9
+ from httpx import HTTPStatusError
10
+ from mcp import ClientSession
11
+ from mcp.client.streamable_http import streamablehttp_client
12
+
13
+ from rasa.shared.agents.auth.agent_auth_manager import AgentAuthManager
14
+ from rasa.shared.agents.auth.auth_strategy import AgentAuthStrategy
15
+ from rasa.shared.exceptions import AuthenticationError
16
+
17
+ structlogger = structlog.get_logger()
18
+
19
+
20
+ # Suppress RuntimeWarning about unawaited coroutines when MCP server is not reachable.
21
+ warnings.filterwarnings(
22
+ "ignore",
23
+ message=".*BaseEventLoop.create_server.*was never awaited.*",
24
+ category=RuntimeWarning,
25
+ )
26
+
27
+
28
+ class MCPServerConnection:
29
+ """
30
+ Manages connection to an MCP server, with optional authentication.
31
+
32
+ This class handles:
33
+ - Connection establishment and cleanup
34
+ - Session lifecycle management
35
+ - Authentication via AgentAuthManager (API Key, OAuth2, mTLS, etc.)
36
+ """
37
+
38
+ # Timeout for ping operations in seconds
39
+ PING_TIMEOUT_SECONDS = 3.0
40
+
41
+ _SUPPORTED_SERVER_TYPES: ClassVar[List[str]] = ["http", "https"]
42
+
43
+ def __init__(
44
+ self,
45
+ server_name: str,
46
+ server_url: str,
47
+ server_type: str,
48
+ auth_manager: Optional[AgentAuthManager] = None,
49
+ ):
50
+ """
51
+ Initialize the MCP server connection.
52
+
53
+ Args:
54
+ server_name: Server name to identify the server
55
+ server_url: Server URL
56
+ server_type: Server type (currently only 'http' is supported)
57
+ auth_manager: Optional AgentAuthManager instance for this connection
58
+ """
59
+ self.server_name = server_name
60
+ self.server_url = server_url
61
+ self.server_type = server_type
62
+ self._auth_manager = auth_manager
63
+ self.session: Optional[ClientSession] = None
64
+ self.exit_stack: Optional[AsyncExitStack] = None
65
+
66
+ @classmethod
67
+ def from_config(cls, server_config: Dict[str, Any]) -> "MCPServerConnection":
68
+ """Initialize the MCP server connection from a configuration dictionary."""
69
+ auth_config = server_config.get("additional_params")
70
+ _auth_manager = AgentAuthManager.load_auth(auth_config)
71
+ return cls(
72
+ server_config["name"],
73
+ server_config["url"],
74
+ server_config.get("type", "http"),
75
+ _auth_manager,
76
+ )
77
+
78
+ @staticmethod
79
+ @asynccontextmanager
80
+ async def open_mcp_session(
81
+ url: str, auth_strategy: Optional[AgentAuthStrategy] = None
82
+ ) -> AsyncIterator[ClientSession]:
83
+ """
84
+ Open a streamable MCP session, ensuring that initialization
85
+ completes before yielding.
86
+ """
87
+ async with streamablehttp_client(url, auth=auth_strategy) as (
88
+ read_stream,
89
+ write_stream,
90
+ _,
91
+ ):
92
+ async with ClientSession(read_stream, write_stream) as session:
93
+ await session.initialize() # handshake done here
94
+ yield session
95
+
96
+ async def connect(self) -> None:
97
+ """Establish connection to the MCP server.
98
+
99
+ Raises:
100
+ ValueError: If the server type is not supported.
101
+ ConnectionError: If connection fails.
102
+ AuthenticationError: If authentication fails.
103
+ """
104
+ if self.server_type not in self._SUPPORTED_SERVER_TYPES:
105
+ raise ValueError(f"Unsupported server type: {self.server_type}")
106
+
107
+ # Create a new exit stack for this connection to avoid task boundary issues
108
+ self.exit_stack = AsyncExitStack()
109
+
110
+ try:
111
+ # Get authentication strategy that adheres to httpx.Auth.
112
+ auth_strategy = (
113
+ self._auth_manager.get_auth() if self._auth_manager else None
114
+ )
115
+
116
+ # Register the wrapped context manager in the stack
117
+ self.session = await self.exit_stack.enter_async_context(
118
+ self.open_mcp_session(self.server_url, auth_strategy)
119
+ )
120
+
121
+ except Exception as eg:
122
+ for exc in getattr(eg, "exceptions", [eg]):
123
+ event_info = (
124
+ f"Failed to connect to MCP server `{self.server_name}`: {exc!s}"
125
+ )
126
+ if isinstance(exc, HTTPStatusError):
127
+ status_code = exc.response.status_code
128
+ structlogger.error(
129
+ "mcp_server_connection.connect.http_status_error",
130
+ event_info=event_info,
131
+ server_name=self.server_name,
132
+ server_url=self.server_url,
133
+ status_code=status_code,
134
+ response_text=exc.response.reason_phrase,
135
+ )
136
+ await self._cleanup()
137
+ if status_code in [400, 401, 403]:
138
+ raise AuthenticationError(eg) from eg
139
+ else:
140
+ raise ConnectionError(eg) from eg
141
+ else:
142
+ structlogger.error(
143
+ "mcp_server_connection.connect.other_exception",
144
+ event_info=event_info,
145
+ server_name=self.server_name,
146
+ server_url=self.server_url,
147
+ error=str(exc),
148
+ )
149
+ await self._cleanup()
150
+ raise ConnectionError(eg) from eg
151
+
152
+ except asyncio.CancelledError as e:
153
+ event_info = f"Connection to MCP server `{self.server_name}` was cancelled."
154
+ structlogger.error(
155
+ "mcp_server_connection.connect.connection_cancelled",
156
+ event_info=event_info,
157
+ server_name=self.server_name,
158
+ server_url=self.server_url,
159
+ )
160
+ # Clean up on cancellation
161
+ await self._cleanup()
162
+ raise ConnectionError(e) from e
163
+
164
+ async def ensure_active_session(self) -> ClientSession:
165
+ """
166
+ Ensure an active session is available.
167
+
168
+ If no session exists or the current session is inactive,
169
+ a new connection will be established.
170
+
171
+ Returns:
172
+ Active ClientSession instance.
173
+ """
174
+ if self.session is None:
175
+ await self.connect()
176
+ structlogger.info(
177
+ "mcp_server_connection.ensure_active_session.no_session",
178
+ server_name=self.server_name,
179
+ server_url=self.server_url,
180
+ event_info=(
181
+ "No session found, connecting to the server "
182
+ f"`{self.server_name}` @ `{self.server_url}`"
183
+ ),
184
+ )
185
+ if self.session:
186
+ try:
187
+ # Add timeout to prevent hanging when MCP server is down
188
+ await asyncio.wait_for(
189
+ self.session.send_ping(), timeout=self.PING_TIMEOUT_SECONDS
190
+ )
191
+ except asyncio.TimeoutError as e:
192
+ structlogger.error(
193
+ "mcp_server_connection.ensure_active_session.ping_timeout",
194
+ server_name=self.server_name,
195
+ server_url=self.server_url,
196
+ event_info=(
197
+ "Ping timed out, Server not reachable - "
198
+ f"`{self.server_name}` @ `{self.server_url}`"
199
+ ),
200
+ )
201
+ raise e
202
+ except Exception as e:
203
+ structlogger.warning(
204
+ "mcp_server_connection.ensure_active_session.ping_failed",
205
+ error=str(e),
206
+ server_name=self.server_name,
207
+ server_url=self.server_url,
208
+ event_info=(
209
+ "Ping failed, trying to reconnect to the server "
210
+ f"`{self.server_name}` @ `{self.server_url}`"
211
+ ),
212
+ )
213
+ # Cleanup existing session
214
+ await self.close()
215
+ # Attempt to reconnect now
216
+ await self.connect()
217
+ structlogger.info(
218
+ "mcp_server_connection.ensure_active_session.reconnected",
219
+ server_name=self.server_name,
220
+ server_url=self.server_url,
221
+ event_info=(
222
+ "Reconnected to the server "
223
+ f"`{self.server_name}` @ `{self.server_url}`"
224
+ ),
225
+ )
226
+ assert self.session is not None # Ensures type for mypy
227
+ return self.session
228
+
229
+ async def close(self) -> None:
230
+ """Close the connection and clean up resources."""
231
+ await self._cleanup()
232
+
233
+ async def _cleanup(self) -> None:
234
+ """Internal cleanup method to safely close resources."""
235
+ if self.exit_stack:
236
+ try:
237
+ await self.exit_stack.aclose()
238
+ except Exception as e:
239
+ # Log cleanup errors but don't raise them
240
+ structlogger.warning(
241
+ "mcp_server_connection.cleanup.failed",
242
+ server_name=self.server_name,
243
+ error=str(e),
244
+ )
245
+ finally:
246
+ self.exit_stack = None
247
+ self.session = None
@@ -0,0 +1,20 @@
1
+ """MCP utilities."""
2
+
3
+
4
+ def mcp_server_exists(mcp_server: str) -> bool:
5
+ """Check if an MCP server exists in the configured endpoints.
6
+
7
+ Args:
8
+ mcp_server: The name of the MCP server to check.
9
+
10
+ Returns:
11
+ True if the MCP server exists, False otherwise.
12
+ """
13
+ from rasa.core.config.configuration import Configuration
14
+
15
+ endpoints = Configuration.get_instance().endpoints
16
+ if (mcp_server_list := endpoints.mcp_servers) is None:
17
+ return False
18
+
19
+ mcp_server_names = [server.name for server in mcp_server_list]
20
+ return mcp_server in mcp_server_names
@@ -160,6 +160,43 @@ FLOW_CANCELLED = {
160
160
  "step_id": {"type": "string"},
161
161
  }
162
162
  }
163
+ AGENT_STARTED = {
164
+ "properties": {
165
+ "event": {"const": "agent_started"},
166
+ "agent_id": {"type": "string"},
167
+ "flow_id": {"type": "string"},
168
+ }
169
+ }
170
+ AGENT_COMPLETED = {
171
+ "properties": {
172
+ "event": {"const": "agent_completed"},
173
+ "agent_id": {"type": "string"},
174
+ "flow_id": {"type": "string"},
175
+ "status": {"type": "string"},
176
+ }
177
+ }
178
+ AGENT_INTERRUPTED = {
179
+ "properties": {
180
+ "event": {"const": "agent_interrupted"},
181
+ "agent_id": {"type": "string"},
182
+ "flow_id": {"type": "string"},
183
+ }
184
+ }
185
+ AGENT_RESUMED = {
186
+ "properties": {
187
+ "event": {"const": "agent_resumed"},
188
+ "agent_id": {"type": "string"},
189
+ "flow_id": {"type": "string"},
190
+ }
191
+ }
192
+ AGENT_CANCELLED = {
193
+ "properties": {
194
+ "event": {"const": "agent_cancelled"},
195
+ "agent_id": {"type": "string"},
196
+ "flow_id": {"type": "string"},
197
+ "reason": {"type": "string"},
198
+ }
199
+ }
163
200
  DIALOGUE_STACK_UPDATED = {
164
201
  "properties": {"event": {"const": "stack"}, "update": {"type": "string"}}
165
202
  }
@@ -204,6 +241,11 @@ EVENT_SCHEMA = {
204
241
  FLOW_RESUMED,
205
242
  FLOW_COMPLETED,
206
243
  FLOW_CANCELLED,
244
+ AGENT_STARTED,
245
+ AGENT_COMPLETED,
246
+ AGENT_INTERRUPTED,
247
+ AGENT_RESUMED,
248
+ AGENT_CANCELLED,
207
249
  DIALOGUE_STACK_UPDATED,
208
250
  ROUTING_SESSION_ENDED,
209
251
  SESSION_ENDED,
rasa/shared/utils/yaml.py CHANGED
@@ -335,7 +335,9 @@ class YamlValidationException(YamlException, ValueError):
335
335
  )
336
336
  if found_lc:
337
337
  return line_offset
338
- return this_line + line_offset
338
+ if this_line is not None:
339
+ return this_line + line_offset
340
+ return line_offset
339
341
  return line
340
342
  elif isinstance(current, list) and head.isdigit():
341
343
  return (
rasa/studio/pull/pull.py CHANGED
@@ -8,6 +8,7 @@ import structlog
8
8
 
9
9
  import rasa.cli.utils
10
10
  import rasa.shared.utils.cli
11
+ from rasa.cli.validation.config_path_validation import get_validated_path
11
12
  from rasa.shared.constants import (
12
13
  DEFAULT_CONFIG_PATH,
13
14
  DEFAULT_DATA_PATH,
@@ -140,7 +141,7 @@ def _prepare_data_and_domain_paths(args: argparse.Namespace) -> Tuple[Path, Path
140
141
  A tuple containing the domain path and a data path.
141
142
  """
142
143
  # Prepare domain path.
143
- domain_path = rasa.cli.utils.get_validated_path(
144
+ domain_path = get_validated_path(
144
145
  args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
145
146
  )
146
147
  domain_or_default_path = args.domain or DEFAULT_DOMAIN_PATH
@@ -152,7 +153,7 @@ def _prepare_data_and_domain_paths(args: argparse.Namespace) -> Tuple[Path, Path
152
153
  if isinstance(domain_path, str):
153
154
  domain_path = Path(domain_path)
154
155
 
155
- data_path = rasa.cli.utils.get_validated_path(
156
+ data_path = get_validated_path(
156
157
  args.data, "data", DEFAULT_DATA_PATH, none_is_valid=True
157
158
  )
158
159
 
rasa/studio/train.py CHANGED
@@ -4,13 +4,15 @@ import sys
4
4
  from pathlib import Path
5
5
  from typing import Any, List, Optional
6
6
 
7
- import rasa.cli.utils
8
- import rasa.shared.utils.cli
9
7
  from rasa.cli.train import (
10
8
  _model_for_finetuning,
11
9
  extract_core_additional_arguments,
12
10
  extract_nlu_additional_arguments,
13
11
  )
12
+ from rasa.cli.validation.config_path_validation import (
13
+ get_validated_config,
14
+ get_validated_path,
15
+ )
14
16
  from rasa.shared.constants import (
15
17
  CONFIG_MANDATORY_KEYS,
16
18
  DEFAULT_DATA_PATH,
@@ -41,10 +43,10 @@ def handle_train(args: argparse.Namespace) -> Optional[str]:
41
43
  else:
42
44
  handler.request_all_data()
43
45
 
44
- domain = rasa.cli.utils.get_validated_path(
46
+ domain = get_validated_path(
45
47
  args.domain, "domain", DEFAULT_DOMAIN_PATH, none_is_valid=True
46
48
  )
47
- config = rasa.cli.utils.get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
49
+ config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
48
50
  data_form_studio, data_original = import_data_from_studio(
49
51
  handler, domain, args.data
50
52
  )
@@ -58,9 +60,7 @@ def handle_train(args: argparse.Namespace) -> Optional[str]:
58
60
  )
59
61
 
60
62
  training_files = [
61
- rasa.cli.utils.get_validated_path(
62
- f, "data", DEFAULT_DATA_PATH, none_is_valid=True
63
- )
63
+ get_validated_path(f, "data", DEFAULT_DATA_PATH, none_is_valid=True)
64
64
  for f in args.data
65
65
  ]
66
66
  training_files.extend(studio_training_files)
@@ -68,6 +68,7 @@ def handle_train(args: argparse.Namespace) -> Optional[str]:
68
68
  training_result = train_all(
69
69
  domain=str(domain_file),
70
70
  config=config,
71
+ endpoints=args.endpoints,
71
72
  training_files=args.data,
72
73
  output=args.out,
73
74
  dry_run=args.dry_run,
rasa/studio/upload.py CHANGED
@@ -12,6 +12,7 @@ import rasa.cli.telemetry
12
12
  import rasa.cli.utils
13
13
  import rasa.shared.utils.cli
14
14
  import rasa.shared.utils.io
15
+ from rasa.cli.validation.config_path_validation import get_validated_path
15
16
  from rasa.shared.constants import (
16
17
  CONFIG_LANGUAGE_KEY,
17
18
  CONFIG_LLM_KEY,
@@ -155,13 +156,9 @@ def handle_upload(args: argparse.Namespace) -> None:
155
156
 
156
157
  structlogger.info("rasa.studio.upload.loading_data", event_info="Loading data...")
157
158
 
158
- args.domain = rasa.cli.utils.get_validated_path(
159
- args.domain, "domain", DEFAULT_DOMAIN_PATHS
160
- )
159
+ args.domain = get_validated_path(args.domain, "domain", DEFAULT_DOMAIN_PATHS)
161
160
 
162
- args.config = rasa.cli.utils.get_validated_path(
163
- args.config, "config", DEFAULT_CONFIG_PATH
164
- )
161
+ args.config = get_validated_path(args.config, "config", DEFAULT_CONFIG_PATH)
165
162
 
166
163
  config = read_yaml_file(args.config, expand_env_vars=False)
167
164
  assistant_name = args.assistant_name or _get_assistant_name(config)
rasa/telemetry.py CHANGED
@@ -31,7 +31,6 @@ from rasa.constants import (
31
31
  CONFIG_TELEMETRY_ENABLED,
32
32
  CONFIG_TELEMETRY_ID,
33
33
  )
34
- from rasa.engine.storage.local_model_storage import LocalModelStorage
35
34
  from rasa.privacy.privacy_config import AnonymizationType, PrivacyConfig
36
35
  from rasa.shared.constants import (
37
36
  ASSISTANT_ID_KEY,
@@ -50,6 +49,7 @@ from rasa.shared.constants import (
50
49
  UTTER_ASK_PREFIX,
51
50
  )
52
51
  from rasa.shared.core.flows import Flow
52
+ from rasa.shared.core.flows.flows_list import FlowsList
53
53
  from rasa.shared.core.flows.steps import (
54
54
  CallFlowStep,
55
55
  CollectInformationFlowStep,
@@ -61,9 +61,9 @@ from rasa.utils import common as rasa_utils
61
61
 
62
62
  if typing.TYPE_CHECKING:
63
63
  from rasa.core.agent import Agent
64
- from rasa.core.available_endpoints import AvailableEndpoints
65
64
  from rasa.core.brokers.broker import EventBroker
66
65
  from rasa.core.channels.channel import InputChannel
66
+ from rasa.core.config.available_endpoints import AvailableEndpoints
67
67
  from rasa.core.tracker_stores.tracker_store import TrackerStore
68
68
  from rasa.e2e_test.e2e_test_case import Fixture, Metadata, TestCase
69
69
  from rasa.shared.importers.importer import TrainingDataImporter
@@ -1056,7 +1056,7 @@ def track_model_training(
1056
1056
  "policies": config.get(CONFIG_POLICIES_KEY),
1057
1057
  "train_schema": config.get(CONFIG_TRAIN_SCHEMA),
1058
1058
  "predict_schema": config.get(CONFIG_PREDICT_SCHEMA),
1059
- "model_groups": rasa.core.utils.AvailableEndpoints.get_instance().model_groups,
1059
+ "model_groups": rasa.core.config.configuration.Configuration.get_instance().endpoints.model_groups, # noqa: E501
1060
1060
  "api_health_check_enabled": (
1061
1061
  os.getenv(
1062
1062
  LLM_API_HEALTH_CHECK_ENV_VAR, LLM_API_HEALTH_CHECK_DEFAULT_VALUE
@@ -1083,6 +1083,7 @@ def track_model_training(
1083
1083
  "num_regexes": len(nlu_data.regex_features),
1084
1084
  "is_finetuning": is_finetuning,
1085
1085
  "recipe": config.get(CONFIG_RECIPE_KEY),
1086
+ "agents": _collect_agent_configuration(flows),
1086
1087
  }
1087
1088
 
1088
1089
  flow_statistics = _collect_flow_statistics(flows.underlying_flows)
@@ -1125,6 +1126,67 @@ def track_model_training(
1125
1126
  )
1126
1127
 
1127
1128
 
1129
+ def _collect_agent_configuration(flows: FlowsList) -> Dict[str, Any]:
1130
+ agent_data: Dict[str, Any] = {}
1131
+
1132
+ from rasa.core.available_agents import AvailableAgents
1133
+ from rasa.core.config.configuration import Configuration
1134
+
1135
+ agents = AvailableAgents.get_instance().agents
1136
+ mcp_servers = Configuration.get_instance().endpoints.mcp_servers
1137
+
1138
+ if not agents and not mcp_servers:
1139
+ return agent_data
1140
+
1141
+ agent_data["usage"] = []
1142
+
1143
+ for flow in flows.underlying_flows:
1144
+ for step in flow.steps:
1145
+ if isinstance(step, CallFlowStep):
1146
+ if flows.flow_by_id(step.call) is not None:
1147
+ continue
1148
+
1149
+ if step.is_calling_mcp_tool():
1150
+ agent_data["usage"].append(
1151
+ {
1152
+ "flow": flow.id,
1153
+ "mcp_tool": step.call,
1154
+ "mcp_server": step.mcp_server,
1155
+ "mapping": step.mapping,
1156
+ }
1157
+ )
1158
+
1159
+ if step.is_calling_agent():
1160
+ if step.exit_if:
1161
+ agent_data["usage"].append(
1162
+ {
1163
+ "flow": flow.id,
1164
+ "agent": step.call,
1165
+ "exit_if": step.exit_if,
1166
+ }
1167
+ )
1168
+ else:
1169
+ agent_data["usage"].append(
1170
+ {
1171
+ "flow": flow.id,
1172
+ "agent": step.call,
1173
+ }
1174
+ )
1175
+
1176
+ # dump mcp_servers and agents as json and exclude any values that are None
1177
+ if mcp_servers:
1178
+ agent_data["mcp_servers"] = [
1179
+ mcp_server.model_dump(exclude_none=True) for mcp_server in mcp_servers
1180
+ ]
1181
+ if agents:
1182
+ agent_data["agents"] = [
1183
+ {agent_name: agent_info.model_dump(exclude_none=True)}
1184
+ for agent_name, agent_info in agents.items()
1185
+ ]
1186
+
1187
+ return agent_data
1188
+
1189
+
1128
1190
  def _collect_flow_statistics(flows: List[Flow]) -> Dict[str, Any]:
1129
1191
  """Collects some statistics about the flows, such as number of specific steps."""
1130
1192
  data = {
@@ -1430,7 +1492,7 @@ def track_server_start(
1430
1492
  number_of_workers: number of used Sanic workers
1431
1493
  is_api_enabled: whether the rasa API server is enabled
1432
1494
  """
1433
- from rasa.core.available_endpoints import AvailableEndpoints
1495
+ from rasa.core.config.available_endpoints import AvailableEndpoints
1434
1496
 
1435
1497
  def project_fingerprint_and_assistant_id_from_model(
1436
1498
  _model_directory: Optional[Text],
@@ -1441,7 +1503,9 @@ def track_server_start(
1441
1503
 
1442
1504
  try:
1443
1505
  model_archive = model.get_local_model(_model_directory)
1444
- metadata = LocalModelStorage.metadata_from_archive(model_archive)
1506
+ metadata = rasa.engine.storage.local_model_storage.LocalModelStorage.metadata_from_archive( # noqa: E501
1507
+ model_archive
1508
+ )
1445
1509
 
1446
1510
  return metadata.project_fingerprint, metadata.assistant_id
1447
1511
  except Exception:
rasa/tracing/config.py CHANGED
@@ -6,7 +6,6 @@ import os
6
6
  from typing import Any, Dict, Optional, Text
7
7
 
8
8
  import grpc
9
- from opentelemetry.exporter.jaeger.thrift import JaegerExporter
10
9
  from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
11
10
  from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
12
11
  from opentelemetry.metrics import set_meter_provider
@@ -16,6 +15,9 @@ from opentelemetry.sdk.resources import SERVICE_NAME, Resource
16
15
  from opentelemetry.sdk.trace import TracerProvider
17
16
  from opentelemetry.sdk.trace.export import BatchSpanProcessor
18
17
 
18
+ from rasa.agents.protocol.a2a.a2a_agent import A2AAgent
19
+ from rasa.agents.protocol.mcp.mcp_open_agent import MCPOpenAgent
20
+ from rasa.agents.protocol.mcp.mcp_task_agent import MCPTaskAgent
19
21
  from rasa.core.actions.custom_action_executor import (
20
22
  CustomActionExecutor,
21
23
  RetryCustomActionExecutor,
@@ -93,6 +95,9 @@ def configure_tracing(tracer_provider: Optional[TracerProvider]) -> None:
93
95
  if custom_action_executor_class != RetryCustomActionExecutor:
94
96
  custom_action_executor_subclasses.append(custom_action_executor_class)
95
97
 
98
+ # All agent classes to instrument (protocol agent classes)
99
+ agent_classes = [MCPOpenAgent, MCPTaskAgent, A2AAgent]
100
+
96
101
  instrumentation.instrument(
97
102
  tracer_provider=tracer_provider,
98
103
  agent_class=Agent,
@@ -114,6 +119,7 @@ def configure_tracing(tracer_provider: Optional[TracerProvider]) -> None:
114
119
  multi_step_llm_command_generator_class=MultiStepLLMCommandGenerator,
115
120
  custom_action_executor_subclasses=custom_action_executor_subclasses,
116
121
  flow_retrieval_class=FlowRetrieval,
122
+ subagent_classes=agent_classes,
117
123
  )
118
124
 
119
125
 
@@ -172,19 +178,35 @@ class TracerConfigurer(abc.ABC):
172
178
 
173
179
 
174
180
  class JaegerTracerConfigurer(TracerConfigurer):
175
- """The `TracerConfigurer` for a Jaeger backend."""
181
+ """The `TracerConfigurer` for a Jaeger backend.
182
+
183
+ This class maintains backward compatibility with the old Jaeger configuration format
184
+ while internally using OTLP to avoid protobuf compatibility issues.
185
+ """
176
186
 
177
187
  @classmethod
178
188
  def configure_from_endpoint_config(cls, cfg: EndpointConfig) -> TracerProvider:
179
- """Configure tracing for Jaeger.
189
+ """Configure tracing for Jaeger using OTLP under the hood.
180
190
 
181
- This will read the Jaeger-specific configuration from the `EndpointConfig` and
182
- create a corresponding `TracerProvider` that exports to the given Jaeger
183
- backend.
191
+ This maintains backward compatibility with the old Jaeger configuration format
192
+ while using OTLP internally to avoid protobuf compatibility issues.
184
193
 
185
194
  :param cfg: The configuration to be read for configuring tracing.
186
195
  :return: The configured `TracerProvider`.
187
196
  """
197
+ # Extract Jaeger-specific configuration
198
+ jaeger_config = cls._extract_config(cfg)
199
+
200
+ # Map Jaeger configuration to OTLP endpoint
201
+ otlp_endpoint = f"http://{jaeger_config['agent_host_name']}:{jaeger_config.get('agent_port', 4317)}" # noqa: E501
202
+
203
+ # Create OTLP exporter with Jaeger-compatible configuration
204
+ otlp_exporter = OTLPSpanExporter(
205
+ endpoint=otlp_endpoint,
206
+ insecure=True, # Jaeger typically runs without TLS in development
207
+ headers=cls._build_headers(jaeger_config),
208
+ )
209
+
188
210
  provider = TracerProvider(
189
211
  resource=Resource.create(
190
212
  {
@@ -195,19 +217,17 @@ class JaegerTracerConfigurer(TracerConfigurer):
195
217
  )
196
218
  )
197
219
 
198
- jaeger_exporter = JaegerExporter(
199
- **cls._extract_config(cfg), udp_split_oversized_batches=True
200
- )
201
220
  logger.info(
202
- f"Registered {cfg.type} endpoint for tracing. Traces will be exported to"
203
- f" {jaeger_exporter.agent_host_name}:{jaeger_exporter.agent_port}"
221
+ f"Registered {cfg.type} endpoint for tracing using OTLP. "
222
+ f"Traces will be exported to {otlp_endpoint}."
204
223
  )
205
- provider.add_span_processor(BatchSpanProcessor(jaeger_exporter))
224
+ provider.add_span_processor(BatchSpanProcessor(otlp_exporter))
206
225
 
207
226
  return provider
208
227
 
209
228
  @classmethod
210
229
  def _extract_config(cls, cfg: EndpointConfig) -> Dict[str, Any]:
230
+ """Extract Jaeger configuration parameters."""
211
231
  return {
212
232
  "agent_host_name": (cfg.kwargs.get("host", "localhost")),
213
233
  "agent_port": (cfg.kwargs.get("port", 6831)),
@@ -215,6 +235,19 @@ class JaegerTracerConfigurer(TracerConfigurer):
215
235
  "password": cfg.kwargs.get("password"),
216
236
  }
217
237
 
238
+ @classmethod
239
+ def _build_headers(cls, jaeger_config: Dict[str, Any]) -> Optional[Dict[str, str]]:
240
+ """Build OTLP headers from Jaeger authentication config."""
241
+ headers = {}
242
+ if jaeger_config.get("username") and jaeger_config.get("password"):
243
+ import base64
244
+
245
+ credentials = base64.b64encode(
246
+ f"{jaeger_config['username']}:{jaeger_config['password']}".encode()
247
+ ).decode()
248
+ headers["Authorization"] = f"Basic {credentials}"
249
+ return headers if headers else None
250
+
218
251
 
219
252
  class OTLPCollectorConfigurer(TracerConfigurer):
220
253
  """The `TracerConfigurer` for an OTLP collector backend."""