rasa-pro 3.14.0.dev7__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 (471) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  4. rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
  5. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  6. rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
  7. rasa/agents/schemas/agent_output.py +1 -1
  8. rasa/agents/utils.py +90 -1
  9. rasa/builder/README.md +120 -0
  10. rasa/builder/__init__.py +0 -0
  11. rasa/builder/auth.py +176 -0
  12. rasa/builder/config.py +92 -0
  13. rasa/builder/copilot/__init__.py +0 -0
  14. rasa/builder/copilot/constants.py +31 -0
  15. rasa/builder/copilot/copilot.py +450 -0
  16. rasa/builder/copilot/copilot_response_handler.py +522 -0
  17. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  18. rasa/builder/copilot/exceptions.py +32 -0
  19. rasa/builder/copilot/models.py +500 -0
  20. rasa/builder/copilot/prompts/__init__.py +0 -0
  21. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  22. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  23. rasa/builder/copilot/signing.py +305 -0
  24. rasa/builder/copilot/telemetry.py +210 -0
  25. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  26. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  27. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  28. rasa/builder/document_retrieval/__init__.py +0 -0
  29. rasa/builder/document_retrieval/constants.py +15 -0
  30. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  31. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  32. rasa/builder/document_retrieval/models.py +62 -0
  33. rasa/builder/download.py +140 -0
  34. rasa/builder/exceptions.py +91 -0
  35. rasa/builder/guardrails/__init__.py +1 -0
  36. rasa/builder/guardrails/constants.py +9 -0
  37. rasa/builder/guardrails/exceptions.py +4 -0
  38. rasa/builder/guardrails/lakera.py +206 -0
  39. rasa/builder/guardrails/models.py +231 -0
  40. rasa/builder/guardrails/store.py +238 -0
  41. rasa/builder/guardrails/utils.py +328 -0
  42. rasa/builder/job_manager.py +87 -0
  43. rasa/builder/jobs.py +282 -0
  44. rasa/builder/llm_service.py +246 -0
  45. rasa/builder/logging_utils.py +265 -0
  46. rasa/builder/main.py +243 -0
  47. rasa/builder/models.py +216 -0
  48. rasa/builder/project_generator.py +458 -0
  49. rasa/builder/project_info.py +72 -0
  50. rasa/builder/scrape_rasa_docs.py +97 -0
  51. rasa/builder/service.py +1345 -0
  52. rasa/builder/shared/tracker_context.py +212 -0
  53. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  54. rasa/builder/template_cache.py +244 -0
  55. rasa/builder/training_service.py +194 -0
  56. rasa/builder/validation_service.py +97 -0
  57. rasa/cli/project_templates/basic/README.md +23 -0
  58. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  59. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  60. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  61. rasa/cli/project_templates/basic/config.yml +29 -0
  62. rasa/cli/project_templates/basic/credentials.yml +33 -0
  63. rasa/cli/project_templates/basic/data/data.md +9 -0
  64. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  65. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  66. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  67. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  68. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  69. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  70. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  71. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  72. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  73. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  74. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  75. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  76. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  77. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  78. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  79. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  80. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  81. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  82. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  83. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  84. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  85. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  86. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  87. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  88. rasa/cli/project_templates/default/config.yml +4 -0
  89. rasa/cli/project_templates/default/endpoints.yml +4 -0
  90. rasa/cli/project_templates/finance/README.md +25 -0
  91. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  92. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  93. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  94. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  95. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  96. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  97. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  99. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  100. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  101. rasa/cli/project_templates/finance/actions/database.py +277 -0
  102. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  104. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  105. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  106. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  107. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  112. rasa/cli/project_templates/finance/config.yml +23 -0
  113. rasa/cli/project_templates/finance/credentials.yml +32 -0
  114. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  115. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  116. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  117. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  118. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  119. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  120. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  121. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  122. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  123. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  124. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  125. rasa/cli/project_templates/finance/data/data.md +11 -0
  126. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  127. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  128. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  129. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  130. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  131. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  132. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  133. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  134. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  135. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  136. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  137. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  138. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  139. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  140. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  141. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  142. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  143. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  144. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  145. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  146. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  147. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  148. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  149. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  154. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  231. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  232. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  233. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  234. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  235. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  236. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  237. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  238. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  239. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  240. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  241. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  243. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  244. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  245. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  246. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  247. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  248. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  249. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  250. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  251. rasa/cli/project_templates/telco/README.md +25 -0
  252. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  253. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  254. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  255. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  256. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  257. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  258. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  259. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  260. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  261. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  262. rasa/cli/project_templates/telco/config.yml +29 -0
  263. rasa/cli/project_templates/telco/credentials.yml +33 -0
  264. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  265. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  266. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  267. rasa/cli/project_templates/telco/data/data.md +11 -0
  268. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  269. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  270. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  271. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  272. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  273. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  274. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  275. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  276. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  277. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  278. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  279. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  280. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  281. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  282. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  283. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  284. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  285. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  286. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  287. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  288. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  289. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  290. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  291. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  292. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  293. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  294. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  295. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  296. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  297. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  298. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  299. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  300. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  304. rasa/cli/project_templates/tutorial/config.yml +2 -1
  305. rasa/cli/scaffold.py +46 -2
  306. rasa/core/actions/action.py +0 -1
  307. rasa/core/available_agents.py +2 -0
  308. rasa/core/available_endpoints.py +17 -2
  309. rasa/core/channels/channel.py +4 -3
  310. rasa/core/channels/constants.py +3 -0
  311. rasa/core/channels/development_inspector.py +2 -22
  312. rasa/core/channels/inspector/README.md +26 -14
  313. rasa/core/channels/inspector/dist/assets/{arc-cce7e0a8.js → arc-edef10dd.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  317. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  320. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  326. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.js → index-3862675e-ecdce073.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  332. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  351. rasa/core/channels/inspector/dist/index.html +2 -2
  352. rasa/core/channels/inspector/index.html +1 -1
  353. rasa/core/channels/inspector/src/App.tsx +16 -42
  354. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  355. rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
  356. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  357. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  358. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  359. rasa/core/channels/inspector/src/types.ts +32 -7
  360. rasa/core/channels/socketio.py +212 -51
  361. rasa/core/channels/studio_chat.py +59 -57
  362. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  363. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  364. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  365. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  366. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  367. rasa/core/channels/voice_stream/genesys.py +2 -1
  368. rasa/core/channels/voice_stream/jambonz.py +9 -1
  369. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  370. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  371. rasa/core/constants.py +6 -0
  372. rasa/core/iam_credentials_providers/__init__.py +0 -0
  373. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  374. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  375. rasa/core/policies/enterprise_search_policy.py +4 -7
  376. rasa/core/policies/flows/flow_executor.py +14 -5
  377. rasa/core/policies/ted_policy.py +7 -5
  378. rasa/core/processor.py +32 -0
  379. rasa/core/redis_connection_factory.py +411 -0
  380. rasa/core/run.py +13 -3
  381. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  382. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  383. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  384. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  385. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  386. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  387. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  388. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  389. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  390. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  391. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  392. rasa/engine/graph.py +5 -1
  393. rasa/engine/recipes/default_components.py +78 -10
  394. rasa/engine/recipes/default_recipe.py +41 -1
  395. rasa/engine/storage/local_model_storage.py +83 -3
  396. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  397. rasa/model_manager/model_api.py +4 -5
  398. rasa/model_manager/runner_service.py +1 -1
  399. rasa/model_manager/socket_bridge.py +20 -15
  400. rasa/model_manager/trainer_service.py +12 -9
  401. rasa/model_manager/utils.py +1 -29
  402. rasa/model_manager/warm_rasa_process.py +1 -1
  403. rasa/model_training.py +14 -0
  404. rasa/nlu/classifiers/diet_classifier.py +22 -6
  405. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  406. rasa/nlu/extractors/extractor.py +1 -2
  407. rasa/shared/agents/auth/__init__.py +0 -0
  408. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  409. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  410. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  411. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  412. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  413. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  414. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  415. rasa/shared/agents/auth/constants.py +11 -0
  416. rasa/shared/agents/auth/types.py +11 -0
  417. rasa/shared/core/constants.py +1 -0
  418. rasa/shared/core/domain.py +58 -11
  419. rasa/shared/core/events.py +2 -0
  420. rasa/shared/core/flows/constants.py +5 -0
  421. rasa/shared/core/flows/flow_step.py +7 -1
  422. rasa/shared/core/flows/flows_list.py +6 -0
  423. rasa/shared/core/flows/steps/call.py +15 -12
  424. rasa/shared/core/flows/validation.py +238 -44
  425. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  426. rasa/shared/core/slots.py +4 -0
  427. rasa/shared/exceptions.py +12 -0
  428. rasa/shared/importers/importer.py +6 -0
  429. rasa/shared/importers/utils.py +77 -1
  430. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  431. rasa/shared/providers/_utils.py +60 -44
  432. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  433. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  434. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  435. rasa/shared/providers/llm/llm_response.py +4 -4
  436. rasa/shared/utils/common.py +24 -0
  437. rasa/shared/utils/llm.py +2 -1
  438. rasa/shared/utils/mcp/server_connection.py +84 -23
  439. rasa/shared/utils/mcp/utils.py +20 -0
  440. rasa/studio/upload.py +16 -47
  441. rasa/telemetry.py +97 -23
  442. rasa/tracing/config.py +38 -12
  443. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  444. rasa/tracing/instrumentation/instrumentation.py +85 -8
  445. rasa/utils/common.py +1 -1
  446. rasa/utils/io.py +27 -9
  447. rasa/utils/json_utils.py +6 -1
  448. rasa/utils/log_utils.py +5 -1
  449. rasa/utils/openapi.py +144 -0
  450. rasa/utils/tensorflow/__init__.py +29 -0
  451. rasa/utils/tensorflow/callback.py +1 -1
  452. rasa/utils/tensorflow/crf.py +1 -1
  453. rasa/utils/tensorflow/data_generator.py +21 -8
  454. rasa/utils/tensorflow/layers.py +11 -4
  455. rasa/utils/tensorflow/metrics.py +7 -3
  456. rasa/utils/tensorflow/models.py +41 -6
  457. rasa/utils/tensorflow/rasa_layers.py +6 -4
  458. rasa/utils/tensorflow/transformer.py +2 -3
  459. rasa/utils/train_utils.py +68 -38
  460. rasa/validator.py +18 -16
  461. rasa/version.py +1 -1
  462. rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
  463. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +466 -156
  464. rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
  465. rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
  466. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
  467. rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
  468. rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
  469. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
  470. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
  471. {rasa_pro-3.14.0.dev7.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 (
@@ -267,10 +267,14 @@ class MCPBaseAgent(AgentProtocol):
267
267
  f"Failed to connect to MCP servers after {self._max_retries} "
268
268
  f"attempts. Agent `{self._name}` failed to initialize."
269
269
  ) from ce
270
- 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."
271
275
  structlogger.error(
272
276
  "mcp_agent.connect.unexpected_exception",
273
- event_info="Unexpected error during agent initialization.",
277
+ event_info=event_info,
274
278
  error=str(e),
275
279
  agent_name=self._name,
276
280
  agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
@@ -307,7 +311,7 @@ class MCPBaseAgent(AgentProtocol):
307
311
  agent_name=self._name,
308
312
  agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
309
313
  )
310
- raise ConnectionError(e)
314
+ raise e
311
315
 
312
316
  async def connect_to_servers(self) -> None:
313
317
  """Connect to MCP servers."""
@@ -549,6 +553,19 @@ class MCPBaseAgent(AgentProtocol):
549
553
  KEY_CONTENT: tool_response.response_message,
550
554
  }
551
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
+
552
569
  # ============================================================================
553
570
  # Tool Execution
554
571
  # ============================================================================
@@ -640,24 +657,24 @@ class MCPBaseAgent(AgentProtocol):
640
657
  error_message=tool_output.error_message,
641
658
  )
