rasa-pro 3.14.0.dev20250901__py3-none-any.whl → 3.14.0rc1__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 +211 -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 +879 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +726 -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 +206 -0
- rasa/agents/validation.py +485 -0
- rasa/api.py +24 -9
- rasa/builder/config.py +7 -2
- rasa/builder/copilot/constants.py +3 -0
- rasa/builder/copilot/copilot.py +128 -54
- rasa/builder/copilot/models.py +39 -3
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +183 -188
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
- rasa/builder/copilot/telemetry.py +46 -20
- rasa/builder/document_retrieval/models.py +3 -3
- rasa/builder/download.py +1 -8
- rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
- rasa/builder/guardrails/constants.py +3 -0
- rasa/builder/guardrails/models.py +45 -10
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/utils.py +42 -276
- rasa/builder/jobs.py +33 -21
- rasa/builder/llm_service.py +32 -5
- rasa/builder/main.py +38 -62
- rasa/builder/models.py +8 -7
- rasa/builder/project_generator.py +149 -148
- rasa/builder/service.py +58 -40
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +84 -20
- rasa/builder/validation_service.py +1 -1
- 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 +10 -8
- rasa/cli/dialogue_understanding_test.py +10 -7
- rasa/cli/e2e_test.py +9 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +8 -4
- rasa/cli/interactive.py +5 -4
- rasa/cli/llm_fine_tuning.py +11 -6
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +6 -4
- rasa/cli/project_templates/basic/data/data.md +5 -6
- rasa/cli/project_templates/basic/domain/domain.md +7 -5
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +1 -1
- rasa/cli/project_templates/basic/endpoints.yml +5 -1
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -46
- 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/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
- 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/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 +8 -0
- rasa/cli/project_templates/finance/credentials.yml +7 -6
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
- 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 +37 -58
- 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/goodbye.yml +1 -1
- rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
- rasa/cli/project_templates/finance/data/general/help.yml +2 -2
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +2 -2
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +1 -1
- 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 +29 -62
- 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 +9 -5
- 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 +33 -90
- 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 +5 -2
- rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +6 -6
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +10 -9
- rasa/cli/project_templates/finance/domain/general/welcome.yml +33 -2
- 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 +203 -61
- rasa/cli/project_templates/finance/endpoints.yml +8 -4
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
- rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/config.yml +6 -4
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +1 -1
- rasa/cli/project_templates/telco/docs/docs.md +3 -0
- rasa/cli/project_templates/telco/domain/domain.md +13 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +3 -6
- rasa/cli/project_templates/telco/endpoints.yml +5 -1
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +1 -1
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +12 -10
- rasa/cli/scaffold.py +4 -4
- rasa/cli/shell.py +9 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +41 -28
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +223 -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 +51 -10
- 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 +19 -2
- rasa/core/available_agents.py +229 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +52 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/development_inspector.py +4 -24
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.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-81efba3e.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.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-31422447.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.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-cb4d8723.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.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-64154b83.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.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 +34 -35
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- 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 +9 -1
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +20 -3
- 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 +53 -7
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/studio_chat.py +29 -47
- rasa/core/channels/telegram.py +4 -9
- 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 +3 -0
- rasa/core/channels/voice_stream/browser_audio.py +55 -3
- rasa/core/channels/voice_stream/genesys.py +3 -2
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +21 -1
- rasa/core/channels/voice_stream/voice_channel.py +64 -0
- rasa/core/concurrent_lock_store.py +66 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
- rasa/core/config/configuration.py +260 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +11 -0
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +226 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +90 -0
- rasa/core/lock_store.py +46 -10
- rasa/core/nlg/generator.py +1 -1
- rasa/core/policies/enterprise_search_policy.py +5 -3
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +632 -0
- rasa/core/policies/flows/flow_executor.py +137 -76
- rasa/core/policies/flows/mcp_tool_executor.py +298 -0
- rasa/core/policies/intentless_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 +469 -0
- rasa/core/run.py +37 -8
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -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 +19 -5
- 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 +68 -7
- rasa/dialogue_understanding/commands/utils.py +124 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +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 +46 -8
- 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/storage/local_model_storage.py +41 -4
- rasa/engine/validation.py +19 -6
- 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/socket_bridge.py +1 -2
- 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_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 +167 -0
- rasa/shared/agents/auth/constants.py +12 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +8 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +0 -7
- 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/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +49 -5
- 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 +3 -2
- rasa/shared/core/slots.py +2 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/exceptions.py +16 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +9 -3
- 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 +8 -4
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +24 -0
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +39 -16
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +247 -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/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +3 -6
- rasa/telemetry.py +69 -5
- 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/log_utils.py +96 -5
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/pypred.py +38 -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 +17 -13
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/METADATA +59 -51
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/RECORD +452 -428
- rasa/builder/scrape_rasa_docs.py +0 -97
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
- rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
- rasa/cli/project_templates/finance/actions/database.py +0 -277
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
- rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
- rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
- rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
- rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
- rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
- rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
- rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
- rasa/cli/project_templates/finance/csvs/users.csv +0 -4
- rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
- rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
- rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
- rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
- rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
- rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
- rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
- rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
- rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
- rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
- /rasa/cli/project_templates/telco/domain/billing/{domain_undertand_bill.yml → understand_bill.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_reboot_router.yml → reboot_router.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_reset_router.yml → reset_router.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_run_speed_test.yml → run_speed_test.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_solve_internet_issue.yml → solve_internet_issue.yml} +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,469 @@
|
|
|
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 AWS_ELASTICACHE_CLUSTER_NAME_ENV_VAR_NAME
|
|
10
|
+
from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
|
|
11
|
+
IAMCredentialsProvider,
|
|
12
|
+
IAMCredentialsProviderInput,
|
|
13
|
+
SupportedServiceType,
|
|
14
|
+
create_iam_credentials_provider,
|
|
15
|
+
)
|
|
16
|
+
from rasa.shared.exceptions import ConnectionException, RasaException
|
|
17
|
+
|
|
18
|
+
structlogger = structlog.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
DEFAULT_SOCKET_TIMEOUT_IN_SECONDS = 10
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DeploymentMode(Enum):
|
|
24
|
+
"""Supported Redis deployment modes."""
|
|
25
|
+
|
|
26
|
+
STANDARD = "standard"
|
|
27
|
+
CLUSTER = "cluster"
|
|
28
|
+
SENTINEL = "sentinel"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class StandardRedisConfig(BaseModel):
|
|
32
|
+
"""Base configuration for Redis connections."""
|
|
33
|
+
|
|
34
|
+
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
35
|
+
|
|
36
|
+
host: Text = "localhost"
|
|
37
|
+
port: int = 6379
|
|
38
|
+
username: Optional[Text] = None
|
|
39
|
+
password: Optional[Text] = None
|
|
40
|
+
use_ssl: bool = False
|
|
41
|
+
ssl_keyfile: Optional[Text] = None
|
|
42
|
+
ssl_certfile: Optional[Text] = None
|
|
43
|
+
ssl_ca_certs: Optional[Text] = None
|
|
44
|
+
db: int = 0
|
|
45
|
+
socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
|
|
46
|
+
decode_responses: bool = False
|
|
47
|
+
iam_credentials_provider: Optional[IAMCredentialsProvider] = None
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class ClusterRedisConfig(StandardRedisConfig):
|
|
51
|
+
"""Configuration for Redis Cluster connections."""
|
|
52
|
+
|
|
53
|
+
endpoints: List[Tuple[Text, int]]
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class SentinelRedisConfig(StandardRedisConfig):
|
|
57
|
+
"""Configuration for Redis Sentinel connections."""
|
|
58
|
+
|
|
59
|
+
endpoints: List[Tuple[Text, int]]
|
|
60
|
+
sentinel_service: Optional[Text] = "mymaster"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class RedisConfig(BaseModel):
|
|
64
|
+
"""Base configuration for Redis connections."""
|
|
65
|
+
|
|
66
|
+
host: Text = "localhost"
|
|
67
|
+
port: int = 6379
|
|
68
|
+
username: Optional[Text] = None
|
|
69
|
+
password: Optional[Text] = None
|
|
70
|
+
use_ssl: bool = False
|
|
71
|
+
ssl_keyfile: Optional[Text] = None
|
|
72
|
+
ssl_certfile: Optional[Text] = None
|
|
73
|
+
ssl_ca_certs: Optional[Text] = None
|
|
74
|
+
db: int = 0
|
|
75
|
+
socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
|
|
76
|
+
decode_responses: bool = False
|
|
77
|
+
deployment_mode: Text = DeploymentMode.STANDARD.value
|
|
78
|
+
endpoints: Optional[List[Text]] = None
|
|
79
|
+
sentinel_service: Optional[Text] = None
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class RedisConnectionFactory:
|
|
83
|
+
"""Factory class for creating Redis connections with different modes."""
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def create_connection(
|
|
87
|
+
cls,
|
|
88
|
+
config: RedisConfig,
|
|
89
|
+
) -> Union[redis.Redis, redis.RedisCluster]:
|
|
90
|
+
"""Create a Redis connection based on the configuration.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
config: Redis configuration object containing all connection parameters.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
A Redis connection - either a standard Redis connection, a RedisCluster
|
|
97
|
+
connection, or a Redis master connection managed by Sentinel.
|
|
98
|
+
|
|
99
|
+
Raises:
|
|
100
|
+
RasaException: If configuration is invalid.
|
|
101
|
+
"""
|
|
102
|
+
if config.endpoints is None:
|
|
103
|
+
config.endpoints = []
|
|
104
|
+
|
|
105
|
+
try:
|
|
106
|
+
deployment_mode_enum = DeploymentMode(config.deployment_mode)
|
|
107
|
+
except ValueError:
|
|
108
|
+
valid_modes = [mode.value for mode in DeploymentMode]
|
|
109
|
+
raise RasaException(
|
|
110
|
+
f"Invalid deployment_mode '{config.deployment_mode}'. "
|
|
111
|
+
f"Must be one of: {', '.join(valid_modes)}"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
parsed_endpoints = cls._parse_and_validate_endpoints(
|
|
115
|
+
deployment_mode_enum, config.endpoints, config.host, config.port
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
iam_credentials_provider = create_iam_credentials_provider(
|
|
119
|
+
IAMCredentialsProviderInput(
|
|
120
|
+
service_name=SupportedServiceType.LOCK_STORE,
|
|
121
|
+
username=config.username,
|
|
122
|
+
cluster_name=os.getenv(AWS_ELASTICACHE_CLUSTER_NAME_ENV_VAR_NAME),
|
|
123
|
+
)
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
if deployment_mode_enum == DeploymentMode.CLUSTER:
|
|
127
|
+
cls._log_cluster_db_warning(deployment_mode_enum, config.db)
|
|
128
|
+
cluster_config = ClusterRedisConfig(
|
|
129
|
+
username=config.username,
|
|
130
|
+
password=config.password,
|
|
131
|
+
use_ssl=config.use_ssl,
|
|
132
|
+
ssl_certfile=config.ssl_certfile,
|
|
133
|
+
ssl_keyfile=config.ssl_keyfile,
|
|
134
|
+
ssl_ca_certs=config.ssl_ca_certs,
|
|
135
|
+
db=config.db,
|
|
136
|
+
socket_timeout=config.socket_timeout,
|
|
137
|
+
decode_responses=config.decode_responses,
|
|
138
|
+
endpoints=parsed_endpoints,
|
|
139
|
+
iam_credentials_provider=iam_credentials_provider,
|
|
140
|
+
)
|
|
141
|
+
return cls._create_cluster_connection(cluster_config)
|
|
142
|
+
elif deployment_mode_enum == DeploymentMode.SENTINEL:
|
|
143
|
+
sentinel_kwargs = {
|
|
144
|
+
"username": config.username,
|
|
145
|
+
"password": config.password,
|
|
146
|
+
"use_ssl": config.use_ssl,
|
|
147
|
+
"ssl_certfile": config.ssl_certfile,
|
|
148
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
149
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
150
|
+
"db": config.db,
|
|
151
|
+
"socket_timeout": config.socket_timeout,
|
|
152
|
+
"decode_responses": config.decode_responses,
|
|
153
|
+
"endpoints": parsed_endpoints,
|
|
154
|
+
"iam_credentials_provider": iam_credentials_provider,
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if config.sentinel_service is not None:
|
|
158
|
+
sentinel_kwargs["sentinel_service"] = config.sentinel_service
|
|
159
|
+
|
|
160
|
+
sentinel_config = SentinelRedisConfig(**sentinel_kwargs)
|
|
161
|
+
return cls._create_sentinel_connection(sentinel_config)
|
|
162
|
+
else:
|
|
163
|
+
standard_config = StandardRedisConfig(
|
|
164
|
+
host=config.host,
|
|
165
|
+
port=config.port,
|
|
166
|
+
username=config.username,
|
|
167
|
+
password=config.password,
|
|
168
|
+
use_ssl=config.use_ssl,
|
|
169
|
+
ssl_certfile=config.ssl_certfile,
|
|
170
|
+
ssl_keyfile=config.ssl_keyfile,
|
|
171
|
+
ssl_ca_certs=config.ssl_ca_certs,
|
|
172
|
+
db=config.db,
|
|
173
|
+
socket_timeout=config.socket_timeout,
|
|
174
|
+
decode_responses=config.decode_responses,
|
|
175
|
+
iam_credentials_provider=iam_credentials_provider,
|
|
176
|
+
)
|
|
177
|
+
return cls._create_standard_connection(standard_config)
|
|
178
|
+
|
|
179
|
+
@classmethod
|
|
180
|
+
def _parse_and_validate_endpoints(
|
|
181
|
+
cls,
|
|
182
|
+
deployment_mode: DeploymentMode,
|
|
183
|
+
endpoints: List[str],
|
|
184
|
+
host: Text,
|
|
185
|
+
port: int,
|
|
186
|
+
) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
187
|
+
"""Parse and validate endpoints based on deployment mode."""
|
|
188
|
+
if deployment_mode == DeploymentMode.STANDARD:
|
|
189
|
+
if endpoints:
|
|
190
|
+
structlogger.warning(
|
|
191
|
+
"redis_connection_factory.standard_endpoints_ignored",
|
|
192
|
+
event_info="Parameter `endpoints` ignored in standard mode. "
|
|
193
|
+
"Only 'host' and 'port' are used for standard Redis connections.",
|
|
194
|
+
)
|
|
195
|
+
return []
|
|
196
|
+
|
|
197
|
+
if not endpoints:
|
|
198
|
+
endpoints = cls._get_default_endpoints(deployment_mode, host, port)
|
|
199
|
+
|
|
200
|
+
# Parse endpoints into appropriate format
|
|
201
|
+
parsed_endpoints = cls._parse_all_endpoints(endpoints, deployment_mode)
|
|
202
|
+
|
|
203
|
+
if not parsed_endpoints:
|
|
204
|
+
raise RasaException(
|
|
205
|
+
f"No valid '{deployment_mode.value}' endpoints provided"
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
return parsed_endpoints
|
|
209
|
+
|
|
210
|
+
@classmethod
|
|
211
|
+
def _get_default_endpoints(
|
|
212
|
+
cls,
|
|
213
|
+
deployment_mode: DeploymentMode,
|
|
214
|
+
host: Text,
|
|
215
|
+
port: int,
|
|
216
|
+
) -> List[str]:
|
|
217
|
+
"""Get default endpoints when none provided."""
|
|
218
|
+
if deployment_mode == DeploymentMode.CLUSTER:
|
|
219
|
+
structlogger.warning(
|
|
220
|
+
"redis_connection_factory.cluster_endpoints_not_provided",
|
|
221
|
+
event_info="No endpoints provided for cluster mode. "
|
|
222
|
+
"Using default 'host:port' configuration.",
|
|
223
|
+
)
|
|
224
|
+
return [f"{host}:{port}"]
|
|
225
|
+
elif deployment_mode == DeploymentMode.SENTINEL:
|
|
226
|
+
raise RasaException("Sentinel mode requires endpoints configuration")
|
|
227
|
+
|
|
228
|
+
return []
|
|
229
|
+
|
|
230
|
+
@classmethod
|
|
231
|
+
def _parse_single_endpoint(
|
|
232
|
+
cls, endpoint: str, deployment_mode: DeploymentMode
|
|
233
|
+
) -> Optional[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
234
|
+
"""Parse a single endpoint string into the appropriate format."""
|
|
235
|
+
if not isinstance(endpoint, str):
|
|
236
|
+
structlogger.warning(
|
|
237
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_type",
|
|
238
|
+
event_info=f"Invalid endpoint type for endpoint '{endpoint}'. "
|
|
239
|
+
"Expected string in 'host:port' format.",
|
|
240
|
+
)
|
|
241
|
+
return None
|
|
242
|
+
|
|
243
|
+
if ":" not in endpoint:
|
|
244
|
+
structlogger.warning(
|
|
245
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_format",
|
|
246
|
+
event_info=f"Invalid format for endpoint '{endpoint}'. "
|
|
247
|
+
"Expected 'host:port'.",
|
|
248
|
+
)
|
|
249
|
+
return None
|
|
250
|
+
|
|
251
|
+
host, port_str = endpoint.rsplit(":", 1)
|
|
252
|
+
try:
|
|
253
|
+
port = int(port_str)
|
|
254
|
+
except ValueError:
|
|
255
|
+
structlogger.warning(
|
|
256
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint",
|
|
257
|
+
event_info=f"Invalid port in endpoint '{endpoint}'. "
|
|
258
|
+
"Expected format 'host:port'.",
|
|
259
|
+
)
|
|
260
|
+
return None
|
|
261
|
+
|
|
262
|
+
return (host, port)
|
|
263
|
+
|
|
264
|
+
@classmethod
|
|
265
|
+
def _parse_all_endpoints(
|
|
266
|
+
cls,
|
|
267
|
+
endpoints: List[str],
|
|
268
|
+
deployment_mode: DeploymentMode,
|
|
269
|
+
) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
270
|
+
"""Parse a list of endpoint strings into appropriate format."""
|
|
271
|
+
parsed_endpoints = []
|
|
272
|
+
for endpoint in endpoints:
|
|
273
|
+
parsed = cls._parse_single_endpoint(endpoint, deployment_mode)
|
|
274
|
+
if parsed:
|
|
275
|
+
parsed_endpoints.append(parsed)
|
|
276
|
+
return parsed_endpoints
|
|
277
|
+
|
|
278
|
+
@classmethod
|
|
279
|
+
def _create_cluster_connection(
|
|
280
|
+
cls,
|
|
281
|
+
config: ClusterRedisConfig,
|
|
282
|
+
) -> redis.RedisCluster:
|
|
283
|
+
"""Create a Redis Cluster connection.
|
|
284
|
+
|
|
285
|
+
Note: Database parameter is ignored in cluster mode (always uses db=0).
|
|
286
|
+
|
|
287
|
+
Args:
|
|
288
|
+
config: Cluster configuration containing all connection parameters.
|
|
289
|
+
|
|
290
|
+
Returns:
|
|
291
|
+
redis.RedisCluster: Configured cluster connection.
|
|
292
|
+
|
|
293
|
+
Raises:
|
|
294
|
+
ConnectionException: If cluster initialization fails.
|
|
295
|
+
"""
|
|
296
|
+
from redis.cluster import ClusterNode
|
|
297
|
+
|
|
298
|
+
structlogger.info(
|
|
299
|
+
"redis_connection_factory.cluster_mode",
|
|
300
|
+
event_info=f"Initializing Redis Cluster with {len(config.endpoints)} nodes",
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
cluster_nodes = [ClusterNode(host, port) for host, port in config.endpoints]
|
|
304
|
+
|
|
305
|
+
common_config_kwargs = {
|
|
306
|
+
"startup_nodes": cluster_nodes,
|
|
307
|
+
"ssl": config.use_ssl,
|
|
308
|
+
"ssl_certfile": config.ssl_certfile,
|
|
309
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
310
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
311
|
+
"socket_timeout": config.socket_timeout,
|
|
312
|
+
"decode_responses": config.decode_responses,
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
try:
|
|
316
|
+
if config.iam_credentials_provider is not None:
|
|
317
|
+
structlogger.debug("redis_connection_factory.cluster_iam_auth_enabled")
|
|
318
|
+
|
|
319
|
+
redis_cluster: redis.RedisCluster = redis.RedisCluster(
|
|
320
|
+
credential_provider=config.iam_credentials_provider,
|
|
321
|
+
**common_config_kwargs,
|
|
322
|
+
)
|
|
323
|
+
else:
|
|
324
|
+
redis_cluster = redis.RedisCluster(
|
|
325
|
+
username=config.username,
|
|
326
|
+
password=config.password,
|
|
327
|
+
**common_config_kwargs,
|
|
328
|
+
)
|
|
329
|
+
except Exception as e:
|
|
330
|
+
raise ConnectionException(f"Error initializing Redis Cluster: {e}")
|
|
331
|
+
|
|
332
|
+
return redis_cluster
|
|
333
|
+
|
|
334
|
+
@classmethod
|
|
335
|
+
def _create_sentinel_connection(
|
|
336
|
+
cls,
|
|
337
|
+
config: SentinelRedisConfig,
|
|
338
|
+
) -> redis.Redis:
|
|
339
|
+
"""Create a Sentinel-managed Redis connection.
|
|
340
|
+
|
|
341
|
+
Connects to Redis master through Sentinel service discovery.
|
|
342
|
+
Tests connection with ping() before returning.
|
|
343
|
+
|
|
344
|
+
Args:
|
|
345
|
+
config: Sentinel configuration containing all connection parameters.
|
|
346
|
+
|
|
347
|
+
Returns:
|
|
348
|
+
redis.Redis: Connection to the Redis master via sentinel.
|
|
349
|
+
|
|
350
|
+
Raises:
|
|
351
|
+
ConnectionException: If sentinel initialization or connection test fails.
|
|
352
|
+
"""
|
|
353
|
+
from redis.sentinel import Sentinel
|
|
354
|
+
|
|
355
|
+
structlogger.info(
|
|
356
|
+
"redis_connection_factory.sentinel_mode",
|
|
357
|
+
event_info=f"Initializing Redis Sentinel with {len(config.endpoints)} "
|
|
358
|
+
f"sentinel endpoints and service: {config.sentinel_service}",
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
# Configuration for Sentinel connection
|
|
362
|
+
connection_kwargs: Dict[str, Any] = {
|
|
363
|
+
"socket_timeout": config.socket_timeout,
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
sentinel_kwargs: Optional[Dict] = None
|
|
367
|
+
if config.iam_credentials_provider is not None:
|
|
368
|
+
structlogger.debug("redis_connection_factory.sentinel_iam_auth_enabled")
|
|
369
|
+
sentinel_kwargs = {"credential_provider": config.iam_credentials_provider}
|
|
370
|
+
else:
|
|
371
|
+
connection_kwargs.update(
|
|
372
|
+
{
|
|
373
|
+
"username": config.username,
|
|
374
|
+
"password": config.password,
|
|
375
|
+
}
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
# SSL configuration
|
|
379
|
+
if config.use_ssl:
|
|
380
|
+
connection_kwargs.update(
|
|
381
|
+
{
|
|
382
|
+
"ssl": config.use_ssl,
|
|
383
|
+
"ssl_certfile": config.ssl_certfile,
|
|
384
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
385
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
386
|
+
}
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
# Configuration for Redis client (master/replica)
|
|
390
|
+
client_kwargs = {
|
|
391
|
+
"db": config.db,
|
|
392
|
+
"decode_responses": config.decode_responses,
|
|
393
|
+
"socket_timeout": config.socket_timeout,
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
# Create Sentinel instance
|
|
397
|
+
try:
|
|
398
|
+
sentinel = Sentinel(
|
|
399
|
+
config.endpoints, sentinel_kwargs=sentinel_kwargs, **connection_kwargs
|
|
400
|
+
)
|
|
401
|
+
master = sentinel.master_for(config.sentinel_service, **client_kwargs)
|
|
402
|
+
|
|
403
|
+
# Test the connection
|
|
404
|
+
master.ping()
|
|
405
|
+
|
|
406
|
+
except Exception as e:
|
|
407
|
+
raise ConnectionException(f"Error initializing Redis Sentinel: {e}")
|
|
408
|
+
|
|
409
|
+
return master
|
|
410
|
+
|
|
411
|
+
@classmethod
|
|
412
|
+
def _create_standard_connection(
|
|
413
|
+
cls,
|
|
414
|
+
config: StandardRedisConfig,
|
|
415
|
+
) -> redis.Redis:
|
|
416
|
+
"""Create a standard Redis connection.
|
|
417
|
+
|
|
418
|
+
Args:
|
|
419
|
+
config: Standard configuration containing all connection parameters.
|
|
420
|
+
|
|
421
|
+
Returns:
|
|
422
|
+
redis.Redis: Configured Redis connection.
|
|
423
|
+
"""
|
|
424
|
+
structlogger.info(
|
|
425
|
+
"redis_connection_factory.standard_mode",
|
|
426
|
+
event_info="Initializing Redis connection",
|
|
427
|
+
)
|
|
428
|
+
# Build connection arguments
|
|
429
|
+
connection_args: Dict[str, Any] = {
|
|
430
|
+
"host": config.host,
|
|
431
|
+
"port": int(config.port),
|
|
432
|
+
"db": config.db,
|
|
433
|
+
"socket_timeout": float(config.socket_timeout),
|
|
434
|
+
"ssl": config.use_ssl,
|
|
435
|
+
"ssl_certfile": config.ssl_certfile,
|
|
436
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
437
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
438
|
+
"decode_responses": config.decode_responses,
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
if config.iam_credentials_provider is not None:
|
|
442
|
+
structlogger.debug("redis_connection_factory.standard_iam_auth_enabled")
|
|
443
|
+
connection_args.update(
|
|
444
|
+
{"credential_provider": config.iam_credentials_provider}
|
|
445
|
+
)
|
|
446
|
+
else:
|
|
447
|
+
connection_args.update(
|
|
448
|
+
{
|
|
449
|
+
"password": config.password,
|
|
450
|
+
"username": config.username,
|
|
451
|
+
}
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
try:
|
|
455
|
+
standard_redis = redis.StrictRedis(**connection_args)
|
|
456
|
+
except Exception as e:
|
|
457
|
+
raise ConnectionException(f"Error initializing Redis connection: {e}")
|
|
458
|
+
|
|
459
|
+
return standard_redis
|
|
460
|
+
|
|
461
|
+
@classmethod
|
|
462
|
+
def _log_cluster_db_warning(cls, deployment_mode: DeploymentMode, db: int) -> None:
|
|
463
|
+
"""Log warning if db parameter is set in cluster mode."""
|
|
464
|
+
if deployment_mode == DeploymentMode.CLUSTER and db != 0:
|
|
465
|
+
structlogger.warning(
|
|
466
|
+
"redis_connection_factory.cluster_db_ignored",
|
|
467
|
+
event_info=f"Database parameter 'db={db}' ignored in cluster mode. "
|
|
468
|
+
"Redis Cluster only supports database 0.",
|
|
469
|
+
)
|
rasa/core/run.py
CHANGED
|
@@ -30,34 +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
46
|
def create_input_channels(
|
|
46
|
-
channel: Optional[Text],
|
|
47
|
+
channel: Optional[Text], credentials_config: Optional[CredentialsConfig]
|
|
47
48
|
) -> List[InputChannel]:
|
|
48
49
|
"""Instantiate the chosen input channel.
|
|
49
50
|
|
|
50
51
|
Args:
|
|
51
52
|
channel (optional): The name of the specific input channel to create.
|
|
52
|
-
|
|
53
|
+
credentials_config: CredentialsConfig object containing channel credentials.
|
|
53
54
|
|
|
54
55
|
Returns:
|
|
55
56
|
A list of instantiated input channels. If a specific channel is provided,
|
|
56
57
|
it returns a list with that single channel. If no channel is specified,
|
|
57
58
|
it returns a list of all channels defined in the credentials file.
|
|
58
59
|
"""
|
|
59
|
-
if
|
|
60
|
-
all_credentials =
|
|
60
|
+
if credentials_config:
|
|
61
|
+
all_credentials = credentials_config.channels
|
|
61
62
|
else:
|
|
62
63
|
all_credentials = {}
|
|
63
64
|
if channel:
|
|
@@ -96,10 +97,32 @@ def _create_single_channel(
|
|
|
96
97
|
"""
|
|
97
98
|
from rasa.core.channels import BUILTIN_CHANNELS
|
|
98
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
|
+
|
|
99
112
|
if channel in BUILTIN_CHANNELS:
|
|
100
113
|
channel_class = BUILTIN_CHANNELS[channel]
|
|
101
114
|
|
|
102
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
|
+
)
|
|
103
126
|
else:
|
|
104
127
|
# try to load channel based on class name
|
|
105
128
|
try:
|
|
@@ -151,6 +174,7 @@ def configure_app(
|
|
|
151
174
|
route: Optional[Text] = "/webhooks/",
|
|
152
175
|
port: int = constants.DEFAULT_SERVER_PORT,
|
|
153
176
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
177
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
154
178
|
log_file: Optional[Text] = None,
|
|
155
179
|
conversation_id: Optional[Text] = uuid.uuid4().hex,
|
|
156
180
|
use_syslog: bool = False,
|
|
@@ -179,6 +203,7 @@ def configure_app(
|
|
|
179
203
|
jwt_private_key=jwt_private_key,
|
|
180
204
|
jwt_method=jwt_method,
|
|
181
205
|
endpoints=endpoints,
|
|
206
|
+
sub_agents=sub_agents,
|
|
182
207
|
is_inspector_enabled=is_inspector_enabled,
|
|
183
208
|
)
|
|
184
209
|
)
|
|
@@ -234,7 +259,7 @@ def serve_application(
|
|
|
234
259
|
channel: Optional[Text] = None,
|
|
235
260
|
interface: Optional[Text] = constants.DEFAULT_SERVER_INTERFACE,
|
|
236
261
|
port: int = constants.DEFAULT_SERVER_PORT,
|
|
237
|
-
credentials: Optional[
|
|
262
|
+
credentials: Optional[CredentialsConfig] = None,
|
|
238
263
|
cors: Optional[Union[Text, List[Text]]] = None,
|
|
239
264
|
auth_token: Optional[Text] = None,
|
|
240
265
|
enable_api: bool = True,
|
|
@@ -243,6 +268,7 @@ def serve_application(
|
|
|
243
268
|
jwt_private_key: Optional[Text] = None,
|
|
244
269
|
jwt_method: Optional[Text] = None,
|
|
245
270
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
271
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
246
272
|
remote_storage: Optional[StorageType] = None,
|
|
247
273
|
log_file: Optional[Text] = None,
|
|
248
274
|
ssl_certificate: Optional[Text] = None,
|
|
@@ -283,6 +309,7 @@ def serve_application(
|
|
|
283
309
|
jwt_method,
|
|
284
310
|
port=port,
|
|
285
311
|
endpoints=endpoints,
|
|
312
|
+
sub_agents=sub_agents,
|
|
286
313
|
log_file=log_file,
|
|
287
314
|
conversation_id=conversation_id,
|
|
288
315
|
use_syslog=use_syslog,
|
|
@@ -302,7 +329,7 @@ def serve_application(
|
|
|
302
329
|
logger.info(f"Starting Rasa server on {protocol}://{interface}:{port}")
|
|
303
330
|
|
|
304
331
|
app.register_listener(
|
|
305
|
-
partial(load_agent_on_start, model_path, endpoints, remote_storage),
|
|
332
|
+
partial(load_agent_on_start, model_path, endpoints, remote_storage, sub_agents),
|
|
306
333
|
"before_server_start",
|
|
307
334
|
)
|
|
308
335
|
|
|
@@ -340,6 +367,7 @@ async def load_agent_on_start(
|
|
|
340
367
|
model_path: Text,
|
|
341
368
|
endpoints: AvailableEndpoints,
|
|
342
369
|
remote_storage: Optional[StorageType],
|
|
370
|
+
sub_agents: Optional[AvailableAgents],
|
|
343
371
|
app: Sanic,
|
|
344
372
|
loop: AbstractEventLoop,
|
|
345
373
|
) -> Agent:
|
|
@@ -352,6 +380,7 @@ async def load_agent_on_start(
|
|
|
352
380
|
model_path=model_path,
|
|
353
381
|
remote_storage=remote_storage,
|
|
354
382
|
endpoints=endpoints,
|
|
383
|
+
sub_agents=sub_agents,
|
|
355
384
|
loop=loop,
|
|
356
385
|
)
|
|
357
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
|
)
|
|
@@ -4,12 +4,19 @@ from datetime import datetime
|
|
|
4
4
|
from typing import Any, Dict, Iterable, Optional, Text
|
|
5
5
|
|
|
6
6
|
import structlog
|
|
7
|
+
from pydantic import ValidationError
|
|
7
8
|
|
|
8
9
|
import rasa.shared
|
|
9
10
|
from rasa.core.brokers.broker import EventBroker
|
|
11
|
+
from rasa.core.redis_connection_factory import (
|
|
12
|
+
DeploymentMode,
|
|
13
|
+
RedisConfig,
|
|
14
|
+
RedisConnectionFactory,
|
|
15
|
+
)
|
|
10
16
|
from rasa.core.tracker_stores.tracker_store import SerializedTrackerAsText, TrackerStore
|
|
11
17
|
from rasa.shared.core.domain import Domain
|
|
12
18
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
19
|
+
from rasa.shared.exceptions import RasaException
|
|
13
20
|
|
|
14
21
|
structlogger = structlog.get_logger(__name__)
|
|
15
22
|
|
|
@@ -35,23 +42,34 @@ class RedisTrackerStore(TrackerStore, SerializedTrackerAsText):
|
|
|
35
42
|
ssl_keyfile: Optional[Text] = None,
|
|
36
43
|
ssl_certfile: Optional[Text] = None,
|
|
37
44
|
ssl_ca_certs: Optional[Text] = None,
|
|
45
|
+
deployment_mode: Text = DeploymentMode.STANDARD.value,
|
|
46
|
+
endpoints: Optional[list] = None,
|
|
47
|
+
sentinel_service: Optional[Text] = None,
|
|
38
48
|
**kwargs: Dict[Text, Any],
|
|
39
49
|
) -> None:
|
|
40
50
|
"""Initializes the tracker store."""
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
|
|
52
|
+
# Create Redis connection using the factory directly
|
|
53
|
+
try:
|
|
54
|
+
config = RedisConfig(
|
|
55
|
+
host=host,
|
|
56
|
+
port=port,
|
|
57
|
+
db=db,
|
|
58
|
+
username=username,
|
|
59
|
+
password=password,
|
|
60
|
+
use_ssl=use_ssl,
|
|
61
|
+
ssl_keyfile=ssl_keyfile,
|
|
62
|
+
ssl_certfile=ssl_certfile,
|
|
63
|
+
ssl_ca_certs=ssl_ca_certs,
|
|
64
|
+
deployment_mode=deployment_mode,
|
|
65
|
+
endpoints=endpoints,
|
|
66
|
+
sentinel_service=sentinel_service,
|
|
67
|
+
decode_responses=True,
|
|
68
|
+
)
|
|
69
|
+
self.red = RedisConnectionFactory.create_connection(config)
|
|
70
|
+
except ValidationError as e:
|
|
71
|
+
raise RasaException(f"Invalid Redis configuration: {e}")
|
|
72
|
+
|
|
55
73
|
self.record_exp = record_exp
|
|
56
74
|
|
|
57
75
|
self.key_prefix = DEFAULT_REDIS_TRACKER_STORE_KEY_PREFIX
|