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
@@ -0,0 +1,130 @@
1
+ test_results:
2
+
3
+ - name: billing happy path
4
+ pass_status: true
5
+ expected_steps:
6
+ - user: "I would like to check my bill"
7
+ assertions:
8
+ - flow_started: "understand_bill"
9
+ - bot_uttered:
10
+ utter_name: utter_ask_bill_month
11
+ - user: "January"
12
+ assertions:
13
+ - slot_was_set:
14
+ - name: "bill_month"
15
+ value: "January"
16
+ - action_executed: action_verify_bill_by_date
17
+ - bot_uttered:
18
+ utter_name: utter_ask_breakdown_cost
19
+ text_matches: Would you like to see the breakdown of the costs?
20
+ buttons:
21
+ - title: "Yes, please"
22
+ payload: "/SetSlots(breakdown_cost=True)"
23
+ - title: "No, all good"
24
+ payload: "/SetSlots(breakdown_cost=False)"
25
+ - user: "Yes, please"
26
+ assertions:
27
+ - action_executed: action_recap_bill
28
+ - bot_uttered:
29
+ utter_name: utter_ask_more_bill_details
30
+ - user: "/SetSlots(more_bill_details=True)"
31
+ assertions:
32
+ - bot_uttered:
33
+ utter_name: utter_provide_bill_sources
34
+
35
+ - name: billing unhappy path
36
+ pass_status: true
37
+ expected_steps:
38
+ - user: "I would like to check my bill"
39
+ assertions:
40
+ - flow_started: "understand_bill"
41
+ - bot_uttered:
42
+ utter_name: utter_ask_bill_month
43
+ - user: "February"
44
+ assertions:
45
+ - slot_was_set:
46
+ - name: "bill_month"
47
+ value: "February"
48
+ - action_executed: action_verify_bill_by_date
49
+ - bot_uttered:
50
+ utter_name: utter_ask_breakdown_cost
51
+ text_matches: Would you like to see the breakdown of the costs?
52
+ buttons:
53
+ - title: "Yes, please"
54
+ payload: "/SetSlots(breakdown_cost=True)"
55
+ - title: "No, all good"
56
+ payload: "/SetSlots(breakdown_cost=False)"
57
+ - user: "/SetSlots(breakdown_cost=False)"
58
+ assertions:
59
+ - bot_uttered:
60
+ utter_name: utter_ask_issue_solved
61
+ - user: "/SetSlots(issue_solved=True)"
62
+ assertions:
63
+ - bot_uttered:
64
+ utter_name: utter_end_conversation
65
+
66
+ - name: bot challenge and ask to connect to a human agent
67
+ pass_status: true
68
+ expected_steps:
69
+ - user: "who am I talking with?"
70
+ assertions:
71
+ - flow_started: "bot_challenge"
72
+ - bot_uttered:
73
+ utter_name: "utter_bot_challenge"
74
+ - user: "Indeed, I would like to speak with a human"
75
+ assertions:
76
+ - flow_started: "pattern_human_handoff"
77
+ - bot_uttered:
78
+ utter_name: "utter_more_help_needed_handoff_pattern"
79
+
80
+ - name: Solving Internet issue not slow
81
+ pass_status: true
82
+ expected_steps:
83
+ - user: "Hey, my internet is very slow. What's going on?"
84
+ assertions:
85
+ - flow_started: "fix_internet_slow"
86
+ - bot_uttered:
87
+ utter_name: "utter_acknowledge_issue"
88
+ - action_executed: action_sleep_few_sec
89
+ - flow_started: "run_diagnostics"
90
+ - bot_uttered:
91
+ utter_name: "utter_speed_network_not_issue"
92
+ - action_executed: "actions_run_speed_test"
93
+ - bot_uttered:
94
+ utter_name: "utter_propose_other_solutions"
95
+ - action_executed: "action_sleep_few_sec"
96
+ - bot_uttered:
97
+ utter_name: "utter_ask_more_help_needed"
98
+ - user: "/SetSlots(more_help_needed=True)"
99
+ assertions:
100
+ - flow_started: "pattern_human_handoff"
101
+
102
+ - name: out of scope topics
103
+ pass_status: true
104
+ expected_steps:
105
+ - user: "can you help me book a hotel or restaurant"
106
+ assertions:
107
+ - flow_started: "pattern_cannot_handle"
108
+ - bot_uttered:
109
+ utter_name: "utter_cannot_handle"
110
+ - user: "can we discuss politics"
111
+ assertions:
112
+ - flow_started: "pattern_cannot_handle"
113
+ - bot_uttered:
114
+ utter_name: "utter_cannot_handle"
115
+
116
+ - name: test pattern search
117
+ pass_status: true
118
+ expected_steps:
119
+ - user: "how do you run a network speed test?"
120
+ assertions:
121
+ - generative_response_is_grounded:
122
+ threshold: 0.90
123
+ ground_truth: "You can run a network speed test using special software such as \"Fast.com\", \"Speedtest.net\", or Google's \"Internet speed test\". Alternatively, if you have our app, you can go to the Home menu, select WLAN speed test and run it. These tests measure your internet connection's performance by evaluating download and upload speeds, ping, and jitter."
124
+ - user: "what is the difference between restart and reset a router"
125
+ assertions:
126
+ - flow_completed:
127
+ flow_id: "pattern_search"
128
+ - generative_response_is_grounded:
129
+ threshold: 0.90
130
+ ground_truth: "Restarting or rebooting a router involves turning it off and back on without changing any settings, which can help resolve temporary issues like slow speeds or dropped connections. Resetting a router, however, restores it to factory settings, erasing all custom configurations such as the Wi-Fi name, password, and advanced settings. Resetting should only be done as a last resort when troubleshooting persistent problems."
@@ -0,0 +1,68 @@
1
+ fixtures:
2
+ - customer_information: # name of the fixture must be provided and be unique
3
+ - customer_id: "124" # every fixture can contain multiple slot key-value pairs
4
+ # This will be helpful when to se user information
5
+
6
+ test_cases:
7
+ - test_case: billing happy path
8
+ fixtures:
9
+ - customer_information
10
+ steps:
11
+ - user: "I would like to check my bill"
12
+ assertions:
13
+ - flow_started: "understand_bill"
14
+ - bot_uttered:
15
+ utter_name: utter_ask_bill_month
16
+ - user: "January"
17
+ assertions:
18
+ - slot_was_set:
19
+ - name: "bill_month"
20
+ value: "January"
21
+ - action_executed: action_verify_bill_by_date
22
+ - bot_uttered:
23
+ utter_name: utter_ask_breakdown_cost
24
+ text_matches: Would you like to see the breakdown of the costs?
25
+ buttons:
26
+ - title: "Yes, please"
27
+ payload: "/SetSlots(breakdown_cost=True)"
28
+ - title: "No, all good"
29
+ payload: "/SetSlots(breakdown_cost=False)"
30
+ - user: "Yes, please"
31
+ assertions:
32
+ - action_executed: action_recap_bill
33
+ - bot_uttered:
34
+ utter_name: utter_ask_more_bill_details
35
+ - user: "/SetSlots(more_bill_details=True)"
36
+ assertions:
37
+ - bot_uttered:
38
+ utter_name: utter_provide_bill_sources
39
+ # ====================================================>
40
+ - test_case: billing unhappy path
41
+ steps:
42
+ - user: "I would like to check my bill"
43
+ assertions:
44
+ - flow_started: "understand_bill"
45
+ - bot_uttered:
46
+ utter_name: utter_ask_bill_month
47
+ - user: "February"
48
+ assertions:
49
+ - slot_was_set:
50
+ - name: "bill_month"
51
+ value: "February"
52
+ - action_executed: action_verify_bill_by_date
53
+ - bot_uttered:
54
+ utter_name: utter_ask_breakdown_cost
55
+ text_matches: Would you like to see the breakdown of the costs?
56
+ buttons:
57
+ - title: "Yes, please"
58
+ payload: "/SetSlots(breakdown_cost=True)"
59
+ - title: "No, all good"
60
+ payload: "/SetSlots(breakdown_cost=False)"
61
+ - user: "/SetSlots(breakdown_cost=False)"
62
+ assertions:
63
+ - bot_uttered:
64
+ utter_name: utter_ask_issue_solved
65
+ - user: "/SetSlots(issue_solved=True)"
66
+ assertions:
67
+ - bot_uttered:
68
+ utter_name: utter_end_conversation
@@ -0,0 +1,13 @@
1
+ test_cases:
2
+ - test_case: bot challenge and ask to connect to a human agent
3
+ steps:
4
+ - user: "who am I talking with?"
5
+ assertions:
6
+ - flow_started: "bot_challenge"
7
+ - bot_uttered:
8
+ utter_name: "utter_bot_challenge"
9
+ - user: "Indeed, I would like to speak with a human"
10
+ assertions:
11
+ - flow_started: "pattern_human_handoff"
12
+ - bot_uttered:
13
+ utter_name: "utter_more_help_needed_handoff_pattern"
@@ -0,0 +1,47 @@
1
+ test_cases:
2
+ # one of these test cases will fail since the speed test will be randomly selected
3
+ - test_case: Solving Internet slow issue
4
+ steps:
5
+ - user: "Hey, my internet is very slow. What's going on?"
6
+ assertions:
7
+ - flow_started: "fix_internet_slow"
8
+ - bot_uttered:
9
+ utter_name: "utter_acknowledge_issue"
10
+ - action_executed: action_sleep_few_sec
11
+ - flow_started: "run_diagnostics"
12
+ - bot_uttered:
13
+ utter_name: "utter_communicate_run_diagnosticss"
14
+ - action_executed: "actions_run_speed_test"
15
+ - bot_uttered:
16
+ utter_name: "utter_acknowledge_speed_test_not_good"
17
+ - action_executed: "action_sleep_few_sec"
18
+ - bot_uttered:
19
+ utter_name: "utter_propose_reboot_router_solution"
20
+ - action_executed: "action_sleep_few_sec"
21
+ - flow_started: "reboot_router"
22
+ - slot_was_set:
23
+ - name: "reboot_router"
24
+ value: False
25
+ - flow_started: "pattern_human_handoff"
26
+
27
+
28
+ - test_case: Solving Internet issue not slow
29
+ steps:
30
+ - user: "Hey, my internet is very slow. What's going on?"
31
+ assertions:
32
+ - flow_started: "fix_internet_slow"
33
+ - bot_uttered:
34
+ utter_name: "utter_acknowledge_issue"
35
+ - action_executed: action_sleep_few_sec
36
+ - flow_started: "run_diagnostics"
37
+ - bot_uttered:
38
+ utter_name: "utter_speed_network_not_issue"
39
+ - action_executed: "actions_run_speed_test"
40
+ - bot_uttered:
41
+ utter_name: "utter_propose_other_solutions"
42
+ - action_executed: "action_sleep_few_sec"
43
+ - bot_uttered:
44
+ utter_name: "utter_ask_more_help_needed"
45
+ - user: "/SetSlots(more_help_needed=True)"
46
+ assertions:
47
+ - flow_started: "pattern_human_handoff"
@@ -0,0 +1,21 @@
1
+ test_cases:
2
+ - test_case: out of scope topics
3
+ steps:
4
+ - user: "can you help me book a hotel or restaurant"
5
+ assertions:
6
+ - flow_started: "pattern_cannot_handle"
7
+ - bot_uttered:
8
+ utter_name: "utter_cannot_handle"
9
+ # generated text:
10
+ #Thank you for your query!
11
+ # Booking a hotel or restaurant isn't really my strong suit, but I can certainly assist you if you're having issues with your internet speed or need clarification on your bill.
12
+ # Do you need help with any of those?
13
+ - user: "can we discuss politics"
14
+ assertions:
15
+ - flow_started: "pattern_cannot_handle"
16
+ - bot_uttered:
17
+ utter_name: "utter_cannot_handle"
18
+ # generated text:
19
+ # Thank you for your question!
20
+ # Discussing politics isn't really my strong suit, but I'm available to assist if you're having issues with your internet speed or need clarification on your bill.
21
+ # Can I help you with any of these?
@@ -0,0 +1,15 @@
1
+ test_cases:
2
+ - test_case: test pattern search
3
+ steps:
4
+ - user: "how do you run a network speed test?"
5
+ assertions:
6
+ - generative_response_is_grounded:
7
+ threshold: 0.90
8
+ ground_truth: "You can run a network speed test using special software such as \"Fast.com\", \"Speedtest.net\", or Google's \"Internet speed test\". Alternatively, if you have our app, you can go to the Home menu, select WLAN speed test and run it. These tests measure your internet connection's performance by evaluating download and upload speeds, ping, and jitter."
9
+ - user: "what is the difference between restart and reset a router"
10
+ assertions:
11
+ - flow_completed:
12
+ flow_id: "pattern_search"
13
+ - generative_response_is_grounded:
14
+ threshold: 0.90
15
+ ground_truth: "Restarting or rebooting a router involves turning it off and back on without changing any settings, which can help resolve temporary issues like slow speeds or dropped connections. Resetting a router, however, restores it to factory settings, erasing all custom configurations such as the Wi-Fi name, password, and advanced settings. Resetting should only be done as a last resort when troubleshooting persistent problems."
@@ -1,5 +1,6 @@
1
1
  recipe: default.v1
2
2
  language: en
3
+ assistant_id: placeholder_default
3
4
  pipeline:
4
5
  - name: CompactLLMCommandGenerator
5
6
  llm:
@@ -9,4 +10,4 @@ pipeline:
9
10
 
10
11
  policies:
11
12
  - name: FlowPolicy
12
- # - name: EnterpriseSearchPolicy
13
+ # - name: EnterpriseSearchPolicy
rasa/cli/run.py CHANGED
@@ -109,7 +109,6 @@ def run(args: argparse.Namespace) -> None:
109
109
  # configured
110
110
 
111
111
  import rasa.model
112
- from rasa.core.available_agents import AvailableAgents
113
112
  from rasa.core.available_endpoints import AvailableEndpoints
114
113
 
115
114
  # start server if remote storage is configured
@@ -124,9 +123,6 @@ def run(args: argparse.Namespace) -> None:
124
123
  rasa_run(**vars(args))
125
124
  return
126
125
 
127
- # load sub-agents
128
- AvailableAgents.get_instance(args.sub_agents)
129
-
130
126
  # start server if local model found
131
127
  args.model = _validate_model_path(args.model, "model", DEFAULT_MODELS_PATH)
132
128
  local_model_set = True
rasa/cli/scaffold.py CHANGED
@@ -5,6 +5,9 @@ from collections import defaultdict
5
5
  from enum import Enum
