rasa-pro 3.14.0.dev20250818__py3-none-any.whl → 3.14.0.dev20250901__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 (361) hide show
  1. rasa/builder/README.md +120 -0
  2. rasa/builder/__init__.py +0 -0
  3. rasa/builder/auth.py +176 -0
  4. rasa/builder/config.py +91 -0
  5. rasa/builder/copilot/__init__.py +0 -0
  6. rasa/builder/copilot/constants.py +28 -0
  7. rasa/builder/copilot/copilot.py +376 -0
  8. rasa/builder/copilot/copilot_response_handler.py +522 -0
  9. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  10. rasa/builder/copilot/exceptions.py +32 -0
  11. rasa/builder/copilot/models.py +464 -0
  12. rasa/builder/copilot/prompts/__init__.py +0 -0
  13. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +771 -0
  14. rasa/builder/copilot/signing.py +305 -0
  15. rasa/builder/copilot/telemetry.py +200 -0
  16. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  17. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  18. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  19. rasa/builder/document_retrieval/__init__.py +0 -0
  20. rasa/builder/document_retrieval/constants.py +15 -0
  21. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  22. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  23. rasa/builder/document_retrieval/models.py +62 -0
  24. rasa/builder/download.py +147 -0
  25. rasa/builder/exceptions.py +91 -0
  26. rasa/builder/guardrails/__init__.py +1 -0
  27. rasa/builder/guardrails/constants.py +9 -0
  28. rasa/builder/guardrails/exceptions.py +4 -0
  29. rasa/builder/guardrails/lakera.py +206 -0
  30. rasa/builder/guardrails/models.py +231 -0
  31. rasa/builder/guardrails/store.py +238 -0
  32. rasa/builder/guardrails/utils.py +328 -0
  33. rasa/builder/job_manager.py +87 -0
  34. rasa/builder/jobs.py +270 -0
  35. rasa/builder/llm_service.py +246 -0
  36. rasa/builder/logging_utils.py +265 -0
  37. rasa/builder/main.py +258 -0
  38. rasa/builder/models.py +216 -0
  39. rasa/builder/project_generator.py +462 -0
  40. rasa/builder/project_info.py +72 -0
  41. rasa/builder/scrape_rasa_docs.py +97 -0
  42. rasa/builder/service.py +1335 -0
  43. rasa/builder/shared/tracker_context.py +212 -0
  44. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  45. rasa/builder/training_service.py +124 -0
  46. rasa/builder/validation_service.py +97 -0
  47. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  48. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  49. rasa/cli/project_templates/basic/config.yml +27 -0
  50. rasa/cli/project_templates/basic/credentials.yml +33 -0
  51. rasa/cli/project_templates/basic/data/data.md +9 -0
  52. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  53. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  54. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  55. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  56. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  57. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  58. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  59. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  60. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  61. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  62. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  63. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  64. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  65. rasa/cli/project_templates/basic/domain/domain.md +9 -0
  66. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  67. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  68. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  69. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  70. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  71. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  72. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  73. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  74. rasa/cli/project_templates/basic/endpoints.yml +63 -0
  75. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  76. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  77. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  78. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  79. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  80. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  81. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  82. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  83. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  84. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  85. rasa/cli/project_templates/finance/actions/database.py +277 -0
  86. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  87. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  88. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  89. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  90. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  91. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  92. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  93. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  94. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  95. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  96. rasa/cli/project_templates/finance/config.yml +21 -0
  97. rasa/cli/project_templates/finance/credentials.yml +32 -0
  98. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  99. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  100. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  101. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  102. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  103. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  104. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  105. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  106. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  107. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  108. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  109. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  110. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  111. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  112. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  113. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  114. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  115. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  116. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  117. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  118. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  119. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  120. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  121. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  122. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  123. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  124. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  125. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  126. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  127. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  128. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  129. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  130. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  131. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  132. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  133. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  134. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  135. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  136. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  137. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  138. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  139. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  140. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  141. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  142. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  143. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  144. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  145. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  146. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  147. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  148. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  149. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  154. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  155. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  156. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  157. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  158. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  159. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  160. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  161. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  162. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  163. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  164. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  165. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  166. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  167. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  168. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  169. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  214. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  215. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  216. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  217. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
  218. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  219. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  220. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  221. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  222. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  223. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  224. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  225. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  226. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  227. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  228. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  229. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  230. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  231. rasa/cli/project_templates/finance/endpoints.yml +63 -0
  232. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  233. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  234. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  235. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  236. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  238. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  240. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  242. rasa/cli/project_templates/telco/config.yml +27 -0
  243. rasa/cli/project_templates/telco/credentials.yml +33 -0
  244. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  245. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  246. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  247. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  248. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  249. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  250. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  251. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  252. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  253. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  254. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  255. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  256. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  257. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  258. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  259. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  260. rasa/cli/project_templates/telco/domain/billing/domain_undertand_bill.yml +102 -0
  261. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  262. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  263. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  264. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  265. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +29 -0
  266. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  267. rasa/cli/project_templates/telco/domain/network/domain_reboot_router.yml +21 -0
  268. rasa/cli/project_templates/telco/domain/network/domain_reset_router.yml +12 -0
  269. rasa/cli/project_templates/telco/domain/network/domain_run_speed_test.yml +25 -0
  270. rasa/cli/project_templates/telco/domain/network/domain_solve_internet_issue.yml +75 -0
  271. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  272. rasa/cli/project_templates/telco/endpoints.yml +63 -0
  273. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  274. rasa/cli/project_templates/tutorial/config.yml +2 -1
  275. rasa/cli/scaffold.py +46 -2
  276. rasa/core/actions/action.py +0 -1
  277. rasa/core/channels/channel.py +4 -3
  278. rasa/core/channels/constants.py +3 -0
  279. rasa/core/channels/development_inspector.py +1 -1
  280. rasa/core/channels/inspector/dist/assets/{arc-1ddec37b.js → arc-18042c22.js} +1 -1
  281. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-18af387c.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  282. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-250127a3.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  283. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  284. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-c3388b34.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  285. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9c893a82.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  287. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-c111213b.js → createText-2e5e7dd3-31422447.js} +1 -1
  288. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-812a729d.js → edges-e0da2a9e-518a90db.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-fd5051bc.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  290. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-3287ac02.js → flowDb-956e92f1-e048c2be.js} +1 -1
  291. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-692fb0b2.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  293. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-008376f1.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-df330a69.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-e03676fb.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  296. rasa/core/channels/inspector/dist/assets/{graph-46fad2ba.js → graph-14702d8a.js} +1 -1
  297. rasa/core/channels/inspector/dist/assets/{index-3862675e-a484ac55.js → index-3862675e-f18b534b.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{index-a003633f.js → index-4d4bdf3a.js} +231 -231
  299. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-3f9e6ec2.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-79f72383.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{layout-aad098e5.js → layout-5a3b2123.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{line-219ab7ae.js → line-2272a8c7.js} +1 -1
  303. rasa/core/channels/inspector/dist/assets/{linear-2cddbe62.js → linear-35bcf273.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-1d41ed99.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-cc496ee8.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-84d32884.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-c0deb984.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-b9d7fd62.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-7d517565.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-98ef9b27.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-cee70748.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-3f9d1c96.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-67471923.js → styles-9a916d00-980de489.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-bd093fb7.js → styles-c10674c1-3c03abde.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-675794e8.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-0ac67617.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-c018dc37.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  318. rasa/core/channels/inspector/dist/index.html +2 -2
  319. rasa/core/channels/inspector/index.html +1 -1
  320. rasa/core/channels/inspector/src/App.tsx +10 -11
  321. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  322. rasa/core/channels/socketio.py +212 -51
  323. rasa/core/channels/studio_chat.py +43 -23
  324. rasa/core/channels/voice_stream/voice_channel.py +5 -3
  325. rasa/core/policies/enterprise_search_policy.py +4 -7
  326. rasa/core/policies/flows/flow_executor.py +8 -1
  327. rasa/core/run.py +13 -3
  328. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  329. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  330. rasa/engine/storage/local_model_storage.py +45 -2
  331. rasa/model_manager/model_api.py +4 -5
  332. rasa/model_manager/runner_service.py +1 -1
  333. rasa/model_manager/socket_bridge.py +20 -14
  334. rasa/model_manager/trainer_service.py +12 -9
  335. rasa/model_manager/utils.py +1 -29
  336. rasa/shared/core/domain.py +62 -15
  337. rasa/shared/core/flows/flow_step.py +7 -1
  338. rasa/shared/core/flows/steps/call.py +8 -1
  339. rasa/shared/core/flows/yaml_flows_io.py +16 -8
  340. rasa/shared/core/slots.py +4 -0
  341. rasa/shared/importers/importer.py +6 -0
  342. rasa/shared/importers/utils.py +77 -1
  343. rasa/shared/providers/_utils.py +60 -44
  344. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  345. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  346. rasa/studio/upload.py +12 -46
  347. rasa/telemetry.py +97 -23
  348. rasa/utils/io.py +27 -9
  349. rasa/utils/json_utils.py +6 -1
  350. rasa/utils/log_utils.py +5 -1
  351. rasa/utils/openapi.py +144 -0
  352. rasa/validator.py +7 -3
  353. rasa/version.py +1 -1
  354. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/METADATA +9 -10
  355. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/RECORD +358 -83
  356. rasa/core/channels/inspector/dist/assets/channel-59f6d54b.js +0 -1
  357. rasa/core/channels/inspector/dist/assets/clone-26177ddb.js +0 -1
  358. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-29c03f5a.js +0 -1
  359. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/NOTICE +0 -0
  360. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/WHEEL +0 -0
  361. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,79 @@
1
+ version: "3.1"
2
+
3
+ slots:
4
+ account_from:
5
+ type: text
6
+ payee_name:
7
+ type: text
8
+ payee_exists:
9
+ type: bool
10
+ amount:
11
+ type: float
12
+ sufficient_funds:
13
+ type: bool
14
+ timing:
15
+ type: categorical
16
+ values:
17
+ - now
18
+ - future
19
+ payment_date:
20
+ type: text
21
+ confirm_immediate_payment:
22
+ type: bool
23
+ confirm_future_payment:
24
+ type: bool
25
+ payment_processed:
26
+ type: bool
27
+ payment_scheduled:
28
+ type: bool
29
+ valid_payment_date:
30
+ type: bool
31
+ future_payment_date:
32
+ type: bool
33
+
34
+ responses:
35
+ utter_transfer_money_understand:
36
+ - text: "Okay lets transfer money"
37
+ metadata:
38
+ rephrase: True
39
+ utter_ask_payee_name:
40
+ - text: "Which payee would you like to send money to?"
41
+ utter_ask_amount:
42
+ - text: "How much money would you like to transfer?"
43
+ utter_insufficient_funds:
44
+ - text: "I'm sorry, but you have insufficient funds for this transfer. Please enter a different amount"
45
+ utter_ask_timing:
46
+ - text: "When would you like this transfer to be made?"
47
+ buttons:
48
+ - title: Immediate
49
+ payload: "/SetSlots(timing=now)"
50
+ - title: Future
51
+ payload: "/SetSlots(timing=future)"
52
+ utter_ask_payment_date:
53
+ - text: "On which date would you like this payment to be made?"
54
+ utter_ask_confirm_future_payment:
55
+ - text: "A payment of ${amount} to {payee_name} will be scheduled for {payment_date}. Is this correct?"
56
+ utter_payment_scheduled:
57
+ - text: "Your payment of ${amount} to {payee_name} has been successfully scheduled for {payment_date}"
58
+ utter_ask_confirm_immediate_payment:
59
+ - text: "An immediate payment of ${amount} to {payee_name} will be processed. Is this correct?"
60
+ utter_transfer_successful:
61
+ - text: "Your transfer of ${amount} to {payee_name} has been successfully processed"
62
+ utter_cancel_transfer:
63
+ - text: "No problem. I will cancel this transfer"
64
+ utter_invalid_amount:
65
+ - text: "You have to enter an amount greater than 0"
66
+ metadata:
67
+ rephrase: True
68
+ utter_past_payment_date:
69
+ - text: "A future payment date cannot be in the past!"
70
+ metadata:
71
+ rephrase: True
72
+
73
+ actions:
74
+ - action_ask_account_from
75
+ - action_check_payee_existence
76
+ - action_check_sufficient_funds
77
+ - action_schedule_payment
78
+ - action_process_immediate_payment
79
+ - action_validate_payment_date
@@ -0,0 +1,63 @@
1
+ # This file contains the different endpoints your bot can use.
2
+
3
+ # Server where the models are pulled from.
4
+ # https://rasa.com/docs/rasa-pro/production/model-storage#fetching-models-from-a-server
5
+
6
+ #models:
7
+ # url: http://my-server.com/models/default_core@latest
8
+ # wait_time_between_pulls: 10 # [optional](default: 100)
9
+
10
+ # Server which runs your custom actions.
11
+ # https://rasa.com/docs/rasa-pro/concepts/custom-actions
12
+
13
+ action_endpoint:
14
+ actions_module: "actions"
15
+
16
+ # Tracker store which is used to store the conversations.
17
+ # By default the conversations are stored in memory.
18
+ # https://rasa.com/docs/rasa-pro/production/tracker-stores
19
+
20
+ #tracker_store:
21
+ # type: redis
22
+ # url: <host of the redis instance, e.g. localhost>
23
+ # port: <port of your redis instance, usually 6379>
24
+ # db: <number of your database within redis, e.g. 0>
25
+ # password: <password used for authentication>
26
+ # use_ssl: <whether or not the communication is encrypted, default false>
27
+
28
+ #tracker_store:
29
+ # type: mongod
30
+ # url: <url to your mongo instance, e.g. mongodb://localhost:27017>
31
+ # db: <name of the db within your mongo instance, e.g. rasa>
32
+ # username: <username used for authentication>
33
+ # password: <password used for authentication>
34
+
35
+ # Event broker which all conversation events should be streamed to.
36
+ # https://rasa.com/docs/rasa-pro/production/event-brokers
37
+
38
+ #event_broker:
39
+ # url: localhost
40
+ # username: username
41
+ # password: password
42
+ # queue: queue
43
+
44
+ # The lines below activate contextual rephrasing, using the default OpenAI language model.
45
+ # Ensure the OPENAI_API_KEY is set to prevent any missing API key errors.
46
+ # For more details, refer to the documentation:
47
+ # https://rasa.com/docs/rasa-pro/concepts/contextual-response-rephraser
48
+ # To enable the rephraser, remove the comment symbols in the lines below.
49
+ nlg:
50
+ type: rephrase
51
+ llm:
52
+ model_group: openai-gpt-4o
53
+ prompt: prompts/rephraser_demo_personality_prompt.jinja2
54
+ rephrase_all: False
55
+
56
+ model_groups:
57
+ - id: openai-gpt-4o
58
+ models:
59
+ - provider: openai
60
+ model: gpt-4o-2024-11-20
61
+ request_timeout: 7
62
+ max_tokens: 256
63
+
@@ -0,0 +1,19 @@
1
+ The following is a conversation with an AI assistant.
2
+ The assistant is professional, calm, and highly attentive to detail.
3
+ Its main priorities are efficiency, speed, and accuracy when handling user requests.
4
+
5
+ Please rephrase the suggested AI response, staying close to the original meaning while
6
+ ensuring the assistant's tone remains formal yet empathetic, friendly, and reassuring.
7
+ It should convey patience, even with vague or repetitive questions, and be clear,
8
+ informative, and slightly humorous where appropriate.
9
+
10
+ Write your responses in English
11
+
12
+ Context / previous conversation with the user:
13
+ {{history}}
14
+
15
+ {{current_input}}
16
+
17
+ Suggested AI Response: {{suggested_response}}
18
+
19
+ Rephrased AI Response:
File without changes
@@ -0,0 +1,204 @@
1
+ import csv
2
+ import logging
3
+ from datetime import datetime
4
+ from typing import Any, Dict, List
5
+
6
+ from rasa_sdk import Action
7
+ from rasa_sdk.events import SlotSet
8
+ from rasa_sdk.executor import CollectingDispatcher
9
+ from rasa_sdk.interfaces import Tracker
10
+ from rasa_sdk.types import DomainDict
11
+
12
+
13
+ class ActionVerifyBillByDate(Action):
14
+ def name(self) -> str:
15
+ return "action_verify_bill_by_date"
16
+
17
+ @staticmethod
18
+ def text_to_date(month_text: str) -> str:
19
+ try:
20
+ # Get the current year
21
+ current_year = datetime.now().year
22
+
23
+ # Combine user input with the current year
24
+ full_text = f"{month_text} {current_year}"
25
+
26
+ # Parse the text format (e.g., "March 2025")
27
+ date_obj = datetime.strptime(full_text, "%B %Y")
28
+
29
+ # Format as DD/MM/YYYY (defaults to the first day of the month)
30
+ formatted_date = date_obj.strftime("01/%m/%Y")
31
+ logging.info(f"This is an info message: formatted_date: {formatted_date}")
32
+ return formatted_date
33
+ except ValueError:
34
+ return "Invalid format. Please use a full month name (e.g., 'March')."
35
+
36
+ def run(
37
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
38
+ ) -> List[Dict[str, Any]]:
39
+ # Get customer ID and date from slots
40
+ customer_id = tracker.get_slot("customer_id")
41
+ bill_month = tracker.get_slot("bill_month")
42
+
43
+ bill_date = ActionVerifyBillByDate.text_to_date(bill_month)
44
+
45
+ if not customer_id:
46
+ dispatcher.utter_message(
47
+ "I couldn't find your customer ID. Please provide it."
48
+ )
49
+ return []
50
+
51
+ if not bill_date:
52
+ dispatcher.utter_message(
53
+ "Please specify the date for the bill you want to check."
54
+ )
55
+ return []
56
+
57
+ try:
58
+ # Load CSV file with billing data
59
+ with open("csvs/billing.csv", "r", newline="") as csvfile:
60
+ reader = csv.DictReader(csvfile)
61
+
62
+ # Convert bill_date to datetime for comparison
63
+ bill_date_obj = datetime.strptime(bill_date, "%d/%m/%Y")
64
+
65
+ # Filter data for the given customer and date
66
+ customer_bills = []
67
+ specific_bill = None
68
+
69
+ for row in reader:
70
+ if row["customer_id"] == str(customer_id):
71
+ # Parse the date from CSV
72
+ row_date = datetime.strptime(row["date"], "%d/%m/%Y")
73
+ row["amount"] = float(row["amount"])
74
+ customer_bills.append(row)
75
+
76
+ # Check if this is the specific bill we're looking for
77
+ if row_date.date() == bill_date_obj.date():
78
+ specific_bill = row
79
+
80
+ if specific_bill is None:
81
+ dispatcher.utter_message(
82
+ f"No bill found for {bill_date_obj.date()}."
83
+ )
84
+ return []
85
+
86
+ bill_amount = float(specific_bill["amount"])
87
+
88
+ # Calculate average
89
+ if customer_bills:
90
+ average_bill = sum(
91
+ float(bill["amount"]) for bill in customer_bills
92
+ ) / len(customer_bills)
93
+ else:
94
+ average_bill = 0.0
95
+
96
+ difference = bill_amount - average_bill
97
+
98
+ # Generate response
99
+ response = (
100
+ f"Your bill for {bill_month} {bill_date_obj.date().year} is "
101
+ f"${bill_amount:.2f}. \n"
102
+ f"The average of your past bills is ${average_bill:.2f}. \n"
103
+ f"This bill is {'higher' if difference > 0 else 'lower'} than "
104
+ f"your average by ${abs(difference):.2f}."
105
+ )
106
+
107
+ dispatcher.utter_message(response)
108
+ return [
109
+ SlotSet("bill_amount", float(bill_amount)),
110
+ SlotSet("average_bill", float(average_bill)),
111
+ SlotSet("difference", float(difference)),
112
+ ]
113
+
114
+ except FileNotFoundError:
115
+ dispatcher.utter_message("Billing data file not found.")
116
+ return []
117
+ except Exception:
118
+ dispatcher.utter_message("Error retrieving billing information.")
119
+ return []
120
+
121
+
122
+ class ActionRecapBill(Action):
123
+ def name(self) -> str:
124
+ return "action_recap_bill"
125
+
126
+ def run(
127
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
128
+ ) -> List[Dict[str, Any]]:
129
+ # Get customer_id and bill_date from slots
130
+ customer_id = tracker.get_slot("customer_id")
131
+ bill_month = tracker.get_slot("bill_month")
132
+
133
+ bill_date = ActionVerifyBillByDate.text_to_date(bill_month)
134
+
135
+ if not customer_id:
136
+ dispatcher.utter_message(
137
+ "I need your customer ID to fetch your bill recap."
138
+ )
139
+ return []
140
+
141
+ if not bill_date:
142
+ dispatcher.utter_message(
143
+ "I need a date to fetch your bill recap. Can you provide one?"
144
+ )
145
+ return []
146
+
147
+ # Convert customer_id to int if needed
148
+ try:
149
+ customer_id = int(customer_id)
150
+ except ValueError:
151
+ dispatcher.utter_message("Invalid customer ID format.")
152
+ return []
153
+
154
+ try:
155
+ # Load CSV file
156
+ with open("csvs/billing.csv", "r", newline="") as csvfile:
157
+ reader = csv.DictReader(csvfile)
158
+
159
+ bill_date_obj = datetime.strptime(bill_date, "%d/%m/%Y")
160
+
161
+ # Filter records for the given customer_id
162
+ filtered_records: List[Dict[str, Any]] = []
163
+ for row in reader:
164
+ if row["customer_id"] == str(customer_id):
165
+ # Parse date and add to filtered records
166
+ row_date: datetime = datetime.strptime(row["date"], "%d/%m/%Y")
167
+ filtered_records.append(
168
+ {
169
+ "date": row_date.date(),
170
+ "amount": float(row["amount"]),
171
+ "source": row["source"],
172
+ }
173
+ )
174
+
175
+ if not filtered_records:
176
+ dispatcher.utter_message(
177
+ f"No transactions found for customer {customer_id} on "
178
+ f"{bill_date_obj.date().strftime('%B %Y')}."
179
+ )
180
+ return []
181
+
182
+ # Format the output
183
+ response1 = "Here is a summary of your costs :"
184
+ dispatcher.utter_message(response1)
185
+ response = "\n".join(
186
+ [
187
+ (
188
+ f"{record['date']} | {record['amount']} $ "
189
+ f"| {record['source']}"
190
+ )
191
+ for record in filtered_records
192
+ ]
193
+ )
194
+
195
+ # Send response to user
196
+ dispatcher.utter_message(response)
197
+ return []
198
+
199
+ except FileNotFoundError:
200
+ dispatcher.utter_message("Billing data file not found.")
201
+ return []
202
+ except Exception:
203
+ dispatcher.utter_message("Error retrieving billing information.")
204
+ return []
@@ -0,0 +1,49 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from openai import AsyncOpenAI
4
+ from rasa_sdk import Action, Tracker
5
+ from rasa_sdk.events import BotUttered
6
+ from rasa_sdk.executor import CollectingDispatcher
7
+ from rasa_sdk.types import DomainDict
8
+
9
+
10
+ class ActionHumanHandoff(Action):
11
+ def __init__(self) -> None:
12
+ super().__init__()
13
+ self.client = AsyncOpenAI()
14
+
15
+ def name(self) -> Text:
16
+ return "action_human_handoff"
17
+
18
+ async def run(
19
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
20
+ ) -> List[Dict[Text, Any]]:
21
+ # Collect conversation
22
+ convo = []
23
+ for event in tracker.events:
24
+ if event.get("event") == "user":
25
+ user_text = "{}".format(event.get("text"))
26
+ user_text2 = "user - " + user_text
27
+ convo.append(user_text2)
28
+ if event.get("event") == "bot":
29
+ bot_text = "{}".format(event.get("text"))
30
+ bot_text2 = "bot - " + bot_text
31
+ # print(bot_text)
32
+ convo.append(bot_text2)
33
+ prompt = (
34
+ f"The following is a conversation between a bot and a human user, "
35
+ f"please summarise so that a human agent can easily understand "
36
+ f"the important context. Conversation: {convo}"
37
+ )
38
+ response = await self.client.chat.completions.create(
39
+ model="gpt-4", # or "gpt-3.5-turbo"
40
+ messages=[{"role": "user", "content": prompt}],
41
+ )
42
+ summarised_conversation = response.choices[0].message.content or ""
43
+ return [
44
+ BotUttered(
45
+ f"I will transfer the following summary of our conversation "
46
+ f"to the Callback Manager:\n"
47
+ f"{summarised_conversation}"
48
+ )
49
+ ]
@@ -0,0 +1,48 @@
1
+ import csv
2
+ from typing import Dict, List
3
+
4
+ from rasa_sdk import Action
5
+ from rasa_sdk.events import SlotSet
6
+ from rasa_sdk.executor import CollectingDispatcher
7
+ from rasa_sdk.interfaces import Tracker
8
+ from rasa_sdk.types import DomainDict
9
+
10
+
11
+ class ActionGetCustomerInfo(Action):
12
+ def name(self) -> str:
13
+ return "action_get_customer_info"
14
+
15
+ def run(
16
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
17
+ ) -> List[Dict]:
18
+ # Load CSV file
19
+ file_path = "csvs/customers.csv" # get information from your DBs
20
+ customer_id = tracker.get_slot("customer_id")
21
+
22
+ try:
23
+ with open(file_path, "r", newline="") as csvfile:
24
+ reader = csv.DictReader(csvfile)
25
+
26
+ # Filter data for the given customer ID
27
+ customer_info = None
28
+ for row in reader:
29
+ if row["customer_id"] == str(customer_id):
30
+ customer_info = row
31
+ break
32
+
33
+ if customer_info is None:
34
+ dispatcher.utter_message("No customer found with this ID.")
35
+ return []
36
+
37
+ # Extract customer details
38
+ first_name = customer_info["first_name"]
39
+
40
+ # Set the retrieved name in a slot
41
+ return [SlotSet("customer_first_name", first_name)]
42
+
43
+ except FileNotFoundError:
44
+ dispatcher.utter_message("Customer database file not found.")
45
+ return []
46
+ except Exception:
47
+ dispatcher.utter_message("Error retrieving customer information.")
48
+ return []
@@ -0,0 +1,28 @@
1
+ import asyncio
2
+ import random
3
+
4
+ from rasa_sdk import Action
5
+ from rasa_sdk.events import EventType, SlotSet
6
+ from rasa_sdk.executor import CollectingDispatcher
7
+ from rasa_sdk.interfaces import Tracker
8
+ from rasa_sdk.types import DomainDict
9
+
10
+
11
+ class ActionSleepAndRespond(Action):
12
+ def name(self) -> str:
13
+ return "actions_run_speed_test"
14
+
15
+ async def run(
16
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
17
+ ) -> list[EventType]:
18
+ await asyncio.sleep(10)
19
+ dispatcher.utter_message(
20
+ text="Thank you for waiting... ✅ "
21
+ ) # Send to the user
22
+
23
+ random_number = random.randint(
24
+ 50, 150
25
+ ) # we will pick randomly the internet speed here
26
+ # for local testing purposes you can define the number
27
+ # for Production testing connect to the API to get this data
28
+ return [SlotSet("network_speed", random_number)]
@@ -0,0 +1,18 @@
1
+ import asyncio
2
+
3
+ from rasa_sdk import Action
4
+ from rasa_sdk.events import EventType
5
+ from rasa_sdk.executor import CollectingDispatcher
6
+ from rasa_sdk.interfaces import Tracker
7
+ from rasa_sdk.types import DomainDict
8
+
9
+
10
+ class ActionSleepAndRespond(Action):
11
+ def name(self) -> str:
12
+ return "action_sleep_few_sec"
13
+
14
+ async def run(
15
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
16
+ ) -> list[EventType]:
17
+ await asyncio.sleep(3)
18
+ return []
@@ -0,0 +1,27 @@
1
+ # Rasa Assistant Configuration
2
+ # This file controls your assistant's language, message processing pipeline, and conversation policies.
3
+ # For full documentation, see: https://rasa.com/docs/pro/build/configuring-assistant
4
+ recipe: default.v1
5
+ language: en
6
+
7
+ # The assistant project unique identifier
8
+ # This default value must be replaced with a unique assistant name within your deployment
9
+ assistant_id: placeholder_default
10
+
11
+ pipeline:
12
+ - name: SearchReadyLLMCommandGenerator
13
+ llm:
14
+ model_group: openai-gpt-4o
15
+ flow_retrieval:
16
+ active: false
17
+
18
+
19
+ policies:
20
+ - name: FlowPolicy
21
+ - name: EnterpriseSearchPolicy
22
+ vector_store:
23
+ type: "faiss"
24
+ source: "./docs"
25
+ llm:
26
+ model_group: openai-gpt-4o
27
+ check_relevancy: true
@@ -0,0 +1,33 @@
1
+ # This file contains the credentials for the voice & chat platforms
2
+ # which your bot is using.
3
+ # https://rasa.com/docs/rasa-pro/connectors/messaging-and-voice-channels/
4
+
5
+ rest:
6
+ # # you don't need to provide anything here - this channel doesn't
7
+ # # require any credentials
8
+
9
+
10
+ #facebook:
11
+ # verify: "<verify>"
12
+ # secret: "<your secret>"
13
+ # page-access-token: "<your page access token>"
14
+
15
+ #slack:
16
+ # slack_token: "<your slack token>"
17
+ # slack_channel: "<the slack channel>"
18
+ # slack_signing_secret: "<your slack signing secret>"
19
+
20
+ #socketio:
21
+ # user_message_evt: <event name for user message>
22
+ # bot_message_evt: <event name for bot messages>
23
+ # session_persistence: <true/false>
24
+
25
+ #mattermost:
26
+ # url: "https://<mattermost instance>/api/v4"
27
+ # token: "<bot token>"
28
+ # webhook_url: "<callback URL>"
29
+
30
+ # This entry is needed if you are using Rasa Enterprise. The entry represents credentials
31
+ # for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers.
32
+ rasa:
33
+ url: "http://localhost:5002/api"
@@ -0,0 +1,19 @@
1
+ customer_id,date,amount,source
2
+ 123,01/01/2025,150.50,Internet
3
+ 123,01/02/2025,55.00,Internet
4
+ 123,01/03/2025,60.00,Internet
5
+ 123,01/04/2025,65.00,Internet
6
+ 123,01/05/2025,70.00,Internet
7
+ 123,01/06/2025,75.00,Internet
8
+ 123,01/07/2025,80.00,Internet
9
+ 123,01/08/2025,85.00,Internet
10
+ 123,01/09/2025,90.00,Internet
11
+ 123,01/10/2025,95.00,Internet
12
+ 123,01/11/2025,100.00,Internet
13
+ 123,01/12/2025,105.00,Internet
14
+ 124,01/01/2025,53.00,TV
15
+ 124,01/02/2025,53.00,TV
16
+ 124,01/03/2025,53.00,TV
17
+ 125,01/01/2025,89.75,Mobile
18
+ 125,01/02/2025,89.75,Mobile
19
+ 125,01/03/2025,89.75,Mobile
@@ -0,0 +1,5 @@
1
+ customer_id,first_name,last_name
2
+ 123,Serena,Williams
3
+ 124,Lionel, Messi
4
+ 125,Tom, Cruise
5
+ 456,Beyoncé, Knowles
@@ -0,0 +1,45 @@
1
+ flows:
2
+ understand_bill:
3
+ if: slots.user_authenticated # the user has to be authenticated in order to access this flow
4
+ description: This flow allows users to check their bill and billing related details.
5
+ steps:
6
+ - collect: bill_month
7
+ ask_before_filling: False
8
+ - action: action_verify_bill_by_date
9
+ - collect: breakdown_cost
10
+ description: |
11
+ This slot is boolean variable. it holds one of two possible values: true or false
12
+ (breakdown_cost = True, breakdown_cost = False), and if the user says "yup," it should be considered True, while "nope" should be considered False
13
+ (e.g., breakdown_cost = True for "yup", breakdown_cost = False for "nope").
14
+ ask_before_filling: true # This can be useful some LLMs will prefill bool slots here we make it mandatory for the bot to ask the user
15
+ next:
16
+ - if: slots.breakdown_cost # it has to be 'slots' with an 's', this means breakdown_cost is True
17
+ then:
18
+ - action: action_recap_bill
19
+ - collect: more_bill_details
20
+ next:
21
+ - if: slots.more_bill_details
22
+ then:
23
+ - action: utter_provide_bill_sources
24
+ next: "END"
25
+ - else: issue_solved_section # this will call "issue_solved_section" section
26
+
27
+ - else: issue_solved_section
28
+
29
+ - id: issue_solved_section # This will help avoid re-writting the same piece of code, this way it can be re-used
30
+ collect: issue_solved
31
+ description: |
32
+ This slot is boolean variable. it holds one of two possible values: true or false
33
+ (issue_solved = True, issue_solved = False), and if the user says "yup" it should be considered True, while "nope" should be considered False
34
+ (e.g., issue_solved = True for "yup", issue_solved = False for "nope").
35
+ ask_before_filling: true
36
+ next:
37
+ - if: not slots.issue_solved # this means issue_solved is False
38
+ then:
39
+ - action: utter_connect_to_human
40
+ - action: action_sleep_few_sec
41
+ - link: human_handoff
42
+
43
+ - else:
44
+ - action: utter_end_conversation
45
+ next: "END"
@@ -0,0 +1,6 @@
1
+ flows:
2
+ bot_challenge:
3
+ name: bot challenge
4
+ description: This flow clarifies that the user is talking to a chatbot, when the user ask if they are talking to a chatbot or a human
5
+ steps:
6
+ - action: utter_bot_challenge