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
@@ -5,25 +5,26 @@ import {
5
5
  useColorModeValue,
6
6
  useToast,
7
7
  } from '@chakra-ui/react'
8
+ import { useEffect, useState, useCallback } from 'react'
8
9
  import axios from 'axios'
9
- import queryString from 'query-string'
10
- import { useCallback, useEffect, useState } from 'react'
11
- import useWebSocket, { ReadyState } from 'react-use-websocket'
12
- import { Chat } from './components/Chat'
13
- import { DiagramFlow } from './components/DiagramFlow'
14
- import { DialougeInformation } from './components/DialogueInformation'
10
+ import { useOurTheme } from './theme'
11
+ import { Welcome } from './components/Welcome'
15
12
  import { DialogueStack } from './components/DialogueStack'
13
+ import { DialougeInformation } from './components/DialogueInformation'
16
14
  import { LoadingSpinner } from './components/LoadingSpinner'
15
+ import { DiagramFlow } from './components/DiagramFlow'
17
16
  import { RecruitmentPanel } from './components/RecruitmentPanel'
18
- import { Welcome } from './components/Welcome'
19
17
  import { formatSlots } from './helpers/formatters'
18
+ import { Slot, Stack, Event, Flow, SelectedStack, Tracker } from './types'
20
19
  import {
21
20
  createHistoricalStack,
22
21
  flowStepTrail,
23
22
  updatedActiveFrame,
24
23
  } from './helpers/utils'
25
- import { useOurTheme } from './theme'
26
- import { Event, Flow, SelectedStack, Slot, Stack, Tracker } from './types'
24
+ import queryString from 'query-string'
25
+ import { Chat } from './components/Chat'
26
+ import { LatencyDisplay } from './components/LatencyDisplay'
27
+ import useWebSocket, { ReadyState } from 'react-use-websocket'
27
28
 
