rasa-pro 3.14.0.dev5__py3-none-any.whl → 3.14.0.dev6__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 (464) hide show
  1. rasa/agents/agent_factory.py +122 -0
  2. rasa/agents/agent_manager.py +163 -0
  3. rasa/agents/constants.py +40 -0
  4. rasa/agents/core/agent_protocol.py +107 -0
  5. rasa/agents/core/types.py +70 -0
  6. rasa/agents/exceptions.py +8 -0
  7. rasa/agents/protocol/__init__.py +5 -0
  8. rasa/agents/protocol/a2a/a2a_agent.py +662 -0
  9. rasa/agents/protocol/mcp/mcp_base_agent.py +684 -0
  10. rasa/agents/protocol/mcp/mcp_open_agent.py +290 -0
  11. rasa/agents/protocol/mcp/mcp_task_agent.py +484 -0
  12. rasa/agents/schemas/__init__.py +12 -0
  13. rasa/agents/schemas/agent_input.py +38 -0
  14. rasa/agents/schemas/agent_output.py +26 -0
  15. rasa/agents/schemas/agent_tool_result.py +67 -0
  16. rasa/agents/schemas/agent_tool_schema.py +134 -0
  17. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +15 -0
  18. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +17 -0
  19. rasa/agents/utils.py +72 -0
  20. rasa/api.py +5 -0
  21. rasa/cli/arguments/default_arguments.py +12 -0
  22. rasa/cli/arguments/run.py +2 -0
  23. rasa/cli/dialogue_understanding_test.py +4 -0
  24. rasa/cli/e2e_test.py +4 -0
  25. rasa/cli/inspect.py +3 -0
  26. rasa/cli/llm_fine_tuning.py +5 -0
  27. rasa/cli/project_templates/tutorial/config.yml +1 -2
  28. rasa/cli/run.py +4 -0
  29. rasa/cli/scaffold.py +2 -46
  30. rasa/cli/shell.py +3 -0
  31. rasa/constants.py +6 -0
  32. rasa/core/actions/action.py +56 -10
  33. rasa/core/agent.py +19 -1
  34. rasa/core/available_agents.py +199 -0
  35. rasa/core/available_endpoints.py +30 -0
  36. rasa/core/channels/channel.py +3 -4
  37. rasa/core/channels/development_inspector.py +4 -4
  38. rasa/core/channels/hangouts.py +2 -2
  39. rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-63212852.js} +1 -1
  40. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-eecf6b13.js} +1 -1
  41. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-8f798a9a.js} +1 -1
  42. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +1 -0
  43. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-df71a04c.js} +1 -1
  44. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-9b275968.js} +1 -1
  45. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +1 -0
  46. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-1c669cad.js} +1 -1
  47. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-b1553799.js} +1 -1
  48. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-112388d6.js} +1 -1
  49. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-fdebec47.js} +1 -1
  50. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-6280ede1.js} +1 -1
  51. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +1 -0
  52. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-e1dc03e5.js} +1 -1
  53. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-83f68c51.js} +1 -1
  54. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-22f8666f.js} +1 -1
  55. rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-ca9e6217.js} +1 -1
  56. rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-c5ceb692.js} +1 -1
  57. rasa/core/channels/inspector/dist/assets/index-3e293924.js +1353 -0
  58. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-faa9999b.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-c4dda8d9.js} +1 -1
  60. rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-d4307784.js} +1 -1
  61. rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-0567aaa7.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-c11b95cf.js} +1 -1
  63. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-0c7d3ca9.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-34b433fa.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-4cab816e.js} +1 -1
  66. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-8c22fa9e.js} +1 -1
  67. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-70ce9e8e.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fbcd7fc9.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-45f05ea6.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-beab1ea6.js} +1 -1
  71. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-2f29dbd5.js} +1 -1
  72. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-951eac83.js} +1 -1
  73. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-897fbfdd.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-d667fac1.js} +1 -1
  75. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e3205144.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-4abeb0e2.js} +1 -1
  77. rasa/core/channels/inspector/dist/index.html +2 -2
  78. rasa/core/channels/inspector/index.html +1 -1
  79. rasa/core/channels/inspector/src/App.tsx +11 -10
  80. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +3 -12
  81. rasa/core/channels/inspector/src/components/DialogueStack.tsx +6 -4
  82. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  83. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  84. rasa/core/channels/inspector/src/types.ts +4 -0
  85. rasa/core/channels/socketio.py +51 -212
  86. rasa/core/channels/studio_chat.py +29 -49
  87. rasa/core/channels/voice_stream/genesys.py +1 -1
  88. rasa/core/channels/voice_stream/voice_channel.py +3 -5
  89. rasa/core/constants.py +4 -0
  90. rasa/core/policies/enterprise_search_policy.py +11 -6
  91. rasa/core/policies/flow_policy.py +4 -4
  92. rasa/core/policies/flows/flow_executor.py +470 -45
  93. rasa/core/policies/flows/mcp_tool_executor.py +277 -0
  94. rasa/core/policies/intentless_policy.py +1 -1
  95. rasa/core/policies/unexpected_intent_policy.py +1 -0
  96. rasa/core/processor.py +18 -15
  97. rasa/core/run.py +11 -14
  98. rasa/core/tracker_stores/tracker_store.py +3 -7
  99. rasa/core/train.py +1 -1
  100. rasa/core/training/interactive.py +16 -16
  101. rasa/core/training/story_conflict.py +5 -5
  102. rasa/core/utils.py +21 -1
  103. rasa/dialogue_understanding/commands/__init__.py +8 -0
  104. rasa/dialogue_understanding/commands/cancel_flow_command.py +97 -4
  105. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +11 -0
  106. rasa/dialogue_understanding/commands/clarify_command.py +10 -0
  107. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  108. rasa/dialogue_understanding/commands/knowledge_answer_command.py +11 -0
  109. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  110. rasa/dialogue_understanding/commands/start_flow_command.py +164 -8
  111. rasa/dialogue_understanding/commands/utils.py +6 -2
  112. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  113. rasa/dialogue_understanding/generator/flow_retrieval.py +9 -10
  114. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  115. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  116. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  117. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +61 -0
  118. rasa/{cli/project_templates/telco/prompts/command-generator.jinja2 → dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2} +7 -3
  119. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +81 -0
  120. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +81 -0
  121. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +7 -6
  122. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +7 -6
  123. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +41 -2
  124. rasa/dialogue_understanding/patterns/continue_interrupted.py +163 -1
  125. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +52 -8
  126. rasa/dialogue_understanding/processor/command_processor.py +31 -15
  127. rasa/dialogue_understanding/stack/dialogue_stack.py +123 -2
  128. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  129. rasa/dialogue_understanding/stack/utils.py +17 -2
  130. rasa/dialogue_understanding_test/du_test_runner.py +7 -2
  131. rasa/e2e_test/e2e_test_runner.py +12 -2
  132. rasa/engine/caching.py +2 -2
  133. rasa/engine/recipes/default_components.py +10 -18
  134. rasa/engine/storage/local_model_storage.py +2 -45
  135. rasa/graph_components/validators/default_recipe_validator.py +134 -134
  136. rasa/hooks.py +5 -5
  137. rasa/llm_fine_tuning/utils.py +2 -2
  138. rasa/model_manager/model_api.py +5 -4
  139. rasa/model_manager/runner_service.py +1 -1
  140. rasa/model_manager/socket_bridge.py +14 -20
  141. rasa/model_manager/trainer_service.py +9 -12
  142. rasa/model_manager/utils.py +29 -1
  143. rasa/model_manager/warm_rasa_process.py +1 -1
  144. rasa/nlu/extractors/extractor.py +2 -1
  145. rasa/plugin.py +8 -8
  146. rasa/privacy/privacy_manager.py +11 -2
  147. rasa/server.py +14 -2
  148. rasa/shared/agents/utils.py +35 -0
  149. rasa/shared/constants.py +5 -0
  150. rasa/shared/core/constants.py +12 -1
  151. rasa/shared/core/domain.py +11 -58
  152. rasa/shared/core/events.py +327 -0
  153. rasa/shared/core/flows/flow_step.py +1 -7
  154. rasa/shared/core/flows/flows_list.py +15 -5
  155. rasa/shared/core/flows/flows_yaml_schema.json +112 -186
  156. rasa/shared/core/flows/steps/call.py +53 -5
  157. rasa/shared/core/flows/validation.py +177 -7
  158. rasa/shared/core/flows/yaml_flows_io.py +9 -17
  159. rasa/shared/core/slots.py +2 -6
  160. rasa/shared/core/trackers.py +5 -2
  161. rasa/shared/exceptions.py +4 -0
  162. rasa/shared/importers/importer.py +0 -6
  163. rasa/shared/importers/rasa.py +1 -1
  164. rasa/shared/importers/utils.py +10 -80
  165. rasa/shared/providers/_utils.py +44 -60
  166. rasa/shared/providers/embedding/default_litellm_embedding_client.py +0 -2
  167. rasa/shared/providers/llm/_base_litellm_client.py +39 -7
  168. rasa/shared/providers/llm/default_litellm_llm_client.py +0 -2
  169. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  170. rasa/shared/providers/llm/llm_client.py +7 -3
  171. rasa/shared/providers/llm/llm_response.py +66 -0
  172. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  173. rasa/shared/utils/llm.py +28 -5
  174. rasa/shared/utils/mcp/server_connection.py +166 -0
  175. rasa/shared/utils/schemas/events.py +42 -0
  176. rasa/shared/utils/yaml.py +3 -1
  177. rasa/studio/upload.py +47 -16
  178. rasa/telemetry.py +23 -97
  179. rasa/tracing/instrumentation/instrumentation.py +14 -10
  180. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  181. rasa/utils/common.py +79 -0
  182. rasa/utils/io.py +9 -27
  183. rasa/utils/json_utils.py +1 -6
  184. rasa/utils/log_utils.py +2 -6
  185. rasa/utils/ml_utils.py +1 -1
  186. rasa/utils/tensorflow/rasa_layers.py +1 -1
  187. rasa/utils/train_utils.py +15 -15
  188. rasa/validator.py +19 -21
  189. rasa/version.py +1 -1
  190. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/METADATA +14 -17
  191. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/RECORD +201 -432
  192. rasa/builder/README.md +0 -120
  193. rasa/builder/auth.py +0 -176
  194. rasa/builder/config.py +0 -115
  195. rasa/builder/copilot/constants.py +0 -25
  196. rasa/builder/copilot/copilot.py +0 -372
  197. rasa/builder/copilot/copilot_response_handler.py +0 -487
  198. rasa/builder/copilot/copilot_templated_message_provider.py +0 -58
  199. rasa/builder/copilot/exceptions.py +0 -20
  200. rasa/builder/copilot/models.py +0 -431
  201. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +0 -726
  202. rasa/builder/copilot/telemetry.py +0 -195
  203. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +0 -16
  204. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +0 -26
  205. rasa/builder/document_retrieval/constants.py +0 -15
  206. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +0 -64
  207. rasa/builder/document_retrieval/inkeep_document_retrieval.py +0 -238
  208. rasa/builder/document_retrieval/models.py +0 -62
  209. rasa/builder/download.py +0 -140
  210. rasa/builder/exceptions.py +0 -55
  211. rasa/builder/guardrails/__init__.py +0 -1
  212. rasa/builder/guardrails/constants.py +0 -3
  213. rasa/builder/guardrails/exceptions.py +0 -4
  214. rasa/builder/guardrails/lakera.py +0 -206
  215. rasa/builder/guardrails/models.py +0 -199
  216. rasa/builder/guardrails/utils.py +0 -305
  217. rasa/builder/job_manager.py +0 -87
  218. rasa/builder/jobs.py +0 -234
  219. rasa/builder/llm_service.py +0 -246
  220. rasa/builder/logging_utils.py +0 -209
  221. rasa/builder/main.py +0 -174
  222. rasa/builder/models.py +0 -197
  223. rasa/builder/project_generator.py +0 -450
  224. rasa/builder/project_info.py +0 -72
  225. rasa/builder/scrape_rasa_docs.py +0 -97
  226. rasa/builder/service.py +0 -1142
  227. rasa/builder/shared/tracker_context.py +0 -212
  228. rasa/builder/skill_to_bot_prompt.jinja2 +0 -164
  229. rasa/builder/training_service.py +0 -132
  230. rasa/builder/validation_service.py +0 -93
  231. rasa/cli/project_templates/basic/actions/action_api.py +0 -15
  232. rasa/cli/project_templates/basic/actions/action_human_handoff.py +0 -44
  233. rasa/cli/project_templates/basic/config.yml +0 -23
  234. rasa/cli/project_templates/basic/credentials.yml +0 -34
  235. rasa/cli/project_templates/basic/data/general/feedback.yml +0 -20
  236. rasa/cli/project_templates/basic/data/general/goodbye.yml +0 -6
  237. rasa/cli/project_templates/basic/data/general/hello.yml +0 -7
  238. rasa/cli/project_templates/basic/data/general/help.yml +0 -6
  239. rasa/cli/project_templates/basic/data/general/human_handoff.yml +0 -16
  240. rasa/cli/project_templates/basic/data/general/welcome.yml +0 -9
  241. rasa/cli/project_templates/basic/data/system/pattern_completed.yml +0 -7
  242. rasa/cli/project_templates/basic/data/system/pattern_correction.yml +0 -7
  243. rasa/cli/project_templates/basic/data/system/pattern_search.yml +0 -8
  244. rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +0 -8
  245. rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +0 -65
  246. rasa/cli/project_templates/basic/docs/template.txt +0 -7
  247. rasa/cli/project_templates/basic/domain/general/assistant_details.yml +0 -12
  248. rasa/cli/project_templates/basic/domain/general/bot_identity.yml +0 -5
  249. rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +0 -5
  250. rasa/cli/project_templates/basic/domain/general/feedback.yml +0 -28
  251. rasa/cli/project_templates/basic/domain/general/goodbye.yml +0 -7
  252. rasa/cli/project_templates/basic/domain/general/help.yml +0 -5
  253. rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +0 -35
  254. rasa/cli/project_templates/basic/domain/general/utils.yml +0 -13
  255. rasa/cli/project_templates/basic/domain/general/welcome.yml +0 -7
  256. rasa/cli/project_templates/basic/endpoints.yml +0 -73
  257. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
  258. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  259. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  260. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  261. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  262. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  263. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  264. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  265. rasa/cli/project_templates/finance/actions/database.py +0 -277
  266. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  267. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  268. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  269. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  270. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  271. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  272. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +0 -18
  273. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  274. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  275. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  276. rasa/cli/project_templates/finance/config.yml +0 -21
  277. rasa/cli/project_templates/finance/credentials.yml +0 -32
  278. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  279. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  280. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  281. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  282. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  283. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  284. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  285. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  286. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +0 -10
  287. rasa/cli/project_templates/finance/data/cards/block_card.yml +0 -66
  288. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  289. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  290. rasa/cli/project_templates/finance/data/general/feedback.yml +0 -20
  291. rasa/cli/project_templates/finance/data/general/goodbye.yml +0 -6
  292. rasa/cli/project_templates/finance/data/general/hello.yml +0 -7
  293. rasa/cli/project_templates/finance/data/general/help.yml +0 -9
  294. rasa/cli/project_templates/finance/data/general/human_handoff.yml +0 -16
  295. rasa/cli/project_templates/finance/data/general/welcome.yml +0 -9
  296. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  297. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +0 -7
  298. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +0 -7
  299. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +0 -8
  300. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +0 -8
  301. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  302. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  303. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  304. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  305. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  306. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  307. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  308. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  309. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  310. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  311. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  312. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +0 -67
  313. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  314. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  315. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  316. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  317. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  318. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  319. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  320. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  321. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  322. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  323. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  324. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  325. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  326. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  327. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  328. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  329. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  330. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  331. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  332. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  333. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  334. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  335. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  336. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  337. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  338. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  339. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  340. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  341. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  342. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  343. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  344. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  345. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  346. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  347. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  348. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  349. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  350. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  351. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  352. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  353. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  354. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  355. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  356. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  357. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  358. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  359. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  360. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  361. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  362. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  363. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  364. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  365. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  366. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  367. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  368. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  369. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  370. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  371. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  372. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  373. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  374. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  375. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  376. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  377. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  378. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  379. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  380. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  381. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  382. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  383. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  384. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  385. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  386. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  387. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  388. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  389. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  390. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  391. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  392. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  393. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  394. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +0 -11
  395. rasa/cli/project_templates/finance/domain/cards/block_card.yml +0 -101
  396. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  397. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
  398. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  399. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +0 -5
  400. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  401. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -28
  402. rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
  403. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  404. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +0 -30
  405. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  406. rasa/cli/project_templates/finance/domain/general/welcome.yml +0 -8
  407. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  408. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  409. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  410. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +0 -79
  411. rasa/cli/project_templates/finance/endpoints.yml +0 -63
  412. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
  413. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  414. rasa/cli/project_templates/telco/actions/actions_billing.py +0 -204
  415. rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +0 -48
  416. rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +0 -28
  417. rasa/cli/project_templates/telco/actions/actions_session_start.py +0 -18
  418. rasa/cli/project_templates/telco/config.yml +0 -25
  419. rasa/cli/project_templates/telco/credentials.yml +0 -33
  420. rasa/cli/project_templates/telco/csvs/billing.csv +0 -10
  421. rasa/cli/project_templates/telco/csvs/customers.csv +0 -5
  422. rasa/cli/project_templates/telco/data/flows/flow_global.yml +0 -5
  423. rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +0 -8
  424. rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +0 -7
  425. rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +0 -73
  426. rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +0 -45
  427. rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +0 -7
  428. rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +0 -6
  429. rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +0 -7
  430. rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +0 -9
  431. rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +0 -1
  432. rasa/cli/project_templates/telco/docs/restart_router.txt +0 -6
  433. rasa/cli/project_templates/telco/docs/run_speed_test.txt +0 -6
  434. rasa/cli/project_templates/telco/domain/domain_global.yml +0 -29
  435. rasa/cli/project_templates/telco/domain/domain_patterns.yml +0 -17
  436. rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +0 -20
  437. rasa/cli/project_templates/telco/domain/domain_reset_router.yml +0 -11
  438. rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +0 -24
  439. rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +0 -74
  440. rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +0 -102
  441. rasa/cli/project_templates/telco/endpoints.yml +0 -60
  442. rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +0 -62
  443. rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +0 -130
  444. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +0 -68
  445. rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +0 -13
  446. rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +0 -47
  447. rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +0 -21
  448. rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +0 -15
  449. rasa/core/channels/constants.py +0 -3
  450. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
  451. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
  452. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
  453. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
  454. rasa/utils/openapi.py +0 -144
  455. /rasa/{builder → agents}/__init__.py +0 -0
  456. /rasa/{builder/copilot → agents/core}/__init__.py +0 -0
  457. /rasa/{builder/copilot/prompts → agents/protocol/a2a}/__init__.py +0 -0
  458. /rasa/{builder/copilot/templated_messages → agents/protocol/mcp}/__init__.py +0 -0
  459. /rasa/{builder/document_retrieval → agents/templates}/__init__.py +0 -0
  460. /rasa/{cli/project_templates/finance/actions/accounts → shared/agents}/__init__.py +0 -0
  461. /rasa/{cli/project_templates/finance/actions/cards → shared/utils/mcp}/__init__.py +0 -0
  462. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/NOTICE +0 -0
  463. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/WHEEL +0 -0
  464. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/entry_points.txt +0 -0
@@ -8,6 +8,13 @@ from typing import Any, Callable, Dict, List, Optional
8
8
  import jsonpatch
9
9
  import structlog
10
10
 
11
+ from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
12
+ AgentStackFrame,
13
+ AgentState,
14
+ FlowStackFrameType,
15
+ UserFlowStackFrame,
16
+ )
17
+
11
18
  if typing.TYPE_CHECKING:
12
19
  from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
13
20
 
@@ -91,6 +98,42 @@ class DialogueStack:
91
98
  """
92
99
  return self.frames.pop()
93
100
 
101
+ def move_frames_to_top(self, frames_to_move: List["DialogueStackFrame"]) -> None:
102
+ """Moves specified frames to top of stack while preserving their relative order.
103
+
104
+ Args:
105
+ frames_to_move: The frames to move to the top of the stack.
106
+ """
107
+ # Get frames that are not being moved
108
+ frames_to_keep = [frame for frame in self.frames if frame not in frames_to_move]
109
+
110
+ # Reorder: keep frames first, then moved frames
111
+ self.frames = frames_to_keep + frames_to_move
112
+
113
+ # set all frames to interrupt except for LINK and CALL
114
+ for frame in self.frames:
115
+ if (
116
+ isinstance(frame, UserFlowStackFrame)
117
+ and frame.frame_type == FlowStackFrameType.LINK
118
+ ):
119
+ continue
120
+ if (
121
+ isinstance(frame, UserFlowStackFrame)
122
+ and frame.frame_type == FlowStackFrameType.CALL
123
+ ):
124
+ continue
125
+ if (
126
+ isinstance(frame, UserFlowStackFrame)
127
+ and frame.frame_type == FlowStackFrameType.REGULAR
128
+ ):
129
+ frame.frame_type = FlowStackFrameType.INTERRUPT
130
+
131
+ # set the first frame to regular
132
+ for frame in self.frames:
133
+ if isinstance(frame, UserFlowStackFrame):
134
+ frame.frame_type = FlowStackFrameType.REGULAR
135
+ return
136
+
94
137
  def current_context(self) -> Dict[str, Any]:
95
138
  """Returns the context of the topmost frame.
96
139
 
@@ -109,7 +152,7 @@ class DialogueStack:
109
152
  """Returns the topmost frame from the stack.
110
153
 
111
154
  Args:
112
- ignore_frame: The ID of the flow to ignore. Picks the top most
155
+ ignore: The ID of the flow to ignore. Picks the top most
113
156
  frame that has a different flow ID.
114
157
 
115
158
  Returns:
@@ -136,7 +179,8 @@ class DialogueStack:
136
179
  patch_dump: The patch to apply to the stack.
137
180
 
138
181
  Returns:
139
- The updated stack."""
182
+ The updated stack.
183
+ """
140
184
  patch = jsonpatch.JsonPatch.from_string(patch_dump)
141
185
  dialogue_stack_dump = patch.apply(self.as_dict())
142
186
  return DialogueStack.from_dict(dialogue_stack_dump)
@@ -177,3 +221,80 @@ class DialogueStack:
177
221
  if patch:
178
222
  return patch.to_string()
179
223
  return None
224
+
225
+ def _find_agent_frame_by_predicate(
226
+ self, predicate: Callable[[AgentStackFrame], bool]
227
+ ) -> List[AgentStackFrame]:
228
+ stack_frames: List[AgentStackFrame] = []
229
+ for stack_frame in reversed(self.frames):
230
+ if isinstance(stack_frame, AgentStackFrame) and predicate(stack_frame):
231
+ stack_frames.append(stack_frame)
232
+ return stack_frames
233
+
234
+ def find_active_agent_frame(self) -> Optional[AgentStackFrame]:
235
+ stack_frames = self._find_agent_frame_by_predicate(
236
+ lambda frame: frame.state == AgentState.WAITING_FOR_INPUT
237
+ )
238
+ if stack_frames:
239
+ return stack_frames[0]
240
+ return None
241
+
242
+ def find_agent_stack_frame_by_agent(
243
+ self, agent_id: str
244
+ ) -> Optional[AgentStackFrame]:
245
+ """Get the agent stack frame for a specific agent ID.
246
+
247
+ May also include the agent stack frame in the INTERRUPTED state.
248
+ """
249
+ stack_frames = self._find_agent_frame_by_predicate(
250
+ lambda frame: frame.agent_id == agent_id
251
+ )
252
+ if stack_frames:
253
+ return stack_frames[0]
254
+ return None
255
+
256
+ def find_active_agent_stack_frame_for_flow(
257
+ self, flow_id: str
258
+ ) -> Optional[AgentStackFrame]:
259
+ """Get the agent stack frame of a specific flow."""
260
+ stack_frames = self._find_agent_frame_by_predicate(
261
+ lambda frame: frame.flow_id == flow_id
262
+ )
263
+ for stack_frame in stack_frames:
264
+ if stack_frame.state == AgentState.WAITING_FOR_INPUT:
265
+ return stack_frame
266
+ return None
267
+
268
+ def get_active_agent_id(self) -> Optional[typing.Text]:
269
+ agent_frame = self.find_active_agent_frame()
270
+ if agent_frame:
271
+ return agent_frame.agent_id
272
+ return None
273
+
274
+ def agent_is_active(self) -> bool:
275
+ return self.find_active_agent_frame() is not None
276
+
277
+ def get_all_user_flow_frames(
278
+ self, ignore_call_and_link_frames: bool = True
279
+ ) -> List[UserFlowStackFrame]:
280
+ """Get all user flow frames from the dialogue stack.
281
+
282
+ Args:
283
+ ignore_call_and_link_frames: Whether to ignore user frames of type `call`
284
+ and `link`. By default, these frames are ignored.
285
+
286
+ Returns:
287
+ A list of all user flow frames in the dialogue stack.
288
+ """
289
+ return [
290
+ frame
291
+ for frame in self.frames
292
+ if isinstance(frame, UserFlowStackFrame)
293
+ and (
294
+ not ignore_call_and_link_frames
295
+ or (
296
+ frame.frame_type != FlowStackFrameType.CALL
297
+ and frame.frame_type != FlowStackFrameType.LINK
298
+ )
299
+ )
300
+ ]
@@ -94,6 +94,18 @@ class InvalidFlowStepIdException(Exception):
94
94
  super().__init__(f"Invalid flow step ID '{step_id}' for flow '{flow_id}'.")
95
95
 
96
96
 
97
+ class InvalidAgentState(RasaException):
98
+ """Raised if the agent state is invalid."""
99
+
100
+ def __init__(self, invalid_state: str) -> None:
101
+ """Creates a `InvalidAgentState`.
102
+
103
+ Args:
104
+ invalid_state: The invalid agent state.
105
+ """
106
+ super().__init__(f"Invalid agent state '{invalid_state}'.")
107
+
108
+
97
109
  @dataclass
98
110
  class BaseFlowStackFrame(DialogueStackFrame):
99
111
  flow_id: str = "" # needed to avoid "default arg before non-default" error
@@ -171,3 +183,48 @@ class UserFlowStackFrame(BaseFlowStackFrame):
171
183
  step_id=data["step_id"],
172
184
  frame_type=FlowStackFrameType.from_str(data.get("frame_type")),
173
185
  )
186
+
187
+
188
+ class AgentState(str, Enum):
189
+ INTERRUPTED = "interrupted"
190
+ WAITING_FOR_INPUT = "waiting_for_input"
191
+
192
+ @staticmethod
193
+ def from_str(state: Optional[str]) -> AgentState:
194
+ if state == AgentState.WAITING_FOR_INPUT.value:
195
+ return AgentState.WAITING_FOR_INPUT
196
+ elif state == AgentState.INTERRUPTED.value:
197
+ return AgentState.INTERRUPTED
198
+ else:
199
+ raise InvalidAgentState(state)
200
+
201
+
202
+ @dataclass
203
+ class AgentStackFrame(BaseFlowStackFrame):
204
+ agent_id: str = ""
205
+ state: AgentState = AgentState.WAITING_FOR_INPUT
206
+ metadata: Optional[Dict[str, Any]] = None
207
+
208
+ @classmethod
209
+ def type(cls) -> str:
210
+ """Returns the type of the frame."""
211
+ return "agent"
212
+
213
+ @staticmethod
214
+ def from_dict(data: Dict[str, Any]) -> AgentStackFrame:
215
+ """Creates a `AgentStackFrame` from a dictionary.
216
+
217
+ Args:
218
+ data: The dictionary to create the `AgentStackFrame` from.
219
+
220
+ Returns:
221
+ The created `AgentStackFrame`.
222
+ """
223
+ return AgentStackFrame(
224
+ frame_id=data["frame_id"],
225
+ flow_id=data["flow_id"],
226
+ step_id=data["step_id"],
227
+ agent_id=data["agent_id"],
228
+ state=AgentState.from_str(data["state"]),
229
+ metadata=data.get("metadata"),
230
+ )
@@ -198,8 +198,9 @@ def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
198
198
  def get_collect_steps_excluding_ask_before_filling_for_active_flow(
199
199
  dialogue_stack: DialogueStack, all_flows: FlowsList
200
200
  ) -> Set[str]:
201
- """Get all collect steps that are part of the current flow, without
202
- considering the collect steps that has to be asked before filling.
201
+ """Get all collect steps that are part of the current flow.
202
+
203
+ Collect steps that have to be asked before filling are not considered.
203
204
 
204
205
  Args:
205
206
  dialogue_stack: The dialogue stack.
@@ -230,3 +231,17 @@ def get_collect_steps_excluding_ask_before_filling_for_active_flow(
230
231
  for step in active_flow.get_collect_steps()
231
232
  if not step.ask_before_filling
232
233
  )
234
+
235
+
236
+ def is_continue_interrupted_flow_active(stack: DialogueStack) -> bool:
237
+ """Check if the continue interrupted flow is active."""
238
+ from rasa.dialogue_understanding.patterns.continue_interrupted import (
239
+ ContinueInterruptedPatternFlowStackFrame,
240
+ )
241
+
242
+ for frame in reversed(stack.frames):
243
+ if isinstance(frame, ContinueInterruptedPatternFlowStackFrame):
244
+ return True
245
+ if isinstance(frame, UserFlowStackFrame):
246
+ return False
247
+ return False
@@ -1,10 +1,12 @@
1
1
  import asyncio
2
2
  import time
3
- from typing import Any, Dict, List, Optional, Text
3
+ from pathlib import Path
4
+ from typing import Any, Dict, List, Optional, Union
4
5
 
5
6
  import structlog
6
7
  from tqdm import tqdm
7
8
 
9
+ from rasa.core.available_agents import AvailableAgents
8
10
  from rasa.core.available_endpoints import AvailableEndpoints
9
11
  from rasa.core.channels import CollectingOutputChannel, UserMessage
10
12
  from rasa.core.exceptions import AgentNotReady
@@ -52,10 +54,11 @@ class DialogueUnderstandingTestRunner:
52
54
 
53
55
  def __init__(
54
56
  self,
55
- model_path: Optional[Text] = None,
57
+ model_path: Optional[str] = None,
56
58
  model_server: Optional[EndpointConfig] = None,
57
59
  remote_storage: Optional[StorageType] = None,
58
60
  endpoints: Optional[AvailableEndpoints] = None,
61
+ sub_agents_path: Optional[Union[Path, str]] = None,
59
62
  ) -> None:
60
63
  """Initializes the Dialogue Understanding test suite runner.
61
64
 
@@ -68,6 +71,7 @@ class DialogueUnderstandingTestRunner:
68
71
  import rasa.core.agent
69
72
 
70
73
  self._check_action_server(endpoints)
74
+ sub_agents = AvailableAgents.get_instance(sub_agents_path)
71
75
 
72
76
  self.agent = asyncio.run(
73
77
  rasa.core.agent.load_agent(
@@ -75,6 +79,7 @@ class DialogueUnderstandingTestRunner:
75
79
  model_server=model_server,
76
80
  remote_storage=remote_storage,
77
81
  endpoints=endpoints,
82
+ sub_agents=sub_agents,
78
83
  )
79
84
  )
80
85
  if not self.agent.is_ready():
@@ -13,6 +13,7 @@ import structlog
13
13
  from tqdm import tqdm
14
14
 
15
15
  import rasa.shared.utils.io
16
+ from rasa.core.available_agents import AvailableAgents
16
17
  from rasa.core.available_endpoints import AvailableEndpoints
17
18
  from rasa.core.channels import CollectingOutputChannel, UserMessage
18
19
  from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
@@ -65,6 +66,7 @@ class E2ETestRunner:
65
66
  model_server: Optional[EndpointConfig] = None,
66
67
  remote_storage: Optional[StorageType] = None,
67
68
  endpoints: Optional[AvailableEndpoints] = None,
69
+ sub_agents_path: Optional[Text] = None,
68
70
  **kwargs: Any,
69
71
  ) -> None:
70
72
  """Initializes the E2E test suite runner.
@@ -94,12 +96,15 @@ class E2ETestRunner:
94
96
  if endpoints and not are_custom_actions_stubbed:
95
97
  self._action_server_is_reachable(endpoints)
96
98
 
99
+ sub_agents = AvailableAgents.get_instance(sub_agents_path)
100
+
97
101
  self.agent = asyncio.run(
98
102
  rasa.core.agent.load_agent(
99
103
  model_path=model_path,
100
104
  model_server=model_server,
101
105
  remote_storage=remote_storage,
102
106
  endpoints=endpoints,
107
+ sub_agents=sub_agents,
103
108
  )
104
109
  )
105
110
 
@@ -742,7 +747,7 @@ class E2ETestRunner:
742
747
  test_result = test_turns[index]
743
748
  if index in failure_points:
744
749
  diff_test_text, diff_actual_text = cls._handle_fail_diff(
745
- test_result, # type: ignore[arg-type]
750
+ test_result,
746
751
  latest_response,
747
752
  cls._select_bot_utter_turns(test_turns, index),
748
753
  ) # test_result can only be TestStep in failure_points
@@ -806,7 +811,12 @@ class E2ETestRunner:
806
811
  """
