rasa-pro 3.14.0.dev10__py3-none-any.whl → 3.14.0.dev11__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 (291) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/agent_manager.py +50 -2
  3. rasa/agents/constants.py +3 -0
  4. rasa/agents/core/types.py +11 -0
  5. rasa/agents/protocol/a2a/a2a_agent.py +45 -5
  6. rasa/agents/protocol/mcp/mcp_base_agent.py +14 -5
  7. rasa/agents/protocol/mcp/mcp_open_agent.py +27 -13
  8. rasa/agents/protocol/mcp/mcp_task_agent.py +42 -31
  9. rasa/agents/schemas/agent_tool_result.py +0 -2
  10. rasa/agents/schemas/agent_tool_schema.py +55 -3
  11. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +6 -6
  12. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +5 -5
  13. rasa/agents/utils.py +42 -3
  14. rasa/builder/copilot/telemetry.py +35 -19
  15. rasa/builder/main.py +5 -14
  16. rasa/builder/project_generator.py +1 -1
  17. rasa/builder/service.py +5 -0
  18. rasa/builder/template_cache.py +9 -184
  19. rasa/cli/project_templates/basic/data/data.md +5 -6
  20. rasa/cli/project_templates/basic/domain/domain.md +5 -2
  21. rasa/cli/project_templates/finance/README.md +8 -7
  22. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  23. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  24. rasa/cli/project_templates/finance/actions/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
  25. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  26. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  27. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  28. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  29. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  30. rasa/cli/project_templates/finance/actions/db.py +117 -0
  31. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  32. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  33. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  34. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  35. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  36. rasa/cli/project_templates/finance/config.yml +6 -0
  37. rasa/cli/project_templates/finance/credentials.yml +7 -6
  38. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
  39. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  40. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  41. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  42. rasa/cli/project_templates/finance/data/cards/block_card.yml +37 -58
  43. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  44. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  45. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  46. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  47. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  48. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  49. rasa/cli/project_templates/finance/data/data.md +6 -3
  50. rasa/cli/project_templates/finance/data/general/agent_details.yml +6 -0
  51. rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
  52. rasa/cli/project_templates/finance/data/general/human_handoff.yml +1 -1
  53. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  54. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  55. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  56. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +29 -62
  57. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  58. rasa/cli/project_templates/finance/db/cards.json +18 -0
  59. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  60. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  61. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  62. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  63. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  64. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  65. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  66. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  67. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  68. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  69. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  70. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  71. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  72. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  73. rasa/cli/project_templates/finance/domain/_system/patterns/pattern_session_start.yml +11 -0
  74. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +9 -5
  75. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  76. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  77. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  78. rasa/cli/project_templates/finance/domain/cards/block_card.yml +33 -90
  79. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  80. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  81. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  82. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  83. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  84. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  85. rasa/cli/project_templates/finance/domain/domain.md +9 -1
  86. rasa/cli/project_templates/finance/domain/general/_shared.yml +53 -0
  87. rasa/cli/project_templates/finance/domain/general/agent_details.yml +19 -0
  88. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -2
  89. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
  90. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +7 -3
  91. rasa/cli/project_templates/finance/domain/general/welcome.yml +5 -2
  92. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  93. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  94. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  95. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +203 -61
  96. rasa/cli/project_templates/finance/endpoints.yml +3 -2
  97. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
  98. rasa/cli/project_templates/telco/data/data.md +1 -1
  99. rasa/cli/project_templates/telco/docs/docs.md +3 -0
  100. rasa/cli/project_templates/telco/domain/domain.md +1 -2
  101. rasa/constants.py +1 -1
  102. rasa/core/actions/direct_custom_actions_executor.py +9 -2
  103. rasa/core/agent.py +2 -3
  104. rasa/core/available_agents.py +1 -1
  105. rasa/core/brokers/broker.py +1 -1
  106. rasa/core/brokers/kafka.py +52 -8
  107. rasa/core/channels/__init__.py +82 -35
  108. rasa/core/channels/inspector/README.md +1 -1
  109. rasa/core/channels/telegram.py +4 -9
  110. rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
  111. rasa/core/concurrent_lock_store.py +66 -16
  112. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +76 -1
  113. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +1 -1
  114. rasa/core/lock_store.py +41 -7
  115. rasa/core/policies/flows/agent_executor.py +632 -0
  116. rasa/core/policies/flows/flow_executor.py +3 -417
  117. rasa/core/policies/flows/mcp_tool_executor.py +32 -12
  118. rasa/core/processor.py +49 -28
  119. rasa/core/run.py +22 -0
  120. rasa/dialogue_understanding/commands/cancel_flow_command.py +1 -1
  121. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +11 -3
  122. rasa/dialogue_understanding/commands/clarify_command.py +11 -3
  123. rasa/dialogue_understanding/commands/knowledge_answer_command.py +11 -3
  124. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +3 -3
  125. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +3 -3
  126. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +3 -3
  127. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +3 -3
  128. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -0
  129. rasa/dialogue_understanding/processor/command_processor.py +70 -0
  130. rasa/dialogue_understanding/stack/dialogue_stack.py +0 -25
  131. rasa/engine/loader.py +12 -0
  132. rasa/engine/recipes/default_components.py +111 -82
  133. rasa/engine/recipes/default_recipe.py +79 -22
  134. rasa/engine/runner/dask.py +8 -5
  135. rasa/graph_components/validators/default_recipe_validator.py +59 -19
  136. rasa/model_manager/warm_rasa_process.py +13 -3
  137. rasa/model_training.py +0 -14
  138. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -22
  139. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  140. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  141. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  142. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  143. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  144. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  145. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  146. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  147. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  148. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  149. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  150. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  151. rasa/nlu/utils/mitie_utils.py +3 -0
  152. rasa/nlu/utils/spacy_utils.py +3 -2
  153. rasa/telemetry.py +63 -0
  154. rasa/utils/log_utils.py +95 -4
  155. rasa/utils/tensorflow/__init__.py +0 -22
  156. rasa/utils/tensorflow/callback.py +17 -7
  157. rasa/utils/tensorflow/layers.py +10 -7
  158. rasa/utils/tensorflow/rasa_layers.py +1 -1
  159. rasa/version.py +1 -1
  160. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev11.dist-info}/METADATA +99 -89
  161. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev11.dist-info}/RECORD +164 -235
  162. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  163. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  164. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  165. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  166. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  167. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  168. rasa/cli/project_templates/finance/actions/database.py +0 -277
  169. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  170. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  171. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  172. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  173. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  174. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  175. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  176. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  177. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  178. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  179. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  180. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  181. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  182. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  183. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  184. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  185. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  186. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  187. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  188. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  189. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  190. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  191. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  192. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  193. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  194. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  195. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  196. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  197. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  198. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  199. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  200. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  201. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  202. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  203. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  204. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  205. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  206. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  207. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  208. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  209. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  210. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  211. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  212. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  213. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  214. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  215. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  216. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  217. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  218. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  231. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  232. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  233. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  234. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  235. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  236. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  237. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  238. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  239. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  240. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  241. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  242. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  243. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  244. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  245. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  246. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  247. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  248. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  249. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  250. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  251. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  252. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  253. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  254. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  255. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  256. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  257. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  258. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  259. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  260. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  261. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  262. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  263. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  264. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  265. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  266. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  267. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  268. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  269. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  270. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  271. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  272. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  273. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  274. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  275. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  276. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  277. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  278. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  279. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  280. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  281. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  282. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  283. rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
  284. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  285. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  286. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  287. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  288. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  289. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev11.dist-info}/NOTICE +0 -0
  290. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev11.dist-info}/WHEEL +0 -0
  291. {rasa_pro-3.14.0.dev10.dist-info → rasa_pro-3.14.0.dev11.dist-info}/entry_points.txt +0 -0
@@ -1,10 +1,5 @@
1
1
  You are a helpful assistant that should assist the user in the best possible way.
2
2
 
3
- ### Context
4
- - Current date: {{ current_date }} (YYYY-MM-DD)
5
- - Current time: {{ current_time }} (HH:MM:SS, 24-hour format)
6
- - Current day: {{ current_day }} (Day of week)
7
-
8
3
  ### Description of your capabilities
9
4
  {{ description }}
10
5
 
@@ -18,5 +13,10 @@ You are a helpful assistant that should assist the user in the best possible way
18
13
  * Always avoid making assumptions about what values to pass into tools. Ask for clarification if a user's request is ambiguous.
19
14
  * Strictly avoid making up information or ability to take some action which is not available in `tool` provided.
20
15
 
16
+ ### Context
17
+ - Current date: {{ current_date }} (YYYY-MM-DD)
18
+ - Current time: {{ current_time }} (HH:MM:SS, 24-hour format)
19
+ - Current day: {{ current_day }} (Day of week)
20
+
21
21
  ### Conversation history
22
22
  {{ conversation_history }}
rasa/agents/utils.py CHANGED
@@ -1,5 +1,7 @@
1
1
  from typing import Dict, List, Optional
2
2
 
3
+ import structlog
4
+
3
5
  from rasa.agents.agent_manager import AgentManager
