rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +213 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +889 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +228 -0
- rasa/agents/validation.py +538 -0
- rasa/api.py +23 -9
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +96 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +38 -0
- rasa/builder/copilot/copilot.py +562 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +690 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +234 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
- rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/clients.py +256 -0
- rasa/builder/guardrails/constants.py +12 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/models.py +266 -0
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +94 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +609 -0
- rasa/builder/llm_service.py +273 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +234 -0
- rasa/builder/models.py +229 -0
- rasa/builder/project_generator.py +463 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/service.py +1367 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +188 -0
- rasa/builder/validation_service.py +101 -0
- rasa/cli/arguments/data.py +9 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +78 -10
- rasa/cli/dialogue_understanding_test.py +11 -7
- rasa/cli/e2e_test.py +10 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +9 -4
- rasa/cli/interactive.py +8 -4
- rasa/cli/llm_fine_tuning.py +12 -6
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +8 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +11 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/defaults.py +1 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
- rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
- rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
- rasa/cli/project_templates/finance/actions/db.py +117 -0
- rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
- rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
- rasa/cli/project_templates/finance/config.yml +29 -0
- rasa/cli/project_templates/finance/credentials.yml +33 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
- rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
- rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
- rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
- rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
- rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
- rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
- rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
- rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
- rasa/cli/project_templates/finance/data/data.md +14 -0
- rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
- rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
- rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
- rasa/cli/project_templates/finance/db/cards.json +18 -0
- rasa/cli/project_templates/finance/db/contacts.json +10 -0
- rasa/cli/project_templates/finance/db/my_account.json +6 -0
- rasa/cli/project_templates/finance/db/transactions.json +22 -0
- rasa/cli/project_templates/finance/docs/docs.md +8 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
- rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
- rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
- rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
- rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
- rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
- rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
- rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
- rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
- rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
- rasa/cli/project_templates/finance/domain/domain.md +18 -0
- rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
- rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
- rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
- rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
- rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
- rasa/cli/project_templates/finance/endpoints.yml +67 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +8 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +13 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +8 -10
- rasa/cli/scaffold.py +50 -6
- rasa/cli/shell.py +10 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +44 -30
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +232 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +53 -13
- rasa/core/actions/action_exceptions.py +1 -1
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +22 -2
- rasa/core/available_agents.py +239 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +56 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +29 -16
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +56 -12
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +55 -1
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +82 -32
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +11 -6
- rasa/core/channels/voice_stream/browser_audio.py +91 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +19 -15
- rasa/core/channels/voice_stream/jambonz.py +22 -12
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +170 -32
- rasa/core/concurrent_lock_store.py +83 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
- rasa/core/config/configuration.py +295 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +17 -0
- rasa/core/exceptions.py +1 -1
- rasa/core/featurizers/tracker_featurizers.py +3 -2
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
- rasa/core/lock_store.py +50 -10
- rasa/core/nlg/contextual_response_rephraser.py +5 -0
- rasa/core/nlg/generator.py +1 -1
- rasa/core/persistor.py +7 -7
- rasa/core/policies/enterprise_search_policy.py +9 -10
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +720 -0
- rasa/core/policies/flows/flow_exceptions.py +5 -2
- rasa/core/policies/flows/flow_executor.py +146 -77
- rasa/core/policies/flows/mcp_tool_executor.py +304 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/rule_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +100 -44
- rasa/core/redis_connection_factory.py +474 -0
- rasa/core/run.py +49 -10
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +36 -14
- rasa/core/tracker_stores/sql_tracker_store.py +59 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
- rasa/dialogue_understanding/commands/utils.py +135 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +25 -8
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +2 -2
- rasa/model_manager/socket_bridge.py +21 -17
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_config.py +1 -1
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
- rasa/shared/agents/auth/constants.py +13 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/auth/utils.py +85 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +11 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +62 -22
- rasa/shared/core/events.py +329 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +57 -6
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +19 -10
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
- rasa/shared/exceptions.py +39 -2
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +86 -4
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +26 -1
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +92 -19
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +250 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/download.py +3 -0
- rasa/studio/prompts.py +1 -0
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +19 -52
- rasa/telemetry.py +166 -28
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +121 -7
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/utils/pypred.py +45 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +149 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dist-info/METADATA +212 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
- rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
- rasa_pro-3.13.12.dist-info/METADATA +0 -192
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import Any, AsyncGenerator, Dict
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
|
|
6
|
+
from rasa.shared.agents.auth.types import AgentAuthType
|
|
7
|
+
from rasa.shared.utils.io import resolve_environment_variables
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class AgentAuthStrategy(ABC, httpx.Auth):
|
|
11
|
+
"""Base class for authentication strategies."""
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
@abstractmethod
|
|
15
|
+
def from_config(cls, config: Dict[str, Any]) -> "AgentAuthStrategy":
|
|
16
|
+
"""Create an authentication strategy instance from a config dictionary."""
|
|
17
|
+
...
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
@abstractmethod
|
|
21
|
+
def auth_type(self) -> AgentAuthType:
|
|
22
|
+
"""Return the type of the authentication strategy."""
|
|
23
|
+
...
|
|
24
|
+
|
|
25
|
+
@abstractmethod
|
|
26
|
+
async def get_headers(self) -> Dict[str, str]:
|
|
27
|
+
"""Get authentication headers for requests.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Dictionary containing authentication headers.
|
|
31
|
+
"""
|
|
32
|
+
...
|
|
33
|
+
|
|
34
|
+
async def async_auth_flow(
|
|
35
|
+
self, request: httpx.Request
|
|
36
|
+
) -> AsyncGenerator[httpx.Request, httpx.Response]:
|
|
37
|
+
"""Get authentication headers for requests.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
Async generator of requests with authentication headers.
|
|
41
|
+
"""
|
|
42
|
+
# Get authentication headers.
|
|
43
|
+
auth_headers = await self.get_headers()
|
|
44
|
+
|
|
45
|
+
# Resolve environment variables in authentication headers.
|
|
46
|
+
resolved_auth_headers = resolve_environment_variables(auth_headers)
|
|
47
|
+
|
|
48
|
+
# Update request headers with resolved authentication headers.
|
|
49
|
+
request.headers.update(resolved_auth_headers)
|
|
50
|
+
|
|
51
|
+
# Yield request with resolved authentication headers.
|
|
52
|
+
yield request
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""API Key authentication strategy implementation."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from rasa.shared.agents.auth.auth_strategy import AgentAuthStrategy
|
|
6
|
+
from rasa.shared.agents.auth.constants import (
|
|
7
|
+
CONFIG_API_KEY_KEY,
|
|
8
|
+
CONFIG_HEADER_FORMAT_KEY,
|
|
9
|
+
CONFIG_HEADER_NAME_KEY,
|
|
10
|
+
)
|
|
11
|
+
from rasa.shared.agents.auth.types import AgentAuthType
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class APIKeyAuthStrategy(AgentAuthStrategy):
|
|
15
|
+
"""API Key authentication strategy implementation."""
|
|
16
|
+
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
api_key: str,
|
|
20
|
+
header_name: str = "Authorization",
|
|
21
|
+
header_format: str = "Bearer {key}",
|
|
22
|
+
):
|
|
23
|
+
self.api_key = api_key
|
|
24
|
+
self.header_name = header_name
|
|
25
|
+
self.header_format = header_format
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def from_config(cls, config: Dict[str, Any]) -> "APIKeyAuthStrategy":
|
|
29
|
+
api_key = config.get(CONFIG_API_KEY_KEY)
|
|
30
|
+
header_name = config.get(CONFIG_HEADER_NAME_KEY, "Authorization")
|
|
31
|
+
header_format = config.get(CONFIG_HEADER_FORMAT_KEY, "Bearer {key}")
|
|
32
|
+
if not api_key:
|
|
33
|
+
raise ValueError("API key is required for API KEY authentication")
|
|
34
|
+
return APIKeyAuthStrategy(api_key, header_name, header_format)
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def auth_type(self) -> AgentAuthType:
|
|
38
|
+
return AgentAuthType.API_KEY
|
|
39
|
+
|
|
40
|
+
async def get_headers(self) -> Dict[str, str]:
|
|
41
|
+
"""Return API key authentication headers."""
|
|
42
|
+
return {self.header_name: self.header_format.format(key=self.api_key)}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Bearer Token authentication strategy implementation."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict
|
|
4
|
+
|
|
5
|
+
from rasa.shared.agents.auth.auth_strategy import AgentAuthStrategy
|
|
6
|
+
from rasa.shared.agents.auth.constants import CONFIG_TOKEN_KEY
|
|
7
|
+
from rasa.shared.agents.auth.types import AgentAuthType
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class BearerTokenAuthStrategy(AgentAuthStrategy):
|
|
11
|
+
"""Bearer Token authentication strategy implementation."""
|
|
12
|
+
|
|
13
|
+
def __init__(self, token: str):
|
|
14
|
+
self._token = token
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
def from_config(cls, config: Dict[str, Any]) -> "BearerTokenAuthStrategy":
|
|
18
|
+
token = config.get(CONFIG_TOKEN_KEY)
|
|
19
|
+
if not token:
|
|
20
|
+
raise ValueError("Access token is required for Bearer Token authentication")
|
|
21
|
+
return BearerTokenAuthStrategy(token)
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def auth_type(self) -> AgentAuthType:
|
|
25
|
+
return AgentAuthType.BEARER_TOKEN
|
|
26
|
+
|
|
27
|
+
async def get_headers(self) -> Dict[str, str]:
|
|
28
|
+
return {"Authorization": f"Bearer {self._token}"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"""OAuth2 authentication strategy client credentials flow implementation."""
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import time
|
|
5
|
+
from typing import Any, AsyncGenerator, Dict, Optional
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from rasa.shared.agents.auth.auth_strategy import AgentAuthStrategy
|
|
10
|
+
from rasa.shared.agents.auth.constants import (
|
|
11
|
+
CONFIG_AUDIENCE_KEY,
|
|
12
|
+
CONFIG_CLIENT_ID_KEY,
|
|
13
|
+
CONFIG_CLIENT_SECRET_KEY,
|
|
14
|
+
CONFIG_OAUTH_KEY,
|
|
15
|
+
CONFIG_SCOPE_KEY,
|
|
16
|
+
CONFIG_TIMEOUT_KEY,
|
|
17
|
+
CONFIG_TOKEN_URL_KEY,
|
|
18
|
+
)
|
|
19
|
+
from rasa.shared.agents.auth.types import AgentAuthType
|
|
20
|
+
from rasa.shared.utils.io import resolve_environment_variables
|
|
21
|
+
|
|
22
|
+
KEY_ACCESS_TOKEN = "access_token"
|
|
23
|
+
KEY_CLIENT_CREDENTIALS = "client_credentials"
|
|
24
|
+
KEY_EXPIRES_IN = "expires_in"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class OAuth2AuthStrategy(AgentAuthStrategy):
|
|
28
|
+
"""Client Credentials Flow authentication strategy."""
|
|
29
|
+
|
|
30
|
+
DEFAULT_ACCESS_TOKEN_TIMEOUT = 5
|
|
31
|
+
DEFAULT_ACCESS_TOKEN_EXPIRES_IN_SECONDS = 3600
|
|
32
|
+
DEFAULT_BUFFER_TIME_SECONDS = 10
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
token_url: str,
|
|
37
|
+
client_id: str,
|
|
38
|
+
client_secret: str,
|
|
39
|
+
audience: Optional[str] = None,
|
|
40
|
+
scope: Optional[str] = None,
|
|
41
|
+
timeout: Optional[int] = None,
|
|
42
|
+
):
|
|
43
|
+
self.token_url = token_url
|
|
44
|
+
self.client_id = client_id
|
|
45
|
+
self.client_secret = client_secret
|
|
46
|
+
self.audience = audience
|
|
47
|
+
self.scope = scope
|
|
48
|
+
self.timeout = timeout or self.DEFAULT_ACCESS_TOKEN_TIMEOUT
|
|
49
|
+
|
|
50
|
+
# Only client credentials flow is supported for server to server communication.
|
|
51
|
+
self._grant_type = KEY_CLIENT_CREDENTIALS
|
|
52
|
+
|
|
53
|
+
# Initialize defaults.
|
|
54
|
+
self._access_token: Optional[str] = None
|
|
55
|
+
self._expires_at: Optional[float] = None
|
|
56
|
+
|
|
57
|
+
# Initialize lock for concurrent access to the refresh the access token.
|
|
58
|
+
self._refresh_lock = asyncio.Lock()
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
def from_config(cls, config: Dict[str, Any]) -> "OAuth2AuthStrategy":
|
|
62
|
+
"""Create OAuth2AuthStrategy from configuration dictionary."""
|
|
63
|
+
# Extract OAuth2 config from nested "oauth" key if present
|
|
64
|
+
oauth_config = config.get(CONFIG_OAUTH_KEY, config)
|
|
65
|
+
if not oauth_config:
|
|
66
|
+
raise ValueError("OAuth2 configuration is required")
|
|
67
|
+
|
|
68
|
+
token_url = oauth_config.get(CONFIG_TOKEN_URL_KEY)
|
|
69
|
+
client_id = oauth_config.get(CONFIG_CLIENT_ID_KEY)
|
|
70
|
+
client_secret = oauth_config.get(CONFIG_CLIENT_SECRET_KEY)
|
|
71
|
+
audience = oauth_config.get(CONFIG_AUDIENCE_KEY)
|
|
72
|
+
scope = oauth_config.get(CONFIG_SCOPE_KEY)
|
|
73
|
+
timeout = (
|
|
74
|
+
oauth_config.get(CONFIG_TIMEOUT_KEY) or cls.DEFAULT_ACCESS_TOKEN_TIMEOUT
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
if not token_url:
|
|
78
|
+
raise ValueError("Token URL is required for OAuth2 authentication")
|
|
79
|
+
if not client_id:
|
|
80
|
+
raise ValueError("Client ID is required for OAuth2 authentication")
|
|
81
|
+
if not client_secret:
|
|
82
|
+
raise ValueError("Client secret is required for OAuth2 authentication")
|
|
83
|
+
|
|
84
|
+
return cls(
|
|
85
|
+
token_url=token_url,
|
|
86
|
+
client_id=client_id,
|
|
87
|
+
client_secret=client_secret,
|
|
88
|
+
audience=audience,
|
|
89
|
+
scope=scope,
|
|
90
|
+
timeout=timeout,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def auth_type(self) -> AgentAuthType:
|
|
95
|
+
return AgentAuthType.OAUTH2
|
|
96
|
+
|
|
97
|
+
async def get_headers(self) -> Dict[str, str]:
|
|
98
|
+
"""Return OAuth2 authentication headers."""
|
|
99
|
+
# Acquire lock to prevent concurrent access to the refresh the access token.
|
|
100
|
+
async with self._refresh_lock:
|
|
101
|
+
# Refresh if missing or expired
|
|
102
|
+
if not self._access_token or self._is_expired():
|
|
103
|
+
await self._refresh_access_token()
|
|
104
|
+
if not self._access_token:
|
|
105
|
+
raise ValueError("Failed to obtain access token")
|
|
106
|
+
return {"Authorization": f"Bearer {self._access_token}"}
|
|
107
|
+
|
|
108
|
+
def _is_expired(self) -> bool:
|
|
109
|
+
"""Check if access token is expired."""
|
|
110
|
+
# Adding a buffer time to the expiration time to avoid race conditions.
|
|
111
|
+
return (
|
|
112
|
+
not self._expires_at
|
|
113
|
+
or self._expires_at <= time.time() + self.DEFAULT_BUFFER_TIME_SECONDS
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
async def _refresh_access_token(self) -> None:
|
|
117
|
+
"""Fetch a new access token using client credentials flow."""
|
|
118
|
+
# Prepare data and headers
|
|
119
|
+
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
|
120
|
+
data = {
|
|
121
|
+
"grant_type": self._grant_type,
|
|
122
|
+
"client_id": self.client_id,
|
|
123
|
+
"client_secret": self.client_secret,
|
|
124
|
+
}
|
|
125
|
+
if self.scope:
|
|
126
|
+
data["scope"] = self.scope
|
|
127
|
+
if self.audience:
|
|
128
|
+
data["audience"] = self.audience
|
|
129
|
+
|
|
130
|
+
# Resolve environment variables in data.
|
|
131
|
+
resolved_data = resolve_environment_variables(data)
|
|
132
|
+
|
|
133
|
+
# Fetch access token
|
|
134
|
+
try:
|
|
135
|
+
async with httpx.AsyncClient(timeout=self.timeout) as client:
|
|
136
|
+
resp = await client.post(
|
|
137
|
+
self.token_url, data=resolved_data, headers=headers
|
|
138
|
+
)
|
|
139
|
+
resp.raise_for_status()
|
|
140
|
+
token_data = resp.json()
|
|
141
|
+
except httpx.HTTPStatusError as e:
|
|
142
|
+
raise e
|
|
143
|
+
except httpx.RequestError as e:
|
|
144
|
+
raise ValueError(f"OAuth2 token request failed - {e}") from e
|
|
145
|
+
except Exception as e:
|
|
146
|
+
raise ValueError(
|
|
147
|
+
f"Unexpected error during OAuth2 token request - {e}"
|
|
148
|
+
) from e
|
|
149
|
+
|
|
150
|
+
# Validate token data
|
|
151
|
+
if KEY_ACCESS_TOKEN not in token_data:
|
|
152
|
+
raise ValueError(f"No `{KEY_ACCESS_TOKEN}` in OAuth2 response")
|
|
153
|
+
|
|
154
|
+
# Set access token and expires at
|
|
155
|
+
self._access_token = token_data[KEY_ACCESS_TOKEN]
|
|
156
|
+
self._expires_at = time.time() + token_data.get(
|
|
157
|
+
KEY_EXPIRES_IN, self.DEFAULT_ACCESS_TOKEN_EXPIRES_IN_SECONDS
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
async def async_auth_flow(
|
|
161
|
+
self, request: httpx.Request
|
|
162
|
+
) -> AsyncGenerator[httpx.Request, httpx.Response]:
|
|
163
|
+
"""Inject Authorization header into outgoing requests.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
Async generator of requests with Authorization header.
|
|
167
|
+
"""
|
|
168
|
+
auth_headers = await self.get_headers()
|
|
169
|
+
request.headers.update(auth_headers)
|
|
170
|
+
yield request
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
CONFIG_API_KEY_KEY = "api_key"
|
|
2
|
+
CONFIG_TOKEN_KEY = "token"
|
|
3
|
+
CONFIG_OAUTH_KEY = "oauth"
|
|
4
|
+
CONFIG_HEADER_NAME_KEY = "header_name"
|
|
5
|
+
CONFIG_HEADER_FORMAT_KEY = "header_format"
|
|
6
|
+
CONFIG_CLIENT_ID_KEY = "client_id"
|
|
7
|
+
CONFIG_CLIENT_SECRET_KEY = "client_secret"
|
|
8
|
+
CONFIG_TOKEN_URL_KEY = "token_url"
|
|
9
|
+
CONFIG_SCOPE_KEY = "scope"
|
|
10
|
+
CONFIG_AUDIENCE_KEY = "audience"
|
|
11
|
+
CONFIG_GRANT_TYPE_KEY = "grant_type"
|
|
12
|
+
CONFIG_TIMEOUT_KEY = "timeout"
|
|
13
|
+
CONFIG_MODULE_KEY = "module"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Fundamental types for authentication protocols."""
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AgentAuthType(Enum):
|
|
7
|
+
"""An Enum class that represents the supported authentication protocol types."""
|
|
8
|
+
|
|
9
|
+
API_KEY = "api_key"
|
|
10
|
+
OAUTH2 = "oauth2"
|
|
11
|
+
BEARER_TOKEN = "bearer_token"
|
|
12
|
+
CUSTOM = "custom"
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Utilities for agent authentication and secret validation."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
from typing import Any, Dict
|
|
5
|
+
|
|
6
|
+
from rasa.exceptions import ValidationError
|
|
7
|
+
from rasa.shared.agents.auth.constants import (
|
|
8
|
+
CONFIG_API_KEY_KEY,
|
|
9
|
+
CONFIG_CLIENT_SECRET_KEY,
|
|
10
|
+
CONFIG_OAUTH_KEY,
|
|
11
|
+
CONFIG_TOKEN_KEY,
|
|
12
|
+
)
|
|
13
|
+
from rasa.shared.constants import SECRET_DATA_FORMAT_PATTERN
|
|
14
|
+
|
|
15
|
+
AUTH_SECRETS = [CONFIG_API_KEY_KEY, CONFIG_TOKEN_KEY, CONFIG_CLIENT_SECRET_KEY]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _is_valid_secret_data_format(value: str) -> bool:
|
|
19
|
+
"""Check if a value is in the correct environment variable format.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
value: The value to check
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
True if the value is in format "${env_var}", False otherwise
|
|
26
|
+
"""
|
|
27
|
+
if not isinstance(value, str):
|
|
28
|
+
return False
|
|
29
|
+
|
|
30
|
+
# Use the common regex pattern for environment variable validation
|
|
31
|
+
return bool(re.match(SECRET_DATA_FORMAT_PATTERN, value))
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _validate_secret_value(value: Any, key: str, context: str) -> None:
|
|
35
|
+
"""Generic function to validate a single secret value.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
value: The value to validate
|
|
39
|
+
key: The key name for error messages
|
|
40
|
+
context: Context for error messages
|
|
41
|
+
(e.g., "agent 'my_agent'", "MCP server 'my_server'")
|
|
42
|
+
"""
|
|
43
|
+
if isinstance(value, str):
|
|
44
|
+
if not _is_valid_secret_data_format(value):
|
|
45
|
+
raise ValidationError(
|
|
46
|
+
code="validation.sensitive_key_string_value_must_be_set_as_env_var",
|
|
47
|
+
event_info=(
|
|
48
|
+
f"You defined the '{key}' in {context} as a string. The '{key}' "
|
|
49
|
+
f"must be set as an environment variable. Please update your "
|
|
50
|
+
f"config."
|
|
51
|
+
),
|
|
52
|
+
key=key,
|
|
53
|
+
)
|
|
54
|
+
else:
|
|
55
|
+
raise ValidationError(
|
|
56
|
+
code="validation.sensitive_key_must_be_set_as_env_var",
|
|
57
|
+
event_info=(
|
|
58
|
+
f"You should define the '{key}' in {context} using the environment "
|
|
59
|
+
f"variable syntax - ${{ENV_VARIABLE_NAME}}. Please update your config."
|
|
60
|
+
),
|
|
61
|
+
key=key,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def validate_secrets_in_params(
|
|
66
|
+
params: Dict[str, Any], context_name: str = "configuration"
|
|
67
|
+
) -> None:
|
|
68
|
+
"""Validate that secrets in params are in environment variable format.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
params: The parameters dictionary to validate
|
|
72
|
+
context_name: Name of the context for error messages
|
|
73
|
+
(e.g., "agent", "MCP server")
|
|
74
|
+
"""
|
|
75
|
+
for key, value in params.items():
|
|
76
|
+
if key in AUTH_SECRETS:
|
|
77
|
+
_validate_secret_value(value, key, context_name)
|
|
78
|
+
elif key == CONFIG_OAUTH_KEY and isinstance(value, dict):
|
|
79
|
+
# Handle oauth object specifically - we know it contains client_secret
|
|
80
|
+
if CONFIG_CLIENT_SECRET_KEY in value:
|
|
81
|
+
_validate_secret_value(
|
|
82
|
+
value[CONFIG_CLIENT_SECRET_KEY],
|
|
83
|
+
CONFIG_CLIENT_SECRET_KEY,
|
|
84
|
+
context_name,
|
|
85
|
+
)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from rasa.agents.core.types import AgentIdentifier, ProtocolType
|
|
4
|
+
from rasa.core.available_agents import AgentConfig, ProtocolConfig
|
|
5
|
+
from rasa.shared.core.flows.steps import CallFlowStep
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def make_agent_identifier(
|
|
9
|
+
agent_name: str, protocol_type: ProtocolType
|
|
10
|
+
) -> AgentIdentifier:
|
|
11
|
+
"""Make an agent identifier."""
|
|
12
|
+
return AgentIdentifier(agent_name, protocol_type)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_protocol_type(
|
|
16
|
+
step: CallFlowStep, agent_config: Optional[AgentConfig]
|
|
17
|
+
) -> ProtocolType:
|
|
18
|
+
"""Get the protocol type for an agent.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
step: The step that is calling the agent.
|
|
22
|
+
agent_config: The agent configuration.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
The protocol type for the agent.
|
|
26
|
+
"""
|
|
27
|
+
if step.exit_if:
|
|
28
|
+
protocol_type = ProtocolType.MCP_TASK
|
|
29
|
+
else:
|
|
30
|
+
protocol_type = (
|
|
31
|
+
ProtocolType.A2A
|
|
32
|
+
if agent_config and agent_config.agent.protocol == ProtocolConfig.A2A
|
|
33
|
+
else ProtocolType.MCP_OPEN
|
|
34
|
+
)
|
|
35
|
+
return protocol_type
|
rasa/shared/constants.py
CHANGED
|
@@ -249,6 +249,9 @@ _VALIDATE_ENVIRONMENT_MISSING_KEYS_KEY = "missing_keys"
|
|
|
249
249
|
LLM_API_HEALTH_CHECK_ENV_VAR = "LLM_API_HEALTH_CHECK"
|
|
250
250
|
LLM_API_HEALTH_CHECK_DEFAULT_VALUE = "false"
|
|
251
251
|
|
|
252
|
+
MCP_API_HEALTH_CHECK_ENV_VAR = "MCP_API_HEALTH_CHECK"
|
|
253
|
+
MCP_API_HEALTH_CHECK_DEFAULT_VALUE = "false"
|
|
254
|
+
|
|
252
255
|
AWS_REGION_NAME_CONFIG_KEY = "aws_region_name"
|
|
253
256
|
AWS_ACCESS_KEY_ID_CONFIG_KEY = "aws_access_key_id"
|
|
254
257
|
AWS_SECRET_ACCESS_KEY_CONFIG_KEY = "aws_secret_access_key"
|
|
@@ -345,6 +348,8 @@ PAYLOAD = "payload"
|
|
|
345
348
|
# Used for LLM command generation
|
|
346
349
|
ROLE_USER = "user"
|
|
347
350
|
ROLE_SYSTEM = "system"
|
|
351
|
+
ROLE_ASSISTANT = "assistant"
|
|
352
|
+
ROLE_TOOL = "tool"
|
|
348
353
|
|
|
349
354
|
# Used for key values in ValidateSlotPatternFlowStackFrame
|
|
350
355
|
REFILL_UTTER = "refill_utter"
|
|
@@ -359,3 +364,9 @@ FAQ_INPUT_DATA_QUESTION_LINE_PREFIX = "Q:"
|
|
|
359
364
|
FAQ_INPUT_DATA_ANSWER_LINE_PREFIX = "A:"
|
|
360
365
|
FAQ_DOCUMENT_ENTRY_SEPARATOR = "\n\n"
|
|
361
366
|
FAQ_DOCUMENT_LINE_SEPARATOR = "\n"
|
|
367
|
+
|
|
368
|
+
# Constants for the MCP server
|
|
369
|
+
KEY_TOOL_CALLS = "tool_calls"
|
|
370
|
+
|
|
371
|
+
# Regex pattern for secrets data validation
|
|
372
|
+
SECRET_DATA_FORMAT_PATTERN = r"\${(\w+)}"
|
rasa/shared/core/constants.py
CHANGED
|
@@ -30,6 +30,7 @@ LOOP_NAME = "name"
|
|
|
30
30
|
ACTION_LISTEN_NAME = "action_listen"
|
|
31
31
|
ACTION_RESTART_NAME = "action_restart"
|
|
32
32
|
ACTION_SEND_TEXT_NAME = "action_send_text"
|
|
33
|
+
ACTION_AGENT_REQUEST_USER_INPUT_NAME = "action_agent_request_user_input"
|
|
33
34
|
ACTION_SESSION_START_NAME = "action_session_start"
|
|
34
35
|
ACTION_DEFAULT_FALLBACK_NAME = "action_default_fallback"
|
|
35
36
|
ACTION_DEACTIVATE_LOOP_NAME = "action_deactivate_loop"
|
|
@@ -53,9 +54,17 @@ ACTION_RESET_ROUTING = "action_reset_routing"
|
|
|
53
54
|
ACTION_HANGUP = "action_hangup"
|
|
54
55
|
ACTION_REPEAT_BOT_MESSAGES = "action_repeat_bot_messages"
|
|
55
56
|
|
|
57
|
+
# pattern continue interrupted flows
|
|
58
|
+
ACTION_CONTINUE_INTERRUPTED_FLOW = "action_continue_interrupted_flow"
|
|
59
|
+
ACTION_CANCEL_INTERRUPTED_FLOWS = "action_cancel_interrupted_flows"
|
|
60
|
+
|
|
61
|
+
|
|
56
62
|
ACTION_METADATA_EXECUTION_SUCCESS = "execution_success"
|
|
57
63
|
ACTION_METADATA_EXECUTION_ERROR_MESSAGE = "execution_error_message"
|
|
64
|
+
ACTION_METADATA_EXECUTION_TIME = "execution_times"
|
|
58
65
|
|
|
66
|
+
ACTION_METADATA_MESSAGE_KEY = "message"
|
|
67
|
+
ACTION_METADATA_TEXT_KEY = "text"
|
|
59
68
|
|
|
60
69
|
DEFAULT_ACTION_NAMES = [
|
|
61
70
|
ACTION_LISTEN_NAME,
|
|
@@ -70,6 +79,7 @@ DEFAULT_ACTION_NAMES = [
|
|
|
70
79
|
ACTION_UNLIKELY_INTENT_NAME,
|
|
71
80
|
ACTION_BACK_NAME,
|
|
72
81
|
ACTION_SEND_TEXT_NAME,
|
|
82
|
+
ACTION_AGENT_REQUEST_USER_INPUT_NAME,
|
|
73
83
|
RULE_SNIPPET_ACTION_NAME,
|
|
74
84
|
ACTION_EXTRACT_SLOTS,
|
|
75
85
|
ACTION_CANCEL_FLOW,
|
|
@@ -82,6 +92,8 @@ DEFAULT_ACTION_NAMES = [
|
|
|
82
92
|
ACTION_RESET_ROUTING,
|
|
83
93
|
ACTION_HANGUP,
|
|
84
94
|
ACTION_REPEAT_BOT_MESSAGES,
|
|
95
|
+
ACTION_CONTINUE_INTERRUPTED_FLOW,
|
|
96
|
+
ACTION_CANCEL_INTERRUPTED_FLOWS,
|
|
85
97
|
]
|
|
86
98
|
|
|
87
99
|
ACTION_SHOULD_SEND_DOMAIN = "send_domain"
|
|
@@ -114,10 +126,11 @@ FLOW_SLOT_NAMES = [FLOW_HASHES_SLOT]
|
|
|
114
126
|
|
|
115
127
|
# slots for audio timeout
|
|
116
128
|
GLOBAL_SILENCE_TIMEOUT_KEY = "global_silence_timeout"
|
|
129
|
+
SILENCE_TIMEOUT_CHANNEL_KEY = "silence_timeout"
|
|
117
130
|
SILENCE_TIMEOUT_SLOT = "silence_timeout"
|
|
118
131
|
SLOT_CONSECUTIVE_SILENCE_TIMEOUTS = "consecutive_silence_timeouts"
|
|
119
132
|
GLOBAL_SILENCE_TIMEOUT_DEFAULT_VALUE = 7.0
|
|
120
|
-
SILENCE_SLOTS =
|
|
133
|
+
SILENCE_SLOTS = {SILENCE_TIMEOUT_SLOT, SLOT_CONSECUTIVE_SILENCE_TIMEOUTS}
|
|
121
134
|
# slots for knowledge base
|
|
122
135
|
SLOT_LISTED_ITEMS = "knowledge_base_listed_objects"
|
|
123
136
|
SLOT_LAST_OBJECT = "knowledge_base_last_object"
|
|
@@ -136,6 +149,9 @@ DEFAULT_SLOT_NAMES = {
|
|
|
136
149
|
FLOW_HASHES_SLOT,
|
|
137
150
|
}
|
|
138
151
|
|
|
152
|
+
SLOTS_EXCLUDED_FOR_AGENT = (
|
|
153
|
+
SILENCE_SLOTS | DEFAULT_SLOT_NAMES | KNOWLEDGE_BASE_SLOT_NAMES
|
|
154
|
+
)
|
|
139
155
|
|
|
140
156
|
SLOT_MAPPINGS = "mappings"
|
|
141
157
|
MAPPING_CONDITIONS = "conditions"
|