rasa-pro 3.14.0.dev6__py3-none-any.whl → 3.14.0.dev8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/agents/agent_manager.py +1 -1
- rasa/agents/constants.py +2 -2
- rasa/agents/exceptions.py +31 -1
- rasa/agents/protocol/a2a/a2a_agent.py +385 -227
- rasa/agents/protocol/mcp/mcp_base_agent.py +37 -19
- rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
- rasa/agents/protocol/mcp/mcp_task_agent.py +33 -10
- rasa/agents/schemas/agent_output.py +1 -1
- rasa/agents/utils.py +95 -1
- rasa/agents/validation.py +484 -0
- rasa/api.py +9 -6
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +92 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +31 -0
- rasa/builder/copilot/copilot.py +450 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +500 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +210 -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 +38 -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/constants.py +9 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +206 -0
- rasa/builder/guardrails/models.py +231 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +328 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +282 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +243 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +458 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1345 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +244 -0
- rasa/builder/training_service.py +194 -0
- rasa/builder/validation_service.py +97 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/interactive.py +2 -0
- 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 +9 -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 +8 -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/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/finance/README.md +25 -0
- rasa/cli/project_templates/finance/actions/__init__.py +46 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
- rasa/cli/project_templates/finance/actions/action_session_start.py +74 -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/action_ask_card.py +48 -0
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
- rasa/cli/project_templates/finance/actions/database.py +277 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
- rasa/cli/project_templates/finance/config.yml +23 -0
- rasa/cli/project_templates/finance/credentials.yml +32 -0
- rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
- rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
- rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
- rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
- rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
- rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
- rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
- rasa/cli/project_templates/finance/csvs/users.csv +4 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
- rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/data/data.md +11 -0
- rasa/cli/project_templates/finance/data/general/bot_identity.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 +7 -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_chitchat.yml +5 -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/system/source/accounts.json +51 -0
- rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
- rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
- rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
- rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
- rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
- rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
- rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/domain/domain.md +10 -0
- rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
- rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
- rasa/cli/project_templates/finance/endpoints.yml +66 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -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 +5 -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 +14 -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 +75 -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/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/config.yml +2 -1
- rasa/cli/scaffold.py +46 -2
- rasa/cli/train.py +2 -0
- rasa/cli/utils.py +85 -1
- rasa/core/actions/action.py +2 -7
- rasa/core/available_agents.py +49 -26
- rasa/core/available_endpoints.py +17 -2
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +2 -22
- rasa/core/channels/inspector/README.md +26 -14
- rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-edef10dd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-9813e81c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-d8ba0870.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-790ef78b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-ecdce073.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-837fd3aa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-7e05afcb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-162eb295.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-41529fd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-b5b53234.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-13d138e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-94cbde3f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +42 -44
- 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} +8 -8
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- 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/types.ts +49 -7
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +59 -57
- 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 +53 -3
- rasa/core/channels/voice_stream/genesys.py +2 -1
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
- rasa/core/channels/voice_stream/voice_channel.py +66 -3
- rasa/core/constants.py +6 -0
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
- rasa/core/policies/enterprise_search_policy.py +4 -7
- rasa/core/policies/flows/flow_executor.py +66 -36
- rasa/core/policies/ted_policy.py +7 -5
- rasa/core/processor.py +32 -0
- rasa/core/redis_connection_factory.py +411 -0
- rasa/core/run.py +13 -3
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -81
- rasa/dialogue_understanding/commands/start_flow_command.py +18 -113
- rasa/dialogue_understanding/commands/utils.py +118 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +185 -114
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +18 -24
- rasa/dialogue_understanding/processor/command_processor.py +35 -0
- rasa/dialogue_understanding/stack/utils.py +43 -4
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/engine/graph.py +5 -1
- rasa/engine/recipes/default_components.py +78 -10
- rasa/engine/recipes/default_recipe.py +41 -1
- rasa/engine/storage/local_model_storage.py +83 -3
- rasa/graph_components/validators/default_recipe_validator.py +153 -135
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +20 -15
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +1 -1
- rasa/model_training.py +22 -6
- rasa/nlu/classifiers/diet_classifier.py +22 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
- rasa/nlu/extractors/extractor.py +1 -2
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +74 -0
- rasa/shared/agents/auth/agent_auth_manager.py +86 -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 +159 -0
- rasa/shared/agents/auth/constants.py +11 -0
- rasa/shared/agents/auth/types.py +11 -0
- rasa/shared/constants.py +3 -0
- rasa/shared/core/constants.py +6 -6
- rasa/shared/core/domain.py +58 -11
- rasa/shared/core/events.py +2 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +6 -0
- rasa/shared/core/flows/steps/call.py +15 -12
- rasa/shared/core/flows/validation.py +238 -44
- rasa/shared/core/flows/yaml_flows_io.py +15 -6
- rasa/shared/core/slots.py +4 -0
- rasa/shared/exceptions.py +12 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/_utils.py +60 -44
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
- rasa/shared/providers/llm/_base_litellm_client.py +2 -2
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
- rasa/shared/providers/llm/llm_response.py +4 -4
- rasa/shared/utils/common.py +24 -0
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +2 -1
- rasa/shared/utils/mcp/server_connection.py +108 -27
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/studio/upload.py +16 -47
- rasa/telemetry.py +97 -23
- rasa/tracing/config.py +38 -12
- rasa/tracing/instrumentation/attribute_extractors.py +5 -1
- rasa/tracing/instrumentation/instrumentation.py +85 -8
- rasa/utils/common.py +1 -1
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/tensorflow/__init__.py +29 -0
- rasa/utils/tensorflow/callback.py +1 -1
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +11 -4
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +41 -6
- rasa/utils/tensorflow/rasa_layers.py +6 -4
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +68 -38
- rasa/validator.py +18 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +486 -173
- rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
- rasa_pro-3.14.0.dev6.dist-info/METADATA +0 -190
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Any, Dict, List, Optional, Text, Tuple, Union
|
|
3
|
+
|
|
4
|
+
import redis
|
|
5
|
+
import structlog
|
|
6
|
+
from pydantic import BaseModel
|
|
7
|
+
|
|
8
|
+
from rasa.shared.exceptions import ConnectionException, RasaException
|
|
9
|
+
|
|
10
|
+
structlogger = structlog.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
DEFAULT_SOCKET_TIMEOUT_IN_SECONDS = 10
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DeploymentMode(Enum):
|
|
16
|
+
"""Supported Redis deployment modes."""
|
|
17
|
+
|
|
18
|
+
STANDARD = "standard"
|
|
19
|
+
CLUSTER = "cluster"
|
|
20
|
+
SENTINEL = "sentinel"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class StandardRedisConfig(BaseModel):
|
|
24
|
+
"""Base configuration for Redis connections."""
|
|
25
|
+
|
|
26
|
+
host: Text = "localhost"
|
|
27
|
+
port: int = 6379
|
|
28
|
+
username: Optional[Text] = None
|
|
29
|
+
password: Optional[Text] = None
|
|
30
|
+
use_ssl: bool = False
|
|
31
|
+
ssl_keyfile: Optional[Text] = None
|
|
32
|
+
ssl_certfile: Optional[Text] = None
|
|
33
|
+
ssl_ca_certs: Optional[Text] = None
|
|
34
|
+
db: int = 0
|
|
35
|
+
socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
|
|
36
|
+
decode_responses: bool = False
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ClusterRedisConfig(StandardRedisConfig):
|
|
40
|
+
"""Configuration for Redis Cluster connections."""
|
|
41
|
+
|
|
42
|
+
endpoints: List[Tuple[Text, int]]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class SentinelRedisConfig(StandardRedisConfig):
|
|
46
|
+
"""Configuration for Redis Sentinel connections."""
|
|
47
|
+
|
|
48
|
+
endpoints: List[Tuple[Text, int]]
|
|
49
|
+
sentinel_service: Optional[Text] = "mymaster"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class RedisConfig(BaseModel):
|
|
53
|
+
"""Base configuration for Redis connections."""
|
|
54
|
+
|
|
55
|
+
host: Text = "localhost"
|
|
56
|
+
port: int = 6379
|
|
57
|
+
username: Optional[Text] = None
|
|
58
|
+
password: Optional[Text] = None
|
|
59
|
+
use_ssl: bool = False
|
|
60
|
+
ssl_keyfile: Optional[Text] = None
|
|
61
|
+
ssl_certfile: Optional[Text] = None
|
|
62
|
+
ssl_ca_certs: Optional[Text] = None
|
|
63
|
+
db: int = 0
|
|
64
|
+
socket_timeout: float = DEFAULT_SOCKET_TIMEOUT_IN_SECONDS
|
|
65
|
+
decode_responses: bool = False
|
|
66
|
+
deployment_mode: Text = DeploymentMode.STANDARD.value
|
|
67
|
+
endpoints: Optional[List[Text]] = None
|
|
68
|
+
sentinel_service: Optional[Text] = None
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class RedisConnectionFactory:
|
|
72
|
+
"""Factory class for creating Redis connections with different modes."""
|
|
73
|
+
|
|
74
|
+
@classmethod
|
|
75
|
+
def create_connection(
|
|
76
|
+
cls,
|
|
77
|
+
config: RedisConfig,
|
|
78
|
+
) -> Union[redis.Redis, redis.RedisCluster]:
|
|
79
|
+
"""Create a Redis connection based on the configuration.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
config: Redis configuration object containing all connection parameters.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
A Redis connection - either a standard Redis connection, a RedisCluster
|
|
86
|
+
connection, or a Redis master connection managed by Sentinel.
|
|
87
|
+
|
|
88
|
+
Raises:
|
|
89
|
+
RasaException: If configuration is invalid.
|
|
90
|
+
"""
|
|
91
|
+
if config.endpoints is None:
|
|
92
|
+
config.endpoints = []
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
deployment_mode_enum = DeploymentMode(config.deployment_mode)
|
|
96
|
+
except ValueError:
|
|
97
|
+
valid_modes = [mode.value for mode in DeploymentMode]
|
|
98
|
+
raise RasaException(
|
|
99
|
+
f"Invalid deployment_mode '{config.deployment_mode}'. "
|
|
100
|
+
f"Must be one of: {', '.join(valid_modes)}"
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
parsed_endpoints = cls._parse_and_validate_endpoints(
|
|
104
|
+
deployment_mode_enum, config.endpoints, config.host, config.port
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
if deployment_mode_enum == DeploymentMode.CLUSTER:
|
|
108
|
+
cls._log_cluster_db_warning(deployment_mode_enum, config.db)
|
|
109
|
+
cluster_config = ClusterRedisConfig(
|
|
110
|
+
username=config.username,
|
|
111
|
+
password=config.password,
|
|
112
|
+
use_ssl=config.use_ssl,
|
|
113
|
+
ssl_certfile=config.ssl_certfile,
|
|
114
|
+
ssl_keyfile=config.ssl_keyfile,
|
|
115
|
+
ssl_ca_certs=config.ssl_ca_certs,
|
|
116
|
+
db=config.db,
|
|
117
|
+
socket_timeout=config.socket_timeout,
|
|
118
|
+
decode_responses=config.decode_responses,
|
|
119
|
+
endpoints=parsed_endpoints,
|
|
120
|
+
)
|
|
121
|
+
return cls._create_cluster_connection(cluster_config)
|
|
122
|
+
elif deployment_mode_enum == DeploymentMode.SENTINEL:
|
|
123
|
+
sentinel_kwargs = {
|
|
124
|
+
"username": config.username,
|
|
125
|
+
"password": config.password,
|
|
126
|
+
"use_ssl": config.use_ssl,
|
|
127
|
+
"ssl_certfile": config.ssl_certfile,
|
|
128
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
129
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
130
|
+
"db": config.db,
|
|
131
|
+
"socket_timeout": config.socket_timeout,
|
|
132
|
+
"decode_responses": config.decode_responses,
|
|
133
|
+
"endpoints": parsed_endpoints,
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if config.sentinel_service is not None:
|
|
137
|
+
sentinel_kwargs["sentinel_service"] = config.sentinel_service
|
|
138
|
+
|
|
139
|
+
sentinel_config = SentinelRedisConfig(**sentinel_kwargs)
|
|
140
|
+
return cls._create_sentinel_connection(sentinel_config)
|
|
141
|
+
else:
|
|
142
|
+
standard_config = StandardRedisConfig(
|
|
143
|
+
host=config.host,
|
|
144
|
+
port=config.port,
|
|
145
|
+
username=config.username,
|
|
146
|
+
password=config.password,
|
|
147
|
+
use_ssl=config.use_ssl,
|
|
148
|
+
ssl_certfile=config.ssl_certfile,
|
|
149
|
+
ssl_keyfile=config.ssl_keyfile,
|
|
150
|
+
ssl_ca_certs=config.ssl_ca_certs,
|
|
151
|
+
db=config.db,
|
|
152
|
+
socket_timeout=config.socket_timeout,
|
|
153
|
+
decode_responses=config.decode_responses,
|
|
154
|
+
)
|
|
155
|
+
return cls._create_standard_connection(standard_config)
|
|
156
|
+
|
|
157
|
+
@classmethod
|
|
158
|
+
def _parse_and_validate_endpoints(
|
|
159
|
+
cls,
|
|
160
|
+
deployment_mode: DeploymentMode,
|
|
161
|
+
endpoints: List[str],
|
|
162
|
+
host: Text,
|
|
163
|
+
port: int,
|
|
164
|
+
) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
165
|
+
"""Parse and validate endpoints based on deployment mode."""
|
|
166
|
+
if deployment_mode == DeploymentMode.STANDARD:
|
|
167
|
+
if endpoints:
|
|
168
|
+
structlogger.warning(
|
|
169
|
+
"redis_connection_factory.standard_endpoints_ignored",
|
|
170
|
+
event_info="Parameter `endpoints` ignored in standard mode. "
|
|
171
|
+
"Only 'host' and 'port' are used for standard Redis connections.",
|
|
172
|
+
)
|
|
173
|
+
return []
|
|
174
|
+
|
|
175
|
+
if not endpoints:
|
|
176
|
+
endpoints = cls._get_default_endpoints(deployment_mode, host, port)
|
|
177
|
+
|
|
178
|
+
# Parse endpoints into appropriate format
|
|
179
|
+
parsed_endpoints = cls._parse_all_endpoints(endpoints, deployment_mode)
|
|
180
|
+
|
|
181
|
+
if not parsed_endpoints:
|
|
182
|
+
raise RasaException(
|
|
183
|
+
f"No valid '{deployment_mode.value}' endpoints provided"
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
return parsed_endpoints
|
|
187
|
+
|
|
188
|
+
@classmethod
|
|
189
|
+
def _get_default_endpoints(
|
|
190
|
+
cls,
|
|
191
|
+
deployment_mode: DeploymentMode,
|
|
192
|
+
host: Text,
|
|
193
|
+
port: int,
|
|
194
|
+
) -> List[str]:
|
|
195
|
+
"""Get default endpoints when none provided."""
|
|
196
|
+
if deployment_mode == DeploymentMode.CLUSTER:
|
|
197
|
+
structlogger.warning(
|
|
198
|
+
"redis_connection_factory.cluster_endpoints_not_provided",
|
|
199
|
+
event_info="No endpoints provided for cluster mode. "
|
|
200
|
+
"Using default 'host:port' configuration.",
|
|
201
|
+
)
|
|
202
|
+
return [f"{host}:{port}"]
|
|
203
|
+
elif deployment_mode == DeploymentMode.SENTINEL:
|
|
204
|
+
raise RasaException("Sentinel mode requires endpoints configuration")
|
|
205
|
+
|
|
206
|
+
return []
|
|
207
|
+
|
|
208
|
+
@classmethod
|
|
209
|
+
def _parse_single_endpoint(
|
|
210
|
+
cls, endpoint: str, deployment_mode: DeploymentMode
|
|
211
|
+
) -> Optional[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
212
|
+
"""Parse a single endpoint string into the appropriate format."""
|
|
213
|
+
if not isinstance(endpoint, str):
|
|
214
|
+
structlogger.warning(
|
|
215
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_type",
|
|
216
|
+
event_info=f"Invalid endpoint type for endpoint '{endpoint}'. "
|
|
217
|
+
"Expected string in 'host:port' format.",
|
|
218
|
+
)
|
|
219
|
+
return None
|
|
220
|
+
|
|
221
|
+
if ":" not in endpoint:
|
|
222
|
+
structlogger.warning(
|
|
223
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint_format",
|
|
224
|
+
event_info=f"Invalid format for endpoint '{endpoint}'. "
|
|
225
|
+
"Expected 'host:port'.",
|
|
226
|
+
)
|
|
227
|
+
return None
|
|
228
|
+
|
|
229
|
+
host, port_str = endpoint.rsplit(":", 1)
|
|
230
|
+
try:
|
|
231
|
+
port = int(port_str)
|
|
232
|
+
except ValueError:
|
|
233
|
+
structlogger.warning(
|
|
234
|
+
f"redis_connection_factory.invalid_{deployment_mode.value}_endpoint",
|
|
235
|
+
event_info=f"Invalid port in endpoint '{endpoint}'. "
|
|
236
|
+
"Expected format 'host:port'.",
|
|
237
|
+
)
|
|
238
|
+
return None
|
|
239
|
+
|
|
240
|
+
return (host, port)
|
|
241
|
+
|
|
242
|
+
@classmethod
|
|
243
|
+
def _parse_all_endpoints(
|
|
244
|
+
cls,
|
|
245
|
+
endpoints: List[str],
|
|
246
|
+
deployment_mode: DeploymentMode,
|
|
247
|
+
) -> List[Union[Dict[str, Any], Tuple[str, int]]]:
|
|
248
|
+
"""Parse a list of endpoint strings into appropriate format."""
|
|
249
|
+
parsed_endpoints = []
|
|
250
|
+
for endpoint in endpoints:
|
|
251
|
+
parsed = cls._parse_single_endpoint(endpoint, deployment_mode)
|
|
252
|
+
if parsed:
|
|
253
|
+
parsed_endpoints.append(parsed)
|
|
254
|
+
return parsed_endpoints
|
|
255
|
+
|
|
256
|
+
@classmethod
|
|
257
|
+
def _create_cluster_connection(
|
|
258
|
+
cls,
|
|
259
|
+
config: ClusterRedisConfig,
|
|
260
|
+
) -> redis.RedisCluster:
|
|
261
|
+
"""Create a Redis Cluster connection.
|
|
262
|
+
|
|
263
|
+
Note: Database parameter is ignored in cluster mode (always uses db=0).
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
config: Cluster configuration containing all connection parameters.
|
|
267
|
+
|
|
268
|
+
Returns:
|
|
269
|
+
redis.RedisCluster: Configured cluster connection.
|
|
270
|
+
|
|
271
|
+
Raises:
|
|
272
|
+
ConnectionException: If cluster initialization fails.
|
|
273
|
+
"""
|
|
274
|
+
from redis.cluster import ClusterNode
|
|
275
|
+
|
|
276
|
+
structlogger.info(
|
|
277
|
+
"redis_connection_factory.cluster_mode",
|
|
278
|
+
event_info=f"Initializing Redis Cluster with {len(config.endpoints)} nodes",
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
cluster_nodes = [ClusterNode(host, port) for host, port in config.endpoints]
|
|
282
|
+
try:
|
|
283
|
+
redis_cluster: redis.RedisCluster = redis.RedisCluster(
|
|
284
|
+
startup_nodes=cluster_nodes,
|
|
285
|
+
username=config.username,
|
|
286
|
+
password=config.password,
|
|
287
|
+
ssl=config.use_ssl,
|
|
288
|
+
ssl_certfile=config.ssl_certfile,
|
|
289
|
+
ssl_keyfile=config.ssl_keyfile,
|
|
290
|
+
ssl_ca_certs=config.ssl_ca_certs,
|
|
291
|
+
socket_timeout=config.socket_timeout,
|
|
292
|
+
decode_responses=config.decode_responses,
|
|
293
|
+
)
|
|
294
|
+
except Exception as e:
|
|
295
|
+
raise ConnectionException(f"Error initializing Redis Cluster: {e}")
|
|
296
|
+
|
|
297
|
+
return redis_cluster
|
|
298
|
+
|
|
299
|
+
@classmethod
|
|
300
|
+
def _create_sentinel_connection(
|
|
301
|
+
cls,
|
|
302
|
+
config: SentinelRedisConfig,
|
|
303
|
+
) -> redis.Redis:
|
|
304
|
+
"""Create a Sentinel-managed Redis connection.
|
|
305
|
+
|
|
306
|
+
Connects to Redis master through Sentinel service discovery.
|
|
307
|
+
Tests connection with ping() before returning.
|
|
308
|
+
|
|
309
|
+
Args:
|
|
310
|
+
config: Sentinel configuration containing all connection parameters.
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
redis.Redis: Connection to the Redis master via sentinel.
|
|
314
|
+
|
|
315
|
+
Raises:
|
|
316
|
+
ConnectionException: If sentinel initialization or connection test fails.
|
|
317
|
+
"""
|
|
318
|
+
from redis.sentinel import Sentinel
|
|
319
|
+
|
|
320
|
+
structlogger.info(
|
|
321
|
+
"redis_connection_factory.sentinel_mode",
|
|
322
|
+
event_info=f"Initializing Redis Sentinel with {len(config.endpoints)} "
|
|
323
|
+
f"sentinel endpoints and service: {config.sentinel_service}",
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
# Configuration for Sentinel connection
|
|
327
|
+
sentinel_kwargs = {
|
|
328
|
+
"username": config.username,
|
|
329
|
+
"password": config.password,
|
|
330
|
+
"socket_timeout": config.socket_timeout,
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
# SSL configuration
|
|
334
|
+
if config.use_ssl:
|
|
335
|
+
sentinel_kwargs.update(
|
|
336
|
+
{
|
|
337
|
+
"ssl": config.use_ssl,
|
|
338
|
+
"ssl_certfile": config.ssl_certfile,
|
|
339
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
340
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
341
|
+
}
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
# Configuration for Redis client (master/replica)
|
|
345
|
+
client_kwargs = {
|
|
346
|
+
"db": config.db,
|
|
347
|
+
"decode_responses": config.decode_responses,
|
|
348
|
+
"socket_timeout": config.socket_timeout,
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
# Create Sentinel instance
|
|
352
|
+
try:
|
|
353
|
+
sentinel = Sentinel(config.endpoints, **sentinel_kwargs)
|
|
354
|
+
master = sentinel.master_for(config.sentinel_service, **client_kwargs)
|
|
355
|
+
|
|
356
|
+
# Test the connection
|
|
357
|
+
master.ping()
|
|
358
|
+
|
|
359
|
+
except Exception as e:
|
|
360
|
+
raise ConnectionException(f"Error initializing Redis Sentinel: {e}")
|
|
361
|
+
|
|
362
|
+
return master
|
|
363
|
+
|
|
364
|
+
@classmethod
|
|
365
|
+
def _create_standard_connection(
|
|
366
|
+
cls,
|
|
367
|
+
config: StandardRedisConfig,
|
|
368
|
+
) -> redis.Redis:
|
|
369
|
+
"""Create a standard Redis connection.
|
|
370
|
+
|
|
371
|
+
Args:
|
|
372
|
+
config: Standard configuration containing all connection parameters.
|
|
373
|
+
|
|
374
|
+
Returns:
|
|
375
|
+
redis.Redis: Configured Redis connection.
|
|
376
|
+
"""
|
|
377
|
+
structlogger.info(
|
|
378
|
+
"redis_connection_factory.standard_mode",
|
|
379
|
+
event_info="Initializing Redis connection",
|
|
380
|
+
)
|
|
381
|
+
# Build connection arguments
|
|
382
|
+
connection_args: Dict[str, Any] = {
|
|
383
|
+
"host": config.host,
|
|
384
|
+
"port": int(config.port),
|
|
385
|
+
"db": config.db,
|
|
386
|
+
"password": config.password,
|
|
387
|
+
"socket_timeout": float(config.socket_timeout),
|
|
388
|
+
"ssl": config.use_ssl,
|
|
389
|
+
"ssl_certfile": config.ssl_certfile,
|
|
390
|
+
"ssl_keyfile": config.ssl_keyfile,
|
|
391
|
+
"ssl_ca_certs": config.ssl_ca_certs,
|
|
392
|
+
"username": config.username,
|
|
393
|
+
"decode_responses": config.decode_responses,
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
try:
|
|
397
|
+
standard_redis = redis.StrictRedis(**connection_args)
|
|
398
|
+
except Exception as e:
|
|
399
|
+
raise ConnectionException(f"Error initializing Redis connection: {e}")
|
|
400
|
+
|
|
401
|
+
return standard_redis
|
|
402
|
+
|
|
403
|
+
@classmethod
|
|
404
|
+
def _log_cluster_db_warning(cls, deployment_mode: DeploymentMode, db: int) -> None:
|
|
405
|
+
"""Log warning if db parameter is set in cluster mode."""
|
|
406
|
+
if deployment_mode == DeploymentMode.CLUSTER and db != 0:
|
|
407
|
+
structlogger.warning(
|
|
408
|
+
"redis_connection_factory.cluster_db_ignored",
|
|
409
|
+
event_info=f"Database parameter 'db={db}' ignored in cluster mode. "
|
|
410
|
+
"Redis Cluster only supports database 0.",
|
|
411
|
+
)
|
rasa/core/run.py
CHANGED
|
@@ -43,10 +43,20 @@ from rasa.utils import licensing
|
|
|
43
43
|
logger = logging.getLogger() # get the root logger
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
def
|
|
46
|
+
def create_input_channels(
|
|
47
47
|
channel: Optional[Text], credentials_file: Optional[Text]
|
|
48
48
|
) -> List[InputChannel]:
|
|
49
|
-
"""Instantiate the chosen input channel.
|
|
49
|
+
"""Instantiate the chosen input channel.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
channel (optional): The name of the specific input channel to create.
|
|
53
|
+
credentials_file: Path to the credentials file 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
|
+
"""
|
|
50
60
|
if credentials_file:
|
|
51
61
|
all_credentials = read_config_file(credentials_file)
|
|
52
62
|
else:
|
|
@@ -257,7 +267,7 @@ def serve_application(
|
|
|
257
267
|
if not channel and not credentials:
|
|
258
268
|
channel = "cmdline"
|
|
259
269
|
|
|
260
|
-
input_channels =
|
|
270
|
+
input_channels = create_input_channels(channel, credentials)
|
|
261
271
|
|
|
262
272
|
if inspect:
|
|
263
273
|
logger.info("Starting development inspector.")
|
|
@@ -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
|
|
@@ -27,6 +27,13 @@ from rasa.core.constants import (
|
|
|
27
27
|
POSTGRESQL_MAX_OVERFLOW,
|
|
28
28
|
POSTGRESQL_POOL_SIZE,
|
|
29
29
|
POSTGRESQL_SCHEMA,
|
|
30
|
+
SQL_TRACKER_STORE_SSL_MODE_ENV_VAR_NAME,
|
|
31
|
+
SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE_ENV_VAR_NAME,
|
|
32
|
+
)
|
|
33
|
+
from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
|
|
34
|
+
IAMCredentialsProviderInput,
|
|
35
|
+
SupportedServiceType,
|
|
36
|
+
create_iam_credentials_provider,
|
|
30
37
|
)
|
|
31
38
|
from rasa.core.tracker_stores.tracker_store import (
|
|
32
39
|
SerializedTrackerAsText,
|
|
@@ -85,6 +92,21 @@ def is_postgresql_url(url: Union[Text, "URL"]) -> bool:
|
|
|
85
92
|
return url.drivername == "postgresql"
|
|
86
93
|
|
|
87
94
|
|
|
95
|
+
def get_ssl_args() -> Dict[str, Any]:
|
|
96
|
+
"""Get SSL arguments for PostgreSQL connection from environment variables."""
|
|
97
|
+
ssl_mode = os.getenv(SQL_TRACKER_STORE_SSL_MODE_ENV_VAR_NAME)
|
|
98
|
+
ssl_root_cert = os.getenv(SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE_ENV_VAR_NAME)
|
|
99
|
+
ssl_args = {}
|
|
100
|
+
|
|
101
|
+
if ssl_mode:
|
|
102
|
+
ssl_args["sslmode"] = ssl_mode
|
|
103
|
+
|
|
104
|
+
if ssl_root_cert:
|
|
105
|
+
ssl_args["sslrootcert"] = ssl_root_cert
|
|
106
|
+
|
|
107
|
+
return ssl_args
|
|
108
|
+
|
|
109
|
+
|
|
88
110
|
def create_engine_kwargs(url: Union[Text, "URL"]) -> Dict[Text, Any]:
|
|
89
111
|
"""Get `sqlalchemy.create_engine()` kwargs.
|
|
90
112
|
|
|
@@ -119,6 +141,14 @@ def create_engine_kwargs(url: Union[Text, "URL"]) -> Dict[Text, Any]:
|
|
|
119
141
|
os.environ.get(POSTGRESQL_MAX_OVERFLOW, POSTGRESQL_DEFAULT_MAX_OVERFLOW)
|
|
120
142
|
)
|
|
121
143
|
|
|
144
|
+
ssl_args = get_ssl_args()
|
|
145
|
+
|
|
146
|
+
if ssl_args:
|
|
147
|
+
if "connect_args" in kwargs:
|
|
148
|
+
kwargs["connect_args"].update(ssl_args)
|
|
149
|
+
else:
|
|
150
|
+
kwargs["connect_args"] = ssl_args
|
|
151
|
+
|
|
122
152
|
return kwargs
|
|
123
153
|
|
|
124
154
|
|
|
@@ -197,6 +227,32 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
|
|
|
197
227
|
|
|
198
228
|
port = validate_port(port)
|
|
199
229
|
|
|
230
|
+
iam_credentials_provider = create_iam_credentials_provider(
|
|
231
|
+
IAMCredentialsProviderInput(
|
|
232
|
+
service_name=SupportedServiceType.TRACKER_STORE,
|
|
233
|
+
username=username,
|
|
234
|
+
host=host,
|
|
235
|
+
port=port,
|
|
236
|
+
)
|
|
237
|
+
)
|
|
238
|
+
if iam_credentials_provider is not None:
|
|
239
|
+
credentials = iam_credentials_provider.get_credentials()
|
|
240
|
+
if credentials.auth_token:
|
|
241
|
+
password = credentials.auth_token
|
|
242
|
+
structlogger.debug(
|
|
243
|
+
"sql_tracker_store.iam_credentials_provider",
|
|
244
|
+
event_info="Using temporary auth token from "
|
|
245
|
+
"IAM credentials provider.",
|
|
246
|
+
)
|
|
247
|
+
else:
|
|
248
|
+
structlogger.warning(
|
|
249
|
+
"sql_tracker_store.iam_credentials_provider.no_auth_token",
|
|
250
|
+
event_info=(
|
|
251
|
+
"IAM credentials provider did not return an auth token. "
|
|
252
|
+
"Falling back to provided password or no password."
|
|
253
|
+
),
|
|
254
|
+
)
|
|
255
|
+
|
|
200
256
|
engine_url = self.get_db_url(
|
|
201
257
|
dialect, host, port, db, username, password, login_db, query
|
|
202
258
|
)
|
|
@@ -272,7 +328,7 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
|
|
|
272
328
|
host: Database network host.
|
|
273
329
|
port: Database network port.
|
|
274
330
|
db: Database name.
|
|
275
|
-
username:
|
|
331
|
+
username: Username to use when connecting to the database.
|
|
276
332
|
password: Password for database user.
|
|
277
333
|
login_db: Alternative database name to which initially connect, and create
|
|
278
334
|
the database specified by `db` (PostgreSQL only).
|