rasa-pro 3.14.0.dev6__py3-none-any.whl → 3.14.0.dev8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (491) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/exceptions.py +31 -1
  4. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  5. rasa/agents/protocol/mcp/mcp_base_agent.py +37 -19
  6. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  7. rasa/agents/protocol/mcp/mcp_task_agent.py +33 -10
  8. rasa/agents/schemas/agent_output.py +1 -1
  9. rasa/agents/utils.py +95 -1
  10. rasa/agents/validation.py +484 -0
  11. rasa/api.py +9 -6
  12. rasa/builder/README.md +120 -0
  13. rasa/builder/__init__.py +0 -0
  14. rasa/builder/auth.py +176 -0
  15. rasa/builder/config.py +92 -0
  16. rasa/builder/copilot/__init__.py +0 -0
  17. rasa/builder/copilot/constants.py +31 -0
  18. rasa/builder/copilot/copilot.py +450 -0
  19. rasa/builder/copilot/copilot_response_handler.py +522 -0
  20. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  21. rasa/builder/copilot/exceptions.py +32 -0
  22. rasa/builder/copilot/models.py +500 -0
  23. rasa/builder/copilot/prompts/__init__.py +0 -0
  24. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  25. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  26. rasa/builder/copilot/signing.py +305 -0
  27. rasa/builder/copilot/telemetry.py +210 -0
  28. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  29. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  30. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  31. rasa/builder/document_retrieval/__init__.py +0 -0
  32. rasa/builder/document_retrieval/constants.py +15 -0
  33. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  34. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  35. rasa/builder/document_retrieval/models.py +62 -0
  36. rasa/builder/download.py +140 -0
  37. rasa/builder/exceptions.py +91 -0
  38. rasa/builder/guardrails/__init__.py +1 -0
  39. rasa/builder/guardrails/constants.py +9 -0
  40. rasa/builder/guardrails/exceptions.py +4 -0
  41. rasa/builder/guardrails/lakera.py +206 -0
  42. rasa/builder/guardrails/models.py +231 -0
  43. rasa/builder/guardrails/store.py +238 -0
  44. rasa/builder/guardrails/utils.py +328 -0
  45. rasa/builder/job_manager.py +87 -0
  46. rasa/builder/jobs.py +282 -0
  47. rasa/builder/llm_service.py +246 -0
  48. rasa/builder/logging_utils.py +265 -0
  49. rasa/builder/main.py +243 -0
  50. rasa/builder/models.py +216 -0
  51. rasa/builder/project_generator.py +458 -0
  52. rasa/builder/project_info.py +72 -0
  53. rasa/builder/scrape_rasa_docs.py +97 -0
  54. rasa/builder/service.py +1345 -0
  55. rasa/builder/shared/tracker_context.py +212 -0
  56. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  57. rasa/builder/template_cache.py +244 -0
  58. rasa/builder/training_service.py +194 -0
  59. rasa/builder/validation_service.py +97 -0
  60. rasa/cli/arguments/train.py +2 -0
  61. rasa/cli/interactive.py +2 -0
  62. rasa/cli/project_templates/basic/README.md +23 -0
  63. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  64. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  65. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  66. rasa/cli/project_templates/basic/config.yml +29 -0
  67. rasa/cli/project_templates/basic/credentials.yml +33 -0
  68. rasa/cli/project_templates/basic/data/data.md +9 -0
  69. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  70. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  71. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  72. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  73. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  74. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  75. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  76. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  77. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  78. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  79. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  80. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  81. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  82. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  83. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  84. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  85. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  86. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  87. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  88. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  89. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  90. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  91. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  92. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  93. rasa/cli/project_templates/default/config.yml +4 -0
  94. rasa/cli/project_templates/default/endpoints.yml +4 -0
  95. rasa/cli/project_templates/finance/README.md +25 -0
  96. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  97. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  99. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  100. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  101. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  102. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  104. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  105. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  106. rasa/cli/project_templates/finance/actions/database.py +277 -0
  107. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  112. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  113. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  114. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  115. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  116. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  117. rasa/cli/project_templates/finance/config.yml +23 -0
  118. rasa/cli/project_templates/finance/credentials.yml +32 -0
  119. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  120. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  121. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  122. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  123. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  124. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  125. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  126. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  127. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  128. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  129. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  130. rasa/cli/project_templates/finance/data/data.md +11 -0
  131. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  132. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  133. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  134. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  135. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  136. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  137. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  138. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  139. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  140. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  141. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  142. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  143. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  144. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  145. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  146. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  147. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  148. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  149. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  150. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  151. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  152. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  153. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  154. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  171. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  172. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  173. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  174. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  231. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  232. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  233. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  234. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  235. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  236. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  237. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  238. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  239. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  240. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  241. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  243. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  244. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  245. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  246. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  247. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  248. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  249. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  250. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  251. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  252. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  253. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  254. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  255. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  256. rasa/cli/project_templates/telco/README.md +25 -0
  257. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  258. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  259. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  260. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  261. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  262. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  263. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  264. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  265. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  266. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  267. rasa/cli/project_templates/telco/config.yml +29 -0
  268. rasa/cli/project_templates/telco/credentials.yml +33 -0
  269. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  270. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  271. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  272. rasa/cli/project_templates/telco/data/data.md +11 -0
  273. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  274. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  275. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  276. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  277. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  278. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  279. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  280. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  281. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  282. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  283. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  284. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  285. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  286. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  287. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  288. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  289. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  290. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  291. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  292. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  293. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  294. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  295. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  296. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  297. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  298. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  299. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  300. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  304. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  305. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  306. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  307. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  308. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  309. rasa/cli/project_templates/tutorial/config.yml +2 -1
  310. rasa/cli/scaffold.py +46 -2
  311. rasa/cli/train.py +2 -0
  312. rasa/cli/utils.py +85 -1
  313. rasa/core/actions/action.py +2 -7
  314. rasa/core/available_agents.py +49 -26
  315. rasa/core/available_endpoints.py +17 -2
  316. rasa/core/channels/channel.py +4 -3
  317. rasa/core/channels/constants.py +3 -0
  318. rasa/core/channels/development_inspector.py +2 -22
  319. rasa/core/channels/inspector/README.md +26 -14
  320. rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-edef10dd.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  324. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  327. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  333. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-790ef78b.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-ecdce073.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  339. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-837fd3aa.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-7e05afcb.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-162eb295.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-b5b53234.js} +1 -1
  353. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-13d138e5.js} +1 -1
  354. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-94cbde3f.js} +1 -1
  355. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  356. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  357. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  358. rasa/core/channels/inspector/dist/index.html +2 -2
  359. rasa/core/channels/inspector/index.html +1 -1
  360. rasa/core/channels/inspector/src/App.tsx +42 -44
  361. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  362. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  363. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +8 -8
  364. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  365. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  366. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  367. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  368. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  369. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  370. rasa/core/channels/inspector/src/types.ts +49 -7
  371. rasa/core/channels/socketio.py +212 -51
  372. rasa/core/channels/studio_chat.py +59 -57
  373. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  374. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  375. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  376. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  377. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  378. rasa/core/channels/voice_stream/genesys.py +2 -1
  379. rasa/core/channels/voice_stream/jambonz.py +9 -1
  380. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  381. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  382. rasa/core/constants.py +6 -0
  383. rasa/core/iam_credentials_providers/__init__.py +0 -0
  384. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  385. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  386. rasa/core/policies/enterprise_search_policy.py +4 -7
  387. rasa/core/policies/flows/flow_executor.py +66 -36
  388. rasa/core/policies/ted_policy.py +7 -5
  389. rasa/core/processor.py +32 -0
  390. rasa/core/redis_connection_factory.py +411 -0
  391. rasa/core/run.py +13 -3
  392. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  393. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  394. rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -81
  395. rasa/dialogue_understanding/commands/start_flow_command.py +18 -113
  396. rasa/dialogue_understanding/commands/utils.py +118 -0
  397. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  398. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  399. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  400. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  401. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  402. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  403. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  404. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  405. rasa/dialogue_understanding/patterns/continue_interrupted.py +185 -114
  406. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +18 -24
  407. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  408. rasa/dialogue_understanding/stack/utils.py +43 -4
  409. rasa/dialogue_understanding/utils.py +24 -4
  410. rasa/engine/graph.py +5 -1
  411. rasa/engine/recipes/default_components.py +78 -10
  412. rasa/engine/recipes/default_recipe.py +41 -1
  413. rasa/engine/storage/local_model_storage.py +83 -3
  414. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  415. rasa/model_manager/model_api.py +4 -5
  416. rasa/model_manager/runner_service.py +1 -1
  417. rasa/model_manager/socket_bridge.py +20 -15
  418. rasa/model_manager/trainer_service.py +12 -9
  419. rasa/model_manager/utils.py +1 -29
  420. rasa/model_manager/warm_rasa_process.py +1 -1
  421. rasa/model_training.py +22 -6
  422. rasa/nlu/classifiers/diet_classifier.py +22 -6
  423. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  424. rasa/nlu/extractors/extractor.py +1 -2
  425. rasa/shared/agents/auth/__init__.py +0 -0
  426. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  427. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  428. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  429. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  430. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  431. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  432. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  433. rasa/shared/agents/auth/constants.py +11 -0
  434. rasa/shared/agents/auth/types.py +11 -0
  435. rasa/shared/constants.py +3 -0
  436. rasa/shared/core/constants.py +6 -6
  437. rasa/shared/core/domain.py +58 -11
  438. rasa/shared/core/events.py +2 -0
  439. rasa/shared/core/flows/constants.py +5 -0
  440. rasa/shared/core/flows/flow_step.py +7 -1
  441. rasa/shared/core/flows/flows_list.py +6 -0
  442. rasa/shared/core/flows/steps/call.py +15 -12
  443. rasa/shared/core/flows/validation.py +238 -44
  444. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  445. rasa/shared/core/slots.py +4 -0
  446. rasa/shared/exceptions.py +12 -0
  447. rasa/shared/importers/importer.py +6 -0
  448. rasa/shared/importers/utils.py +77 -1
  449. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  450. rasa/shared/providers/_utils.py +60 -44
  451. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  452. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  453. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  454. rasa/shared/providers/llm/llm_response.py +4 -4
  455. rasa/shared/utils/common.py +24 -0
  456. rasa/shared/utils/health_check/health_check.py +7 -3
  457. rasa/shared/utils/llm.py +2 -1
  458. rasa/shared/utils/mcp/server_connection.py +108 -27
  459. rasa/shared/utils/mcp/utils.py +20 -0
  460. rasa/studio/upload.py +16 -47
  461. rasa/telemetry.py +97 -23
  462. rasa/tracing/config.py +38 -12
  463. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  464. rasa/tracing/instrumentation/instrumentation.py +85 -8
  465. rasa/utils/common.py +1 -1
  466. rasa/utils/io.py +27 -9
  467. rasa/utils/json_utils.py +6 -1
  468. rasa/utils/log_utils.py +5 -1
  469. rasa/utils/openapi.py +144 -0
  470. rasa/utils/tensorflow/__init__.py +29 -0
  471. rasa/utils/tensorflow/callback.py +1 -1
  472. rasa/utils/tensorflow/crf.py +1 -1
  473. rasa/utils/tensorflow/data_generator.py +21 -8
  474. rasa/utils/tensorflow/layers.py +11 -4
  475. rasa/utils/tensorflow/metrics.py +7 -3
  476. rasa/utils/tensorflow/models.py +41 -6
  477. rasa/utils/tensorflow/rasa_layers.py +6 -4
  478. rasa/utils/tensorflow/transformer.py +2 -3
  479. rasa/utils/train_utils.py +68 -38
  480. rasa/validator.py +18 -16
  481. rasa/version.py +1 -1
  482. rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
  483. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +486 -173
  484. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
  485. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
  486. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
  487. rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
  488. rasa_pro-3.14.0.dev6.dist-info/METADATA +0 -190
  489. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
  490. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
  491. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
