rasa-pro 3.14.0.dev20250901__py3-none-any.whl → 3.14.0rc1__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 (584) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +211 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +879 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +726 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +206 -0
  26. rasa/agents/validation.py +485 -0
  27. rasa/api.py +24 -9
  28. rasa/builder/config.py +7 -2
  29. rasa/builder/copilot/constants.py +3 -0
  30. rasa/builder/copilot/copilot.py +128 -54
  31. rasa/builder/copilot/models.py +39 -3
  32. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +183 -188
  33. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  34. rasa/builder/copilot/telemetry.py +46 -20
  35. rasa/builder/document_retrieval/models.py +3 -3
  36. rasa/builder/download.py +1 -8
  37. rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
  38. rasa/builder/guardrails/constants.py +3 -0
  39. rasa/builder/guardrails/models.py +45 -10
  40. rasa/builder/guardrails/policy_checker.py +324 -0
  41. rasa/builder/guardrails/utils.py +42 -276
  42. rasa/builder/jobs.py +33 -21
  43. rasa/builder/llm_service.py +32 -5
  44. rasa/builder/main.py +38 -62
  45. rasa/builder/models.py +8 -7
  46. rasa/builder/project_generator.py +149 -148
  47. rasa/builder/service.py +58 -40
  48. rasa/builder/template_cache.py +69 -0
  49. rasa/builder/training_service.py +84 -20
  50. rasa/builder/validation_service.py +1 -1
  51. rasa/cli/arguments/default_arguments.py +12 -0
  52. rasa/cli/arguments/run.py +2 -0
  53. rasa/cli/arguments/train.py +2 -0
  54. rasa/cli/data.py +10 -8
  55. rasa/cli/dialogue_understanding_test.py +10 -7
  56. rasa/cli/e2e_test.py +9 -6
  57. rasa/cli/evaluate.py +4 -2
  58. rasa/cli/export.py +5 -2
  59. rasa/cli/inspect.py +8 -4
  60. rasa/cli/interactive.py +5 -4
  61. rasa/cli/llm_fine_tuning.py +11 -6
  62. rasa/cli/project_templates/basic/README.md +23 -0
  63. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  64. rasa/cli/project_templates/basic/config.yml +6 -4
  65. rasa/cli/project_templates/basic/data/data.md +5 -6
  66. rasa/cli/project_templates/basic/domain/domain.md +7 -5
  67. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +1 -1
  68. rasa/cli/project_templates/basic/endpoints.yml +5 -1
  69. rasa/cli/project_templates/default/config.yml +4 -0
  70. rasa/cli/project_templates/default/endpoints.yml +4 -0
  71. rasa/cli/project_templates/finance/README.md +26 -0
  72. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  73. rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
  74. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  75. rasa/cli/project_templates/finance/actions/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
  76. rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
  77. rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
  78. rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
  79. rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
  80. rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
  81. rasa/cli/project_templates/finance/actions/db.py +117 -0
  82. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  83. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  84. rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
  85. rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
  86. rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
  87. rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
  88. rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
  89. rasa/cli/project_templates/finance/config.yml +8 -0
  90. rasa/cli/project_templates/finance/credentials.yml +7 -6
  91. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
  92. rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
  93. rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
  94. rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
  95. rasa/cli/project_templates/finance/data/cards/block_card.yml +37 -58
  96. rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
  97. rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
  98. rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
  99. rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
  100. rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
  101. rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
  102. rasa/cli/project_templates/finance/data/data.md +14 -0
  103. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  104. rasa/cli/project_templates/finance/data/general/goodbye.yml +1 -1
  105. rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
  106. rasa/cli/project_templates/finance/data/general/help.yml +2 -2
  107. rasa/cli/project_templates/finance/data/general/human_handoff.yml +2 -2
  108. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +1 -1
  109. rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
  110. rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
  111. rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
  112. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +29 -62
  113. rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
  114. rasa/cli/project_templates/finance/db/cards.json +18 -0
  115. rasa/cli/project_templates/finance/db/contacts.json +10 -0
  116. rasa/cli/project_templates/finance/db/my_account.json +6 -0
  117. rasa/cli/project_templates/finance/db/transactions.json +22 -0
  118. rasa/cli/project_templates/finance/docs/docs.md +8 -0
  119. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
  120. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
  121. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
  122. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
  123. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
  124. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
  125. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
  126. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
  127. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
  128. rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
  129. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +9 -5
  130. rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
  131. rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
  132. rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
  133. rasa/cli/project_templates/finance/domain/cards/block_card.yml +33 -90
  134. rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
  135. rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
  136. rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
  137. rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
  138. rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
  139. rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
  140. rasa/cli/project_templates/finance/domain/domain.md +18 -0
  141. rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
  142. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  143. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -2
  144. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
  145. rasa/cli/project_templates/finance/domain/general/goodbye.yml +6 -6
  146. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +10 -9
  147. rasa/cli/project_templates/finance/domain/general/welcome.yml +33 -2
  148. rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
  149. rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
  150. rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
  151. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +203 -61
  152. rasa/cli/project_templates/finance/endpoints.yml +8 -4
  153. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
  154. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/check_balance.yml +9 -0
  155. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/download_statements.yml +43 -0
  156. rasa/cli/project_templates/finance/tests/e2e_test_cases/cards/block_card.yml +55 -0
  157. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  158. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/feedback.yml +46 -0
  159. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/goodbye.yml +9 -0
  160. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/hello.yml +8 -0
  161. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  162. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/patterns.yml +22 -0
  163. rasa/cli/project_templates/finance/tests/e2e_test_cases/transfers/transfer_money.yml +56 -0
  164. rasa/cli/project_templates/telco/README.md +25 -0
  165. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  166. rasa/cli/project_templates/telco/config.yml +6 -4
  167. rasa/cli/project_templates/telco/data/data.md +11 -0
  168. rasa/cli/project_templates/telco/data/general/human_handoff.yml +1 -1
  169. rasa/cli/project_templates/telco/docs/docs.md +3 -0
  170. rasa/cli/project_templates/telco/domain/domain.md +13 -0
  171. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +3 -6
  172. rasa/cli/project_templates/telco/endpoints.yml +5 -1
  173. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +1 -1
  174. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  175. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  176. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  177. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  178. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  179. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  180. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  181. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  182. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  183. rasa/cli/run.py +12 -10
  184. rasa/cli/scaffold.py +4 -4
  185. rasa/cli/shell.py +9 -5
  186. rasa/cli/studio/studio.py +1 -1
  187. rasa/cli/test.py +34 -14
  188. rasa/cli/train.py +41 -28
  189. rasa/cli/utils.py +1 -393
  190. rasa/cli/validation/__init__.py +0 -0
  191. rasa/cli/validation/bot_config.py +223 -0
  192. rasa/cli/validation/config_path_validation.py +257 -0
  193. rasa/cli/x.py +8 -4
  194. rasa/constants.py +7 -1
  195. rasa/core/actions/action.py +51 -10
  196. rasa/core/actions/action_run_slot_rejections.py +1 -1
  197. rasa/core/actions/direct_custom_actions_executor.py +9 -2
  198. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  199. rasa/core/agent.py +19 -2
  200. rasa/core/available_agents.py +229 -0
  201. rasa/core/brokers/broker.py +1 -1
  202. rasa/core/brokers/kafka.py +52 -8
  203. rasa/core/channels/__init__.py +82 -35
  204. rasa/core/channels/development_inspector.py +4 -24
  205. rasa/core/channels/hangouts.py +2 -2
  206. rasa/core/channels/inspector/README.md +25 -13
  207. rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-6177260a.js} +1 -1
  208. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  209. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  210. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  211. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  212. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  213. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  214. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-088372e2.js} +1 -1
  215. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-58676240.js} +1 -1
  216. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  217. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  218. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  219. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  220. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  221. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  222. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  223. rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-0a6f8466.js} +1 -1
  224. rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-7610671a.js} +1 -1
  225. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  226. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  227. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  228. rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-e7fbc2bf.js} +1 -1
  229. rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-a8aa457c.js} +1 -1
  230. rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-3351e0d2.js} +1 -1
  231. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  232. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  233. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  234. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  235. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  236. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  237. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-0e770395.js} +1 -1
  238. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  239. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  240. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-884a8b5b.js} +1 -1
  241. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-dc097813.js} +1 -1
  242. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  243. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  244. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  245. rasa/core/channels/inspector/dist/index.html +1 -1
  246. rasa/core/channels/inspector/package.json +18 -18
  247. rasa/core/channels/inspector/src/App.tsx +34 -35
  248. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  249. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  250. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  251. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +9 -1
  252. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  253. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +20 -3
  254. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  255. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  256. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  257. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  258. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  259. rasa/core/channels/inspector/src/types.ts +53 -7
  260. rasa/core/channels/inspector/yarn.lock +336 -189
  261. rasa/core/channels/studio_chat.py +29 -47
  262. rasa/core/channels/telegram.py +4 -9
  263. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  264. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  265. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  266. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  267. rasa/core/channels/voice_stream/browser_audio.py +55 -3
  268. rasa/core/channels/voice_stream/genesys.py +3 -2
  269. rasa/core/channels/voice_stream/jambonz.py +9 -1
  270. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  271. rasa/core/channels/voice_stream/twilio_media_streams.py +21 -1
  272. rasa/core/channels/voice_stream/voice_channel.py +64 -0
  273. rasa/core/concurrent_lock_store.py +66 -16
  274. rasa/core/config/__init__.py +0 -0
  275. rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
  276. rasa/core/config/configuration.py +260 -0
  277. rasa/core/config/credentials.py +19 -0
  278. rasa/core/config/message_procesing_config.py +34 -0
  279. rasa/core/constants.py +11 -0
  280. rasa/core/iam_credentials_providers/__init__.py +0 -0
  281. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +226 -0
  282. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +90 -0
  283. rasa/core/lock_store.py +46 -10
  284. rasa/core/nlg/generator.py +1 -1
  285. rasa/core/policies/enterprise_search_policy.py +5 -3
  286. rasa/core/policies/flow_policy.py +4 -4
  287. rasa/core/policies/flows/agent_executor.py +632 -0
  288. rasa/core/policies/flows/flow_executor.py +137 -76
  289. rasa/core/policies/flows/mcp_tool_executor.py +298 -0
  290. rasa/core/policies/intentless_policy.py +1 -1
  291. rasa/core/policies/ted_policy.py +20 -12
  292. rasa/core/policies/unexpected_intent_policy.py +6 -0
  293. rasa/core/processor.py +100 -44
  294. rasa/core/redis_connection_factory.py +469 -0
  295. rasa/core/run.py +37 -8
  296. rasa/core/test.py +4 -0
  297. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  298. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  299. rasa/core/tracker_stores/tracker_store.py +3 -7
  300. rasa/core/train.py +1 -1
  301. rasa/core/training/interactive.py +20 -18
  302. rasa/core/training/story_conflict.py +5 -5
  303. rasa/core/utils.py +22 -23
  304. rasa/dialogue_understanding/commands/__init__.py +8 -0
  305. rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
  306. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  307. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  308. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  309. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  310. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  311. rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
  312. rasa/dialogue_understanding/commands/utils.py +124 -2
  313. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  314. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  315. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  316. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  317. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  318. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  319. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  320. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  321. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  322. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  323. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  324. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  325. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  326. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  327. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
  328. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  329. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  330. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  331. rasa/dialogue_understanding/stack/utils.py +57 -3
  332. rasa/dialogue_understanding/utils.py +24 -4
  333. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  334. rasa/e2e_test/e2e_test_runner.py +13 -3
  335. rasa/engine/caching.py +2 -2
  336. rasa/engine/constants.py +1 -1
  337. rasa/engine/graph.py +5 -1
  338. rasa/engine/loader.py +12 -0
  339. rasa/engine/recipes/default_components.py +138 -49
  340. rasa/engine/recipes/default_recipe.py +108 -11
  341. rasa/engine/runner/dask.py +8 -5
  342. rasa/engine/storage/local_model_storage.py +41 -4
  343. rasa/engine/validation.py +19 -6
  344. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  345. rasa/hooks.py +5 -5
  346. rasa/llm_fine_tuning/utils.py +2 -2
  347. rasa/model_manager/socket_bridge.py +1 -2
  348. rasa/model_manager/warm_rasa_process.py +13 -3
  349. rasa/model_training.py +60 -47
  350. rasa/nlu/classifiers/diet_classifier.py +198 -98
  351. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  352. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  353. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  354. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  355. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  356. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  357. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  358. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  359. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  360. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  361. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  362. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  363. rasa/nlu/selectors/response_selector.py +10 -2
  364. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  365. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  366. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  367. rasa/nlu/utils/mitie_utils.py +3 -0
  368. rasa/nlu/utils/spacy_utils.py +3 -2
  369. rasa/plugin.py +8 -8
  370. rasa/privacy/privacy_manager.py +12 -3
  371. rasa/server.py +15 -3
  372. rasa/shared/agents/__init__.py +0 -0
  373. rasa/shared/agents/auth/__init__.py +0 -0
  374. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  375. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  376. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  377. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  378. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  379. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  380. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
  381. rasa/shared/agents/auth/constants.py +12 -0
  382. rasa/shared/agents/auth/types.py +12 -0
  383. rasa/shared/agents/utils.py +35 -0
  384. rasa/shared/constants.py +8 -0
  385. rasa/shared/core/constants.py +17 -1
  386. rasa/shared/core/domain.py +0 -7
  387. rasa/shared/core/events.py +329 -0
  388. rasa/shared/core/flows/constants.py +5 -0
  389. rasa/shared/core/flows/flow.py +1 -1
  390. rasa/shared/core/flows/flows_list.py +21 -5
  391. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  392. rasa/shared/core/flows/steps/call.py +49 -5
  393. rasa/shared/core/flows/steps/collect.py +98 -13
  394. rasa/shared/core/flows/validation.py +372 -8
  395. rasa/shared/core/flows/yaml_flows_io.py +3 -2
  396. rasa/shared/core/slots.py +2 -2
  397. rasa/shared/core/trackers.py +5 -2
  398. rasa/shared/exceptions.py +16 -0
  399. rasa/shared/importers/rasa.py +1 -1
  400. rasa/shared/importers/utils.py +9 -3
  401. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  402. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  403. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  404. rasa/shared/providers/llm/llm_client.py +7 -3
  405. rasa/shared/providers/llm/llm_response.py +66 -0
  406. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  407. rasa/shared/utils/common.py +24 -0
  408. rasa/shared/utils/health_check/health_check.py +7 -3
  409. rasa/shared/utils/llm.py +39 -16
  410. rasa/shared/utils/mcp/__init__.py +0 -0
  411. rasa/shared/utils/mcp/server_connection.py +247 -0
  412. rasa/shared/utils/mcp/utils.py +20 -0
  413. rasa/shared/utils/schemas/events.py +42 -0
  414. rasa/shared/utils/yaml.py +3 -1
  415. rasa/studio/pull/pull.py +3 -2
  416. rasa/studio/train.py +8 -7
  417. rasa/studio/upload.py +3 -6
  418. rasa/telemetry.py +69 -5
  419. rasa/tracing/config.py +45 -12
  420. rasa/tracing/constants.py +14 -0
  421. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  422. rasa/tracing/instrumentation/instrumentation.py +626 -21
  423. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  424. rasa/tracing/instrumentation/metrics.py +32 -0
  425. rasa/tracing/metric_instrument_provider.py +68 -0
  426. rasa/utils/common.py +92 -1
  427. rasa/utils/endpoints.py +11 -2
  428. rasa/utils/log_utils.py +96 -5
  429. rasa/utils/ml_utils.py +1 -1
  430. rasa/utils/pypred.py +38 -0
  431. rasa/utils/tensorflow/__init__.py +7 -0
  432. rasa/utils/tensorflow/callback.py +136 -101
  433. rasa/utils/tensorflow/crf.py +1 -1
  434. rasa/utils/tensorflow/data_generator.py +21 -8
  435. rasa/utils/tensorflow/layers.py +21 -11
  436. rasa/utils/tensorflow/metrics.py +7 -3
  437. rasa/utils/tensorflow/models.py +56 -8
  438. rasa/utils/tensorflow/rasa_layers.py +8 -6
  439. rasa/utils/tensorflow/transformer.py +2 -3
  440. rasa/utils/train_utils.py +54 -24
  441. rasa/validator.py +17 -13
  442. rasa/version.py +1 -1
  443. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/METADATA +59 -51
  444. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/RECORD +452 -428
  445. rasa/builder/scrape_rasa_docs.py +0 -97
  446. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  447. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  448. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  449. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  450. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  451. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  452. rasa/cli/project_templates/finance/actions/database.py +0 -277
  453. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  454. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  455. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  456. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  457. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  458. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  459. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  460. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  461. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  462. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  463. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  464. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  465. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  466. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  467. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  468. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  469. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  470. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  471. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  472. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  473. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  474. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  475. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  476. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  477. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  478. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  479. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  480. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  481. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  482. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  483. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  484. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  485. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  486. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  487. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  488. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  489. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  490. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  491. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  492. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  493. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  494. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  495. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  496. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  497. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  498. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  499. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  500. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  501. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  502. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  503. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  504. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  505. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  506. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  507. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  508. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  509. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  510. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  511. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  512. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  513. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  514. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  515. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  516. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  517. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  518. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  519. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  520. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  521. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  522. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  523. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  524. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  525. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  526. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  527. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  528. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  529. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  530. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  531. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  532. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  533. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  534. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  535. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  536. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  537. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  538. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  539. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  540. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  541. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  542. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  543. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  544. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  545. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  546. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  547. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  548. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  549. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  550. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  551. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  552. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  553. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  554. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  555. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  556. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  557. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  558. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  559. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  560. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  561. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  562. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  563. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  564. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  565. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
  566. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  567. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  568. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  569. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  570. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  571. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  572. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  573. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
  574. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
  575. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
  576. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
  577. /rasa/cli/project_templates/telco/domain/billing/{domain_undertand_bill.yml → understand_bill.yml} +0 -0
  578. /rasa/cli/project_templates/telco/domain/network/{domain_reboot_router.yml → reboot_router.yml} +0 -0
  579. /rasa/cli/project_templates/telco/domain/network/{domain_reset_router.yml → reset_router.yml} +0 -0
  580. /rasa/cli/project_templates/telco/domain/network/{domain_run_speed_test.yml → run_speed_test.yml} +0 -0
  581. /rasa/cli/project_templates/telco/domain/network/{domain_solve_internet_issue.yml → solve_internet_issue.yml} +0 -0
  582. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/NOTICE +0 -0
  583. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/WHEEL +0 -0
  584. {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/entry_points.txt +0 -0
@@ -1,31 +1,13 @@
1
- import asyncio
2
- from functools import lru_cache
3
- from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple
1
+ from typing import TYPE_CHECKING, Any, Callable, Dict, Optional, Type
4
2
 
5
3
  import structlog
6
4
 
7
- from rasa.builder.config import (
8
- ASSISTANT_HISTORY_GUARDRAIL_PROJECT_ID,
9
- COPILOT_HISTORY_GUARDRAIL_PROJECT_ID,
10
- )
11
- from rasa.builder.copilot.constants import ROLE_COPILOT, ROLE_USER
12
- from rasa.builder.copilot.copilot_response_handler import CopilotResponseHandler
13
- from rasa.builder.copilot.models import (
14
- CopilotChatMessage,
15
- CopilotContext,
16
- GeneratedContent,
17
- ResponseCategory,
18
- )
5
+ from rasa.builder.guardrails.clients import GuardrailsClient, LakeraAIGuardrails
19
6
  from rasa.builder.guardrails.models import (
20
- GuardrailRequestKey,
21
- GuardrailResponse,
7
+ GuardrailRequest,
22
8
  LakeraGuardrailRequest,
23
9
  )
24
- from rasa.builder.llm_service import llm_service
25
- from rasa.builder.shared.tracker_context import (
26
- AssistantConversationTurn,
27
- TrackerContext,
28
- )
10
+ from rasa.shared.constants import ROLE_USER
29
11
 
30
12
  if TYPE_CHECKING:
31
13
  from rasa.builder.guardrails.models import GuardrailType
@@ -64,265 +46,49 @@ def map_lakera_detector_type_to_guardrail_type(
64
46
  return GuardrailType.OTHER
65
47
 
66
48
 
67
- @lru_cache(maxsize=512)
68
- def _schedule_guardrails_check(
49
+ def create_guardrail_request(
50
+ client_type: Type[GuardrailsClient],
69
51
  user_text: str,
70
52
  hello_rasa_user_id: str,
71
53
  hello_rasa_project_id: str,
72
- lakera_project_id: str,
73
- ) -> "asyncio.Task[GuardrailResponse]":
74
- """Return a cached asyncio.Task that resolves to Lakera's response.
75
-
76
- Args:
77
- user_text: The user message text to check for policy violations.
78
- hello_rasa_user_id: The user ID for the conversation.
79
- hello_rasa_project_id: The project ID for the conversation.
80
- lakera_project_id: The Lakera project ID to use for this check.
81
-
82
- Returns:
83
- An asyncio Task that resolves to a GuardrailResponse.
84
- """
85
- structlogger.debug("guardrails.cache_miss", text=user_text)
86
-
87
- loop = asyncio.get_running_loop()
88
- request = LakeraGuardrailRequest(
89
- lakera_project_id=lakera_project_id,
90
- hello_rasa_user_id=hello_rasa_user_id,
91
- hello_rasa_project_id=hello_rasa_project_id,
92
- messages=[{"role": ROLE_USER, "content": user_text}],
93
- )
94
-
95
- return loop.create_task(llm_service.guardrails.send_request(request))
96
-
97
-
98
- async def _detect_flagged_user_indices(
99
- items: List[Tuple[int, str]],
100
- *,
101
- hello_rasa_user_id: Optional[str],
102
- hello_rasa_project_id: Optional[str],
103
- lakera_project_id: str,
104
- log_prefix: str,
105
- ) -> Set[int]:
106
- """Run guardrail checks for provided (index, user_text) pairs.
107
-
108
- Args:
109
- items: List of tuples containing (index, user_text) to check.
110
- hello_rasa_user_id: The user ID for the conversation.
111
- hello_rasa_project_id: The project ID for the conversation.
112
- lakera_project_id: The Lakera project ID to use for this check.
113
- log_prefix: Prefix for logging messages.
114
-
115
- Returns:
116
- A set of indices that were flagged by the guardrails.
117
- """
118
- if not items:
119
- return set()
120
-
121
- # 1) Group indices by logical request key (hashable by value)
122
- indices_by_key: Dict[GuardrailRequestKey, List[int]] = {}
123
- for idx, text in items:
124
- key = GuardrailRequestKey(
125
- user_text=(text or "").strip(),
126
- hello_rasa_user_id=hello_rasa_user_id or "",
127
- hello_rasa_project_id=hello_rasa_project_id or "",
128
- lakera_project_id=lakera_project_id,
54
+ **kwargs: Any,
55
+ ) -> GuardrailRequest:
56
+ """Create a guardrail request."""
57
+
58
+ def _create_lakera_guardrail_request(
59
+ user_text: str,
60
+ hello_rasa_user_id: str,
61
+ hello_rasa_project_id: str,
62
+ **kwargs: Any,
63
+ ) -> LakeraGuardrailRequest:
64
+ """Create a Lakera guardrail request."""
65
+ return LakeraGuardrailRequest(
66
+ hello_rasa_user_id=hello_rasa_user_id,
67
+ hello_rasa_project_id=hello_rasa_project_id,
68
+ messages=[{"role": ROLE_USER, "content": user_text}],
69
+ **kwargs,
129
70
  )
130
- if not key.user_text:
131
- continue
132
- indices_by_key.setdefault(key, []).append(idx)
133
71
 
134
- if not indices_by_key:
135
- return set()
72
+ map_client_to_request: Dict[
73
+ Type[GuardrailsClient], Callable[..., GuardrailRequest]
74
+ ] = {
75
+ LakeraAIGuardrails: _create_lakera_guardrail_request,
76
+ }
136
77
 
137
- # 2) Create one task per logical key
138
- tasks_by_key: Dict[GuardrailRequestKey, asyncio.Task[GuardrailResponse]] = {}
139
- for key in indices_by_key:
140
- tasks_by_key[key] = _schedule_guardrails_check(
141
- user_text=key.user_text,
142
- hello_rasa_user_id=key.hello_rasa_user_id,
143
- hello_rasa_project_id=key.hello_rasa_project_id,
144
- lakera_project_id=key.lakera_project_id,
78
+ if client_type in map_client_to_request:
79
+ return map_client_to_request[client_type](
80
+ user_text,
81
+ hello_rasa_user_id,
82
+ hello_rasa_project_id,
83
+ **kwargs,
145
84
  )
146
-
147
- # 3) Await unique tasks once
148
- keys = list(tasks_by_key.keys())
149
- tasks = [tasks_by_key[k] for k in keys]
150
- responses = await asyncio.gather(*tasks, return_exceptions=True)
151
-
152
- # 4) Map results back to all corresponding indices
153
- flagged: Set[int] = set()
154
- for key, response in zip(keys, responses):
155
- if isinstance(response, Exception):
156
- structlogger.warning(f"{log_prefix}.request_failed", error=str(response))
157
- continue
158
- if response.flagged:
159
- flagged.update(indices_by_key.get(key, []))
160
-
161
- return flagged
162
-
163
-
164
- async def check_assistant_chat_for_policy_violations(
165
- tracker_context: TrackerContext,
166
- hello_rasa_user_id: Optional[str],
167
- hello_rasa_project_id: Optional[str],
168
- ) -> TrackerContext:
169
- """Return a sanitised TrackerContext with unsafe turns removed.
170
-
171
- Only user messages are moderated – assistant messages are assumed safe.
172
- LRU cache is used, so each unique user text is checked once.
173
-
174
- Args:
175
- tracker_context: The TrackerContext containing conversation turns.
176
- hello_rasa_user_id: The user ID for the conversation.
177
- hello_rasa_project_id: The project ID for the conversation.
178
-
179
- Returns:
180
- TrackerContext with unsafe turns removed.
181
- """
182
- # Collect (turn_index, user_text) for all turns with a user message
183
- items: List[Tuple[int, str]] = []
184
- for idx, turn in enumerate(tracker_context.conversation_turns):
185
- user_message = turn.user_message
186
- if not user_message:
187
- continue
188
-
189
- text = (user_message.text or "").strip()
190
- if not text:
191
- continue
192
-
193
- items.append((idx, text))
194
-
195
- flagged_turns = await _detect_flagged_user_indices(
196
- items,
197
- hello_rasa_user_id=hello_rasa_user_id,
198
- hello_rasa_project_id=hello_rasa_project_id,
199
- lakera_project_id=ASSISTANT_HISTORY_GUARDRAIL_PROJECT_ID,
200
- log_prefix="assistant_guardrails",
201
- )
202
-
203
- if not flagged_turns:
204
- return tracker_context
205
-
206
- structlogger.info(
207
- "assistant_guardrails.turns_flagged",
208
- count=len(flagged_turns),
209
- turn_indices=sorted(flagged_turns),
210
- )
211
-
212
- # Build a filtered TrackerContext
213
- safe_turns: List[AssistantConversationTurn] = [
214
- turn
215
- for idx, turn in enumerate(tracker_context.conversation_turns)
216
- if idx not in flagged_turns
217
- ]
218
-
219
- new_tracker_context = tracker_context.copy(deep=True)
220
- new_tracker_context.conversation_turns = safe_turns
221
- return new_tracker_context
222
-
223
-
224
- def _annotate_flagged_user_messages(
225
- history: List[CopilotChatMessage], flagged_user_indices: Set[int]
226
- ) -> None:
227
- """Mark flagged user messages in-place on the original history.
228
-
229
- Args:
230
- history: The copilot chat history containing messages.
231
- flagged_user_indices: Set of indices of user messages that were flagged.
232
- """
233
- if not flagged_user_indices:
234
- return
235
-
236
- total = len(history)
237
- for uidx in flagged_user_indices:
238
- if 0 <= uidx < total and history[uidx].role == ROLE_USER:
239
- history[
240
- uidx
241
- ].response_category = ResponseCategory.GUARDRAILS_POLICY_VIOLATION
242
-
243
-
244
- async def check_copilot_chat_for_policy_violations(
245
- context: CopilotContext,
246
- hello_rasa_user_id: Optional[str],
247
- hello_rasa_project_id: Optional[str],
248
- ) -> Optional[GeneratedContent]:
249
- """Check the copilot chat history for guardrail policy violations.
250
-
251
- Only user messages are moderated – assistant messages are assumed safe.
252
- LRU cache is used, so each unique user text is checked once.
253
-
254
- Args:
255
- context: The CopilotContext containing the copilot chat history.
256
- hello_rasa_user_id: The user ID for the conversation.
257
- hello_rasa_project_id: The project ID for the conversation.
258
-
259
- Returns:
260
- Returns a default violation response if the system flags any user message,
261
- otherwise return None.
262
- """
263
- history = context.copilot_chat_history
264
-
265
- # Collect (index, text) for user messages; skip ones already marked as violations
266
- items: List[Tuple[int, str]] = []
267
- for idx, message in enumerate(history):
268
- if message.response_category == ResponseCategory.GUARDRAILS_POLICY_VIOLATION:
269
- continue
270
- if message.role != ROLE_USER:
271
- continue
272
- formatted_message = message.to_openai_format()
273
- text = (formatted_message.get("content") or "").strip()
274
- if not text:
275
- continue
276
- items.append((idx, text))
277
-
278
- flagged_user_indices = await _detect_flagged_user_indices(
279
- items,
280
- hello_rasa_user_id=hello_rasa_user_id,
281
- hello_rasa_project_id=hello_rasa_project_id,
282
- lakera_project_id=COPILOT_HISTORY_GUARDRAIL_PROJECT_ID,
283
- log_prefix="copilot_guardrails",
284
- )
285
-
286
- _annotate_flagged_user_messages(history, flagged_user_indices)
287
-
288
- if not flagged_user_indices:
289
- return None
290
-
291
- # Identify the latest user message index in the current request
292
- last_user_idx: Optional[int] = None
293
- for i in range(len(history) - 1, -1, -1):
294
- if getattr(history[i], "role", None) == ROLE_USER:
295
- last_user_idx = i
296
- break
297
-
298
- # Remove flagged user messages and their next copilot messages
299
- indices_to_remove: Set[int] = set()
300
- total = len(history)
301
- for uidx in flagged_user_indices:
302
- indices_to_remove.add(uidx)
303
- next_idx = uidx + 1
304
- if (
305
- next_idx < total
306
- and getattr(history[next_idx], "role", None) == ROLE_COPILOT
307
- ):
308
- indices_to_remove.add(next_idx)
309
-
310
- # Apply sanitization
311
- filtered_history = [
312
- msg for i, msg in enumerate(history) if i not in indices_to_remove
313
- ]
314
- if len(filtered_history) != len(history):
315
- structlogger.info(
316
- "copilot_guardrails.history_sanitized",
317
- removed_indices=sorted(indices_to_remove),
318
- removed_messages=len(history) - len(filtered_history),
319
- kept_messages=len(filtered_history),
85
+ else:
86
+ message = f"Unsupported guardrail client: {type(client_type)}"
87
+ structlogger.error(
88
+ "guardrails_policy_checker"
89
+ ".create_guardrail_request"
90
+ ".unsupported_guardrail_client",
91
+ message=message,
92
+ guardrail_client=client_type,
320
93
  )
321
- context.copilot_chat_history = filtered_history
322
-
323
- # Block only if the latest user message in this request was flagged
324
- if last_user_idx is not None and last_user_idx in flagged_user_indices:
325
- return CopilotResponseHandler.respond_to_guardrail_policy_violations()
326
-
327
- # Otherwise proceed (following messages are respected)
328
- return None
94
+ raise ValueError(message)
rasa/builder/jobs.py CHANGED
@@ -16,10 +16,13 @@ from rasa.builder.models import (
16
16
  JobStatusEvent,
17
17
  )
18
18
  from rasa.builder.project_generator import ProjectGenerator
19
- from rasa.builder.training_service import train_and_load_agent
19
+ from rasa.builder.training_service import (
20
+ train_and_load_agent,
21
+ try_load_existing_agent,
22
+ update_agent,
23
+ )
20
24
  from rasa.builder.validation_service import validate_project
21
25
  from rasa.cli.scaffold import ProjectTemplateName
22
- from rasa.core.channels.studio_chat import StudioChatInput
23
26
 
24
27
  structlogger = structlog.get_logger()
25
28
 
@@ -45,7 +48,6 @@ async def run_prompt_to_bot_job(
45
48
  prompt: The natural language prompt for bot generation.
46
49
  """
47
50
  project_generator: ProjectGenerator = app.ctx.project_generator
48
- input_channel: StudioChatInput = app.ctx.input_channel
49
51
 
50
52
  await push_job_status_event(job, JobStatus.received)
51
53
 
@@ -60,10 +62,8 @@ async def run_prompt_to_bot_job(
60
62
 
61
63
  # 2. Training
62
64
  await push_job_status_event(job, JobStatus.training)
63
- app.ctx.agent = await train_and_load_agent(
64
- project_generator.get_training_input()
65
- )
66
- input_channel.agent = app.ctx.agent
65
+ agent = await train_and_load_agent(project_generator.get_training_input())
66
+ update_agent(agent, app)
67
67
  await push_job_status_event(job, JobStatus.train_success)
68
68
 
69
69
  structlogger.info(
@@ -128,8 +128,7 @@ async def run_template_to_bot_job(
128
128
  job: The job information instance.
129
129
  template_name: The name of the template to use for bot generation.
130
130
  """
131
- project_generator = app.ctx.project_generator
132
- input_channel = app.ctx.input_channel
131
+ project_generator: ProjectGenerator = app.ctx.project_generator
133
132
 
134
133
  await push_job_status_event(job, JobStatus.received)
135
134
 
@@ -142,10 +141,14 @@ async def run_template_to_bot_job(
142
141
 
143
142
  # 2) Training
144
143
  await push_job_status_event(job, JobStatus.training)
145
- app.ctx.agent = await train_and_load_agent(
146
- project_generator.get_training_input()
147
- )
148
- input_channel.agent = app.ctx.agent
144
+ agent = await try_load_existing_agent(project_generator.project_folder)
145
+ if agent is None:
146
+ agent = await train_and_load_agent(project_generator.get_training_input())
147
+ else:
148
+ structlogger.info(
149
+ "bot_builder_service.template_to_bot.agent_loaded_from_cache",
150
+ )
151
+ update_agent(agent, app)
149
152
  await push_job_status_event(job, JobStatus.train_success)
150
153
 
151
154
  # 3) Done
@@ -204,17 +207,26 @@ async def run_template_to_bot_job(
204
207
  job_manager.mark_done(job, error=str(exc))
205
208
 
206
209
 
207
- async def run_update_files_job(
210
+ async def run_replace_all_files_job(
208
211
  app: "Sanic",
209
212
  job: JobInfo,
210
213
  bot_files: dict,
211
214
  ) -> None:
215
+ """Run the replace-all-files job in the background.
216
+
217
+ This replaces all bot files with the provided files and deletes any files
218
+ not included in the request (excluding .rasa/ and models/ directories).
219
+
220
+ Args:
221
+ app: The Sanic application instance.
222
+ job: The job information instance.
223
+ bot_files: Dictionary of file names to content for replacement.
224
+ """
212
225
  project_generator = app.ctx.project_generator
213
- input_channel = app.ctx.input_channel
214
226
  await push_job_status_event(job, JobStatus.received)
215
227
 
216
228
  try:
217
- project_generator.update_bot_files(bot_files)
229
+ project_generator.replace_all_bot_files(bot_files)
218
230
 
219
231
  # 1. Validating
220
232
  await push_job_status_event(job, JobStatus.validating)
@@ -226,8 +238,8 @@ async def run_update_files_job(
226
238
 
227
239
  # 2. Training
228
240
  await push_job_status_event(job, JobStatus.training)
229
- app.ctx.agent = await train_and_load_agent(training_input)
230
- input_channel.agent = app.ctx.agent
241
+ agent = await train_and_load_agent(training_input)
242
+ update_agent(agent, app)
231
243
  await push_job_status_event(job, JobStatus.train_success)
232
244
 
233
245
  await push_job_status_event(job, JobStatus.done)
@@ -238,7 +250,7 @@ async def run_update_files_job(
238
250
  if config.VALIDATION_FAIL_ON_WARNINGS:
239
251
  log_levels.append("warning")
240
252
  structlogger.debug(
241
- "update_files_job.validation_error",
253
+ "replace_all_files_job.validation_error",
242
254
  job_id=job.id,
243
255
  error=str(exc),
244
256
  validation_logs=exc.validation_logs,
@@ -252,7 +264,7 @@ async def run_update_files_job(
252
264
 
253
265
  except TrainingError as exc:
254
266
  structlogger.debug(
255
- "update_files_job.train_error",
267
+ "replace_all_files_job.train_error",
256
268
  job_id=job.id,
257
269
  error=str(exc),
258
270
  )
@@ -262,7 +274,7 @@ async def run_update_files_job(
262
274
  except Exception as exc:
263
275
  # Capture full traceback for anything truly unexpected
264
276
  structlogger.exception(
265
- "update_files_job.unexpected_error",
277
+ "replace_all_files_job.unexpected_error",
266
278
  job_id=job.id,
267
279
  error=str(exc),
268
280
  )
@@ -19,7 +19,11 @@ from rasa.builder.copilot.copilot_templated_message_provider import (
19
19
  load_copilot_internal_message_templates,
20
20
  )
21
21
  from rasa.builder.exceptions import LLMGenerationError
22
- from rasa.builder.guardrails.lakera import LakeraAIGuardrails
22
+ from rasa.builder.guardrails.clients import (
23
+ GuardrailsClient,
24
+ LakeraAIGuardrails,
25
+ )
26
+ from rasa.builder.guardrails.policy_checker import GuardrailsPolicyChecker
23
27
  from rasa.constants import PACKAGE_NAME
24
28
  from rasa.shared.constants import DOMAIN_SCHEMA_FILE, RESPONSES_SCHEMA_FILE
25
29
  from rasa.shared.core.flows.yaml_flows_io import FLOWS_SCHEMA_FILE
@@ -37,7 +41,8 @@ class LLMService:
37
41
  self._domain_schema: Optional[Dict[str, Any]] = None
38
42
  self._flows_schema: Optional[Dict[str, Any]] = None
39
43
  self._copilot: Optional[Copilot] = None
40
- self._guardrails: Optional[LakeraAIGuardrails] = None
44
+ self._guardrails: Optional[GuardrailsClient] = None
45
+ self._guardrails_policy_checker: Optional[GuardrailsPolicyChecker] = None
41
46
  self._copilot_response_handler: Optional[CopilotResponseHandler] = None
42
47
  self._copilot_internal_message_templates: Optional[Dict[str, str]] = None
43
48
 
@@ -77,11 +82,14 @@ class LLMService:
77
82
  raise
78
83
 
79
84
  @property
80
- def guardrails(self) -> LakeraAIGuardrails:
85
+ def guardrails(self) -> Optional[GuardrailsClient]:
81
86
  """Get or lazy create guardrails instance."""
82
- if self._guardrails is None:
83
- self._guardrails = LakeraAIGuardrails()
87
+ if not config.ENABLE_GUARDRAILS:
88
+ return None
89
+ # TODO: Replace with Open Source guardrails implementation once it's ready
84
90
  try:
91
+ if self._guardrails is None:
92
+ self._guardrails = LakeraAIGuardrails()
85
93
  return self._guardrails
86
94
  except Exception as e:
87
95
  structlogger.error(
@@ -91,6 +99,25 @@ class LLMService:
91
99
  )
92
100
  raise
93
101
 
102
+ @property
103
+ def guardrails_policy_checker(self) -> Optional[GuardrailsPolicyChecker]:
104
+ """Get or lazy create guardrails policy checker instance."""
105
+ try:
106
+ if self._guardrails_policy_checker is None and self.guardrails is not None:
107
+ self._guardrails_policy_checker = GuardrailsPolicyChecker(
108
+ self.guardrails
109
+ )
110
+ return self._guardrails_policy_checker
111
+ except Exception as e:
112
+ structlogger.error(
113
+ "llm_service.guardrails_policy_checker.error",
114
+ event_info=(
115
+ "LLM Service: Error getting guardrails policy checker instance."
116
+ ),
117
+ error=str(e),
118
+ )
119
+ raise
120
+
94
121
  @property
95
122
  def copilot_internal_message_templates(self) -> Dict[str, str]:
96
123
  """Get or lazy load copilot internal message templates."""
rasa/builder/main.py CHANGED
@@ -22,10 +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.core.agent import Agent, load_agent
26
- from rasa.core.available_endpoints import AvailableEndpoints
25
+ from rasa.builder.training_service import try_load_existing_agent, update_agent
27
26
  from rasa.core.channels.studio_chat import StudioChatInput
28
- from rasa.model import get_latest_model
27
+ from rasa.model_manager.warm_rasa_process import warmup
29
28
  from rasa.server import configure_cors
30
29
  from rasa.utils.common import configure_logging_and_warnings
31
30
  from rasa.utils.log_utils import configure_structlog
@@ -60,63 +59,6 @@ def setup_input_channel() -> StudioChatInput:
60
59
  return StudioChatInput.from_credentials(credentials=studio_chat_credentials)
61
60
 
62
61
 
63
- async def try_load_existing_agent(project_folder: str) -> Optional[Agent]:
64
- """Try to load an existing agent from the project's models directory.
65
-
66
- Args:
67
- project_folder: Path to the project folder
68
-
69
- Returns:
70
- Loaded Agent instance if successful, None otherwise
71
- """
72
- models_dir = os.path.join(project_folder, "models")
73
-
74
- if not os.path.exists(models_dir) or not os.path.isdir(models_dir):
75
- structlogger.debug("No models directory found", models_dir=models_dir)
76
- return None
77
-
78
- try:
79
- # Find the latest model in the models directory
80
- latest_model_path = get_latest_model(models_dir)
81
- if not latest_model_path:
82
- structlogger.debug(
83
- "No models found in models directory", models_dir=models_dir
84
- )
85
- return None
86
-
87
- structlogger.info(
88
- "Found existing model, attempting to load", model_path=latest_model_path
89
- )
90
-
91
- # Get available endpoints for agent loading
92
- available_endpoints = AvailableEndpoints.get_instance()
93
-
94
- # Load the agent
95
- agent = await load_agent(
96
- model_path=latest_model_path, endpoints=available_endpoints
97
- )
98
-
99
- if agent and agent.is_ready():
100
- structlogger.info(
101
- "Successfully loaded existing agent", model_path=latest_model_path
102
- )
103
- return agent
104
- else:
105
- structlogger.warning(
106
- "Agent loaded but not ready", model_path=latest_model_path
107
- )
108
- return None
109
-
110
- except Exception as e:
111
- structlogger.warning(
112
- "Failed to load existing agent",
113
- models_dir=models_dir,
114
- error=str(e),
115
- exc_info=True,
116
- )
117
- return None
118
-
119
-
120
62
  def setup_middleware(app: Sanic) -> None:
121
63
  """Setup middleware for request/response processing."""
122
64
 
@@ -157,7 +99,6 @@ def create_app(project_folder: str) -> Sanic:
157
99
  use_authentication=app.config.USE_AUTHENTICATION,
158
100
  rasa_version=rasa.__version__,
159
101
  )
160
- app.ctx.agent = None
161
102
 
162
103
  # Set up project generator and store in app context
163
104
  app.ctx.project_generator = setup_project_generator(project_folder)
@@ -165,6 +106,8 @@ def create_app(project_folder: str) -> Sanic:
165
106
  # Set up input channel and store in app context
166
107
  app.ctx.input_channel = setup_input_channel()
167
108
 
109
+ update_agent(None, app)
110
+
168
111
  # Register the blueprint
169
112
  app.blueprint(bp)
170
113
 
@@ -196,7 +139,7 @@ def create_app(project_folder: str) -> Sanic:
196
139
  try:
197
140
  existing_agent = await try_load_existing_agent(project_folder)
198
141
  if existing_agent:
199
- app.ctx.agent = existing_agent
142
+ update_agent(existing_agent, app)
200
143
  structlogger.info("Agent loaded on server startup")
201
144
  else:
202
145
  structlogger.info(
@@ -208,6 +151,33 @@ def create_app(project_folder: str) -> Sanic:
208
151
  return app
209
152
 
210
153
 
154
+ def _apply_llm_overrides_from_builder_env() -> None:
155
+ # Prefer a dedicated builder key, fall back to license if you proxy with it
156
+ if not config.HELLO_LLM_PROXY_BASE_URL:
157
+ return
158
+
159
+ structlogger.debug(
160
+ "builder.main.using_llm_proxy", base_url=config.HELLO_LLM_PROXY_BASE_URL
161
+ )
162
+
163
+ if not config.RASA_PRO_LICENSE:
164
+ structlogger.error(
165
+ "copilot.proxy_missing_license",
166
+ event_info=(
167
+ "HELLO_LLM_PROXY_BASE_URL is set but RASA_PRO_LICENSE is missing."
168
+ ),
169
+ )
170
+ return
171
+
172
+ if not os.getenv("OPENAI_API_BASE") and not os.getenv("OPENAI_API_KEY"):
173
+ base_url = config.HELLO_LLM_PROXY_BASE_URL.rstrip("/")
174
+ # needed for litellm client
175
+ os.environ["OPENAI_API_BASE"] = base_url
176
+ # needed for openai async client
177
+ os.environ["OPENAI_BASE_URL"] = base_url
178
+ os.environ["OPENAI_API_KEY"] = config.RASA_PRO_LICENSE
179
+
180
+
211
181
  def main(project_folder: Optional[str] = None) -> None:
212
182
  """Main entry point."""
213
183
  try:
@@ -218,6 +188,12 @@ def main(project_folder: Optional[str] = None) -> None:
218
188
  rasa.telemetry.initialize_telemetry()
219
189
  rasa.telemetry.initialize_error_reporting(private_mode=False)
220
190
 
191
+ _apply_llm_overrides_from_builder_env()
192
+
193
+ if config.HELLO_RASA_PROJECT_ID:
194
+ # ensures long import times for modules are ahead of time
195
+ warmup()
196
+
221
197
  # working directory needs to be the project folder, e.g.
222
198
  # for relative paths (./docs) in a projects config to work
223
199
  if not project_folder: