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,469 +0,0 @@
1
- import importlib
2
- import json
3
- import re
4
- from typing import Any, Dict, List, Optional, Tuple
5
-
6
- import structlog
7
- from jinja2 import Template
8
- from pypred import Predicate
9
-
10
- from rasa.agents.constants import (
11
- KEY_CONTENT,
12
- KEY_ROLE,
13
- KEY_TOOL_CALL_ID,
14
- )
15
- from rasa.agents.core.types import AgentStatus, ProtocolType
16
- from rasa.agents.protocol.mcp.mcp_base_agent import MCPBaseAgent
17
- from rasa.agents.schemas import (
18
- AgentInput,
19
- AgentOutput,
20
- AgentToolResult,
21
- AgentToolSchema,
22
- )
23
- from rasa.agents.schemas.agent_input import AgentInputSlot
24
- from rasa.core.available_agents import AgentMCPServerConfig, ProtocolConfig
25
- from rasa.shared.agents.utils import make_agent_identifier
26
- from rasa.shared.constants import (
27
- ROLE_TOOL,
28
- )
29
- from rasa.shared.core.events import SlotSet
30
- from rasa.shared.providers.llm.llm_response import LLMResponse
31
-
32
- DEFAULT_TASK_AGENT_PROMPT_TEMPLATE = importlib.resources.read_text(
33
- "rasa.agents.templates", "mcp_task_agent_prompt_template.jinja2"
34
- )
35
-
36
- structlogger = structlog.get_logger()
37
-
38
-
39
- class MCPTaskAgent(MCPBaseAgent):
40
- """MCPTaskAgent client implementation"""
41
-
42
- def __init__(
43
- self,
44
- name: str,
45
- description: str,
46
- protocol_type: ProtocolConfig,
47
- server_configs: List[AgentMCPServerConfig],
48
- llm_config: Optional[Dict[str, Any]] = None,
49
- prompt_template: Optional[str] = None,
50
- timeout: Optional[int] = None,
51
- max_retries: Optional[int] = None,
52
- ):
53
- super().__init__(
54
- name,
55
- description,
56
- protocol_type,
57
- server_configs,
58
- llm_config,
59
- prompt_template,
60
- timeout,
61
- max_retries,
62
- )
63
-
64
- @property
65
- def protocol_type(self) -> ProtocolType:
66
- return ProtocolType.MCP_TASK
67
-
68
- @staticmethod
69
- def get_default_prompt_template() -> str:
70
- return DEFAULT_TASK_AGENT_PROMPT_TEMPLATE
71
-
72
- @classmethod
73
- def get_agent_specific_built_in_tools(
74
- cls, agent_input: AgentInput
75
- ) -> List[AgentToolSchema]:
76
- """Get agentic specific built-in tools."""
77
- slot_names = cls._get_slot_names_from_exit_conditions(agent_input)
78
- slot_definitions = [
79
- slot for slot in agent_input.slots if slot.name in slot_names
80
- ]
81
-
82
- return [
83
- AgentToolSchema.from_openai_json_format(
84
- cls.get_slot_specific_set_slot_tool(slot)
85
- )
86
- for slot in slot_definitions
87
- ]
88
-
89
- @classmethod
90
- def _get_slot_names_from_exit_conditions(cls, agent_input: AgentInput) -> List[str]:
91
- """Extract valid slot names from exit conditions."""
92
- exit_conditions = agent_input.metadata.get("exit_if", [])
93
-
94
- # Find all unique names matching "slots.<name>"
95
- extracted_slot_names = {
96
- name
97
- for condition in exit_conditions
98
- for name in re.findall(r"\bslots\.(\w+)", condition)
99
- }
100
-
101
- slot_names = agent_input.slot_names
102
-
103
- # Keep only slots that actually exist in agent_input.slots
104
- valid_slot_names = [
105
- slot_name for slot_name in extracted_slot_names if slot_name in slot_names
106
- ]
107
-
108
- structlogger.debug(
109
- "mcp_task_agent.get_agent_specific_built_in_tools.slot_names",
110
- exit_conditions=exit_conditions,
111
- slot_names=valid_slot_names,
112
- )
113
-
114
- return valid_slot_names
115
-
116
- @classmethod
117
- def get_slot_specific_set_slot_tool(cls, slot: AgentInputSlot) -> Dict[str, Any]:
118
- """Get the set slot tool."""
119
- tool_description = f"Set the slot '{slot.name}' to a specific value. "
120
- tool_description += f"The slot type is {slot.type}."
121
- if slot.type == "categorical":
122
- tool_description += f" The allowed values are: {slot.allowed_values}."
123
-
124
- return {
125
- "type": "function",
126
- "function": {
127
- "name": f"set_slot_{slot.name}",
128
- "description": tool_description,
129
- "parameters": {
130
- "type": "object",
131
- "properties": {
132
- "slot_value": {
133
- "type": "string",
134
- "description": "The value to assign to the slot.",
135
- },
136
- },
137
- "required": ["slot_value"],
138
- "additionalProperties": False,
139
- },
140
- "strict": True,
141
- },
142
- }
143
-
144
- @classmethod
145
- def _is_exit_conditions_met(
146
- cls, agent_input: AgentInput, slots: Dict[str, Any]
147
- ) -> Tuple[bool, Optional[str]]:
148
- """Check if the exit conditions are met.
149
-
150
- Args:
151
- agent_input: The agent input.
152
- slots: The slots to check the exit conditions against.
153
-
154
- Returns:
155
- A tuple containing a boolean indicating if the exit conditions are met
156
- and a string indicating if an internal error occurred.
157
- """
158
- if not slots:
159
- return False, None
160
-
161
- exit_conditions = agent_input.metadata.get("exit_if", [])
162
- current_context = {"slots": slots}
163
-
164
- internal_error = None
165
- all_conditions_met = True
166
-
167
- for condition in exit_conditions:
168
- try:
169
- rendered_template = Template(condition).render(current_context)
170
- predicate = Predicate(rendered_template)
171
- condition_result = predicate.evaluate(current_context)
172
- structlogger.debug(
173
- "mcp_task_agent.is_exit_conditions_met.predicate.result",
174
- predicate=predicate.description(),
175
- condition_result=condition_result,
176
- slots=slots,
177
- rendered_template=rendered_template,
178
- )
179
-
180
- # All conditions must be met (AND logic)
181
- if not condition_result:
182
- all_conditions_met = False
183
- break
184
-
185
- except (TypeError, Exception) as e:
186
- structlogger.error(
187
- "mcp_task_agent.is_exit_conditions_met.predicate.error",
188
- predicate=condition,
189
- error=str(e),
190
- )
191
- all_conditions_met = False
192
- internal_error = str(e)
193
- break
194
-
195
- structlogger.debug(
196
- "mcp_task_agent.is_exit_conditions_met.result",
197
- all_conditions_met=all_conditions_met,
198
- internal_error=internal_error,
199
- )
200
-
201
- return all_conditions_met, internal_error
202
-
203
- def _get_slot_name_from_tool_name(self, tool_name: str) -> Optional[str]:
204
- """Get the slot name from the tool name."""
205
- match = re.match(r"^set_slot_(\w+)$", tool_name)
206
- if match:
207
- return match.group(1)
208
- return None
209
-
210
- def _run_set_slot_tool(
211
- self, slot_name: str, arguments: Dict[str, Any]
212
- ) -> Dict[str, Any]:
213
- """Run the set slot tool."""
214
- slot_value = arguments.get("slot_value")
215
-
216
- # Handle type conversion for common cases
217
- if isinstance(slot_value, str):
218
- # Convert common boolean strings to actual booleans
219
- if slot_value.lower() == "true":
220
- slot_value = True
221
- elif slot_value.lower() == "false":
222
- slot_value = False
223
-
224
- return {slot_name: slot_value}
225
-
226
- def _generate_agent_task_completed_output(
227
- self,
228
- agent_input: AgentInput,
229
- slots: Dict[str, Any],
230
- tool_results: Dict[str, AgentToolResult],
231
- ) -> AgentOutput:
232
- """Generate an agent task completed output."""
233
- _slot_names_to_be_filled = self._get_slot_names_from_exit_conditions(
234
- agent_input
235
- )
236
- return AgentOutput(
237
- id=agent_input.id,
238
- status=AgentStatus.COMPLETED,
239
- events=[
240
- SlotSet(slot_name, slot_value)
241
- for slot_name, slot_value in slots.items()
242
- if slot_name in _slot_names_to_be_filled
243
- ],
244
- tool_results=self._get_tool_results_for_agent_output(
245
- agent_input, tool_results
246
- ),
247
- )
248
-
249
- def render_prompt_template(self, context: AgentInput) -> str:
250
- """Render the prompt template with the provided inputs."""
251
- slot_names = self._get_slot_names_from_exit_conditions(context)
252
-
253
- return Template(self.prompt_template).render(
254
- **context.model_dump(exclude={"id", "timestamp", "events"}),
255
- description=self._description,
256
- slot_names=slot_names,
257
- )
258
-
259
- async def send_message(self, agent_input: AgentInput) -> AgentOutput:
260
- """Send a message to the LLM and return the response."""
261
- messages = self.build_messages_for_llm_request(agent_input)
262
- tool_results: Dict[str, AgentToolResult] = {}
263
-
264
- _slot_values = {slot.name: slot.value for slot in agent_input.slots}
265
- _available_tools = self.get_available_tools(agent_input)
266
- _available_tools_names = [tool.name for tool in _available_tools]
267
-
268
- # Convert available tools to OpenAI JSON format
269
- tools_in_openai_format = [
270
- tool.to_openai_json_format() for tool in _available_tools
271
- ]
272
-
273
- for iteration in range(self.MAX_ITERATIONS):
274
- try:
275
- # Make the LLM call using the llm_client
276
- structlogger.info(
277
- "mcp_task_agent.send_message.sending_message_to_llm",
278
- messages=messages,
279
- event_info=f"Sending message to LLM (iteration {iteration + 1})",
280
- agent_name=self._name,
281
- agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
282
- )
283
- llm_response = LLMResponse.ensure_llm_response(
284
- await self.llm_client.acompletion(
285
- messages, tools=tools_in_openai_format
286
- )
287
- )
288
-
289
- # If no response from LLM, return an error output.
290
- if llm_response is None or not (
291
- llm_response.choices or llm_response.tool_calls
292
- ):
293
- event_info = "No response from LLM."
294
- structlogger.warning(
295
- "mcp_task_agent.send_message.no_llm_response",
296
- event_info=event_info,
297
- agent_name=self._name,
298
- agent_id=str(
299
- make_agent_identifier(self._name, self.protocol_type)
300
- ),
301
- )
302
- return AgentOutput(
303
- id=agent_input.id,
304
- status=AgentStatus.RECOVERABLE_ERROR,
305
- error_message=event_info,
306
- tool_results=self._get_tool_results_for_agent_output(
307
- agent_input, tool_results
308
- ),
309
- )
310
-
311
- # If no tool calls, return the response directly with input required.
312
- if not llm_response.tool_calls and len(llm_response.choices) == 1:
313
- return AgentOutput(
314
- id=agent_input.id,
315
- status=AgentStatus.INPUT_REQUIRED,
316
- response_message=llm_response.choices[0],
317
- tool_results=self._get_tool_results_for_agent_output(
318
- agent_input, tool_results
319
- ),
320
- )
321
-
322
- # If there are tool calls, process them.
323
- if llm_response.tool_calls:
324
- # Add the assistant message with tool calls to the messages.
325
- messages.append(
326
- self._get_assistant_message_with_tool_calls(llm_response)
327
- )
328
- for tool_call in llm_response.tool_calls:
329
- structlogger.info(
330
- "mcp_task_agent.send_message.tool_call",
331
- event_info=(
332
- f"Processing tool call `{tool_call.tool_name}` with "
333
- f"args: {tool_call.tool_args}"
334
- ),
335
- tool_name=tool_call.tool_name,
336
- tool_args=json.dumps(tool_call.tool_args),
337
- agent_name=self._name,
338
- agent_id=str(
339
- make_agent_identifier(self._name, self.protocol_type)
340
- ),
341
- )
342
-
343
- # If the tool is not available, return a fatal error output.
344
- if tool_call.tool_name not in _available_tools_names:
345
- event_info = f"Tool {tool_call.tool_name} is not available."
346
- structlogger.error(
347
- "mcp_task_agent.send_message.tool_not_available",
348
- tool_name=tool_call.tool_name,
349
- event_info=event_info,
350
- user_message=agent_input.user_message,
351
- )
352
- return AgentOutput(
353
- id=agent_input.id,
354
- status=AgentStatus.FATAL_ERROR,
355
- error_message=event_info,
356
- )
357
-
358
- if slot_name := self._get_slot_name_from_tool_name(
359
- tool_call.tool_name
360
- ):
361
- if (
362
- slot_name in _slot_values
363
- and "slot_value" in tool_call.tool_args
364
- ):
365
- _slot_values.update(
366
- self._run_set_slot_tool(
367
- slot_name, tool_call.tool_args
368
- )
369
- )
370
-
371
- # Add the tool call message to the messages for
372
- # slot-setting tools
373
- messages.append(
374
- {
375
- KEY_ROLE: ROLE_TOOL,
376
- KEY_TOOL_CALL_ID: tool_call.id,
377
- KEY_CONTENT: f"Slot {slot_name} set to "
378
- f"{tool_call.tool_args.get('slot_value')}",
379
- }
380
- )
381
- else:
382
- return AgentOutput(
383
- id=agent_input.id,
384
- status=AgentStatus.FATAL_ERROR,
385
- error_message=(
386
- f"The slot `{slot_name}` that the tool "
387
- f"`{tool_call.tool_name}` is trying to set "
388
- f"is not found in agent input."
389
- ),
390
- )
391
- else:
392
- # Execute the tool call.
393
- tool_output = await self._execute_tool_call(
394
- tool_call.tool_name,
395
- tool_call.tool_args,
396
- )
397
-
398
- # If the tool call failed, generate an agent error output.
399
- if tool_output.is_error or tool_output.result is None:
400
- return self._generate_agent_error_output(
401
- tool_output, agent_input, tool_call
402
- )
403
-
404
- # Store the tool output in the tool_results.
405
- tool_results[tool_call.id] = tool_output
406
-
407
- # Add the tool call message to the messages.
408
- messages.append(
409
- {
410
- KEY_ROLE: ROLE_TOOL,
411
- KEY_TOOL_CALL_ID: tool_call.id,
412
- KEY_CONTENT: tool_output.result,
413
- }
414
- )
415
-
416
- exit_met, internal_error = self._is_exit_conditions_met(
417
- agent_input, _slot_values
418
- )
419
-
420
- # Agent signals task completion if exit conditions are met.
421
- if exit_met:
422
- return self._generate_agent_task_completed_output(
423
- agent_input, _slot_values, tool_results
424
- )
425
-
426
- # If an internal error occurred while checking the exit
427
- # conditions, return a fatal error output.
428
- if internal_error:
429
- return AgentOutput(
430
- id=agent_input.id,
431
- status=AgentStatus.FATAL_ERROR,
432
- response_message=(
433
- "An internal error occurred while checking the "
434
- "exit conditions."
435
- ),
436
- tool_results=self._get_tool_results_for_agent_output(
437
- agent_input, tool_results
438
- ),
439
- error_message=internal_error,
440
- )
441
-
442
- except Exception as e:
443
- structlogger.error(
444
- "mcp_task_agent.send_message.error_in_agent_loop",
445
- event_info=f"Failed to send message: {e}",
446
- user_message=agent_input.user_message,
447
- agent_name=self._name,
448
- agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
449
- )
450
- return AgentOutput(
451
- id=agent_input.id,
452
- status=AgentStatus.FATAL_ERROR,
453
- response_message=f"I encountered an error: {e!s}",
454
- tool_results=self._get_tool_results_for_agent_output(
455
- agent_input, tool_results
456
- ),
457
- error_message=str(e),
458
- )
459
- return AgentOutput(
460
- id=agent_input.id,
461
- status=AgentStatus.COMPLETED,
462
- response_message=(
463
- "I've completed my research but couldn't provide a final answer within"
464
- "the allowed steps."
465
- ),
466
- tool_results=self._get_tool_results_for_agent_output(
467
- agent_input, tool_results
468
- ),
469
- )
@@ -1,12 +0,0 @@
1
- from rasa.agents.schemas.agent_input import AgentInput
2
- from rasa.agents.schemas.agent_output import AgentOutput
3
- from rasa.agents.schemas.agent_tool_result import AgentToolResult
4
- from rasa.agents.schemas.agent_tool_schema import AgentToolSchema, CustomToolSchema
5
-
6
- __all__ = [
7
- "AgentInput",
8
- "AgentOutput",
9
- "AgentToolSchema",
10
- "AgentToolResult",
11
- "CustomToolSchema",
12
- ]
@@ -1,38 +0,0 @@
1
- from typing import Any, Dict, List, Optional
2
-
3
- from pydantic import BaseModel
4
-
5
- from rasa.shared.core.events import Event
6
-
7
-
8
- class AgentInputSlot(BaseModel):
9
- """A class that represents the schema of the input slot to the agent."""
10
-
11
- name: str
12
- value: Any
13
- type: str
14
- allowed_values: Optional[List[Any]] = None
15
-
16
-
17
- class AgentInput(BaseModel):
18
- """A class that represents the schema of the input to the agent."""
19
-
20
- id: str
21
- user_message: str
22
- slots: List[AgentInputSlot]
23
- conversation_history: str
24
- events: List[Event]
25
- metadata: Dict[str, Any]
26
- timestamp: Optional[str] = None
27
-
28
- class Config:
29
- """Skip validation for Event class as pydantic does not know how to
30
- serialize or handle instances of the class.
31
- """
32
-
33
- arbitrary_types_allowed = True
34
-
35
- @property
36
- def slot_names(self) -> List[str]:
37
- """Get the names of the slots in the input."""
38
- return [slot.name for slot in self.slots]
@@ -1,26 +0,0 @@
1
- from typing import Any, Dict, List, Optional
2
-
3
- from pydantic import BaseModel
4
-
5
- from rasa.agents.core.types import AgentStatus
6
- from rasa.shared.core.events import SlotSet
7
-
8
-
9
- class AgentOutput(BaseModel):
10
- """A class that represents the schema of the output from the agent."""
11
-
12
- id: str
13
- status: AgentStatus
14
- response_message: Optional[str] = None
15
- events: Optional[List[SlotSet]] = None
16
- tool_results: Optional[List[List[Dict[str, Any]]]] = None
17
- metadata: Optional[Dict[str, Any]] = None
18
- timestamp: Optional[str] = None
19
- error_message: Optional[str] = None
20
-
21
- class Config:
22
- """Skip validation for SlotSet class as pydantic does not know how to
23
- serialize or handle instances of the class.
24
- """
25
-
26
- arbitrary_types_allowed = True
@@ -1,51 +0,0 @@
1
- import json
2
- from typing import Optional
3
-
4
- from mcp.types import CallToolResult
5
- from pydantic import BaseModel
6
-
7
-
8
- class AgentToolResult(BaseModel):
9
- tool_name: str
10
- result: Optional[str] = None
11
- is_error: bool = False
12
- error_message: Optional[str] = None
13
-
14
- @classmethod
15
- def from_mcp_tool_result(
16
- cls, tool_name: str, tool_result: CallToolResult
17
- ) -> "AgentToolResult":
18
- if tool_result.isError:
19
- return cls(
20
- tool_name=tool_name,
21
- result=None,
22
- is_error=tool_result.isError,
23
- error_message=str(tool_result.content),
24
- )
25
-
26
- # try to use structured content if available
27
- if tool_result.structuredContent:
28
- return cls(
29
- tool_name=tool_name,
30
- result=json.dumps(tool_result.structuredContent),
31
- is_error=tool_result.isError,
32
- )
33
- # fallback to content if structured content is not available
34
- elif tool_result.content:
35
- # TODO try to parse the content using the output schema defined
36
- # in the tool schema (if present)
37
- return cls(
38
- tool_name=tool_name,
39
- result=json.dumps(
40
- [content.model_dump() for content in tool_result.content]
41
- ),
42
- is_error=tool_result.isError,
43
- )
44
- # if no content is available, return None
45
- else:
46
- return cls(
47
- tool_name=tool_name,
48
- result=None,
49
- is_error=tool_result.isError,
50
- error_message="No content returned from tool `{tool_name}`",
51
- )