807
812
  # This will only be used when the TestCase is not started
808
813
  # with a user step
809
- latest_response: ActualStepOutput = test_turns[-1] # type: ignore[assignment]
814
+ latest_response_event = test_turns[-1]
815
+ if not isinstance(latest_response_event, ActualStepOutput):
816
+ raise ValueError(
817
+ f"Expected ActualStepOutput, got {type(latest_response_event)}"
818
+ )
819
+ latest_response: ActualStepOutput = latest_response_event
810
820
  failures = []
811
821
  match = None
812
822
  for position in range(last_user_step_position, len(test_turns) - 1):
rasa/engine/caching.py CHANGED
@@ -5,7 +5,7 @@ import logging
5
5
  import shutil
6
6
  from datetime import datetime
7
7
  from pathlib import Path
8
- from typing import Any, List, Optional, Text, Tuple
8
+ from typing import Any, List, Optional, Text, Tuple, Union
9
9
 
10
10
  import sqlalchemy as sa
11
11
  import sqlalchemy.orm
@@ -294,7 +294,7 @@ class LocalTrainingCache(TrainingCache):
294
294
 
295
295
  def _cache_output_to_disk(
296
296
  self, output: Cacheable, model_storage: ModelStorage
297
- ) -> Tuple[Optional[Text], Optional[Text]]:
297
+ ) -> Tuple[Optional[Union[Path, Text]], Optional[Text]]:
298
298
  tempdir_name = rasa.utils.common.get_temp_dir_name()
