rasa-pro 3.14.0.dev7__py3-none-any.whl → 3.14.0.dev9__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (471) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  4. rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
  5. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  6. rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
  7. rasa/agents/schemas/agent_output.py +1 -1
  8. rasa/agents/utils.py +90 -1
  9. rasa/builder/README.md +120 -0
  10. rasa/builder/__init__.py +0 -0
  11. rasa/builder/auth.py +176 -0
  12. rasa/builder/config.py +92 -0
  13. rasa/builder/copilot/__init__.py +0 -0
  14. rasa/builder/copilot/constants.py +31 -0
  15. rasa/builder/copilot/copilot.py +450 -0
  16. rasa/builder/copilot/copilot_response_handler.py +522 -0
  17. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  18. rasa/builder/copilot/exceptions.py +32 -0
  19. rasa/builder/copilot/models.py +500 -0
  20. rasa/builder/copilot/prompts/__init__.py +0 -0
  21. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  22. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  23. rasa/builder/copilot/signing.py +305 -0
  24. rasa/builder/copilot/telemetry.py +210 -0
  25. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  26. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  27. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  28. rasa/builder/document_retrieval/__init__.py +0 -0
  29. rasa/builder/document_retrieval/constants.py +15 -0
  30. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  31. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  32. rasa/builder/document_retrieval/models.py +62 -0
  33. rasa/builder/download.py +140 -0
  34. rasa/builder/exceptions.py +91 -0
  35. rasa/builder/guardrails/__init__.py +1 -0
  36. rasa/builder/guardrails/constants.py +9 -0
  37. rasa/builder/guardrails/exceptions.py +4 -0
  38. rasa/builder/guardrails/lakera.py +206 -0
  39. rasa/builder/guardrails/models.py +231 -0
  40. rasa/builder/guardrails/store.py +238 -0
  41. rasa/builder/guardrails/utils.py +328 -0
  42. rasa/builder/job_manager.py +87 -0
  43. rasa/builder/jobs.py +282 -0
  44. rasa/builder/llm_service.py +246 -0
  45. rasa/builder/logging_utils.py +265 -0
  46. rasa/builder/main.py +243 -0
  47. rasa/builder/models.py +216 -0
  48. rasa/builder/project_generator.py +458 -0
  49. rasa/builder/project_info.py +72 -0
  50. rasa/builder/scrape_rasa_docs.py +97 -0
  51. rasa/builder/service.py +1345 -0
  52. rasa/builder/shared/tracker_context.py +212 -0
  53. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  54. rasa/builder/template_cache.py +244 -0
  55. rasa/builder/training_service.py +194 -0
  56. rasa/builder/validation_service.py +97 -0
  57. rasa/cli/project_templates/basic/README.md +23 -0
  58. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  59. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  60. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  61. rasa/cli/project_templates/basic/config.yml +29 -0
  62. rasa/cli/project_templates/basic/credentials.yml +33 -0
  63. rasa/cli/project_templates/basic/data/data.md +9 -0
  64. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  65. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  66. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  67. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  68. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  69. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  70. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  71. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  72. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  73. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  74. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  75. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  76. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  77. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  78. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  79. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  80. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  81. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  82. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  83. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  84. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  85. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  86. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  87. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  88. rasa/cli/project_templates/default/config.yml +4 -0
  89. rasa/cli/project_templates/default/endpoints.yml +4 -0
  90. rasa/cli/project_templates/finance/README.md +25 -0
  91. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  92. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  93. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  94. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  95. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  96. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  97. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  99. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  100. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  101. rasa/cli/project_templates/finance/actions/database.py +277 -0
  102. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  104. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  105. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  106. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  107. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  112. rasa/cli/project_templates/finance/config.yml +23 -0
  113. rasa/cli/project_templates/finance/credentials.yml +32 -0
  114. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  115. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  116. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  117. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  118. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  119. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  120. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  121. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  122. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  123. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  124. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  125. rasa/cli/project_templates/finance/data/data.md +11 -0
  126. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  127. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  128. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  129. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  130. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  131. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  132. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  133. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  134. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  135. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  136. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  137. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  138. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  139. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  140. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  141. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  142. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  143. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  144. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  145. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  146. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  147. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  148. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  149. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  154. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  231. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  232. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  233. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  234. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  235. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  236. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  237. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  238. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  239. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  240. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  241. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  243. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  244. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  245. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  246. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  247. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  248. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  249. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  250. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  251. rasa/cli/project_templates/telco/README.md +25 -0
  252. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  253. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  254. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  255. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  256. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  257. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  258. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  259. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  260. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  261. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  262. rasa/cli/project_templates/telco/config.yml +29 -0
  263. rasa/cli/project_templates/telco/credentials.yml +33 -0
  264. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  265. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  266. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  267. rasa/cli/project_templates/telco/data/data.md +11 -0
  268. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  269. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  270. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  271. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  272. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  273. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  274. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  275. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  276. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  277. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  278. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  279. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  280. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  281. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  282. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  283. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  284. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  285. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  286. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  287. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  288. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  289. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  290. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  291. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  292. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  293. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  294. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  295. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  296. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  297. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  298. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  299. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  300. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  304. rasa/cli/project_templates/tutorial/config.yml +2 -1
  305. rasa/cli/scaffold.py +46 -2
  306. rasa/core/actions/action.py +0 -1
  307. rasa/core/available_agents.py +2 -0
  308. rasa/core/available_endpoints.py +17 -2
  309. rasa/core/channels/channel.py +4 -3
  310. rasa/core/channels/constants.py +3 -0
  311. rasa/core/channels/development_inspector.py +2 -22
  312. rasa/core/channels/inspector/README.md +26 -14
  313. rasa/core/channels/inspector/dist/assets/{arc-cce7e0a8.js → arc-edef10dd.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  317. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  320. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  326. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.js → index-3862675e-ecdce073.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  332. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  351. rasa/core/channels/inspector/dist/index.html +2 -2
  352. rasa/core/channels/inspector/index.html +1 -1
  353. rasa/core/channels/inspector/src/App.tsx +16 -42
  354. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  355. rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
  356. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  357. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  358. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  359. rasa/core/channels/inspector/src/types.ts +32 -7
  360. rasa/core/channels/socketio.py +212 -51
  361. rasa/core/channels/studio_chat.py +59 -57
  362. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  363. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  364. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  365. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  366. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  367. rasa/core/channels/voice_stream/genesys.py +2 -1
  368. rasa/core/channels/voice_stream/jambonz.py +9 -1
  369. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  370. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  371. rasa/core/constants.py +6 -0
  372. rasa/core/iam_credentials_providers/__init__.py +0 -0
  373. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  374. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  375. rasa/core/policies/enterprise_search_policy.py +4 -7
  376. rasa/core/policies/flows/flow_executor.py +14 -5
  377. rasa/core/policies/ted_policy.py +7 -5
  378. rasa/core/processor.py +32 -0
  379. rasa/core/redis_connection_factory.py +411 -0
  380. rasa/core/run.py +13 -3
  381. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  382. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  383. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  384. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  385. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  386. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  387. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  388. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  389. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  390. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  391. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  392. rasa/engine/graph.py +5 -1
  393. rasa/engine/recipes/default_components.py +78 -10
  394. rasa/engine/recipes/default_recipe.py +41 -1
  395. rasa/engine/storage/local_model_storage.py +83 -3
  396. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  397. rasa/model_manager/model_api.py +4 -5
  398. rasa/model_manager/runner_service.py +1 -1
  399. rasa/model_manager/socket_bridge.py +20 -15
  400. rasa/model_manager/trainer_service.py +12 -9
  401. rasa/model_manager/utils.py +1 -29
  402. rasa/model_manager/warm_rasa_process.py +1 -1
  403. rasa/model_training.py +14 -0
  404. rasa/nlu/classifiers/diet_classifier.py +22 -6
  405. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  406. rasa/nlu/extractors/extractor.py +1 -2
  407. rasa/shared/agents/auth/__init__.py +0 -0
  408. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  409. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  410. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  411. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  412. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  413. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  414. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  415. rasa/shared/agents/auth/constants.py +11 -0
  416. rasa/shared/agents/auth/types.py +11 -0
  417. rasa/shared/core/constants.py +1 -0
  418. rasa/shared/core/domain.py +58 -11
  419. rasa/shared/core/events.py +2 -0
  420. rasa/shared/core/flows/constants.py +5 -0
  421. rasa/shared/core/flows/flow_step.py +7 -1
  422. rasa/shared/core/flows/flows_list.py +6 -0
  423. rasa/shared/core/flows/steps/call.py +15 -12
  424. rasa/shared/core/flows/validation.py +238 -44
  425. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  426. rasa/shared/core/slots.py +4 -0
  427. rasa/shared/exceptions.py +12 -0
  428. rasa/shared/importers/importer.py +6 -0
  429. rasa/shared/importers/utils.py +77 -1
  430. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  431. rasa/shared/providers/_utils.py +60 -44
  432. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  433. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  434. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  435. rasa/shared/providers/llm/llm_response.py +4 -4
  436. rasa/shared/utils/common.py +24 -0
  437. rasa/shared/utils/llm.py +2 -1
  438. rasa/shared/utils/mcp/server_connection.py +84 -23
  439. rasa/shared/utils/mcp/utils.py +20 -0
  440. rasa/studio/upload.py +16 -47
  441. rasa/telemetry.py +97 -23
  442. rasa/tracing/config.py +38 -12
  443. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  444. rasa/tracing/instrumentation/instrumentation.py +85 -8
  445. rasa/utils/common.py +1 -1
  446. rasa/utils/io.py +27 -9
  447. rasa/utils/json_utils.py +6 -1
  448. rasa/utils/log_utils.py +5 -1
  449. rasa/utils/openapi.py +144 -0
  450. rasa/utils/tensorflow/__init__.py +29 -0
  451. rasa/utils/tensorflow/callback.py +1 -1
  452. rasa/utils/tensorflow/crf.py +1 -1
  453. rasa/utils/tensorflow/data_generator.py +21 -8
  454. rasa/utils/tensorflow/layers.py +11 -4
  455. rasa/utils/tensorflow/metrics.py +7 -3
  456. rasa/utils/tensorflow/models.py +41 -6
  457. rasa/utils/tensorflow/rasa_layers.py +6 -4
  458. rasa/utils/tensorflow/transformer.py +2 -3
  459. rasa/utils/train_utils.py +68 -38
  460. rasa/validator.py +18 -16
  461. rasa/version.py +1 -1
  462. rasa_pro-3.14.0.dev9.dist-info/METADATA +199 -0
  463. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/RECORD +466 -156
  464. rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
  465. rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
  466. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
  467. rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
  468. rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
  469. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/NOTICE +0 -0
  470. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/WHEEL +0 -0
  471. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,212 @@
1
+ from typing import Any, Dict, List, Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from rasa.builder.copilot.constants import ROLE_ASSISTANT, ROLE_USER
6
+ from rasa.shared.core.constants import DEFAULT_SLOT_NAMES
7
+ from rasa.shared.core.events import (
8
+ ActionExecuted,
9
+ BotUttered,
10
+ FlowCompleted,
11
+ FlowStarted,
12
+ SlotSet,
13
+ UserUttered,
14
+ )
15
+ from rasa.shared.core.trackers import DialogueStateTracker
16
+
17
+
18
+ class AssistantMessage(BaseModel):
19
+ text: str
20
+
21
+
22
+ class UserMessage(BaseModel):
23
+ text: str
24
+ predicted_commands: List[str] = Field(default_factory=list)
25
+
26
+
27
+ class TrackerEvent(BaseModel):
28
+ event: str
29
+ data: Dict[str, Any] = Field(default_factory=dict)
30
+
31
+
32
+ class AssistantConversationTurn(BaseModel):
33
+ user_message: Optional[UserMessage] = None
34
+ assistant_messages: List[AssistantMessage] = Field(default_factory=list)
35
+ context_events: List[TrackerEvent] = Field(default_factory=list)
36
+
37
+
38
+ class CurrentState(BaseModel):
39
+ latest_message: Optional[str] = None
40
+ active_flow: Optional[str] = None
41
+ flow_stack: Optional[List[Dict[str, Any]]] = None
42
+ slots: Optional[Dict[str, Any]] = None
43
+ latest_action: Optional[str] = None
44
+ followup_action: Optional[str] = None
45
+
46
+
47
+ class TrackerContext(BaseModel):
48
+ conversation_turns: List[AssistantConversationTurn]
49
+ current_state: CurrentState
50
+
51
+ def to_openai_format(self) -> List[Dict[str, Any]]:
52
+ """Convert the TrackerContext to a format suitable for OpenAI.
53
+
54
+ Returns:
55
+ A list of user and assistant messages in the format suitable for OpenAI.
56
+ """
57
+ messages: List[Dict[str, Any]] = []
58
+ for turn in self.conversation_turns:
59
+ if turn.user_message:
60
+ messages.append({"role": ROLE_USER, "content": turn.user_message.text})
61
+ for message in turn.assistant_messages:
62
+ messages.append({"role": ROLE_ASSISTANT, "content": message.text})
63
+ return messages
64
+
65
+ @classmethod
66
+ def from_tracker(
67
+ cls, tracker: Optional[DialogueStateTracker], max_turns: int = 10
68
+ ) -> Optional["TrackerContext"]:
69
+ """Convert a tracker to a TrackerContext."""
70
+ if not tracker or not tracker.events:
71
+ return None
72
+
73
+ conversation_turns = cls._build_conversation_turns(tracker)
74
+ conversation_turns = conversation_turns[-max_turns:]
75
+ current_state = cls._build_current_state(tracker)
76
+
77
+ return cls(
78
+ conversation_turns=conversation_turns,
79
+ current_state=current_state,
80
+ )
81
+
82
+ @classmethod
83
+ def _build_conversation_turns(
84
+ cls, tracker: DialogueStateTracker
85
+ ) -> List[AssistantConversationTurn]:
86
+ """Build conversation turns from tracker events."""
87
+ conversation_turns: List[AssistantConversationTurn] = []
88
+ current_user_message: Optional[UserMessage] = None
89
+ current_assistant_messages: List[AssistantMessage] = []
90
+ current_context_events: List[TrackerEvent] = []
91
+
92
+ for event in tracker.applied_events():
93
+ if isinstance(event, UserUttered):
94
+ # Save previous turn if exists and has content. A new turn starts with a
95
+ # user message. However, since it's possible that "turn" started with an
96
+ # assistant message, we save that turn without the user message.
97
+ if (
98
+ current_user_message
99
+ or current_assistant_messages
100
+ or current_context_events
101
+ ):
102
+ conversation_turns.append(
103
+ AssistantConversationTurn(
104
+ user_message=current_user_message,
105
+ assistant_messages=current_assistant_messages,
106
+ context_events=current_context_events,
107
+ )
108
+ )
109
+ current_assistant_messages = []
110
+ current_context_events = []
111
+
112
+ # Start new turn
113
+
114
+ # Fetch the predicted commands for the user message
115
+ predicted_commands = (
116
+ [command.get("command") for command in event.commands]
117
+ if event.commands
118
+ else []
119
+ )
120
+
121
+ current_user_message = UserMessage(
122
+ text=event.text or "",
123
+ predicted_commands=predicted_commands,
124
+ )
125
+
126
+ # Assistant conversation turn can have multiple messages from the assistant
127
+ elif isinstance(event, BotUttered):
128
+ current_assistant_messages.append(
129
+ AssistantMessage(text=event.text or "")
130
+ )
131
+
132
+ # Handle non-user and non-assistant events. These are useful for more
133
+ # adding context to the conversation turn.
134
+ else:
135
+ context_event = cls._process_tracker_event(event)
136
+ if context_event:
137
+ current_context_events.append(context_event)
138
+
139
+ # Add the final turn if there is one
140
+ if current_user_message or current_assistant_messages:
141
+ conversation_turns.append(
142
+ AssistantConversationTurn(
143
+ user_message=current_user_message,
144
+ assistant_messages=current_assistant_messages,
145
+ context_events=current_context_events,
146
+ )
147
+ )
148
+
149
+ return conversation_turns
150
+
151
+ @staticmethod
152
+ def _process_tracker_event(event: Any) -> Optional[TrackerEvent]:
153
+ if isinstance(event, ActionExecuted):
154
+ return TrackerEvent(
155
+ event=ActionExecuted.type_name,
156
+ data={"action_name": event.action_name, "confidence": event.confidence},
157
+ )
158
+
159
+ elif isinstance(event, SlotSet) and event.key not in DEFAULT_SLOT_NAMES:
160
+ return TrackerEvent(
161
+ event=SlotSet.type_name,
162
+ data={"slot_name": event.key, "slot_value": event.value},
163
+ )
164
+
165
+ elif isinstance(event, FlowStarted):
166
+ return TrackerEvent(
167
+ event=FlowStarted.type_name,
168
+ data={"flow_id": event.flow_id},
169
+ )
170
+
171
+ elif isinstance(event, FlowCompleted):
172
+ return TrackerEvent(
173
+ event=FlowCompleted.type_name,
174
+ data={"flow_id": event.flow_id},
175
+ )
176
+ else:
177
+ return None
178
+
179
+ @classmethod
180
+ def _build_current_state(cls, tracker: DialogueStateTracker) -> CurrentState:
181
+ """Build the current state from the tracker."""
182
+ latest_message = tracker.latest_message.text if tracker.latest_message else None
183
+ latest_action = (
184
+ tracker.latest_action.get("action_name") if tracker.latest_action else None
185
+ )
186
+ followup_action = tracker.followup_action
187
+ flow_stack = tracker.stack.as_dict() if tracker.stack else None
188
+ slots = cls._extract_non_default_slots(tracker)
189
+ active_flow = tracker.active_flow
190
+
191
+ return CurrentState(
192
+ latest_message=latest_message,
193
+ active_flow=active_flow,
194
+ flow_stack=flow_stack,
195
+ latest_action=latest_action,
196
+ followup_action=followup_action,
197
+ slots=slots,
198
+ )
199
+
200
+ @classmethod
201
+ def _extract_non_default_slots(
202
+ cls, tracker: DialogueStateTracker
203
+ ) -> Optional[Dict[str, Any]]:
204
+ """Extract non-default slot values from the tracker."""
205
+ if not tracker.slots:
206
+ return None
207
+
208
+ return {
209
+ k: str(v.value)
210
+ for k, v in tracker.slots.items()
211
+ if v is not None and k not in DEFAULT_SLOT_NAMES
212
+ }
@@ -0,0 +1,164 @@
1
+ # Rasa CALM Flow and Domain YAML Generator
2
+
3
+ You are an expert in creating Rasa CALM flows and domain JSON configurations. Your task is to generate these JSON files based on a user's description of a conversational skill. The user may not be familiar with Rasa, so it's crucial to interpret their requirements accurately and create a well-structured, functional Rasa configuration.
4
+
5
+ ## Input
6
+ You will receive a description of a conversational skill. This description will be inserted where you see [USER_SKILL_DESCRIPTION] in this prompt.
7
+
8
+ ## Output
9
+ Generate a JSON configurations that includes:
10
+ 1. A Rasa CALM flow JSON
11
+ 2. A corresponding Rasa domain JSON
12
+
13
+ Ensure that both parts of the JSONs are complete, well-structured, and compatible with each other.
14
+
15
+ ## Example
16
+ Here's an example of a skill description and the corresponding JSON outputs and custom action code
17
+
18
+ Skill Description: "Create a skill for transferring money. It should ask for the recipient and amount, check the user has enough balance, and then confirm with the user before finalizing the transfer."
19
+
20
+ CALM BOT JSON:
21
+ ```json
22
+ {
23
+ "flows": {
24
+ "transfer_money": {
25
+ "description": "This flow lets users send money to friends and family.",
26
+ "steps": [
27
+ {
28
+ "collect": "recipient"
29
+ },
30
+ {
31
+ "collect": "amount",
32
+ "description": "the number of US dollars to send"
33
+ },
34
+ {
35
+ "action": "action_check_sufficient_funds",
36
+ "next": [
37
+ {
38
+ "if": "not slots.has_sufficient_funds",
39
+ "then": [
40
+ {
41
+ "action": "utter_insufficient_funds",
42
+ "next": "END"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "else": "final_confirmation"
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ "collect": "final_confirmation",
53
+ "id": "final_confirmation",
54
+ "next": [
55
+ {
56
+ "if": "not slots.final_confirmation",
57
+ "then": [
58
+ {
59
+ "action": "utter_transfer_cancelled",
60
+ "next": "END"
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ "else": "transfer_successful"
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ "action": "utter_transfer_complete",
71
+ "id": "transfer_successful"
72
+ }
73
+ ]
74
+ }
75
+ },
76
+ "domain": {
77
+ "actions": [
78
+ "action_check_sufficient_funds"
79
+ ],
80
+ "slots": {
81
+ "recipient": {
82
+ "type": "Text",
83
+ "mappings": [
84
+ {
85
+ "type": "from_llm"
86
+ }
87
+ ]
88
+ },
89
+ "has_sufficient_funds": {
90
+ "type": "bool",
91
+ "mappings": [
92
+ {
93
+ "type": "custom"
94
+ }
95
+ ]
96
+ }
97
+ },
98
+ "responses": {
99
+ "utter_ask_recipient": [
100
+ {
101
+ "text": "Who would you like to send money to?"
102
+ }
103
+ ],
104
+ "utter_ask_final_confirmation": [
105
+ {
106
+ "text": "Please confirm: you want to transfer {amount} to {recipient}?"
107
+ }
108
+ ],
109
+ "utter_transfer_cancelled": [
110
+ {
111
+ "text": "Your transfer has been cancelled."
112
+ }
113
+ ],
114
+ "utter_insufficient_funds": [
115
+ {
116
+ "text": "You do not have enough funds to make this transaction."
117
+ }
118
+ ]
119
+ }
120
+ }
121
+ }
122
+ ```
123
+
124
+ ## Guidelines for CALM Flow JSON:
125
+ - Start a `flow` with the name of the flow as the key in `flows`
126
+ - Include a `description` for the skill
127
+ - Use `steps` to outline the conversation flow
128
+ - Implement `collect` steps for gathering information
129
+ - `collect` steps should reference an existing slot
130
+ - For a collect step referencing a slot `A`, there should be a corresponding `utter_ask_A`
131
+ utterance that is used in the collect step to ask for the information to be stored in `A`
132
+ - Use `action` steps for custom actions
133
+ - Implement conditional logic with `if`, `then`, and `else` where appropriate
134
+ - Use `next` to define the flow between steps. If the flow should end after a step, add next: END.
135
+ - The content after `then` or `else` can be: the id of another step defined in the flow, a list of steps, or an END
136
+ - End the flow with an appropriate action or message
137
+
138
+ ## Guidelines for Domain JSON:
139
+ - Include all necessary `actions`
140
+ - Define all required `slots` with appropriate types. Type should be one of 'float', 'bool', 'text', or 'categorical'
141
+ - Slots filled by a 'collect' step should have mapping 'from_llm' and slots set by custom actions should have a 'custom' mapping
142
+ - Provide `responses` for all bot turns
143
+
144
+ ## Guidelines for Custom Actions
145
+ - Ensure all actions mentioned in the flow are properly defined in the domains list of actions.
146
+
147
+ ## Important Notes:
148
+ - Ensure that the flow logic is coherent and follows a natural conversation pattern
149
+ - All custom actions in the flow should be listed in the domain's `actions` section
150
+ - All slots collected in the flow should be defined in the domain's `slots` section
151
+ - Provide appropriate `utter_` responses for each user interaction
152
+ - Use realistic and appropriate names for actions, slots, and responses
153
+ - Consider error handling and alternative conversation paths
154
+ - Aim for a balance between simplicity and functionality
155
+
156
+ Now, please generate Rasa CALM flow and domain JSON based on the initial bot data.
157
+ Modify the initial bot data where it makes sense based on the users description
158
+ of the skill (e.g. the initial bot greeting utter_greet).
159
+
160
+ INITIAL BOT DATA:
161
+ {{project_data|tojson}}
162
+
163
+ USER_SKILL_DESCRIPTION:
164
+ {{skill_description}}
@@ -0,0 +1,244 @@
1
+ import asyncio
2
+ import os
3
+ import shutil
4
+ import tarfile
5
+ import tempfile
6
+ from pathlib import Path
7
+ from typing import Generator
8
+
9
+ import aiofiles
10
+ import aiohttp
11
+ import structlog
12
+ from sanic import Sanic
13
+
14
+ import rasa.version
15
+ from rasa.builder.logging_utils import capture_exception_with_context
16
+ from rasa.cli.scaffold import ProjectTemplateName
17
+
18
+ structlogger = structlog.get_logger()
19
+
20
+ CACHE_BUCKET_URL = "https://trained-templates.s3.us-east-1.amazonaws.com"
21
+
22
+ # Root directory for storing downloaded template caches on disk.
23
+ _CACHE_ROOT_DIR = Path(
24
+ os.getenv(
25
+ "RASA_TEMPLATE_CACHE_DIR",
26
+ Path.home().joinpath(".rasa", "template-cache").as_posix(),
27
+ )
28
+ )
29
+
30
+
31
+ def _template_cache_dir(template: ProjectTemplateName) -> Path:
32
+ """Return the local cache directory for a given template and version."""
33
+ return _CACHE_ROOT_DIR / rasa.version.__version__ / template.value
34
+
35
+
36
+ def _cache_root_dir() -> Path:
37
+ return Path(
38
+ os.getenv(
39
+ "RASA_TEMPLATE_CACHE_DIR",
40
+ Path.home().joinpath(".rasa", "template-cache").as_posix(),
41
+ )
42
+ )
43
+
44
+
45
+ def _safe_tar_members(
46
+ tar: tarfile.TarFile, destination_directory: Path
47
+ ) -> Generator[tarfile.TarInfo, None, None]:
48
+ """Yield safe members for extraction to prevent path traversal and links.
49
+
50
+ Args:
51
+ tar: Open tar file handle
52
+ destination_directory: Directory to which files will be extracted
53
+
54
+ Yields:
55
+ Members that are safe to extract within destination_directory
56
+ """
57
+ base_path = destination_directory.resolve()
58
+
59
+ for member in tar.getmembers():
60
+ name = member.name
61
+ # Skip empty names and absolute paths
62
+ if not name or name.startswith("/") or name.startswith("\\"):
63
+ continue
64
+
65
+ # Disallow symlinks and hardlinks
66
+ if member.issym() or member.islnk():
67
+ continue
68
+
69
+ # Compute the final path and ensure it's within base_path
70
+ target_path = (base_path / name).resolve()
71
+ try:
72
+ target_path.relative_to(base_path)
73
+ except ValueError:
74
+ # Member would escape the destination directory
75
+ continue
76
+
77
+ yield member
78
+
79
+
80
+ def _copytree(src: Path, dst: Path) -> None:
81
+ """Copy directory tree from src to dst, merging into dst.
82
+
83
+ Existing files are overwritten. Hidden files and directories are included, as
84
+ caches can contain `.rasa` metadata that should be applied before calling
85
+ `ensure_first_used`.
86
+ """
87
+ for root, dirs, files in os.walk(src):
88
+ rel_path = Path(root).relative_to(src)
89
+ target_dir = dst / rel_path
90
+ target_dir.mkdir(parents=True, exist_ok=True)
91
+ for filename in files:
92
+ src_file = Path(root) / filename
93
+ dst_file = target_dir / filename
94
+ shutil.copy2(src_file, dst_file)
95
+
96
+
97
+ async def download_cache_for_template(
98
+ template: ProjectTemplateName, target_dir: str
99
+ ) -> None:
100
+ # get a temp path for the cache file download
101
+ temporary_cache_file = tempfile.NamedTemporaryFile(suffix=".tar.gz", delete=False)
102
+
103
+ try:
104
+ url = f"{CACHE_BUCKET_URL}/{rasa.version.__version__}-{template.value}.tar.gz"
105
+ async with aiohttp.ClientSession() as session:
106
+ async with session.get(url) as response:
107
+ response.raise_for_status()
108
+ async with aiofiles.open(temporary_cache_file.name, "wb") as f:
109
+ async for chunk in response.content.iter_chunked(1024 * 1024):
110
+ await f.write(chunk)
111
+
112
+ # extract the cache to the project folder using safe member filtering
113
+ with tarfile.open(temporary_cache_file.name, "r:gz") as tar:
114
+ destination = Path(target_dir)
115
+ destination.mkdir(parents=True, exist_ok=True)
116
+ tar.extractall(
117
+ path=destination,
118
+ members=_safe_tar_members(tar, destination),
119
+ )
120
+
121
+ structlogger.info(
122
+ "project_generator.download_cache_for_template.success",
123
+ template=template,
124
+ event_info=(
125
+ "Downloaded cache for template, extracted to target directory."
126
+ ),
127
+ target_dir=target_dir,
128
+ )
129
+ except aiohttp.ClientResponseError as e:
130
+ if e.status == 403:
131
+ structlogger.debug(
132
+ "project_generator.download_cache_for_template.no_cache_found",
133
+ template=template,
134
+ event_info=("No cache found for template, continuing without it."),
135
+ target_dir=target_dir,
136
+ )
137
+ else:
138
+ capture_exception_with_context(
139
+ e,
140
+ "project_generator.download_cache_for_template.response_error",
141
+ extra={
142
+ "template": template.value,
143
+ "status": str(e.status),
144
+ "target_dir": target_dir,
145
+ },
146
+ )
147
+ except Exception as exc:
148
+ capture_exception_with_context(
149
+ exc,
150
+ "project_generator.download_cache_for_template.unexpected_error",
151
+ extra={"template": template.value, "target_dir": target_dir},
152
+ )
153
+ finally:
154
+ # Clean up the temporary file
155
+ try:
156
+ Path(temporary_cache_file.name).unlink(missing_ok=True)
157
+ except Exception as exc:
158
+ structlogger.debug(
159
+ "project_generator.download_cache_for_template.cleanup_error",
160
+ error=str(exc),
161
+ template=template,
162
+ event_info=("Failed to cleanup cache for template, ignoring."),
163
+ )
164
+
165
+
166
+ async def background_download_template_caches(
167
+ app: Sanic, loop: asyncio.AbstractEventLoop
168
+ ) -> None:
169
+ """Kick off background downloads of template caches if enabled."""
170
+ try:
171
+ structlogger.info(
172
+ "builder.main.background_cache_download.start",
173
+ event_info=(
174
+ "Starting background download of template caches for this " "version"
175
+ ),
176
+ )
177
+
178
+ # Ensure cache root exists
179
+ _cache_root_dir().mkdir(parents=True, exist_ok=True)
180
+
181
+ async def _download(template: ProjectTemplateName) -> None:
182
+ try:
183
+ target_dir = _template_cache_dir(template)
184
+ if target_dir.exists() and any(target_dir.iterdir()):
185
+ structlogger.debug(
186
+ "builder.main.background_cache_download.skipped",
187
+ template=template,
188
+ event_info=(
189
+ "Skipping download of template cache because it "
190
+ "already exists."
191
+ ),
192
+ target_dir=target_dir,
193
+ )
194
+ return
195
+
196
+ target_dir.mkdir(parents=True, exist_ok=True)
197
+ await download_cache_for_template(template, target_dir.as_posix())
198
+ except Exception as exc:
199
+ structlogger.debug(
200
+ "builder.main.background_cache_download.error",
201
+ template=template,
202
+ error=str(exc),
203
+ )
204
+
205
+ # schedule downloads concurrently without blocking startup
206
+ for template in ProjectTemplateName:
207
+ loop.create_task(_download(template))
208
+ except Exception as exc:
209
+ structlogger.debug(
210
+ "builder.main.background_cache_download.unexpected_error",
211
+ error=str(exc),
212
+ )
213
+
214
+
215
+ def copy_cache_for_template_if_available(
216
+ template: ProjectTemplateName, project_folder: Path
217
+ ) -> None:
218
+ """Copy a previously downloaded cache for `template` into `project_folder`.
219
+
220
+ If the cache does not exist, this function is a no-op.
221
+ """
222
+ try:
223
+ cache_dir = _template_cache_dir(template)
224
+ if cache_dir.exists() and any(cache_dir.iterdir()):
225
+ _copytree(cache_dir, project_folder)
226
+ structlogger.info(
227
+ "project_generator.copy_cache_for_template.success",
228
+ template=template,
229
+ event_info=(
230
+ "Copied cached template files from cache to project folder."
231
+ ),
232
+ )
233
+ else:
234
+ structlogger.debug(
235
+ "project_generator.copy_cache_for_template.missing",
236
+ template=template,
237
+ event_info=("No local cache found for template; skipping copy."),
238
+ )
239
+ except Exception as exc:
240
+ structlogger.warning(
241
+ "project_generator.copy_cache_for_template.error",
242
+ error=str(exc),
243
+ template=template,
244
+ )