rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__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/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +213 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +889 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +228 -0
- rasa/agents/validation.py +538 -0
- rasa/api.py +23 -9
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +96 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +38 -0
- rasa/builder/copilot/copilot.py +562 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +690 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +234 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
- rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/clients.py +256 -0
- rasa/builder/guardrails/constants.py +12 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/models.py +266 -0
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +94 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +609 -0
- rasa/builder/llm_service.py +273 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +234 -0
- rasa/builder/models.py +229 -0
- rasa/builder/project_generator.py +463 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/service.py +1367 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +188 -0
- rasa/builder/validation_service.py +101 -0
- rasa/cli/arguments/data.py +9 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +78 -10
- rasa/cli/dialogue_understanding_test.py +11 -7
- rasa/cli/e2e_test.py +10 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +9 -4
- rasa/cli/interactive.py +8 -4
- rasa/cli/llm_fine_tuning.py +12 -6
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +8 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +11 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/defaults.py +1 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
- rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
- rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
- rasa/cli/project_templates/finance/actions/db.py +117 -0
- rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
- rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
- rasa/cli/project_templates/finance/config.yml +29 -0
- rasa/cli/project_templates/finance/credentials.yml +33 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
- rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
- rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
- rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
- rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
- rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
- rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
- rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
- rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
- rasa/cli/project_templates/finance/data/data.md +14 -0
- rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
- rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
- rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
- rasa/cli/project_templates/finance/db/cards.json +18 -0
- rasa/cli/project_templates/finance/db/contacts.json +10 -0
- rasa/cli/project_templates/finance/db/my_account.json +6 -0
- rasa/cli/project_templates/finance/db/transactions.json +22 -0
- rasa/cli/project_templates/finance/docs/docs.md +8 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
- rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
- rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
- rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
- rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
- rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
- rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
- rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
- rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
- rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
- rasa/cli/project_templates/finance/domain/domain.md +18 -0
- rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
- rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
- rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
- rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
- rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
- rasa/cli/project_templates/finance/endpoints.yml +67 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +8 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +13 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +8 -10
- rasa/cli/scaffold.py +50 -6
- rasa/cli/shell.py +10 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +44 -30
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +232 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +53 -13
- rasa/core/actions/action_exceptions.py +1 -1
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +22 -2
- rasa/core/available_agents.py +239 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +56 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +29 -16
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +56 -12
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +55 -1
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +82 -32
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +11 -6
- rasa/core/channels/voice_stream/browser_audio.py +91 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +19 -15
- rasa/core/channels/voice_stream/jambonz.py +22 -12
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +170 -32
- rasa/core/concurrent_lock_store.py +83 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
- rasa/core/config/configuration.py +295 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +17 -0
- rasa/core/exceptions.py +1 -1
- rasa/core/featurizers/tracker_featurizers.py +3 -2
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
- rasa/core/lock_store.py +50 -10
- rasa/core/nlg/contextual_response_rephraser.py +5 -0
- rasa/core/nlg/generator.py +1 -1
- rasa/core/persistor.py +7 -7
- rasa/core/policies/enterprise_search_policy.py +9 -10
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +720 -0
- rasa/core/policies/flows/flow_exceptions.py +5 -2
- rasa/core/policies/flows/flow_executor.py +146 -77
- rasa/core/policies/flows/mcp_tool_executor.py +304 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/rule_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +100 -44
- rasa/core/redis_connection_factory.py +474 -0
- rasa/core/run.py +49 -10
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +36 -14
- rasa/core/tracker_stores/sql_tracker_store.py +59 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
- rasa/dialogue_understanding/commands/utils.py +135 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -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 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +25 -8
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +2 -2
- rasa/model_manager/socket_bridge.py +21 -17
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_config.py +1 -1
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
- rasa/shared/agents/auth/constants.py +13 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/auth/utils.py +85 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +11 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +62 -22
- rasa/shared/core/events.py +329 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +57 -6
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +19 -10
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
- rasa/shared/exceptions.py +39 -2
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +86 -4
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
- 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/common.py +26 -1
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +92 -19
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +250 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/download.py +3 -0
- rasa/studio/prompts.py +1 -0
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +19 -52
- rasa/telemetry.py +166 -28
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +121 -7
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/utils/pypred.py +45 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +149 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dist-info/METADATA +212 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
- rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
- rasa_pro-3.13.12.dist-info/METADATA +0 -192
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
rasa/shared/core/domain.py
CHANGED
|
@@ -32,7 +32,6 @@ from ruamel.yaml.scalarstring import DoubleQuotedScalarString
|
|
|
32
32
|
import rasa.shared.core.slot_mappings
|
|
33
33
|
import rasa.shared.utils.common
|
|
34
34
|
import rasa.shared.utils.io
|
|
35
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
36
35
|
from rasa.shared.constants import (
|
|
37
36
|
DEFAULT_CARRY_OVER_SLOTS_TO_NEW_SESSION,
|
|
38
37
|
DEFAULT_SESSION_EXPIRATION_TIME_IN_MINUTES,
|
|
@@ -49,7 +48,6 @@ from rasa.shared.core.constants import (
|
|
|
49
48
|
ACTION_SHOULD_SEND_DOMAIN,
|
|
50
49
|
KEY_MAPPING_TYPE,
|
|
51
50
|
KNOWLEDGE_BASE_SLOT_NAMES,
|
|
52
|
-
SILENCE_TIMEOUT_SLOT,
|
|
53
51
|
SLOT_MAPPINGS,
|
|
54
52
|
SlotMappingType,
|
|
55
53
|
)
|
|
@@ -98,6 +96,8 @@ IS_RETRIEVAL_INTENT_KEY = "is_retrieval_intent"
|
|
|
98
96
|
ENTITY_ROLES_KEY = "roles"
|
|
99
97
|
ENTITY_GROUPS_KEY = "groups"
|
|
100
98
|
ENTITY_FEATURIZATION_KEY = "influence_conversation"
|
|
99
|
+
STORE_ENTITIES_AS_SLOTS_KEY = "store_entities_as_slots"
|
|
100
|
+
DOMAIN_CONFIG_KEY = "config"
|
|
101
101
|
|
|
102
102
|
KEY_SLOTS = "slots"
|
|
103
103
|
KEY_INTENTS = "intents"
|
|
@@ -146,6 +146,8 @@ MERGE_FUNC_MAPPING: Dict[Text, Callable[..., Any]] = {
|
|
|
146
146
|
KEY_FORMS: rasa.shared.utils.common.merge_dicts,
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
+
DEFAULT_STORE_ENTITIES_AS_SLOTS = True
|
|
150
|
+
|
|
149
151
|
DICT_DATA_KEYS = [
|
|
150
152
|
key
|
|
151
153
|
for key, value in MERGE_FUNC_MAPPING.items()
|
|
@@ -308,17 +310,12 @@ class Domain:
|
|
|
308
310
|
responses = data.get(KEY_RESPONSES, {})
|
|
309
311
|
|
|
310
312
|
domain_slots = data.get(KEY_SLOTS, {})
|
|
311
|
-
for slot_name, slot in domain_slots.items():
|
|
312
|
-
if slot_name == SILENCE_TIMEOUT_SLOT:
|
|
313
|
-
slot["initial_value"] = (
|
|
314
|
-
AvailableEndpoints.get_instance().interaction_handling.global_silence_timeout
|
|
315
|
-
)
|
|
316
313
|
slots = cls.collect_slots(domain_slots)
|
|
317
314
|
domain_actions = data.get(KEY_ACTIONS, [])
|
|
318
315
|
actions = cls._collect_action_names(domain_actions)
|
|
319
316
|
|
|
320
317
|
additional_arguments = {
|
|
321
|
-
**data.get(
|
|
318
|
+
**data.get(DOMAIN_CONFIG_KEY, {}),
|
|
322
319
|
"actions_which_explicitly_need_domain": (
|
|
323
320
|
cls._collect_actions_which_explicitly_need_domain(domain_actions)
|
|
324
321
|
),
|
|
@@ -468,9 +465,9 @@ class Domain:
|
|
|
468
465
|
return domain_dict
|
|
469
466
|
|
|
470
467
|
if override:
|
|
471
|
-
config = domain_dict.get(
|
|
468
|
+
config = domain_dict.get(DOMAIN_CONFIG_KEY, {})
|
|
472
469
|
for key, val in config.items():
|
|
473
|
-
combined[
|
|
470
|
+
combined[DOMAIN_CONFIG_KEY][key] = val
|
|
474
471
|
|
|
475
472
|
if (
|
|
476
473
|
override
|
|
@@ -508,10 +505,10 @@ class Domain:
|
|
|
508
505
|
return combined
|
|
509
506
|
|
|
510
507
|
def partial_merge(self, other: Domain) -> Domain:
|
|
511
|
-
"""
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
508
|
+
"""Returns a new Domain with intersection-based merging.
|
|
509
|
+
|
|
510
|
+
For each domain section only overwrite items that already exist in self.
|
|
511
|
+
Brand-new items in `other` are ignored.
|
|
515
512
|
|
|
516
513
|
Args:
|
|
517
514
|
other: The domain to merge with.
|
|
@@ -543,9 +540,9 @@ class Domain:
|
|
|
543
540
|
return Domain.from_dict(updated_self)
|
|
544
541
|
|
|
545
542
|
def difference(self, other: Domain) -> Domain:
|
|
546
|
-
"""
|
|
547
|
-
|
|
548
|
-
|
|
543
|
+
"""Returns a new Domain containing items in `self` that are NOT in `other`.
|
|
544
|
+
|
|
545
|
+
Uses simple equality checks for dict/list items.
|
|
549
546
|
|
|
550
547
|
Args:
|
|
551
548
|
other: The domain to compare with.
|
|
@@ -598,9 +595,16 @@ class Domain:
|
|
|
598
595
|
) -> Dict:
|
|
599
596
|
# add the config, session_config and training data version defaults
|
|
600
597
|
# if not included in the original domain dict
|
|
601
|
-
if
|
|
598
|
+
if (
|
|
599
|
+
DOMAIN_CONFIG_KEY not in data
|
|
600
|
+
and store_entities_as_slots != DEFAULT_STORE_ENTITIES_AS_SLOTS
|
|
601
|
+
):
|
|
602
602
|
data.update(
|
|
603
|
-
{
|
|
603
|
+
{
|
|
604
|
+
DOMAIN_CONFIG_KEY: {
|
|
605
|
+
STORE_ENTITIES_AS_SLOTS_KEY: store_entities_as_slots
|
|
606
|
+
}
|
|
607
|
+
}
|
|
604
608
|
)
|
|
605
609
|
|
|
606
610
|
if SESSION_CONFIG_KEY not in data:
|
|
@@ -937,7 +941,7 @@ class Domain:
|
|
|
937
941
|
forms: Union[Dict[Text, Any], List[Text]],
|
|
938
942
|
data: Dict,
|
|
939
943
|
action_texts: Optional[List[Text]] = None,
|
|
940
|
-
store_entities_as_slots: bool =
|
|
944
|
+
store_entities_as_slots: bool = DEFAULT_STORE_ENTITIES_AS_SLOTS,
|
|
941
945
|
session_config: SessionConfig = SessionConfig.default(),
|
|
942
946
|
**kwargs: Any,
|
|
943
947
|
) -> None:
|
|
@@ -1711,9 +1715,45 @@ class Domain:
|
|
|
1711
1715
|
else:
|
|
1712
1716
|
return True
|
|
1713
1717
|
|
|
1714
|
-
def
|
|
1718
|
+
def _uses_custom_session_config(self) -> bool:
|
|
1719
|
+
"""Check if the domain uses a custom session config."""
|
|
1720
|
+
return self._data.get(SESSION_CONFIG_KEY) != SessionConfig.default().as_dict()
|
|
1721
|
+
|
|
1722
|
+
def _uses_custom_domain_config(self) -> bool:
|
|
1723
|
+
"""Check if the domain uses a custom domain config."""
|
|
1724
|
+
return self._data.get(DOMAIN_CONFIG_KEY) != {
|
|
1725
|
+
STORE_ENTITIES_AS_SLOTS_KEY: DEFAULT_STORE_ENTITIES_AS_SLOTS
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1728
|
+
def _cleaned_json_data(self) -> Dict[Text, Any]:
|
|
1729
|
+
"""Remove default values from the domain data.
|
|
1730
|
+
|
|
1731
|
+
Only retains data that was customized by the user.
|
|
1732
|
+
|
|
1733
|
+
Returns:
|
|
1734
|
+
A cleaned dictionary version of the domain.
|
|
1735
|
+
"""
|
|
1736
|
+
cleaned_data = copy.deepcopy(self._data)
|
|
1737
|
+
|
|
1738
|
+
# Remove default config if it only contains store_entities_as_slots: False
|
|
1739
|
+
if DOMAIN_CONFIG_KEY in cleaned_data and not self._uses_custom_domain_config():
|
|
1740
|
+
del cleaned_data[DOMAIN_CONFIG_KEY]
|
|
1741
|
+
|
|
1742
|
+
# Remove default session config if it matches the default values
|
|
1743
|
+
if (
|
|
1744
|
+
SESSION_CONFIG_KEY in cleaned_data
|
|
1745
|
+
and not self._uses_custom_session_config()
|
|
1746
|
+
):
|
|
1747
|
+
del cleaned_data[SESSION_CONFIG_KEY]
|
|
1748
|
+
|
|
1749
|
+
return cleaned_data
|
|
1750
|
+
|
|
1751
|
+
def as_dict(self, should_clean_json: bool = False) -> Dict[Text, Any]:
|
|
1715
1752
|
"""Return serialized `Domain`."""
|
|
1716
|
-
|
|
1753
|
+
if should_clean_json:
|
|
1754
|
+
return self._cleaned_json_data()
|
|
1755
|
+
else:
|
|
1756
|
+
return self._data
|
|
1717
1757
|
|
|
1718
1758
|
@staticmethod
|
|
1719
1759
|
def get_responses_with_multilines(
|
rasa/shared/core/events.py
CHANGED
|
@@ -35,6 +35,7 @@ from rasa.shared.core.constants import (
|
|
|
35
35
|
ACTION_LISTEN_NAME,
|
|
36
36
|
ACTION_METADATA_EXECUTION_ERROR_MESSAGE,
|
|
37
37
|
ACTION_METADATA_EXECUTION_SUCCESS,
|
|
38
|
+
ACTION_METADATA_EXECUTION_TIME,
|
|
38
39
|
ACTION_NAME_SENDER_ID_CONNECTOR_STR,
|
|
39
40
|
ACTION_SESSION_START_NAME,
|
|
40
41
|
ENTITY_LABEL_SEPARATOR,
|
|
@@ -1815,6 +1816,7 @@ class ActionExecuted(Event):
|
|
|
1815
1816
|
items_to_ignore = [
|
|
1816
1817
|
ACTION_METADATA_EXECUTION_SUCCESS,
|
|
1817
1818
|
ACTION_METADATA_EXECUTION_ERROR_MESSAGE,
|
|
1819
|
+
ACTION_METADATA_EXECUTION_TIME,
|
|
1818
1820
|
]
|
|
1819
1821
|
meta_no_nones = {
|
|
1820
1822
|
k: v
|
|
@@ -2646,6 +2648,333 @@ class FlowCancelled(SkipEventInMDStoryMixin):
|
|
|
2646
2648
|
raise ValueError(f"Failed to parse flow_cancelled event. {e}")
|
|
2647
2649
|
|
|
2648
2650
|
|
|
2651
|
+
class AgentCompleted(SkipEventInMDStoryMixin):
|
|
2652
|
+
"""Mark the completion of an agent."""
|
|
2653
|
+
|
|
2654
|
+
type_name = "agent_completed"
|
|
2655
|
+
|
|
2656
|
+
def __init__(
|
|
2657
|
+
self,
|
|
2658
|
+
agent_id: str,
|
|
2659
|
+
flow_id: str,
|
|
2660
|
+
status: Optional[str] = None,
|
|
2661
|
+
timestamp: Optional[float] = None,
|
|
2662
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
2663
|
+
) -> None:
|
|
2664
|
+
self.agent_id = agent_id
|
|
2665
|
+
self.flow_id = flow_id
|
|
2666
|
+
self.status = status
|
|
2667
|
+
super().__init__(timestamp, metadata)
|
|
2668
|
+
|
|
2669
|
+
def __repr__(self) -> Text:
|
|
2670
|
+
"""Returns event as string for debugging."""
|
|
2671
|
+
return (
|
|
2672
|
+
f"AgentCompleted(agent: {self.agent_id}, flow: {self.flow_id}, "
|
|
2673
|
+
f"status: {self.status})"
|
|
2674
|
+
)
|
|
2675
|
+
|
|
2676
|
+
def __str__(self) -> str:
|
|
2677
|
+
"""Returns event as human-readable string."""
|
|
2678
|
+
return (
|
|
2679
|
+
f"{self.__class__.__name__}({self.agent_id}, {self.flow_id}, {self.status})"
|
|
2680
|
+
)
|
|
2681
|
+
|
|
2682
|
+
def __hash__(self) -> int:
|
|
2683
|
+
"""Returns unique hash for event."""
|
|
2684
|
+
return hash((self.agent_id, self.flow_id, self.status))
|
|
2685
|
+
|
|
2686
|
+
def __eq__(self, other: Any) -> bool:
|
|
2687
|
+
"""Compares object with other object."""
|
|
2688
|
+
if not isinstance(other, AgentCompleted):
|
|
2689
|
+
return NotImplemented
|
|
2690
|
+
return (self.agent_id, self.flow_id, self.status) == (
|
|
2691
|
+
other.agent_id,
|
|
2692
|
+
other.flow_id,
|
|
2693
|
+
other.status,
|
|
2694
|
+
)
|
|
2695
|
+
|
|
2696
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
2697
|
+
"""Returns serialized event."""
|
|
2698
|
+
serialized = super().as_dict()
|
|
2699
|
+
serialized.update(
|
|
2700
|
+
{"agent_id": self.agent_id, "flow_id": self.flow_id, "status": self.status}
|
|
2701
|
+
)
|
|
2702
|
+
return serialized
|
|
2703
|
+
|
|
2704
|
+
@classmethod
|
|
2705
|
+
def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentCompleted":
|
|
2706
|
+
if "agent_id" not in parameters:
|
|
2707
|
+
raise ValueError(
|
|
2708
|
+
"Failed to parse agent_completed event: agent_id is required"
|
|
2709
|
+
)
|
|
2710
|
+
if "flow_id" not in parameters:
|
|
2711
|
+
raise ValueError(
|
|
2712
|
+
"Failed to parse agent_completed event: flow_id is required"
|
|
2713
|
+
)
|
|
2714
|
+
|
|
2715
|
+
return AgentCompleted(
|
|
2716
|
+
parameters["agent_id"],
|
|
2717
|
+
parameters["flow_id"],
|
|
2718
|
+
parameters.get("status"),
|
|
2719
|
+
parameters.get("timestamp"),
|
|
2720
|
+
parameters.get("metadata"),
|
|
2721
|
+
)
|
|
2722
|
+
|
|
2723
|
+
|
|
2724
|
+
class AgentStarted(SkipEventInMDStoryMixin):
|
|
2725
|
+
"""Mark the start of an agent."""
|
|
2726
|
+
|
|
2727
|
+
type_name = "agent_started"
|
|
2728
|
+
|
|
2729
|
+
def __init__(
|
|
2730
|
+
self,
|
|
2731
|
+
agent_id: str,
|
|
2732
|
+
flow_id: str,
|
|
2733
|
+
timestamp: Optional[float] = None,
|
|
2734
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
2735
|
+
context_id: Optional[str] = None,
|
|
2736
|
+
) -> None:
|
|
2737
|
+
self.agent_id = agent_id
|
|
2738
|
+
self.flow_id = flow_id
|
|
2739
|
+
self.context_id = context_id
|
|
2740
|
+
super().__init__(timestamp, metadata)
|
|
2741
|
+
|
|
2742
|
+
def __repr__(self) -> str:
|
|
2743
|
+
"""Returns event as string for debugging."""
|
|
2744
|
+
if self.context_id:
|
|
2745
|
+
return (
|
|
2746
|
+
f"AgentStarted(agent: {self.agent_id}, flow: {self.flow_id}, "
|
|
2747
|
+
f"context_id: {self.context_id})"
|
|
2748
|
+
)
|
|
2749
|
+
else:
|
|
2750
|
+
return f"AgentStarted(agent: {self.agent_id}, flow: {self.flow_id})"
|
|
2751
|
+
|
|
2752
|
+
def __str__(self) -> str:
|
|
2753
|
+
"""Returns event as human-readable string."""
|
|
2754
|
+
return f"{self.__class__.__name__}({self.agent_id}, {self.flow_id})"
|
|
2755
|
+
|
|
2756
|
+
def __hash__(self) -> int:
|
|
2757
|
+
"""Returns unique hash for event."""
|
|
2758
|
+
return hash((self.agent_id, self.flow_id))
|
|
2759
|
+
|
|
2760
|
+
def __eq__(self, other: Any) -> bool:
|
|
2761
|
+
"""Compares object with other object."""
|
|
2762
|
+
if not isinstance(other, AgentStarted):
|
|
2763
|
+
return NotImplemented
|
|
2764
|
+
return (self.agent_id, self.flow_id) == (other.agent_id, other.flow_id)
|
|
2765
|
+
|
|
2766
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
2767
|
+
"""Returns serialized event."""
|
|
2768
|
+
serialized = super().as_dict()
|
|
2769
|
+
serialized.update({"agent_id": self.agent_id, "flow_id": self.flow_id})
|
|
2770
|
+
return serialized
|
|
2771
|
+
|
|
2772
|
+
@classmethod
|
|
2773
|
+
def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentStarted":
|
|
2774
|
+
if "agent_id" not in parameters:
|
|
2775
|
+
raise ValueError(
|
|
2776
|
+
"Failed to parse agent_started event: agent_id is required"
|
|
2777
|
+
)
|
|
2778
|
+
if "flow_id" not in parameters:
|
|
2779
|
+
raise ValueError("Failed to parse agent_started event: flow_id is required")
|
|
2780
|
+
|
|
2781
|
+
return AgentStarted(
|
|
2782
|
+
parameters["agent_id"],
|
|
2783
|
+
parameters["flow_id"],
|
|
2784
|
+
parameters.get("timestamp"),
|
|
2785
|
+
parameters.get("metadata"),
|
|
2786
|
+
)
|
|
2787
|
+
|
|
2788
|
+
|
|
2789
|
+
class AgentInterrupted(SkipEventInMDStoryMixin):
|
|
2790
|
+
"""Mark the interruption of an agent."""
|
|
2791
|
+
|
|
2792
|
+
type_name = "agent_interrupted"
|
|
2793
|
+
|
|
2794
|
+
def __init__(
|
|
2795
|
+
self,
|
|
2796
|
+
agent_id: str,
|
|
2797
|
+
flow_id: str,
|
|
2798
|
+
timestamp: Optional[float] = None,
|
|
2799
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
2800
|
+
) -> None:
|
|
2801
|
+
self.agent_id = agent_id
|
|
2802
|
+
self.flow_id = flow_id
|
|
2803
|
+
super().__init__(timestamp, metadata)
|
|
2804
|
+
|
|
2805
|
+
def __repr__(self) -> str:
|
|
2806
|
+
"""Returns event as string for debugging."""
|
|
2807
|
+
return f"AgentInterrupted(agent: {self.agent_id}, flow: {self.flow_id})"
|
|
2808
|
+
|
|
2809
|
+
def __str__(self) -> str:
|
|
2810
|
+
"""Returns event as human-readable string."""
|
|
2811
|
+
return f"{self.__class__.__name__}({self.agent_id}, {self.flow_id})"
|
|
2812
|
+
|
|
2813
|
+
def __hash__(self) -> int:
|
|
2814
|
+
"""Returns unique hash for event."""
|
|
2815
|
+
return hash((self.agent_id, self.flow_id))
|
|
2816
|
+
|
|
2817
|
+
def __eq__(self, other: Any) -> bool:
|
|
2818
|
+
"""Compares object with other object."""
|
|
2819
|
+
if not isinstance(other, AgentInterrupted):
|
|
2820
|
+
return NotImplemented
|
|
2821
|
+
return (self.agent_id, self.flow_id) == (other.agent_id, other.flow_id)
|
|
2822
|
+
|
|
2823
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
2824
|
+
"""Returns serialized event."""
|
|
2825
|
+
serialized = super().as_dict()
|
|
2826
|
+
serialized.update({"agent_id": self.agent_id, "flow_id": self.flow_id})
|
|
2827
|
+
return serialized
|
|
2828
|
+
|
|
2829
|
+
@classmethod
|
|
2830
|
+
def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentInterrupted":
|
|
2831
|
+
if "agent_id" not in parameters:
|
|
2832
|
+
raise ValueError(
|
|
2833
|
+
"Failed to parse agent_interrupted event: agent_id is required"
|
|
2834
|
+
)
|
|
2835
|
+
if "flow_id" not in parameters:
|
|
2836
|
+
raise ValueError(
|
|
2837
|
+
"Failed to parse agent_interrupted event: flow_id is required"
|
|
2838
|
+
)
|
|
2839
|
+
|
|
2840
|
+
return AgentInterrupted(
|
|
2841
|
+
parameters["agent_id"],
|
|
2842
|
+
parameters["flow_id"],
|
|
2843
|
+
parameters.get("timestamp"),
|
|
2844
|
+
parameters.get("metadata"),
|
|
2845
|
+
)
|
|
2846
|
+
|
|
2847
|
+
|
|
2848
|
+
class AgentCancelled(SkipEventInMDStoryMixin):
|
|
2849
|
+
"""Mark the cancellation of an agent."""
|
|
2850
|
+
|
|
2851
|
+
type_name = "agent_cancelled"
|
|
2852
|
+
|
|
2853
|
+
def __init__(
|
|
2854
|
+
self,
|
|
2855
|
+
agent_id: str,
|
|
2856
|
+
flow_id: str,
|
|
2857
|
+
reason: Optional[str] = None,
|
|
2858
|
+
timestamp: Optional[float] = None,
|
|
2859
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
2860
|
+
) -> None:
|
|
2861
|
+
self.agent_id = agent_id
|
|
2862
|
+
self.flow_id = flow_id
|
|
2863
|
+
self.reason = reason
|
|
2864
|
+
super().__init__(timestamp, metadata)
|
|
2865
|
+
|
|
2866
|
+
def __repr__(self) -> str:
|
|
2867
|
+
"""Returns event as string for debugging."""
|
|
2868
|
+
return (
|
|
2869
|
+
f"AgentCancelled(agent: {self.agent_id}, flow: {self.flow_id}, "
|
|
2870
|
+
f"reason: {self.reason})"
|
|
2871
|
+
)
|
|
2872
|
+
|
|
2873
|
+
def __str__(self) -> str:
|
|
2874
|
+
"""Returns event as human-readable string."""
|
|
2875
|
+
return (
|
|
2876
|
+
f"{self.__class__.__name__}({self.agent_id}, {self.flow_id}, {self.reason})"
|
|
2877
|
+
)
|
|
2878
|
+
|
|
2879
|
+
def __hash__(self) -> int:
|
|
2880
|
+
"""Returns unique hash for event."""
|
|
2881
|
+
return hash((self.agent_id, self.flow_id, self.reason))
|
|
2882
|
+
|
|
2883
|
+
def __eq__(self, other: Any) -> bool:
|
|
2884
|
+
"""Compares object with other object."""
|
|
2885
|
+
if not isinstance(other, AgentCancelled):
|
|
2886
|
+
return NotImplemented
|
|
2887
|
+
return (self.agent_id, self.flow_id, self.reason) == (
|
|
2888
|
+
other.agent_id,
|
|
2889
|
+
other.flow_id,
|
|
2890
|
+
other.reason,
|
|
2891
|
+
)
|
|
2892
|
+
|
|
2893
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
2894
|
+
"""Returns serialized event."""
|
|
2895
|
+
serialized = super().as_dict()
|
|
2896
|
+
serialized.update(
|
|
2897
|
+
{"agent_id": self.agent_id, "flow_id": self.flow_id, "reason": self.reason}
|
|
2898
|
+
)
|
|
2899
|
+
return serialized
|
|
2900
|
+
|
|
2901
|
+
@classmethod
|
|
2902
|
+
def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentCancelled":
|
|
2903
|
+
if "agent_id" not in parameters:
|
|
2904
|
+
raise ValueError(
|
|
2905
|
+
"Failed to parse agent_cancelled event: agent_id is required"
|
|
2906
|
+
)
|
|
2907
|
+
if "flow_id" not in parameters:
|
|
2908
|
+
raise ValueError(
|
|
2909
|
+
"Failed to parse agent_cancelled event: flow_id is required"
|
|
2910
|
+
)
|
|
2911
|
+
|
|
2912
|
+
return AgentCancelled(
|
|
2913
|
+
parameters["agent_id"],
|
|
2914
|
+
parameters["flow_id"],
|
|
2915
|
+
parameters.get("reason"),
|
|
2916
|
+
parameters.get("timestamp"),
|
|
2917
|
+
parameters.get("metadata"),
|
|
2918
|
+
)
|
|
2919
|
+
|
|
2920
|
+
|
|
2921
|
+
class AgentResumed(SkipEventInMDStoryMixin):
|
|
2922
|
+
"""Mark the resumption of an agent."""
|
|
2923
|
+
|
|
2924
|
+
type_name = "agent_resumed"
|
|
2925
|
+
|
|
2926
|
+
def __init__(
|
|
2927
|
+
self,
|
|
2928
|
+
agent_id: str,
|
|
2929
|
+
flow_id: str,
|
|
2930
|
+
timestamp: Optional[float] = None,
|
|
2931
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
2932
|
+
) -> None:
|
|
2933
|
+
self.agent_id = agent_id
|
|
2934
|
+
self.flow_id = flow_id
|
|
2935
|
+
super().__init__(timestamp, metadata)
|
|
2936
|
+
|
|
2937
|
+
def __repr__(self) -> str:
|
|
2938
|
+
"""Returns event as string for debugging."""
|
|
2939
|
+
return f"AgentResumed(agent: {self.agent_id}, flow: {self.flow_id})"
|
|
2940
|
+
|
|
2941
|
+
def __str__(self) -> str:
|
|
2942
|
+
"""Returns event as human-readable string."""
|
|
2943
|
+
return f"{self.__class__.__name__}({self.agent_id}, {self.flow_id})"
|
|
2944
|
+
|
|
2945
|
+
def __hash__(self) -> int:
|
|
2946
|
+
"""Returns unique hash for event."""
|
|
2947
|
+
return hash((self.agent_id, self.flow_id))
|
|
2948
|
+
|
|
2949
|
+
def __eq__(self, other: Any) -> bool:
|
|
2950
|
+
"""Compares object with other object."""
|
|
2951
|
+
if not isinstance(other, AgentResumed):
|
|
2952
|
+
return NotImplemented
|
|
2953
|
+
return (self.agent_id, self.flow_id) == (other.agent_id, other.flow_id)
|
|
2954
|
+
|
|
2955
|
+
def as_dict(self) -> Dict[str, Any]:
|
|
2956
|
+
"""Returns serialized event."""
|
|
2957
|
+
serialized = super().as_dict()
|
|
2958
|
+
serialized.update({"agent_id": self.agent_id, "flow_id": self.flow_id})
|
|
2959
|
+
return serialized
|
|
2960
|
+
|
|
2961
|
+
@classmethod
|
|
2962
|
+
def _from_parameters(cls, parameters: Dict[str, Any]) -> "AgentResumed":
|
|
2963
|
+
if "agent_id" not in parameters:
|
|
2964
|
+
raise ValueError(
|
|
2965
|
+
"Failed to parse agent_resumed event: agent_id is required"
|
|
2966
|
+
)
|
|
2967
|
+
if "flow_id" not in parameters:
|
|
2968
|
+
raise ValueError("Failed to parse agent_resumed event: flow_id is required")
|
|
2969
|
+
|
|
2970
|
+
return AgentResumed(
|
|
2971
|
+
parameters["agent_id"],
|
|
2972
|
+
parameters["flow_id"],
|
|
2973
|
+
parameters.get("timestamp"),
|
|
2974
|
+
parameters.get("metadata"),
|
|
2975
|
+
)
|
|
2976
|
+
|
|
2977
|
+
|
|
2649
2978
|
class SessionEnded(AlwaysEqualEventMixin):
|
|
2650
2979
|
"""Mark the end of a conversation session."""
|
|
2651
2980
|
|
|
@@ -11,3 +11,8 @@ KEY_RUN_PATTERN_COMPLETED = "run_pattern_completed"
|
|
|
11
11
|
KEY_TRANSLATION = "translation"
|
|
12
12
|
KEY_CALLED_FLOW = "called_flow"
|
|
13
13
|
KEY_LINKED_FLOW = "linked_flow"
|
|
14
|
+
|
|
15
|
+
# MCP mapping field names
|
|
16
|
+
KEY_MAPPING_INPUT = "input"
|
|
17
|
+
KEY_MAPPING_OUTPUT = "output"
|
|
18
|
+
KEY_MAPPING_SLOT = "slot"
|
rasa/shared/core/flows/flow.py
CHANGED
|
@@ -8,7 +8,6 @@ from typing import Any, Dict, List, Optional, Set, Text, Tuple, Union
|
|
|
8
8
|
|
|
9
9
|
import structlog
|
|
10
10
|
from pydantic import BaseModel
|
|
11
|
-
from pypred import Predicate
|
|
12
11
|
|
|
13
12
|
import rasa.shared.utils.io
|
|
14
13
|
from rasa.engine.language import Language
|
|
@@ -53,6 +52,7 @@ from rasa.shared.core.flows.steps.constants import (
|
|
|
53
52
|
)
|
|
54
53
|
from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
|
|
55
54
|
from rasa.shared.core.slots import Slot
|
|
55
|
+
from rasa.utils.pypred import Predicate
|
|
56
56
|
|
|
57
57
|
structlogger = structlog.get_logger()
|
|
58
58
|
|
|
@@ -52,7 +52,13 @@ def step_from_json(flow_id: Text, data: Dict[Text, Any]) -> FlowStep:
|
|
|
52
52
|
return SetSlotsFlowStep.from_json(flow_id, data)
|
|
53
53
|
if "noop" in data:
|
|
54
54
|
return NoOperationFlowStep.from_json(flow_id, data)
|
|
55
|
-
|
|
55
|
+
|
|
56
|
+
required_properties = ["action", "collect", "link", "call", "set_slots", "noop"]
|
|
57
|
+
raise RasaException(
|
|
58
|
+
f"Failed to parse step from json. Unknown type for {data}. "
|
|
59
|
+
f"At least one of the following properties is required: "
|
|
60
|
+
f"{', '.join(required_properties)}"
|
|
61
|
+
)
|
|
56
62
|
|
|
57
63
|
|
|
58
64
|
@dataclass
|
|
@@ -2,17 +2,21 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from typing import Any, Dict, Generator, List, Optional, Set, Text, Union
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, Set, Text, Union
|
|
6
6
|
|
|
7
7
|
import rasa.shared.utils.io
|
|
8
8
|
from rasa.shared.core.flows import Flow
|
|
9
9
|
from rasa.shared.core.flows.flow_path import FlowPathsList
|
|
10
10
|
from rasa.shared.core.flows.validation import (
|
|
11
11
|
DuplicatedFlowIdException,
|
|
12
|
-
|
|
12
|
+
validate_call_steps,
|
|
13
|
+
validate_exit_if_conditions,
|
|
14
|
+
validate_exit_if_exclusivity,
|
|
13
15
|
validate_flow,
|
|
14
16
|
validate_link_in_call_restriction,
|
|
15
17
|
validate_linked_flows_exists,
|
|
18
|
+
validate_mcp_mapping_slots,
|
|
19
|
+
validate_mcp_server_references,
|
|
16
20
|
validate_nlu_trigger,
|
|
17
21
|
validate_patterns_are_not_called_or_linked,
|
|
18
22
|
validate_patterns_are_not_calling_or_linking_other_flows,
|
|
@@ -20,6 +24,9 @@ from rasa.shared.core.flows.validation import (
|
|
|
20
24
|
)
|
|
21
25
|
from rasa.shared.core.slots import Slot
|
|
22
26
|
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from rasa.shared.core.domain import Domain
|
|
29
|
+
|
|
23
30
|
|
|
24
31
|
@dataclass
|
|
25
32
|
class FlowsList:
|
|
@@ -160,17 +167,26 @@ class FlowsList:
|
|
|
160
167
|
else:
|
|
161
168
|
return None
|
|
162
169
|
|
|
163
|
-
def validate(self) -> None:
|
|
164
|
-
"""Validate the flows.
|
|
170
|
+
def validate(self, domain: Optional["Domain"] = None) -> None:
|
|
171
|
+
"""Validate the flows.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
domain: Optional domain containing slot definitions. If provided,
|
|
175
|
+
exit_if conditions will be validated against defined slots.
|
|
176
|
+
"""
|
|
165
177
|
for flow in self.underlying_flows:
|
|
166
178
|
validate_flow(flow)
|
|
167
179
|
validate_nlu_trigger(self.underlying_flows)
|
|
168
180
|
validate_link_in_call_restriction(self)
|
|
169
|
-
|
|
181
|
+
validate_call_steps(self)
|
|
182
|
+
validate_mcp_server_references(self)
|
|
183
|
+
validate_mcp_mapping_slots(self, domain)
|
|
170
184
|
validate_linked_flows_exists(self)
|
|
171
185
|
validate_patterns_are_not_called_or_linked(self)
|
|
172
186
|
validate_patterns_are_not_calling_or_linking_other_flows(self)
|
|
173
187
|
validate_step_ids_are_unique(self)
|
|
188
|
+
validate_exit_if_conditions(self, domain)
|
|
189
|
+
validate_exit_if_exclusivity(self)
|
|
174
190
|
|
|
175
191
|
@property
|
|
176
192
|
def user_flow_ids(self) -> Set[str]:
|