rasa-pro 3.14.0a15__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 (331) hide show
  1. rasa/builder/config.py +1 -0
  2. rasa/builder/copilot/constants.py +3 -0
  3. rasa/builder/copilot/copilot.py +127 -31
  4. rasa/builder/copilot/models.py +34 -0
  5. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +183 -188
  6. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  7. rasa/builder/copilot/telemetry.py +46 -20
  8. rasa/builder/document_retrieval/models.py +3 -3
  9. rasa/builder/jobs.py +15 -5
  10. rasa/builder/main.py +14 -5
  11. rasa/builder/models.py +7 -7
  12. rasa/builder/project_generator.py +128 -23
  13. rasa/builder/service.py +42 -27
  14. rasa/builder/template_cache.py +183 -9
  15. rasa/cli/project_templates/basic/README.md +23 -0
  16. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  17. rasa/cli/project_templates/basic/config.yml +4 -4
  18. rasa/cli/project_templates/basic/data/data.md +5 -6
  19. rasa/cli/project_templates/basic/domain/domain.md +7 -5
  20. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +1 -1
  21. rasa/cli/project_templates/basic/endpoints.yml +1 -1
  22. rasa/cli/project_templates/finance/README.md +26 -0
  23. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  24. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  25. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  26. rasa/cli/project_templates/finance/actions/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
  27. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  28. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  29. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  30. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  31. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  32. rasa/cli/project_templates/finance/actions/db.py +117 -0
  33. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  34. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  35. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  36. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  37. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  38. rasa/cli/project_templates/finance/config.yml +6 -0
  39. rasa/cli/project_templates/finance/credentials.yml +7 -6
  40. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
  41. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  42. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  43. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  44. rasa/cli/project_templates/finance/data/cards/block_card.yml +37 -58
  45. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  46. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  47. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  48. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  49. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  50. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  51. rasa/cli/project_templates/finance/data/data.md +14 -0
  52. rasa/cli/project_templates/finance/data/general/agent_details.yml +6 -0
  53. rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
  54. rasa/cli/project_templates/finance/data/general/help.yml +2 -2
  55. rasa/cli/project_templates/finance/data/general/human_handoff.yml +1 -1
  56. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  57. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  58. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  59. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +29 -62
  60. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  61. rasa/cli/project_templates/finance/db/cards.json +18 -0
  62. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  63. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  64. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  65. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  66. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  67. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  68. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  69. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  70. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  71. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  72. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  73. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  74. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  75. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  76. rasa/cli/project_templates/finance/domain/_system/patterns/pattern_session_start.yml +11 -0
  77. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +9 -5
  78. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  79. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  80. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  81. rasa/cli/project_templates/finance/domain/cards/block_card.yml +33 -90
  82. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  83. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  84. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  85. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  86. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  87. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  88. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  89. rasa/cli/project_templates/finance/domain/general/_shared.yml +53 -0
  90. rasa/cli/project_templates/finance/domain/general/agent_details.yml +31 -0
  91. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -2
  92. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
  93. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +7 -3
  94. rasa/cli/project_templates/finance/domain/general/welcome.yml +5 -2
  95. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  96. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  97. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  98. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +203 -61
  99. rasa/cli/project_templates/finance/endpoints.yml +4 -3
  100. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
  101. rasa/cli/project_templates/telco/README.md +25 -0
  102. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  103. rasa/cli/project_templates/telco/config.yml +4 -4
  104. rasa/cli/project_templates/telco/data/data.md +11 -0
  105. rasa/cli/project_templates/telco/data/general/human_handoff.yml +1 -1
  106. rasa/cli/project_templates/telco/docs/docs.md +3 -0
  107. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  108. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +3 -6
  109. rasa/cli/project_templates/telco/endpoints.yml +1 -1
  110. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +1 -1
  111. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  112. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  113. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  114. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  115. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  116. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  117. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  118. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  119. rasa/core/brokers/broker.py +1 -1
  120. rasa/core/brokers/kafka.py +52 -8
  121. rasa/core/channels/development_inspector.py +1 -21
  122. rasa/core/channels/hangouts.py +2 -2
  123. rasa/core/channels/inspector/dist/assets/{arc-c24d8d79.js → arc-35222594.js} +1 -1
  124. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-1b6b9f26.js → blockDiagram-38ab4fdb-a0efbfd3.js} +1 -1
  125. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-da91d0f9.js → c4Diagram-3d4e48cf-0584c0f2.js} +1 -1
  126. rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +1 -0
  127. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-6067f302.js → classDiagram-70f12bd4-39f40dbe.js} +1 -1
  128. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-705d024a.js → classDiagram-v2-f2320105-1ad755f3.js} +1 -1
  129. rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +1 -0
  130. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-3751dffe.js → createText-2e5e7dd3-b0f4f0fe.js} +1 -1
  131. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-7b25b4af.js → edges-e0da2a9e-9039bff9.js} +1 -1
  132. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-eb7deea8.js → erDiagram-9861fffd-65c9b127.js} +1 -1
  133. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-67235ff6.js → flowDb-956e92f1-4f08b38e.js} +1 -1
  134. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-34c3a16a.js → flowDiagram-66a62f08-e95c362a.js} +1 -1
  135. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +1 -0
  136. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-f1a93631.js → flowchart-elk-definition-4a651766-703c3015.js} +1 -1
  137. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-a68cbad1.js → ganttDiagram-c361ad54-699328ea.js} +1 -1
  138. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-0b1e4a1d.js → gitGraphDiagram-72cf32ee-04cf4b05.js} +1 -1
  139. rasa/core/channels/inspector/dist/assets/{graph-f3c1d212.js → graph-ee94449e.js} +1 -1
  140. rasa/core/channels/inspector/dist/assets/{index-3862675e-34cbca30.js → index-3862675e-940162b4.js} +1 -1
  141. rasa/core/channels/inspector/dist/assets/{index-051c5a6e.js → index-c941dcb3.js} +41 -40
  142. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-e69960a1.js → infoDiagram-f8f76790-c79c2866.js} +1 -1
  143. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-8dd3296a.js → journeyDiagram-49397b02-84489d30.js} +1 -1
  144. rasa/core/channels/inspector/dist/assets/{layout-e93126bc.js → layout-a9aa9858.js} +1 -1
  145. rasa/core/channels/inspector/dist/assets/{line-15eb1e26.js → line-eb73cf26.js} +1 -1
  146. rasa/core/channels/inspector/dist/assets/{linear-fec95d33.js → linear-b3399f9a.js} +1 -1
  147. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-2557813e.js → mindmap-definition-fc14e90a-b095bf1a.js} +1 -1
  148. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-40d756b1.js → pieDiagram-8a3498a8-07644b66.js} +1 -1
  149. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-a48cbdcd.js → quadrantDiagram-120e2f19-573a3f9c.js} +1 -1
  150. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-dc778150.js → requirementDiagram-deff3bca-d457e1e1.js} +1 -1
  151. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-10026b94.js → sankeyDiagram-04a897e0-9d26e1a2.js} +1 -1
  152. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3b2ed10a.js → sequenceDiagram-704730f1-3a9cde10.js} +1 -1
  153. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-c5f3b3fb.js → stateDiagram-587899a1-4f3e8cec.js} +1 -1
  154. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e503656b.js → stateDiagram-v2-d93cdb3a-e617e5bf.js} +1 -1
  155. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-a683ce56.js → styles-6aaf32cf-eab30d2f.js} +1 -1
  156. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-02bcdcee.js → styles-9a916d00-09994be2.js} +1 -1
  157. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-8e90dbb9.js → styles-c10674c1-b7110364.js} +1 -1
  158. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-7c23fc1e.js → svgDrawCommon-08f97a94-3ebc92ad.js} +1 -1
  159. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-c42faec8.js → timeline-definition-85554ec2-7d13d2f2.js} +1 -1
  160. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-5e3bb0ea.js → xychartDiagram-e933f94c-488385e1.js} +1 -1
  161. rasa/core/channels/inspector/dist/index.html +1 -1
  162. rasa/core/channels/inspector/src/App.tsx +0 -7
  163. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +9 -1
  164. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  165. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  166. rasa/core/channels/inspector/src/types.ts +32 -7
  167. rasa/core/channels/studio_chat.py +21 -40
  168. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  169. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  170. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  171. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  172. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  173. rasa/core/channels/voice_stream/genesys.py +2 -1
  174. rasa/core/channels/voice_stream/jambonz.py +9 -1
  175. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  176. rasa/core/channels/voice_stream/voice_channel.py +61 -0
  177. rasa/core/constants.py +6 -0
  178. rasa/core/iam_credentials_providers/__init__.py +0 -0
  179. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +141 -0
  180. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  181. rasa/core/lock_store.py +41 -7
  182. rasa/core/processor.py +32 -0
  183. rasa/core/redis_connection_factory.py +411 -0
  184. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  185. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  186. rasa/model_manager/socket_bridge.py +1 -2
  187. rasa/shared/core/constants.py +1 -0
  188. rasa/shared/core/events.py +2 -0
  189. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  190. rasa/version.py +1 -1
  191. {rasa_pro-3.14.0a15.dist-info → rasa_pro-3.14.0a17.dist-info}/METADATA +14 -14
  192. {rasa_pro-3.14.0a15.dist-info → rasa_pro-3.14.0a17.dist-info}/RECORD +200 -249
  193. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  194. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  195. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  196. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  197. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  198. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  199. rasa/cli/project_templates/finance/actions/database.py +0 -277
  200. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  201. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  202. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  203. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  204. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  205. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  206. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  207. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  208. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  209. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  210. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  211. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  212. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  213. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  214. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  215. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  216. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  217. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  218. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  219. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  220. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  221. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  222. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  223. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  224. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  225. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  226. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  227. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  228. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  229. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  230. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  231. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  232. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  233. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  234. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  235. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  236. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  237. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  238. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  239. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  240. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  241. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  242. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  243. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  244. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  245. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  246. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  247. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  248. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  249. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  250. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  251. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  252. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  253. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  254. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  255. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  256. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  257. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  258. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  259. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  260. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  261. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  262. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  263. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  264. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  265. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  266. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  267. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  268. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  269. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  270. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  271. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  272. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  273. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  274. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  275. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  276. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  277. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  278. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  279. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  280. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  281. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  282. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  283. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  284. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  285. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  286. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  287. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  288. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  289. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  290. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  291. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  292. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  293. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  294. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  295. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  296. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  297. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  298. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  299. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  300. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  301. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  302. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  303. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  304. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  305. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  306. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  307. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  308. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  309. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  310. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  311. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  312. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
  313. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  314. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  315. rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
  316. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  317. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  318. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  319. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  320. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  321. rasa/core/channels/inspector/dist/assets/channel-d2444dfd.js +0 -1
  322. rasa/core/channels/inspector/dist/assets/clone-281a0990.js +0 -1
  323. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-aa4cca3b.js +0 -1
  324. /rasa/cli/project_templates/telco/domain/billing/{domain_undertand_bill.yml → understand_bill.yml} +0 -0
  325. /rasa/cli/project_templates/telco/domain/network/{domain_reboot_router.yml → reboot_router.yml} +0 -0
  326. /rasa/cli/project_templates/telco/domain/network/{domain_reset_router.yml → reset_router.yml} +0 -0
  327. /rasa/cli/project_templates/telco/domain/network/{domain_run_speed_test.yml → run_speed_test.yml} +0 -0
  328. /rasa/cli/project_templates/telco/domain/network/{domain_solve_internet_issue.yml → solve_internet_issue.yml} +0 -0
  329. {rasa_pro-3.14.0a15.dist-info → rasa_pro-3.14.0a17.dist-info}/NOTICE +0 -0
  330. {rasa_pro-3.14.0a15.dist-info → rasa_pro-3.14.0a17.dist-info}/WHEEL +0 -0
  331. {rasa_pro-3.14.0a15.dist-info → rasa_pro-3.14.0a17.dist-info}/entry_points.txt +0 -0
rasa/builder/main.py CHANGED
@@ -22,9 +22,11 @@ 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
+ )
25
28
  from rasa.builder.training_service import try_load_existing_agent, update_agent
26
29
  from rasa.core.channels.studio_chat import StudioChatInput
27
- from rasa.model_manager.warm_rasa_process import warmup
28
30
  from rasa.server import configure_cors
29
31
  from rasa.utils.common import configure_logging_and_warnings
30
32
  from rasa.utils.log_utils import configure_structlog
@@ -148,6 +150,16 @@ def create_app(project_folder: str) -> Sanic:
148
150
  except Exception as e:
149
151
  structlogger.warning("Failed to load agent on server startup", error=str(e))
150
152
 
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
+
151
163
  return app
152
164
 
153
165
 
@@ -188,12 +200,9 @@ def main(project_folder: Optional[str] = None) -> None:
188
200
  rasa.telemetry.initialize_telemetry()
189
201
  rasa.telemetry.initialize_error_reporting(private_mode=False)
190
202
 
203
+ # TODO: don't do this when running locally
191
204
  _apply_llm_overrides_from_builder_env()
192
205
 
193
- if config.HELLO_RASA_PROJECT_ID:
194
- # ensures long import times for modules are ahead of time
195
- warmup()
196
-
197
206
  # working directory needs to be the project folder, e.g.