299
299
 
300
300
  # Use `TempDirectoryPath` instead of `tempfile.TemporaryDirectory` as this
@@ -1,10 +1,7 @@
1
1
  from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
2
2
  from rasa.core.policies.flow_policy import FlowPolicy
3
3
  from rasa.core.policies.intentless_policy import IntentlessPolicy
4
- from rasa.core.policies.memoization import AugmentedMemoizationPolicy, MemoizationPolicy
5
- from rasa.core.policies.rule_policy import RulePolicy
6
- from rasa.core.policies.ted_policy import TEDPolicy
7
- from rasa.core.policies.unexpected_intent_policy import UnexpecTEDIntentPolicy
4
+ from rasa.core.policies.memoization import AugmentedMemoizationPolicy
8
5
  from rasa.dialogue_understanding.coexistence.intent_based_router import (
9
6
  IntentBasedRouter,
10
7
  )
@@ -13,7 +10,6 @@ from rasa.dialogue_understanding.generator import (
13
10
  LLMCommandGenerator,
14
11
  )
15
12
  from rasa.dialogue_understanding.generator.nlu_command_adapter import NLUCommandAdapter
16
- from rasa.nlu.classifiers.diet_classifier import DIETClassifier
17
13
  from rasa.nlu.classifiers.fallback_classifier import FallbackClassifier
18
14
  from rasa.nlu.classifiers.keyword_intent_classifier import KeywordIntentClassifier
