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
|
@@ -8,6 +8,13 @@ from typing import Any, Callable, Dict, List, Optional
|
|
|
8
8
|
import jsonpatch
|
|
9
9
|
import structlog
|
|
10
10
|
|
|
11
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
12
|
+
AgentStackFrame,
|
|
13
|
+
AgentState,
|
|
14
|
+
FlowStackFrameType,
|
|
15
|
+
UserFlowStackFrame,
|
|
16
|
+
)
|
|
17
|
+
|
|
11
18
|
if typing.TYPE_CHECKING:
|
|
12
19
|
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
13
20
|
|
|
@@ -91,6 +98,42 @@ class DialogueStack:
|
|
|
91
98
|
"""
|
|
92
99
|
return self.frames.pop()
|
|
93
100
|
|
|
101
|
+
def move_frames_to_top(self, frames_to_move: List["DialogueStackFrame"]) -> None:
|
|
102
|
+
"""Moves specified frames to top of stack while preserving their relative order.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
frames_to_move: The frames to move to the top of the stack.
|
|
106
|
+
"""
|
|
107
|
+
# Get frames that are not being moved
|
|
108
|
+
frames_to_keep = [frame for frame in self.frames if frame not in frames_to_move]
|
|
109
|
+
|
|
110
|
+
# Reorder: keep frames first, then moved frames
|
|
111
|
+
self.frames = frames_to_keep + frames_to_move
|
|
112
|
+
|
|
113
|
+
# set all frames to interrupt except for LINK and CALL
|
|
114
|
+
for frame in self.frames:
|
|
115
|
+
if (
|
|
116
|
+
isinstance(frame, UserFlowStackFrame)
|
|
117
|
+
and frame.frame_type == FlowStackFrameType.LINK
|
|
118
|
+
):
|
|
119
|
+
continue
|
|
120
|
+
if (
|
|
121
|
+
isinstance(frame, UserFlowStackFrame)
|
|
122
|
+
and frame.frame_type == FlowStackFrameType.CALL
|
|
123
|
+
):
|
|
124
|
+
continue
|
|
125
|
+
if (
|
|
126
|
+
isinstance(frame, UserFlowStackFrame)
|
|
127
|
+
and frame.frame_type == FlowStackFrameType.REGULAR
|
|
128
|
+
):
|
|
129
|
+
frame.frame_type = FlowStackFrameType.INTERRUPT
|
|
130
|
+
|
|
131
|
+
# set the first frame to regular
|
|
132
|
+
for frame in self.frames:
|
|
133
|
+
if isinstance(frame, UserFlowStackFrame):
|
|
134
|
+
frame.frame_type = FlowStackFrameType.REGULAR
|
|
135
|
+
return
|
|
136
|
+
|
|
94
137
|
def current_context(self) -> Dict[str, Any]:
|
|
95
138
|
"""Returns the context of the topmost frame.
|
|
96
139
|
|
|
@@ -109,7 +152,7 @@ class DialogueStack:
|
|
|
109
152
|
"""Returns the topmost frame from the stack.
|
|
110
153
|
|
|
111
154
|
Args:
|
|
112
|
-
|
|
155
|
+
ignore: The ID of the flow to ignore. Picks the top most
|
|
113
156
|
frame that has a different flow ID.
|
|
114
157
|
|
|
115
158
|
Returns:
|
|
@@ -136,7 +179,8 @@ class DialogueStack:
|
|
|
136
179
|
patch_dump: The patch to apply to the stack.
|
|
137
180
|
|
|
138
181
|
Returns:
|
|
139
|
-
|
|
182
|
+
The updated stack.
|
|
183
|
+
"""
|
|
140
184
|
patch = jsonpatch.JsonPatch.from_string(patch_dump)
|
|
141
185
|
dialogue_stack_dump = patch.apply(self.as_dict())
|
|
142
186
|
return DialogueStack.from_dict(dialogue_stack_dump)
|
|
@@ -177,3 +221,80 @@ class DialogueStack:
|
|
|
177
221
|
if patch:
|
|
178
222
|
return patch.to_string()
|
|
179
223
|
return None
|
|
224
|
+
|
|
225
|
+
def _find_agent_frame_by_predicate(
|
|
226
|
+
self, predicate: Callable[[AgentStackFrame], bool]
|
|
227
|
+
) -> List[AgentStackFrame]:
|
|
228
|
+
stack_frames: List[AgentStackFrame] = []
|
|
229
|
+
for stack_frame in reversed(self.frames):
|
|
230
|
+
if isinstance(stack_frame, AgentStackFrame) and predicate(stack_frame):
|
|
231
|
+
stack_frames.append(stack_frame)
|
|
232
|
+
return stack_frames
|
|
233
|
+
|
|
234
|
+
def find_active_agent_frame(self) -> Optional[AgentStackFrame]:
|
|
235
|
+
stack_frames = self._find_agent_frame_by_predicate(
|
|
236
|
+
lambda frame: frame.state == AgentState.WAITING_FOR_INPUT
|
|
237
|
+
)
|
|
238
|
+
if stack_frames:
|
|
239
|
+
return stack_frames[0]
|
|
240
|
+
return None
|
|
241
|
+
|
|
242
|
+
def find_agent_stack_frame_by_agent(
|
|
243
|
+
self, agent_id: str
|
|
244
|
+
) -> Optional[AgentStackFrame]:
|
|
245
|
+
"""Get the agent stack frame for a specific agent ID.
|
|
246
|
+
|
|
247
|
+
May also include the agent stack frame in the INTERRUPTED state.
|
|
248
|
+
"""
|
|
249
|
+
stack_frames = self._find_agent_frame_by_predicate(
|
|
250
|
+
lambda frame: frame.agent_id == agent_id
|
|
251
|
+
)
|
|
252
|
+
if stack_frames:
|
|
253
|
+
return stack_frames[0]
|
|
254
|
+
return None
|
|
255
|
+
|
|
256
|
+
def find_active_agent_stack_frame_for_flow(
|
|
257
|
+
self, flow_id: str
|
|
258
|
+
) -> Optional[AgentStackFrame]:
|
|
259
|
+
"""Get the agent stack frame of a specific flow."""
|
|
260
|
+
stack_frames = self._find_agent_frame_by_predicate(
|
|
261
|
+
lambda frame: frame.flow_id == flow_id
|
|
262
|
+
)
|
|
263
|
+
for stack_frame in stack_frames:
|
|
264
|
+
if stack_frame.state == AgentState.WAITING_FOR_INPUT:
|
|
265
|
+
return stack_frame
|
|
266
|
+
return None
|
|
267
|
+
|
|
268
|
+
def get_active_agent_id(self) -> Optional[typing.Text]:
|
|
269
|
+
agent_frame = self.find_active_agent_frame()
|
|
270
|
+
if agent_frame:
|
|
271
|
+
return agent_frame.agent_id
|
|
272
|
+
return None
|
|
273
|
+
|
|
274
|
+
def agent_is_active(self) -> bool:
|
|
275
|
+
return self.find_active_agent_frame() is not None
|
|
276
|
+
|
|
277
|
+
def get_all_user_flow_frames(
|
|
278
|
+
self, ignore_call_and_link_frames: bool = True
|
|
279
|
+
) -> List[UserFlowStackFrame]:
|
|
280
|
+
"""Get all user flow frames from the dialogue stack.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
ignore_call_and_link_frames: Whether to ignore user frames of type `call`
|
|
284
|
+
and `link`. By default, these frames are ignored.
|
|
285
|
+
|
|
286
|
+
Returns:
|
|
287
|
+
A list of all user flow frames in the dialogue stack.
|
|
288
|
+
"""
|
|
289
|
+
return [
|
|
290
|
+
frame
|
|
291
|
+
for frame in self.frames
|
|
292
|
+
if isinstance(frame, UserFlowStackFrame)
|
|
293
|
+
and (
|
|
294
|
+
not ignore_call_and_link_frames
|
|
295
|
+
or (
|
|
296
|
+
frame.frame_type != FlowStackFrameType.CALL
|
|
297
|
+
and frame.frame_type != FlowStackFrameType.LINK
|
|
298
|
+
)
|
|
299
|
+
)
|
|
300
|
+
]
|
|
@@ -94,6 +94,18 @@ class InvalidFlowStepIdException(Exception):
|
|
|
94
94
|
super().__init__(f"Invalid flow step ID '{step_id}' for flow '{flow_id}'.")
|
|
95
95
|
|
|
96
96
|
|
|
97
|
+
class InvalidAgentState(RasaException):
|
|
98
|
+
"""Raised if the agent state is invalid."""
|
|
99
|
+
|
|
100
|
+
def __init__(self, invalid_state: str) -> None:
|
|
101
|
+
"""Creates a `InvalidAgentState`.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
invalid_state: The invalid agent state.
|
|
105
|
+
"""
|
|
106
|
+
super().__init__(f"Invalid agent state '{invalid_state}'.")
|
|
107
|
+
|
|
108
|
+
|
|
97
109
|
@dataclass
|
|
98
110
|
class BaseFlowStackFrame(DialogueStackFrame):
|
|
99
111
|
flow_id: str = "" # needed to avoid "default arg before non-default" error
|
|
@@ -171,3 +183,48 @@ class UserFlowStackFrame(BaseFlowStackFrame):
|
|
|
171
183
|
step_id=data["step_id"],
|
|
172
184
|
frame_type=FlowStackFrameType.from_str(data.get("frame_type")),
|
|
173
185
|
)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class AgentState(str, Enum):
|
|
189
|
+
INTERRUPTED = "interrupted"
|
|
190
|
+
WAITING_FOR_INPUT = "waiting_for_input"
|
|
191
|
+
|
|
192
|
+
@staticmethod
|
|
193
|
+
def from_str(state: Optional[str]) -> AgentState:
|
|
194
|
+
if state == AgentState.WAITING_FOR_INPUT.value:
|
|
195
|
+
return AgentState.WAITING_FOR_INPUT
|
|
196
|
+
elif state == AgentState.INTERRUPTED.value:
|
|
197
|
+
return AgentState.INTERRUPTED
|
|
198
|
+
else:
|
|
199
|
+
raise InvalidAgentState(state)
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
@dataclass
|
|
203
|
+
class AgentStackFrame(BaseFlowStackFrame):
|
|
204
|
+
agent_id: str = ""
|
|
205
|
+
state: AgentState = AgentState.WAITING_FOR_INPUT
|
|
206
|
+
metadata: Optional[Dict[str, Any]] = None
|
|
207
|
+
|
|
208
|
+
@classmethod
|
|
209
|
+
def type(cls) -> str:
|
|
210
|
+
"""Returns the type of the frame."""
|
|
211
|
+
return "agent"
|
|
212
|
+
|
|
213
|
+
@staticmethod
|
|
214
|
+
def from_dict(data: Dict[str, Any]) -> AgentStackFrame:
|
|
215
|
+
"""Creates a `AgentStackFrame` from a dictionary.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
data: The dictionary to create the `AgentStackFrame` from.
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
The created `AgentStackFrame`.
|
|
222
|
+
"""
|
|
223
|
+
return AgentStackFrame(
|
|
224
|
+
frame_id=data["frame_id"],
|
|
225
|
+
flow_id=data["flow_id"],
|
|
226
|
+
step_id=data["step_id"],
|
|
227
|
+
agent_id=data["agent_id"],
|
|
228
|
+
state=AgentState.from_str(data["state"]),
|
|
229
|
+
metadata=data.get("metadata"),
|
|
230
|
+
)
|
|
@@ -198,8 +198,9 @@ def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
|
|
|
198
198
|
def get_collect_steps_excluding_ask_before_filling_for_active_flow(
|
|
199
199
|
dialogue_stack: DialogueStack, all_flows: FlowsList
|
|
200
200
|
) -> Set[str]:
|
|
201
|
-
"""Get all collect steps that are part of the current flow
|
|
202
|
-
|
|
201
|
+
"""Get all collect steps that are part of the current flow.
|
|
202
|
+
|
|
203
|
+
Collect steps that have to be asked before filling are not considered.
|
|
203
204
|
|
|
204
205
|
Args:
|
|
205
206
|
dialogue_stack: The dialogue stack.
|
|
@@ -230,3 +231,17 @@ def get_collect_steps_excluding_ask_before_filling_for_active_flow(
|
|
|
230
231
|
for step in active_flow.get_collect_steps()
|
|
231
232
|
if not step.ask_before_filling
|
|
232
233
|
)
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def is_continue_interrupted_flow_active(stack: DialogueStack) -> bool:
|
|
237
|
+
"""Check if the continue interrupted flow is active."""
|
|
238
|
+
from rasa.dialogue_understanding.patterns.continue_interrupted import (
|
|
239
|
+
ContinueInterruptedPatternFlowStackFrame,
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
for frame in reversed(stack.frames):
|
|
243
|
+
if isinstance(frame, ContinueInterruptedPatternFlowStackFrame):
|
|
244
|
+
return True
|
|
245
|
+
if isinstance(frame, UserFlowStackFrame):
|
|
246
|
+
return False
|
|
247
|
+
return False
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import time
|
|
3
|
-
from
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any, Dict, List, Optional, Union
|
|
4
5
|
|
|
5
6
|
import structlog
|
|
6
7
|
from tqdm import tqdm
|
|
7
8
|
|
|
9
|
+
from rasa.core.available_agents import AvailableAgents
|
|
8
10
|
from rasa.core.available_endpoints import AvailableEndpoints
|
|
9
11
|
from rasa.core.channels import CollectingOutputChannel, UserMessage
|
|
10
12
|
from rasa.core.exceptions import AgentNotReady
|
|
@@ -52,10 +54,11 @@ class DialogueUnderstandingTestRunner:
|
|
|
52
54
|
|
|
53
55
|
def __init__(
|
|
54
56
|
self,
|
|
55
|
-
model_path: Optional[
|
|
57
|
+
model_path: Optional[str] = None,
|
|
56
58
|
model_server: Optional[EndpointConfig] = None,
|
|
57
59
|
remote_storage: Optional[StorageType] = None,
|
|
58
60
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
61
|
+
sub_agents_path: Optional[Union[Path, str]] = None,
|
|
59
62
|
) -> None:
|
|
60
63
|
"""Initializes the Dialogue Understanding test suite runner.
|
|
61
64
|
|
|
@@ -68,6 +71,7 @@ class DialogueUnderstandingTestRunner:
|
|
|
68
71
|
import rasa.core.agent
|
|
69
72
|
|
|
70
73
|
self._check_action_server(endpoints)
|
|
74
|
+
sub_agents = AvailableAgents.get_instance(sub_agents_path)
|
|
71
75
|
|
|
72
76
|
self.agent = asyncio.run(
|
|
73
77
|
rasa.core.agent.load_agent(
|
|
@@ -75,6 +79,7 @@ class DialogueUnderstandingTestRunner:
|
|
|
75
79
|
model_server=model_server,
|
|
76
80
|
remote_storage=remote_storage,
|
|
77
81
|
endpoints=endpoints,
|
|
82
|
+
sub_agents=sub_agents,
|
|
78
83
|
)
|
|
79
84
|
)
|
|
80
85
|
if not self.agent.is_ready():
|
rasa/e2e_test/e2e_test_runner.py
CHANGED
|
@@ -13,6 +13,7 @@ import structlog
|
|
|
13
13
|
from tqdm import tqdm
|
|
14
14
|
|
|
15
15
|
import rasa.shared.utils.io
|
|
16
|
+
from rasa.core.available_agents import AvailableAgents
|
|
16
17
|
from rasa.core.available_endpoints import AvailableEndpoints
|
|
17
18
|
from rasa.core.channels import CollectingOutputChannel, UserMessage
|
|
18
19
|
from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
|
|
@@ -65,6 +66,7 @@ class E2ETestRunner:
|
|
|
65
66
|
model_server: Optional[EndpointConfig] = None,
|
|
66
67
|
remote_storage: Optional[StorageType] = None,
|
|
67
68
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
69
|
+
sub_agents_path: Optional[Text] = None,
|
|
68
70
|
**kwargs: Any,
|
|
69
71
|
) -> None:
|
|
70
72
|
"""Initializes the E2E test suite runner.
|
|
@@ -94,12 +96,15 @@ class E2ETestRunner:
|
|
|
94
96
|
if endpoints and not are_custom_actions_stubbed:
|
|
95
97
|
self._action_server_is_reachable(endpoints)
|
|
96
98
|
|
|
99
|
+
sub_agents = AvailableAgents.get_instance(sub_agents_path)
|
|
100
|
+
|
|
97
101
|
self.agent = asyncio.run(
|
|
98
102
|
rasa.core.agent.load_agent(
|
|
99
103
|
model_path=model_path,
|
|
100
104
|
model_server=model_server,
|
|
101
105
|
remote_storage=remote_storage,
|
|
102
106
|
endpoints=endpoints,
|
|
107
|
+
sub_agents=sub_agents,
|
|
103
108
|
)
|
|
104
109
|
)
|
|
105
110
|
|
|
@@ -742,7 +747,7 @@ class E2ETestRunner:
|
|
|
742
747
|
test_result = test_turns[index]
|
|
743
748
|
if index in failure_points:
|
|
744
749
|
diff_test_text, diff_actual_text = cls._handle_fail_diff(
|
|
745
|
-
test_result,
|
|
750
|
+
test_result,
|
|
746
751
|
latest_response,
|
|
747
752
|
cls._select_bot_utter_turns(test_turns, index),
|
|
748
753
|
) # test_result can only be TestStep in failure_points
|
|
@@ -806,7 +811,12 @@ class E2ETestRunner:
|
|
|
806
811
|
"""
|
|
807
812
|
# This will only be used when the TestCase is not started
|
|
808
813
|
# with a user step
|
|
809
|
-
|
|
814
|
+
latest_response_event = test_turns[-1]
|
|
815
|
+
if not isinstance(latest_response_event, ActualStepOutput):
|
|
816
|
+
raise ValueError(
|
|
817
|
+
f"Expected ActualStepOutput, got {type(latest_response_event)}"
|
|
818
|
+
)
|
|
819
|
+
latest_response: ActualStepOutput = latest_response_event
|
|
810
820
|
failures = []
|
|
811
821
|
match = None
|
|
812
822
|
for position in range(last_user_step_position, len(test_turns) - 1):
|
rasa/engine/caching.py
CHANGED
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
import shutil
|
|
6
6
|
from datetime import datetime
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Any, List, Optional, Text, Tuple
|
|
8
|
+
from typing import Any, List, Optional, Text, Tuple, Union
|
|
9
9
|
|
|
10
10
|
import sqlalchemy as sa
|
|
11
11
|
import sqlalchemy.orm
|
|
@@ -294,7 +294,7 @@ class LocalTrainingCache(TrainingCache):
|
|
|
294
294
|
|
|
295
295
|
def _cache_output_to_disk(
|
|
296
296
|
self, output: Cacheable, model_storage: ModelStorage
|
|
297
|
-
) -> Tuple[Optional[Text], Optional[Text]]:
|
|
297
|
+
) -> Tuple[Optional[Union[Path, Text]], Optional[Text]]:
|
|
298
298
|
tempdir_name = rasa.utils.common.get_temp_dir_name()
|
|
299
299
|
|
|
300
300
|
# Use `TempDirectoryPath` instead of `tempfile.TemporaryDirectory` as this
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
from rasa.core.policies.enterprise_search_policy import EnterpriseSearchPolicy
|
|
2
2
|
from rasa.core.policies.flow_policy import FlowPolicy
|
|
3
3
|
from rasa.core.policies.intentless_policy import IntentlessPolicy
|
|
4
|
-
from rasa.core.policies.memoization import AugmentedMemoizationPolicy
|
|
5
|
-
from rasa.core.policies.rule_policy import RulePolicy
|
|
6
|
-
from rasa.core.policies.ted_policy import TEDPolicy
|
|
7
|
-
from rasa.core.policies.unexpected_intent_policy import UnexpecTEDIntentPolicy
|
|
4
|
+
from rasa.core.policies.memoization import AugmentedMemoizationPolicy
|
|
8
5
|
from rasa.dialogue_understanding.coexistence.intent_based_router import (
|
|
9
6
|
IntentBasedRouter,
|
|
10
7
|
)
|
|
@@ -13,7 +10,6 @@ from rasa.dialogue_understanding.generator import (
|
|
|
13
10
|
LLMCommandGenerator,
|
|
14
11
|
)
|
|
15
12
|
from rasa.dialogue_understanding.generator.nlu_command_adapter import NLUCommandAdapter
|
|
16
|
-
from rasa.nlu.classifiers.diet_classifier import DIETClassifier
|
|
17
13
|
from rasa.nlu.classifiers.fallback_classifier import FallbackClassifier
|
|
18
14
|
from rasa.nlu.classifiers.keyword_intent_classifier import KeywordIntentClassifier
|
|
19
15
|
from rasa.nlu.classifiers.logistic_regression_classifier import (
|
|
@@ -21,14 +17,11 @@ from rasa.nlu.classifiers.logistic_regression_classifier import (
|
|
|
21
17
|
)
|
|
22
18
|
from rasa.nlu.classifiers.mitie_intent_classifier import MitieIntentClassifier
|
|
23
19
|
from rasa.nlu.classifiers.sklearn_intent_classifier import SklearnIntentClassifier
|
|
24
|
-
from rasa.nlu.extractors.crf_entity_extractor import CRFEntityExtractor
|
|
25
20
|
from rasa.nlu.extractors.duckling_entity_extractor import DucklingEntityExtractor
|
|
26
21
|
from rasa.nlu.extractors.entity_synonyms import EntitySynonymMapper
|
|
27
22
|
from rasa.nlu.extractors.mitie_entity_extractor import MitieEntityExtractor
|
|
28
23
|
from rasa.nlu.extractors.regex_entity_extractor import RegexEntityExtractor
|
|
29
24
|
from rasa.nlu.extractors.spacy_entity_extractor import SpacyEntityExtractor
|
|
30
|
-
from rasa.nlu.featurizers.dense_featurizer.convert_featurizer import ConveRTFeaturizer
|
|
31
|
-
from rasa.nlu.featurizers.dense_featurizer.lm_featurizer import LanguageModelFeaturizer
|
|
32
25
|
from rasa.nlu.featurizers.dense_featurizer.mitie_featurizer import MitieFeaturizer
|
|
33
26
|
from rasa.nlu.featurizers.dense_featurizer.spacy_featurizer import SpacyFeaturizer
|
|
34
27
|
from rasa.nlu.featurizers.sparse_featurizer.count_vectors_featurizer import (
|
|
@@ -38,7 +31,6 @@ from rasa.nlu.featurizers.sparse_featurizer.lexical_syntactic_featurizer import
|
|
|
38
31
|
LexicalSyntacticFeaturizer,
|
|
39
32
|
)
|
|
40
33
|
from rasa.nlu.featurizers.sparse_featurizer.regex_featurizer import RegexFeaturizer
|
|
41
|
-
from rasa.nlu.selectors.response_selector import ResponseSelector
|
|
42
34
|
from rasa.nlu.tokenizers.jieba_tokenizer import JiebaTokenizer
|
|
43
35
|
from rasa.nlu.tokenizers.mitie_tokenizer import MitieTokenizer
|
|
44
36
|
from rasa.nlu.tokenizers.spacy_tokenizer import SpacyTokenizer
|
|
@@ -48,7 +40,7 @@ from rasa.nlu.utils.spacy_utils import SpacyNLP
|
|
|
48
40
|
|
|
49
41
|
DEFAULT_COMPONENTS = [
|
|
50
42
|
# Message Classifiers
|
|
51
|
-
DIETClassifier,
|
|
43
|
+
# DIETClassifier,
|
|
52
44
|
FallbackClassifier,
|
|
53
45
|
KeywordIntentClassifier,
|
|
54
46
|
MitieIntentClassifier,
|
|
@@ -59,9 +51,9 @@ DEFAULT_COMPONENTS = [
|
|
|
59
51
|
LLMBasedRouter,
|
|
60
52
|
IntentBasedRouter,
|
|
61
53
|
# Response Selectors
|
|
62
|
-
ResponseSelector,
|
|
54
|
+
# ResponseSelector,
|
|
63
55
|
# Message Entity Extractors
|
|
64
|
-
CRFEntityExtractor,
|
|
56
|
+
# CRFEntityExtractor,
|
|
65
57
|
DucklingEntityExtractor,
|
|
66
58
|
EntitySynonymMapper,
|
|
67
59
|
MitieEntityExtractor,
|
|
@@ -69,11 +61,11 @@ DEFAULT_COMPONENTS = [
|
|
|
69
61
|
RegexEntityExtractor,
|
|
70
62
|
# Message Feauturizers
|
|
71
63
|
LexicalSyntacticFeaturizer,
|
|
72
|
-
ConveRTFeaturizer,
|
|
64
|
+
# ConveRTFeaturizer,
|
|
73
65
|
MitieFeaturizer,
|
|
74
66
|
SpacyFeaturizer,
|
|
75
67
|
CountVectorsFeaturizer,
|
|
76
|
-
LanguageModelFeaturizer,
|
|
68
|
+
# LanguageModelFeaturizer,
|
|
77
69
|
RegexFeaturizer,
|
|
78
70
|
# Tokenizers
|
|
79
71
|
JiebaTokenizer,
|
|
@@ -84,10 +76,10 @@ DEFAULT_COMPONENTS = [
|
|
|
84
76
|
MitieNLP,
|
|
85
77
|
SpacyNLP,
|
|
86
78
|
# Dialogue Management Policies
|
|
87
|
-
TEDPolicy,
|
|
88
|
-
UnexpecTEDIntentPolicy,
|
|
89
|
-
RulePolicy,
|
|
90
|
-
MemoizationPolicy,
|
|
79
|
+
# TEDPolicy,
|
|
80
|
+
# UnexpecTEDIntentPolicy,
|
|
81
|
+
# RulePolicy,
|
|
82
|
+
# MemoizationPolicy,
|
|
91
83
|
AugmentedMemoizationPolicy,
|
|
92
84
|
FlowPolicy,
|
|
93
85
|
EnterpriseSearchPolicy,
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
import os
|
|
5
4
|
import shutil
|
|
6
5
|
import sys
|
|
7
|
-
import tarfile
|
|
8
6
|
import tempfile
|
|
9
7
|
import uuid
|
|
10
8
|
from contextlib import contextmanager
|
|
11
9
|
from datetime import datetime
|
|
12
10
|
from pathlib import Path
|
|
13
|
-
from typing import
|
|
11
|
+
from typing import Generator, Optional, Text, Tuple, Union
|
|
14
12
|
|
|
15
13
|
from tarsafe import TarSafe
|
|
16
14
|
|
|
@@ -59,35 +57,6 @@ def windows_safe_temporary_directory(
|
|
|
59
57
|
yield temporary_directory
|
|
60
58
|
|
|
61
59
|
|
|
62
|
-
def filter_normpath(member: tarfile.TarInfo, dest_path: str) -> tarfile.TarInfo:
|
|
63
|
-
"""Normalize tar member paths for safe extraction"""
|
|
64
|
-
if member.name:
|
|
65
|
-
member.name = os.path.normpath(member.name)
|
|
66
|
-
return member
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
FilterFunction = Callable[[tarfile.TarInfo, str], Optional[tarfile.TarInfo]]
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def create_combined_filter(existing_filter: Optional[FilterFunction]) -> FilterFunction:
|
|
73
|
-
"""Create a filter that combines existing filter with path normalization"""
|
|
74
|
-
|
|
75
|
-
def combined_filter(
|
|
76
|
-
member: tarfile.TarInfo, dest_path: str
|
|
77
|
-
) -> Optional[tarfile.TarInfo]:
|
|
78
|
-
"""Apply existing filter first, then path normalization"""
|
|
79
|
-
if existing_filter is not None:
|
|
80
|
-
filtered_member = existing_filter(member, dest_path)
|
|
81
|
-
if filtered_member is None:
|
|
82
|
-
return None # Rejected by existing filter
|
|
83
|
-
member = filtered_member # Use the filtered result
|
|
84
|
-
|
|
85
|
-
# Apply our path normalization
|
|
86
|
-
return filter_normpath(member, dest_path)
|
|
87
|
-
|
|
88
|
-
return combined_filter
|
|
89
|
-
|
|
90
|
-
|
|
91
60
|
class LocalModelStorage(ModelStorage):
|
|
92
61
|
"""Stores and provides output of `GraphComponents` on local disk."""
|
|
93
62
|
|
|
@@ -153,19 +122,7 @@ class LocalModelStorage(ModelStorage):
|
|
|
153
122
|
# this restriction in environments where it's not possible
|
|
154
123
|
# to override this behavior, mostly for internal policy reasons
|
|
155
124
|
# reference: https://stackoverflow.com/a/49102229
|
|
156
|
-
|
|
157
|
-
# Use extraction filter to normalize paths for compatibility
|
|
158
|
-
# before trying the \\?\ prefix approach first
|
|
159
|
-
prev_filter = getattr(tar, "extraction_filter", None)
|
|
160
|
-
tar.extraction_filter = create_combined_filter(prev_filter)
|
|
161
|
-
tar.extractall(f"\\\\?\\{temporary_directory}")
|
|
162
|
-
except Exception:
|
|
163
|
-
# Fallback for Python versions with tarfile security fix
|
|
164
|
-
logger.warning(
|
|
165
|
-
"Failed to extract model archive with long path support. "
|
|
166
|
-
"Falling back to regular extraction."
|
|
167
|
-
)
|
|
168
|
-
tar.extractall(temporary_directory)
|
|
125
|
+
tar.extractall(f"\\\\?\\{temporary_directory}")
|
|
169
126
|
else:
|
|
170
127
|
tar.extractall(temporary_directory)
|
|
171
128
|
LocalModelStorage._assert_not_rasa2_archive(temporary_directory)
|