642
659
 
643
- def _get_tool_results_for_agent_output(
660
+ def _get_structured_results_for_agent_output(
644
661
  self,
645
662
  agent_input: AgentInput,
646
663
  current_tool_results: Dict[str, AgentToolResult],
647
664
  ) -> List[List[Dict[str, Any]]]:
648
665
  """Get the tool results for the agent output."""
649
- tool_results_of_current_iteration: List[Dict[str, Any]] = []
666
+ structured_results_of_current_iteration: List[Dict[str, Any]] = []
650
667
  for tool_result in current_tool_results.values():
651
- tool_results_of_current_iteration.append(
652
- {"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}
653
670
  )
654
671
 
655
- previous_tool_results: List[List[Dict[str, Any]]] = (
656
- 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 []
657
674
  )
658
- previous_tool_results.append(tool_results_of_current_iteration)
675
+ previous_structured_results.append(structured_results_of_current_iteration)
659
676
 
660
- return previous_tool_results
677
+ return previous_structured_results
661
678
 
662
679
  # ============================================================================
663
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(
@@ -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,4 +1,4 @@
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
@@ -11,8 +11,10 @@ from rasa.core.available_agents import (
11
11
  from rasa.core.available_endpoints import AvailableEndpoints
12
12
  from rasa.shared.agents.utils import get_protocol_type
13
13
  from rasa.shared.core.domain import Domain
14
+ from rasa.shared.core.events import AgentCompleted
14
15
  from rasa.shared.core.flows import FlowsList
15
16
  from rasa.shared.core.flows.steps import CallFlowStep
17
+ from rasa.shared.core.trackers import DialogueStateTracker
16
18
 
17
19
 
18
20
  def resolve_agent_config(
@@ -34,6 +36,7 @@ def resolve_agent_config(
34
36
  if mcp_server_endpoint.name == mcp_server.name:
35
37
  mcp_server.url = mcp_server_endpoint.url
36
38
  mcp_server.type = mcp_server_endpoint.type
39
+ mcp_server.additional_params = mcp_server_endpoint.additional_params
37
40
 
38
41
  return agent_config
39
42
 
@@ -75,3 +78,89 @@ async def initialize_agents(
75
78
  protocol_type,
76
79
  resolved_agent_config,
77
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
rasa/builder/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # Rasa Prompt-to-Bot Service
2
+
3
+ A production-ready service that generates Rasa chatbots from natural language descriptions using LLMs.
4
+
5
+ ## Architecture
6
+
7
+ The service follows functional programming principles with minimal use of classes:
8
+
9
+ ### Core Modules
10
+
11
+ - **`config.py`** - Configuration management using module-level constants
12
+ - **`exceptions.py`** - Custom exception hierarchy for error handling
13
+ - **`models.py`** - Pydantic models for request/response validation
14
+ - **`llm_service.py`** - LLM interactions (minimal class for state management)
15
+ - **`validation_service.py`** - Project validation functions
16
+ - **`training_service.py`** - Model training functions
17
+ - **`project_generator.py`** - Project generation (class for bot files state)
18
+ - **`service.py`** - Main orchestrating service (class for app state)
19
+ - **`logging_utils.py`** - Thread-safe logging utilities
20
+ - **`llm_context.py`** - Conversation context formatting
21
+ - **`main.py`** - Application entry point
22
+
23
+ ### Utility Scripts
24
+
25
+ - **`scrape_rasa_docs.py`** - Documentation scraping
26
+ - **`create_openai_vector_store.py`** - Documentation indexing
27
+
28
+ ## Key Design Principles
29
+
30
+ 1. **Functional First**: Use functions for stateless operations
31
+ 2. **Minimal Classes**: Classes only when state management is needed
32
+ 3. **Configuration**: Environment variables with sensible defaults
33
+ 4. **Error Handling**: Structured exception hierarchy
34
+ 5. **Type Safety**: Full type annotations and Pydantic validation
35
+ 6. **Thread Safety**: Safe concurrent operations
36
+ 7. **Resource Management**: Proper cleanup and lifecycle handling
37
+
38
+ ## Usage
39
+
40
+ ### Running the Service
41
+
42
+ ```bash
43
+ python rasa/builder/main.py
44
+ ```
45
+
46
+ ### Environment Configuration
47
+
48
+ ```bash
49
+ # OpenAI Settings
50
+ export OPENAI_MODEL="gpt-4.1-2025-04-14"
51
+ export OPENAI_TEMPERATURE="0.7"
52
+ export OPENAI_VECTOR_STORE_ID="vs_xxxxx"
53
+ export OPENAI_TIMEOUT="30"
54
+
55
+ # Server Settings
56
+ export SERVER_HOST="0.0.0.0"
57
+ export SERVER_PORT="5005"
58
+ export MAX_RETRIES="5"
59
+ export CORS_ORIGINS="http://localhost:3000,https://example.com"
60
+
61
+ # Validation Settings
62
+ export VALIDATION_FAIL_ON_WARNINGS="false"
63
+ ```
64
+
65
+ ### API Endpoints
66
+
67
+ - `POST /api/prompt-to-bot` - Generate bot from description
68
+ - `GET /api/bot-data` - Get current bot configuration
69
+ - `PUT /api/bot-data` - Update bot configuration (SSE)
70
+ - `POST /api/llm-builder` - LLM helper for bot development
71
+ - `GET /` - Health check
72
+
73
+ ### Documentation Setup
74
+
75
+ ```bash
76
+ # 1. Scrape Rasa documentation
77
+ python rasa/builder/scrape_rasa_docs.py
78
+
79
+ # 2. Create OpenAI vector store
80
+ python rasa/builder/create_openai_vector_store.py
81
+ ```
82
+
83
+ ## Benefits of Functional Approach
84
+
85
+ - **Simpler**: Easy to understand and reason about
86
+ - **Testable**: Functions are easier to unit test
87
+ - **Reusable**: Pure functions can be composed
88
+ - **Maintainable**: Clear separation of concerns
89
+ - **Performant**: No unnecessary object overhead
90
+ - **Debuggable**: Clear call stacks and data flow
91
+
92
+ ## Error Handling
93
+
94
+ The service uses a structured exception hierarchy:
95
+
96
+ - `PromptToBotError` - Base exception
97
+ - `ValidationError` - Project validation failures
98
+ - `TrainingError` - Model training issues
99
+ - `LLMGenerationError` - LLM API problems
100
+ - `ProjectGenerationError` - Generation retry exhaustion
101
+ - `AgentLoadError` - Agent loading failures
102
+
103
+ ## Logging
104
+
105
+ Structured logging with context using `structlog`:
106
+
107
+ ```python
108
+ structlogger.info("operation.success", key="value")
109
+ structlogger.error("operation.failed", error=str(e))
110
+ ```
111
+
112
+ ## State Management
113
+
114
+ Only classes that truly need state:
115
+
116
+ 1. **`LLMService`** - Caches schemas and manages OpenAI client
117
+ 2. **`ProjectGenerator`** - Maintains current bot files
118
+ 3. **`BotBuilderService`** - Manages Sanic app and agent state
119
+
120
+ Everything else uses pure functions for maximum simplicity and testability.
File without changes