@@ -10,40 +10,61 @@ from rasa.core.policies.flow_policy import FlowPolicy
10
10
  from rasa.core.policies.memoization import AugmentedMemoizationPolicy, MemoizationPolicy
11
11
  from rasa.core.policies.policy import Policy, SupportedData
12
12
  from rasa.core.policies.rule_policy import RulePolicy
13
-
14
- # from rasa.core.policies.ted_policy import TEDPolicy
15
- # from rasa.core.policies.unexpected_intent_policy import UnexpecTEDIntentPolicy
16
13
  from rasa.engine.graph import ExecutionContext, GraphComponent, GraphSchema, SchemaNode
17
14
  from rasa.engine.storage.resource import Resource
18
15
  from rasa.engine.storage.storage import ModelStorage
19
-
20
- # from rasa.nlu.classifiers.diet_classifier import DIETClassifier
21
- # from rasa.nlu.extractors.crf_entity_extractor import (
22
- # CRFEntityExtractor,
23
- # CRFEntityExtractorOptions,
24
- # )
16
+ from rasa.nlu.extractors.crf_entity_extractor import (
17
+ CRFEntityExtractor,
18
+ CRFEntityExtractorOptions,
19
+ )
25
20
  from rasa.nlu.extractors.entity_synonyms import EntitySynonymMapper
