rasa-pro 3.14.0.dev6__py3-none-any.whl → 3.14.0.dev8__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 (491) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/exceptions.py +31 -1
  4. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  5. rasa/agents/protocol/mcp/mcp_base_agent.py +37 -19
  6. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  7. rasa/agents/protocol/mcp/mcp_task_agent.py +33 -10
  8. rasa/agents/schemas/agent_output.py +1 -1
  9. rasa/agents/utils.py +95 -1
  10. rasa/agents/validation.py +484 -0
  11. rasa/api.py +9 -6
  12. rasa/builder/README.md +120 -0
  13. rasa/builder/__init__.py +0 -0
  14. rasa/builder/auth.py +176 -0
  15. rasa/builder/config.py +92 -0
  16. rasa/builder/copilot/__init__.py +0 -0
  17. rasa/builder/copilot/constants.py +31 -0
  18. rasa/builder/copilot/copilot.py +450 -0
  19. rasa/builder/copilot/copilot_response_handler.py +522 -0
  20. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  21. rasa/builder/copilot/exceptions.py +32 -0
  22. rasa/builder/copilot/models.py +500 -0
  23. rasa/builder/copilot/prompts/__init__.py +0 -0
  24. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  25. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  26. rasa/builder/copilot/signing.py +305 -0
  27. rasa/builder/copilot/telemetry.py +210 -0
  28. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  29. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  30. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  31. rasa/builder/document_retrieval/__init__.py +0 -0
  32. rasa/builder/document_retrieval/constants.py +15 -0
  33. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  34. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  35. rasa/builder/document_retrieval/models.py +62 -0
  36. rasa/builder/download.py +140 -0
  37. rasa/builder/exceptions.py +91 -0
  38. rasa/builder/guardrails/__init__.py +1 -0
  39. rasa/builder/guardrails/constants.py +9 -0
  40. rasa/builder/guardrails/exceptions.py +4 -0
  41. rasa/builder/guardrails/lakera.py +206 -0
  42. rasa/builder/guardrails/models.py +231 -0
  43. rasa/builder/guardrails/store.py +238 -0
  44. rasa/builder/guardrails/utils.py +328 -0
  45. rasa/builder/job_manager.py +87 -0
  46. rasa/builder/jobs.py +282 -0
  47. rasa/builder/llm_service.py +246 -0
  48. rasa/builder/logging_utils.py +265 -0
  49. rasa/builder/main.py +243 -0
  50. rasa/builder/models.py +216 -0
  51. rasa/builder/project_generator.py +458 -0
  52. rasa/builder/project_info.py +72 -0
  53. rasa/builder/scrape_rasa_docs.py +97 -0
  54. rasa/builder/service.py +1345 -0
  55. rasa/builder/shared/tracker_context.py +212 -0
  56. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  57. rasa/builder/template_cache.py +244 -0
  58. rasa/builder/training_service.py +194 -0
  59. rasa/builder/validation_service.py +97 -0
  60. rasa/cli/arguments/train.py +2 -0
  61. rasa/cli/interactive.py +2 -0
  62. rasa/cli/project_templates/basic/README.md +23 -0
  63. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  64. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  65. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  66. rasa/cli/project_templates/basic/config.yml +29 -0
  67. rasa/cli/project_templates/basic/credentials.yml +33 -0
  68. rasa/cli/project_templates/basic/data/data.md +9 -0
  69. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  70. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  71. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  72. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  73. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  74. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  75. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  76. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  77. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  78. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  79. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  80. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  81. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  82. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  83. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  84. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  85. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  86. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  87. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  88. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  89. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  90. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  91. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  92. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  93. rasa/cli/project_templates/default/config.yml +4 -0
  94. rasa/cli/project_templates/default/endpoints.yml +4 -0
  95. rasa/cli/project_templates/finance/README.md +25 -0
  96. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  97. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  99. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  100. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  101. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  102. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  104. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  105. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  106. rasa/cli/project_templates/finance/actions/database.py +277 -0
  107. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  112. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  113. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  114. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  115. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  116. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  117. rasa/cli/project_templates/finance/config.yml +23 -0
  118. rasa/cli/project_templates/finance/credentials.yml +32 -0
  119. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  120. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  121. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  122. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  123. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  124. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  125. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  126. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  127. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  128. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  129. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  130. rasa/cli/project_templates/finance/data/data.md +11 -0
  131. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  132. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  133. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  134. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  135. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  136. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  137. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  138. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  139. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  140. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  141. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  142. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  143. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  144. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  145. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  146. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  147. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  148. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  149. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  150. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  151. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  152. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  153. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  154. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  171. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  172. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  173. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  174. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  231. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  232. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  233. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  234. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  235. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  236. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  237. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  238. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  239. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  240. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  241. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  243. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  244. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  245. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  246. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  247. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  248. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  249. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  250. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  251. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  252. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  253. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  254. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  255. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  256. rasa/cli/project_templates/telco/README.md +25 -0
  257. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  258. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  259. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  260. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  261. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  262. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  263. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  264. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  265. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  266. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  267. rasa/cli/project_templates/telco/config.yml +29 -0
  268. rasa/cli/project_templates/telco/credentials.yml +33 -0
  269. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  270. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  271. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  272. rasa/cli/project_templates/telco/data/data.md +11 -0
  273. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  274. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  275. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  276. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  277. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  278. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  279. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  280. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  281. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  282. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  283. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  284. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  285. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  286. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  287. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  288. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  289. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  290. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  291. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  292. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  293. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  294. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  295. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  296. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  297. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  298. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  299. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  300. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  304. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  305. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  306. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  307. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  308. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  309. rasa/cli/project_templates/tutorial/config.yml +2 -1
  310. rasa/cli/scaffold.py +46 -2
  311. rasa/cli/train.py +2 -0
  312. rasa/cli/utils.py +85 -1
  313. rasa/core/actions/action.py +2 -7
  314. rasa/core/available_agents.py +49 -26
  315. rasa/core/available_endpoints.py +17 -2
  316. rasa/core/channels/channel.py +4 -3
  317. rasa/core/channels/constants.py +3 -0
  318. rasa/core/channels/development_inspector.py +2 -22
  319. rasa/core/channels/inspector/README.md +26 -14
  320. rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-edef10dd.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  324. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  327. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  333. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-790ef78b.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-ecdce073.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  339. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-837fd3aa.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-7e05afcb.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-162eb295.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-b5b53234.js} +1 -1
  353. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-13d138e5.js} +1 -1
  354. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-94cbde3f.js} +1 -1
  355. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  356. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  357. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  358. rasa/core/channels/inspector/dist/index.html +2 -2
  359. rasa/core/channels/inspector/index.html +1 -1
  360. rasa/core/channels/inspector/src/App.tsx +42 -44
  361. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  362. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  363. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +8 -8
  364. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  365. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  366. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  367. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  368. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  369. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  370. rasa/core/channels/inspector/src/types.ts +49 -7
  371. rasa/core/channels/socketio.py +212 -51
  372. rasa/core/channels/studio_chat.py +59 -57
  373. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  374. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  375. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  376. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  377. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  378. rasa/core/channels/voice_stream/genesys.py +2 -1
  379. rasa/core/channels/voice_stream/jambonz.py +9 -1
  380. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  381. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  382. rasa/core/constants.py +6 -0
  383. rasa/core/iam_credentials_providers/__init__.py +0 -0
  384. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  385. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  386. rasa/core/policies/enterprise_search_policy.py +4 -7
  387. rasa/core/policies/flows/flow_executor.py +66 -36
  388. rasa/core/policies/ted_policy.py +7 -5
  389. rasa/core/processor.py +32 -0
  390. rasa/core/redis_connection_factory.py +411 -0
  391. rasa/core/run.py +13 -3
  392. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  393. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  394. rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -81
  395. rasa/dialogue_understanding/commands/start_flow_command.py +18 -113
  396. rasa/dialogue_understanding/commands/utils.py +118 -0
  397. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  398. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  399. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  400. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  401. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  402. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  403. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  404. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  405. rasa/dialogue_understanding/patterns/continue_interrupted.py +185 -114
  406. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +18 -24
  407. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  408. rasa/dialogue_understanding/stack/utils.py +43 -4
  409. rasa/dialogue_understanding/utils.py +24 -4
  410. rasa/engine/graph.py +5 -1
  411. rasa/engine/recipes/default_components.py +78 -10
  412. rasa/engine/recipes/default_recipe.py +41 -1
  413. rasa/engine/storage/local_model_storage.py +83 -3
  414. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  415. rasa/model_manager/model_api.py +4 -5
  416. rasa/model_manager/runner_service.py +1 -1
  417. rasa/model_manager/socket_bridge.py +20 -15
  418. rasa/model_manager/trainer_service.py +12 -9
  419. rasa/model_manager/utils.py +1 -29
  420. rasa/model_manager/warm_rasa_process.py +1 -1
  421. rasa/model_training.py +22 -6
  422. rasa/nlu/classifiers/diet_classifier.py +22 -6
  423. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  424. rasa/nlu/extractors/extractor.py +1 -2
  425. rasa/shared/agents/auth/__init__.py +0 -0
  426. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  427. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  428. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  429. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  430. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  431. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  432. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  433. rasa/shared/agents/auth/constants.py +11 -0
  434. rasa/shared/agents/auth/types.py +11 -0
  435. rasa/shared/constants.py +3 -0
  436. rasa/shared/core/constants.py +6 -6
  437. rasa/shared/core/domain.py +58 -11
  438. rasa/shared/core/events.py +2 -0
  439. rasa/shared/core/flows/constants.py +5 -0
  440. rasa/shared/core/flows/flow_step.py +7 -1
  441. rasa/shared/core/flows/flows_list.py +6 -0
  442. rasa/shared/core/flows/steps/call.py +15 -12
  443. rasa/shared/core/flows/validation.py +238 -44
  444. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  445. rasa/shared/core/slots.py +4 -0
  446. rasa/shared/exceptions.py +12 -0
  447. rasa/shared/importers/importer.py +6 -0
  448. rasa/shared/importers/utils.py +77 -1
  449. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  450. rasa/shared/providers/_utils.py +60 -44
  451. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  452. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  453. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  454. rasa/shared/providers/llm/llm_response.py +4 -4
  455. rasa/shared/utils/common.py +24 -0
  456. rasa/shared/utils/health_check/health_check.py +7 -3
  457. rasa/shared/utils/llm.py +2 -1
  458. rasa/shared/utils/mcp/server_connection.py +108 -27
  459. rasa/shared/utils/mcp/utils.py +20 -0
  460. rasa/studio/upload.py +16 -47
  461. rasa/telemetry.py +97 -23
  462. rasa/tracing/config.py +38 -12
  463. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  464. rasa/tracing/instrumentation/instrumentation.py +85 -8
  465. rasa/utils/common.py +1 -1
  466. rasa/utils/io.py +27 -9
  467. rasa/utils/json_utils.py +6 -1
  468. rasa/utils/log_utils.py +5 -1
  469. rasa/utils/openapi.py +144 -0
  470. rasa/utils/tensorflow/__init__.py +29 -0
  471. rasa/utils/tensorflow/callback.py +1 -1
  472. rasa/utils/tensorflow/crf.py +1 -1
  473. rasa/utils/tensorflow/data_generator.py +21 -8
  474. rasa/utils/tensorflow/layers.py +11 -4
  475. rasa/utils/tensorflow/metrics.py +7 -3
  476. rasa/utils/tensorflow/models.py +41 -6
  477. rasa/utils/tensorflow/rasa_layers.py +6 -4
  478. rasa/utils/tensorflow/transformer.py +2 -3
  479. rasa/utils/train_utils.py +68 -38
  480. rasa/validator.py +18 -16
  481. rasa/version.py +1 -1
  482. rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
  483. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +486 -173
  484. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
  485. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
  486. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
  487. rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
  488. rasa_pro-3.14.0.dev6.dist-info/METADATA +0 -190
  489. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
  490. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
  491. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
@@ -10,7 +10,7 @@ from mcp import ListToolsResult
10
10
  from rasa.agents.constants import (
11
11
  AGENT_DEFAULT_MAX_RETRIES,
12
12
  AGENT_DEFAULT_TIMEOUT_SECONDS,
13
- AGENT_METADATA_TOOL_RESULTS_KEY,
13
+ AGENT_METADATA_STRUCTURED_RESULTS_KEY,
14
14
  KEY_ARGUMENTS,
15
15
  KEY_CONTENT,
16
16
  KEY_FUNCTION,
@@ -45,7 +45,7 @@ from rasa.shared.constants import (
45
45
  TIMEOUT_CONFIG_KEY,
46
46
  )
47
47
  from rasa.shared.core.events import BotUttered, UserUttered
48
- from rasa.shared.exceptions import AgentInitializationException
48
+ from rasa.shared.exceptions import AgentInitializationException, AuthenticationError
49
49
  from rasa.shared.providers.llm.llm_response import LLMResponse, LLMToolCall
50
50
  from rasa.shared.utils.constants import LOG_COMPONENT_SOURCE_METHOD_INIT
51
51
  from rasa.shared.utils.llm import (
@@ -253,7 +253,8 @@ class MCPBaseAgent(AgentProtocol):
253
253
  except ConnectionError as ce:
254
254
  structlogger.warning(
255
255
  "mcp_agent.connect.connection_error",
256
- event_info=f"Connection attempt {attempt} failed: {ce}",
256
+ event_info=f"Connection attempt {attempt} failed.",
257
+ error=str(ce),
257
258
  attempt=attempt,
258
259
  max_retries=self._max_retries,
259
260
  )
@@ -266,10 +267,14 @@ class MCPBaseAgent(AgentProtocol):
266
267
  f"Failed to connect to MCP servers after {self._max_retries} "
267
268
  f"attempts. Agent `{self._name}` failed to initialize."
268
269
  ) from ce
269
- except Exception as e:
270
+ except (Exception, AuthenticationError) as e:
271
+ if isinstance(e, AuthenticationError):
272
+ event_info = "Authentication error during agent initialization."
273
+ else:
274
+ event_info = "Unexpected error during agent initialization."
270
275
  structlogger.error(
271
276
  "mcp_agent.connect.unexpected_exception",
272
- event_info="Unexpected error during agent initialization.",
277
+ event_info=event_info,
273
278
  error=str(e),
274
279
  agent_name=self._name,
275
280
  agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
@@ -296,7 +301,7 @@ class MCPBaseAgent(AgentProtocol):
296
301
  except Exception as e:
297
302
  event_info = (
298
303
  f"Agent `{self._name}` failed to connect to MCP server - "
299
- f"{server_name} @ {server_config.url}: {e}"
304
+ f"`{server_name}` @ `{server_config.url}`: {e!s}"
300
305
  )
301
306
  structlogger.error(
302
307
  "mcp_agent.connect.failed_to_connect",
@@ -306,7 +311,7 @@ class MCPBaseAgent(AgentProtocol):
306
311
  agent_name=self._name,
307
312
  agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
308
313
  )
309
- raise ConnectionError(e)
314
+ raise e
310
315
 
311
316
  async def connect_to_servers(self) -> None:
312
317
  """Connect to MCP servers."""
@@ -333,7 +338,7 @@ class MCPBaseAgent(AgentProtocol):
333
338
  except Exception as e:
334
339
  structlogger.error(
335
340
  "mcp_agent.disconnect_server.error",
336
- event_info=f"Failed to disconnect from server `{server_name}`: {e}",
341
+ event_info=f"Failed to disconnect from server `{server_name}`: {e!s}",
337
342
  server_name=server_name,
338
343
  agent_name=self._name,
339
344
  agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
@@ -548,6 +553,19 @@ class MCPBaseAgent(AgentProtocol):
548
553
  KEY_CONTENT: tool_response.response_message,
549
554
  }
550
555
 
556
+ def _get_system_message_for_malformed_tool_response(self) -> Dict[str, Any]:
557
+ """Get the system message for a malformed tool response."""
558
+ system_message = (
559
+ "The previous tool response contained invalid or incomplete JSON and could"
560
+ "not be parsed. Retry by generating a tool response in STRICT JSON string "
561
+ "format only. Ensure the JSON is fully well-formed and corresponds exactly "
562
+ "to the user's last request."
563
+ )
564
+ return {
565
+ KEY_ROLE: ROLE_SYSTEM,
566
+ KEY_CONTENT: system_message,
567
+ }
568
+
551
569
  # ============================================================================
552
570
  # Tool Execution
553
571
  # ============================================================================
@@ -566,8 +584,8 @@ class MCPBaseAgent(AgentProtocol):
566
584
 
567
585
  server_id = self._tool_to_server_mapper[tool_name]
568
586
  connection = self._server_connections[server_id]
569
- session = await connection.ensure_active_session()
570
587
  try:
588
+ session = await connection.ensure_active_session()
571
589
  result = await session.call_tool(tool_name, arguments)
572
590
  return AgentToolResult.from_mcp_tool_result(tool_name, result)
573
591
  except Exception as e:
@@ -577,7 +595,7 @@ class MCPBaseAgent(AgentProtocol):
577
595
  is_error=True,
578
596
  error_message=(
579
597
  f"Failed to execute tool `{tool_name}` via MCP server `{server_id}`"
580
- f"@ {connection.server_url}: {e}"
598
+ f" @ `{connection.server_url}`: {e!s}"
581
599
  ),
582
600
  )
583
601
 
@@ -606,7 +624,7 @@ class MCPBaseAgent(AgentProtocol):
606
624
  tool_name=tool_name,
607
625
  result=None,
608
626
  is_error=True,
609
- error_message=f"Failed to execute built-in tool `{tool_name}`: {e}",
627
+ error_message=f"Failed to execute built-in tool `{tool_name}`: {e!s}",
610
628
  )
