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
|
@@ -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,55 @@ 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
|
|
@@ -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
|
+
)
|
|
@@ -17,6 +17,9 @@ from rasa.shared.core.flows.steps.constants import END_STEP
|
|
|
17
17
|
from rasa.shared.core.flows.steps.continuation import ContinueFlowStep
|
|
18
18
|
|
|
19
19
|
if typing.TYPE_CHECKING:
|
|
20
|
+
from rasa.dialogue_understanding.patterns.continue_interrupted import (
|
|
21
|
+
ContinueInterruptedPatternFlowStackFrame,
|
|
22
|
+
)
|
|
20
23
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
21
24
|
|
|
22
25
|
|
|
@@ -171,10 +174,40 @@ def user_flows_on_the_stack(dialogue_stack: DialogueStack) -> Set[str]:
|
|
|
171
174
|
All user flows that are currently on the stack.
|
|
172
175
|
"""
|
|
173
176
|
return {
|
|
174
|
-
|
|
177
|
+
frame.flow_id
|
|
178
|
+
for frame in user_frames_on_the_stack(
|
|
179
|
+
dialogue_stack, ignore_call_and_link_frames=False
|
|
180
|
+
)
|
|
175
181
|
}
|
|
176
182
|
|
|
177
183
|
|
|
184
|
+
def user_frames_on_the_stack(
|
|
185
|
+
dialogue_stack: DialogueStack, ignore_call_and_link_frames: bool = True
|
|
186
|
+
) -> List[UserFlowStackFrame]:
|
|
187
|
+
"""Get all user frames that are currently on the stack.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
dialogue_stack: The dialogue stack.
|
|
191
|
+
ignore_call_and_link_frames: Whether to ignore user frames of type `call`
|
|
192
|
+
and `link`. By default, these frames are ignored.
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
All user frames that are currently on the stack.
|
|
196
|
+
"""
|
|
197
|
+
return [
|
|
198
|
+
frame
|
|
199
|
+
for frame in dialogue_stack.frames
|
|
200
|
+
if isinstance(frame, UserFlowStackFrame)
|
|
201
|
+
and (
|
|
202
|
+
not ignore_call_and_link_frames
|
|
203
|
+
or (
|
|
204
|
+
frame.frame_type != FlowStackFrameType.CALL
|
|
205
|
+
and frame.frame_type != FlowStackFrameType.LINK
|
|
206
|
+
)
|
|
207
|
+
)
|
|
208
|
+
]
|
|
209
|
+
|
|
210
|
+
|
|
178
211
|
def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
|
|
179
212
|
"""Ends all frames on top of the stack including the topmost user frame.
|
|
180
213
|
|
|
@@ -198,8 +231,9 @@ def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
|
|
|
198
231
|
def get_collect_steps_excluding_ask_before_filling_for_active_flow(
|
|
199
232
|
dialogue_stack: DialogueStack, all_flows: FlowsList
|
|
200
233
|
) -> Set[str]:
|
|
201
|
-
"""Get all collect steps that are part of the current flow
|
|
202
|
-
|
|
234
|
+
"""Get all collect steps that are part of the current flow.
|
|
235
|
+
|
|
236
|
+
Collect steps that have to be asked before filling are not considered.
|
|
203
237
|
|
|
204
238
|
Args:
|
|
205
239
|
dialogue_stack: The dialogue stack.
|
|
@@ -230,3 +264,23 @@ def get_collect_steps_excluding_ask_before_filling_for_active_flow(
|
|
|
230
264
|
for step in active_flow.get_collect_steps()
|
|
231
265
|
if not step.ask_before_filling
|
|
232
266
|
)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def is_continue_interrupted_flow_active(stack: DialogueStack) -> bool:
|
|
270
|
+
"""Check if the continue interrupted flow is active."""
|
|
271
|
+
return get_active_continue_interrupted_pattern_frame(stack) is not None
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def get_active_continue_interrupted_pattern_frame(
|
|
275
|
+
stack: DialogueStack,
|
|
276
|
+
) -> Optional["ContinueInterruptedPatternFlowStackFrame"]:
|
|
277
|
+
from rasa.dialogue_understanding.patterns.continue_interrupted import (
|
|
278
|
+
ContinueInterruptedPatternFlowStackFrame,
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
for frame in reversed(stack.frames):
|
|
282
|
+
if isinstance(frame, ContinueInterruptedPatternFlowStackFrame):
|
|
283
|
+
return frame
|
|
284
|
+
if isinstance(frame, UserFlowStackFrame):
|
|
285
|
+
return None
|
|
286
|
+
return None
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import typing
|
|
1
2
|
from contextlib import contextmanager
|
|
2
3
|
from typing import Any, Dict, Generator, List, Optional, Text
|
|
3
4
|
|
|
4
5
|
import structlog
|
|
5
6
|
|
|
6
|
-
from rasa.dialogue_understanding.commands import Command, NoopCommand, SetSlotCommand
|
|
7
7
|
from rasa.dialogue_understanding.constants import (
|
|
8
8
|
RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME,
|
|
9
9
|
)
|
|
@@ -23,6 +23,9 @@ from rasa.shared.nlu.training_data.message import Message
|
|
|
23
23
|
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
24
24
|
from rasa.utils.common import get_bool_env_variable
|
|
25
25
|
|
|
26
|
+
if typing.TYPE_CHECKING:
|
|
27
|
+
from rasa.dialogue_understanding.commands import Command
|
|
28
|
+
|
|
26
29
|
record_commands_and_prompts = get_bool_env_variable(
|
|
27
30
|
RASA_RECORD_COMMANDS_AND_PROMPTS_ENV_VAR_NAME, False
|
|
28
31
|
)
|
|
@@ -41,7 +44,7 @@ def set_record_commands_and_prompts() -> Generator:
|
|
|
41
44
|
|
|
42
45
|
|
|
43
46
|
def add_commands_to_message_parse_data(
|
|
44
|
-
message: Message, component_name: str, commands: List[Command]
|
|
47
|
+
message: Message, component_name: str, commands: List["Command"]
|
|
45
48
|
) -> None:
|
|
46
49
|
"""Add commands to the message parse data.
|
|
47
50
|
|
|
@@ -144,6 +147,11 @@ def _handle_via_nlu_in_coexistence(
|
|
|
144
147
|
tracker: Optional[DialogueStateTracker], message: Message
|
|
145
148
|
) -> bool:
|
|
146
149
|
"""Check if the message should be handled by the NLU subsystem in coexistence mode.""" # noqa: E501
|
|
150
|
+
from rasa.dialogue_understanding.commands import (
|
|
151
|
+
NoopCommand,
|
|
152
|
+
SetSlotCommand,
|
|
153
|
+
)
|
|
154
|
+
|
|
147
155
|
if not tracker:
|
|
148
156
|
return False
|
|
149
157
|
|
|
@@ -156,8 +164,7 @@ def _handle_via_nlu_in_coexistence(
|
|
|
156
164
|
"utils.handle_via_nlu_in_coexistence"
|
|
157
165
|
".tracker_missing_route_session_to_calm_slot",
|
|
158
166
|
event_info=(
|
|
159
|
-
f"Tracker doesn't have the '{ROUTE_TO_CALM_SLOT}' slot."
|
|
160
|
-
f"Routing to CALM."
|
|
167
|
+
f"Tracker doesn't have the '{ROUTE_TO_CALM_SLOT}' slot.Routing to CALM."
|
|
161
168
|
),
|
|
162
169
|
route_session_to_calm=commands,
|
|
163
170
|
)
|
|
@@ -218,3 +225,16 @@ def _handle_via_nlu_in_coexistence(
|
|
|
218
225
|
commands=commands,
|
|
219
226
|
)
|
|
220
227
|
return False
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def assemble_options_string(names: List[str], conjunction: str = "and") -> str:
|
|
231
|
+
"""Concatenate options to a human-readable string."""
|
|
232
|
+
option_message = ""
|
|
233
|
+
for i, name in enumerate(names):
|
|
234
|
+
if i == 0:
|
|
235
|
+
option_message += name
|
|
236
|
+
elif i == len(names) - 1:
|
|
237
|
+
option_message += f" {conjunction} {name}"
|
|
238
|
+
else:
|
|
239
|
+
option_message += f", {name}"
|
|
240
|
+
return option_message
|
|
@@ -1,12 +1,14 @@
|
|
|
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
|
|
|
8
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
9
9
|
from rasa.core.channels import CollectingOutputChannel, UserMessage
|
|
10
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
11
|
+
from rasa.core.config.configuration import Configuration
|
|
10
12
|
from rasa.core.exceptions import AgentNotReady
|
|
11
13
|
from rasa.core.persistor import StorageType
|
|
12
14
|
from rasa.dialogue_understanding.commands import Command
|
|
@@ -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 = Configuration.get_instance().available_agents
|
|
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,8 +13,9 @@ import structlog
|
|
|
13
13
|
from tqdm import tqdm
|
|
14
14
|
|
|
15
15
|
import rasa.shared.utils.io
|
|
16
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
17
16
|
from rasa.core.channels import CollectingOutputChannel, UserMessage
|
|
17
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
18
|
+
from rasa.core.config.configuration import Configuration
|
|
18
19
|
from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
|
|
19
20
|
from rasa.core.exceptions import AgentNotReady
|
|
20
21
|
from rasa.core.persistor import StorageType
|
|
@@ -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 = Configuration.get_instance().available_agents
|
|
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
|
rasa/engine/constants.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import List, Optional
|
|
2
2
|
|
|
3
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
4
3
|
from rasa.core.channels import UserMessage
|
|
4
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
5
5
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
6
6
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
7
7
|
|
rasa/engine/graph.py
CHANGED
|
@@ -69,6 +69,7 @@ class SchemaNode:
|
|
|
69
69
|
|
|
70
70
|
def matches_type(self, node_type: Type, include_subtypes: bool = True) -> bool:
|
|
71
71
|
"""Checks if schema node's 'uses' is of specified node type.
|
|
72
|
+
|
|
72
73
|
By default, it also checks for subtypes of the specified node type.
|
|
73
74
|
"""
|
|
74
75
|
return (self.uses is node_type) or (
|
|
@@ -171,6 +172,7 @@ class GraphSchema:
|
|
|
171
172
|
|
|
172
173
|
def has_node(self, node_type: Type, include_subtypes: bool = True) -> bool:
|
|
173
174
|
"""Checks if the graph schema contains a node of the specified node type.
|
|
175
|
+
|
|
174
176
|
By default, it also checks for subtypes of the specified node type.
|
|
175
177
|
"""
|
|
176
178
|
for node in self.nodes.values():
|
|
@@ -181,7 +183,7 @@ class GraphSchema:
|
|
|
181
183
|
def count_nodes_of_a_given_type(
|
|
182
184
|
self, node_type: Type, include_subtypes: bool = True
|
|
183
185
|
) -> int:
|
|
184
|
-
"""Counts the number of the nodes of specified class"""
|
|
186
|
+
"""Counts the number of the nodes of specified class."""
|
|
185
187
|
counter = 0
|
|
186
188
|
for node in self.nodes.values():
|
|
187
189
|
if (node.uses is node_type) or (
|
|
@@ -353,6 +355,7 @@ class ExecutionContext:
|
|
|
353
355
|
|
|
354
356
|
def has_node(self, node_type: Type, include_subtypes: bool = True) -> bool:
|
|
355
357
|
"""Checks if the graph node of the given type is present in the graph schema.
|
|
358
|
+
|
|
356
359
|
By default, it also checks for subtypes of the specified node type.
|
|
357
360
|
"""
|
|
358
361
|
return self.graph_schema.has_node(node_type, include_subtypes)
|
|
@@ -555,6 +558,7 @@ class GraphNode:
|
|
|
555
558
|
structlogger.error(
|
|
556
559
|
"graph.node.error_running_component",
|
|
557
560
|
node_name=self._node_name,
|
|
561
|
+
error=str(e),
|
|
558
562
|
)
|
|
559
563
|
raise
|
|
560
564
|
|
rasa/engine/loader.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
from typing import Tuple, Type
|
|
3
3
|
|
|
4
|
+
import structlog
|
|
5
|
+
|
|
4
6
|
from rasa.engine.graph import ExecutionContext
|
|
5
7
|
from rasa.engine.runner.interface import GraphRunner
|
|
6
8
|
from rasa.engine.storage.storage import ModelMetadata, ModelStorage
|
|
@@ -9,6 +11,8 @@ from rasa.engine.validation import (
|
|
|
9
11
|
validate_model_group_configuration_setup,
|
|
10
12
|
)
|
|
11
13
|
|
|
14
|
+
structlogger = structlog.get_logger()
|
|
15
|
+
|
|
12
16
|
|
|
13
17
|
def load_predict_graph_runner(
|
|
14
18
|
storage_path: Path,
|
|
@@ -30,6 +34,10 @@ def load_predict_graph_runner(
|
|
|
30
34
|
model_storage, model_metadata = model_storage_class.from_model_archive(
|
|
31
35
|
storage_path=storage_path, model_archive_path=model_archive_path
|
|
32
36
|
)
|
|
37
|
+
structlogger.debug(
|
|
38
|
+
"engine.loader.load_predict_graph_runner.success",
|
|
39
|
+
model_id=model_metadata.model_id,
|
|
40
|
+
)
|
|
33
41
|
|
|
34
42
|
# Components using LLMs or embeddings can reference model groups defined in
|
|
35
43
|
# the endpoints.yml file for their client configurations. To ensure they will work
|
|
@@ -38,6 +46,10 @@ def load_predict_graph_runner(
|
|
|
38
46
|
validate_model_group_configuration_setup()
|
|
39
47
|
validate_model_client_configuration_setup_during_inference_time(model_metadata)
|
|
40
48
|
|
|
49
|
+
structlogger.debug(
|
|
50
|
+
"engine.loader.config.validation.success",
|
|
51
|
+
model_id=model_metadata.model_id,
|
|
52
|
+
)
|
|
41
53
|
runner = graph_runner_class.create(
|
|
42
54
|
graph_schema=model_metadata.predict_schema,
|
|
43
55
|
model_storage=model_storage,
|