6
6
  from typing import List, Text
7
7
 
8
+ import randomname
9
+ import structlog
10
+
8
11
  from rasa import telemetry
9
12
  from rasa.api import train
10
13
  from rasa.cli import SubParsersAction
@@ -16,21 +19,38 @@ from rasa.shared.constants import (
16
19
  DEFAULT_MODELS_PATH,
17
20
  DOCS_BASE_URL,
18
21
  )
22
+ from rasa.shared.utils import yaml
19
23
  from rasa.shared.utils.cli import print_error_and_exit, print_success
20
24
 
25
+ structlogger = structlog.get_logger(__name__)
26
+
21
27
 
22
28
  class ProjectTemplateName(Enum):
23
29
  """Enum of CALM project templates."""
24
30
 
25
31
  DEFAULT = "default"
26
32
  TUTORIAL = "tutorial"
33
+ BASIC = "basic"
34
+ FINANCE = "finance"
35
+ TELCO = "telco"
27
36
 
28
37
  def __str__(self) -> str:
29
38
  return self.value
30
39
 
40
+ @classmethod
41
+ def get_all_values(cls) -> List[str]:
42
+ return [name.value for name in cls]
43
+
44
+ @classmethod
45
+ def supported_values(cls) -> str:
46
+ return ", ".join(cls.get_all_values())
47
+
31
48
 
32
49
  template_domain_path = defaultdict(lambda: DEFAULT_DOMAIN_PATH)
33
50
  template_domain_path[ProjectTemplateName.DEFAULT] = "domain"
51
+ template_domain_path[ProjectTemplateName.BASIC] = "domain"
52
+ template_domain_path[ProjectTemplateName.FINANCE] = "domain"
53
+ template_domain_path[ProjectTemplateName.TELCO] = "domain"
34
54
 
35
55
 
36
56
  def add_subparser(
@@ -159,9 +179,33 @@ def create_initial_project(
159
179
  path: Text, template: ProjectTemplateName = ProjectTemplateName.DEFAULT
160
180
  ) -> None:
161
181
  """Creates directory structure and templates for initial project."""
162
- from distutils.dir_util import copy_tree
182
+ import distutils.dir_util as dir_util
183
+
184
+ # clear the cache of the copy_tree function, this avoids issues if
185
+ # a project directory existed before and we removed folders in it
186
+ # with shutil.rmtree. see
187
+ # https://stackoverflow.com/questions/9160227/dir-util-copy-tree-fails-after-shutil-rmtree
188
+ if hasattr(dir_util, "_path_created"):
189
+ dir_util._path_created.clear()
190
+ else:
191
+ dir_util.SkipRepeatAbsolutePaths.clear() # type: ignore[attr-defined]
192
+ dir_util.copy_tree(scaffold_path(template), path)
163
193
 
164
- copy_tree(scaffold_path(template), path)
194
+ create_random_assistant_id(path)
195
+
196
+
197
+ def create_random_assistant_id(path: Text) -> None:
198
+ """Create a random assistant id."""
199
+ assistant_id = f"{randomname.get_name()}"
200
+ config = yaml.read_yaml_file(os.path.join(path, "config.yml"))
201
+
202
+ if isinstance(config, dict):
203
+ config["assistant_id"] = assistant_id
204
+ yaml.write_yaml(config, os.path.join(path, "config.yml"))
205
+ else:
206
+ structlogger.warning(
207
+ "cli.scaffold.create_random_assistant_id.invalid_config", config=config
208
+ )
165
209
 
166
210
 
167
211
  def scaffold_path(template: ProjectTemplateName) -> Text:
rasa/cli/shell.py CHANGED
@@ -6,7 +6,6 @@ from typing import List
6
6
  from rasa import telemetry
7
7
  from rasa.cli import SubParsersAction
8
8
  from rasa.cli.arguments import shell as arguments
9
- from rasa.cli.arguments.default_arguments import add_sub_agents_param
10
9
  from rasa.core.available_endpoints import AvailableEndpoints
11
10
  from rasa.engine.storage.local_model_storage import LocalModelStorage
12
11
  from rasa.exceptions import ModelNotFound
@@ -46,8 +45,6 @@ def add_subparser(
46
45
  help="Set the conversation ID.",
47
46
  )
48
47
 
49
- add_sub_agents_param(shell_parser)
50
-
51
48
  run_subparsers = shell_parser.add_subparsers()
52
49
 
53
50
  shell_nlu_subparser = run_subparsers.add_parser(
rasa/constants.py CHANGED
@@ -22,14 +22,8 @@ MINIMUM_COMPATIBLE_VERSION = "3.11.0rc1"
22
22
 
23
23
  GLOBAL_USER_CONFIG_PATH = os.path.expanduser("~/.config/rasa/global.yml")
24
24
 
25
- # Logging level for external libraries (default: ERROR to reduce noise)
26
25
  DEFAULT_LOG_LEVEL_LIBRARIES = "ERROR"
27
26
  ENV_LOG_LEVEL_LIBRARIES = "LOG_LEVEL_LIBRARIES"
28
-
29
- # MCP (Model Context Protocol) logging configuration
30
- ENV_LOG_LEVEL_MCP = "LOG_LEVEL_MCP"
31
- ENV_MCP_LOGGING_ENABLED = "MCP_LOGGING_ENABLED"
32
-
33
27
  ENV_LOG_LEVEL_MATPLOTLIB = "LOG_LEVEL_MATPLOTLIB"
34
28
  ENV_LOG_LEVEL_RABBITMQ = "LOG_LEVEL_RABBITMQ"
35
29
  ENV_LOG_LEVEL_KAFKA = "LOG_LEVEL_KAFKA"
@@ -47,7 +47,6 @@ from rasa.shared.constants import (
47
47
  UTTER_PREFIX,
48
48
  )
49
49
  from rasa.shared.core.constants import (
50
- ACTION_AGENT_REQUEST_USER_INPUT_NAME,
51
50
  ACTION_BACK_NAME,
52
51
  ACTION_DEACTIVATE_LOOP_NAME,
53
52
  ACTION_DEFAULT_ASK_AFFIRMATION_NAME,
@@ -57,8 +56,6 @@ from rasa.shared.core.constants import (
57
56
  ACTION_LISTEN_NAME,
58
57
  ACTION_METADATA_EXECUTION_ERROR_MESSAGE,
59
58
  ACTION_METADATA_EXECUTION_SUCCESS,
60
- ACTION_METADATA_MESSAGE_KEY,
61
- ACTION_METADATA_TEXT_KEY,
62
59
  ACTION_RESET_ROUTING,
63
60
  ACTION_RESTART_NAME,
64
61
  ACTION_REVERT_FALLBACK_EVENTS_NAME,
@@ -91,12 +88,7 @@ from rasa.shared.core.slot_mappings import (
91
88
  )
92
89
  from rasa.shared.core.trackers import DialogueStateTracker
93
90
  from rasa.shared.exceptions import RasaException
94
- from rasa.shared.nlu.constants import (
95
- INTENT,
96
- INTENT_NAME_KEY,
97
- INTENT_RANKING_KEY,
98
- PREDICTED_CONFIDENCE_KEY,
99
- )
91
+ from rasa.shared.nlu.constants import INTENT_NAME_KEY, INTENT_RANKING_KEY
100
92
  from rasa.shared.utils.io import raise_warning
101
93
  from rasa.shared.utils.schemas.events import EVENTS_SCHEMA
102
94
  from rasa.utils.endpoints import EndpointConfig
@@ -121,12 +113,6 @@ def default_actions(action_endpoint: Optional[EndpointConfig] = None) -> List["A
121
113
  from rasa.core.actions.two_stage_fallback import TwoStageFallbackAction
122
114
  from rasa.dialogue_understanding.patterns.cancel import ActionCancelFlow
123
115
  from rasa.dialogue_understanding.patterns.clarify import ActionClarifyFlows
124
- from rasa.dialogue_understanding.patterns.continue_interrupted import (
125
- ActionAskInterruptedFlowToContinue,
126
- ActionCancelInterruptedFlow,
127
- ActionContinueInterruptedFlow,
128
- ActionSetInterruptedFlows,
129
- )
130
116
  from rasa.dialogue_understanding.patterns.correction import ActionCorrectFlowSlot
131
117
 
132
118
  return [
@@ -141,7 +127,6 @@ def default_actions(action_endpoint: Optional[EndpointConfig] = None) -> List["A
141
127
  TwoStageFallbackAction(action_endpoint),
142
128
  ActionUnlikelyIntent(),
143
129
  ActionSendText(),
144
- ActionAgentRequestUserInfo(),
145
130
  ActionBack(),
146
131
  ActionExtractSlots(action_endpoint),
147
132
  ActionCancelFlow(),
@@ -154,10 +139,6 @@ def default_actions(action_endpoint: Optional[EndpointConfig] = None) -> List["A
154
139
  ActionResetRouting(),
155
140
  ActionHangup(),
156
141
  ActionRepeatBotMessages(),
157
- ActionContinueInterruptedFlow(),
158
- ActionSetInterruptedFlows(),
159
- ActionCancelInterruptedFlow(),
160
- ActionAskInterruptedFlowToContinue(),
161
142
  ]
162
143
 
163
144
 
@@ -892,8 +873,8 @@ class RemoteAction(Action):
892
873
  ) -> List[BotUttered]:
893
874
  """Use the responses generated by the action endpoint and utter them."""
894
875
  bot_messages = []
895
- domain: Optional[Domain] = kwargs.get("domain", None)
896
- action_name: Optional[str] = kwargs.get("action_name", None)
876
+ domain: Domain = kwargs.get("domain", None)
877
+ action_name: str = kwargs.get("action_name", None)
897
878
  for response in responses:
898
879
  generated_response = response.pop("response", None)
899
880
  if generated_response is not None:
@@ -916,7 +897,6 @@ class RemoteAction(Action):
916
897
  draft.setdefault("buttons", [])
917
898
  draft["buttons"].extend(buttons)
918
899
 
919
- # Avoid overwriting `draft` values with empty values
920
900
  response = {k: v for k, v in response.items() if v}
921
901
  response.update(draft)
922
902
  bot_messages.append(create_bot_utterance(response))
@@ -1034,13 +1014,13 @@ def _revert_affirmation_events(tracker: "DialogueStateTracker") -> List[Event]:
1034
1014
  revert_events += _revert_rephrasing_events()
1035
1015
 
1036
1016
  last_user_event = tracker.get_last_event_for(UserUttered)
1037
- if not last_user_event or not isinstance(last_user_event, UserUttered):
1038
- raise TypeError("Cannot find last user uttered event to revert to.")
1017
+ if not last_user_event:
1018
+ raise TypeError("Cannot find last event to revert to.")
1039
1019
 
1040
1020
  last_user_event = copy.deepcopy(last_user_event)
1041
1021
  # FIXME: better type annotation for `parse_data` would require
1042
1022
  # a larger refactoring (e.g. switch to dataclass)
1043
- last_user_event.parse_data[INTENT][PREDICTED_CONFIDENCE_KEY] = 1.0 # type: ignore[literal-required]
1023
+ last_user_event.parse_data["intent"]["confidence"] = 1.0 # type: ignore[typeddict-item]
1044
1024
 
1045
1025
  return revert_events + [last_user_event]
1046
1026
 
@@ -1057,8 +1037,8 @@ def _revert_single_affirmation_events() -> List[Event]:
1057
1037
 
1058
1038
  def _revert_successful_rephrasing(tracker: "DialogueStateTracker") -> List[Event]:
1059
1039
  last_user_event = tracker.get_last_event_for(UserUttered)
1060
- if not last_user_event or not isinstance(last_user_event, UserUttered):
1061
- raise TypeError("Cannot find last user uttered event to revert to.")
1040
+ if not last_user_event:
1041
+ raise TypeError("Cannot find last event to revert to.")
1062
1042
 
1063
1043
  last_user_event = copy.deepcopy(last_user_event)
1064
1044
  return _revert_rephrasing_events() + [last_user_event]
@@ -1158,9 +1138,9 @@ class ActionSendText(Action):
1158
1138
  metadata: Optional[Dict[Text, Any]] = None,
1159
1139
  ) -> List[Event]:
1160
1140
  """Runs action. Please see parent class for the full docstring."""
1161
- fallback = {ACTION_METADATA_TEXT_KEY: ""}
1141
+ fallback = {"text": ""}
1162
1142
  metadata_copy = copy.deepcopy(metadata) if metadata else {}
1163
- message = metadata_copy.get(ACTION_METADATA_MESSAGE_KEY, fallback)
1143
+ message = metadata_copy.get("message", fallback)
1164
1144
 
1165
1145
  should_send_text = metadata_copy.get("should_send_text", True)
1166
1146
  if should_send_text:
@@ -1168,32 +1148,6 @@ class ActionSendText(Action):
1168
1148
  return []
1169
1149
 
1170
1150
 
1171
- class ActionAgentRequestUserInfo(Action):
1172
- """Sends a text message to the output channel that requests some user information.
1173
-
1174
- The difference to `ActionSendText` is that this action will pause the main advancing
1175
- flow loop until the user responds to the request
1176
- (`should_predict_another_action` will return False for this action).
1177
- """
1178
-
1179
- def name(self) -> Text:
1180
- return ACTION_AGENT_REQUEST_USER_INPUT_NAME
1181
-
1182
- async def run(
1183
- self,
1184
- output_channel: "OutputChannel",
1185
- nlg: "NaturalLanguageGenerator",
1186
- tracker: "DialogueStateTracker",
1187
- domain: "Domain",
1188
- metadata: Optional[Dict[Text, Any]] = None,
1189
- ) -> List[Event]:
1190
- """Runs action. Please see parent class for the full docstring."""
1191
- fallback = {ACTION_METADATA_TEXT_KEY: ""}
1192
- metadata_copy = copy.deepcopy(metadata) if metadata else {}
1193
- message = metadata_copy.get(ACTION_METADATA_MESSAGE_KEY, fallback)
1194
- return [create_bot_utterance(message)]
1195
-
1196
-
1197
1151
  class ActionExtractSlots(Action):
1198
1152
  """Default action that runs after each user turn.
1199
1153
 
rasa/core/agent.py CHANGED
@@ -12,9 +12,7 @@ import aiohttp
12
12
  from aiohttp import ClientError
13
13
 
14
14
  import rasa.shared.utils.io
15
- from rasa.agents.utils import initialize_agents
16
15
  from rasa.core import jobs
17
- from rasa.core.available_agents import AvailableAgents
18
16
  from rasa.core.available_endpoints import AvailableEndpoints
19
17
  from rasa.core.channels.channel import OutputChannel, UserMessage
20
18
  from rasa.core.constants import DEFAULT_REQUEST_TIMEOUT
@@ -204,7 +202,6 @@ async def load_agent(
204
202
  model_server: Optional[EndpointConfig] = None,
205
203
  remote_storage: Optional[StorageType] = None,
206
204
  endpoints: Optional[AvailableEndpoints] = None,
207
- sub_agents: Optional[AvailableAgents] = None,
208
205
  loop: Optional[AbstractEventLoop] = None,
209
206
  ) -> Agent:
210
207
  """Loads agent from server, remote storage or disk.
@@ -214,7 +211,6 @@ async def load_agent(
214
211
  model_server: Configuration for a potential server which serves the model.
215
212
  remote_storage: Remote storage to use for loading the model.
216
213
  endpoints: Endpoint configuration.
217
- sub_agents: Sub-agents configuration.
218
214
  loop: Optional async loop to pass to broker creation.
219
215
 
220
216
  Returns:
@@ -285,16 +281,6 @@ async def load_agent(
285
281
  "No valid configuration given to load agent. "
286
282
  "Agent loaded with no model!"
287
283
  )
288
-
289
- if agent.processor:
290
- flows = await agent.processor.get_flows()
291
- domain = agent.processor.domain
292
- # CLI commands that accept --sub-agents
293
- # all route through this entry point.
294
- # With all required data available,
295
- # this is the best spot to initialize the subagents.
296
- await initialize_agents(flows, domain, sub_agents)
297
-
298
284
  return agent
299
285
 
300
286
  except Exception as e:
@@ -336,7 +322,6 @@ class Agent:
336
322
  remote_storage: Optional[StorageType] = None,
337
323
  http_interpreter: Optional[RasaNLUHttpInterpreter] = None,
338
324
  endpoints: Optional[AvailableEndpoints] = None,
339
- sub_agents: Optional[AvailableAgents] = None,
340
325
  privacy_manager: Optional[BackgroundPrivacyManager] = None,
341
326
  ):
342
327
  """Initializes an `Agent`."""
@@ -349,7 +334,6 @@ class Agent:
349
334
  self.action_endpoint = action_endpoint
350
335
  self.http_interpreter = http_interpreter
351
336
  self.endpoints = endpoints
352
- self.sub_agents = sub_agents
353
337
 
354
338
  self._set_fingerprint(fingerprint)
355
339
  self.model_server = model_server