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

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

Potentially problematic release.


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

Files changed (491) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/exceptions.py +31 -1
  4. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  5. rasa/agents/protocol/mcp/mcp_base_agent.py +37 -19
  6. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  7. rasa/agents/protocol/mcp/mcp_task_agent.py +33 -10
  8. rasa/agents/schemas/agent_output.py +1 -1
  9. rasa/agents/utils.py +95 -1
  10. rasa/agents/validation.py +484 -0
  11. rasa/api.py +9 -6
  12. rasa/builder/README.md +120 -0
  13. rasa/builder/__init__.py +0 -0
  14. rasa/builder/auth.py +176 -0
  15. rasa/builder/config.py +92 -0
  16. rasa/builder/copilot/__init__.py +0 -0
  17. rasa/builder/copilot/constants.py +31 -0
  18. rasa/builder/copilot/copilot.py +450 -0
  19. rasa/builder/copilot/copilot_response_handler.py +522 -0
  20. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  21. rasa/builder/copilot/exceptions.py +32 -0
  22. rasa/builder/copilot/models.py +500 -0
  23. rasa/builder/copilot/prompts/__init__.py +0 -0
  24. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  25. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  26. rasa/builder/copilot/signing.py +305 -0
  27. rasa/builder/copilot/telemetry.py +210 -0
  28. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  29. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  30. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  31. rasa/builder/document_retrieval/__init__.py +0 -0
  32. rasa/builder/document_retrieval/constants.py +15 -0
  33. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  34. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  35. rasa/builder/document_retrieval/models.py +62 -0
  36. rasa/builder/download.py +140 -0
  37. rasa/builder/exceptions.py +91 -0
  38. rasa/builder/guardrails/__init__.py +1 -0
  39. rasa/builder/guardrails/constants.py +9 -0
  40. rasa/builder/guardrails/exceptions.py +4 -0
  41. rasa/builder/guardrails/lakera.py +206 -0
  42. rasa/builder/guardrails/models.py +231 -0
  43. rasa/builder/guardrails/store.py +238 -0
  44. rasa/builder/guardrails/utils.py +328 -0
  45. rasa/builder/job_manager.py +87 -0
  46. rasa/builder/jobs.py +282 -0
  47. rasa/builder/llm_service.py +246 -0
  48. rasa/builder/logging_utils.py +265 -0
  49. rasa/builder/main.py +243 -0
  50. rasa/builder/models.py +216 -0
  51. rasa/builder/project_generator.py +458 -0
  52. rasa/builder/project_info.py +72 -0
  53. rasa/builder/scrape_rasa_docs.py +97 -0
  54. rasa/builder/service.py +1345 -0
  55. rasa/builder/shared/tracker_context.py +212 -0
  56. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  57. rasa/builder/template_cache.py +244 -0
  58. rasa/builder/training_service.py +194 -0
  59. rasa/builder/validation_service.py +97 -0
  60. rasa/cli/arguments/train.py +2 -0
  61. rasa/cli/interactive.py +2 -0
  62. rasa/cli/project_templates/basic/README.md +23 -0
  63. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  64. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  65. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  66. rasa/cli/project_templates/basic/config.yml +29 -0
  67. rasa/cli/project_templates/basic/credentials.yml +33 -0
  68. rasa/cli/project_templates/basic/data/data.md +9 -0
  69. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  70. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  71. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  72. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  73. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  74. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  75. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  76. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  77. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  78. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  79. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  80. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  81. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  82. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  83. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  84. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  85. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  86. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  87. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  88. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  89. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  90. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  91. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  92. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  93. rasa/cli/project_templates/default/config.yml +4 -0
  94. rasa/cli/project_templates/default/endpoints.yml +4 -0
  95. rasa/cli/project_templates/finance/README.md +25 -0
  96. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  97. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  99. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  100. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  101. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  102. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  104. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  105. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  106. rasa/cli/project_templates/finance/actions/database.py +277 -0
  107. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  112. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  113. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  114. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  115. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  116. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  117. rasa/cli/project_templates/finance/config.yml +23 -0
  118. rasa/cli/project_templates/finance/credentials.yml +32 -0
  119. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  120. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  121. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  122. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  123. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  124. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  125. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  126. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  127. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  128. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  129. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  130. rasa/cli/project_templates/finance/data/data.md +11 -0
  131. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  132. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  133. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  134. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  135. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  136. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  137. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  138. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  139. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  140. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  141. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  142. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  143. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  144. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  145. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  146. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  147. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  148. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  149. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  150. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  151. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  152. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  153. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  154. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  171. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  172. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  173. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  174. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  231. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  232. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  233. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  234. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  235. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  236. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  237. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  238. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  239. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  240. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  241. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  243. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  244. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  245. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  246. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  247. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  248. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  249. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  250. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  251. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  252. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  253. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  254. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  255. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  256. rasa/cli/project_templates/telco/README.md +25 -0
  257. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  258. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  259. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  260. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  261. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  262. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  263. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  264. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  265. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  266. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  267. rasa/cli/project_templates/telco/config.yml +29 -0
  268. rasa/cli/project_templates/telco/credentials.yml +33 -0
  269. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  270. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  271. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  272. rasa/cli/project_templates/telco/data/data.md +11 -0
  273. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  274. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  275. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  276. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  277. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  278. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  279. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  280. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  281. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  282. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  283. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  284. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  285. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  286. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  287. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  288. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  289. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  290. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  291. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  292. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  293. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  294. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  295. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  296. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  297. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  298. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  299. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  300. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  304. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  305. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  306. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  307. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  308. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  309. rasa/cli/project_templates/tutorial/config.yml +2 -1
  310. rasa/cli/scaffold.py +46 -2
  311. rasa/cli/train.py +2 -0
  312. rasa/cli/utils.py +85 -1
  313. rasa/core/actions/action.py +2 -7
  314. rasa/core/available_agents.py +49 -26
  315. rasa/core/available_endpoints.py +17 -2
  316. rasa/core/channels/channel.py +4 -3
  317. rasa/core/channels/constants.py +3 -0
  318. rasa/core/channels/development_inspector.py +2 -22
  319. rasa/core/channels/inspector/README.md +26 -14
  320. rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-edef10dd.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  324. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  327. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  333. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-790ef78b.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-ecdce073.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  339. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-837fd3aa.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-7e05afcb.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-162eb295.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-b5b53234.js} +1 -1
  353. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-13d138e5.js} +1 -1
  354. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-94cbde3f.js} +1 -1
  355. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  356. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  357. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  358. rasa/core/channels/inspector/dist/index.html +2 -2
  359. rasa/core/channels/inspector/index.html +1 -1
  360. rasa/core/channels/inspector/src/App.tsx +42 -44
  361. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  362. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  363. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +8 -8
  364. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  365. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  366. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  367. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  368. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  369. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  370. rasa/core/channels/inspector/src/types.ts +49 -7
  371. rasa/core/channels/socketio.py +212 -51
  372. rasa/core/channels/studio_chat.py +59 -57
  373. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  374. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  375. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  376. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  377. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  378. rasa/core/channels/voice_stream/genesys.py +2 -1
  379. rasa/core/channels/voice_stream/jambonz.py +9 -1
  380. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  381. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  382. rasa/core/constants.py +6 -0
  383. rasa/core/iam_credentials_providers/__init__.py +0 -0
  384. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  385. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  386. rasa/core/policies/enterprise_search_policy.py +4 -7
  387. rasa/core/policies/flows/flow_executor.py +66 -36
  388. rasa/core/policies/ted_policy.py +7 -5
  389. rasa/core/processor.py +32 -0
  390. rasa/core/redis_connection_factory.py +411 -0
  391. rasa/core/run.py +13 -3
  392. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  393. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  394. rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -81
  395. rasa/dialogue_understanding/commands/start_flow_command.py +18 -113
  396. rasa/dialogue_understanding/commands/utils.py +118 -0
  397. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  398. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  399. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  400. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  401. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  402. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  403. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  404. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  405. rasa/dialogue_understanding/patterns/continue_interrupted.py +185 -114
  406. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +18 -24
  407. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  408. rasa/dialogue_understanding/stack/utils.py +43 -4
  409. rasa/dialogue_understanding/utils.py +24 -4
  410. rasa/engine/graph.py +5 -1
  411. rasa/engine/recipes/default_components.py +78 -10
  412. rasa/engine/recipes/default_recipe.py +41 -1
  413. rasa/engine/storage/local_model_storage.py +83 -3
  414. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  415. rasa/model_manager/model_api.py +4 -5
  416. rasa/model_manager/runner_service.py +1 -1
  417. rasa/model_manager/socket_bridge.py +20 -15
  418. rasa/model_manager/trainer_service.py +12 -9
  419. rasa/model_manager/utils.py +1 -29
  420. rasa/model_manager/warm_rasa_process.py +1 -1
  421. rasa/model_training.py +22 -6
  422. rasa/nlu/classifiers/diet_classifier.py +22 -6
  423. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  424. rasa/nlu/extractors/extractor.py +1 -2
  425. rasa/shared/agents/auth/__init__.py +0 -0
  426. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  427. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  428. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  429. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  430. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  431. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  432. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  433. rasa/shared/agents/auth/constants.py +11 -0
  434. rasa/shared/agents/auth/types.py +11 -0
  435. rasa/shared/constants.py +3 -0
  436. rasa/shared/core/constants.py +6 -6
  437. rasa/shared/core/domain.py +58 -11
  438. rasa/shared/core/events.py +2 -0
  439. rasa/shared/core/flows/constants.py +5 -0
  440. rasa/shared/core/flows/flow_step.py +7 -1
  441. rasa/shared/core/flows/flows_list.py +6 -0
  442. rasa/shared/core/flows/steps/call.py +15 -12
  443. rasa/shared/core/flows/validation.py +238 -44
  444. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  445. rasa/shared/core/slots.py +4 -0
  446. rasa/shared/exceptions.py +12 -0
  447. rasa/shared/importers/importer.py +6 -0
  448. rasa/shared/importers/utils.py +77 -1
  449. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  450. rasa/shared/providers/_utils.py +60 -44
  451. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  452. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  453. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  454. rasa/shared/providers/llm/llm_response.py +4 -4
  455. rasa/shared/utils/common.py +24 -0
  456. rasa/shared/utils/health_check/health_check.py +7 -3
  457. rasa/shared/utils/llm.py +2 -1
  458. rasa/shared/utils/mcp/server_connection.py +108 -27
  459. rasa/shared/utils/mcp/utils.py +20 -0
  460. rasa/studio/upload.py +16 -47
  461. rasa/telemetry.py +97 -23
  462. rasa/tracing/config.py +38 -12
  463. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  464. rasa/tracing/instrumentation/instrumentation.py +85 -8
  465. rasa/utils/common.py +1 -1
  466. rasa/utils/io.py +27 -9
  467. rasa/utils/json_utils.py +6 -1
  468. rasa/utils/log_utils.py +5 -1
  469. rasa/utils/openapi.py +144 -0
  470. rasa/utils/tensorflow/__init__.py +29 -0
  471. rasa/utils/tensorflow/callback.py +1 -1
  472. rasa/utils/tensorflow/crf.py +1 -1
  473. rasa/utils/tensorflow/data_generator.py +21 -8
  474. rasa/utils/tensorflow/layers.py +11 -4
  475. rasa/utils/tensorflow/metrics.py +7 -3
  476. rasa/utils/tensorflow/models.py +41 -6
  477. rasa/utils/tensorflow/rasa_layers.py +6 -4
  478. rasa/utils/tensorflow/transformer.py +2 -3
  479. rasa/utils/train_utils.py +68 -38
  480. rasa/validator.py +18 -16
  481. rasa/version.py +1 -1
  482. rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
  483. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +486 -173
  484. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
  485. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
  486. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
  487. rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
  488. rasa_pro-3.14.0.dev6.dist-info/METADATA +0 -190
  489. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
  490. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
  491. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,277 @@
1
+ import csv
2
+ import logging
3
+ from datetime import datetime
4
+ from pathlib import Path
5
+ from typing import Any, Dict, List, Optional
6
+
7
+
8
+ class Database:
9
+ def __init__(self, csv_path: Optional[Path] = None) -> None:
10
+ """Initialize the database with CSV file paths."""
11
+ self.project_root_path = Path(__file__).resolve().parent.parent
12
+ self.csv_path = csv_path or self.project_root_path / "csvs"
13
+ self.logger = self.setup_logger()
14
+
15
+ def setup_logger(self) -> logging.Logger:
16
+ """Set up logging configuration."""
17
+ logger = logging.getLogger(__name__)
18
+ logger.setLevel(logging.DEBUG)
19
+
20
+ formatter = logging.Formatter(
21
+ "%(asctime)s %(levelname)8s %(name)s - %(message)s"
22
+ )
23
+
24
+ console_handler = logging.StreamHandler()
25
+ console_handler.setLevel(logging.DEBUG)
26
+ console_handler.setFormatter(formatter)
27
+ logger.addHandler(console_handler)
28
+
29
+ return logger
30
+
31
+ def _read_csv(self, filename: str) -> List[Dict[str, Any]]:
32
+ """Read CSV file and return list of dictionaries."""
33
+ try:
34
+ with open(self.csv_path / filename, "r", newline="") as csvfile:
35
+ reader = csv.DictReader(csvfile)
36
+ return list(reader)
37
+ except Exception as e:
38
+ self.logger.error(f"Error reading CSV file {filename}: {e}")
39
+ return []
40
+
41
+ def _write_csv(self, filename: str, data: List[Dict[str, Any]]) -> bool:
42
+ """Write list of dictionaries to CSV file."""
43
+ try:
44
+ if not data:
45
+ return True
46
+
47
+ with open(self.csv_path / filename, "w", newline="") as csvfile:
48
+ writer = csv.DictWriter(csvfile, fieldnames=data[0].keys())
49
+ writer.writeheader()
50
+ writer.writerows(data)
51
+ return True
52
+ except Exception as e:
53
+ self.logger.error(f"Error writing CSV file {filename}: {e}")
54
+ return False
55
+
56
+ def get_user_by_name(self, username: str) -> Optional[Dict[str, Any]]:
57
+ """Get user information by username."""
58
+ try:
59
+ users = self._read_csv("users.csv")
60
+ for user in users:
61
+ if user["name"] == username:
62
+ return user
63
+ return None
64
+ except Exception as e:
65
+ self.logger.error(f"Error getting user by name: {e}")
66
+ return None
67
+
68
+ def get_user_by_id(self, user_id: int) -> Optional[Dict[str, Any]]:
69
+ """Get user information by user_id."""
70
+ try:
71
+ users = self._read_csv("users.csv")
72
+ for user in users:
73
+ if int(user["id"]) == user_id:
74
+ return user
75
+ return None
76
+ except Exception as e:
77
+ self.logger.error(f"Error getting user by id: {e}")
78
+ return None
79
+
80
+ def get_account_by_user_and_number(
81
+ self, user_id: int, account_number: str
82
+ ) -> Optional[Dict[str, Any]]:
83
+ """Get account information by user_id and account number."""
84
+ try:
85
+ accounts = self._read_csv("accounts.csv")
86
+ for account in accounts:
87
+ if (
88
+ int(account["user_id"]) == user_id
89
+ and account["number"] == account_number
90
+ ):
91
+ return account
92
+ return None
93
+ except Exception as e:
94
+ self.logger.error(f"Error getting account: {e}")
95
+ return None
96
+
97
+ def get_accounts_by_user(self, user_id: int) -> List[Dict[str, Any]]:
98
+ """Get all accounts for a user."""
99
+ try:
100
+ accounts = self._read_csv("accounts.csv")
101
+ return [
102
+ account for account in accounts if int(account["user_id"]) == user_id
103
+ ]
104
+
105
+ except Exception as e:
106
+ self.logger.error(f"Error getting accounts by user: {e}")
107
+ return []
108
+
109
+ def get_payees_by_user(self, user_id: int) -> List[Dict[str, Any]]:
110
+ """Get all payees for a user."""
111
+ try:
112
+ payees = self._read_csv("payees.csv")
113
+ return [payee for payee in payees if int(payee["user_id"]) == user_id]
114
+ except Exception as e:
115
+ self.logger.error(f"Error getting payees by user: {e}")
116
+ return []
117
+
118
+ def get_payee_by_name_and_user(
119
+ self, payee_name: str, user_id: int
120
+ ) -> Optional[Dict[str, Any]]:
121
+ """Get payee information by name and user_id."""
122
+ try:
123
+ payees = self._read_csv("payees.csv")
124
+ for payee in payees:
125
+ if payee["name"] == payee_name and int(payee["user_id"]) == user_id:
126
+ return payee
127
+ return None
128
+ except Exception as e:
129
+ self.logger.error(f"Error getting payee by name and user: {e}")
130
+ return None
131
+
132
+ def get_cards_by_user(self, user_id: int) -> List[Dict[str, Any]]:
133
+ """Get all cards for a user."""
134
+ try:
135
+ cards = self._read_csv("cards.csv")
136
+ return [card for card in cards if int(card["user_id"]) == user_id]
137
+ except Exception as e:
138
+ self.logger.error(f"Error getting cards by user: {e}")
139
+ return []
140
+
141
+ def get_card_by_number(self, card_number: str) -> Optional[Dict[str, Any]]:
142
+ """Get card information by card number."""
143
+ try:
144
+ cards = self._read_csv("cards.csv")
145
+ for card in cards:
146
+ if card["number"] == card_number:
147
+ return card
148
+ return None
149
+ except Exception as e:
150
+ self.logger.error(f"Error getting card by number: {e}")
151
+ return None
152
+
153
+ def update_card_status(self, card_number: str, status: str) -> bool:
154
+ """Update card status."""
155
+ try:
156
+ cards = self._read_csv("cards.csv")
157
+ for card in cards:
158
+ if card["number"] == card_number:
159
+ card["status"] = status
160
+ break
161
+ return self._write_csv("cards.csv", cards)
162
+ except Exception as e:
163
+ self.logger.error(f"Error updating card status: {e}")
164
+ return False
165
+
166
+ def add_payee(
167
+ self,
168
+ user_id: int,
169
+ name: str,
170
+ sort_code: str,
171
+ account_number: str,
172
+ payee_type: str,
173
+ reference: str = "",
174
+ ) -> bool:
175
+ """Add a new payee."""
176
+ try:
177
+ payees = self._read_csv("payees.csv")
178
+
179
+ # Get the next ID
180
+ next_id = 1
181
+ if payees:
182
+ next_id = max(int(payee["id"]) for payee in payees) + 1
183
+
184
+ # Create new payee record
185
+ new_payee = {
186
+ "id": str(next_id),
187
+ "user_id": str(user_id),
188
+ "name": name,
189
+ "sort_code": sort_code,
190
+ "account_number": account_number,
191
+ "type": payee_type,
192
+ "reference": reference,
193
+ "added_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
194
+ }
195
+
196
+ # Add to list and save
197
+ payees.append(new_payee)
198
+ return self._write_csv("payees.csv", payees)
199
+ except Exception as e:
200
+ self.logger.error(f"Error adding payee: {e}")
201
+ return False
202
+
203
+ def remove_payee(self, payee_name: str, user_id: int) -> bool:
204
+ """Remove a payee."""
205
+ try:
206
+ payees = self._read_csv("payees.csv")
207
+ payees = [
208
+ payee
209
+ for payee in payees
210
+ if not (
211
+ payee["name"] == payee_name and int(payee["user_id"]) == user_id
212
+ )
213
+ ]
214
+ return self._write_csv("payees.csv", payees)
215
+ except Exception as e:
216
+ self.logger.error(f"Error removing payee: {e}")
217
+ return False
218
+
219
+ def check_sufficient_funds(
220
+ self, user_id: int, account_number: str, amount: float
221
+ ) -> bool:
222
+ """Check if account has sufficient funds."""
223
+ try:
224
+ account = self.get_account_by_user_and_number(user_id, account_number)
225
+ if not account:
226
+ return False
227
+ return float(account["balance"]) >= amount
228
+ except Exception as e:
229
+ self.logger.error(f"Error checking sufficient funds: {e}")
230
+ return False
231
+
232
+ def get_branches(self) -> List[Dict[str, Any]]:
233
+ """Get all branches."""
234
+ try:
235
+ return self._read_csv("branches.csv")
236
+ except Exception as e:
237
+ self.logger.error(f"Error getting branches: {e}")
238
+ return []
239
+
240
+ def get_advisors_by_branch(self, branch_id: int) -> List[Dict[str, Any]]:
241
+ """Get all advisors for a branch."""
242
+ try:
243
+ advisors = self._read_csv("advisors.csv")
244
+ return [
245
+ advisor
246
+ for advisor in advisors
247
+ if int(advisor["branch_id"]) == branch_id
248
+ ]
249
+ except Exception as e:
250
+ self.logger.error(f"Error getting advisors by branch: {e}")
251
+ return []
252
+
253
+ def get_appointments_by_advisor(self, advisor_id: int) -> List[Dict[str, Any]]:
254
+ """Get all appointments for an advisor."""
255
+ try:
256
+ appointments = self._read_csv("appointments.csv")
257
+ return [
258
+ appointment
259
+ for appointment in appointments
260
+ if int(appointment["advisor_id"]) == advisor_id
261
+ ]
262
+ except Exception as e:
263
+ self.logger.error(f"Error getting appointments by advisor: {e}")
264
+ return []
265
+
266
+ def __enter__(self) -> "Database":
267
+ """Enter the runtime context related to this object."""
268
+ return self
269
+
270
+ def __exit__(
271
+ self,
272
+ exc_type: Optional[type],
273
+ exc_value: Optional[BaseException],
274
+ traceback: Optional[Any],
275
+ ) -> None:
276
+ """Exit the runtime context related to this object."""
277
+ self.logger.info("Database connection closed")
@@ -0,0 +1,52 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.events import SlotSet
5
+ from rasa_sdk.executor import CollectingDispatcher
6
+
7
+ from actions.database import Database
8
+
9
+
10
+ class ActionAddPayee(Action):
11
+ def name(self) -> Text:
12
+ return "action_add_payee"
13
+
14
+ def run(
15
+ self,
16
+ dispatcher: CollectingDispatcher,
17
+ tracker: Tracker,
18
+ domain: Dict[Text, Any],
19
+ ) -> List[Dict[Text, Any]]:
20
+ name = tracker.get_slot("name")
21
+ payee_name = tracker.get_slot("payee_name")
22
+ account_number = tracker.get_slot("account_number")
23
+ sort_code = tracker.get_slot("sort_code")
24
+ payee_type = tracker.get_slot("payee_type")
25
+ reference = tracker.get_slot("reference") or ""
26
+
27
+ db = Database()
28
+
29
+ # Get user information
30
+ user = db.get_user_by_name(name)
31
+ if not user:
32
+ dispatcher.utter_message(text="User not found.")
33
+ return []
34
+
35
+ # Add the payee
36
+ success = db.add_payee(
37
+ int(user["id"]),
38
+ payee_name,
39
+ sort_code,
40
+ account_number,
41
+ payee_type,
42
+ reference,
43
+ )
44
+
45
+ if success:
46
+ dispatcher.utter_message(
47
+ text=f"Payee {payee_name} has been added successfully."
48
+ )
49
+ return [SlotSet("payee_added", True)]
50
+ else:
51
+ dispatcher.utter_message(text="Failed to add payee. Please try again.")
52
+ return [SlotSet("payee_added", False)]
@@ -0,0 +1,51 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.executor import CollectingDispatcher
5
+
6
+ from actions.database import Database
7
+
8
+
9
+ class ActionAskAccountFrom(Action):
10
+ def name(self) -> Text:
11
+ return "action_ask_account_from"
12
+
13
+ def run(
14
+ self,
15
+ dispatcher: CollectingDispatcher,
16
+ tracker: Tracker,
17
+ domain: Dict[Text, Any],
18
+ ) -> List[Dict[Text, Any]]:
19
+ name = tracker.get_slot("name")
20
+
21
+ db = Database()
22
+
23
+ # Get user information
24
+ user = db.get_user_by_name(name)
25
+ if not user:
26
+ dispatcher.utter_message(text="User not found.")
27
+ return []
28
+
29
+ # Get all accounts for the user
30
+ user_id = int(user["id"])
31
+ accounts = db.get_accounts_by_user(user_id)
32
+ print(f"DEBUG: Accounts found: {accounts}")
33
+ if not accounts:
34
+ dispatcher.utter_message(text="No accounts found for this user.")
35
+ return []
36
+
37
+ buttons = [
38
+ {
39
+ "content_type": "text",
40
+ "title": (
41
+ f"{account['type'].title()} (Balance: "
42
+ f"${float(account['balance']):.2f})"
43
+ ),
44
+ "payload": str(account["number"]),
45
+ }
46
+ for account in accounts
47
+ ]
48
+ message = "Which account would you like to transfer money from?"
49
+ dispatcher.utter_message(text=message, buttons=buttons)
50
+
51
+ return []
@@ -0,0 +1,40 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.events import SlotSet
5
+ from rasa_sdk.executor import CollectingDispatcher
6
+
7
+ from actions.database import Database
8
+
9
+
10
+ class ActionCheckPayeeExistence(Action):
11
+ def name(self) -> Text:
12
+ return "action_check_payee_existence"
13
+
14
+ def run(
15
+ self,
16
+ dispatcher: CollectingDispatcher,
17
+ tracker: Tracker,
18
+ domain: Dict[Text, Any],
19
+ ) -> List[Dict[Text, Any]]:
20
+ name = tracker.get_slot("name")
21
+ payee_name = tracker.get_slot("payee_name")
22
+
23
+ db = Database()
24
+
25
+ # Get user information
26
+ user = db.get_user_by_name(name)
27
+ if not user:
28
+ dispatcher.utter_message(text="User not found.")
29
+ return []
30
+
31
+ # Check if payee exists
32
+ payee = db.get_payee_by_name_and_user(payee_name, int(user["id"]))
33
+
34
+ if payee:
35
+ return [SlotSet("payee_exists", True)]
36
+
37
+ dispatcher.utter_message(
38
+ text=f"{payee_name} is not an authorised payee. Let's add them!"
39
+ )
40
+ return [SlotSet("payee_exists", False)]
@@ -0,0 +1,40 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.events import SlotSet
5
+ from rasa_sdk.executor import CollectingDispatcher
6
+
7
+ from actions.database import Database
8
+
9
+
10
+ class ActionCheckSufficientFunds(Action):
11
+ def name(self) -> Text:
12
+ return "action_check_sufficient_funds"
13
+
14
+ def run(
15
+ self,
16
+ dispatcher: CollectingDispatcher,
17
+ tracker: Tracker,
18
+ domain: Dict[Text, Any],
19
+ ) -> List[Dict[Text, Any]]:
20
+ name = tracker.get_slot("name")
21
+ account_from = tracker.get_slot("account_from")
22
+ amount = float(tracker.get_slot("amount"))
23
+
24
+ db = Database()
25
+
26
+ # Get user information
27
+ user = db.get_user_by_name(name)
28
+ if not user:
29
+ dispatcher.utter_message(text="User not found.")
30
+ return []
31
+
32
+ # Check if user has sufficient funds
33
+ has_sufficient_funds = db.check_sufficient_funds(
34
+ int(user["id"]), account_from, amount
35
+ )
36
+
37
+ if has_sufficient_funds:
38
+ return [SlotSet("sufficient_funds", True)]
39
+ else:
40
+ return [SlotSet("sufficient_funds", False)]
@@ -0,0 +1,46 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.executor import CollectingDispatcher
5
+
6
+ from actions.database import Database
7
+
8
+
9
+ class ActionListPayees(Action):
10
+ def name(self) -> Text:
11
+ return "action_list_payees"
12
+
13
+ def run(
14
+ self,
15
+ dispatcher: CollectingDispatcher,
16
+ tracker: Tracker,
17
+ domain: Dict[Text, Any],
18
+ ) -> List[Dict[Text, Any]]:
19
+ name = tracker.get_slot("name")
20
+
21
+ db = Database()
22
+
23
+ # Get user information
24
+ user = db.get_user_by_name(name)
25
+ if not user:
26
+ dispatcher.utter_message(text="User not found.")
27
+ return []
28
+
29
+ # Get payees for the user
30
+ user_id = int(user["id"])
31
+ payees = db.get_payees_by_user(user_id)
32
+
33
+ if not payees:
34
+ dispatcher.utter_message(text="You have no payees set up.")
35
+ return []
36
+
37
+ payee_names = [payee["name"] for payee in payees]
38
+ if len(payee_names) > 1:
39
+ payees_list = ", ".join(payee_names[:-1]) + " and " + payee_names[-1]
40
+ else:
41
+ payees_list = payee_names[0]
42
+
43
+ message = f"You are authorised to transfer money to: {payees_list}"
44
+ dispatcher.utter_message(text=message)
45
+
46
+ return []
@@ -0,0 +1,18 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.events import SlotSet
5
+ from rasa_sdk.executor import CollectingDispatcher
6
+
7
+
8
+ class ActionProcessImmediatePayment(Action):
9
+ def name(self) -> Text:
10
+ return "action_process_immediate_payment"
11
+
12
+ def run(
13
+ self,
14
+ dispatcher: CollectingDispatcher,
15
+ tracker: Tracker,
16
+ domain: Dict[Text, Any],
17
+ ) -> List[Dict[Text, Any]]:
18
+ return [SlotSet("payment_processed", True)]
@@ -0,0 +1,49 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.events import SlotSet
5
+ from rasa_sdk.executor import CollectingDispatcher
6
+
7
+ from actions.database import Database
8
+
9
+
10
+ class ActionRemovePayee(Action):
11
+ def name(self) -> Text:
12
+ return "action_remove_payee"
13
+
14
+ def run(
15
+ self,
16
+ dispatcher: CollectingDispatcher,
17
+ tracker: Tracker,
18
+ domain: Dict[Text, Any],
19
+ ) -> List[Dict[Text, Any]]:
20
+ name = tracker.get_slot("name")
21
+ payee_name = tracker.get_slot("payee_name")
22
+
23
+ db = Database()
24
+
25
+ # Get user information
26
+ user = db.get_user_by_name(name)
27
+ if not user:
28
+ dispatcher.utter_message(text="User not found.")
29
+ return []
30
+
31
+ # Check if payee exists
32
+ payee = db.get_payee_by_name_and_user(payee_name, int(user["id"]))
33
+ if not payee:
34
+ dispatcher.utter_message(
35
+ text=f"I'm sorry, but I couldn't find a payee named '{payee_name}'"
36
+ )
37
+ return [SlotSet("payee_removed", False)]
38
+
39
+ # Remove the payee
40
+ success = db.remove_payee(payee_name, int(user["id"]))
41
+
42
+ if success:
43
+ dispatcher.utter_message(
44
+ text=f"Payee {payee_name} has been removed successfully."
45
+ )
46
+ return [SlotSet("payee_removed", True)]
47
+ else:
48
+ dispatcher.utter_message(text="Failed to remove payee. Please try again.")
49
+ return [SlotSet("payee_removed", False)]
@@ -0,0 +1,19 @@
1
+ from typing import Any, Dict, List, Text
2
+
3
+ from rasa_sdk import Action, Tracker
4
+ from rasa_sdk.events import SlotSet
5
+ from rasa_sdk.executor import CollectingDispatcher
6
+
7
+
8
+ class ActionSchedulePayment(Action):
9
+ def name(self) -> Text:
10
+ return "action_schedule_payment"
11
+
12
+ def run(
13
+ self,
14
+ dispatcher: CollectingDispatcher,
15
+ tracker: Tracker,
16
+ domain: Dict[Text, Any],
17
+ ) -> List[Dict[Text, Any]]:
18
+ # TODO: Should this add the payment to a scheduled_payment table?
19
+ return [SlotSet("payment_scheduled", True)]
@@ -0,0 +1,36 @@
1
+ from datetime import datetime
2
+ from typing import Any, Dict, List, Text
3
+
4
+ from rasa_sdk import Action, Tracker
5
+ from rasa_sdk.events import SlotSet
6
+ from rasa_sdk.executor import CollectingDispatcher
7
+
8
+
9
+ class ActionValidatePaymentDate(Action):
10
+ def name(self) -> Text:
11
+ return "action_validate_payment_date"
12
+
13
+ def is_future_date(self, payment_date_str: str, current_date_str: str) -> bool:
14
+ current_date = datetime.strptime(current_date_str, "%d/%m/%Y").date()
15
+ payment_date = datetime.strptime(payment_date_str, "%d/%m/%Y").date()
16
+ return payment_date > current_date
17
+
18
+ def run(
19
+ self,
20
+ dispatcher: CollectingDispatcher,
21
+ tracker: Tracker,
22
+ domain: Dict[Text, Any],
23
+ ) -> List[Dict[Text, Any]]:
24
+ current_date = tracker.get_slot("current_date")
25
+ payment_date = tracker.get_slot("payment_date")
26
+
27
+ if self.is_future_date(payment_date, current_date):
28
+ return [
29
+ SlotSet("valid_payment_date", True),
30
+ SlotSet("future_payment_date", True),
31
+ ]
32
+ else:
33
+ return [
34
+ SlotSet("valid_payment_date", True),
35
+ SlotSet("future_payment_date", False),
36
+ ]
@@ -0,0 +1,23 @@
1
+ recipe: default.v1
2
+ language: en
3
+ assistant_id: placeholder_default
4
+
5
+ pipeline:
6
+ - name: SearchReadyLLMCommandGenerator
7
+ llm:
8
+ model_group: openai-gpt-4o
9
+ flow_retrieval:
10
+ active: false
11
+
12
+
13
+ policies:
14
+ - name: FlowPolicy
15
+ - name: EnterpriseSearchPolicy
16
+ vector_store:
17
+ type: "faiss"
18
+ source: "./docs"
19
+ llm:
20
+ model_group: openai-gpt-4o
21
+ embeddings:
22
+ model_group: openai-embeddings
23
+ check_relevancy: true