28
29
  export function App() {
29
30
  const toast = useToast()
@@ -251,7 +252,6 @@ export function App() {
251
252
  slots={slots}
252
253
  events={events}
253
254
  story={story}
254
- latency={latency}
255
255
  />
256
256
  </Grid>
257
257
  </GridItem>
@@ -265,6 +265,7 @@ export function App() {
265
265
  </GridItem>
266
266
  <GridItem overflow="hidden">
267
267
  <Grid sx={rightColumnSx}>
268
+ <LatencyDisplay latency={latency} sx={boxSx} />
268
269
  {shouldShowTranscript && (
269
270
  <GridItem sx={chatContainerSx}>
270
271
  <Chat events={events || []} />
@@ -13,14 +13,13 @@ import {
13
13
  useTab,
14
14
  useToast,
15
15
  } from '@chakra-ui/react'
16
- import { useEffect } from 'react'
17
16
  import { Light as SyntaxHighlighter } from 'react-syntax-highlighter'
18
- import { useCopyToClipboard } from 'usehooks-ts'
19
- import { formatTestCases } from '../helpers/formatters'
20
17
  import { useOurTheme } from '../theme'
21
18
  import { Event, Slot } from '../types'
19
+ import { formatTestCases } from '../helpers/formatters'
20
+ import { useCopyToClipboard } from 'usehooks-ts'
21
+ import { useEffect } from 'react'
22
22
  import { FullscreenButton } from './FullscreenButton'
23
- import { LatencyDisplay } from './LatencyDisplay'
24
23
  import { SlotTable, Slots } from './Slots'
25
24
 
26
25
  interface Props extends FlexProps {
@@ -28,7 +27,6 @@ interface Props extends FlexProps {
28
27
  events: Event[]
29
28
  story: string
30
29
  slots: Slot[]
31
- latency: any
32
30
  }
33
31
 
34
32
  export const DialougeInformation = ({
@@ -37,7 +35,6 @@ export const DialougeInformation = ({
37
35
  events,
38
36
  story,
39
37
  slots,
40
- latency,
41
38
  ...props
42
39
  }: Props) => {
43
40
  const toast = useToast()
@@ -108,7 +105,6 @@ export const DialougeInformation = ({
108
105
  <CustomTab>Slots</CustomTab>
109
106
  <CustomTab>End-2-end test</CustomTab>
110
107
  <CustomTab>Tracker state</CustomTab>
111
- <CustomTab>Latency</CustomTab>
112
108
  </TabList>
113
109
  <TabPanels height="100%" overflow="hidden">
114
110
  <TabPanel sx={tabPanelSx}>
@@ -164,11 +160,6 @@ export const DialougeInformation = ({
164
160
  </FullscreenButton>
165
161
  </HStack>
166
162
  </TabPanel>
167
- <TabPanel sx={tabPanelSx}>
168
- <Box sx={overflowBox}>
169
- <LatencyDisplay latency={latency} />
170
- </Box>
171
- </TabPanel>
172
163
  </TabPanels>
173
164
  </Tabs>
174
165
  </Flex>
@@ -52,6 +52,8 @@ function StackRow({
52
52
  },
53
53
  }
54
54
 
55
+ const agentOrStep = stack.agent_id ?? stack.step_id;
56
+
55
57
  return (
56
58
  <Tr
57
59
  sx={
@@ -65,12 +67,12 @@ function StackRow({
65
67
  </Tooltip>
66
68
  </Td>
67
69
  <Td>
68
- {shouldShowTooltip(stack.step_id) ? (
69
- <Tooltip label={stack.step_id} hasArrow>
70
- <Text noOfLines={1}>{stack.step_id}</Text>
70
+ {shouldShowTooltip(agentOrStep) ? (
71
+ <Tooltip label={`${agentOrStep} ${stack.agent_id && `(${stack.step_id})`}`} hasArrow>
72
+ <Text noOfLines={1}>{agentOrStep}</Text>
71
73
  </Tooltip>
72
74
  ) : (
73
- <Text noOfLines={1}>{stack.step_id}</Text>
75
+ <Text noOfLines={1}>{agentOrStep}</Text>
74
76
  )}
75
77
  </Td>
76
78
  </Tr>
@@ -1,5 +1,5 @@
1
- import { rasaColors } from '../theme/base/colors'
2
- import type { Event, Flow, Slot, Stack } from '../types'
1
+ import {rasaColors} from '../theme/base/colors'
2
+ import type {Event, Flow, Slot, Stack} from '../types'
3
3
 
4
4
  export function formatSlots(slots: { [key: string]: unknown }) {
5
5
  if (!slots) {
@@ -13,7 +13,7 @@ export function formatSlots(slots: { [key: string]: unknown }) {
13
13
  slotDuple[0] !== 'flow_hashes' &&
14
14
  slotDuple[1] != null,
15
15
  )
16
- .map((slotDuple) => ({ name: slotDuple[0], value: slotDuple[1] }))
16
+ .map((slotDuple) => ({name: slotDuple[0], value: slotDuple[1]}))
17
17
  }
18
18
 
19
19
  export const formatTestCases = (events: Event[], sessionId: string) => {
@@ -85,11 +85,14 @@ export const formatFlow = (
85
85
  `flowchart TD
86
86
  classDef collect stroke-width:1px
87
87
  classDef action fill:#FBFCFD,stroke:#A0B8CF
88
+ classDef noop fill:#FBFCFD
89
+ classDef callstep fill:#FBFCFD
88
90
  classDef link fill:#f43
89
91
  classDef slot fill:#e8f3db,stroke:#c5e1a5
90
92
  classDef endstep fill:#ccc,stroke:#444
91
93
  classDef previous stroke:${rasaColors.rasaOrange[400]},stroke-width:1px
92
94
  classDef active stroke:${rasaColors.rasaOrange[400]},stroke-width:3px,fill:${rasaColors.warning[50]}
95
+ classDef pulse animation:pulse 2s infinite
93
96
  `,
94
97
  ]
95
98
  try {
@@ -210,6 +213,24 @@ function renderStepSequence(
210
213
  )}"]:::slot\n`
211
214
  }
212
215
 
216
+ if (step.call) {
217
+ const isAgentWaitingOnInput = !!currentStack?.agent_id && currentStack?.state === 'waiting_for_input'
218
+ mermaidTextFragment += `${mermaidId}["${encodeDoubleQuotes(
219
+ stepId,
220
+ )} 🤖"]:::callstep\n`
221
+
222
+ if (isAgentWaitingOnInput) {
223
+ mermaidTextFragment += `class ${mermaidId} pulse\n`
224
+ }
225
+ }
226
+
227
+ if (step.noop) {
228
+ mermaidTextFragment += `${mermaidId}["${parseFieldUsingStack(
229
+ stepId,
230
+ currentStack
231
+ )}"]:::noop\n`
232
+ }
233
+
213
234
  if (activeStep && stepId === activeStep) {
214
235
  mermaidTextFragment += `class ${mermaidId} active\n`
215
236
  } else if (stepTrail?.includes(stepId)) {
@@ -1,4 +1,19 @@
1
- import { mode, StyleFunctionProps } from '@chakra-ui/theme-tools'
1
+ import {mode, StyleFunctionProps} from '@chakra-ui/theme-tools'
2
+ import {keyframes} from "@chakra-ui/react";
3
+
4
+
5
+ const pulse = keyframes`
6
+ 0% {
7
+ opacity: 1;
8
+ }
9
+ 50% {
10
+ opacity: 0.5;
11
+ }
12
+ 100% {
13
+ opacity: 1;
14
+ }
15
+ `;
16
+
2
17
 
3
18
  export const styles = {
4
19
  global: {
@@ -9,5 +24,8 @@ export const styles = {
9
24
  fontSize: theme.rasaFontSizes.md,
10
25
  letterSpacing: '0.025rem',
11
26
  }),
27
+ '.pulse': {
28
+ animation: `${pulse} 2s infinite`,
29
+ },
12
30
  },
13
31
  }
@@ -40,6 +40,8 @@ export interface Stack {
40
40
  collect?: string
41
41
  utter?: string
42
42
  ended: boolean
43
+ agent_id?: string
44
+ state?: "waiting_for_input" | "interrupted"
43
45
  }
44
46
 
45
47
  export interface LatencyData {
@@ -95,4 +97,6 @@ interface Step {
95
97
  reset_after_flow_ends: boolean
96
98
  utter: string
97
99
  set_slots?: unknown
100
+ call?: string
101
+ noop?: boolean
98
102
  }
@@ -1,54 +1,34 @@
1
- from __future__ import annotations
2
-
3
- import asyncio
4
1
  import inspect
5
2
  import json
3
+ import logging
6
4
  import uuid
7
- from asyncio import Task
8
- from dataclasses import dataclass
9
5
  from typing import Any, Awaitable, Callable, Dict, Iterable, List, Optional, Text
10
6
 
11
- import structlog
12
7
  from sanic import Blueprint, Sanic, response
13
8
  from sanic.request import Request
14
9
  from sanic.response import HTTPResponse
15
10
  from socketio import AsyncServer
16
11
 
12
+ import rasa.core.channels.channel
17
13
  import rasa.shared.utils.io
18
- from rasa.core.channels.channel import (
19
- InputChannel,
20
- OnNewMessageType,
21
- OutputChannel,
22
- UserMessage,
23
- )
24
- from rasa.core.channels.constants import USER_CONVERSATION_SILENCE_TIMEOUT
25
- from rasa.shared.core.constants import SILENCE_TIMEOUT_SLOT
26
-
27
- logger = structlog.getLogger(__name__)
28
-
14
+ from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
29
15
 
30
- @dataclass
31
- class SilenceTimeout:
32
- sender_id: str
33
- timeout: float
34
-
35
-
36
- UserSilenceHandlerType = Callable[[SilenceTimeout], Awaitable[Any]]
16
+ logger = logging.getLogger(__name__)
37
17
 
38
18
 
39
19
  class SocketBlueprint(Blueprint):
40
20
  """Blueprint for socketio connections."""
41
21
 
42
22
  def __init__(
43
- self, sio_server: AsyncServer, socketio_path: Text, *args: Any, **kwargs: Any
23
+ self, sio: AsyncServer, socketio_path: Text, *args: Any, **kwargs: Any
44
24
  ) -> None:
45
- """Creates a :class:`sanic.Blueprint` for routing socketio connections.
25
+ """Creates a :class:`sanic.Blueprint` for routing socketio connenctions.
46
26
 
47
- :param sio_server: Instance of :class:`socketio.AsyncServer` class
27
+ :param sio: Instance of :class:`socketio.AsyncServer` class
48
28
  :param socketio_path: string indicating the route to accept requests on.
49
29
  """
50
30
  super().__init__(*args, **kwargs)
51
- self.ctx.sio_server = sio_server
31
+ self.ctx.sio = sio
52
32
  self.ctx.socketio_path = socketio_path
53
33
 
54
34
  def register(self, app: Sanic, options: Dict[Text, Any]) -> None:
@@ -62,7 +42,7 @@ class SocketBlueprint(Blueprint):
62
42
  path = self.ctx.socketio_path
63
43
  else:
64
44
  path = options.get("url_prefix", "/socket.io")
65
- self.ctx.sio_server.attach(app, path)
45
+ self.ctx.sio.attach(app, path)
66
46
  super().register(app, options)
67
47
 
68
48
 
@@ -71,45 +51,14 @@ class SocketIOOutput(OutputChannel):
71
51
  def name(cls) -> Text:
72
52
  return "socketio"
73
53
 
74
- def __init__(
75
- self,
76
- input_channel: SocketIOInput,
77
- sio_server: AsyncServer,
78
- bot_message_evt: Text,
79
- ) -> None:
54
+ def __init__(self, sio: AsyncServer, bot_message_evt: Text) -> None:
80
55
  super().__init__()
81
- self._input_channel = input_channel
82
- self.sio_server = sio_server
56
+ self.sio = sio
83
57
  self.bot_message_evt = bot_message_evt
84
58
 
85
59
  async def _send_message(self, socket_id: Text, response: Any) -> None:
86
60
  """Sends a message to the recipient using the bot event."""
87
- await self.sio_server.emit(self.bot_message_evt, response, room=socket_id)
88
- if self.tracker_state and self._input_channel.enable_silence_timeout:
89
- silence_timeout = self.tracker_state["slots"][SILENCE_TIMEOUT_SLOT]
90
-
91
- logger.debug(
92
- "socketio_channel.silence_timeout_updated",
93
- sender_id=socket_id,
94
- silence_timeout=silence_timeout,
95
- )
96
-
97
- silence_timeout_counts = self.tracker_state["slots"][
98
- "consecutive_silence_timeouts"
99
- ]
100
-
101
- logger.debug(
102
- "socketio_channel.consecutive_silence_timeouts_updated",
103
- sender_id=socket_id,
104
- silence_timeout_counts=silence_timeout_counts,
105
- )
106
-
107
- self._input_channel.reset_silence_timeout(
108
- SilenceTimeout(
109
- sender_id=socket_id,
110
- timeout=silence_timeout,
111
- ),
112
- )
61
+ await self.sio.emit(self.bot_message_evt, response, room=socket_id)
113
62
 
114
63
  async def send_text_message(
115
64
  self, recipient_id: Text, text: Text, **kwargs: Any
@@ -174,11 +123,9 @@ class SocketIOOutput(OutputChannel):
174
123
  """Sends custom json to the output."""
175
124
  if "data" in json_message:
176
125
  json_message.setdefault("room", recipient_id)
177
- await self.sio_server.emit(self.bot_message_evt, **json_message)
126
+ await self.sio.emit(self.bot_message_evt, **json_message)
178
127
  else:
179
- await self.sio_server.emit(
180
- self.bot_message_evt, json_message, room=recipient_id
181
- )
128
+ await self.sio.emit(self.bot_message_evt, json_message, room=recipient_id)
182
129
 
183
130
  async def send_attachment( # type: ignore[override]
184
131
  self, recipient_id: Text, attachment: Dict[Text, Any], **kwargs: Any
@@ -186,38 +133,26 @@ class SocketIOOutput(OutputChannel):
186
133
  """Sends an attachment to the user."""
187
134
  await self._send_message(recipient_id, {"attachment": attachment})
188
135
 
189
- async def hangup(self, recipient_id: Text, **kwargs: Any) -> None:
190
- """Hangs up the call for the given sender."""
191
- # This method is not applicable for socket.io, but we implement it
192
- # to satisfy the OutputChannel interface.
193
- logger.debug(
194
- "socketio_channel.output.hangup",
195
- message=f"Hanging up call for user {recipient_id}.",
196
- )
197
-
198
- self._input_channel.disconnect(recipient_id)
199
-
200
136
 
201
137
  class SocketIOInput(InputChannel):
202
138
  """A socket.io input channel."""
203
139
 
204
140
  @classmethod
205
- def name(cls) -> str:
141
+ def name(cls) -> Text:
206
142
  return "socketio"
207
143
 
208
144
  @classmethod
209
145
  def from_credentials(cls, credentials: Optional[Dict[Text, Any]]) -> InputChannel:
210
146
  credentials = credentials or {}
211
147
  return cls(
212
- user_message_evt=credentials.get("user_message_evt", "user_uttered"),
213
- bot_message_evt=credentials.get("bot_message_evt", "bot_uttered"),
214
- namespace=credentials.get("namespace"),
215
- session_persistence=credentials.get("session_persistence", False),
216
- socketio_path=credentials.get("socketio_path", "/socket.io"),
217
- jwt_key=credentials.get("jwt_key"),
218
- jwt_method=credentials.get("jwt_method", "HS256"),
219
- metadata_key=credentials.get("metadata_key", "metadata"),
220
- enable_silence_timeout=credentials.get("enable_silence_timeout", False),
148
+ credentials.get("user_message_evt", "user_uttered"),
149
+ credentials.get("bot_message_evt", "bot_uttered"),
150
+ credentials.get("namespace"),
151
+ credentials.get("session_persistence", False),
152
+ credentials.get("socketio_path", "/socket.io"),
153
+ credentials.get("jwt_key"),
154
+ credentials.get("jwt_method", "HS256"),
155
+ credentials.get("metadata_key", "metadata"),
221
156
  )
222
157
 
223
158
  def __init__(
@@ -230,7 +165,6 @@ class SocketIOInput(InputChannel):
230
165
  jwt_key: Optional[Text] = None,
231
166
  jwt_method: Optional[Text] = "HS256",
232
167
  metadata_key: Optional[Text] = "metadata",
233
- enable_silence_timeout: bool = False,
234
168
  ):
235
169
  """Creates a ``SocketIOInput`` object."""
236
170
  self.bot_message_evt = bot_message_evt
@@ -238,18 +172,15 @@ class SocketIOInput(InputChannel):
238
172
  self.user_message_evt = user_message_evt
239
173
  self.namespace = namespace
240
174
  self.socketio_path = socketio_path
241
- self.sio_server: Optional[AsyncServer] = None
175
+ self.sio: Optional[AsyncServer] = None
242
176
  self.metadata_key = metadata_key
243
- self.enable_silence_timeout = enable_silence_timeout
244
177
 
245
178
  self.jwt_key = jwt_key
246
179
  self.jwt_algorithm = jwt_method
247
- self.on_new_message: Optional[OnNewMessageType] = None
248
- self.sender_silence_map: Dict[str, Task] = {}
249
180
 
250
- def get_output_channel(self) -> Optional[OutputChannel]:
181
+ def get_output_channel(self) -> Optional["OutputChannel"]:
251
182
  """Creates socket.io output channel object."""
252
- if self.sio_server is None:
183
+ if self.sio is None:
253
184
  rasa.shared.utils.io.raise_warning(
254
185
  "SocketIO output channel cannot be recreated. "
255
186
  "This is expected behavior when using multiple Sanic "
@@ -258,7 +189,7 @@ class SocketIOInput(InputChannel):
258
189
  "scenarios."
259
190
  )
260
191
  return None
261
- return SocketIOOutput(self, self.sio_server, self.bot_message_evt)
192
+ return SocketIOOutput(self.sio, self.bot_message_evt)
262
193
 
263
194
  async def handle_session_request(
264
195
  self, sid: Text, data: Optional[Dict] = None
@@ -269,26 +200,23 @@ class SocketIOInput(InputChannel):
269
200
  if "session_id" not in data or data["session_id"] is None:
270
201
  data["session_id"] = uuid.uuid4().hex
271
202
  if self.session_persistence:
272
- if inspect.iscoroutinefunction(self.sio_server.enter_room): # type: ignore[union-attr]
273
- await self.sio_server.enter_room(sid, data["session_id"]) # type: ignore[union-attr]
203
+ if inspect.iscoroutinefunction(self.sio.enter_room): # type: ignore[union-attr]
204
+ await self.sio.enter_room(sid, data["session_id"]) # type: ignore[union-attr]
274
205
  else:
275
206
  # for backwards compatibility with python-socketio < 5.10.
276
207
  # previously, this function was NOT async.
277
- self.sio_server.enter_room(sid, data["session_id"]) # type: ignore[union-attr]
278
- await self.sio_server.emit("session_confirm", data["session_id"], room=sid) # type: ignore[union-attr]
279
- logger.debug(
280
- "socketio_channel.input.handle_session_request",
281
- message=f"User {sid} connected to socketIO endpoint.",
282
- )
208
+ self.sio.enter_room(sid, data["session_id"]) # type: ignore[union-attr]
209
+ await self.sio.emit("session_confirm", data["session_id"], room=sid) # type: ignore[union-attr]
210
+ logger.debug(f"User {sid} connected to socketIO endpoint.")
283
211
 
284
212
  async def handle_user_message(
285
213
  self,
286
214
  sid: Text,
287
215
  data: Dict,
288
- on_new_message: OnNewMessageType,
216
+ on_new_message: Callable[[UserMessage], Awaitable[Any]],
289
217
  ) -> None:
290
218
  """Handles user messages received from the client."""
291
- output_channel = self.get_output_channel()
219
+ output_channel = SocketIOOutput(self.sio, self.bot_message_evt)
292
220
 
293
221
  if self.session_persistence:
294
222
  if not data.get("session_id"):
@@ -304,44 +232,38 @@ class SocketIOInput(InputChannel):
304
232
  else:
305
233
  sender_id = sid
306
234
 
307
- # We cancel silence timeout when a new message is received
308
- # to prevent sending a silence timeout message
309
- # if the user sends a message after the silence timeout
310
- self._cancel_silence_timeout(sender_id)
311
-
312
235
  metadata = data.get(self.metadata_key, {})
313
236
  if isinstance(metadata, Text):
314
237
  metadata = json.loads(metadata)
315
238
 
316
239
  message = UserMessage(
317
- text=data.get("message", ""),
318
- output_channel=output_channel,
319
- sender_id=sender_id,
240
+ data.get("message", ""),
241
+ output_channel,
242
+ sender_id,
320
243
  input_channel=self.name(),
321
244
  metadata=metadata,
322
245
  )
323
246
  await on_new_message(message)
324
247
 
325
- def blueprint(self, on_new_message: OnNewMessageType) -> SocketBlueprint:
248
+ def blueprint(
249
+ self, on_new_message: Callable[[UserMessage], Awaitable[Any]]
250
+ ) -> SocketBlueprint:
326
251
  """Defines a Sanic blueprint."""
327
252
  # Workaround so that socketio works with requests from other origins.
328
253
  # https://github.com/miguelgrinberg/python-socketio/issues/205#issuecomment-493769183
329
- sio_server = AsyncServer(async_mode="sanic", cors_allowed_origins=[])
254
+ sio = AsyncServer(async_mode="sanic", cors_allowed_origins=[])
330
255
  socketio_webhook = SocketBlueprint(
331
- sio_server, self.socketio_path, "socketio_webhook", __name__
256
+ sio, self.socketio_path, "socketio_webhook", __name__
332
257
  )
333
258
 
334
- # make sio_server object static to use in get_output_channel
335
- self.sio_server = sio_server
336
- # We need to store the on_new_message callback
337
- # so that we can call it when a silence timeout occurs
338
- self.on_new_message = on_new_message
259
+ # make sio object static to use in get_output_channel
260
+ self.sio = sio
339
261
 
340
262
  @socketio_webhook.route("/", methods=["GET"])
341
263
  async def health(_: Request) -> HTTPResponse:
342
264
  return response.json({"status": "ok"})
343
265
 
344
- @sio_server.on("connect", namespace=self.namespace)
266
+ @sio.on("connect", namespace=self.namespace)
345
267
  async def connect(sid: Text, environ: Dict, auth: Optional[Dict]) -> bool:
346
268
  if self.jwt_key:
347
269
  jwt_payload = None
@@ -351,107 +273,24 @@ class SocketIOInput(InputChannel):
351
273
  )
352
274
 
353
275
  if jwt_payload:
354
- logger.debug(
355
- "socketio_channel.input.connect.jwt",
356
- message=f"User {sid} connected to socketIO endpoint.",
357
- )
358
- # Store the chat state for this user
276
+ logger.debug(f"User {sid} connected to socketIO endpoint.")
359
277
  return True
360
278
  else:
361
279
  return False
362
280
  else:
363
- logger.debug(
364
- "socketio_channel.input.connect",
365
- message=f"User {sid} connected to socketIO endpoint.",
366
- )
367
- # Store the chat state for this user
281
+ logger.debug(f"User {sid} connected to socketIO endpoint.")
368
282
  return True
369
283
 
370
- @sio_server.on("disconnect", namespace=self.namespace)
284
+ @sio.on("disconnect", namespace=self.namespace)
371
285
  async def disconnect(sid: Text) -> None:
372
- logger.debug(
373
- "socketio_channel.input.disconnect",
374
- message=f"User {sid} disconnected from socketIO endpoint.",
375
- )
286
+ logger.debug(f"User {sid} disconnected from socketIO endpoint.")
376
287
 
377
- @sio_server.on("session_request", namespace=self.namespace)
288
+ @sio.on("session_request", namespace=self.namespace)
378
289
  async def session_request(sid: Text, data: Optional[Dict]) -> None:
379
- logger.debug(
380
- "socketio_channel.input.session_request",
381
- message=f"User {sid} requested a session.",
382
- )
383
290
  await self.handle_session_request(sid, data)
384
291
 
385
- @sio_server.on(self.user_message_evt, namespace=self.namespace)
292
+ @sio.on(self.user_message_evt, namespace=self.namespace)
386
293
  async def handle_message(sid: Text, data: Dict) -> None:
387
- logger.debug(
388
- "socketio_channel.input.handle_message",
389
- message=f"User {sid} sent a message.",
390
- data=data,
391
- )
392
294
  await self.handle_user_message(sid, data, on_new_message)
393
295
 
394
296
  return socketio_webhook
395
-
396
- def reset_silence_timeout(self, silence_timeout: SilenceTimeout) -> None:
397
- self._cancel_silence_timeout(silence_timeout.sender_id)
398
-
399
- self.sender_silence_map[silence_timeout.sender_id] = (
400
- asyncio.get_event_loop().create_task(
401
- self._monitor_silence_timeout(
402
- silence_timeout,
403
- )
404
- )
405
- )
406
-
407
- def disconnect(self, sender_id: str) -> None:
408
- """Disconnects the user with the given sender ID."""
409
- self._cancel_silence_timeout(sender_id)
410
- if self.sio_server:
411
- asyncio.get_event_loop().create_task(self.sio_server.disconnect(sender_id))
412
- logger.debug(
413
- "socketio_channel.input.disconnect",
414
- message=f"User {sender_id} disconnected from socketIO endpoint.",
415
- )
416
-
417
- async def _monitor_silence_timeout(self, silence_timeout: SilenceTimeout) -> None:
418
- logger.debug(
419
- "socketio_channel.input.silence_timeout_watch_started",
420
- sender_id=silence_timeout.sender_id,
421
- timeout=silence_timeout.timeout,
422
- )
423
- await asyncio.sleep(silence_timeout.timeout)
424
-
425
- # once the timer is up, we call the handler
426
- # to notify the user about the silence timeout
427
- # this is important if monitoring trask is cancelled while handler is executed
428
- asyncio.get_event_loop().create_task(
429
- self._handle_silence_timeout(silence_timeout)
430
- )
431
-
432
- logger.debug(
433
- "socketio_channel.input.silence_timeout_tripped",
434
- sender_id=silence_timeout.sender_id,
435
- silence_timeout=silence_timeout.timeout,
436
- )
437
-
438
- async def _handle_silence_timeout(self, event: SilenceTimeout) -> None:
439
- if self.on_new_message:
440
- output_channel = self.get_output_channel()
441
- message = UserMessage(
442
- text=USER_CONVERSATION_SILENCE_TIMEOUT,
443
- output_channel=output_channel,
444
- sender_id=event.sender_id,
445
- input_channel=self.name(),
446
- )
447
- await self.on_new_message(message)
448
-
449
- def _cancel_silence_timeout(self, sender_id: str) -> None:
450
- """Cancels the silence timeout task for the given sender."""
451
- task = self.sender_silence_map.pop(sender_id, None)
452
- if task and not task.done():
453
- logger.debug(
454
- "socketio_channel.input.silence_timeout_cancelled",
455
- sender_id=sender_id,
456
- )
457
- task.cancel()