rasa-pro 3.14.0a16__py3-none-any.whl → 3.14.0a17__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 (293) hide show
  1. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +156 -105
  2. rasa/builder/copilot/telemetry.py +35 -19
  3. rasa/builder/jobs.py +15 -5
  4. rasa/builder/models.py +7 -7
  5. rasa/builder/project_generator.py +129 -22
  6. rasa/builder/service.py +34 -18
  7. rasa/cli/project_templates/basic/README.md +23 -0
  8. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  9. rasa/cli/project_templates/basic/config.yml +4 -4
  10. rasa/cli/project_templates/basic/data/data.md +5 -6
  11. rasa/cli/project_templates/basic/domain/domain.md +7 -5
  12. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +1 -1
  13. rasa/cli/project_templates/basic/endpoints.yml +1 -1
  14. rasa/cli/project_templates/finance/README.md +26 -0
  15. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  16. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  17. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  18. rasa/cli/project_templates/finance/actions/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
  19. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  20. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  21. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  22. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  23. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  24. rasa/cli/project_templates/finance/actions/db.py +117 -0
  25. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  26. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  27. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  28. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  29. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  30. rasa/cli/project_templates/finance/config.yml +6 -0
  31. rasa/cli/project_templates/finance/credentials.yml +7 -6
  32. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
  33. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  34. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  35. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  36. rasa/cli/project_templates/finance/data/cards/block_card.yml +37 -58
  37. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  38. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  39. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  40. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  41. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  42. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  43. rasa/cli/project_templates/finance/data/data.md +14 -0
  44. rasa/cli/project_templates/finance/data/general/agent_details.yml +6 -0
  45. rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
  46. rasa/cli/project_templates/finance/data/general/help.yml +2 -2
  47. rasa/cli/project_templates/finance/data/general/human_handoff.yml +1 -1
  48. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  49. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  50. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  51. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +29 -62
  52. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  53. rasa/cli/project_templates/finance/db/cards.json +18 -0
  54. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  55. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  56. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  57. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  58. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  59. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  60. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  61. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  62. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  63. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  64. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  65. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  66. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  67. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  68. rasa/cli/project_templates/finance/domain/_system/patterns/pattern_session_start.yml +11 -0
  69. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +9 -5
  70. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  71. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  72. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  73. rasa/cli/project_templates/finance/domain/cards/block_card.yml +33 -90
  74. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  75. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  76. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  77. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  78. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  79. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  80. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  81. rasa/cli/project_templates/finance/domain/general/_shared.yml +53 -0
  82. rasa/cli/project_templates/finance/domain/general/agent_details.yml +31 -0
  83. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -2
  84. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
  85. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +7 -3
  86. rasa/cli/project_templates/finance/domain/general/welcome.yml +5 -2
  87. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  88. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  89. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  90. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +203 -61
  91. rasa/cli/project_templates/finance/endpoints.yml +4 -3
  92. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
  93. rasa/cli/project_templates/telco/README.md +25 -0
  94. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  95. rasa/cli/project_templates/telco/config.yml +4 -4
  96. rasa/cli/project_templates/telco/data/data.md +11 -0
  97. rasa/cli/project_templates/telco/docs/docs.md +3 -0
  98. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  99. rasa/cli/project_templates/telco/endpoints.yml +1 -1
  100. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +1 -1
  101. rasa/core/brokers/broker.py +1 -1
  102. rasa/core/brokers/kafka.py +52 -8
  103. rasa/core/channels/inspector/dist/assets/{arc-460861ce.js → arc-35222594.js} +1 -1
  104. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-16c993e0.js → blockDiagram-38ab4fdb-a0efbfd3.js} +1 -1
  105. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-488337d7.js → c4Diagram-3d4e48cf-0584c0f2.js} +1 -1
  106. rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +1 -0
  107. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-b08e53a8.js → classDiagram-70f12bd4-39f40dbe.js} +1 -1
  108. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-b73f5a83.js → classDiagram-v2-f2320105-1ad755f3.js} +1 -1
  109. rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +1 -0
  110. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-0210a219.js → createText-2e5e7dd3-b0f4f0fe.js} +1 -1
  111. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-28df7099.js → edges-e0da2a9e-9039bff9.js} +1 -1
  112. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-9fbf4a58.js → erDiagram-9861fffd-65c9b127.js} +1 -1
  113. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fa691f62.js → flowDb-956e92f1-4f08b38e.js} +1 -1
  114. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-ca907b67.js → flowDiagram-66a62f08-e95c362a.js} +1 -1
  115. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +1 -0
  116. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-c10945f2.js → flowchart-elk-definition-4a651766-703c3015.js} +1 -1
  117. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-9d49a75a.js → ganttDiagram-c361ad54-699328ea.js} +1 -1
  118. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-9aa698ac.js → gitGraphDiagram-72cf32ee-04cf4b05.js} +1 -1
  119. rasa/core/channels/inspector/dist/assets/{graph-3ab38d50.js → graph-ee94449e.js} +1 -1
  120. rasa/core/channels/inspector/dist/assets/{index-3862675e-6edac98f.js → index-3862675e-940162b4.js} +1 -1
  121. rasa/core/channels/inspector/dist/assets/{index-61128091.js → index-c941dcb3.js} +3 -3
  122. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-21baff85.js → infoDiagram-f8f76790-c79c2866.js} +1 -1
  123. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-4a6c7e98.js → journeyDiagram-49397b02-84489d30.js} +1 -1
  124. rasa/core/channels/inspector/dist/assets/{layout-4beae36e.js → layout-a9aa9858.js} +1 -1
  125. rasa/core/channels/inspector/dist/assets/{line-633b638e.js → line-eb73cf26.js} +1 -1
  126. rasa/core/channels/inspector/dist/assets/{linear-22d77d65.js → linear-b3399f9a.js} +1 -1
  127. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f219ef43.js → mindmap-definition-fc14e90a-b095bf1a.js} +1 -1
  128. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-c7e1cafb.js → pieDiagram-8a3498a8-07644b66.js} +1 -1
  129. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-045e49b4.js → quadrantDiagram-120e2f19-573a3f9c.js} +1 -1
  130. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-22485cb9.js → requirementDiagram-deff3bca-d457e1e1.js} +1 -1
  131. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-281c3da2.js → sankeyDiagram-04a897e0-9d26e1a2.js} +1 -1
  132. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-a3dd10e0.js → sequenceDiagram-704730f1-3a9cde10.js} +1 -1
  133. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-61bd6eb2.js → stateDiagram-587899a1-4f3e8cec.js} +1 -1
  134. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-deead491.js → stateDiagram-v2-d93cdb3a-e617e5bf.js} +1 -1
  135. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-1b10e104.js → styles-6aaf32cf-eab30d2f.js} +1 -1
  136. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-b1e18e58.js → styles-9a916d00-09994be2.js} +1 -1
  137. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-956c3492.js → styles-c10674c1-b7110364.js} +1 -1
  138. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-e13f753d.js → svgDrawCommon-08f97a94-3ebc92ad.js} +1 -1
  139. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e568acd2.js → timeline-definition-85554ec2-7d13d2f2.js} +1 -1
  140. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-8b7e27fc.js → xychartDiagram-e933f94c-488385e1.js} +1 -1
  141. rasa/core/channels/inspector/dist/index.html +1 -1
  142. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  143. rasa/core/channels/studio_chat.py +7 -0
  144. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  145. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  146. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  147. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  148. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  149. rasa/core/channels/voice_stream/genesys.py +2 -1
  150. rasa/core/channels/voice_stream/jambonz.py +9 -1
  151. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  152. rasa/core/channels/voice_stream/voice_channel.py +61 -0
  153. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +76 -1
  154. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +1 -1
  155. rasa/core/lock_store.py +41 -7
  156. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  157. rasa/version.py +1 -1
  158. {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/METADATA +4 -3
  159. {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/RECORD +162 -224
  160. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  161. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  162. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  163. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  164. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  165. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  166. rasa/cli/project_templates/finance/actions/database.py +0 -277
  167. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  168. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  169. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  170. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  171. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  172. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  173. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  174. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  175. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  176. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  177. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  178. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  179. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  180. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  181. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  182. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  183. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  184. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  185. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  186. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  187. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  188. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  189. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  190. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  191. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  192. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  193. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  194. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  195. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  196. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  197. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  198. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  199. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  200. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  201. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  202. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  203. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  204. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  205. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  206. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  207. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  208. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  209. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  210. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  211. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  212. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  213. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  214. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  215. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  216. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  231. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  232. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  233. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  234. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  235. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  236. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  237. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  238. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  239. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  240. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  241. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  242. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  243. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  244. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  245. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  246. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  247. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  248. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  249. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  250. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  251. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  252. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  253. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  254. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  255. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  256. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  257. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  258. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  259. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  260. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  261. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  262. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  263. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  264. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  265. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  266. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  267. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  268. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  269. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  270. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  271. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  272. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  273. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  274. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  275. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  276. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  277. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  278. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  279. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
  280. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  281. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  282. rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
  283. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  284. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  285. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  286. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  287. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  288. rasa/core/channels/inspector/dist/assets/channel-b560a3d4.js +0 -1
  289. rasa/core/channels/inspector/dist/assets/clone-67015557.js +0 -1
  290. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-4a070961.js +0 -1
  291. {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/NOTICE +0 -0
  292. {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/WHEEL +0 -0
  293. {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/entry_points.txt +0 -0
rasa/builder/service.py CHANGED
@@ -54,8 +54,8 @@ from rasa.builder.guardrails.utils import (
54
54
  from rasa.builder.job_manager import job_manager
55
55
  from rasa.builder.jobs import (
56
56
  run_prompt_to_bot_job,
57
+ run_replace_all_files_job,
57
58
  run_template_to_bot_job,
58
- run_update_files_job,
59
59
  )
60
60
  from rasa.builder.llm_service import llm_service
61
61
  from rasa.builder.logging_utils import (
@@ -512,26 +512,31 @@ async def get_bot_files(request: Request) -> HTTPResponse:
512
512
  )
513
513
 
514
514
 
515
- @bp.route("/files", methods=["PUT"])
516
- @openapi.summary("Update bot files")
515
+ @bp.route("/files", methods=["POST"])
516
+ @openapi.summary("Replace all bot files")
517
517
  @openapi.description(
518
- "Updates the bot configuration files and retrains the model. "
519
- "Returns immediately with a job ID. Connect to `/job-events/<job_id>` "
520
- "for real-time SSE progress tracking."
518
+ "Replaces all bot configuration files with the provided files, deletes any "
519
+ "files not included in the request (excluding .rasa/ and models/ directories), "
520
+ "and retrains the model. Returns immediately with a job ID. Connect to "
521
+ "`/job-events/<job_id>` for real-time SSE progress tracking."
521
522
  "\n\n"
523
+ "**File Management:**\n"
524
+ "- All files in the request are written to the project folder\n"
525
+ "- Files not included in the request are deleted from the project\n"
526
+ "- Files/folders starting with `.rasa/` or `models/` are excluded from deletion\n\n"
522
527
  "**SSE Event Flow:** (available via /job-events/<job_id>)\n"
523
528
  "1. `received` - Request received by server\n"
524
529
  "2. `validating` - Validating bot configuration files\n"
525
530
  "3. `validation_success` - File validation completed successfully\n"
526
531
  "4. `training` - Training the bot model with updated files\n"
527
532
  "5. `train_success` - Model training completed\n"
528
- "6. `done` - Bot files update completed\n\n"
533
+ "6. `done` - Bot files replacement completed\n\n"
529
534
  "**Error Events (can occur at any time):**\n"
530
535
  "- `validation_error` - Bot configuration files are invalid\n"
531
536
  "- `train_error` - Files updated but training failed\n"
532
537
  "- `error` - Unexpected error occurred\n\n"
533
538
  "**Usage:**\n"
534
- "1. Send PUT request with Content-Type: application/json\n"
539
+ "1. Send POST request with Content-Type: application/json\n"
535
540
  "2. The response will be a JSON object `{job_id: ...}`\n"
536
541
  "3. Connect to `/job-events/<job_id>` for a server-sent event stream of progress."
537
542
  )
@@ -539,9 +544,11 @@ async def get_bot_files(request: Request) -> HTTPResponse:
539
544
  @openapi.body(
540
545
  {"application/json": {str: Optional[str]}},
541
546
  description=(
542
- "A dictionary mapping file names to their updated content. "
543
- "The file name should be the name of the file in the project folder. "
544
- "Files that are not in the request will not be updated."
547
+ "A dictionary mapping file names to their complete content. "
548
+ "All files in the project will be replaced with these files. "
549
+ "Files not included in the request will be deleted from the project "
550
+ "(except for .rasa/ and models/ directories). "
551
+ "The file name should be the relative path from the project root."
545
552
  ),
546
553
  required=True,
547
554
  example={
@@ -558,6 +565,10 @@ async def get_bot_files(request: Request) -> HTTPResponse:
558
565
  " - name: CountVectorsFeaturizer\n"
559
566
  "policies:\n - name: MemoizationPolicy\n - name: RulePolicy"
560
567
  ),
568
+ "data/nlu.yml": (
569
+ "version: '3.1'\n"
570
+ "nlu:\n- intent: greet\n examples: |\n - hello\n - hi"
571
+ ),
561
572
  },
562
573
  )
563
574
  @openapi.response(
@@ -565,7 +576,7 @@ async def get_bot_files(request: Request) -> HTTPResponse:
565
576
  {"application/json": model_to_schema(JobCreateResponse)},
566
577
  description=(
567
578
  "Job created. Poll or subscribe to /job-events/<job_id> "
568
- "for progress and SSE updates."
579
+ "for progress and SSE updates on file replacement and training."
569
580
  ),
570
581
  )
571
582
  @openapi.response(
@@ -607,8 +618,8 @@ async def get_bot_files(request: Request) -> HTTPResponse:
607
618
  schema=str,
608
619
  )
609
620
  @protected()
610
- async def update_bot_files(request: Request) -> HTTPResponse:
611
- """Update bot files with server-sent events for progress tracking."""
621
+ async def replace_all_bot_files(request: Request) -> HTTPResponse:
622
+ """Replace all bot files with server-sent events for progress tracking."""
612
623
  try:
613
624
  bot_files = request.json
614
625
  except Exception as exc:
@@ -621,17 +632,17 @@ async def update_bot_files(request: Request) -> HTTPResponse:
621
632
 
622
633
  try:
623
634
  job = job_manager.create_job()
624
- request.app.add_task(run_update_files_job(request.app, job, bot_files))
635
+ request.app.add_task(run_replace_all_files_job(request.app, job, bot_files))
625
636
  return response.json(JobCreateResponse(job_id=job.id).model_dump(), status=200)
626
637
  except Exception as exc:
627
638
  capture_exception_with_context(
628
639
  exc,
629
- "bot_builder_service.update_bot_files.unexpected_error",
630
- tags={"endpoint": "/api/files", "method": "PUT"},
640
+ "bot_builder_service.replace_all_bot_files.unexpected_error",
641
+ tags={"endpoint": "/api/files", "method": "POST"},
631
642
  )
632
643
  return response.json(
633
644
  ApiErrorResponse(
634
- error="Failed to update bot files", details={"error": str(exc)}
645
+ error="Failed to replace bot files", details={"error": str(exc)}
635
646
  ).model_dump(),
636
647
  status=HTTPStatus.INTERNAL_SERVER_ERROR,
637
648
  )
@@ -1144,6 +1155,11 @@ async def copilot(request: Request) -> None:
1144
1155
  latency_ms=int((time.perf_counter() - start_timestamp) * 1000),
1145
1156
  system_message=generation_context.system_message,
1146
1157
  chat_history=generation_context.chat_history,
1158
+ last_user_message=(
1159
+ req.last_message.get_text_content()
1160
+ if (req.last_message and req.last_message.role == ROLE_USER)
1161
+ else None
1162
+ ),
1147
1163
  **copilot_client.usage_statistics.model_dump(),
1148
1164
  )
1149
1165
  )
@@ -0,0 +1,23 @@
1
+ # Basic Rasa Template
2
+
3
+ A simple, general-purpose conversational agent template that provides essential conversational capabilities.
4
+
5
+ ## 🚀 What's Included
6
+
7
+ This template provides a foundation for building conversational agents with:
8
+ - **Basic conversational flows**: Greetings, help, feedback, and human handoff
9
+ - **Help system**: Users can ask for assistance and get guided responses
10
+ - **Feedback collection**: Gather user feedback to improve the agent
11
+ - **Human handoff**: Seamlessly transfer conversations to human agents when needed
12
+
13
+ ## 📁 Directory Structure
14
+
15
+ ```
16
+ ├── actions/ # Custom Python logic for agent actions
17
+ ├── data/ # Conversational flows and training data
18
+ ├── domain/ # Agent configuration (slots, responses, actions)
19
+ ├── docs/ # Knowledge base documents (optional)
20
+ ├── prompts/ # LLM prompts for enhanced responses
21
+ └── config.yml # Training pipeline configuration
22
+ ```
23
+
@@ -0,0 +1,10 @@
1
+ ## 📂 `actions/` – The Agent's Toolkit
2
+
3
+ This folder contains Python files that define custom actions your agent can perform. Actions are pieces of code that run when your agent needs to do something beyond just responding with text.
4
+
5
+ **What you'll find:**
6
+ - `action_human_handoff.py`: Handles transferring the conversation to a human agent when needed.
7
+
8
+ **Edit Python files in this folder** to add new custom logic, integrate with APIs, or perform calculations and data processing.
9
+
10
+ Learn more about custom actions in the [Rasa documentation](https://rasa.com/docs/pro/build/custom-actions).
@@ -1,11 +1,11 @@
1
- # Rasa Assistant Configuration
2
- # This file controls your assistant's language, message processing pipeline, and conversation policies.
1
+ # Rasa Agent Configuration
2
+ # This file controls your agent's language, message processing pipeline, and conversation policies.
3
3
  # For full documentation, see: https://rasa.com/docs/pro/build/configuring-assistant
4
4
  recipe: default.v1
5
5
  language: en
6
6
 
7
- # The assistant project unique identifier
8
- # This default value must be replaced with a unique assistant name within your deployment
7
+ # The agent project unique identifier
8
+ # This default value must be replaced with a unique agent name within your deployment
9
9
  assistant_id: placeholder_default
10
10
 
11
11
  pipeline:
@@ -1,9 +1,8 @@
1
- ## 📂 `data/` – The agent's Business Logic
1
+ ## 📂 `data/` – The Agent's Business Logic
2
2
 
3
- This folder holds files that define your agent’s skills using "flows". Each flow is a step-by-step conversation pattern (like a recipe) for handling a user goal (e.g., checking a balance, updating an address).
3
+ This folder holds files that define your agent’s skills using "flows". [1](https://rasa.com/docs/pro/build/writing-flows) Each flow is a step-by-step conversation pattern (like a recipe) for handling a user goal (e.g., checking a balance, updating an address).
4
4
 
5
- **What youll find:**
6
- - Each YAML file = one or more skills.
7
- - Flows are made of steps: collecting info, calling actions, and responding.
5
+ **What you'll find:**
6
+ - **general/**: Basic conversational flows (greetings, help, feedback, human handoff)
8
7
 
9
- **Edit txt files in this folder** to add new skills, change existing flows, or adjust what the agent asks.
8
+ **Edit YAML files in this folder** to add new skills, change existing flows, or adjust what the agent asks.
@@ -1,9 +1,11 @@
1
- ## 📂 `domain/` – The agent’s Brain
1
+ ## 📂 `domain/` – The Agent's Brain
2
2
 
3
- This folder contains YAML files that define the agents:
4
- - **Slots**: The agents memory (e.g., user's name, account number, address).
5
- - **Responses**: The messages your bot can say to users (e.g., greetings, confirmations).
6
- - **Actions**: Custom logic your agent can run (e.g., checking a balance).
3
+ This folder contains YAML files that define the agent's:
4
+ - **Slots**: The agent's memory (e.g., user's name, session info) [1](https://rasa.com/docs/reference/primitives/slots/).
5
+ - **Responses**: The messages your agent can say to users (e.g., greetings, confirmations) [2](https://rasa.com/docs/reference/primitives/responses).
6
+ - **Actions**: Custom logic your agent can run (e.g., handling feedback, human handoff) [3](https://rasa.com/docs/reference/primitives/custom-actions).
7
7
 
8
+ **What you'll find:**
9
+ - **general/**: Basic conversational domain elements (greetings, help, feedback)
8
10
 
9
11
  You can organize the domain as one big file or many small ones. Rasa will automatically merge everything during training [1](https://rasa.com/docs/reference/config/domain).
@@ -3,7 +3,7 @@ version: "3.1"
3
3
  responses:
4
4
  utter_top_faqs:
5
5
  - text: |
6
- Try out some of these questions to trigger agent search:
6
+ Try out some of these questions you can use to get me to search your knowledge base:
7
7
 
8
8
  - 🤖 What is Rasa?
9
9
  - 💬 What is CALM?
@@ -60,7 +60,7 @@ model_groups:
60
60
  - provider: openai
61
61
  model: gpt-4o-2024-11-20
62
62
  timeout: 7
63
- max_tokens: 256
63
+ max_completion_tokens: 256
64
64
  - id: openai-embeddings
65
65
  models:
66
66
  - provider: openai
@@ -0,0 +1,26 @@
1
+ # Finance Banking Agent Template
2
+
3
+ A lightweight banking conversational agent template for the fictional **Fenlo Bank** that handles account management, card services, and money transfers.
4
+
5
+ ## 🚀 What's Included
6
+
7
+ This template provides a banking assistant with:
8
+ - **Account Management**: Balance checking and statement downloads
9
+ - **Card Services**: Card activation, blocking, replacement, and listing
10
+ - **Money Transfers**: Account-to-account transfers and third-party payments
11
+ - **Contact Management**: Add, list, and remove trusted contacts
12
+ - **Bill Management**: Bill payment reminders and scheduling
13
+ - **Banking Knowledge**: FAQ system with Fenlo Bank documentation
14
+
15
+ ## 📁 Directory Structure
16
+
17
+ ```
18
+ ├── actions/ # Custom Python logic for banking operations
19
+ ├── data/ # Banking conversation flows and training data
20
+ ├── domain/ # Banking agent configuration
21
+ ├── db/ # Mock JSON database for testing
22
+ ├── docs/ # Fenlo Bank knowledge base and FAQ documents
23
+ ├── prompts/ # LLM prompts for enhanced banking responses
24
+ └── config.yml # Training pipeline configuration
25
+ ```
26
+
@@ -1,46 +0,0 @@
1
- # Account actions
2
- from actions.accounts.action_ask_account import ActionAskAccount
3
- from actions.accounts.action_check_balance import ActionCheckBalance
4
-
5
- # General actions
6
- from actions.action_session_start import ActionSessionStart
7
-
8
- # Card actions
9
- from actions.cards.action_ask_card import ActionAskCard
10
- from actions.cards.action_check_card_existence import ActionCheckCardExistence
11
- from actions.cards.action_update_card_status import ActionUpdateCardStatus
12
-
13
- # Transfer actions
14
- from actions.transfers.action_add_payee import ActionAddPayee
15
- from actions.transfers.action_ask_account_from import ActionAskAccountFrom
16
- from actions.transfers.action_check_payee_existence import ActionCheckPayeeExistence
17
- from actions.transfers.action_check_sufficient_funds import ActionCheckSufficientFunds
18
- from actions.transfers.action_list_payees import ActionListPayees
19
- from actions.transfers.action_process_immediate_payment import (
20
- ActionProcessImmediatePayment,
21
- )
22
- from actions.transfers.action_remove_payee import ActionRemovePayee
23
- from actions.transfers.action_schedule_payment import ActionSchedulePayment
24
- from actions.transfers.action_validate_payment_date import ActionValidatePaymentDate
25
-
26
- __all__ = [
27
- # General actions
28
- "ActionSessionStart",
29
- # Account actions
30
- "ActionAskAccount",
31
- "ActionCheckBalance",
32
- # Card actions
33
- "ActionAskCard",
34
- "ActionCheckCardExistence",
35
- "ActionUpdateCardStatus",
36
- # Transfer actions
37
- "ActionAddPayee",
38
- "ActionAskAccountFrom",
39
- "ActionCheckPayeeExistence",
40
- "ActionCheckSufficientFunds",
41
- "ActionListPayees",
42
- "ActionProcessImmediatePayment",
43
- "ActionRemovePayee",
44
- "ActionSchedulePayment",
45
- "ActionValidatePaymentDate",
46
- ]
@@ -0,0 +1,18 @@
1
+ from typing import Any, Dict, List
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.db import get_account
8
+
9
+
10
+ class CheckBalance(Action):
11
+ def name(self) -> str:
12
+ return "check_balance"
13
+
14
+ def run(
15
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
16
+ ) -> List[Dict[str, Any]]:
17
+ account = get_account(tracker.sender_id)
18
+ return [SlotSet("current_balance", account.funds)]
@@ -0,0 +1,15 @@
1
+ ## 📂 `actions/` – The Agent's Toolkit
2
+
3
+ This folder contains Python files that define custom banking actions your agent can perform. Actions handle complex banking operations, database interactions, and business logic validation.
4
+
5
+ **What you'll find:**
6
+ - **accounts/**: Account-related actions (balance checking, account validation)
7
+ - **cards/**: Card management actions (card existence checks, status updates)
8
+ - **transfers/**: Payment and transfer actions (payee management, fund transfers, scheduling)
9
+ - **contacts/**: Contact and advisor management
10
+ - `database.py`: Core database interactions with banking data
11
+ - `action_session_start.py`: Session initialization for banking context
12
+
13
+ **Edit Python files in this folder** to add new banking features, modify business rules, or integrate with external banking APIs and systems.
14
+
15
+ Learn more about custom actions in the [Rasa documentation](https://rasa.com/docs/pro/build/custom-actions).
@@ -5,9 +5,9 @@ from rasa_sdk.events import SlotSet
5
5
  from rasa_sdk.executor import CollectingDispatcher
6
6
 
7
7
 
8
- class ActionProcessImmediatePayment(Action):
8
+ class ActionCheckThatCardExists(Action):
9
9
  def name(self) -> Text:
10
- return "action_process_immediate_payment"
10
+ return "check_that_card_exists"
11
11
 
12
12
  def run(
13
13
  self,
@@ -15,4 +15,7 @@ class ActionProcessImmediatePayment(Action):
15
15
  tracker: Tracker,
16
16
  domain: Dict[Text, Any],
17
17
  ) -> List[Dict[Text, Any]]:
18
- return [SlotSet("payment_processed", True)]
18
+ # For example purposes, we assume the card exists; in a real situation,
19
+ # fetch this info from a database or service.
20
+ # card_number = tracker.get_slot("bank_card_number")
21
+ return [SlotSet("return_value", True)]
@@ -0,0 +1,22 @@
1
+ from typing import Any, Dict, List
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.db import get_cards
8
+
9
+
10
+ class ListCards(Action):
11
+ def name(self) -> str:
12
+ return "list_cards"
13
+
14
+ def run(
15
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
16
+ ) -> List[Dict[str, Any]]:
17
+ cards = get_cards(tracker.sender_id)
18
+ if len(cards) > 0:
19
+ cards_list = "".join([f"- {c.name} ({c.handle}) \n" for c in cards])
20
+ return [SlotSet("cards_list", cards_list)]
21
+ else:
22
+ return [SlotSet("cards_list", None)]
@@ -0,0 +1,30 @@
1
+ from typing import Any, Dict, List
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.db import Contact, add_contact, get_contacts
8
+
9
+
10
+ class AddContact(Action):
11
+ def name(self) -> str:
12
+ return "add_contact"
13
+
14
+ def run(
15
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
16
+ ) -> List[Dict[str, Any]]:
17
+ contacts = get_contacts(tracker.sender_id)
18
+ name = tracker.get_slot("add_contact_name")
19
+ handle = tracker.get_slot("add_contact_handle")
20
+
21
+ if name is None or handle is None:
22
+ return [SlotSet("return_value", "data_not_present")]
23
+
24
+ existing_handles = {c.handle for c in contacts}
25
+ if handle in existing_handles:
26
+ return [SlotSet("return_value", "already_exists")]
27
+
28
+ new_contact = Contact(name=name, handle=handle)
29
+ add_contact(tracker.sender_id, new_contact)
30
+ return [SlotSet("return_value", "success")]
@@ -0,0 +1,22 @@
1
+ from typing import Any, Dict, List
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.db import get_contacts
8
+
9
+
10
+ class ListContacts(Action):
11
+ def name(self) -> str:
12
+ return "list_contacts"
13
+
14
+ def run(
15
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
16
+ ) -> List[Dict[str, Any]]:
17
+ contacts = get_contacts(tracker.sender_id)
18
+ if len(contacts) > 0:
19
+ contacts_list = "".join([f"- {c.name} ({c.handle}) \n" for c in contacts])
20
+ return [SlotSet("contacts_list", contacts_list)]
21
+ else:
22
+ return [SlotSet("contacts_list", None)]
@@ -0,0 +1,35 @@
1
+ from typing import Any, Dict, List
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.db import get_contacts, write_contacts
8
+
9
+
10
+ class RemoveContact(Action):
11
+ def name(self) -> str:
12
+ return "remove_contact"
13
+
14
+ def run(
15
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
16
+ ) -> List[Dict[str, Any]]:
17
+ contacts = get_contacts(tracker.sender_id)
18
+ handle = tracker.get_slot("remove_contact_handle")
19
+
20
+ if handle is not None:
21
+ contact_indices_with_handle = [
22
+ i for i, c in enumerate(contacts) if c.handle == handle
23
+ ]
24
+ if len(contact_indices_with_handle) == 0:
25
+ return [SlotSet("return_value", "not_found")]
26
+ else:
27
+ removed_contact = contacts.pop(contact_indices_with_handle[0])
28
+ write_contacts(tracker.sender_id, contacts)
29
+ return [
30
+ SlotSet("return_value", "success"),
31
+ SlotSet("remove_contact_name", removed_contact.name),
32
+ ]
33
+
34
+ else:
35
+ return [SlotSet("return_value", "missing_handle")]
@@ -0,0 +1,117 @@
1
+ import os
2
+ import shutil
3
+ import tempfile
4
+ from typing import Any, List
5
+
6
+ from pydantic import BaseModel
7
+
8
+ from rasa.nlu.utils import write_json_to_file
9
+ from rasa.shared.utils.io import read_json_file
10
+
11
+ ORIGIN_DB_PATH = "db"
12
+ CONTACTS = "contacts.json"
13
+ TRANSACTIONS = "transactions.json"
14
+ MY_ACCOUNT = "my_account.json"
15
+ CARDS = "cards.json"
16
+
17
+
18
+ class MyAccount(BaseModel):
19
+ account: str
20
+ funds: int
21
+ daily_limit: int
22
+ monthly_limit: int
23
+
24
+
25
+ class Transaction(BaseModel):
26
+ datetime: str
27
+ recipient: str
28
+ sender: str
29
+ amount: str
30
+ description: str
31
+
32
+ def stringify(self) -> str:
33
+ from datetime import datetime
34
+
35
+ parsed_date = datetime.strptime(self.datetime, "%Y-%m-%dT%H:%M:%S.%f")
36
+ formatted_date = parsed_date.strftime("%Y-%m-%d %H:%M:%S")
37
+
38
+ return (
39
+ f"- {self.amount} from {self.sender} to "
40
+ f"{self.recipient}: {self.description} ({formatted_date})"
41
+ )
42
+
43
+
44
+ class Contact(BaseModel):
45
+ name: str
46
+ handle: str
47
+
48
+
49
+ class Card(BaseModel):
50
+ name: str
51
+ number: str
52
+ expiration_date: str
53
+ cvv: str
54
+ handle: str
55
+ status: str
56
+
57
+
58
+ def get_session_db_path(session_id: str) -> str:
59
+ tempdir = tempfile.gettempdir()
60
+ project_name = "rasa-calm-demo"
61
+ return os.path.join(tempdir, project_name, session_id)
62
+
63
+
64
+ def prepare_db_file(session_id: str, db: str) -> str:
65
+ session_db_path = get_session_db_path(session_id)
66
+ os.makedirs(session_db_path, exist_ok=True)
67
+ destination_file = os.path.join(session_db_path, db)
68
+ if not os.path.exists(destination_file):
69
+ origin_file = os.path.join(ORIGIN_DB_PATH, db)
70
+ shutil.copy(origin_file, destination_file)
71
+ return destination_file
72
+
73
+
74
+ def read_db(session_id: str, db: str) -> Any:
75
+ db_file = prepare_db_file(session_id, db)
76
+ return read_json_file(db_file)
77
+
78
+
79
+ def write_db(session_id: str, db: str, data: Any) -> None:
80
+ db_file = prepare_db_file(session_id, db)
81
+ write_json_to_file(db_file, data)
82
+
83
+
84
+ def get_contacts(session_id: str) -> List[Contact]:
85
+ return [Contact(**item) for item in read_db(session_id, CONTACTS)]
86
+
87
+
88
+ def get_cards(session_id: str) -> List[Card]:
89
+ return [Card(**item) for item in read_db(session_id, CARDS)]
90
+
91
+
92
+ def get_transactions(session_id: str) -> List[Transaction]:
93
+ return [Transaction(**item) for item in read_db(session_id, TRANSACTIONS)]
94
+
95
+
96
+ def get_account(session_id: str) -> MyAccount:
97
+ return MyAccount(**read_db(session_id, MY_ACCOUNT))
98
+
99
+
100
+ def write_account(session_id: str, account: MyAccount) -> None:
101
+ write_db(session_id, MY_ACCOUNT, account.dict())
102
+
103
+
104
+ def add_contact(session_id: str, contact: Contact) -> None:
105
+ contacts = get_contacts(session_id)
106
+ contacts.append(contact)
107
+ write_db(session_id, CONTACTS, [c.dict() for c in contacts])
108
+
109
+
110
+ def add_transaction(session_id: str, transaction: Transaction) -> None:
111
+ transactions = get_transactions(session_id)
112
+ transactions.append(transaction)
113
+ write_db(session_id, TRANSACTIONS, [t.dict() for t in transactions])
114
+
115
+
116
+ def write_contacts(session_id: str, contacts: List[Contact]) -> None:
117
+ write_db(session_id, CONTACTS, [c.dict() for c in contacts])
@@ -0,0 +1,27 @@
1
+ import re
2
+ from typing import Any, Dict, List
3
+
4
+ from rasa_sdk import Action, Tracker
5
+ from rasa_sdk.events import SlotSet
6
+ from rasa_sdk.executor import CollectingDispatcher
7
+
8
+ from actions.db import get_account
9
+
10
+
11
+ class CheckTransferFunds(Action):
12
+ def name(self) -> str:
13
+ return "check_transfer_funds"
14
+
15
+ def run(
16
+ self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
17
+ ) -> List[Dict[str, Any]]:
18
+ account = get_account(tracker.sender_id)
19
+ amount_of_money = tracker.get_slot("amount_of_money")
20
+ if not amount_of_money:
21
+ has_sufficient_funds = False
22
+ else:
23
+ if isinstance(amount_of_money, str):
24
+ # Remove any non-numeric characters (except for the decimal point)
25
+ amount_of_money = float(re.sub(r"[^0-9.]", "", amount_of_money))
26
+ has_sufficient_funds = account.funds >= amount_of_money
27
+ return [SlotSet("has_sufficient_funds", has_sufficient_funds)]