rasa-pro 3.14.0.dev10__py3-none-any.whl → 3.14.0.dev12__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 (295) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/agent_factory.py +1 -1
  3. rasa/agents/agent_manager.py +52 -3
  4. rasa/agents/constants.py +3 -0
  5. rasa/agents/core/types.py +11 -0
  6. rasa/agents/protocol/__init__.py +11 -3
  7. rasa/agents/protocol/a2a/a2a_agent.py +45 -5
  8. rasa/agents/protocol/mcp/mcp_base_agent.py +14 -5
  9. rasa/agents/protocol/mcp/mcp_open_agent.py +27 -13
  10. rasa/agents/protocol/mcp/mcp_task_agent.py +42 -31
  11. rasa/agents/schemas/agent_tool_result.py +0 -2
  12. rasa/agents/schemas/agent_tool_schema.py +55 -3
  13. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +6 -6
  14. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +5 -5
  15. rasa/agents/utils.py +42 -3
  16. rasa/builder/copilot/telemetry.py +35 -19
  17. rasa/builder/main.py +5 -14
  18. rasa/builder/project_generator.py +1 -1
  19. rasa/builder/service.py +5 -0
  20. rasa/builder/template_cache.py +9 -184
  21. rasa/cli/project_templates/basic/data/data.md +5 -6
  22. rasa/cli/project_templates/basic/domain/domain.md +5 -2
  23. rasa/cli/project_templates/finance/README.md +8 -7
  24. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  25. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  26. rasa/cli/project_templates/finance/actions/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
  27. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  28. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  29. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  30. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  31. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  32. rasa/cli/project_templates/finance/actions/db.py +117 -0
  33. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  34. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  35. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  36. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  37. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  38. rasa/cli/project_templates/finance/config.yml +6 -0
  39. rasa/cli/project_templates/finance/credentials.yml +7 -6
  40. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
  41. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  42. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  43. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  44. rasa/cli/project_templates/finance/data/cards/block_card.yml +37 -58
  45. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  46. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  47. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  48. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  49. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  50. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  51. rasa/cli/project_templates/finance/data/data.md +6 -3
  52. rasa/cli/project_templates/finance/data/general/agent_details.yml +6 -0
  53. rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
  54. rasa/cli/project_templates/finance/data/general/human_handoff.yml +1 -1
  55. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  56. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  57. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  58. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +29 -62
  59. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  60. rasa/cli/project_templates/finance/db/cards.json +18 -0
  61. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  62. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  63. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  64. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  65. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  66. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  67. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  68. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  69. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  70. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  71. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  72. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  73. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  74. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  75. rasa/cli/project_templates/finance/domain/_system/patterns/pattern_session_start.yml +11 -0
  76. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +9 -5
  77. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  78. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  79. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  80. rasa/cli/project_templates/finance/domain/cards/block_card.yml +33 -90
  81. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  82. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  83. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  84. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  85. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  86. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  87. rasa/cli/project_templates/finance/domain/domain.md +9 -1
  88. rasa/cli/project_templates/finance/domain/general/_shared.yml +53 -0
  89. rasa/cli/project_templates/finance/domain/general/agent_details.yml +19 -0
  90. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -2
  91. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
  92. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +7 -3
  93. rasa/cli/project_templates/finance/domain/general/welcome.yml +5 -2
  94. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  95. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  96. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  97. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +203 -61
  98. rasa/cli/project_templates/finance/endpoints.yml +3 -2
  99. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
  100. rasa/cli/project_templates/telco/data/data.md +1 -1
  101. rasa/cli/project_templates/telco/docs/docs.md +3 -0
  102. rasa/cli/project_templates/telco/domain/domain.md +1 -2
  103. rasa/constants.py +1 -1
  104. rasa/core/actions/direct_custom_actions_executor.py +9 -2
  105. rasa/core/actions/grpc_custom_action_executor.py +9 -4
  106. rasa/core/agent.py +2 -3
  107. rasa/core/available_agents.py +1 -1
  108. rasa/core/brokers/broker.py +1 -1
  109. rasa/core/brokers/kafka.py +52 -8
  110. rasa/core/channels/__init__.py +82 -35
  111. rasa/core/channels/inspector/README.md +1 -1
  112. rasa/core/channels/telegram.py +4 -9
  113. rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
  114. rasa/core/concurrent_lock_store.py +66 -16
  115. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +76 -1
  116. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +1 -1
  117. rasa/core/lock_store.py +41 -7
  118. rasa/core/policies/flows/agent_executor.py +632 -0
  119. rasa/core/policies/flows/flow_executor.py +3 -417
  120. rasa/core/policies/flows/mcp_tool_executor.py +32 -12
  121. rasa/core/processor.py +49 -28
  122. rasa/core/run.py +22 -0
  123. rasa/dialogue_understanding/commands/cancel_flow_command.py +1 -1
  124. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +11 -3
  125. rasa/dialogue_understanding/commands/clarify_command.py +11 -3
  126. rasa/dialogue_understanding/commands/knowledge_answer_command.py +11 -3
  127. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +3 -3
  128. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +3 -3
  129. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +3 -3
  130. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +3 -3
  131. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -0
  132. rasa/dialogue_understanding/processor/command_processor.py +70 -0
  133. rasa/dialogue_understanding/stack/dialogue_stack.py +0 -25
  134. rasa/engine/loader.py +12 -0
  135. rasa/engine/recipes/default_components.py +111 -82
  136. rasa/engine/recipes/default_recipe.py +79 -22
  137. rasa/engine/runner/dask.py +8 -5
  138. rasa/graph_components/validators/default_recipe_validator.py +59 -19
  139. rasa/model_manager/warm_rasa_process.py +13 -3
  140. rasa/model_training.py +0 -14
  141. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -22
  142. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  143. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  144. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  145. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  146. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  147. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  148. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  149. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  150. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  151. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  152. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  153. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  154. rasa/nlu/utils/mitie_utils.py +3 -0
  155. rasa/nlu/utils/spacy_utils.py +3 -2
  156. rasa/telemetry.py +63 -0
  157. rasa/tracing/instrumentation/attribute_extractors.py +6 -1
  158. rasa/utils/log_utils.py +95 -4
  159. rasa/utils/tensorflow/__init__.py +0 -22
  160. rasa/utils/tensorflow/callback.py +17 -7
  161. rasa/utils/tensorflow/layers.py +10 -7
  162. rasa/utils/tensorflow/rasa_layers.py +1 -1
  163. rasa/version.py +1 -1
  164. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev12.dist-info}/METADATA +96 -89
  165. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev12.dist-info}/RECORD +168 -239
  166. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  167. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  168. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  169. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  170. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  171. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  172. rasa/cli/project_templates/finance/actions/database.py +0 -277
  173. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  174. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  175. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  176. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  177. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  178. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  179. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  180. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  181. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  182. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  183. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  184. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  185. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  186. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  187. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  188. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  189. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  190. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  191. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  192. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  193. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  194. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  195. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  196. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  197. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  198. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  199. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  200. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  201. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  202. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  203. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  204. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  205. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  206. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  207. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  208. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  209. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  210. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  211. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  212. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  213. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  214. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  215. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  216. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  217. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  218. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  219. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  220. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  221. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  222. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  231. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  232. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  233. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  234. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  235. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  236. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  237. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  238. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  239. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  240. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  241. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  242. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  243. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  244. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  245. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  246. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  247. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  248. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  249. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  250. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  251. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  252. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  253. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  254. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  255. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  256. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  257. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  258. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  259. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  260. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  261. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  262. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  263. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  264. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  265. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  266. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  267. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  268. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  269. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  270. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  271. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  272. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  273. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  274. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  275. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  276. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  277. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  278. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  279. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  280. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  281. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  282. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  283. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  284. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  285. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  286. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  287. rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
  288. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  289. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  290. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  291. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  292. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  293. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev12.dist-info}/NOTICE +0 -0
  294. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev12.dist-info}/WHEEL +0 -0
  295. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev12.dist-info}/entry_points.txt +0 -0
