rasa-pro 3.14.0.dev4__py3-none-any.whl → 3.14.0.dev5__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 (463) hide show
  1. rasa/api.py +0 -5
  2. rasa/builder/README.md +120 -0
  3. rasa/builder/auth.py +176 -0
  4. rasa/builder/config.py +115 -0
  5. rasa/builder/copilot/constants.py +25 -0
  6. rasa/builder/copilot/copilot.py +372 -0
  7. rasa/builder/copilot/copilot_response_handler.py +487 -0
  8. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  9. rasa/builder/copilot/exceptions.py +20 -0
  10. rasa/builder/copilot/models.py +431 -0
  11. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +726 -0
  12. rasa/builder/copilot/telemetry.py +195 -0
  13. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  14. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +26 -0
  15. rasa/builder/document_retrieval/constants.py +15 -0
  16. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  17. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  18. rasa/builder/document_retrieval/models.py +62 -0
  19. rasa/builder/download.py +140 -0
  20. rasa/builder/exceptions.py +55 -0
  21. rasa/builder/guardrails/__init__.py +1 -0
  22. rasa/builder/guardrails/constants.py +3 -0
  23. rasa/builder/guardrails/exceptions.py +4 -0
  24. rasa/builder/guardrails/lakera.py +206 -0
  25. rasa/builder/guardrails/models.py +199 -0
  26. rasa/builder/guardrails/utils.py +305 -0
  27. rasa/builder/job_manager.py +87 -0
  28. rasa/builder/jobs.py +234 -0
  29. rasa/builder/llm_service.py +246 -0
  30. rasa/builder/logging_utils.py +209 -0
  31. rasa/builder/main.py +174 -0
  32. rasa/builder/models.py +197 -0
  33. rasa/builder/project_generator.py +450 -0
  34. rasa/builder/project_info.py +72 -0
  35. rasa/builder/scrape_rasa_docs.py +97 -0
  36. rasa/builder/service.py +1142 -0
  37. rasa/builder/shared/tracker_context.py +212 -0
  38. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  39. rasa/builder/training_service.py +132 -0
  40. rasa/builder/validation_service.py +93 -0
  41. rasa/cli/arguments/default_arguments.py +0 -12
  42. rasa/cli/arguments/run.py +0 -2
  43. rasa/cli/dialogue_understanding_test.py +0 -4
  44. rasa/cli/e2e_test.py +0 -4
  45. rasa/cli/inspect.py +0 -3
  46. rasa/cli/llm_fine_tuning.py +0 -5
  47. rasa/cli/project_templates/basic/actions/action_api.py +15 -0
  48. rasa/cli/project_templates/basic/actions/action_human_handoff.py +44 -0
  49. rasa/cli/project_templates/basic/config.yml +23 -0
  50. rasa/cli/project_templates/basic/credentials.yml +34 -0
  51. rasa/cli/project_templates/basic/data/general/feedback.yml +20 -0
  52. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  53. rasa/cli/project_templates/basic/data/general/hello.yml +7 -0
  54. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  55. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  56. rasa/cli/project_templates/basic/data/general/welcome.yml +9 -0
  57. rasa/cli/project_templates/basic/data/system/pattern_completed.yml +7 -0
  58. rasa/cli/project_templates/basic/data/system/pattern_correction.yml +7 -0
  59. rasa/cli/project_templates/basic/data/system/pattern_search.yml +8 -0
  60. rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +8 -0
  61. rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +65 -0
  62. rasa/cli/project_templates/basic/docs/template.txt +7 -0
  63. rasa/cli/project_templates/basic/domain/general/assistant_details.yml +12 -0
  64. rasa/cli/project_templates/basic/domain/general/bot_identity.yml +5 -0
  65. rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +5 -0
  66. rasa/cli/project_templates/basic/domain/general/feedback.yml +28 -0
  67. rasa/cli/project_templates/basic/domain/general/goodbye.yml +7 -0
  68. rasa/cli/project_templates/basic/domain/general/help.yml +5 -0
  69. rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +35 -0
  70. rasa/cli/project_templates/basic/domain/general/utils.yml +13 -0
  71. rasa/cli/project_templates/basic/domain/general/welcome.yml +7 -0
  72. rasa/cli/project_templates/basic/endpoints.yml +73 -0
  73. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  74. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  75. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  76. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  77. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  78. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  79. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  80. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  81. rasa/cli/project_templates/finance/actions/database.py +277 -0
  82. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  83. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  84. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  85. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  86. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  87. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  88. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  89. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  90. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  91. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  92. rasa/cli/project_templates/finance/config.yml +21 -0
  93. rasa/cli/project_templates/finance/credentials.yml +32 -0
  94. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  95. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  96. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  97. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  98. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  99. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  100. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  101. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  102. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  103. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  104. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  105. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  106. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  107. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  108. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  109. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  110. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  111. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  112. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  113. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  114. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  115. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  116. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  117. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  118. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  119. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  120. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  121. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  122. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  123. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  124. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  125. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  126. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  127. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  128. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  129. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  130. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  131. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  132. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  133. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  134. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  135. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  136. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  137. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  138. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  139. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  140. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  141. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  142. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  143. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  144. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  145. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  146. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  147. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  148. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  149. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  150. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  151. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  152. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  153. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  154. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  155. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  156. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  157. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  158. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  159. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  160. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  161. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  162. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  163. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  164. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  165. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  166. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  167. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  168. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  169. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  210. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  211. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  212. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  213. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
  214. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  215. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  216. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  217. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  218. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  219. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  220. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  221. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  222. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  223. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  224. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  225. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  226. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  227. rasa/cli/project_templates/finance/endpoints.yml +63 -0
  228. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  229. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  230. rasa/cli/project_templates/telco/actions/actions_billing.py +204 -0
  231. rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +48 -0
  232. rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +28 -0
  233. rasa/cli/project_templates/telco/actions/actions_session_start.py +18 -0
  234. rasa/cli/project_templates/telco/config.yml +25 -0
  235. rasa/cli/project_templates/telco/credentials.yml +33 -0
  236. rasa/cli/project_templates/telco/csvs/billing.csv +10 -0
  237. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  238. rasa/cli/project_templates/telco/data/flows/flow_global.yml +5 -0
  239. rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +8 -0
  240. rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +7 -0
  241. rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +73 -0
  242. rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +45 -0
  243. rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +7 -0
  244. rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +6 -0
  245. rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +7 -0
  246. rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +9 -0
  247. rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +1 -0
  248. rasa/cli/project_templates/telco/docs/restart_router.txt +6 -0
  249. rasa/cli/project_templates/telco/docs/run_speed_test.txt +6 -0
  250. rasa/cli/project_templates/telco/domain/domain_global.yml +29 -0
  251. rasa/cli/project_templates/telco/domain/domain_patterns.yml +17 -0
  252. rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +20 -0
  253. rasa/cli/project_templates/telco/domain/domain_reset_router.yml +11 -0
  254. rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +24 -0
  255. rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +74 -0
  256. rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +102 -0
  257. rasa/cli/project_templates/telco/endpoints.yml +60 -0
  258. rasa/{dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 → cli/project_templates/telco/prompts/command-generator.jinja2} +3 -7
  259. rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +62 -0
  260. rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +130 -0
  261. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +68 -0
  262. rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +13 -0
  263. rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +47 -0
  264. rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +21 -0
  265. rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +15 -0
  266. rasa/cli/project_templates/tutorial/config.yml +2 -1
  267. rasa/cli/run.py +0 -4
  268. rasa/cli/scaffold.py +46 -2
  269. rasa/cli/shell.py +0 -3
  270. rasa/constants.py +0 -6
  271. rasa/core/actions/action.py +10 -56
  272. rasa/core/agent.py +0 -16
  273. rasa/core/available_endpoints.py +0 -30
  274. rasa/core/channels/channel.py +4 -3
  275. rasa/core/channels/constants.py +3 -0
  276. rasa/core/channels/development_inspector.py +4 -4
  277. rasa/core/channels/hangouts.py +2 -2
  278. rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-18042c22.js} +1 -1
  279. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  280. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  281. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  282. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  283. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  284. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  285. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-31422447.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-518a90db.js} +1 -1
  287. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  288. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-e048c2be.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  290. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  291. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  293. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-14702d8a.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-f18b534b.js} +1 -1
  296. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +1335 -0
  297. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  299. rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-5a3b2123.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-2272a8c7.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-35bcf273.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  303. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-980de489.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-3c03abde.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  316. rasa/core/channels/inspector/dist/index.html +2 -2
  317. rasa/core/channels/inspector/index.html +1 -1
  318. rasa/core/channels/inspector/src/App.tsx +10 -11
  319. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  320. rasa/core/channels/inspector/src/components/DialogueStack.tsx +4 -6
  321. rasa/core/channels/inspector/src/helpers/formatters.ts +3 -24
  322. rasa/core/channels/inspector/src/theme/base/styles.ts +1 -19
  323. rasa/core/channels/inspector/src/types.ts +0 -4
  324. rasa/core/channels/socketio.py +212 -51
  325. rasa/core/channels/studio_chat.py +49 -29
  326. rasa/core/channels/voice_stream/genesys.py +1 -1
  327. rasa/core/channels/voice_stream/voice_channel.py +5 -3
  328. rasa/core/constants.py +0 -4
  329. rasa/core/policies/enterprise_search_policy.py +6 -11
  330. rasa/core/policies/flow_policy.py +4 -4
  331. rasa/core/policies/flows/flow_executor.py +45 -456
  332. rasa/core/policies/intentless_policy.py +1 -1
  333. rasa/core/policies/unexpected_intent_policy.py +0 -1
  334. rasa/core/processor.py +15 -18
  335. rasa/core/run.py +14 -11
  336. rasa/core/tracker_stores/tracker_store.py +7 -3
  337. rasa/core/train.py +1 -1
  338. rasa/core/training/interactive.py +16 -16
  339. rasa/core/training/story_conflict.py +5 -5
  340. rasa/core/utils.py +1 -21
  341. rasa/dialogue_understanding/commands/__init__.py +0 -8
  342. rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -97
  343. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +0 -11
  344. rasa/dialogue_understanding/commands/clarify_command.py +0 -10
  345. rasa/dialogue_understanding/commands/knowledge_answer_command.py +0 -11
  346. rasa/dialogue_understanding/commands/start_flow_command.py +8 -164
  347. rasa/dialogue_understanding/commands/utils.py +2 -6
  348. rasa/dialogue_understanding/generator/command_parser.py +0 -4
  349. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  350. rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -50
  351. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  352. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  353. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +6 -7
  354. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +6 -7
  355. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -41
  356. rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -163
  357. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +8 -52
  358. rasa/dialogue_understanding/processor/command_processor.py +15 -31
  359. rasa/dialogue_understanding/stack/dialogue_stack.py +2 -123
  360. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +0 -57
  361. rasa/dialogue_understanding/stack/utils.py +2 -17
  362. rasa/dialogue_understanding_test/du_test_runner.py +2 -7
  363. rasa/e2e_test/e2e_test_runner.py +2 -12
  364. rasa/engine/caching.py +2 -2
  365. rasa/engine/recipes/default_components.py +18 -10
  366. rasa/engine/storage/local_model_storage.py +45 -2
  367. rasa/graph_components/validators/default_recipe_validator.py +134 -134
  368. rasa/hooks.py +5 -5
  369. rasa/llm_fine_tuning/utils.py +2 -2
  370. rasa/model_manager/model_api.py +4 -5
  371. rasa/model_manager/runner_service.py +1 -1
  372. rasa/model_manager/socket_bridge.py +20 -14
  373. rasa/model_manager/trainer_service.py +12 -9
  374. rasa/model_manager/utils.py +1 -29
  375. rasa/model_manager/warm_rasa_process.py +1 -1
  376. rasa/nlu/extractors/extractor.py +1 -2
  377. rasa/plugin.py +8 -8
  378. rasa/privacy/privacy_manager.py +2 -11
  379. rasa/server.py +2 -14
  380. rasa/shared/constants.py +0 -5
  381. rasa/shared/core/constants.py +1 -12
  382. rasa/shared/core/domain.py +58 -11
  383. rasa/shared/core/events.py +0 -327
  384. rasa/shared/core/flows/flow_step.py +7 -1
  385. rasa/shared/core/flows/flows_list.py +2 -2
  386. rasa/shared/core/flows/flows_yaml_schema.json +186 -112
  387. rasa/shared/core/flows/steps/call.py +5 -53
  388. rasa/shared/core/flows/validation.py +7 -46
  389. rasa/shared/core/flows/yaml_flows_io.py +17 -9
  390. rasa/shared/core/slots.py +6 -2
  391. rasa/shared/core/trackers.py +2 -5
  392. rasa/shared/exceptions.py +0 -4
  393. rasa/shared/importers/importer.py +6 -0
  394. rasa/shared/importers/utils.py +77 -1
  395. rasa/shared/providers/_utils.py +60 -44
  396. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  397. rasa/shared/providers/llm/_base_litellm_client.py +7 -39
  398. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  399. rasa/shared/providers/llm/litellm_router_llm_client.py +4 -8
  400. rasa/shared/providers/llm/llm_client.py +3 -7
  401. rasa/shared/providers/llm/llm_response.py +0 -49
  402. rasa/shared/providers/llm/self_hosted_llm_client.py +4 -8
  403. rasa/shared/utils/llm.py +5 -28
  404. rasa/shared/utils/schemas/events.py +0 -42
  405. rasa/shared/utils/yaml.py +1 -3
  406. rasa/studio/upload.py +16 -47
  407. rasa/telemetry.py +97 -23
  408. rasa/tracing/instrumentation/instrumentation.py +10 -12
  409. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  410. rasa/utils/common.py +0 -79
  411. rasa/utils/io.py +27 -9
  412. rasa/utils/json_utils.py +6 -1
  413. rasa/utils/log_utils.py +6 -2
  414. rasa/utils/ml_utils.py +1 -1
  415. rasa/utils/openapi.py +144 -0
  416. rasa/utils/tensorflow/rasa_layers.py +1 -1
  417. rasa/utils/train_utils.py +15 -15
  418. rasa/validator.py +21 -19
  419. rasa/version.py +1 -1
  420. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/METADATA +17 -14
  421. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/RECORD +431 -200
  422. rasa/agents/agent_factory.py +0 -122
  423. rasa/agents/agent_manager.py +0 -162
  424. rasa/agents/constants.py +0 -40
  425. rasa/agents/core/agent_protocol.py +0 -107
  426. rasa/agents/core/types.py +0 -70
  427. rasa/agents/exceptions.py +0 -8
  428. rasa/agents/protocol/__init__.py +0 -5
  429. rasa/agents/protocol/a2a/a2a_agent.py +0 -662
  430. rasa/agents/protocol/mcp/mcp_base_agent.py +0 -676
  431. rasa/agents/protocol/mcp/mcp_open_agent.py +0 -276
  432. rasa/agents/protocol/mcp/mcp_task_agent.py +0 -469
  433. rasa/agents/schemas/__init__.py +0 -12
  434. rasa/agents/schemas/agent_input.py +0 -38
  435. rasa/agents/schemas/agent_output.py +0 -26
  436. rasa/agents/schemas/agent_tool_result.py +0 -51
  437. rasa/agents/schemas/agent_tool_schema.py +0 -134
  438. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +0 -15
  439. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +0 -17
  440. rasa/agents/utils.py +0 -72
  441. rasa/core/available_agents.py +0 -199
  442. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
  443. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
  444. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
  445. rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
  446. rasa/core/policies/flows/mcp_tool_executor.py +0 -277
  447. rasa/dialogue_understanding/commands/continue_agent_command.py +0 -91
  448. rasa/dialogue_understanding/commands/restart_agent_command.py +0 -162
  449. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +0 -61
  450. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +0 -81
  451. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +0 -81
  452. rasa/shared/agents/utils.py +0 -35
  453. rasa/shared/utils/mcp/server_connection.py +0 -157
  454. /rasa/{agents → builder}/__init__.py +0 -0
  455. /rasa/{agents/core → builder/copilot}/__init__.py +0 -0
  456. /rasa/{agents/protocol/a2a → builder/copilot/prompts}/__init__.py +0 -0
  457. /rasa/{agents/protocol/mcp → builder/copilot/templated_messages}/__init__.py +0 -0
  458. /rasa/{agents/templates → builder/document_retrieval}/__init__.py +0 -0
  459. /rasa/{shared/agents → cli/project_templates/finance/actions/accounts}/__init__.py +0 -0
  460. /rasa/{shared/utils/mcp → cli/project_templates/finance/actions/cards}/__init__.py +0 -0
  461. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/NOTICE +0 -0
  462. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/WHEEL +0 -0
  463. {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/entry_points.txt +0 -0
@@ -1,277 +0,0 @@
1
- import json
2
- import operator
3
- from functools import reduce
4
- from typing import Any, Dict, List, Optional
5
-
6
- import structlog
7
- from mcp.types import CallToolResult
8
-
9
- from rasa.core.available_endpoints import AvailableEndpoints
10
- from rasa.core.policies.flows.flow_step_result import (
11
- ContinueFlowWithNextStep,
12
- FlowStepResult,
13
- )
14
- from rasa.dialogue_understanding.patterns.internal_error import (
15
- InternalErrorPatternFlowStackFrame,
16
- )
17
- from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
18
- from rasa.shared.core.events import Event, SlotSet
19
- from rasa.shared.core.flows.steps import CallFlowStep
20
- from rasa.shared.core.trackers import DialogueStateTracker
21
- from rasa.shared.utils.mcp.server_connection import MCPServerConnection
22
- from rasa.utils.common import ensure_jsonified_iterable
23
-
24
- structlogger = structlog.get_logger()
25
-
26
- CONFIG_RESULT_KEY = "result_key"
27
- CONFIG_SLOT = "slot"
28
-
29
-
30
- async def call_mcp_tool(
31
- initial_events: List[Event],
32
- stack: DialogueStack,
33
- step: CallFlowStep,
34
- tracker: DialogueStateTracker,
35
- ) -> FlowStepResult:
36
- """Run an MCP tool call step."""
37
- structlogger.debug(
38
- "flow.step.call_mcp_tool",
39
- tool_id=step.call,
40
- mcp_server=step.mcp_server,
41
- mapping=step.mapping,
42
- step_id=step.id,
43
- flow_id=step.flow_id,
44
- )
45
-
46
- try:
47
- return await _execute_mcp_tool_call(initial_events, stack, step, tracker)
48
- except Exception as e:
49
- return _handle_mcp_tool_error(
50
- stack,
51
- initial_events,
52
- error_message=f"Failed to execute MCP tool call: {e}.",
53
- tool_name=step.call,
54
- mcp_server=step.mcp_server,
55
- )
56
-
57
-
58
- async def _execute_mcp_tool_call(
59
- initial_events: List[Event],
60
- stack: DialogueStack,
61
- step: CallFlowStep,
62
- tracker: DialogueStateTracker,
63
- ) -> FlowStepResult:
64
- """Execute the MCP tool call with proper error handling."""
65
- mcp_server_connection = None
66
- try:
67
- # Connect to the MCP server
68
- mcp_server_connection = await _connect_to_mcp_server(step.mcp_server)
69
-
70
- if not mcp_server_connection:
71
- return _handle_mcp_tool_error(
72
- stack,
73
- initial_events,
74
- f"Cannot connect to MCP server '{step.mcp_server}'.",
75
- tool_name=step.call,
76
- mcp_server=step.mcp_server,
77
- )
78
-
79
- # Validate tool availability
80
- if not await _is_tool_available(mcp_server_connection, step.call):
81
- return _handle_mcp_tool_error(
82
- stack,
83
- initial_events,
84
- f"Tool '{step.call}' is not available on MCP server "
85
- f"'{step.mcp_server}'.",
86
- tool_name=step.call,
87
- mcp_server=step.mcp_server,
88
- )
89
-
90
- # This should not happen, but we need to check for type checking to pass
91
- if not step.mapping:
92
- return _handle_mcp_tool_error(
93
- stack,
94
- initial_events,
95
- f"No mapping found for tool '{step.call}'.",
96
- tool_name=step.call,
97
- mcp_server=step.mcp_server,
98
- )
99
-
100
- # Prepare arguments for the tool call
101
- arguments = _prepare_tool_arguments(step.mapping["input"], tracker)
102
-
103
- # Call the tool with parameters
104
- mcp_server = await mcp_server_connection.ensure_active_session()
105
- result = await mcp_server.call_tool(step.call, arguments)
106
-
107
- # Handle tool execution result
108
- if result is None or result.isError:
109
- return _handle_mcp_tool_error(
110
- stack,
111
- initial_events,
112
- f"Tool '{step.call}' execution failed: {result.content}.",
113
- tool_name=step.call,
114
- mcp_server=step.mcp_server,
115
- )
116
- elif not result.content:
117
- structlogger.warning(
118
- "call_mcp_tool.empty_tool_result",
119
- tool_name=step.call,
120
- mcp_server=step.mcp_server,
121
- )
122
- else:
123
- structlogger.debug(
124
- "call_mcp_tool.tool_execution_success",
125
- tool_name=step.call,
126
- mcp_server=step.mcp_server,
127
- result_content=result.content,
128
- result_structured_content=result.structuredContent,
129
- )
130
-
131
- # Process successful result
132
- if set_slot_event := _process_tool_result(result, step.mapping["output"]):
133
- initial_events.extend(set_slot_event)
134
- else:
135
- return _handle_mcp_tool_error(
136
- stack,
137
- initial_events,
138
- f"Failed to process tool result for '{step.call}'.",
139
- tool_name=step.call,
140
- mcp_server=step.mcp_server,
141
- )
142
-
143
- return ContinueFlowWithNextStep(events=initial_events)
144
-
145
- finally:
146
- # Always clean up the connection to prevent resource leaks
147
- if mcp_server_connection:
148
- try:
149
- await mcp_server_connection.close()
150
- except Exception as e:
151
- structlogger.warning(
152
- "call_mcp_tool.connection_cleanup_failed",
153
- tool_name=step.call,
154
- mcp_server=step.mcp_server,
155
- error=str(e),
156
- )
157
-
158
-
159
- async def _is_tool_available(
160
- mcp_server_connection: MCPServerConnection, tool_name: str
161
- ) -> bool:
162
- """Check if the specified tool is available on the MCP server."""
163
- try:
164
- # Get the active session from the connection
165
- mcp_server = await mcp_server_connection.ensure_active_session()
166
- available_tools = await mcp_server.list_tools()
167
- tool_names = [tool.name for tool in available_tools.tools]
168
- return tool_name in tool_names
169
- except Exception as e:
170
- structlogger.warning(
171
- "call_mcp_tool.tool_availability_check_failed",
172
- tool_name=tool_name,
173
- error=str(e),
174
- )
175
- return False
176
-
177
-
178
- async def _connect_to_mcp_server(
179
- mcp_server_name: Optional[str],
180
- ) -> Optional[MCPServerConnection]:
181
- """Connect to the MCP server."""
182
- if not mcp_server_name:
183
- return None
184
-
185
- # get the MCP server config from the available endpoints
186
- endpoints = AvailableEndpoints.get_instance()
187
- mcp_servers = endpoints.mcp_servers
188
- if not mcp_servers:
189
- return None
190
-
191
- mcp_server_configs = [
192
- mcp_server for mcp_server in mcp_servers if mcp_server.name == mcp_server_name
193
- ]
194
- if not mcp_server_configs or len(mcp_server_configs) != 1:
195
- return None
196
-
197
- mcp_server_config = mcp_server_configs[0]
198
- mcp_server_connection = MCPServerConnection(
199
- mcp_server_config.name, mcp_server_config.url, mcp_server_config.type
200
- )
201
-
202
- # Ensure the connection is established and return the connection object
203
- await mcp_server_connection.ensure_active_session()
204
- return mcp_server_connection
205
-
206
-
207
- def _prepare_tool_arguments(
208
- input_mapping: List[Dict[str, str]], tracker: DialogueStateTracker
209
- ) -> Dict[str, Any]:
210
- """Prepare arguments for the tool call from slot values."""
211
- arguments = {}
212
- for argument in input_mapping:
213
- slot_value = tracker.get_slot(argument["slot"])
214
- arguments[argument["param"]] = slot_value
215
- return arguments
216
-
217
-
218
- def _jsonify_slot_value(value: Any) -> str | int | float | bool | None:
219
- """Prepare value for SlotSet: iterables -> JSON string, primitives -> as-is"""
220
- if isinstance(value, (list, dict)) and len(value):
221
- return json.dumps(ensure_jsonified_iterable(value))
222
- return value
223
-
224
-
225
- def _process_tool_result(
226
- result: CallToolResult,
227
- output_mapping: List[Dict[str, str]],
228
- ) -> Optional[List[SlotSet]]:
229
- """Create a SetSlot event for the tool result."""
230
- try:
231
- _result_as_dict = {"result": result.model_dump()}
232
- slots = []
233
- for mapping in output_mapping:
234
- try:
235
- # Use reduce to navigate through nested keys in the result
236
- slot_value = reduce(
237
- operator.getitem,
238
- mapping[CONFIG_RESULT_KEY].split("."),
239
- _result_as_dict,
240
- )
241
- slots.append(
242
- SlotSet(mapping[CONFIG_SLOT], _jsonify_slot_value(slot_value))
243
- )
244
- except (KeyError, TypeError):
245
- structlogger.error(
246
- "call_mcp_tool.result_key_not_found_in_tool_result",
247
- slot=mapping[CONFIG_SLOT],
248
- result_key=mapping[CONFIG_RESULT_KEY],
249
- result=_result_as_dict,
250
- )
251
- return None
252
- return slots
253
- except Exception as e:
254
- structlogger.error(
255
- "call_mcp_tool.result_processing_failed",
256
- error=str(e),
257
- result=result,
258
- )
259
- return None
260
-
261
-
262
- def _handle_mcp_tool_error(
263
- stack: DialogueStack,
264
- events: List[Event],
265
- error_message: str,
266
- tool_name: str,
267
- mcp_server: Optional[str],
268
- ) -> FlowStepResult:
269
- """Handle MCP tool errors consistently."""
270
- structlogger.error(
271
- "call_mcp_tool.error",
272
- error_message=error_message,
273
- tool_name=tool_name,
274
- mcp_server=mcp_server,
275
- )
276
- stack.push(InternalErrorPatternFlowStackFrame())
277
- return ContinueFlowWithNextStep(events=events)
@@ -1,91 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import re
4
- from dataclasses import dataclass
5
- from typing import Any, Dict, List
6
-
7
- import structlog
8
-
9
- from rasa.dialogue_understanding.commands.command import Command
10
- from rasa.dialogue_understanding.commands.command_syntax_manager import (
11
- CommandSyntaxManager,
12
- CommandSyntaxVersion,
13
- )
14
- from rasa.shared.core.events import Event
15
- from rasa.shared.core.flows import FlowsList
16
- from rasa.shared.core.trackers import DialogueStateTracker
17
-
18
- structlogger = structlog.get_logger()
19
-
20
-
21
- @dataclass
22
- class ContinueAgentCommand(Command):
23
- """A command to continue the currently active agent's execution."""
24
-
25
- @classmethod
26
- def command(cls) -> str:
27
- """Returns the command type."""
28
- return "continue agent"
29
-
30
- @classmethod
31
- def from_dict(cls, data: Dict[str, Any]) -> ContinueAgentCommand:
32
- """Converts the dictionary to a command.
33
-
34
- Returns:
35
- The converted dictionary.
36
- """
37
- return ContinueAgentCommand()
38
-
39
- def run_command_on_tracker(
40
- self,
41
- tracker: DialogueStateTracker,
42
- all_flows: FlowsList,
43
- original_tracker: DialogueStateTracker,
44
- ) -> List[Event]:
45
- """Runs the command on the tracker.
46
-
47
- Args:
48
- tracker: The tracker to run the command on.
49
- all_flows: All flows in the assistant.
50
- original_tracker: The tracker before any command was executed.
51
-
52
- Returns:
53
- The events to apply to the tracker.
54
- """
55
- # do nothing
56
- return []
57
-
58
- def __hash__(self) -> int:
59
- return hash(self.command())
60
-
61
- def __eq__(self, other: object) -> bool:
62
- return isinstance(other, ContinueAgentCommand)
63
-
64
- def to_dsl(self) -> str:
65
- """Converts the command to a DSL string."""
66
- mapper = {
67
- CommandSyntaxVersion.v1: "ContinueAgent()",
68
- CommandSyntaxVersion.v2: "continue agent",
69
- CommandSyntaxVersion.v3: "continue agent",
70
- }
71
- return mapper.get(
72
- CommandSyntaxManager.get_syntax_version(),
73
- mapper[CommandSyntaxManager.get_default_syntax_version()],
74
- )
75
-
76
- @classmethod
77
- def from_dsl(cls, match: re.Match, **kwargs: Any) -> ContinueAgentCommand:
78
- """Converts a DSL string to a command."""
79
- return ContinueAgentCommand()
80
-
81
- @staticmethod
82
- def regex_pattern() -> str:
83
- mapper = {
84
- CommandSyntaxVersion.v1: r"ContinueAgent\(\)",
85
- CommandSyntaxVersion.v2: r"""^[\s\W\d]*continue agent['"`]*$""",
86
- CommandSyntaxVersion.v3: r"""^[\s\W\d]*continue agent['"`]*$""",
87
- }
88
- return mapper.get(
89
- CommandSyntaxManager.get_syntax_version(),
90
- mapper[CommandSyntaxManager.get_default_syntax_version()],
91
- )
@@ -1,162 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import re
4
- from dataclasses import dataclass
5
- from typing import Any, Dict, List, Optional
6
-
7
- from rasa.dialogue_understanding.commands.command import Command
8
- from rasa.dialogue_understanding.commands.command_syntax_manager import (
9
- CommandSyntaxManager,
10
- CommandSyntaxVersion,
11
- )
12
- from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
13
- from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
14
- AgentStackFrame,
15
- AgentState,
16
- )
17
- from rasa.shared.core.events import AgentStarted, Event
18
- from rasa.shared.core.flows import FlowsList
19
- from rasa.shared.core.flows.steps import CallFlowStep
20
- from rasa.shared.core.trackers import DialogueStateTracker
21
-
22
-
23
- @dataclass
24
- class RestartAgentCommand(Command):
25
- """A command to restart an agentic loop within a flow."""
26
-
27
- agent_id: str
28
-
29
- @classmethod
30
- def command(cls) -> str:
31
- """Returns the command type."""
32
- return "restart agent"
33
-
34
- @classmethod
35
- def from_dict(cls, data: Dict[str, Any]) -> RestartAgentCommand:
36
- """Converts the dictionary to a command.
37
-
38
- Returns:
39
- The converted dictionary.
40
- """
41
- try:
42
- return RestartAgentCommand(agent_id=data["agent_id"])
43
- except KeyError as e:
44
- raise ValueError(
45
- f"Missing parameter '{e}' while parsing RestartAgentCommand."
46
- ) from e
47
-
48
- def run_command_on_tracker(
49
- self,
50
- tracker: DialogueStateTracker,
51
- all_flows: FlowsList,
52
- original_tracker: DialogueStateTracker,
53
- ) -> List[Event]:
54
- """Runs the command on the tracker.
55
-
56
- Args:
57
- tracker: The tracker to run the command on.
58
- all_flows: All flows in the assistant.
59
- original_tracker: The tracker before any command was executed.
60
-
61
- Returns:
62
- The events to apply to the tracker.
63
- """
64
- stack = tracker.stack
65
-
66
- # get the agent flow
67
- agent_flow_id = self._get_agent_flow(original_tracker)
68
-
69
- # create a new agent stack frame to restart the agent
70
- restart_agent_frame = self.create_restart_agent_stack_frame(
71
- all_flows, agent_flow_id
72
- )
73
-
74
- # if the stack contains an agent stack frame with status
75
- # "waiting for input" update the status to "interrupted"
76
- self.update_agent_stack_frames_on_stack(stack)
77
-
78
- # push the stack frame on the top of the stack
79
- stack.push(restart_agent_frame)
80
- return tracker.create_stack_updated_events(stack)
81
-
82
- def __hash__(self) -> int:
83
- return hash(self.command())
84
-
85
- def __eq__(self, other: object) -> bool:
86
- return isinstance(other, RestartAgentCommand)
87
-
88
- def to_dsl(self) -> str:
89
- """Converts the command to a DSL string."""
90
- mapper = {
91
- CommandSyntaxVersion.v1: f"RestartAgent({self.agent_id})",
92
- CommandSyntaxVersion.v2: f"restart agent {self.agent_id}",
93
- CommandSyntaxVersion.v3: f"restart agent {self.agent_id}",
94
- }
95
- return mapper.get(
96
- CommandSyntaxManager.get_syntax_version(),
97
- mapper[CommandSyntaxManager.get_default_syntax_version()],
98
- )
99
-
100
- @classmethod
101
- def from_dsl(cls, match: re.Match, **kwargs: Any) -> RestartAgentCommand:
102
- """Converts a DSL string to a command."""
103
- return RestartAgentCommand(agent_id=str(match.group(1).strip()))
104
-
105
- @staticmethod
106
- def regex_pattern() -> str:
107
- mapper = {
108
- CommandSyntaxVersion.v1: r"RestartAgent\(['\"]?([a-zA-Z0-9_-]+)['\"]?\)",
109
- CommandSyntaxVersion.v2: (
110
- r"""^[\s\W\d]*restart agent ['"`]?([a-zA-Z0-9_-]+)['"`]*"""
111
- ),
112
- CommandSyntaxVersion.v3: (
113
- r"""^[\s\W\d]*restart agent ['"`]?([a-zA-Z0-9_-]+)['"`]*"""
114
- ),
115
- }
116
- return mapper.get(
117
- CommandSyntaxManager.get_syntax_version(),
118
- mapper[CommandSyntaxManager.get_default_syntax_version()],
119
- )
120
-
121
- def create_restart_agent_stack_frame(
122
- self, all_flows: FlowsList, agent_flow_id: str
123
- ) -> AgentStackFrame:
124
- # get the agent flow
125
- agent_flow = all_flows.flow_by_id(agent_flow_id)
126
- if not agent_flow:
127
- raise ValueError(f"Agent flow {agent_flow_id} not found")
128
-
129
- # find the call flow step for the agent
130
- # set the state to "waiting for input" so that the agent can process
131
- # the latest user message
132
- for step in agent_flow.steps:
133
- if isinstance(step, CallFlowStep) and step.call == self.agent_id:
134
- return AgentStackFrame(
135
- frame_id=f"restart_agent_{self.agent_id}",
136
- flow_id=agent_flow_id,
137
- step_id=step.id,
138
- agent_id=self.agent_id,
139
- state=AgentState.WAITING_FOR_INPUT,
140
- )
141
-
142
- raise ValueError(f"Call step in agent flow {agent_flow_id} not found")
143
-
144
- def update_agent_stack_frames_on_stack(self, stack: DialogueStack) -> None:
145
- for frame in stack.frames:
146
- if (
147
- isinstance(frame, AgentStackFrame)
148
- and frame.state == AgentState.WAITING_FOR_INPUT
149
- ):
150
- frame.state = AgentState.INTERRUPTED
151
-
152
- def _get_agent_flow(self, tracker: DialogueStateTracker) -> Optional[str]:
153
- # find events associated with the agent
154
- agent_started_events = [
155
- event
156
- for event in tracker.events
157
- if type(event) == AgentStarted and event.agent_id == self.agent_id
158
- ]
159
- # take the last one if the agent was started multiple times
160
- if agent_started_events:
161
- return agent_started_events[-1].flow_id
162
- return None
@@ -1,61 +0,0 @@
1
- ## Task Description
2
- Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests.
3
-
4
- --
5
-
6
- ## Available Actions:
7
- * `start flow flow_name`: Starting a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
8
- * `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
9
- * `cancel flow`: Cancelling the current flow.
10
- * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: Disambiguate which flow should be started when user input is ambiguous by listing the potential flows as options. For example, `disambiguate flows list_contacts add_contact remove_contact ...` if the user just wrote "contacts".
11
- * `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
12
- * `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
13
- * `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
14
- * `repeat message`: Repeating the last bot message.
15
- {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
16
- {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
17
-
18
- --
19
-
20
- ## General Tips
21
- * Do not fill slots with abstract values or placeholders.
22
- * For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
23
- * Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
24
- * Always refer to the slot description to determine what information should be extracted and how it should be formatted.
25
- * For text slots, extract values exactly as provided by the user unless the slot description specifies otherwise. Preserve formatting and avoid rewording, truncation, or making assumptions.
26
- * Only use information provided by the user.
27
- * Use clarification in ambiguous cases.
28
- * Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
29
- * Do not cancel the flow unless the user explicitly requests it.
30
- * Strictly adhere to the provided action format.
31
- * Focus on the last message and take it one step at a time.
32
- * Use the previous conversation steps only to aid understanding.
33
-
34
- --
35
-
36
- ## Available Flows and Slots
37
- Use the following structured data:
38
- ```json
39
- {"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
40
- ```
41
-
42
- --
43
-
44
- ## Current State
45
- {% if current_flow != None %}Use the following structured data:
46
- ```json
47
- {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
48
- ```{% else %}
49
- You are currently not inside any flow.{% endif %}
50
-
51
- ---
52
-
53
- ## Conversation History
54
- {{ current_conversation }}
55
-
56
- ---
57
-
58
- ## Task
59
- Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
60
-
61
- Your action list:
@@ -1,81 +0,0 @@
1
- ## Task Description
2
- Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to off-topic and knowledge requests.
3
-
4
- ---
5
-
6
- ## Available Actions:
7
- * `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
8
- * `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
9
- * `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
10
- * `search and reply`: Provide a response from the knowledge base to address the user's inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
11
- * `cancel flow`: Cancel the current flow if the user requests it.
12
- * `repeat message`: Repeat the last bot message.
13
- {% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
14
- {% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
15
-
16
- ---
17
-
18
- ## General Instructions
19
- ### Start Flow
20
- * Only start a flow if the user's message is clear and fully addressed by that flow's description and purpose.
21
- * Pay close attention to exact wording and scope in the flow description — do not assume or “stretch” the intended use of a flow.
22
- ### Set Slot
23
- * Do not fill slots with abstract values or placeholders.
24
- * For categorical slots, try to match the user message with allowed slot values. Use "other" if you cannot match it.
25
- * Set the boolean slots based on the user's response. Map positive responses to `True`, and negative to `False`.
26
- * Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
27
- ### Disambiguate Flows
28
- * Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
29
- * If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
30
- * If a single flow is a strong/plausible fit, prefer starting that flow directly.
31
- * If a user's message unambiguously and distinctly matches multiple flows, start all relevant flows at once (rather than disambiguating).
32
- ### Search and Reply
33
- * Only start `search and reply` if the user intent is clear.
34
- * Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
35
- ### Cancel Flow
36
- * Do not cancel any flow unless the user explicitly requests it.
37
- * Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
38
- ### General Tips
39
- * Only use information provided by the user.
40
- * Strictly adhere to the provided action format.
41
- * Focus on the last message and take it one step at a time.
42
- * Use the previous conversation steps only to aid understanding.
43
-
44
- ---
45
-
46
- ## Decision Rule Table
47
- | Condition | Action |
48
- |-------------------------------------------------------|--------------------|
49
- | Flow perfectly matches user's message | start flow |
50
- | Multiple flows are equally strong, relevant matches | disambiguate flows |
51
- | User's message is unclear or imprecise | disambiguate flows |
52
- | No flow fits at all, but knowledge base may help | search and reply |
53
-
54
- ---
55
-
56
- ## Available Flows and Slots
57
- Use the following structured data:
58
- ```json
59
- {"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
60
- ```
61
-
62
- ---
63
-
64
- ## Current State
65
- {% if current_flow != None %}Use the following structured data:
66
- ```json
67
- {"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
68
- ```{% else %}
69
- You are currently not inside any flow.{% endif %}
70
-
71
- ---
72
-
73
- ## Conversation History
74
- {{ current_conversation }}
75
-
76
- ---
77
-
78
- ## Task
79
- Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
80
-
81
- Your action list: