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
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
## Task Description
|
|
2
|
+
Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to off-topic and knowledge requests.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Available Flows and Slots
|
|
7
|
+
Use the following structured data:
|
|
8
|
+
```json
|
|
9
|
+
{"flows":[{% for flow in available_flows %}{"name":"{{ flow.name }}","description":{{ flow.description | to_json_escaped_string }}{% if flow.agent_info %},"sub-agents":[{% for agent in flow.agent_info %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}{% if flow.slots %},"slots":[{% for slot in flow.slots %}{"name":"{{ slot.name }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":{{ slot.allowed_values }}{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Available Actions:
|
|
15
|
+
* `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
|
|
16
|
+
* `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
|
|
17
|
+
* `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
|
|
18
|
+
* `search and reply`: Provide a response from the knowledge base to address the user’s inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
|
|
19
|
+
* `cancel flow`: Cancel the current flow if the user requests it.
|
|
20
|
+
* `repeat message`: Repeat the last bot message.
|
|
21
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
22
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user chnaged his mind about the car he wants to buy.{% endif %}
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## General Instructions
|
|
27
|
+
### Start Flow
|
|
28
|
+
* Only start a flow if the user's message is clear and fully addressed by that flow's description and purpose.
|
|
29
|
+
* Pay close attention to exact wording and scope in the flow description — do not assume or “stretch” the intended use of a flow.
|
|
30
|
+
### Set Slot
|
|
31
|
+
* Do not fill slots with abstract values or placeholders.
|
|
32
|
+
* For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
|
|
33
|
+
* Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
|
|
34
|
+
* Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
|
|
35
|
+
### Disambiguate Flows
|
|
36
|
+
* Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
|
|
37
|
+
* If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
|
|
38
|
+
* If a single flow is a strong/plausible fit, prefer starting that flow directly.
|
|
39
|
+
* If a user's message unambiguously and distinctly matches multiple flows, start all relevant flows at once (rather than disambiguating).
|
|
40
|
+
### Search and Reply
|
|
41
|
+
* Only start `search and reply` if the user intent is clear.
|
|
42
|
+
* Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
|
|
43
|
+
### Cancel Flow
|
|
44
|
+
* Do not cancel any flow unless the user explicitly requests it.
|
|
45
|
+
* Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
|
|
46
|
+
### General Tips
|
|
47
|
+
* Only use information provided by the user.
|
|
48
|
+
* Strictly adhere to the provided action format.
|
|
49
|
+
* Focus on the last message and take it one step at a time.
|
|
50
|
+
* Use the previous conversation steps only to aid understanding.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Decision Rule Table
|
|
55
|
+
| Condition | Action |
|
|
56
|
+
|-------------------------------------------------------|--------------------|
|
|
57
|
+
| Flow perfectly matches user's message | start flow |
|
|
58
|
+
| Multiple flows are equally strong, relevant matches | disambiguate flows |
|
|
59
|
+
| User's message is unclear or imprecise | disambiguate flows |
|
|
60
|
+
| No flow fits at all, but knowledge base may help | search and reply |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Current State
|
|
65
|
+
{% if current_flow != None %}Use the following structured data:
|
|
66
|
+
```json
|
|
67
|
+
{"active_flow": "{{ current_flow }}","current_step": {"requested_slot": "{{ current_slot }}","requested_slot_description": {{ current_slot_description | to_json_escaped_string }}},"slots": [{% for slot in flow_slots %}{"name": "{{ slot.name }}","value": "{{ slot.value }}","type": "{{ slot.type }}"{{ "," if slot.description or slot.allowed_values else "" }}{% if slot.description %}"description": {{ slot.description | to_json_escaped_string }}{{ "," if slot.allowed_values else "" }}{% endif %}{% if slot.allowed_values %}"allowed_values": "{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]{% if active_agent or completed_agents %},{% endif %}{% if active_agent %}"active_agent": {"name": "{{ active_agent.name }}","description": "{{ active_agent.description }}"}{% if completed_agents %},{% endif %}{% endif %}{% if completed_agents %}"completed_agents": [{% for agent in completed_agents %}{"name": "{{ agent.name }}","description": "{{ agent.description }}"}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
68
|
+
```{% else %}
|
|
69
|
+
You are currently not inside any flow.{% endif %}
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Conversation History
|
|
74
|
+
{{ current_conversation }}
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Task
|
|
79
|
+
Create an action list with one action per line in response to the user's last message: """{{ user_message }}""".
|
|
80
|
+
|
|
81
|
+
Your action list:
|
|
@@ -45,29 +45,30 @@ DEFAULT_LLM_CONFIG = {
|
|
|
45
45
|
TIMEOUT_CONFIG_KEY: 7,
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
# TODO: only load the agent prompt template in cases where agents are actually used
|
|
48
49
|
MODEL_PROMPT_MAPPER = {
|
|
49
50
|
f"{OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
50
|
-
"
|
|
51
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
51
52
|
),
|
|
52
53
|
f"{AZURE_OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
53
|
-
"
|
|
54
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
54
55
|
),
|
|
55
56
|
f"{AWS_BEDROCK_PROVIDER}/anthropic.{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}-v1:0": (
|
|
56
|
-
"
|
|
57
|
+
"agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2"
|
|
57
58
|
),
|
|
58
59
|
f"{ANTHROPIC_PROVIDER}/{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}": (
|
|
59
|
-
"
|
|
60
|
+
"agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2"
|
|
60
61
|
),
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
# When model is not configured, then we use the default prompt template
|
|
64
65
|
DEFAULT_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
65
|
-
"
|
|
66
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
66
67
|
)
|
|
67
68
|
# When the configured model is not found in the model prompt mapper, then we use the
|
|
68
69
|
# fallback prompt template
|
|
69
70
|
FALLBACK_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
70
|
-
"
|
|
71
|
+
"agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2"
|
|
71
72
|
)
|
|
72
73
|
|
|
73
74
|
|
|
@@ -44,25 +44,26 @@ DEFAULT_LLM_CONFIG = {
|
|
|
44
44
|
TIMEOUT_CONFIG_KEY: 7,
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
# TODO: only load the agent prompt template in cases where agents are actually used
|
|
47
48
|
DEFAULT_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
48
|
-
"
|
|
49
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
49
50
|
)
|
|
50
51
|
FALLBACK_COMMAND_PROMPT_TEMPLATE_FILE_NAME = (
|
|
51
|
-
"
|
|
52
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
52
53
|
)
|
|
53
54
|
MODEL_PROMPT_MAPPER = {
|
|
54
55
|
f"{OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
55
|
-
"
|
|
56
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
56
57
|
),
|
|
57
58
|
f"{AZURE_OPENAI_PROVIDER}/{MODEL_NAME_GPT_4O_2024_11_20}": (
|
|
58
|
-
"
|
|
59
|
+
"agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2"
|
|
59
60
|
),
|
|
60
61
|
f"{AWS_BEDROCK_PROVIDER}/anthropic."
|
|
61
62
|
f"{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}-v1:0": (
|
|
62
|
-
"
|
|
63
|
+
"agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2"
|
|
63
64
|
),
|
|
64
65
|
f"{ANTHROPIC_PROVIDER}/{MODEL_NAME_CLAUDE_3_5_SONNET_20240620}": (
|
|
65
|
-
"
|
|
66
|
+
"agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2"
|
|
66
67
|
),
|
|
67
68
|
}
|
|
68
69
|
|
rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py
CHANGED
|
@@ -5,6 +5,7 @@ from typing import Any, Dict, List, Literal, Optional, Text
|
|
|
5
5
|
import structlog
|
|
6
6
|
|
|
7
7
|
import rasa.shared.utils.io
|
|
8
|
+
from rasa.core.available_agents import AvailableAgents
|
|
8
9
|
from rasa.dialogue_understanding.commands import (
|
|
9
10
|
CannotHandleCommand,
|
|
10
11
|
Command,
|
|
@@ -44,6 +45,7 @@ from rasa.shared.constants import (
|
|
|
44
45
|
PROMPT_TEMPLATE_CONFIG_KEY,
|
|
45
46
|
ROUTE_TO_CALM_SLOT,
|
|
46
47
|
)
|
|
48
|
+
from rasa.shared.core.events import AgentCompleted
|
|
47
49
|
from rasa.shared.core.flows import FlowsList
|
|
48
50
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
49
51
|
from rasa.shared.exceptions import ProviderClientAPIException
|
|
@@ -396,13 +398,15 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
|
|
|
396
398
|
current_slot_allowed_values = allowed_values_for_slot(
|
|
397
399
|
tracker.slots.get(current_slot)
|
|
398
400
|
)
|
|
399
|
-
current_conversation = tracker_as_readable_transcript(
|
|
401
|
+
current_conversation = tracker_as_readable_transcript(
|
|
402
|
+
tracker, highlight_agent_turns=True
|
|
403
|
+
)
|
|
400
404
|
latest_user_message = sanitize_message_for_prompt(message.get(TEXT))
|
|
401
405
|
current_conversation += f"\nUSER: {latest_user_message}"
|
|
402
406
|
|
|
403
407
|
inputs = {
|
|
404
408
|
"available_flows": self.prepare_flows_for_template(
|
|
405
|
-
startable_flows, tracker
|
|
409
|
+
startable_flows, tracker, add_agent_info=True
|
|
406
410
|
),
|
|
407
411
|
"current_conversation": current_conversation,
|
|
408
412
|
"flow_slots": flow_slots,
|
|
@@ -412,6 +416,10 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
|
|
|
412
416
|
"current_slot_type": current_slot_type,
|
|
413
417
|
"current_slot_allowed_values": current_slot_allowed_values,
|
|
414
418
|
"user_message": latest_user_message,
|
|
419
|
+
"active_agent": self._get_active_agent(tracker, top_flow.id)
|
|
420
|
+
if top_flow
|
|
421
|
+
else None,
|
|
422
|
+
"completed_agents": self._get_completed_agents(tracker),
|
|
415
423
|
}
|
|
416
424
|
|
|
417
425
|
return self.compile_template(self.prompt_template).render(**inputs)
|
|
@@ -459,3 +467,34 @@ class SingleStepBasedLLMCommandGenerator(LLMBasedCommandGenerator, ABC):
|
|
|
459
467
|
) -> Optional[str]:
|
|
460
468
|
"""Get the prompt template from the config or the default prompt template."""
|
|
461
469
|
pass
|
|
470
|
+
|
|
471
|
+
def _get_active_agent(
|
|
472
|
+
self, tracker: DialogueStateTracker, active_flow_id: str
|
|
473
|
+
) -> Optional[Dict[str, Any]]:
|
|
474
|
+
agent_frame = tracker.stack.find_active_agent_stack_frame_for_flow(
|
|
475
|
+
active_flow_id
|
|
476
|
+
)
|
|
477
|
+
if agent_frame:
|
|
478
|
+
return self._get_agent_info(agent_frame.agent_id)
|
|
479
|
+
return None
|
|
480
|
+
|
|
481
|
+
def _get_completed_agents(
|
|
482
|
+
self, tracker: DialogueStateTracker
|
|
483
|
+
) -> List[Dict[str, Any]]:
|
|
484
|
+
completed_agents: List[Dict[str, Any]] = []
|
|
485
|
+
for event in reversed(tracker.events):
|
|
486
|
+
if isinstance(event, AgentCompleted):
|
|
487
|
+
agent_info = self._get_agent_info(event.agent_id)
|
|
488
|
+
if agent_info:
|
|
489
|
+
completed_agents.append(agent_info)
|
|
490
|
+
return completed_agents
|
|
491
|
+
|
|
492
|
+
def _get_agent_info(self, agent_id: str) -> Optional[Dict[str, Any]]:
|
|
493
|
+
agent_config = AvailableAgents.get_agent_config(agent_id)
|
|
494
|
+
if agent_config is None:
|
|
495
|
+
return None
|
|
496
|
+
|
|
497
|
+
return {
|
|
498
|
+
"name": agent_config.agent.name,
|
|
499
|
+
"description": agent_config.agent.description,
|
|
500
|
+
}
|
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any, Dict
|
|
4
|
+
from typing import Any, Dict, List, Optional, Text
|
|
5
5
|
|
|
6
|
+
from rasa.core.actions.action import Action
|
|
7
|
+
from rasa.core.channels import OutputChannel
|
|
8
|
+
from rasa.core.nlg import NaturalLanguageGenerator
|
|
6
9
|
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
10
|
+
from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
|
|
7
11
|
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
12
|
+
from rasa.shared.core.constants import (
|
|
13
|
+
ACTION_ASK_INTERRUPTED_FLOW_TO_CONTINUE,
|
|
14
|
+
ACTION_CANCEL_INTERRUPTED_FLOW,
|
|
15
|
+
ACTION_CONTINUE_INTERRUPTED_FLOW,
|
|
16
|
+
ACTION_SET_INTERRUPTED_FLOWS,
|
|
17
|
+
)
|
|
18
|
+
from rasa.shared.core.domain import Domain
|
|
19
|
+
from rasa.shared.core.events import Event, SlotSet
|
|
20
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
8
21
|
|
|
9
22
|
FLOW_PATTERN_CONTINUE_INTERRUPTED = (
|
|
10
23
|
RASA_DEFAULT_FLOW_PATTERN_PREFIX + "continue_interrupted"
|
|
11
24
|
)
|
|
25
|
+
INTERRUPTED_FLOWS_SLOT = "interrupted_flows"
|
|
26
|
+
INTERRUPTED_FLOW_TO_CONTINUE_SLOT = "interrupted_flow_to_continue"
|
|
27
|
+
MULTIPLE_FLOWS_INTERRUPTED_SLOT = "multiple_flows_interrupted"
|
|
28
|
+
CONFIRMATION_CONTINUE_INTERRUPTED_FLOW_SLOT = "confirmation_continue_interrupted_flow"
|
|
12
29
|
|
|
13
30
|
|
|
14
31
|
@dataclass
|
|
@@ -49,3 +66,148 @@ class ContinueInterruptedPatternFlowStackFrame(PatternFlowStackFrame):
|
|
|
49
66
|
and self.step_id == other.step_id
|
|
50
67
|
and self.previous_flow_name == other.previous_flow_name
|
|
51
68
|
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class ActionSetInterruptedFlows(Action):
|
|
72
|
+
def name(self) -> str:
|
|
73
|
+
return ACTION_SET_INTERRUPTED_FLOWS
|
|
74
|
+
|
|
75
|
+
async def run(
|
|
76
|
+
self,
|
|
77
|
+
output_channel: OutputChannel,
|
|
78
|
+
nlg: NaturalLanguageGenerator,
|
|
79
|
+
tracker: DialogueStateTracker,
|
|
80
|
+
domain: Domain,
|
|
81
|
+
metadata: Optional[Dict[Text, Any]] = None,
|
|
82
|
+
) -> list[Event]:
|
|
83
|
+
interrupted_flows_set = set()
|
|
84
|
+
interrupted_user_flow_stack_frames = tracker.stack.get_all_user_flow_frames()
|
|
85
|
+
|
|
86
|
+
for frame in interrupted_user_flow_stack_frames:
|
|
87
|
+
interrupted_flows_set.add(frame.flow_id)
|
|
88
|
+
|
|
89
|
+
interrupted_flows = list(interrupted_flows_set)
|
|
90
|
+
multiple_flows_interrupted = len(interrupted_flows) > 1
|
|
91
|
+
|
|
92
|
+
return [
|
|
93
|
+
SlotSet(INTERRUPTED_FLOWS_SLOT, interrupted_flows),
|
|
94
|
+
SlotSet(MULTIPLE_FLOWS_INTERRUPTED_SLOT, multiple_flows_interrupted),
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class ActionAskInterruptedFlowToContinue(Action):
|
|
99
|
+
def name(self) -> str:
|
|
100
|
+
return ACTION_ASK_INTERRUPTED_FLOW_TO_CONTINUE
|
|
101
|
+
|
|
102
|
+
async def run(
|
|
103
|
+
self,
|
|
104
|
+
output_channel: OutputChannel,
|
|
105
|
+
nlg: NaturalLanguageGenerator,
|
|
106
|
+
tracker: DialogueStateTracker,
|
|
107
|
+
domain: Domain,
|
|
108
|
+
metadata: Optional[Dict[Text, Any]] = None,
|
|
109
|
+
) -> List[Event]:
|
|
110
|
+
interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
|
|
111
|
+
|
|
112
|
+
buttons = [
|
|
113
|
+
{
|
|
114
|
+
"title": flow_id,
|
|
115
|
+
"payload": f'/SetSlots{{"{INTERRUPTED_FLOW_TO_CONTINUE_SLOT}": '
|
|
116
|
+
f'"{flow_id}"}}',
|
|
117
|
+
}
|
|
118
|
+
for flow_id in interrupted_flows or []
|
|
119
|
+
]
|
|
120
|
+
buttons.append(
|
|
121
|
+
{
|
|
122
|
+
"title": "None of them",
|
|
123
|
+
"payload": f'/SetSlots{{"{INTERRUPTED_FLOW_TO_CONTINUE_SLOT}": '
|
|
124
|
+
f'"none"}}',
|
|
125
|
+
}
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
await output_channel.send_text_with_buttons(
|
|
129
|
+
tracker.sender_id,
|
|
130
|
+
"You previously started several other tasks. "
|
|
131
|
+
"Would you like to resume any of them?",
|
|
132
|
+
buttons=buttons,
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
return []
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class ActionContinueInterruptedFlow(Action):
|
|
139
|
+
def name(self) -> str:
|
|
140
|
+
return ACTION_CONTINUE_INTERRUPTED_FLOW
|
|
141
|
+
|
|
142
|
+
async def run(
|
|
143
|
+
self,
|
|
144
|
+
output_channel: OutputChannel,
|
|
145
|
+
nlg: NaturalLanguageGenerator,
|
|
146
|
+
tracker: DialogueStateTracker,
|
|
147
|
+
domain: Domain,
|
|
148
|
+
metadata: Optional[Dict[Text, Any]] = None,
|
|
149
|
+
) -> List[Event]:
|
|
150
|
+
from rasa.dialogue_understanding.commands import StartFlowCommand
|
|
151
|
+
|
|
152
|
+
# get all necessary slot values
|
|
153
|
+
multiple = tracker.get_slot(MULTIPLE_FLOWS_INTERRUPTED_SLOT)
|
|
154
|
+
selected_flow = tracker.get_slot(INTERRUPTED_FLOW_TO_CONTINUE_SLOT)
|
|
155
|
+
interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
|
|
156
|
+
|
|
157
|
+
original_user_frame = top_user_flow_frame(tracker.stack)
|
|
158
|
+
|
|
159
|
+
# case of multiple interrupted flows, where the user selected a flow to continue
|
|
160
|
+
if multiple:
|
|
161
|
+
flow_id = selected_flow if selected_flow else None
|
|
162
|
+
# case of single interrupted flow, so there is only one flow to continue
|
|
163
|
+
else:
|
|
164
|
+
flow_id = interrupted_flows[0] if interrupted_flows else None
|
|
165
|
+
|
|
166
|
+
event_list = []
|
|
167
|
+
if flow_id:
|
|
168
|
+
# TODO: refactor to avoid creating a StartFlowCommand first
|
|
169
|
+
# resume the flow with the provided flow id
|
|
170
|
+
start_flow_command = StartFlowCommand(flow_id)
|
|
171
|
+
event_list = start_flow_command.resume_flow(
|
|
172
|
+
tracker, tracker.stack, original_user_frame
|
|
173
|
+
)
|
|
174
|
+
else:
|
|
175
|
+
await output_channel.send_text_message(
|
|
176
|
+
tracker.sender_id,
|
|
177
|
+
"You haven't selected a valid task to resume. "
|
|
178
|
+
"Please specify the task you would like to continue.",
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
return event_list
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class ActionCancelInterruptedFlow(Action):
|
|
185
|
+
def name(self) -> str:
|
|
186
|
+
return ACTION_CANCEL_INTERRUPTED_FLOW
|
|
187
|
+
|
|
188
|
+
async def run(
|
|
189
|
+
self,
|
|
190
|
+
output_channel: OutputChannel,
|
|
191
|
+
nlg: NaturalLanguageGenerator,
|
|
192
|
+
tracker: DialogueStateTracker,
|
|
193
|
+
domain: Domain,
|
|
194
|
+
metadata: Optional[Dict[Text, Any]] = None,
|
|
195
|
+
) -> List[Event]:
|
|
196
|
+
from rasa.dialogue_understanding.commands import CancelFlowCommand
|
|
197
|
+
|
|
198
|
+
interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
|
|
199
|
+
|
|
200
|
+
event_list = []
|
|
201
|
+
for flow_id in interrupted_flows:
|
|
202
|
+
# TODO: refactor to avoid creating a CancelFlowCommand first
|
|
203
|
+
cancel_flow_command = CancelFlowCommand()
|
|
204
|
+
event_list.extend(
|
|
205
|
+
cancel_flow_command.cancel_flow(tracker, tracker.stack, flow_id)
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
return event_list + [
|
|
209
|
+
SlotSet(INTERRUPTED_FLOWS_SLOT, None),
|
|
210
|
+
SlotSet(INTERRUPTED_FLOW_TO_CONTINUE_SLOT, None),
|
|
211
|
+
SlotSet(MULTIPLE_FLOWS_INTERRUPTED_SLOT, None),
|
|
212
|
+
SlotSet(CONFIRMATION_CONTINUE_INTERRUPTED_FLOW_SLOT, None),
|
|
213
|
+
]
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
version: "3.1"
|
|
2
2
|
responses:
|
|
3
3
|
|
|
4
|
+
utter_ask_continue_interrupted_flow:
|
|
5
|
+
- text: "Would you like to continue with {{ context.previous_flow_name }}?"
|
|
6
|
+
metadata:
|
|
7
|
+
rephrase: True
|
|
8
|
+
template: jinja
|
|
9
|
+
buttons:
|
|
10
|
+
- title: "Yes"
|
|
11
|
+
payload: "/SetSlots(confirmation_continue_interrupted_flow=true)"
|
|
12
|
+
- title: "No"
|
|
13
|
+
payload: "/SetSlots(confirmation_continue_interrupted_flow=false)"
|
|
14
|
+
|
|
4
15
|
utter_ask_rephrase:
|
|
5
16
|
- text: I’m sorry I am unable to understand you, could you please rephrase?
|
|
6
17
|
|
|
@@ -53,12 +64,6 @@ responses:
|
|
|
53
64
|
rephrase: True
|
|
54
65
|
template: jinja
|
|
55
66
|
|
|
56
|
-
utter_flow_continue_interrupted:
|
|
57
|
-
- text: "Let's continue with {{ context.previous_flow_name }}."
|
|
58
|
-
metadata:
|
|
59
|
-
rephrase: True
|
|
60
|
-
template: jinja
|
|
61
|
-
|
|
62
67
|
utter_free_chitchat_response:
|
|
63
68
|
- text: "Sorry, I'm not able to answer that right now."
|
|
64
69
|
metadata:
|
|
@@ -81,7 +86,7 @@ responses:
|
|
|
81
86
|
rephrase: True
|
|
82
87
|
|
|
83
88
|
utter_inform_hangup:
|
|
84
|
-
- text:
|
|
89
|
+
- text: It seems you are not there anymore. I will hang up shortly.
|
|
85
90
|
metadata:
|
|
86
91
|
rephrase: True
|
|
87
92
|
|
|
@@ -124,6 +129,19 @@ slots:
|
|
|
124
129
|
type: float
|
|
125
130
|
initial_value: 0.0
|
|
126
131
|
max_value: 1000000
|
|
132
|
+
interrupted_flows:
|
|
133
|
+
type: list
|
|
134
|
+
multiple_flows_interrupted:
|
|
135
|
+
type: bool
|
|
136
|
+
initial_value: false
|
|
137
|
+
confirmation_continue_interrupted_flow:
|
|
138
|
+
type: bool
|
|
139
|
+
mappings:
|
|
140
|
+
- type: from_llm
|
|
141
|
+
interrupted_flow_to_continue:
|
|
142
|
+
type: text
|
|
143
|
+
mappings:
|
|
144
|
+
- type: from_llm
|
|
127
145
|
|
|
128
146
|
flows:
|
|
129
147
|
pattern_cancel_flow:
|
|
@@ -210,7 +228,33 @@ flows:
|
|
|
210
228
|
description: Conversation repair flow for managing when users switch between different flows
|
|
211
229
|
name: pattern continue interrupted
|
|
212
230
|
steps:
|
|
213
|
-
- action:
|
|
231
|
+
- action: action_set_interrupted_flows
|
|
232
|
+
- noop: true
|
|
233
|
+
next:
|
|
234
|
+
- if: slots.multiple_flows_interrupted
|
|
235
|
+
then:
|
|
236
|
+
- collect: interrupted_flow_to_continue
|
|
237
|
+
description: "Fill this slot with the name of the flow the user wants to continue. If the user does not want to continue any of the interrupted flows, fill this slot with 'none'."
|
|
238
|
+
next:
|
|
239
|
+
- if: slots.interrupted_flow_to_continue != "none"
|
|
240
|
+
then:
|
|
241
|
+
- action: action_continue_interrupted_flow
|
|
242
|
+
next: END
|
|
243
|
+
- else:
|
|
244
|
+
- action: action_cancel_interrupted_flow
|
|
245
|
+
next: END
|
|
246
|
+
- else:
|
|
247
|
+
- collect: confirmation_continue_interrupted_flow
|
|
248
|
+
description: "If the user wants to continue the interrupted flow, fill this slot with true. If the user does not want to continue the interrupted flow, fill this slot with false."
|
|
249
|
+
utter: utter_ask_continue_interrupted_flow
|
|
250
|
+
next:
|
|
251
|
+
- if: slots.confirmation_continue_interrupted_flow
|
|
252
|
+
then:
|
|
253
|
+
- action: action_continue_interrupted_flow
|
|
254
|
+
next: END
|
|
255
|
+
- else:
|
|
256
|
+
- action: action_cancel_interrupted_flow
|
|
257
|
+
next: END
|
|
214
258
|
|
|
215
259
|
pattern_correction:
|
|
216
260
|
description: Conversation repair flow for managing user input changes or error corrections
|
|
@@ -37,6 +37,7 @@ from rasa.dialogue_understanding.stack.frames import (
|
|
|
37
37
|
BaseFlowStackFrame,
|
|
38
38
|
)
|
|
39
39
|
from rasa.dialogue_understanding.stack.utils import (
|
|
40
|
+
is_continue_interrupted_flow_active,
|
|
40
41
|
top_flow_frame,
|
|
41
42
|
top_user_flow_frame,
|
|
42
43
|
)
|
|
@@ -428,22 +429,9 @@ def clean_up_commands(
|
|
|
428
429
|
)
|
|
429
430
|
|
|
430
431
|
elif isinstance(command, StartFlowCommand):
|
|
431
|
-
|
|
432
|
-
tracker
|
|
432
|
+
clean_commands = clean_up_start_flow_command(
|
|
433
|
+
clean_commands, tracker, command
|
|
433
434
|
)
|
|
434
|
-
top_flow_id = top_user_frame.flow_id if top_user_frame else ""
|
|
435
|
-
|
|
436
|
-
if top_flow_id == command.flow:
|
|
437
|
-
# drop a start flow command if the starting flow is equal
|
|
438
|
-
# to the currently active flow
|
|
439
|
-
structlogger.debug(
|
|
440
|
-
"command_processor.clean_up_commands."
|
|
441
|
-
"skip_command_flow_already_active",
|
|
442
|
-
command=command,
|
|
443
|
-
)
|
|
444
|
-
continue
|
|
445
|
-
|
|
446
|
-
clean_commands.append(command)
|
|
447
435
|
|
|
448
436
|
# handle chitchat command differently from other free-form answer commands
|
|
449
437
|
elif isinstance(command, ChitChatAnswerCommand):
|
|
@@ -529,6 +517,34 @@ def ensure_max_number_of_command_type(
|
|
|
529
517
|
return filtered
|
|
530
518
|
|
|
531
519
|
|
|
520
|
+
def clean_up_start_flow_command(
|
|
521
|
+
clean_commands: List[Command],
|
|
522
|
+
tracker: DialogueStateTracker,
|
|
523
|
+
command: StartFlowCommand,
|
|
524
|
+
) -> List[Command]:
|
|
525
|
+
"""Clean up a start flow command."""
|
|
526
|
+
continue_interrupted_flow_active = is_continue_interrupted_flow_active(
|
|
527
|
+
tracker.stack
|
|
528
|
+
)
|
|
529
|
+
|
|
530
|
+
top_user_frame = top_user_flow_frame(
|
|
531
|
+
tracker.stack, ignore_call_and_link_frames=False
|
|
532
|
+
)
|
|
533
|
+
top_flow_id = top_user_frame.flow_id if top_user_frame else ""
|
|
534
|
+
|
|
535
|
+
if top_flow_id == command.flow and not continue_interrupted_flow_active:
|
|
536
|
+
# drop a start flow command if the starting flow is equal
|
|
537
|
+
# to the currently active flow
|
|
538
|
+
structlogger.debug(
|
|
539
|
+
"command_processor.clean_up_commands." "skip_command_flow_already_active",
|
|
540
|
+
command=command,
|
|
541
|
+
)
|
|
542
|
+
return clean_commands
|
|
543
|
+
|
|
544
|
+
clean_commands.append(command)
|
|
545
|
+
return clean_commands
|
|
546
|
+
|
|
547
|
+
|
|
532
548
|
def clean_up_clarify_command(
|
|
533
549
|
commands_so_far: List[Command],
|
|
534
550
|
all_commands: List[Command],
|