@@ -1,47 +0,0 @@
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 ActionAskAccount(Action):
10
- def name(self) -> Text:
11
- return "action_ask_account"
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
-
33
- if not accounts:
34
- dispatcher.utter_message(text="No accounts found for this user.")
35
- return []
36
-
37
- buttons = [
38
- {
39
- "title": f"{account['number']} ({account['type'].title()})",
40
- "payload": account["number"],
41
- }
42
- for account in accounts
43
- ]
44
- message = "Which account would you like the balance for?"
45
- dispatcher.utter_message(text=message, buttons=buttons)
46
-
47
- return []
@@ -1,40 +0,0 @@
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 ActionCheckBalance(Action):
10
- def name(self) -> Text:
11
- return "action_check_balance"
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
- account_number = tracker.get_slot("account")
21
-
22
- db = Database()
23
-
24
- # Get user information
25
- user = db.get_user_by_name(name)
26
- if not user:
27
- dispatcher.utter_message(text="User not found.")
28
- return []
29
-
30
- # Get account information
31
- account = db.get_account_by_user_and_number(int(user["id"]), account_number)
32
- if not account:
33
- dispatcher.utter_message(text="Account not found.")
34
- return []
35
-
36
- current_balance = float(account["balance"])
37
-
38
- message = f"The balance on that account is: ${current_balance}"
39
- dispatcher.utter_message(text=message)
40
- return []
@@ -1,74 +0,0 @@
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 ActionExecuted, SlotSet
6
- from rasa_sdk.executor import CollectingDispatcher
7
-
8
- from actions.database import Database
9
-
10
-
11
- class ActionSessionStart(Action):
12
- def name(self) -> Text:
13
- return "action_session_start"
14
-
15
- def set_current_date(self) -> List[Dict[Text, Any]]:
16
- current_date = datetime.now().strftime("%d/%m/%Y")
17
- return [SlotSet("current_date", current_date)]
18
-
19
- def set_user_profile(self, name: str) -> List[Dict[Text, Any]]:
20
- db = Database()
21
-
22
- # Get user information
23
- user = db.get_user_by_name(name)
24
-
25
- if user:
26
- return [
27
- SlotSet("name", user["name"]),
28
- SlotSet("username", user["username"]),
29
- SlotSet("segment", user["segment"]),
30
- SlotSet("email_address", user["email"]),
31
- SlotSet("physical_address", user["address"]),
32
- ]
33
- else:
34
- return []
35
-
36
- def run(
37
- self,
38
- dispatcher: CollectingDispatcher,
39
- tracker: Tracker,
40
- domain: Dict[Text, Any],
41
- ) -> List[Dict[Text, Any]]:
42
- current_date_events = self.set_current_date()
43
-
44
- # Advanced option: It is possible to enable the chatbot with multiple
45
- # user profiles.
46
- # This option influences the interactions with the agent.
47
- # The bot randomly assigns a user profile at the start of each session.
48
- # With this advance option: The demo bot will include three user profiles
49
- # with different payees:
50
- # John Smith: Payees: Robert (friend), James (son), Food Market (groceries)
51
- # Mary Brown: Payees: Richard (business partner), Susan (friend),
52
- # Electric Company (utilities)
53
- # Dan Young: Payees: Amy (colleague), Fitness Gym (gym), William (friend)
54
- #
55
- # The default profile is John Smith
56
- #
57
- # Each profile also has its own accounts—Current (Checking), Savings,
58
- # and Business
59
- #
60
- # Intructions: Just toggle the comments of the following 2 lines.
61
- name = "John Smith"
62
- # username = random.choice(["John Smith", "Mary Brown", "Dan Young"])
63
-
64
- user_profile_events = self.set_user_profile(name)
65
-
66
- events = (
67
- current_date_events
68
- + user_profile_events
69
- + [
70
- ActionExecuted("action_listen"),
71
- ]
72
- )
73
-
74
- return events
@@ -1,48 +0,0 @@
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 ActionAskCard(Action):
10
- def name(self) -> Text:
11
- return "action_ask_card"
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 cards for the user
30
- user_id = int(user["id"])
31
- cards = db.get_cards_by_user(user_id)
32
-
33
- if not cards:
34
- dispatcher.utter_message(text="No cards found for this user.")
35
- return []
36
-
37
- buttons = [
38
- {
39
- "content_type": "text",
40
- "title": f"{i + 1}: x{card['number'][-4:]} ({card['type'].title()})",
41
- "payload": f"/SetSlots(card_selection={card['number']!s})",
42
- }
43
- for i, card in enumerate(cards)
44
- ]
45
- message = "Select the card you require assistance with:"
46
- dispatcher.utter_message(text=message, buttons=buttons)
47
-
48
- return []
@@ -1,36 +0,0 @@
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 ActionCheckCardExistence(Action):
11
- def name(self) -> str:
12
- return "action_check_card_existence"
13
-
14
- def run(
15
- self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
16
- ) -> List[Dict[Text, Any]]:
17
- name = tracker.get_slot("name")
18
- card_number = tracker.get_slot("card_number")
19
-
20
- db = Database()
21
-
22
- # Get user information
23
- user = db.get_user_by_name(name)
24
- if not user:
25
- dispatcher.utter_message(text="User not found.")
26
- return []
27
-
28
- # Get all cards for the user
29
- user_id = int(user["id"])
30
- cards = db.get_cards_by_user(user_id)
31
- card_numbers = [card["number"] for card in cards]
32
-
33
- if card_number in card_numbers:
34
- return [SlotSet("card_found", True)]
35
- else:
36
- return [SlotSet("card_found", False)]
@@ -1,54 +0,0 @@
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 ActionUpdateCardStatus(Action):
11
- def name(self) -> str:
12
- return "action_update_card_status"
13
-
14
- def run(
15
- self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
16
- ) -> List[Dict[Text, Any]]:
17
- name = tracker.get_slot("name")
18
- card_number = tracker.get_slot("card")
19
- new_status = "inactive"
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 card information to verify it belongs to the user
30
- card = db.get_card_by_number(card_number)
31
- if not card:
32
- dispatcher.utter_message(text="I can't find the card within your account.")
33
- return []
34
-
35
- # Check if card belongs to the user
36
- try:
37
- if int(card["user_id"]) != int(user["id"]):
38
- dispatcher.utter_message(
39
- text="That card is not associated with your account."
40
- )
41
- return []
42
- except (ValueError, TypeError, KeyError):
43
- dispatcher.utter_message(text="Error verifying card ownership.")
44
- return []
45
-
46
- # Update card status
47
- success = db.update_card_status(card_number, new_status)
48
-
49
- if success:
50
- return [SlotSet("card_status", new_status)]
51
- else:
52
- # Log the error but don't show technical error to user
53
- print(f"Error: Failed to update card status for card {card_number}")
54
- return []
@@ -1,277 +0,0 @@
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")
@@ -1,52 +0,0 @@
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)]
@@ -1,51 +0,0 @@
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 []