26
21
  from rasa.nlu.extractors.mitie_entity_extractor import MitieEntityExtractor
27
22
  from rasa.nlu.extractors.regex_entity_extractor import RegexEntityExtractor
28
23
  from rasa.nlu.featurizers.featurizer import Featurizer
29
24
  from rasa.nlu.featurizers.sparse_featurizer.regex_featurizer import RegexFeaturizer
30
-
31
- # from rasa.nlu.selectors.response_selector import ResponseSelector
32
25
  from rasa.nlu.tokenizers.tokenizer import Tokenizer
33
26
  from rasa.shared.constants import (
27
+ DEFAULT_CONFIG_PATH,
34
28
  DOCS_URL_COMPONENTS,
29
+ DOCS_URL_DEFAULT_ACTIONS,
35
30
  DOCS_URL_NLU_BASED_POLICIES,
31
+ DOCS_URL_RULES,
32
+ )
33
+ from rasa.shared.core.constants import (
34
+ ACTION_BACK_NAME,
35
+ ACTION_RESTART_NAME,
36
+ USER_INTENT_BACK,
37
+ USER_INTENT_RESTART,
36
38
  )
37
- from rasa.shared.core.domain import Domain
39
+ from rasa.shared.core.domain import Domain, InvalidDomain
38
40
  from rasa.shared.core.training_data.structures import RuleStep, StoryGraph
39
41
  from rasa.shared.exceptions import InvalidConfigException
40
42
  from rasa.shared.importers.importer import TrainingDataImporter
41
43
  from rasa.shared.nlu.training_data.training_data import TrainingData
44
+ from rasa.shared.utils.common import conditional_import
45
+
46
+ # Conditional imports for TensorFlow-dependent components
47
+ TEDPolicy, TED_POLICY_AVAILABLE = conditional_import(
48
+ "rasa.core.policies.ted_policy", "TEDPolicy"
49
+ )
50
+ UnexpecTEDIntentPolicy, UNEXPECTED_INTENT_POLICY_AVAILABLE = conditional_import(
51
+ "rasa.core.policies.unexpected_intent_policy", "UnexpecTEDIntentPolicy"
52
+ )
53
+ DIETClassifier, DIET_CLASSIFIER_AVAILABLE = conditional_import(
54
+ "rasa.nlu.classifiers.diet_classifier", "DIETClassifier"
55
+ )
56
+ ResponseSelector, RESPONSE_SELECTOR_AVAILABLE = conditional_import(
57
+ "rasa.nlu.selectors.response_selector", "ResponseSelector"
58
+ )
42
59
 
43
60
  # TODO: Can we replace this with the registered types from the regitry?
