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.
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +163 -0
- rasa/agents/constants.py +40 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +70 -0
- rasa/agents/exceptions.py +8 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/a2a_agent.py +662 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +684 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +290 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +484 -0
- rasa/agents/schemas/__init__.py +12 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +67 -0
- rasa/agents/schemas/agent_tool_schema.py +134 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +15 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +17 -0
- rasa/agents/utils.py +72 -0
- rasa/api.py +5 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/dialogue_understanding_test.py +4 -0
- rasa/cli/e2e_test.py +4 -0
- rasa/cli/inspect.py +3 -0
- rasa/cli/llm_fine_tuning.py +5 -0
- rasa/cli/project_templates/tutorial/config.yml +1 -2
- rasa/cli/run.py +4 -0
- rasa/cli/scaffold.py +2 -46
- rasa/cli/shell.py +3 -0
- rasa/constants.py +6 -0
- rasa/core/actions/action.py +56 -10
- rasa/core/agent.py +19 -1
- rasa/core/available_agents.py +199 -0
- rasa/core/available_endpoints.py +30 -0
- rasa/core/channels/channel.py +3 -4
- rasa/core/channels/development_inspector.py +4 -4
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-63212852.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-eecf6b13.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-8f798a9a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-df71a04c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-9b275968.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-1c669cad.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-b1553799.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-112388d6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-fdebec47.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-6280ede1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-e1dc03e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-83f68c51.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-22f8666f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-ca9e6217.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-c5ceb692.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-3e293924.js +1353 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-faa9999b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-c4dda8d9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-d4307784.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-0567aaa7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-c11b95cf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-0c7d3ca9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-34b433fa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-4cab816e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-8c22fa9e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-70ce9e8e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fbcd7fc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-45f05ea6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-beab1ea6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-2f29dbd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-951eac83.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-897fbfdd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-d667fac1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e3205144.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-4abeb0e2.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +11 -10
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +3 -12
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +6 -4
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +4 -0
- rasa/core/channels/socketio.py +51 -212
- rasa/core/channels/studio_chat.py +29 -49
- rasa/core/channels/voice_stream/genesys.py +1 -1
- rasa/core/channels/voice_stream/voice_channel.py +3 -5
- rasa/core/constants.py +4 -0
- rasa/core/policies/enterprise_search_policy.py +11 -6
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/flow_executor.py +470 -45
- rasa/core/policies/flows/mcp_tool_executor.py +277 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/unexpected_intent_policy.py +1 -0
- rasa/core/processor.py +18 -15
- rasa/core/run.py +11 -14
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +16 -16
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +21 -1
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +97 -4
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +11 -0
- rasa/dialogue_understanding/commands/clarify_command.py +10 -0
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +11 -0
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +164 -8
- rasa/dialogue_understanding/commands/utils.py +6 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +9 -10
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +61 -0
- 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
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +81 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +81 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +7 -6
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +7 -6
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +41 -2
- rasa/dialogue_understanding/patterns/continue_interrupted.py +163 -1
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +52 -8
- rasa/dialogue_understanding/processor/command_processor.py +31 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +123 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +17 -2
- rasa/dialogue_understanding_test/du_test_runner.py +7 -2
- rasa/e2e_test/e2e_test_runner.py +12 -2
- rasa/engine/caching.py +2 -2
- rasa/engine/recipes/default_components.py +10 -18
- rasa/engine/storage/local_model_storage.py +2 -45
- rasa/graph_components/validators/default_recipe_validator.py +134 -134
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +5 -4
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +14 -20
- rasa/model_manager/trainer_service.py +9 -12
- rasa/model_manager/utils.py +29 -1
- rasa/model_manager/warm_rasa_process.py +1 -1
- rasa/nlu/extractors/extractor.py +2 -1
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_manager.py +11 -2
- rasa/server.py +14 -2
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +5 -0
- rasa/shared/core/constants.py +12 -1
- rasa/shared/core/domain.py +11 -58
- rasa/shared/core/events.py +327 -0
- rasa/shared/core/flows/flow_step.py +1 -7
- rasa/shared/core/flows/flows_list.py +15 -5
- rasa/shared/core/flows/flows_yaml_schema.json +112 -186
- rasa/shared/core/flows/steps/call.py +53 -5
- rasa/shared/core/flows/validation.py +177 -7
- rasa/shared/core/flows/yaml_flows_io.py +9 -17
- rasa/shared/core/slots.py +2 -6
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/exceptions.py +4 -0
- rasa/shared/importers/importer.py +0 -6
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +10 -80
- rasa/shared/providers/_utils.py +44 -60
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +0 -2
- rasa/shared/providers/llm/_base_litellm_client.py +39 -7
- rasa/shared/providers/llm/default_litellm_llm_client.py +0 -2
- rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/llm.py +28 -5
- rasa/shared/utils/mcp/server_connection.py +166 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/upload.py +47 -16
- rasa/telemetry.py +23 -97
- rasa/tracing/instrumentation/instrumentation.py +14 -10
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/utils/common.py +79 -0
- rasa/utils/io.py +9 -27
- rasa/utils/json_utils.py +1 -6
- rasa/utils/log_utils.py +2 -6
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/tensorflow/rasa_layers.py +1 -1
- rasa/utils/train_utils.py +15 -15
- rasa/validator.py +19 -21
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/METADATA +14 -17
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/RECORD +201 -432
- rasa/builder/README.md +0 -120
- rasa/builder/auth.py +0 -176
- rasa/builder/config.py +0 -115
- rasa/builder/copilot/constants.py +0 -25
- rasa/builder/copilot/copilot.py +0 -372
- rasa/builder/copilot/copilot_response_handler.py +0 -487
- rasa/builder/copilot/copilot_templated_message_provider.py +0 -58
- rasa/builder/copilot/exceptions.py +0 -20
- rasa/builder/copilot/models.py +0 -431
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +0 -726
- rasa/builder/copilot/telemetry.py +0 -195
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +0 -16
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +0 -26
- rasa/builder/document_retrieval/constants.py +0 -15
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +0 -64
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +0 -238
- rasa/builder/document_retrieval/models.py +0 -62
- rasa/builder/download.py +0 -140
- rasa/builder/exceptions.py +0 -55
- rasa/builder/guardrails/__init__.py +0 -1
- rasa/builder/guardrails/constants.py +0 -3
- rasa/builder/guardrails/exceptions.py +0 -4
- rasa/builder/guardrails/lakera.py +0 -206
- rasa/builder/guardrails/models.py +0 -199
- rasa/builder/guardrails/utils.py +0 -305
- rasa/builder/job_manager.py +0 -87
- rasa/builder/jobs.py +0 -234
- rasa/builder/llm_service.py +0 -246
- rasa/builder/logging_utils.py +0 -209
- rasa/builder/main.py +0 -174
- rasa/builder/models.py +0 -197
- rasa/builder/project_generator.py +0 -450
- rasa/builder/project_info.py +0 -72
- rasa/builder/scrape_rasa_docs.py +0 -97
- rasa/builder/service.py +0 -1142
- rasa/builder/shared/tracker_context.py +0 -212
- rasa/builder/skill_to_bot_prompt.jinja2 +0 -164
- rasa/builder/training_service.py +0 -132
- rasa/builder/validation_service.py +0 -93
- rasa/cli/project_templates/basic/actions/action_api.py +0 -15
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +0 -44
- rasa/cli/project_templates/basic/config.yml +0 -23
- rasa/cli/project_templates/basic/credentials.yml +0 -34
- rasa/cli/project_templates/basic/data/general/feedback.yml +0 -20
- rasa/cli/project_templates/basic/data/general/goodbye.yml +0 -6
- rasa/cli/project_templates/basic/data/general/hello.yml +0 -7
- rasa/cli/project_templates/basic/data/general/help.yml +0 -6
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +0 -16
- rasa/cli/project_templates/basic/data/general/welcome.yml +0 -9
- rasa/cli/project_templates/basic/data/system/pattern_completed.yml +0 -7
- rasa/cli/project_templates/basic/data/system/pattern_correction.yml +0 -7
- rasa/cli/project_templates/basic/data/system/pattern_search.yml +0 -8
- rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +0 -8
- rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +0 -65
- rasa/cli/project_templates/basic/docs/template.txt +0 -7
- rasa/cli/project_templates/basic/domain/general/assistant_details.yml +0 -12
- rasa/cli/project_templates/basic/domain/general/bot_identity.yml +0 -5
- rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +0 -5
- rasa/cli/project_templates/basic/domain/general/feedback.yml +0 -28
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +0 -7
- rasa/cli/project_templates/basic/domain/general/help.yml +0 -5
- rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +0 -35
- rasa/cli/project_templates/basic/domain/general/utils.yml +0 -13
- rasa/cli/project_templates/basic/domain/general/welcome.yml +0 -7
- rasa/cli/project_templates/basic/endpoints.yml +0 -73
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
- rasa/cli/project_templates/finance/actions/__init__.py +0 -46
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
- rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
- rasa/cli/project_templates/finance/actions/database.py +0 -277
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +0 -18
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
- rasa/cli/project_templates/finance/config.yml +0 -21
- rasa/cli/project_templates/finance/credentials.yml +0 -32
- rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
- rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
- rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
- rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
- rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
- rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
- rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
- rasa/cli/project_templates/finance/csvs/users.csv +0 -4
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +0 -10
- rasa/cli/project_templates/finance/data/cards/block_card.yml +0 -66
- rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
- rasa/cli/project_templates/finance/data/general/feedback.yml +0 -20
- rasa/cli/project_templates/finance/data/general/goodbye.yml +0 -6
- rasa/cli/project_templates/finance/data/general/hello.yml +0 -7
- rasa/cli/project_templates/finance/data/general/help.yml +0 -9
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +0 -16
- rasa/cli/project_templates/finance/data/general/welcome.yml +0 -9
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +0 -7
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +0 -7
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +0 -8
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +0 -8
- rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
- rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
- rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
- rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
- rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
- rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
- rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
- rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +0 -67
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +0 -11
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +0 -101
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
- rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -28
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +0 -30
- rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
- rasa/cli/project_templates/finance/domain/general/welcome.yml +0 -8
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +0 -79
- rasa/cli/project_templates/finance/endpoints.yml +0 -63
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions_billing.py +0 -204
- rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +0 -48
- rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +0 -28
- rasa/cli/project_templates/telco/actions/actions_session_start.py +0 -18
- rasa/cli/project_templates/telco/config.yml +0 -25
- rasa/cli/project_templates/telco/credentials.yml +0 -33
- rasa/cli/project_templates/telco/csvs/billing.csv +0 -10
- rasa/cli/project_templates/telco/csvs/customers.csv +0 -5
- rasa/cli/project_templates/telco/data/flows/flow_global.yml +0 -5
- rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +0 -8
- rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +0 -7
- rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +0 -73
- rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +0 -45
- rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +0 -7
- rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +0 -6
- rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +0 -7
- rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +0 -9
- rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +0 -1
- rasa/cli/project_templates/telco/docs/restart_router.txt +0 -6
- rasa/cli/project_templates/telco/docs/run_speed_test.txt +0 -6
- rasa/cli/project_templates/telco/domain/domain_global.yml +0 -29
- rasa/cli/project_templates/telco/domain/domain_patterns.yml +0 -17
- rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +0 -20
- rasa/cli/project_templates/telco/domain/domain_reset_router.yml +0 -11
- rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +0 -24
- rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +0 -74
- rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +0 -102
- rasa/cli/project_templates/telco/endpoints.yml +0 -60
- rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +0 -62
- rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +0 -130
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +0 -68
- rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +0 -13
- rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +0 -47
- rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +0 -21
- rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +0 -15
- rasa/core/channels/constants.py +0 -3
- rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
- rasa/utils/openapi.py +0 -144
- /rasa/{builder → agents}/__init__.py +0 -0
- /rasa/{builder/copilot → agents/core}/__init__.py +0 -0
- /rasa/{builder/copilot/prompts → agents/protocol/a2a}/__init__.py +0 -0
- /rasa/{builder/copilot/templated_messages → agents/protocol/mcp}/__init__.py +0 -0
- /rasa/{builder/document_retrieval → agents/templates}/__init__.py +0 -0
- /rasa/{cli/project_templates/finance/actions/accounts → shared/agents}/__init__.py +0 -0
- /rasa/{cli/project_templates/finance/actions/cards → shared/utils/mcp}/__init__.py +0 -0
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev6.dist-info}/WHEEL +0 -0
- {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
|
|
10
|
-
import {
|
|
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
|
|
26
|
-
import {
|
|
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(
|
|
69
|
-
<Tooltip label={stack.step_id} hasArrow>
|
|
70
|
-
<Text noOfLines={1}>{
|
|
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}>{
|
|
75
|
+
<Text noOfLines={1}>{agentOrStep}</Text>
|
|
74
76
|
)}
|
|
75
77
|
</Td>
|
|
76
78
|
</Tr>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
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) => ({
|
|
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 {
|
|
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
|
}
|
rasa/core/channels/socketio.py
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
23
|
+
self, sio: AsyncServer, socketio_path: Text, *args: Any, **kwargs: Any
|
|
44
24
|
) -> None:
|
|
45
|
-
"""Creates a :class:`sanic.Blueprint` for routing socketio
|
|
25
|
+
"""Creates a :class:`sanic.Blueprint` for routing socketio connenctions.
|
|
46
26
|
|
|
47
|
-
:param
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
126
|
+
await self.sio.emit(self.bot_message_evt, **json_message)
|
|
178
127
|
else:
|
|
179
|
-
await self.
|
|
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) ->
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
273
|
-
await self.
|
|
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.
|
|
278
|
-
await self.
|
|
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:
|
|
216
|
+
on_new_message: Callable[[UserMessage], Awaitable[Any]],
|
|
289
217
|
) -> None:
|
|
290
218
|
"""Handles user messages received from the client."""
|
|
291
|
-
output_channel = self.
|
|
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
|
-
|
|
318
|
-
output_channel
|
|
319
|
-
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(
|
|
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
|
-
|
|
254
|
+
sio = AsyncServer(async_mode="sanic", cors_allowed_origins=[])
|
|
330
255
|
socketio_webhook = SocketBlueprint(
|
|
331
|
-
|
|
256
|
+
sio, self.socketio_path, "socketio_webhook", __name__
|
|
332
257
|
)
|
|
333
258
|
|
|
334
|
-
# make
|
|
335
|
-
self.
|
|
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
|
-
@
|
|
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
|
-
@
|
|
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
|
-
@
|
|
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
|
-
@
|
|
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()
|