rasa-pro 3.13.11__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/direct_custom_actions_executor.py +9 -2
- 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/licensing.py +21 -10
- 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.11.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +583 -271
- 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.11.dist-info/METADATA +0 -192
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text, Tuple, Union
|
|
4
|
+
|
|
5
|
+
import redis
|
|
6
|
+
import structlog
|
|
7
|
+
from pydantic import BaseModel, ConfigDict
|
|
8
|
+
|
|
9
|
+
from rasa.core.constants import (
|
|
10
|
+
AWS_ELASTICACHE_CLUSTER_NAME_ENV_VAR_NAME,
|
|
11
|
+
REDIS_SERVICE_NAME,
|
|
12
|
+
)
|
|
13
|
+
from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
|
|
14
|
+
IAMCredentialsProvider,
|
|
15
|
+
IAMCredentialsProviderInput,
|
|
16
|
+
SupportedServiceType,
|
|
17
|
+
create_iam_credentials_provider,
|
|
18
|
+
)
|
|
19
|
+
from rasa.shared.exceptions import ConnectionException, RasaException
|
|
20
|
+
|
|
21
|
+
structlogger = structlog.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
DEFAULT_SOCKET_TIMEOUT_IN_SECONDS = 10
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class DeploymentMode(Enum):
|
|
27
|
+
"""Supported Redis deployment modes."""
|
|
28
|
+
|
|
29
|
+
STANDARD = "standard"
|
|
30
|
+
CLUSTER = "cluster"
|
|
31
|
+
SENTINEL = "sentinel"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class StandardRedisConfig(BaseModel):
|
|
35
|
+
"""Base configuration for Redis connections."""
|
|
36
|
+
|
|
37
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
38
|
+
|
|
39
|
+
host: Text = "localhost"
|
|
40
|
+
port: int = 6379
|
|
41
|
+
username: Optional[Text] = None
|
|
42
|
+
password: Optional[Text] = None
|
|
43
|
+
use_ssl: bool = False
|
|
44
|
+
ssl_keyfile: Optional[Text] = None
|
|
45
|
+
ssl_certfile: Optional[Text] = None
|
|
46
|
+
ssl_ca_certs: Optional[Text] = None
|
|
47
|
+
db: int = 0
|
|
48
|
+
socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
|
|
49
|
+
decode_responses: bool = False
|
|
50
|
+
iam_credentials_provider: Optional[IAMCredentialsProvider] = None
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class ClusterRedisConfig(StandardRedisConfig):
|
|
54
|
+
"""Configuration for Redis Cluster connections."""
|
|
55
|
+
|
|
56
|
+
endpoints: List[Tuple[Text, int]]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class SentinelRedisConfig(StandardRedisConfig):
|
|
60
|
+
"""Configuration for Redis Sentinel connections."""
|
|
61
|
+
|
|
62
|
+
endpoints: List[Tuple[Text, int]]
|
|
63
|
+
sentinel_service: Optional[Text] = "mymaster"
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class RedisConfig(BaseModel):
|
|
67
|
+
"""Base configuration for Redis connections."""
|
|
68
|
+
|
|
69
|
+
host: Text = "localhost"
|
|
70
|
+
port: int = 6379
|
|
71
|
+
service_type: SupportedServiceType
|
|
72
|
+
username: Optional[Text] = None
|
|
73
|
+
password: Optional[Text] = None
|
|
74
|
+
use_ssl: bool = False
|
|
75
|
+
ssl_keyfile: Optional[Text] = None
|
|
76
|
+
ssl_certfile: Optional[Text] = None
|
|
77
|
+
ssl_ca_certs: Optional[Text] = None
|
|
78
|
+
db: int = 0
|
|
79
|
+
socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
|
|
80
|
+
decode_responses: bool = False
|
|
81
|
+
deployment_mode: Text = DeploymentMode.STANDARD.value
|
|
82
|
+
endpoints: Optional[List[Text]] = None
|
|
83
|
+
sentinel_service: Optional[Text] = None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class RedisConnectionFactory:
|
|
87
|
+
"""Factory class for creating Redis connections with different modes."""
|
|
88
|
+
|
|
89
|
+
@classmethod
|
|
90
|
+
def create_connection(
|
|
91
|
+
cls,
|
|
92
|
+
config: RedisConfig,
|
|
93
|
+
) -> Union[redis.Redis, redis.RedisCluster]:
|
|
94
|
+
"""Create a Redis connection based on the configuration.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
config: Redis configuration object containing all connection parameters.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
A Redis connection - either a standard Redis connection, a RedisCluster
|
|
101
|
+
connection, or a Redis master connection managed by Sentinel.
|
|
102
|
+
|
|
103
|
+
Raises:
|
|
104
|
+
RasaException: If configuration is invalid.
|
|
105
|
+
"""
|
|
106
|
+
if config.endpoints is None:
|
|
107
|
+
config.endpoints = []
|
|
108
|
+
|
|
109
|
+
try:
|
|
110
|
+
deployment_mode_enum = DeploymentMode(config.deployment_mode)
|
|
111
|
+
except ValueError:
|
|
112
|
+
valid_modes = [mode.value for mode in DeploymentMode]
|
|
113
|
+
raise RasaException(
|
|
114
|
+
f"Invalid deployment_mode '{config.deployment_mode}'. "
|
|
115
|
+
f"Must be one of: {', '.join(valid_modes)}"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
parsed_endpoints = cls._parse_and_validate_endpoints(
|
|
119
|
+
deployment_mode_enum, config.endpoints, config.host, config.port
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
iam_credentials_provider = create_iam_credentials_provider(
|
|
123
|
+
IAMCredentialsProviderInput(
|
|
124
|
+
service_type=config.service_type,
|
|
125
|
+
service_name=REDIS_SERVICE_NAME,
|
|
126
|
+
username=config.username,
|
|
127
|
+
cluster_name=os.getenv(AWS_ELASTICACHE_CLUSTER_NAME_ENV_VAR_NAME),
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
if deployment_mode_enum == DeploymentMode.CLUSTER:
|
|
132
|
+
cls._log_cluster_db_warning(deployment_mode_enum, config.db)
|
|
133
|
+
cluster_config = ClusterRedisConfig(
|
|
134
|
+
username=config.username,
|
|
135
|
+
password=config.password,
|
|
136
|
+
use_ssl=config.use_ssl,
|
|
137
|
+
ssl_certfile=config.ssl_certfile,
|
|
138
|
+
ssl_keyfile=config.ssl_keyfile,
|
|
139
|
+
ssl_ca_certs=config.ssl_ca_certs,
|
|
140
|
+
db=config.db,
|
|
141
|
+
socket_timeout=config.socket_timeout,
|
|
142
|
+
decode_responses=config.decode_responses,
|
|
143
|
+
endpoints=parsed_endpoints,
|
|
144
|
+
iam_credentials_provider=iam_credentials_provider,
|
|
145
|
+
)
|
|
146
|
+
return cls._create_cluster_connection(cluster_config)
|
|
147
|
+
elif deployment_mode_enum == DeploymentMode.SENTINEL:
|
|
148
|
+
sentinel_kwargs = {
|
|
149
|
+
"username": config.username,
|
|
150
|
+
"password": config.password,
|
|
151
|
+
"use_ssl": config.use_ssl,
|
|
152
|
+
"ssl_certfile": config.ssl_certfile,
|
|
153
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
154
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
155
|
+
"db": config.db,
|
|
156
|
+
"socket_timeout": config.socket_timeout,
|
|
157
|
+
"decode_responses": config.decode_responses,
|
|
158
|
+
"endpoints": parsed_endpoints,
|
|
159
|
+
"iam_credentials_provider": iam_credentials_provider,
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if config.sentinel_service is not None:
|
|
163
|
+
sentinel_kwargs["sentinel_service"] = config.sentinel_service
|
|
164
|
+
|
|
165
|
+
sentinel_config = SentinelRedisConfig(**sentinel_kwargs)
|
|
166
|
+
return cls._create_sentinel_connection(sentinel_config)
|
|
167
|
+
else:
|
|
168
|
+
standard_config = StandardRedisConfig(
|
|
169
|
+
host=config.host,
|
|
170
|
+
port=config.port,
|
|
171
|
+
username=config.username,
|
|
172
|
+
password=config.password,
|
|
173
|
+
use_ssl=config.use_ssl,
|
|
174
|
+
ssl_certfile=config.ssl_certfile,
|
|
175
|
+
ssl_keyfile=config.ssl_keyfile,
|
|
176
|
+
ssl_ca_certs=config.ssl_ca_certs,
|
|
177
|
+
db=config.db,
|
|
178
|
+
socket_timeout=config.socket_timeout,
|
|
179
|
+
decode_responses=config.decode_responses,
|
|
180
|
+
iam_credentials_provider=iam_credentials_provider,
|
|
181
|
+
)
|
|
182
|
+
return cls._create_standard_connection(standard_config)
|
|
183
|
+
|
|
184
|
+
@classmethod
|
|
185
|
+
def _parse_and_validate_endpoints(
|
|
186
|
+
cls,
|
|
187
|
+
deployment_mode: DeploymentMode,
|
|
188
|
+
endpoints: List[str],
|
|
189
|
+
host: Text,
|
|
190
|
+
port: int,
|
|
191
|
+
) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
192
|
+
"""Parse and validate endpoints based on deployment mode."""
|
|
193
|
+
if deployment_mode == DeploymentMode.STANDARD:
|
|
194
|
+
if endpoints:
|
|
195
|
+
structlogger.warning(
|
|
196
|
+
"redis_connection_factory.standard_endpoints_ignored",
|
|
197
|
+
event_info="Parameter `endpoints` ignored in standard mode. "
|
|
198
|
+
"Only 'host' and 'port' are used for standard Redis connections.",
|
|
199
|
+
)
|
|
200
|
+
return []
|
|
201
|
+
|
|
202
|
+
if not endpoints:
|
|
203
|
+
endpoints = cls._get_default_endpoints(deployment_mode, host, port)
|
|
204
|
+
|
|
205
|
+
# Parse endpoints into appropriate format
|
|
206
|
+
parsed_endpoints = cls._parse_all_endpoints(endpoints, deployment_mode)
|
|
207
|
+
|
|
208
|
+
if not parsed_endpoints:
|
|
209
|
+
raise RasaException(
|
|
210
|
+
f"No valid '{deployment_mode.value}' endpoints provided"
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
return parsed_endpoints
|
|
214
|
+
|
|
215
|
+
@classmethod
|
|
216
|
+
def _get_default_endpoints(
|
|
217
|
+
cls,
|
|
218
|
+
deployment_mode: DeploymentMode,
|
|
219
|
+
host: Text,
|
|
220
|
+
port: int,
|
|
221
|
+
) -> List[str]:
|
|
222
|
+
"""Get default endpoints when none provided."""
|
|
223
|
+
if deployment_mode == DeploymentMode.CLUSTER:
|
|
224
|
+
structlogger.warning(
|
|
225
|
+
"redis_connection_factory.cluster_endpoints_not_provided",
|
|
226
|
+
event_info="No endpoints provided for cluster mode. "
|
|
227
|
+
"Using default 'host:port' configuration.",
|
|
228
|
+
)
|
|
229
|
+
return [f"{host}:{port}"]
|
|
230
|
+
elif deployment_mode == DeploymentMode.SENTINEL:
|
|
231
|
+
raise RasaException("Sentinel mode requires endpoints configuration")
|
|
232
|
+
|
|
233
|
+
return []
|
|
234
|
+
|
|
235
|
+
@classmethod
|
|
236
|
+
def _parse_single_endpoint(
|
|
237
|
+
cls, endpoint: str, deployment_mode: DeploymentMode
|
|
238
|
+
) -> Optional[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
239
|
+
"""Parse a single endpoint string into the appropriate format."""
|
|
240
|
+
if not isinstance(endpoint, str):
|
|
241
|
+
structlogger.warning(
|
|
242
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_type",
|
|
243
|
+
event_info=f"Invalid endpoint type for endpoint '{endpoint}'. "
|
|
244
|
+
"Expected string in 'host:port' format.",
|
|
245
|
+
)
|
|
246
|
+
return None
|
|
247
|
+
|
|
248
|
+
if ":" not in endpoint:
|
|
249
|
+
structlogger.warning(
|
|
250
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_format",
|
|
251
|
+
event_info=f"Invalid format for endpoint '{endpoint}'. "
|
|
252
|
+
"Expected 'host:port'.",
|
|
253
|
+
)
|
|
254
|
+
return None
|
|
255
|
+
|
|
256
|
+
host, port_str = endpoint.rsplit(":", 1)
|
|
257
|
+
try:
|
|
258
|
+
port = int(port_str)
|
|
259
|
+
except ValueError:
|
|
260
|
+
structlogger.warning(
|
|
261
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint",
|
|
262
|
+
event_info=f"Invalid port in endpoint '{endpoint}'. "
|
|
263
|
+
"Expected format 'host:port'.",
|
|
264
|
+
)
|
|
265
|
+
return None
|
|
266
|
+
|
|
267
|
+
return (host, port)
|
|
268
|
+
|
|
269
|
+
@classmethod
|
|
270
|
+
def _parse_all_endpoints(
|
|
271
|
+
cls,
|
|
272
|
+
endpoints: List[str],
|
|
273
|
+
deployment_mode: DeploymentMode,
|
|
274
|
+
) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
275
|
+
"""Parse a list of endpoint strings into appropriate format."""
|
|
276
|
+
parsed_endpoints = []
|
|
277
|
+
for endpoint in endpoints:
|
|
278
|
+
parsed = cls._parse_single_endpoint(endpoint, deployment_mode)
|
|
279
|
+
if parsed:
|
|
280
|
+
parsed_endpoints.append(parsed)
|
|
281
|
+
return parsed_endpoints
|
|
282
|
+
|
|
283
|
+
@classmethod
|
|
284
|
+
def _create_cluster_connection(
|
|
285
|
+
cls,
|
|
286
|
+
config: ClusterRedisConfig,
|
|
287
|
+
) -> redis.RedisCluster:
|
|
288
|
+
"""Create a Redis Cluster connection.
|
|
289
|
+
|
|
290
|
+
Note: Database parameter is ignored in cluster mode (always uses db=0).
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
config: Cluster configuration containing all connection parameters.
|
|
294
|
+
|
|
295
|
+
Returns:
|
|
296
|
+
redis.RedisCluster: Configured cluster connection.
|
|
297
|
+
|
|
298
|
+
Raises:
|
|
299
|
+
ConnectionException: If cluster initialization fails.
|
|
300
|
+
"""
|
|
301
|
+
from redis.cluster import ClusterNode
|
|
302
|
+
|
|
303
|
+
structlogger.info(
|
|
304
|
+
"redis_connection_factory.cluster_mode",
|
|
305
|
+
event_info=f"Initializing Redis Cluster with {len(config.endpoints)} nodes",
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
cluster_nodes = [ClusterNode(host, port) for host, port in config.endpoints]
|
|
309
|
+
|
|
310
|
+
common_config_kwargs = {
|
|
311
|
+
"startup_nodes": cluster_nodes,
|
|
312
|
+
"ssl": config.use_ssl,
|
|
313
|
+
"ssl_certfile": config.ssl_certfile,
|
|
314
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
315
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
316
|
+
"socket_timeout": config.socket_timeout,
|
|
317
|
+
"decode_responses": config.decode_responses,
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
try:
|
|
321
|
+
if config.iam_credentials_provider is not None:
|
|
322
|
+
structlogger.debug("redis_connection_factory.cluster_iam_auth_enabled")
|
|
323
|
+
|
|
324
|
+
redis_cluster: redis.RedisCluster = redis.RedisCluster(
|
|
325
|
+
credential_provider=config.iam_credentials_provider,
|
|
326
|
+
**common_config_kwargs,
|
|
327
|
+
)
|
|
328
|
+
else:
|
|
329
|
+
redis_cluster = redis.RedisCluster(
|
|
330
|
+
username=config.username,
|
|
331
|
+
password=config.password,
|
|
332
|
+
**common_config_kwargs,
|
|
333
|
+
)
|
|
334
|
+
except Exception as e:
|
|
335
|
+
raise ConnectionException(f"Error initializing Redis Cluster: {e}")
|
|
336
|
+
|
|
337
|
+
return redis_cluster
|
|
338
|
+
|
|
339
|
+
@classmethod
|
|
340
|
+
def _create_sentinel_connection(
|
|
341
|
+
cls,
|
|
342
|
+
config: SentinelRedisConfig,
|
|
343
|
+
) -> redis.Redis:
|
|
344
|
+
"""Create a Sentinel-managed Redis connection.
|
|
345
|
+
|
|
346
|
+
Connects to Redis master through Sentinel service discovery.
|
|
347
|
+
Tests connection with ping() before returning.
|
|
348
|
+
|
|
349
|
+
Args:
|
|
350
|
+
config: Sentinel configuration containing all connection parameters.
|
|
351
|
+
|
|
352
|
+
Returns:
|
|
353
|
+
redis.Redis: Connection to the Redis master via sentinel.
|
|
354
|
+
|
|
355
|
+
Raises:
|
|
356
|
+
ConnectionException: If sentinel initialization or connection test fails.
|
|
357
|
+
"""
|
|
358
|
+
from redis.sentinel import Sentinel
|
|
359
|
+
|
|
360
|
+
structlogger.info(
|
|
361
|
+
"redis_connection_factory.sentinel_mode",
|
|
362
|
+
event_info=f"Initializing Redis Sentinel with {len(config.endpoints)} "
|
|
363
|
+
f"sentinel endpoints and service: {config.sentinel_service}",
|
|
364
|
+
)
|
|
365
|
+
|
|
366
|
+
# Configuration for Sentinel connection
|
|
367
|
+
connection_kwargs: Dict[str, Any] = {
|
|
368
|
+
"socket_timeout": config.socket_timeout,
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
sentinel_kwargs: Optional[Dict] = None
|
|
372
|
+
if config.iam_credentials_provider is not None:
|
|
373
|
+
structlogger.debug("redis_connection_factory.sentinel_iam_auth_enabled")
|
|
374
|
+
sentinel_kwargs = {"credential_provider": config.iam_credentials_provider}
|
|
375
|
+
else:
|
|
376
|
+
connection_kwargs.update(
|
|
377
|
+
{
|
|
378
|
+
"username": config.username,
|
|
379
|
+
"password": config.password,
|
|
380
|
+
}
|
|
381
|
+
)
|
|
382
|
+
|
|
383
|
+
# SSL configuration
|
|
384
|
+
if config.use_ssl:
|
|
385
|
+
connection_kwargs.update(
|
|
386
|
+
{
|
|
387
|
+
"ssl": config.use_ssl,
|
|
388
|
+
"ssl_certfile": config.ssl_certfile,
|
|
389
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
390
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
391
|
+
}
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
# Configuration for Redis client (master/replica)
|
|
395
|
+
client_kwargs = {
|
|
396
|
+
"db": config.db,
|
|
397
|
+
"decode_responses": config.decode_responses,
|
|
398
|
+
"socket_timeout": config.socket_timeout,
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
# Create Sentinel instance
|
|
402
|
+
try:
|
|
403
|
+
sentinel = Sentinel(
|
|
404
|
+
config.endpoints, sentinel_kwargs=sentinel_kwargs, **connection_kwargs
|
|
405
|
+
)
|
|
406
|
+
master = sentinel.master_for(config.sentinel_service, **client_kwargs)
|
|
407
|
+
|
|
408
|
+
# Test the connection
|
|
409
|
+
master.ping()
|
|
410
|
+
|
|
411
|
+
except Exception as e:
|
|
412
|
+
raise ConnectionException(f"Error initializing Redis Sentinel: {e}")
|
|
413
|
+
|
|
414
|
+
return master
|
|
415
|
+
|
|
416
|
+
@classmethod
|
|
417
|
+
def _create_standard_connection(
|
|
418
|
+
cls,
|
|
419
|
+
config: StandardRedisConfig,
|
|
420
|
+
) -> redis.Redis:
|
|
421
|
+
"""Create a standard Redis connection.
|
|
422
|
+
|
|
423
|
+
Args:
|
|
424
|
+
config: Standard configuration containing all connection parameters.
|
|
425
|
+
|
|
426
|
+
Returns:
|
|
427
|
+
redis.Redis: Configured Redis connection.
|
|
428
|
+
"""
|
|
429
|
+
structlogger.info(
|
|
430
|
+
"redis_connection_factory.standard_mode",
|
|
431
|
+
event_info="Initializing Redis connection",
|
|
432
|
+
)
|
|
433
|
+
# Build connection arguments
|
|
434
|
+
connection_args: Dict[str, Any] = {
|
|
435
|
+
"host": config.host,
|
|
436
|
+
"port": int(config.port),
|
|
437
|
+
"db": config.db,
|
|
438
|
+
"socket_timeout": float(config.socket_timeout),
|
|
439
|
+
"ssl": config.use_ssl,
|
|
440
|
+
"ssl_certfile": config.ssl_certfile,
|
|
441
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
442
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
443
|
+
"decode_responses": config.decode_responses,
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
if config.iam_credentials_provider is not None:
|
|
447
|
+
structlogger.debug("redis_connection_factory.standard_iam_auth_enabled")
|
|
448
|
+
connection_args.update(
|
|
449
|
+
{"credential_provider": config.iam_credentials_provider}
|
|
450
|
+
)
|
|
451
|
+
else:
|
|
452
|
+
connection_args.update(
|
|
453
|
+
{
|
|
454
|
+
"password": config.password,
|
|
455
|
+
"username": config.username,
|
|
456
|
+
}
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
try:
|
|
460
|
+
standard_redis = redis.StrictRedis(**connection_args)
|
|
461
|
+
except Exception as e:
|
|
462
|
+
raise ConnectionException(f"Error initializing Redis connection: {e}")
|
|
463
|
+
|
|
464
|
+
return standard_redis
|
|
465
|
+
|
|
466
|
+
@classmethod
|
|
467
|
+
def _log_cluster_db_warning(cls, deployment_mode: DeploymentMode, db: int) -> None:
|
|
468
|
+
"""Log warning if db parameter is set in cluster mode."""
|
|
469
|
+
if deployment_mode == DeploymentMode.CLUSTER and db != 0:
|
|
470
|
+
structlogger.warning(
|
|
471
|
+
"redis_connection_factory.cluster_db_ignored",
|
|
472
|
+
event_info=f"Database parameter 'db={db}' ignored in cluster mode. "
|
|
473
|
+
"Redis Cluster only supports database 0.",
|
|
474
|
+
)
|
rasa/core/run.py
CHANGED
|
@@ -30,24 +30,35 @@ from rasa import server, telemetry
|
|
|
30
30
|
from rasa.constants import ENV_SANIC_BACKLOG
|
|
31
31
|
from rasa.core import agent, channels, constants
|
|
32
32
|
from rasa.core.agent import Agent
|
|
33
|
-
from rasa.core.
|
|
33
|
+
from rasa.core.available_agents import AvailableAgents
|
|
34
34
|
from rasa.core.channels import console
|
|
35
35
|
from rasa.core.channels.channel import InputChannel
|
|
36
36
|
from rasa.core.channels.development_inspector import DevelopmentInspectProxy
|
|
37
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
38
|
+
from rasa.core.config.credentials import CredentialsConfig
|
|
37
39
|
from rasa.core.persistor import StorageType
|
|
38
40
|
from rasa.shared.exceptions import RasaException
|
|
39
|
-
from rasa.shared.utils.yaml import read_config_file
|
|
40
41
|
from rasa.utils import licensing
|
|
41
42
|
|
|
42
43
|
logger = logging.getLogger() # get the root logger
|
|
43
44
|
|
|
44
45
|
|
|
45
|
-
def
|
|
46
|
-
channel: Optional[Text],
|
|
46
|
+
def create_input_channels(
|
|
47
|
+
channel: Optional[Text], credentials_config: Optional[CredentialsConfig]
|
|
47
48
|
) -> List[InputChannel]:
|
|
48
|
-
"""Instantiate the chosen input channel.
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
"""Instantiate the chosen input channel.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
channel (optional): The name of the specific input channel to create.
|
|
53
|
+
credentials_config: CredentialsConfig object containing channel credentials.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
A list of instantiated input channels. If a specific channel is provided,
|
|
57
|
+
it returns a list with that single channel. If no channel is specified,
|
|
58
|
+
it returns a list of all channels defined in the credentials file.
|
|
59
|
+
"""
|
|
60
|
+
if credentials_config:
|
|
61
|
+
all_credentials = credentials_config.channels
|
|
51
62
|
else:
|
|
52
63
|
all_credentials = {}
|
|
53
64
|
if channel:
|
|
@@ -86,10 +97,32 @@ def _create_single_channel(
|
|
|
86
97
|
"""
|
|
87
98
|
from rasa.core.channels import BUILTIN_CHANNELS
|
|
88
99
|
|
|
100
|
+
# Channels that have optional dependencies
|
|
101
|
+
channels_with_optional_deps = {
|
|
102
|
+
"facebook": "fbmessenger",
|
|
103
|
+
"slack": "slack-sdk",
|
|
104
|
+
"telegram": "aiogram",
|
|
105
|
+
"twilio": "twilio",
|
|
106
|
+
"twilio_voice": "twilio",
|
|
107
|
+
"twilio_media_streams": "twilio",
|
|
108
|
+
"webexteams": "webexteamssdk",
|
|
109
|
+
"vier_cvg": "cvg_sdk",
|
|
110
|
+
}
|
|
111
|
+
|
|
89
112
|
if channel in BUILTIN_CHANNELS:
|
|
90
113
|
channel_class = BUILTIN_CHANNELS[channel]
|
|
91
114
|
|
|
92
115
|
return channel_class.from_credentials(credentials)
|
|
116
|
+
elif channel in channels_with_optional_deps:
|
|
117
|
+
# Channel is known but not available due to missing dependency
|
|
118
|
+
dependency = channels_with_optional_deps[channel]
|
|
119
|
+
raise RasaException(
|
|
120
|
+
f"Channel '{channel}' is not available "
|
|
121
|
+
f"due to missing '{dependency}' dependency. "
|
|
122
|
+
f"Please install the required extra by running: "
|
|
123
|
+
f"pip install 'rasa-pro[channels]' OR "
|
|
124
|
+
f"poetry add 'rasa-pro[channels]'"
|
|
125
|
+
)
|
|
93
126
|
else:
|
|
94
127
|
# try to load channel based on class name
|
|
95
128
|
try:
|
|
@@ -141,6 +174,7 @@ def configure_app(
|
|
|
141
174
|
route: Optional[Text] = "/webhooks/",
|
|
142
175
|
port: int = constants.DEFAULT_SERVER_PORT,
|
|
143
176
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
177
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
144
178
|
log_file: Optional[Text] = None,
|
|
145
179
|
conversation_id: Optional[Text] = uuid.uuid4().hex,
|
|
146
180
|
use_syslog: bool = False,
|
|
@@ -169,6 +203,7 @@ def configure_app(
|
|
|
169
203
|
jwt_private_key=jwt_private_key,
|
|
170
204
|
jwt_method=jwt_method,
|
|
171
205
|
endpoints=endpoints,
|
|
206
|
+
sub_agents=sub_agents,
|
|
172
207
|
is_inspector_enabled=is_inspector_enabled,
|
|
173
208
|
)
|
|
174
209
|
)
|
|
@@ -224,7 +259,7 @@ def serve_application(
|
|
|
224
259
|
channel: Optional[Text] = None,
|
|
225
260
|
interface: Optional[Text] = constants.DEFAULT_SERVER_INTERFACE,
|
|
226
261
|
port: int = constants.DEFAULT_SERVER_PORT,
|
|
227
|
-
credentials: Optional[
|
|
262
|
+
credentials: Optional[CredentialsConfig] = None,
|
|
228
263
|
cors: Optional[Union[Text, List[Text]]] = None,
|
|
229
264
|
auth_token: Optional[Text] = None,
|
|
230
265
|
enable_api: bool = True,
|
|
@@ -233,6 +268,7 @@ def serve_application(
|
|
|
233
268
|
jwt_private_key: Optional[Text] = None,
|
|
234
269
|
jwt_method: Optional[Text] = None,
|
|
235
270
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
271
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
236
272
|
remote_storage: Optional[StorageType] = None,
|
|
237
273
|
log_file: Optional[Text] = None,
|
|
238
274
|
ssl_certificate: Optional[Text] = None,
|
|
@@ -253,7 +289,7 @@ def serve_application(
|
|
|
253
289
|
if not channel and not credentials:
|
|
254
290
|
channel = "cmdline"
|
|
255
291
|
|
|
256
|
-
input_channels =
|
|
292
|
+
input_channels = create_input_channels(channel, credentials)
|
|
257
293
|
|
|
258
294
|
if inspect:
|
|
259
295
|
logger.info("Starting development inspector.")
|
|
@@ -273,6 +309,7 @@ def serve_application(
|
|
|
273
309
|
jwt_method,
|
|
274
310
|
port=port,
|
|
275
311
|
endpoints=endpoints,
|
|
312
|
+
sub_agents=sub_agents,
|
|
276
313
|
log_file=log_file,
|
|
277
314
|
conversation_id=conversation_id,
|
|
278
315
|
use_syslog=use_syslog,
|
|
@@ -292,7 +329,7 @@ def serve_application(
|
|
|
292
329
|
logger.info(f"Starting Rasa server on {protocol}://{interface}:{port}")
|
|
293
330
|
|
|
294
331
|
app.register_listener(
|
|
295
|
-
partial(load_agent_on_start, model_path, endpoints, remote_storage),
|
|
332
|
+
partial(load_agent_on_start, model_path, endpoints, remote_storage, sub_agents),
|
|
296
333
|
"before_server_start",
|
|
297
334
|
)
|
|
298
335
|
|
|
@@ -330,6 +367,7 @@ async def load_agent_on_start(
|
|
|
330
367
|
model_path: Text,
|
|
331
368
|
endpoints: AvailableEndpoints,
|
|
332
369
|
remote_storage: Optional[StorageType],
|
|
370
|
+
sub_agents: Optional[AvailableAgents],
|
|
333
371
|
app: Sanic,
|
|
334
372
|
loop: AbstractEventLoop,
|
|
335
373
|
) -> Agent:
|
|
@@ -342,6 +380,7 @@ async def load_agent_on_start(
|
|
|
342
380
|
model_path=model_path,
|
|
343
381
|
remote_storage=remote_storage,
|
|
344
382
|
endpoints=endpoints,
|
|
383
|
+
sub_agents=sub_agents,
|
|
345
384
|
loop=loop,
|
|
346
385
|
)
|
|
347
386
|
|
rasa/core/test.py
CHANGED
|
@@ -1281,6 +1281,10 @@ async def compare_models_in_dir(
|
|
|
1281
1281
|
for k, v in number_correct_in_run.items():
|
|
1282
1282
|
number_correct[k].append(v)
|
|
1283
1283
|
|
|
1284
|
+
logger.info("current working directory: " + os.getcwd())
|
|
1285
|
+
logger.info(
|
|
1286
|
+
f"Writing model comparison results to '{os.path.join(output, RESULTS_FILE)}'"
|
|
1287
|
+
)
|
|
1284
1288
|
rasa.shared.utils.io.dump_obj_as_json_to_file(
|
|
1285
1289
|
os.path.join(output, RESULTS_FILE), number_correct
|
|
1286
1290
|
)
|