44
- TRAINABLE_EXTRACTORS = [MitieEntityExtractor] # , CRFEntityExtractor, DIETClassifier]
61
+ TRAINABLE_EXTRACTORS = [MitieEntityExtractor, CRFEntityExtractor]
62
+ if DIET_CLASSIFIER_AVAILABLE:
63
+ TRAINABLE_EXTRACTORS.append(DIETClassifier)
45
64
  # TODO: replace these once the Recipe is merged (used in tests)
46
65
  POLICY_CLASSSES = {MemoizationPolicy, RulePolicy}
66
+ if TED_POLICY_AVAILABLE:
67
+ POLICY_CLASSSES.add(TEDPolicy)
47
68
 
48
69
 
49
70
  def _types_to_str(types: Iterable[Type]) -> Text:
@@ -129,17 +150,16 @@ class DefaultV1RecipeValidator(GraphComponent):
129
150
  """
130
151
  if (
131
152
  training_data.response_examples
132
- # and ResponseSelector not in self._component_types
153
+ and ResponseSelector not in self._component_types
133
154
  ):
134
- pass
135
- # rasa.shared.utils.io.raise_warning(
136
- # f"You have defined training data with examples for training a response " # noqa: E501
137
- # f"selector, but your NLU configuration does not include a response "
138
- # f"selector component. "
139
- # f"To train a model on your response selector data, add a "
140
- # f"'{ResponseSelector.__name__}' to your configuration.",
141
- # docs=DOCS_URL_COMPONENTS,
142
- # )
155
+ rasa.shared.utils.io.raise_warning(
156
+ f"You have defined training data with examples for training a response "
157
+ f"selector, but your NLU configuration does not include a response "
158
+ f"selector component. "
159
+ f"To train a model on your response selector data, add a "
160
+ f"'{ResponseSelector.__name__}' to your configuration.",
161
+ docs=DOCS_URL_COMPONENTS,
162
+ )
143
163
 
144
164
  if training_data.entity_examples and self._component_types.isdisjoint(
145
165
  TRAINABLE_EXTRACTORS
@@ -153,21 +173,21 @@ class DefaultV1RecipeValidator(GraphComponent):
153
173
  docs=DOCS_URL_COMPONENTS,
154
174
  )
155
175
 
156
- # if training_data.entity_examples and self._component_types.isdisjoint(
157
- # {DIETClassifier, CRFEntityExtractor}
158
- # ):
159
- # if training_data.entity_roles_groups_used():
160
- # rasa.shared.utils.io.raise_warning(
161
- # f"You have defined training data with entities that "
162
- # f"have roles/groups, but your NLU configuration does not "
163
- # f"include a '{DIETClassifier.__name__}' "
164
- # f"or a '{CRFEntityExtractor.__name__}'. "
165
- # f"To train entities that have roles/groups, "
166
- # f"add either '{DIETClassifier.__name__}' "
167
- # f"or '{CRFEntityExtractor.__name__}' to your "
168
- # f"configuration.",
169
- # docs=DOCS_URL_COMPONENTS,
170
- # )
176
+ if training_data.entity_examples and self._component_types.isdisjoint(
177
+ {DIETClassifier, CRFEntityExtractor}
178
+ ):
179
+ if training_data.entity_roles_groups_used():
180
+ rasa.shared.utils.io.raise_warning(
181
+ f"You have defined training data with entities that "
182
+ f"have roles/groups, but your NLU configuration does not "
183
+ f"include a '{DIETClassifier.__name__}' "
184
+ f"or a '{CRFEntityExtractor.__name__}'. "
185
+ f"To train entities that have roles/groups, "
186
+ f"add either '{DIETClassifier.__name__}' "
187
+ f"or '{CRFEntityExtractor.__name__}' to your "
188
+ f"configuration.",
189
+ docs=DOCS_URL_COMPONENTS,
190
+ )
171
191
 
172
192
  if training_data.regex_features and self._component_types.isdisjoint(
173
193
  [RegexFeaturizer, RegexEntityExtractor]
@@ -197,45 +217,45 @@ class DefaultV1RecipeValidator(GraphComponent):
197
217
  docs=DOCS_URL_COMPONENTS,
198
218
  )
199
219
 
200
- # if training_data.lookup_tables:
201
- # if self._component_types.isdisjoint([CRFEntityExtractor, DIETClassifier]):
202
- # rasa.shared.utils.io.raise_warning(
203
- # f"You have defined training data consisting of lookup tables, but " # noqa: E501
204
- # f"your NLU configuration does not include any components "
205
- # f"that uses the features created from the lookup table. "
206
- # f"To make use of the features that are created with the "
207
- # f"help of the lookup tables, "
208
- # f"add a '{DIETClassifier.__name__}' or a "
209
- # f"'{CRFEntityExtractor.__name__}' "
210
- # f"with the 'pattern' feature "
211
- # f"to your configuration.",
212
- # docs=DOCS_URL_COMPONENTS,
213
- # )
214
-
215
- # elif CRFEntityExtractor in self._component_types:
216
- # crf_schema_nodes = [
217
- # schema_node
218
- # for schema_node in self._graph_schema.nodes.values()
219
- # if schema_node.uses == CRFEntityExtractor
220
- # ]
221
- # has_pattern_feature = any(
222
- # CRFEntityExtractorOptions.PATTERN in feature_list
223
- # for crf in crf_schema_nodes
224
- # for feature_list in crf.config.get("features", [])
225
- # )
226
-
227
- # if not has_pattern_feature:
228
- # rasa.shared.utils.io.raise_warning(
229
- # f"You have defined training data consisting of "
230
- # f"lookup tables, but your NLU configuration's "
231
- # f"'{CRFEntityExtractor.__name__}' "
232
- # f"does not include the "
233
- # f"'pattern' feature. To featurize lookup tables, "
234
- # f"add the 'pattern' feature to the "
235
- # f"'{CRFEntityExtractor.__name__}' "
236
- # "in your configuration.",
237
- # docs=DOCS_URL_COMPONENTS,
238
- # )
220
+ if training_data.lookup_tables:
221
+ if self._component_types.isdisjoint([CRFEntityExtractor, DIETClassifier]):
222
+ rasa.shared.utils.io.raise_warning(
223
+ f"You have defined training data consisting of lookup tables, but "
224
+ f"your NLU configuration does not include any components "
225
+ f"that uses the features created from the lookup table. "
226
+ f"To make use of the features that are created with the "
227
+ f"help of the lookup tables, "
228
+ f"add a '{DIETClassifier.__name__}' or a "
229
+ f"'{CRFEntityExtractor.__name__}' "
230
+ f"with the 'pattern' feature "
231
+ f"to your configuration.",
232
+ docs=DOCS_URL_COMPONENTS,
233
+ )
234
+
235
+ elif CRFEntityExtractor in self._component_types:
236
+ crf_schema_nodes = [
237
+ schema_node
238
+ for schema_node in self._graph_schema.nodes.values()
239
+ if schema_node.uses == CRFEntityExtractor
240
+ ]
241
+ has_pattern_feature = any(
242
+ CRFEntityExtractorOptions.PATTERN in feature_list
243
+ for crf in crf_schema_nodes
244
+ for feature_list in crf.config.get("features", [])
245
+ )
246
+
247
+ if not has_pattern_feature:
248
+ rasa.shared.utils.io.raise_warning(
249
+ f"You have defined training data consisting of "
250
+ f"lookup tables, but your NLU configuration's "
251
+ f"'{CRFEntityExtractor.__name__}' "
252
+ f"does not include the "
253
+ f"'pattern' feature. To featurize lookup tables, "
254
+ f"add the 'pattern' feature to the "
255
+ f"'{CRFEntityExtractor.__name__}' "
256
+ "in your configuration.",
257
+ docs=DOCS_URL_COMPONENTS,
258
+ )
239
259
 
240
260
  if (
241
261
  training_data.entity_synonyms
@@ -387,22 +407,21 @@ class DefaultV1RecipeValidator(GraphComponent):
387
407
 
388
408
  def _warn_if_no_policy_handles_default_intents(self) -> None:
389
409
  """Warns if there is no policy handling the default intents."""
390
- # policies_handling_default_indents = (RulePolicy, FlowPolicy)
391
- #
392
- # contains_policy_handling_default_intents = any(
393
- # issubclass(node.uses, policies_handling_default_indents)
394
- # for node in self._policy_schema_nodes
395
- # )
396
- # if not contains_policy_handling_default_intents:
397
- # rasa.shared.utils.io.raise_warning(
398
- # f"'{RulePolicy.__name__}' is not included in the model's "
399
- # f"policy configuration. Default intents such as "
400
- # f"'{USER_INTENT_RESTART}' and '{USER_INTENT_BACK}' will "
401
- # f"not trigger actions '{ACTION_RESTART_NAME}' and "
402
- # f"'{ACTION_BACK_NAME}'.",
403
- # docs=DOCS_URL_DEFAULT_ACTIONS,
404
- # )
405
- pass
410
+ policies_handling_default_indents = (RulePolicy, FlowPolicy)
411
+
412
+ contains_policy_handling_default_intents = any(
413
+ issubclass(node.uses, policies_handling_default_indents)
414
+ for node in self._policy_schema_nodes
415
+ )
416
+ if not contains_policy_handling_default_intents:
417
+ rasa.shared.utils.io.raise_warning(
418
+ f"'{RulePolicy.__name__}' is not included in the model's "
419
+ f"policy configuration. Default intents such as "
420
+ f"'{USER_INTENT_RESTART}' and '{USER_INTENT_BACK}' will "
421
+ f"not trigger actions '{ACTION_RESTART_NAME}' and "
422
+ f"'{ACTION_BACK_NAME}'.",
423
+ docs=DOCS_URL_DEFAULT_ACTIONS,
424
+ )
406
425
 
407
426
  def _raise_if_domain_contains_form_names_but_no_rule_policy_given(
408
427
  self, domain: Domain
@@ -412,20 +431,19 @@ class DefaultV1RecipeValidator(GraphComponent):
412
431
  Raises:
413
432
  `InvalidConfigException` if domain and rule policies do not match
414
433
  """
415
- pass
416
- # contains_rule_policy = any(
417
- # schema_node
418
- # for schema_node in self._graph_schema.nodes.values()
419
- # if issubclass(schema_node.uses, RulePolicy)
420
- # )
421
-
422
- # if domain.form_names and not contains_rule_policy:
423
- # raise InvalidDomain(
424
- # "You have defined a form action, but have not added the "
425
- # f"'{RulePolicy.__name__}' to your policy ensemble. "
426
- # f"Either remove all forms from your domain or add the "
427
- # f"'{RulePolicy.__name__}' to your policy configuration."
428
- # )
434
+ contains_rule_policy = any(
435
+ schema_node
436
+ for schema_node in self._graph_schema.nodes.values()
437
+ if issubclass(schema_node.uses, RulePolicy)
438
+ )
439
+
440
+ if domain.form_names and not contains_rule_policy:
441
+ raise InvalidDomain(
442
+ "You have defined a form action, but have not added the "
443
+ f"'{RulePolicy.__name__}' to your policy ensemble. "
444
+ f"Either remove all forms from your domain or add the "
445
+ f"'{RulePolicy.__name__}' to your policy configuration."
446
+ )
429
447
 
430
448
  def _raise_if_dm1_and_calm_policies_used_at_the_same_time(self) -> None:
431
449
  """Validates that there exists a rule policy if forms are defined.
@@ -443,13 +461,16 @@ class DefaultV1RecipeValidator(GraphComponent):
443
461
  return
444
462
 
445
463
  # if we are using a flow policy, there shouldn't be any dm1 policies
446
- dm1_policies = (
447
- # RulePolicy,
448
- # TEDPolicy,
464
+ dm1_policies_list = [
465
+ RulePolicy,
449
466
  MemoizationPolicy,
450
467
  AugmentedMemoizationPolicy,
451
- # UnexpecTEDIntentPolicy,
452
- )
468
+ ]
469
+ if TED_POLICY_AVAILABLE:
470
+ dm1_policies_list.append(TEDPolicy)
471
+ if UNEXPECTED_INTENT_POLICY_AVAILABLE:
472
+ dm1_policies_list.append(UnexpecTEDIntentPolicy)
473
+ dm1_policies = tuple(dm1_policies_list)
453
474
 
454
475
  for schema_node in self._graph_schema.nodes.values():
455
476
  if issubclass(schema_node.uses, dm1_policies):
@@ -469,11 +490,10 @@ class DefaultV1RecipeValidator(GraphComponent):
469
490
  `InvalidDomain` if domain and rule policies do not match
470
491
  """
471
492
  for schema_node in self._graph_schema.nodes.values():
472
- # if schema_node.uses == RulePolicy:
473
- # RulePolicy.raise_if_incompatible_with_domain(
474
- # config=schema_node.config, domain=domain
475
- # )
476
- pass
493
+ if schema_node.uses == RulePolicy:
494
+ RulePolicy.raise_if_incompatible_with_domain(
495
+ config=schema_node.config, domain=domain
496
+ )
477
497
 
478
498
  def _validate_policy_priorities(self) -> None:
479
499
  """Checks if every policy has a valid priority value.
@@ -529,22 +549,20 @@ class DefaultV1RecipeValidator(GraphComponent):
529
549
  )
530
550
 
531
551
  if consuming_rule_data and not contains_rule_tracker:
532
- # rasa.shared.utils.io.raise_warning(
533
- # f"Found a rule-based policy in your configuration but "
534
- # f"no rule-based training data. Please add rule-based "
535
- # f"stories to your training data or "
536
- # f"remove the rule-based policy "
537
- # f"(`{RulePolicy.__name__}`) from your "
538
- # f"your configuration.",
539
- # docs=DOCS_URL_RULES,
540
- # )
541
- pass
552
+ rasa.shared.utils.io.raise_warning(
553
+ f"Found a rule-based policy in your configuration but "
554
+ f"no rule-based training data. Please add rule-based "
555
+ f"stories to your training data or "
556
+ f"remove the rule-based policy "
557
+ f"(`{RulePolicy.__name__}`) from your "
558
+ f"your configuration.",
559
+ docs=DOCS_URL_RULES,
560
+ )
542
561
  elif not consuming_rule_data and contains_rule_tracker:
543
- # rasa.shared.utils.io.raise_warning(
544
- # f"Found rule-based training data but no policy supporting rule-based "
545
- # f"data. Please add `{RulePolicy.__name__}` "
546
- # f"or another rule-supporting "
547
- # f"policy to the `policies` section in `{DEFAULT_CONFIG_PATH}`.",
548
- # docs=DOCS_URL_RULES,
549
- # )
550
- pass
562
+ rasa.shared.utils.io.raise_warning(
563
+ f"Found rule-based training data but no policy supporting rule-based "
564
+ f"data. Please add `{RulePolicy.__name__}` "
565
+ f"or another rule-supporting "
566
+ f"policy to the `policies` section in `{DEFAULT_CONFIG_PATH}`.",
567
+ docs=DOCS_URL_RULES,
568
+ )
@@ -39,11 +39,9 @@ from rasa.model_manager.trainer_service import (
39
39
  update_training_status,
40
40
  )
41
41
  from rasa.model_manager.utils import (
42
- InvalidPathException,
43
42
  get_logs_content,
44
43
  logs_base_path,
45
44
  models_base_path,
46
- subpath,
47
45
  )
48
46
  from rasa.model_manager.warm_rasa_process import (
49
47
  initialize_warm_rasa_process,
@@ -53,6 +51,7 @@ from rasa.server import ErrorResponse
53
51
  from rasa.shared.exceptions import InvalidConfigException
54
52
  from rasa.shared.utils.yaml import dump_obj_as_yaml_to_string
55
53
  from rasa.studio.upload import build_calm_import_parts
54
+ from rasa.utils.io import InvalidPathException, subpath
56
55
 
57
56
  dotenv.load_dotenv()
58
57
 
@@ -571,10 +570,10 @@ def external_blueprint() -> Blueprint:
571
570
  """Create a blueprint for the model manager API."""
572
571
  from rasa.core.channels.socketio import SocketBlueprint
573
572
 
574
- sio = AsyncServer(async_mode="sanic", cors_allowed_origins="*")
575
- bp = SocketBlueprint(sio, "", "model_api_external")
573
+ sio_server = AsyncServer(async_mode="sanic", cors_allowed_origins="*")
574
+ bp = SocketBlueprint(sio_server, "", "model_api_external")
576
575
 
577
- create_bridge_server(sio, running_bots)
576
+ create_bridge_server(sio_server, running_bots)
578
577
 
579
578
  @bp.get("/health")
580
579
  async def health(request: Request) -> response.HTTPResponse:
@@ -15,11 +15,11 @@ from rasa.model_manager import config
15
15
  from rasa.model_manager.utils import (
16
16
  logs_path,
17
17
  models_base_path,
18
- subpath,
19
18
  write_encoded_data_to_file,
20
19
  )
21
20
  from rasa.model_manager.warm_rasa_process import start_rasa_process
22
21
  from rasa.studio.prompts import handle_prompts
22
+ from rasa.utils.io import subpath
23
23
 
24
24
  structlogger = structlog.get_logger()
25
25
 
@@ -1,4 +1,3 @@
1
- import json
2
1
  from typing import Any, Dict, Optional
3
2
 
4
3
  import structlog
@@ -19,7 +18,7 @@ socket_proxy_clients = {}
19
18
 
20
19
 
21
20
  async def socketio_websocket_traffic_wrapper(
22
- sio: AsyncServer,
21
+ sio_server: AsyncServer,
23
22
  running_bots: Dict[str, BotSession],
24
23
  sid: str,
25
24
  auth: Optional[Dict],
@@ -55,7 +54,9 @@ async def socketio_websocket_traffic_wrapper(
55
54
  structlogger.error("model_runner.bot_not_alive", deployment_id=deployment_id)
56
55
  raise ConnectionRefusedError("model_runner.bot_not_alive")
57
56
 
58
- client = await create_bridge_client(sio, bot.internal_url, sid, deployment_id)
57
+ client = await create_bridge_client(
58
+ sio_server, bot.internal_url, sid, deployment_id
59
+ )
59
60
 
60
61
  if client.sid is not None:
61
62
  structlogger.debug(
@@ -70,20 +71,24 @@ async def socketio_websocket_traffic_wrapper(
70
71
  raise ConnectionRefusedError("model_runner.bot_connection_failed")
71
72
 
72
73
 
73
- def create_bridge_server(sio: AsyncServer, running_bots: Dict[str, BotSession]) -> None:
74
+ def create_bridge_server(
75
+ sio_server: AsyncServer, running_bots: Dict[str, BotSession]
76
+ ) -> None:
74
77
  """Create handlers for the socket server side.