19
15
  from rasa.nlu.classifiers.logistic_regression_classifier import (
@@ -21,14 +17,11 @@ from rasa.nlu.classifiers.logistic_regression_classifier import (
21
17
  )
22
18
  from rasa.nlu.classifiers.mitie_intent_classifier import MitieIntentClassifier
23
19
  from rasa.nlu.classifiers.sklearn_intent_classifier import SklearnIntentClassifier
24
- from rasa.nlu.extractors.crf_entity_extractor import CRFEntityExtractor
25
20
  from rasa.nlu.extractors.duckling_entity_extractor import DucklingEntityExtractor
26
21
  from rasa.nlu.extractors.entity_synonyms import EntitySynonymMapper
27
22
  from rasa.nlu.extractors.mitie_entity_extractor import MitieEntityExtractor
28
23
  from rasa.nlu.extractors.regex_entity_extractor import RegexEntityExtractor
29
24
  from rasa.nlu.extractors.spacy_entity_extractor import SpacyEntityExtractor
30
- from rasa.nlu.featurizers.dense_featurizer.convert_featurizer import ConveRTFeaturizer
31
- from rasa.nlu.featurizers.dense_featurizer.lm_featurizer import LanguageModelFeaturizer
32
25
  from rasa.nlu.featurizers.dense_featurizer.mitie_featurizer import MitieFeaturizer
33
26
  from rasa.nlu.featurizers.dense_featurizer.spacy_featurizer import SpacyFeaturizer
34
27
  from rasa.nlu.featurizers.sparse_featurizer.count_vectors_featurizer import (
@@ -38,7 +31,6 @@ from rasa.nlu.featurizers.sparse_featurizer.lexical_syntactic_featurizer import
38
31
  LexicalSyntacticFeaturizer,
39
32
  )
40
33
  from rasa.nlu.featurizers.sparse_featurizer.regex_featurizer import RegexFeaturizer
41
- from rasa.nlu.selectors.response_selector import ResponseSelector
42
34
  from rasa.nlu.tokenizers.jieba_tokenizer import JiebaTokenizer
43
35
  from rasa.nlu.tokenizers.mitie_tokenizer import MitieTokenizer
44
36
  from rasa.nlu.tokenizers.spacy_tokenizer import SpacyTokenizer
@@ -48,7 +40,7 @@ from rasa.nlu.utils.spacy_utils import SpacyNLP
48
40
 
49
41
  DEFAULT_COMPONENTS = [
50
42
  # Message Classifiers
51
- DIETClassifier,
43
+ # DIETClassifier,
52
44
  FallbackClassifier,
53
45
  KeywordIntentClassifier,
54
46
  MitieIntentClassifier,
@@ -59,9 +51,9 @@ DEFAULT_COMPONENTS = [
59
51
  LLMBasedRouter,
60
52
  IntentBasedRouter,
61
53
  # Response Selectors
62
- ResponseSelector,
54
+ # ResponseSelector,
63
55
  # Message Entity Extractors
64
- CRFEntityExtractor,
56
+ # CRFEntityExtractor,
65
57
  DucklingEntityExtractor,
66
58
  EntitySynonymMapper,
67
59
  MitieEntityExtractor,
@@ -69,11 +61,11 @@ DEFAULT_COMPONENTS = [
69
61
  RegexEntityExtractor,
70
62
  # Message Feauturizers
71
63
  LexicalSyntacticFeaturizer,
72
- ConveRTFeaturizer,
64
+ # ConveRTFeaturizer,
73
65
  MitieFeaturizer,
74
66
  SpacyFeaturizer,
75
67
  CountVectorsFeaturizer,
76
- LanguageModelFeaturizer,
68
+ # LanguageModelFeaturizer,
77
69
  RegexFeaturizer,
78
70
  # Tokenizers
79
71
  JiebaTokenizer,
@@ -84,10 +76,10 @@ DEFAULT_COMPONENTS = [
84
76
  MitieNLP,
85
77
  SpacyNLP,
86
78
  # Dialogue Management Policies
87
- TEDPolicy,
88
- UnexpecTEDIntentPolicy,
89
- RulePolicy,
90
- MemoizationPolicy,
79
+ # TEDPolicy,
80
+ # UnexpecTEDIntentPolicy,
81
+ # RulePolicy,
82
+ # MemoizationPolicy,
91
83
  AugmentedMemoizationPolicy,
92
84
  FlowPolicy,
93
85
  EnterpriseSearchPolicy,
@@ -1,16 +1,14 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- import os
5
4
  import shutil
6
5
  import sys
7
- import tarfile
8
6
  import tempfile
9
7
  import uuid
10
8
  from contextlib import contextmanager
11
9
  from datetime import datetime
12
10
  from pathlib import Path
13
- from typing import Callable, Generator, Optional, Text, Tuple, Union
11
+ from typing import Generator, Optional, Text, Tuple, Union
14
12
 
15
13
  from tarsafe import TarSafe
16
14
 
@@ -59,35 +57,6 @@ def windows_safe_temporary_directory(
59
57
  yield temporary_directory
60
58
 
61
59
 
62
- def filter_normpath(member: tarfile.TarInfo, dest_path: str) -> tarfile.TarInfo:
63
- """Normalize tar member paths for safe extraction"""
64
- if member.name:
65
- member.name = os.path.normpath(member.name)
66
- return member
67
-
68
-
69
- FilterFunction = Callable[[tarfile.TarInfo, str], Optional[tarfile.TarInfo]]
70
-
71
-
72
- def create_combined_filter(existing_filter: Optional[FilterFunction]) -> FilterFunction:
73
- """Create a filter that combines existing filter with path normalization"""
74
-
75
- def combined_filter(
76
- member: tarfile.TarInfo, dest_path: str
77
- ) -> Optional[tarfile.TarInfo]:
78
- """Apply existing filter first, then path normalization"""
79
- if existing_filter is not None:
80
- filtered_member = existing_filter(member, dest_path)
81
- if filtered_member is None:
82
- return None # Rejected by existing filter
83
- member = filtered_member # Use the filtered result
84
-
85
- # Apply our path normalization
86
- return filter_normpath(member, dest_path)
87
-
88
- return combined_filter
89
-
90
-
91
60
  class LocalModelStorage(ModelStorage):
92
61
  """Stores and provides output of `GraphComponents` on local disk."""
93
62
 
@@ -153,19 +122,7 @@ class LocalModelStorage(ModelStorage):
153
122
  # this restriction in environments where it's not possible
154
123
  # to override this behavior, mostly for internal policy reasons
155
124
  # reference: https://stackoverflow.com/a/49102229
156
- try:
157
- # Use extraction filter to normalize paths for compatibility
158
- # before trying the \\?\ prefix approach first
159
- prev_filter = getattr(tar, "extraction_filter", None)
160
- tar.extraction_filter = create_combined_filter(prev_filter)
161
- tar.extractall(f"\\\\?\\{temporary_directory}")
162
- except Exception:
163
- # Fallback for Python versions with tarfile security fix
164
- logger.warning(
165
- "Failed to extract model archive with long path support. "
166
- "Falling back to regular extraction."
167
- )
168
- tar.extractall(temporary_directory)
125
+ tar.extractall(f"\\\\?\\{temporary_directory}")
169
126
  else:
170
127
  tar.extractall(temporary_directory)
171
128
  LocalModelStorage._assert_not_rasa2_archive(temporary_directory)