4
6
  from rasa.agents.exceptions import AgentNotFoundException
5
7
  from rasa.agents.validation import validate_agent_names_not_conflicting_with_flows
@@ -10,12 +12,13 @@ from rasa.core.available_agents import (
10
12
  )
11
13
  from rasa.core.available_endpoints import AvailableEndpoints
12
14
  from rasa.shared.agents.utils import get_protocol_type
13
- from rasa.shared.core.domain import Domain
14
- from rasa.shared.core.events import AgentCompleted
15
+ from rasa.shared.core.events import AgentCompleted, AgentStarted
15
16
  from rasa.shared.core.flows import FlowsList
16
17
  from rasa.shared.core.flows.steps import CallFlowStep
17
18
  from rasa.shared.core.trackers import DialogueStateTracker
18
19
 
20
+ structlogger = structlog.get_logger()
21
+
19
22
 
20
23
  def resolve_agent_config(
21
24
  agent_config: AgentConfig,
@@ -43,13 +46,15 @@ def resolve_agent_config(
43
46
 
44
47
  async def initialize_agents(
45
48
  flows: FlowsList,
46
- domain: Domain,
47
49
  sub_agents: AvailableAgents,
48
50
  ) -> None:
49
51
  """Iterate over flows and create/connect the referenced agents."""
50
52
  agent_manager: AgentManager = AgentManager()
51
53
  endpoints = AvailableEndpoints.get_instance()
52
54
 
55
+ agent_used = False
56
+ mcp_tool_used = False
57
+
53
58
  # Validate agent names don't conflict with flow names
54
59
  flow_names = {flow.id for flow in flows.underlying_flows}
55
60
  validate_agent_names_not_conflicting_with_flows(sub_agents.agents, flow_names)
@@ -63,11 +68,14 @@ async def initialize_agents(
63
68
  if step.is_calling_mcp_tool():
64
69
  # The call step is calling an MCP tool, so we don't need to
65
70
  # initialize any agent.
71
+ mcp_tool_used = True
66
72
  continue
67
73
 
68
74
  if not step.is_calling_agent():
69
75
  raise AgentNotFoundException(step.call)
70
76
 
77
+ agent_used = True
78
+
71
79
  agent_name = step.call
72
80
  agent_config = sub_agents.get_agent_config(agent_name)
73
81
  resolved_agent_config = resolve_agent_config(agent_config, endpoints)
@@ -79,6 +87,35 @@ async def initialize_agents(
79
87
  resolved_agent_config,
80
88
  )
81
89
 
90
+ _log_beta_feature_warning(mcp_tool_used, agent_used)
91
+
92
+
93
+ def _log_beta_feature_warning(mcp_tool_used: bool, agent_used: bool) -> None:
94
+ """Log a warning if an agent or MCP tool is used in the flow(s)."""
95
+ if mcp_tool_used:
96
+ structlogger.info(
97
+ "rasa.agents.utils.initialize_agents",
98
+ event_info="Beta Feature",
99
+ message=(
100
+ "An MCP tool is being called in at least one of the flows. "
101
+ "This feature is currently under beta development. "
102
+ "It might undergo upgrades / breaking changes in future "
103
+ "releases to graduate it to GA."
104
+ ),
105
+ )
106
+
107
+ if agent_used:
108
+ structlogger.info(
109
+ "rasa.agents.utils.initialize_agents",
110
+ event_info="Beta Feature",
111
+ message=(
112
+ "A sub-agent is being called from a flow. "
113
+ "This feature is currently under beta development. "
114
+ "It might undergo upgrades / breaking changes in future "
115
+ "releases to graduate it to GA."
116
+ ),
117
+ )
118
+
82
119
 
83
120
  def is_agent_valid(agent_id: str) -> bool:
84
121
  """Check if an agent ID references a valid agent.
@@ -107,6 +144,8 @@ def is_agent_completed(tracker: DialogueStateTracker, agent_id: str) -> bool:
107
144
  for event in reversed(tracker.events):
108
145
  if isinstance(event, AgentCompleted) and event.agent_id == agent_id:
109
146
  return True
147
+ elif isinstance(event, AgentStarted) and event.agent_id == agent_id:
148
+ return False
110
149
  return False
111
150
 
112
151
 
@@ -99,7 +99,7 @@ class CopilotTelemetry:
99
99
  total_tokens: Optional[int] = None,
100
100
  system_message: Optional[dict[str, Any]] = None,
101
101
  chat_history: Optional[list[dict[str, Any]]] = None,
102
- last_user_message: Optional[dict[str, Any]] = None,
102
+ last_user_message: Optional[str] = None,
103
103
  ) -> None:
104
104
  """Track a copilot message in the conversation.
105
105
 
@@ -112,28 +112,44 @@ class CopilotTelemetry:
112
112
  input_tokens: Number of input tokens used (optional).
113
113
  output_tokens: Number of output tokens generated (optional).
114
114
  total_tokens: Total number of tokens used (input + output) (optional).
115
+ system_message: The system message used (optional).
116
+ chat_history: The chat history messages used (optional).
117
+ last_user_message: The last user message used (optional).
115
118
  """
116
119
  structlogger.debug("builder.telemetry.log_copilot_turn", text=text)
120
+
121
+ # FIXME: Temporarily remove the system_message from telemetry payload.
122
+ # Reason: It often exceeds Segment payload size limits, causing the request
123
+ # to be rejected and the event to be absent in Segment. Instead, temporarily
124
+ # log the system_message so it's visible in Grafana.
125
+ telemetry_data = {
126
+ "project_id": self._project_id,
127
+ "message_id": uuid.uuid4().hex,
128
+ "text": text,
129
+ "prompt_version": self._prompt_version,
130
+ "source_urls": list(source_urls),
131
+ "flags": list(flags),
132
+ "latency_ms": latency_ms,
133
+ "model": model,
134
+ "input_tokens": input_tokens,
135
+ "output_tokens": output_tokens,
136
+ "total_tokens": total_tokens,
137
+ "chat_history": chat_history,
138
+ "last_user_message": last_user_message,
139
+ "timestamp": dt.datetime.utcnow().isoformat(),
140
+ }
141
+
142
+ # Log all telemetry data plus system_message for debugging
143
+ log_data = telemetry_data.copy()
144
+ if system_message:
145
+ log_data["system_message"] = system_message
146
+
147
+ structlogger.info("builder.telemetry.copilot_turn", **log_data)
148
+
117
149
  _track(
118
150
  COPILOT_BOT_MESSAGE_EVENT,
119
151
  self._user_id,
120
- {
121
- "project_id": self._project_id,
122
- "message_id": uuid.uuid4().hex,
123
- "text": text,
124
- "prompt_version": self._prompt_version,
125
- "source_urls": list(source_urls),
126
- "flags": list(flags),
127
- "latency_ms": latency_ms,
128
- "model": model,
129
- "input_tokens": input_tokens,
130
- "output_tokens": output_tokens,
131
- "total_tokens": total_tokens,
132
- "system_message": system_message,
133
- "chat_history": chat_history,
134
- "last_user_message": last_user_message,
135
- "timestamp": dt.datetime.utcnow().isoformat(),
136
- },
152
+ telemetry_data,
137
153
  )
138
154
 
139
155
  @staticmethod
@@ -177,7 +193,7 @@ class CopilotTelemetry:
177
193
  total_tokens: int,
178
194
  system_message: dict[str, Any],
179
195
  chat_history: list[dict[str, Any]],
180
- last_user_message: dict[str, Any],
196
+ last_user_message: Optional[str],
181
197
  ) -> None:
182
198
  """Log a copilot message from the response handler.
183
199
 
rasa/builder/main.py CHANGED
@@ -22,11 +22,9 @@ from rasa.builder.logging_utils import (
22
22
  log_request_start,
23
23
  )
24
24
  from rasa.builder.service import bp, setup_project_generator
25
- from rasa.builder.template_cache import (
26
- background_download_template_caches,
27
- )
28
25
  from rasa.builder.training_service import try_load_existing_agent, update_agent
29
26
  from rasa.core.channels.studio_chat import StudioChatInput
27
+ from rasa.model_manager.warm_rasa_process import warmup
30
28
  from rasa.server import configure_cors
31
29
  from rasa.utils.common import configure_logging_and_warnings
32
30
  from rasa.utils.log_utils import configure_structlog
@@ -150,16 +148,6 @@ def create_app(project_folder: str) -> Sanic:
150
148
  except Exception as e:
151
149
  structlogger.warning("Failed to load agent on server startup", error=str(e))
152
150
 
153
- if config.HELLO_RASA_PROJECT_ID and app.ctx.project_generator.is_empty():
154
- app.register_listener(background_download_template_caches, "after_server_start")
155
- else:
156
- structlogger.debug(
157
- "builder.main.background_cache_download.disabled",
158
- event_info=(
159
- "No hello rasa project id set; skipping background cache download"
160
- ),
161
- )
162
-
163
151
  return app
164
152
 
165
153
 
@@ -200,9 +188,12 @@ def main(project_folder: Optional[str] = None) -> None:
200
188
  rasa.telemetry.initialize_telemetry()
201
189
  rasa.telemetry.initialize_error_reporting(private_mode=False)
202
190
 
203
- # TODO: don't do this when running locally
204
191
  _apply_llm_overrides_from_builder_env()
205
192
 
193
+ if config.HELLO_RASA_PROJECT_ID:
194
+ # ensures long import times for modules are ahead of time
195
+ warmup()
196
+
206
197
  # working directory needs to be the project folder, e.g.
207
198
  # for relative paths (./docs) in a projects config to work
208
199
  if not project_folder:
@@ -62,7 +62,7 @@ class ProjectGenerator:
62
62
  create_initial_project(self.project_folder.as_posix(), template)
63
63
  # If a local cache for this template exists, copy it into the project.
64
64
  # We no longer download here to avoid blocking project creation.
65
- copy_cache_for_template_if_available(template, self.project_folder)
65
+ await copy_cache_for_template_if_available(template, self.project_folder)
66
66
  # needs to happen after caching, as we download/copy .rasa and that would
67
67
  # overwrite the project info file in .rasa
68
68
  ensure_first_used(self.project_folder)
rasa/builder/service.py CHANGED
@@ -1155,6 +1155,11 @@ async def copilot(request: Request) -> None:
1155
1155
  latency_ms=int((time.perf_counter() - start_timestamp) * 1000),
1156
1156
  system_message=generation_context.system_message,
1157
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
+ ),
1158
1163
  **copilot_client.usage_statistics.model_dump(),
1159
1164
  )
1160
1165
  )