75
78
 
76
79
  Forwards messages coming from the user to the bot.
77
80
  """
78
81
 
79
- @sio.on("connect")
82
+ @sio_server.on("connect")
80
83
  async def socketio_websocket_traffic(
81
84
  sid: str, environ: Dict, auth: Optional[Dict]
82
85
  ) -> bool:
83
86
  """Bridge websockets between user chat socket and bot server."""
84
- return await socketio_websocket_traffic_wrapper(sio, running_bots, sid, auth)
87
+ return await socketio_websocket_traffic_wrapper(
88
+ sio_server, running_bots, sid, auth
89
+ )
85
90
 
86
- @sio.on("disconnect")
91
+ @sio_server.on("disconnect")
87
92
  async def disconnect(sid: str) -> None:
88
93
  """Disconnect the bot connection."""
89
94
  structlogger.debug("model_runner.bot_disconnect", sid=sid)
@@ -91,7 +96,7 @@ def create_bridge_server(sio: AsyncServer, running_bots: Dict[str, BotSession])
91
96
  await socket_proxy_clients[sid].disconnect()
92
97
  del socket_proxy_clients[sid]
93
98
 
94
- @sio.on("*")
99
+ @sio_server.on("*")
95
100
  async def handle_message(event: str, sid: str, data: Dict[str, Any]) -> None:
96
101
  """Bridge messages between user and bot.
97
102
 
@@ -108,7 +113,7 @@ def create_bridge_server(sio: AsyncServer, running_bots: Dict[str, BotSession])
108
113
 
109
114
 
110
115
  async def create_bridge_client(
111
- sio: AsyncServer, url: str, sid: str, deployment_id: str
116
+ sio_server: AsyncServer, url: str, sid: str, deployment_id: str
112
117
  ) -> AsyncClient:
113
118
  """Create a new socket bridge client.
114
119
 
@@ -123,36 +128,36 @@ async def create_bridge_client(
123
128
  structlogger.debug(
124
129
  "model_runner.bot_session_confirmed", deployment_id=deployment_id
125
130
  )
126
- await sio.emit("session_confirm", room=sid)
131
+ await sio_server.emit("session_confirm", room=sid)
127
132
 
128
133
  @client.event # type: ignore[misc]
129
134
  async def bot_message(data: Dict[str, Any]) -> None:
130
135
  structlogger.debug("model_runner.bot_message", deployment_id=deployment_id)
131
- await sio.emit("bot_message", data, room=sid)
136
+ await sio_server.emit("bot_message", data, room=sid)
132
137
 
133
138
  @client.event # type: ignore[misc]
134
139
  async def error(data: Dict[str, Any]) -> None:
135
140
  structlogger.debug(
136
141
  "model_runner.bot_error", deployment_id=deployment_id, data=data
137
142
  )
138
- await sio.emit("error", data, room=sid)
143
+ await sio_server.emit("error", data, room=sid)
139
144
 
140
145
  @client.event # type: ignore[misc]
141
146
  async def tracker(data: Dict[str, Any]) -> None:
142
- await sio.emit("tracker", json.loads(data), room=sid)
147
+ await sio_server.emit("tracker", data, room=sid)
143
148
 
144
149
  @client.event # type: ignore[misc]
145
150
  async def disconnect() -> None:
146
151
  structlogger.debug(
147
152
  "model_runner.bot_connection_closed", deployment_id=deployment_id
148
153
  )
149
- await sio.emit("disconnect", room=sid)
154
+ await sio_server.emit("disconnect", room=sid)
150
155
 
151
156
  @client.event # type: ignore[misc]
152
157
  async def connect_error() -> None:
153
158
  structlogger.error(
154
159
  "model_runner.bot_connection_error", deployment_id=deployment_id
155
160
  )
156
- await sio.emit("disconnect", room=sid)
161
+ await sio_server.emit("disconnect", room=sid)
157
162
 
158
163
  return client
@@ -14,7 +14,6 @@ from rasa.model_manager.utils import (
14
14
  ensure_base_directory_exists,
15
15
  logs_path,
16
16
  models_base_path,
17
- subpath,
18
17
  write_encoded_data_to_file,
19
18
  )
20
19
  from rasa.model_manager.warm_rasa_process import (
@@ -22,6 +21,7 @@ from rasa.model_manager.warm_rasa_process import (
22
21
  )
23
22
  from rasa.model_training import generate_random_model_name
24
23
  from rasa.studio.prompts import handle_prompts
24
+ from rasa.utils.io import subpath
25
25
 
26
26
  structlogger = structlog.get_logger()
27
27
 
@@ -53,6 +53,15 @@ class TrainingSession(BaseModel):
53
53
  """Check if the training is running."""
54
54
  return self.status == TrainingSessionStatus.RUNNING
55
55
 
56
+ def has_just_finished(self) -> bool:
57
+ if not self.is_status_indicating_alive():
58
+ # skip if the training is not running
59
+ return False
60
+ if self.process.poll() is None:
61
+ # process is still running
62
+ return False
63
+ return True
64
+
56
65
  def model_path(self) -> str:
57
66
  """Return the path to the model."""
58
67
  return subpath(models_base_path(), f"{self.model_name}.tar.gz")
@@ -89,14 +98,8 @@ def terminate_training(training: TrainingSession) -> None:
89
98
 
90
99
 
91
100
  def update_training_status(training: TrainingSession) -> None:
92
- if not training.is_status_indicating_alive():
93
- # skip if the training is not running
94
- return
95
- if training.process.poll() is None:
96
- # process is still running
97
- return
98
-
99
- complete_training(training)
101
+ if training.has_just_finished():
102
+ complete_training(training)
100
103
 
101
104
 
102
105
  def complete_training(training: TrainingSession) -> None:
@@ -5,15 +5,11 @@ from typing import Optional
5
5
  import structlog
6
6
 
7
7
  from rasa.model_manager import config
8
- from rasa.shared.exceptions import RasaException
8
+ from rasa.utils.io import subpath
9
9
 
10
10
  structlogger = structlog.get_logger()
11
11
 
12
12
 
13
- class InvalidPathException(RasaException):
14
- """Raised if a path is invalid - e.g. path traversal is detected."""
15
-
16
-
17
13
  def write_encoded_data_to_file(encoded_data: bytes, file: str) -> None:
18
14
  """Write base64 encoded data to a file."""
19
15
  # create the directory if it does not exist of the parent directory
@@ -53,30 +49,6 @@ def logs_path(action_id: str) -> str:
53
49
  return subpath(logs_base_path(), f"{action_id}.txt")
54
50
 
55
51
 
56
- def subpath(parent: str, child: str) -> str:
57
- """Return the path to the child directory of the parent directory.
58
-
59
- Ensures, that child doesn't navigate to parent directories. Prevents
60
- path traversal. Raises an InvalidPathException if the path is invalid.
61
-
62
- Based on Snyk's directory traversal mitigation:
63
- https://learn.snyk.io/lesson/directory-traversal/
64
- """
65
- safe_path = os.path.abspath(os.path.join(parent, child))
66
- parent = os.path.abspath(parent)
67
-
68
- common_base = os.path.commonpath([parent, safe_path])
69
- if common_base != parent:
70
- raise InvalidPathException(f"Invalid path: {safe_path}")
71
-
72
- if os.path.basename(safe_path) != child:
73
- raise InvalidPathException(
74
- f"Invalid path - path traversal detected: {safe_path}"
75
- )
76
-
77
- return safe_path
78
-
79
-
80
52
  def get_logs_content(action_id: str) -> Optional[str]:
81
53
  """Return the content of the log file for a given action id."""
82
54
  try:
@@ -157,8 +157,8 @@ def warmup() -> None:
157
157
  import pandas # noqa: F401
158
158
  import presidio_analyzer # noqa: F401
159
159
  import spacy # noqa: F401
160
+ import tensorflow # noqa: F401
160
161
 
161
- # import tensorflow
162
162
  import rasa.validator # noqa: F401
163
163
  except ImportError:
164
164
  pass