611
629
  return await self._execute_mcp_tool(tool_name, arguments)
612
630
 
@@ -639,24 +657,24 @@ class MCPBaseAgent(AgentProtocol):
639
657
  error_message=tool_output.error_message,
640
658
  )
641
659
 
642
- def _get_tool_results_for_agent_output(
660
+ def _get_structured_results_for_agent_output(
643
661
  self,
644
662
  agent_input: AgentInput,
645
663
  current_tool_results: Dict[str, AgentToolResult],
646
664
  ) -> List[List[Dict[str, Any]]]:
647
665
  """Get the tool results for the agent output."""
648
- tool_results_of_current_iteration: List[Dict[str, Any]] = []
666
+ structured_results_of_current_iteration: List[Dict[str, Any]] = []
649
667
  for tool_result in current_tool_results.values():
650
- tool_results_of_current_iteration.append(
651
- {"tool_name": tool_result.tool_name, "result": tool_result.result}
668
+ structured_results_of_current_iteration.append(
669
+ {"name": tool_result.tool_name, "result": tool_result.result}
652
670
  )
653
671
 
654
- previous_tool_results: List[List[Dict[str, Any]]] = (
655
- agent_input.metadata.get(AGENT_METADATA_TOOL_RESULTS_KEY, []) or []
672
+ previous_structured_results: List[List[Dict[str, Any]]] = (
673
+ agent_input.metadata.get(AGENT_METADATA_STRUCTURED_RESULTS_KEY, []) or []
656
674
  )
657
- previous_tool_results.append(tool_results_of_current_iteration)
675
+ previous_structured_results.append(structured_results_of_current_iteration)
658
676
 
659
- return previous_tool_results
677
+ return previous_structured_results
660
678
 
661
679
  # ============================================================================
662
680
  # Core Protocol Methods
@@ -31,6 +31,10 @@ from rasa.shared.agents.utils import make_agent_identifier
31
31
  from rasa.shared.constants import (
32
32
  ROLE_TOOL,
33
33
  )
34
+ from rasa.shared.exceptions import (
35
+ LLMToolResponseDecodeError,
36
+ ProviderClientAPIException,
37
+ )
34
38
  from rasa.shared.providers.llm.llm_response import LLMResponse, LLMToolCall
35
39
 
36
40
  DEFAULT_OPEN_AGENT_PROMPT_TEMPLATE = importlib.resources.read_text(
@@ -130,7 +134,7 @@ class MCPOpenAgent(MCPBaseAgent):
130
134
  id=agent_input.id,
131
135
  status=AgentStatus.COMPLETED,
132
136
  response_message=tool_result.result,
133
- tool_results=self._get_tool_results_for_agent_output(
137
+ structured_results=self._get_structured_results_for_agent_output(
134
138
  agent_input, tool_results
135
139
  ),
136
140
  )
@@ -178,7 +182,7 @@ class MCPOpenAgent(MCPBaseAgent):
178
182
  id=agent_input.id,
179
183
  status=AgentStatus.RECOVERABLE_ERROR,
180
184
  error_message=event_info,
181
- tool_results=self._get_tool_results_for_agent_output(
185
+ structured_results=self._get_structured_results_for_agent_output(
182
186
  agent_input, tool_results
183
187
  ),
184
188
  )
@@ -189,7 +193,7 @@ class MCPOpenAgent(MCPBaseAgent):
189
193
  id=agent_input.id,
190
194
  status=AgentStatus.INPUT_REQUIRED,
191
195
  response_message=llm_response.choices[0],
192
- tool_results=self._get_tool_results_for_agent_output(
196
+ structured_results=self._get_structured_results_for_agent_output(
193
197
  agent_input, tool_results
194
198
  ),
195
199
  )
@@ -258,9 +262,28 @@ class MCPOpenAgent(MCPBaseAgent):
258
262
  )
259
263
 
260
264
  except Exception as e:
261
- # TODO: To log the ProviderClientAPIException separately, so that
262
- # malformed tool responses automatically trigger a retry, and are
263
- # not cached.
265
+ if isinstance(e, ProviderClientAPIException) and isinstance(
266
+ e.original_exception, LLMToolResponseDecodeError
267
+ ):
268
+ structlogger.debug(
269
+ "mcp_open_agent.send_message.malformed_tool_response_error",
270
+ event_info=(
271
+ "Malformed tool response received from LLM "
272
+ "(JSON decode error). Retrying the LLM call."
273
+ ),
274
+ user_message=agent_input.user_message,
275
+ agent_name=self._name,
276
+ agent_id=str(
277
+ make_agent_identifier(self._name, self.protocol_type)
278
+ ),
279
+ original_exception=str(e.original_exception),
280
+ )
281
+ # Continue to make another LLM call by breaking out of the current
282
+ # iteration and letting the loop continue with a fresh LLM request
283
+ messages.append(
284
+ self._get_system_message_for_malformed_tool_response()
285
+ )
286
+ continue
264
287
  structlogger.error(
265
288
  "mcp_open_agent.send_message.error_in_agent_loop",
266
289
  event_info=f"Failed to send message: {e}",
@@ -272,7 +295,7 @@ class MCPOpenAgent(MCPBaseAgent):
272
295
  id=agent_input.id,
273
296
  status=AgentStatus.FATAL_ERROR,
274
297
  response_message=f"I encountered an error: {e!s}",
275
- tool_results=self._get_tool_results_for_agent_output(
298
+ structured_results=self._get_structured_results_for_agent_output(
276
299
  agent_input, tool_results
277
300
  ),
278
301
  error_message=str(e),
@@ -284,7 +307,7 @@ class MCPOpenAgent(MCPBaseAgent):
284
307
  "I've completed my research but couldn't provide a final answer within"
285
308
  "the allowed steps."
286
309
  ),
287
- tool_results=self._get_tool_results_for_agent_output(
310
+ structured_results=self._get_structured_results_for_agent_output(
288
311
  agent_input, tool_results
289
312
  ),
290
313
  )
@@ -27,6 +27,10 @@ from rasa.shared.constants import (
27
27
  ROLE_TOOL,
28
28
  )
29
29
  from rasa.shared.core.events import SlotSet
30
+ from rasa.shared.exceptions import (
31
+ LLMToolResponseDecodeError,
32
+ ProviderClientAPIException,
33
+ )
30
34
  from rasa.shared.providers.llm.llm_response import LLMResponse
31
35
 
32
36
  DEFAULT_TASK_AGENT_PROMPT_TEMPLATE = importlib.resources.read_text(
@@ -98,7 +102,7 @@ class MCPTaskAgent(MCPBaseAgent):
98
102
  for name in re.findall(r"\bslots\.(\w+)", condition)
99
103
  }
100
104
 
101
- slot_names = agent_input.slot_names
105
+ slot_names = [slot.name for slot in agent_input.slots]
102
106
 
103
107
  # Keep only slots that actually exist in agent_input.slots
104
108
  valid_slot_names = [
@@ -241,7 +245,7 @@ class MCPTaskAgent(MCPBaseAgent):
241
245
  for slot_name, slot_value in slots.items()
242
246
  if slot_name in _slot_names_to_be_filled
243
247
  ],
244
- tool_results=self._get_tool_results_for_agent_output(
248
+ structured_results=self._get_structured_results_for_agent_output(
245
249
  agent_input, tool_results
246
250
  ),
247
251
  )
@@ -303,7 +307,7 @@ class MCPTaskAgent(MCPBaseAgent):
303
307
  id=agent_input.id,
304
308
  status=AgentStatus.RECOVERABLE_ERROR,
305
309
  error_message=event_info,
306
- tool_results=self._get_tool_results_for_agent_output(
310
+ structured_results=self._get_structured_results_for_agent_output(
307
311
  agent_input, tool_results
308
312
  ),
309
313
  )
@@ -314,7 +318,7 @@ class MCPTaskAgent(MCPBaseAgent):
314
318
  id=agent_input.id,
315
319
  status=AgentStatus.INPUT_REQUIRED,
316
320
  response_message=llm_response.choices[0],
317
- tool_results=self._get_tool_results_for_agent_output(
321
+ structured_results=self._get_structured_results_for_agent_output(
318
322
  agent_input, tool_results
319
323
  ),
320
324
  )
@@ -445,16 +449,35 @@ class MCPTaskAgent(MCPBaseAgent):
445
449
  "An internal error occurred while checking the "
446
450
  "exit conditions."
447
451
  ),
448
- tool_results=self._get_tool_results_for_agent_output(
452
+ structured_results=self._get_structured_results_for_agent_output(
449
453
  agent_input, tool_results
450
454
  ),
451
455
  error_message=internal_error,
452
456
  )
453
457
 
454
458
  except Exception as e:
455
- # TODO: To log the ProviderClientAPIException separately, so that
456
- # malformed tool responses automatically trigger a retry, and are
457
- # not cached.
459
+ if isinstance(e, ProviderClientAPIException) and isinstance(
460
+ e.original_exception, LLMToolResponseDecodeError
461
+ ):
462
+ structlogger.debug(
463
+ "mcp_task_agent.send_message.malformed_tool_response_error",
464
+ event_info=(
465
+ "Malformed tool response received from LLM "
466
+ "(JSON decode error). Retrying the LLM call."
467
+ ),
468
+ user_message=agent_input.user_message,
469
+ agent_name=self._name,
470
+ agent_id=str(
471
+ make_agent_identifier(self._name, self.protocol_type)
472
+ ),
473
+ original_exception=str(e.original_exception),
474
+ )
475
+ # Continue to make another LLM call by breaking out of the current
476
+ # iteration and letting the loop continue with a fresh LLM request
477
+ messages.append(
478
+ self._get_system_message_for_malformed_tool_response()
479
+ )
480
+ continue
458
481
  structlogger.error(
459
482
  "mcp_task_agent.send_message.error_in_agent_loop",
460
483
  event_info=f"Failed to send message: {e}",
@@ -466,7 +489,7 @@ class MCPTaskAgent(MCPBaseAgent):
466
489
  id=agent_input.id,
467
490
  status=AgentStatus.FATAL_ERROR,
468
491
  response_message=f"I encountered an error: {e!s}",
469
- tool_results=self._get_tool_results_for_agent_output(
492
+ structured_results=self._get_structured_results_for_agent_output(
470
493
  agent_input, tool_results
471
494
  ),
472
495
  error_message=str(e),
@@ -478,7 +501,7 @@ class MCPTaskAgent(MCPBaseAgent):
478
501
  "I've completed my research but couldn't provide a final answer within"
479
502
  "the allowed steps."
480
503
  ),
481
- tool_results=self._get_tool_results_for_agent_output(
504
+ structured_results=self._get_structured_results_for_agent_output(
482
505
  agent_input, tool_results
483
506
  ),
484
507
  )
@@ -13,7 +13,7 @@ class AgentOutput(BaseModel):
13
13
  status: AgentStatus
14
14
  response_message: Optional[str] = None
15
15
  events: Optional[List[SlotSet]] = None
16
- tool_results: Optional[List[List[Dict[str, Any]]]] = None
16
+ structured_results: Optional[List[List[Dict[str, Any]]]] = None
17
17
  metadata: Optional[Dict[str, Any]] = None
18
18
  timestamp: Optional[str] = None
19
19
  error_message: Optional[str] = None
rasa/agents/utils.py CHANGED
@@ -1,7 +1,8 @@
1
- from typing import List, Optional
1
+ from typing import Dict, List, Optional
2
2
 
3
3
  from rasa.agents.agent_manager import AgentManager
4
4
  from rasa.agents.exceptions import AgentNotFoundException
5
+ from rasa.agents.validation import validate_agent_names_not_conflicting_with_flows
5
6
  from rasa.core.available_agents import (
6
7
  AgentConfig,
7
8
  AgentMCPServerConfig,
@@ -10,8 +11,10 @@ from rasa.core.available_agents import (
10
11
  from rasa.core.available_endpoints import AvailableEndpoints
11
12
  from rasa.shared.agents.utils import get_protocol_type
12
13
  from rasa.shared.core.domain import Domain
14
+ from rasa.shared.core.events import AgentCompleted
13
15
  from rasa.shared.core.flows import FlowsList
14
16
  from rasa.shared.core.flows.steps import CallFlowStep
17
+ from rasa.shared.core.trackers import DialogueStateTracker
15
18
 
16
19
 
17
20
  def resolve_agent_config(
@@ -33,6 +36,7 @@ def resolve_agent_config(
33
36
  if mcp_server_endpoint.name == mcp_server.name:
34
37
  mcp_server.url = mcp_server_endpoint.url
35
38
  mcp_server.type = mcp_server_endpoint.type
39
+ mcp_server.additional_params = mcp_server_endpoint.additional_params
36
40
 
37
41
  return agent_config
38
42
 
@@ -46,6 +50,10 @@ async def initialize_agents(
46
50
  agent_manager: AgentManager = AgentManager()
47
51
  endpoints = AvailableEndpoints.get_instance()
48
52
 
53
+ # Validate agent names don't conflict with flow names
54
+ flow_names = {flow.id for flow in flows.underlying_flows}
55
+ validate_agent_names_not_conflicting_with_flows(sub_agents.agents, flow_names)
56
+
49
57
  for flow in flows.underlying_flows:
50
58
  for step in flow.steps:
51
59
  if isinstance(step, CallFlowStep):
@@ -70,3 +78,89 @@ async def initialize_agents(
70
78
  protocol_type,
71
79
  resolved_agent_config,
72
80
  )
81
+
82
+
83
+ def is_agent_valid(agent_id: str) -> bool:
84
+ """Check if an agent ID references a valid agent.
85
+
86
+ Args:
87
+ agent_id: The agent ID to validate.
88
+
89
+ Returns:
90
+ True if the agent exists, False otherwise.
91
+ """
92
+ agent_config = AvailableAgents.get_agent_config(agent_id)
93
+ return agent_config is not None
94
+
95
+
96
+ def is_agent_completed(tracker: DialogueStateTracker, agent_id: str) -> bool:
97
+ """Check if an agent has been completed.
98
+
99
+ Args:
100
+ tracker: The dialogue state tracker.
101
+ agent_id: The agent ID to check.
102
+
103
+ Returns:
104
+ True if the agent has been completed, False otherwise.
105
+ """
106
+ # Look for AgentCompleted events for this agent
107
+ for event in reversed(tracker.events):
108
+ if isinstance(event, AgentCompleted) and event.agent_id == agent_id:
109
+ return True
110
+ return False
111
+
112
+
113
+ def get_agent_info(agent_id: str) -> Optional[Dict[str, str]]:
114
+ """Get basic agent information (name and description).
115
+
116
+ Args:
117
+ agent_id: The agent ID to get information for.
118
+
119
+ Returns:
120
+ Dictionary with agent name and description if found, None otherwise.
121
+ """
122
+ agent_config = AvailableAgents.get_agent_config(agent_id)
123
+ if agent_config is None:
124
+ return None
125
+
126
+ return {
127
+ "name": agent_config.agent.name,
128
+ "description": agent_config.agent.description,
129
+ }
130
+
131
+
132
+ def get_completed_agents_info(tracker: DialogueStateTracker) -> List[Dict[str, str]]:
133
+ """Get information for all completed agents.
134
+
135
+ Args:
136
+ tracker: The dialogue state tracker.
137
+
138
+ Returns:
139
+ List of dictionaries containing agent information for completed agents.
140
+ """
141
+ completed_agents = []
142
+ for event in reversed(tracker.events):
143
+ if isinstance(event, AgentCompleted):
144
+ agent_info = get_agent_info(event.agent_id)
145
+ if agent_info:
146
+ completed_agents.append(agent_info)
147
+ return completed_agents
148
+
149
+
150
+ def get_active_agent_info(
151
+ tracker: DialogueStateTracker, flow_id: str
152
+ ) -> Optional[Dict[str, str]]:
153
+ """Get information for the active agent in a specific flow.
154
+
155
+ Args:
156
+ tracker: The dialogue state tracker.
157
+ flow_id: The flow ID to get the active agent for.
158
+
159
+ Returns:
160
+ Dictionary with agent name and description if an agent is active,
161
+ None otherwise.
162
+ """
163
+ agent_frame = tracker.stack.find_active_agent_stack_frame_for_flow(flow_id)
164
+ if agent_frame:
165
+ return get_agent_info(agent_frame.agent_id)
166
+ return None