@@ -1,83 +1,26 @@
1
- import asyncio
2
1
  import os
3
- import shutil
4
- import tarfile
5
- import tempfile
6
2
  from pathlib import Path
7
- from typing import Generator
8
3
 
9
4
  import aiofiles
10
- import aiohttp
5
+ import aiofiles.os
6
+ import aioshutil
11
7
  import structlog
12
- from sanic import Sanic
13
8
 
14
- import rasa.version
15
- from rasa.builder.logging_utils import capture_exception_with_context
16
9
  from rasa.cli.scaffold import ProjectTemplateName
17
10
 
18
11
  structlogger = structlog.get_logger()
19
12
 
20
- CACHE_BUCKET_URL = "https://trained-templates.s3.us-east-1.amazonaws.com"
21
13
 
22
14
  # Root directory for storing downloaded template caches on disk.
23
- _CACHE_ROOT_DIR = Path(
24
- os.getenv(
25
- "RASA_TEMPLATE_CACHE_DIR",
26
- Path.home().joinpath(".rasa", "template-cache").as_posix(),
27
- )
28
- )
15
+ _CACHE_ROOT_DIR = Path(os.getenv("RASA_TEMPLATE_CACHE_DIR", "/templates"))
29
16
 
30
17
 
31
18
  def _template_cache_dir(template: ProjectTemplateName) -> Path:
32
19
  """Return the local cache directory for a given template and version."""
33
- return _CACHE_ROOT_DIR / rasa.version.__version__ / template.value
20
+ return _CACHE_ROOT_DIR / template.value
34
21
 
35
22
 
36
- def _cache_root_dir() -> Path:
37
- return Path(
38
- os.getenv(
39
- "RASA_TEMPLATE_CACHE_DIR",
40
- Path.home().joinpath(".rasa", "template-cache").as_posix(),
41
- )
42
- )
43
-
44
-
45
- def _safe_tar_members(
46
- tar: tarfile.TarFile, destination_directory: Path
47
- ) -> Generator[tarfile.TarInfo, None, None]:
48
- """Yield safe members for extraction to prevent path traversal and links.
49
-
50
- Args:
51
- tar: Open tar file handle
52
- destination_directory: Directory to which files will be extracted
53
-
54
- Yields:
55
- Members that are safe to extract within destination_directory
56
- """
57
- base_path = destination_directory.resolve()
58
-
59
- for member in tar.getmembers():
60
- name = member.name
61
- # Skip empty names and absolute paths
62
- if not name or name.startswith("/") or name.startswith("\\"):
63
- continue
64
-
65
- # Disallow symlinks and hardlinks
66
- if member.issym() or member.islnk():
67
- continue
68
-
69
- # Compute the final path and ensure it's within base_path
70
- target_path = (base_path / name).resolve()
71
- try:
72
- target_path.relative_to(base_path)
73
- except ValueError:
74
- # Member would escape the destination directory
75
- continue
76
-
77
- yield member
78
-
79
-
80
- def _copytree(src: Path, dst: Path) -> None:
23
+ async def _copytree(src: Path, dst: Path) -> None:
81
24
  """Copy directory tree from src to dst, merging into dst.
82
25
 
83
26
  Existing files are overwritten. Hidden files and directories are included, as
@@ -87,132 +30,14 @@ def _copytree(src: Path, dst: Path) -> None:
87
30
  for root, dirs, files in os.walk(src):
88
31
  rel_path = Path(root).relative_to(src)
89
32
  target_dir = dst / rel_path
90
- target_dir.mkdir(parents=True, exist_ok=True)
33
+ await aiofiles.os.makedirs(target_dir, exist_ok=True)
91
34
  for filename in files:
92
35
  src_file = Path(root) / filename
93
36
  dst_file = target_dir / filename
94
- shutil.copy2(src_file, dst_file)
95
-
96
-
97
- async def download_cache_for_template(
98
- template: ProjectTemplateName, target_dir: str
99
- ) -> None:
100
- # get a temp path for the cache file download
101
- temporary_cache_file = tempfile.NamedTemporaryFile(suffix=".tar.gz", delete=False)
102
-
103
- try:
104
- url = f"{CACHE_BUCKET_URL}/{rasa.version.__version__}-{template.value}.tar.gz"
105
- async with aiohttp.ClientSession() as session:
106
- async with session.get(url) as response:
107
- response.raise_for_status()
108
- async with aiofiles.open(temporary_cache_file.name, "wb") as f:
109
- async for chunk in response.content.iter_chunked(1024 * 1024):
110
- await f.write(chunk)
111
-
112
- # extract the cache to the project folder using safe member filtering
113
- with tarfile.open(temporary_cache_file.name, "r:gz") as tar:
114
- destination = Path(target_dir)
115
- destination.mkdir(parents=True, exist_ok=True)
116
- tar.extractall(
117
- path=destination,
118
- members=_safe_tar_members(tar, destination),
119
- )
120
-
121
- structlogger.info(
122
- "project_generator.download_cache_for_template.success",
123
- template=template,
124
- event_info=(
125
- "Downloaded cache for template, extracted to target directory."
126
- ),
127
- target_dir=target_dir,
128
- )
129
- except aiohttp.ClientResponseError as e:
130
- if e.status == 403:
131
- structlogger.debug(
132
- "project_generator.download_cache_for_template.no_cache_found",
133
- template=template,
134
- event_info=("No cache found for template, continuing without it."),
135
- target_dir=target_dir,
136
- )
137
- else:
138
- capture_exception_with_context(
139
- e,
140
- "project_generator.download_cache_for_template.response_error",
141
- extra={
142
- "template": template.value,
143
- "status": str(e.status),
144
- "target_dir": target_dir,
145
- },
146
- )
147
- except Exception as exc:
148
- capture_exception_with_context(
149
- exc,
150
- "project_generator.download_cache_for_template.unexpected_error",
151
- extra={"template": template.value, "target_dir": target_dir},
152
- )
153
- finally:
154
- # Clean up the temporary file
155
- try:
156
- Path(temporary_cache_file.name).unlink(missing_ok=True)
157
- except Exception as exc:
158
- structlogger.debug(
159
- "project_generator.download_cache_for_template.cleanup_error",
160
- error=str(exc),
161
- template=template,
162
- event_info=("Failed to cleanup cache for template, ignoring."),
163
- )
164
-
165
-
166
- async def background_download_template_caches(
167
- app: Sanic, loop: asyncio.AbstractEventLoop
168
- ) -> None:
169
- """Kick off background downloads of template caches if enabled."""
170
- try:
171
- structlogger.info(
172
- "builder.main.background_cache_download.start",
173
- event_info=(
174
- "Starting background download of template caches for this " "version"
175
- ),
176
- )
177
-
178
- # Ensure cache root exists
179
- _cache_root_dir().mkdir(parents=True, exist_ok=True)
180
-
181
- async def _download(template: ProjectTemplateName) -> None:
182
- try:
183
- target_dir = _template_cache_dir(template)
184
- if target_dir.exists() and any(target_dir.iterdir()):
185
- structlogger.debug(
186
- "builder.main.background_cache_download.skipped",
187
- template=template,
188
- event_info=(
189
- "Skipping download of template cache because it "
190
- "already exists."
191
- ),
192
- target_dir=target_dir,
193
- )
194
- return
195
-
196
- target_dir.mkdir(parents=True, exist_ok=True)
197
- await download_cache_for_template(template, target_dir.as_posix())
198
- except Exception as exc:
199
- structlogger.debug(
200
- "builder.main.background_cache_download.error",
201
- template=template,
202
- error=str(exc),
203
- )
204
-
205
- # schedule downloads concurrently without blocking startup
206
- for template in ProjectTemplateName:
207
- loop.create_task(_download(template))
208
- except Exception as exc:
209
- structlogger.debug(
210
- "builder.main.background_cache_download.unexpected_error",
211
- error=str(exc),
212
- )
37
+ await aioshutil.copy2(src_file, dst_file)
213
38
 
214
39
 
215
- def copy_cache_for_template_if_available(
40
+ async def copy_cache_for_template_if_available(
216
41
  template: ProjectTemplateName, project_folder: Path
217
42
  ) -> None:
218
43
  """Copy a previously downloaded cache for `template` into `project_folder`.