198
207
  # for relative paths (./docs) in a projects config to work
199
208
  if not project_folder:
rasa/builder/models.py CHANGED
@@ -6,7 +6,7 @@ from pathlib import Path
6
6
  from typing import Any, Dict, List, Literal, Optional
7
7
 
8
8
  import structlog
9
- from pydantic import BaseModel, Field, validator
9
+ from pydantic import BaseModel, ConfigDict, Field, field_validator
10
10
 
11
11
  from rasa.cli.scaffold import ProjectTemplateName
12
12
  from rasa.shared.importers.importer import TrainingDataImporter
@@ -21,7 +21,8 @@ class PromptRequest(BaseModel):
21
21
  ..., min_length=1, max_length=10000, description="The skill description prompt"
22
22
  )
23
23
 
24
- @validator("prompt")
24
+ @field_validator("prompt")
25
+ @classmethod
25
26
  def validate_prompt(cls, v: str) -> str:
26
27
  if not v.strip():
27
28
  raise ValueError("Prompt cannot be empty or whitespace only")
@@ -38,7 +39,8 @@ class TemplateRequest(BaseModel):
38
39
  ),
39
40
  )
40
41
 
41
- @validator("template_name")
42
+ @field_validator("template_name")
43
+ @classmethod
42
44
  def validate_template_name(cls, v: Any) -> Any:
43
45
  if v not in ProjectTemplateName:
44
46
  raise ValueError(
@@ -54,10 +56,8 @@ class BotDataUpdateRequest(BaseModel):
54
56
  flows_yml: Optional[str] = Field(None, alias="flows.yml")
55
57
  config_yml: Optional[str] = Field(None, alias="config.yml")
56
58
 
57
- class Config:
58
- """Config for BotDataUpdateRequest."""
59
-
60
- allow_population_by_field_name = True
59
+ # Allow using either field names or aliases when creating the model
60
+ model_config = ConfigDict(populate_by_name=True)
61
61
 
62
62
 
63
63
  class BotData(BaseModel):
@@ -5,23 +5,25 @@ import os
5
5
  import shutil
6
6
  from pathlib import Path
7
7
  from textwrap import dedent
8
- from typing import Any, Dict, List, Optional
8
+ from typing import Any, Dict, Generator, List, Optional
9
9
 
10
10
  import structlog
11
11
 
12
12
  from rasa.builder import config
13
13
  from rasa.builder.exceptions import ProjectGenerationError, ValidationError
14
14
  from rasa.builder.llm_service import get_skill_generation_messages, llm_service
15
+ from rasa.builder.logging_utils import capture_exception_with_context
15
16
  from rasa.builder.models import BotFiles
16
17
  from rasa.builder.project_info import ProjectInfo, ensure_first_used, load_project_info
17
18
  from rasa.builder.template_cache import copy_cache_for_template_if_available
18
19
  from rasa.builder.training_service import TrainingInput
19
20
  from rasa.builder.validation_service import validate_project
20
21
  from rasa.cli.scaffold import ProjectTemplateName, create_initial_project
22
+ from rasa.shared.constants import DEFAULT_MODELS_PATH
21
23
  from rasa.shared.core.flows import yaml_flows_io
22
24
  from rasa.shared.importers.importer import TrainingDataImporter
23
25
  from rasa.shared.utils.yaml import dump_obj_as_yaml_to_string
24
- from rasa.utils.io import subpath
26
+ from rasa.utils.io import InvalidPathException, subpath
25
27
 
26
28
  structlogger = structlog.get_logger()
27
29
 
@@ -60,7 +62,7 @@ class ProjectGenerator:
60
62
  create_initial_project(self.project_folder.as_posix(), template)
61
63
  # If a local cache for this template exists, copy it into the project.
62
64
  # We no longer download here to avoid blocking project creation.
63
- await copy_cache_for_template_if_available(template, self.project_folder)
65
+ copy_cache_for_template_if_available(template, self.project_folder)
64
66
  # needs to happen after caching, as we download/copy .rasa and that would
65
67
  # overwrite the project info file in .rasa
66
68
  ensure_first_used(self.project_folder)
@@ -233,25 +235,9 @@ class ProjectGenerator:
233
235
  """
234
236
  bot_files: BotFiles = {}
235
237
 
236
- for file in self.project_folder.glob("**/*"):
237
- # Skip directories
238
- if not file.is_file():
239
- continue
240
-
238
+ for file in self.bot_file_paths():
241
239
  relative_path = file.relative_to(self.project_folder)
242
240
 
243
- # Skip hidden files and directories (any path component starting with '.')
244
- # as well as `__pycache__` folders
245
- if any(part.startswith(".") for part in relative_path.parts):
246
- continue
247
-
248
- if "__pycache__" in relative_path.parts:
249
- continue
250
-
251
- # exclude the project_folder / models folder
252
- if relative_path.parts[0] == "models":
253
- continue
254
-
255
241
  # Exclude the docs directory if specified
256
242
  if exclude_docs_directory and relative_path.parts[0] == "docs":
257
243
  continue
@@ -263,7 +249,6 @@ class ProjectGenerator:
263
249
  ]
264
250
  if file.suffix.lstrip(".").lower() not in allowed_file_extensions:
265
251
  continue
266
-
267
252
  # Read file content and store with relative path as key
268
253
  try:
269
254
  bot_files[relative_path.as_posix()] = file.read_text(encoding="utf-8")
@@ -274,9 +259,40 @@ class ProjectGenerator:
274
259
  file_path=file.as_posix(),
275
260
  )
276
261
  bot_files[relative_path.as_posix()] = None
277
-
278
262
  return bot_files
279
263
 
264
+ def is_restricted_path(self, path: Path) -> bool:
265
+ """Check if the path is restricted.
266
+
267
+ These paths are excluded from deletion and editing by the user.
268
+ """
269
+ relative_path = path.relative_to(self.project_folder)
270
+
271
+ # Skip hidden files and directories (any path component starting with '.')
272
+ # as well as `__pycache__` folders
273
+ if any(part.startswith(".") for part in relative_path.parts):
274
+ return True
275
+
276
+ if "__pycache__" in relative_path.parts:
277
+ return True
278
+
279
+ # exclude the project_folder / models folder
280
+ if relative_path.parts[0] == DEFAULT_MODELS_PATH:
281
+ return True
282
+
283
+ return False
284
+
285
+ def bot_file_paths(
286
+ self,
287
+ ) -> Generator[Path, None, None]:
288
+ """Get the paths of all bot files."""
289
+ for file in self.project_folder.glob("**/*"):
290
+ # Skip directories
291
+ if not file.is_file() or self.is_restricted_path(file):
292
+ continue
293
+
294
+ yield file
295
+
280
296
  def _get_bot_data_for_llm(self) -> Dict[str, Any]:
281
297
  """Get the current bot data for the LLM."""
282
298
  file_importer = self._create_importer()
@@ -321,7 +337,7 @@ class ProjectGenerator:
321
337
  def update_bot_files(self, files: Dict[str, Optional[str]]) -> None:
322
338
  """Update bot files with new content by writing to disk."""
323
339
  for filename, content in files.items():
324
- file_path = Path(subpath(self.project_folder, filename))
340
+ file_path = Path(subpath(str(self.project_folder), filename))
325
341
  # Disallow updates inside .rasa project metadata directory
326
342
  if any(
327
343
  part.startswith(".")
@@ -332,6 +348,95 @@ class ProjectGenerator:
332
348
  file_path.parent.mkdir(parents=True, exist_ok=True)
333
349
  file_path.write_text(content, encoding="utf-8")
334
350
 
351
+ def ensure_all_files_are_writable(self, files: Dict[str, Optional[str]]) -> None:
352
+ """Ensure all files are writable."""
353
+ for filename, content in files.items():
354
+ file_path = Path(subpath(str(self.project_folder), filename))
355
+ if self.is_restricted_path(file_path):
356
+ raise InvalidPathException(
357
+ f"This file or folder is restricted from editing: {file_path}"
358
+ )
359
+
360
+ def replace_all_bot_files(self, files: Dict[str, Optional[str]]) -> None:
361
+ """Replace all bot files with new content, deleting files not in the request.
362
+
363
+ Files/folders starting with .rasa/ or models/ are excluded from deletion.
364
+
365
+ Args:
366
+ files: Dictionary mapping file names to their content
367
+ """
368
+ self.ensure_all_files_are_writable(files)
369
+ # Collect all existing files - any files not in the new `files` dict will be
370
+ # deleted from this set
371
+ existing_files = set(path.as_posix() for path in self.bot_file_paths())
372
+
373
+ # Write all new files
374
+ for filename, content in files.items():
375
+ if content is None:
376
+ continue
377
+
378
+ file_path = Path(subpath(str(self.project_folder), filename))
379
+ file_path.parent.mkdir(parents=True, exist_ok=True)
380
+
381
+ try:
382
+ file_path.write_text(content, encoding="utf-8")
383
+ except Exception as e:
384
+ # Log write failure and avoid deleting an existing file by mistake
385
+ capture_exception_with_context(
386
+ e,
387
+ "project_generator.replace_all_bot_files.write_error",
388
+ extra={"file_path": file_path},
389
+ )
390
+ if file_path.as_posix() in existing_files:
391
+ # Keep the original file if it already existed
392
+ existing_files.discard(file_path.as_posix())
393
+ continue
394
+
395
+ # Remove from deletion set since this file is in the new set of files
396
+ existing_files.discard(file_path.as_posix())
397
+
398
+ # Delete files that weren't in the request
399
+ for file_to_delete in existing_files:
400
+ file_path = Path(file_to_delete)
401
+ try:
402
+ file_path.unlink()
403
+ except Exception as e:
404
+ capture_exception_with_context(
405
+ e,
406
+ "project_generator.replace_all_bot_files.delete_error",
407
+ extra={"file_path": file_path},
408
+ )
409
+
410
+ # Clean up empty directories (except excluded ones)
411
+ self._cleanup_empty_directories()
412
+
413
+ def _cleanup_empty_directories(self) -> None:
414
+ """Remove empty directories from the project folder.
415
+
416
+ Excludes hidden files and directories, and models/ from cleanup.
417
+ """
418
+ # Walk directories in reverse order (deepest first)
419
+ for dirpath, dirnames, filenames in os.walk(self.project_folder, topdown=False):
420
+ # Skip if this is the project root
421
+ if dirpath == str(self.project_folder):
422
+ continue
423
+
424
+ if self.is_restricted_path(Path(dirpath)):
425
+ continue
426
+
427
+ relative_path = Path(dirpath).relative_to(self.project_folder)
428
+
429
+ try:
430
+ # Only remove if directory is empty
431
+ if not os.listdir(dirpath):
432
+ os.rmdir(dirpath)
433
+ except Exception as e:
434
+ capture_exception_with_context(
435
+ e,
436
+ "project_generator.cleanup_empty_directories.error",
437
+ extra={"directory": relative_path.as_posix()},
438
+ )
439
+
335
440
  def cleanup(self) -> None:
336
441
  """Cleanup the project folder."""
337
442
  # remove all the files and folders in the project folder resulting
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
  )
@@ -1122,11 +1133,9 @@ async def copilot(request: Request) -> None:
1122
1133
  # copilot response handler
1123
1134
  start_timestamp = time.perf_counter()
1124
1135
  copilot_client = llm_service.instantiate_copilot()
1125
- (
1126
- original_stream,
1127
- used_documents,
1128
- system_prompt,
1129
- ) = await copilot_client.generate_response(context)
1136
+ (original_stream, generation_context) = await copilot_client.generate_response(
1137
+ context
1138
+ )
1130
1139
 
1131
1140
  copilot_response_handler = llm_service.instantiate_handler(
1132
1141
  COPILOT_HANDLER_ROLLING_BUFFER_SIZE
@@ -1142,18 +1151,24 @@ async def copilot(request: Request) -> None:
1142
1151
  asyncio.to_thread(
1143
1152
  telemetry.log_copilot_from_handler,
1144
1153
  handler=copilot_response_handler,
1145
- used_documents=used_documents,
1154
+ used_documents=generation_context.relevant_documents,
1146
1155
  latency_ms=int((time.perf_counter() - start_timestamp) * 1000),
1147
- system_prompt=system_prompt,
1156
+ system_message=generation_context.system_message,
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
+ ),
1148
1163
  **copilot_client.usage_statistics.model_dump(),
1149
1164
  )
1150
1165
  )
1151
1166
 
1152
1167
  # 9. Once the stream is over, extract and send references
1153
1168
  # if any documents were used
1154
- if used_documents:
1169
+ if generation_context.relevant_documents:
1155
1170
  reference_section = copilot_response_handler.extract_references(
1156
- used_documents
1171
+ generation_context.relevant_documents
1157
1172
  )
1158
1173
  await sse.send(reference_section.to_sse_event().format())
1159
1174