@@ -222,7 +47,7 @@ def copy_cache_for_template_if_available(
222
47
  try:
223
48
  cache_dir = _template_cache_dir(template)
224
49
  if cache_dir.exists() and any(cache_dir.iterdir()):
225
- _copytree(cache_dir, project_folder)
50
+ await _copytree(cache_dir, project_folder)
226
51
  structlogger.info(
227
52
  "project_generator.copy_cache_for_template.success",
228
53
  template=template,
@@ -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,8 +1,11 @@
1
1
  ## 📂 `domain/` – The Agent's Brain
2
2
 
3
3
  This folder contains YAML files that define the agent's:
4
- - **Slots**: The agent's memory (e.g., user's name, account number, address) [1](https://rasa.com/docs/reference/primitives/slots/).
4
+ - **Slots**: The agent's memory (e.g., user's name, session info) [1](https://rasa.com/docs/reference/primitives/slots/).
5
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., checking a balance) [3](https://rasa.com/docs/reference/primitives/custom-actions).
6
+ - **Actions**: Custom logic your agent can run (e.g., handling feedback, human handoff) [3](https://rasa.com/docs/reference/primitives/custom-actions).
7
+
8
+ **What you'll find:**
9
+ - **general/**: Basic conversational domain elements (greetings, help, feedback)
7
10
 
8
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).
@@ -5,11 +5,12 @@ A lightweight banking conversational agent template for the fictional **Fenlo Ba
5
5
  ## 🚀 What's Included
6
6
 
7
7
  This template provides a banking assistant with:
8
- - **Account Management**: Balance checking, account selection, and validation
9
- - **Card Services**: Card blocking, status management, and security features
10
- - **Money Transfers**: Payee management, fund transfers, and payment scheduling
11
- - **Banking Knowledge**: FAQ system with comprehensive banking documentation
12
- - **Security Features**: Account verification, sufficient funds checking, and secure transactions
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
13
14
 
14
15
  ## 📁 Directory Structure
15
16
 
@@ -17,8 +18,8 @@ This template provides a banking assistant with:
17
18
  ├── actions/ # Custom Python logic for banking operations
18
19
  ├── data/ # Banking conversation flows and training data
19
20
  ├── domain/ # Banking agent configuration
20
- ├── csvs/ # Mock database for testing
21
- ├── docs/ # Basic knowledge base and FAQ documents
21
+ ├── db/ # Mock JSON database for testing
22
+ ├── docs/ # Fenlo Bank knowledge base and FAQ documents
22
23
  ├── prompts/ # LLM prompts for enhanced banking responses
23
24
  └── config.yml # Training pipeline configuration
24
25
  ```
@@ -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)]
@@ -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)]