rasa-pro 3.13.11__py3-none-any.whl → 3.14.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +213 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +889 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +228 -0
- rasa/agents/validation.py +538 -0
- rasa/api.py +23 -9
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +96 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +38 -0
- rasa/builder/copilot/copilot.py +562 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +690 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +234 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
- rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/clients.py +256 -0
- rasa/builder/guardrails/constants.py +12 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/models.py +266 -0
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +94 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +609 -0
- rasa/builder/llm_service.py +273 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +234 -0
- rasa/builder/models.py +229 -0
- rasa/builder/project_generator.py +463 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/service.py +1367 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +188 -0
- rasa/builder/validation_service.py +101 -0
- rasa/cli/arguments/data.py +9 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +78 -10
- rasa/cli/dialogue_understanding_test.py +11 -7
- rasa/cli/e2e_test.py +10 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +9 -4
- rasa/cli/interactive.py +8 -4
- rasa/cli/llm_fine_tuning.py +12 -6
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +8 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +11 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/defaults.py +1 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
- rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
- rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
- rasa/cli/project_templates/finance/actions/db.py +117 -0
- rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
- rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
- rasa/cli/project_templates/finance/config.yml +29 -0
- rasa/cli/project_templates/finance/credentials.yml +33 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
- rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
- rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
- rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
- rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
- rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
- rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
- rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
- rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
- rasa/cli/project_templates/finance/data/data.md +14 -0
- rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
- rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
- rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
- rasa/cli/project_templates/finance/db/cards.json +18 -0
- rasa/cli/project_templates/finance/db/contacts.json +10 -0
- rasa/cli/project_templates/finance/db/my_account.json +6 -0
- rasa/cli/project_templates/finance/db/transactions.json +22 -0
- rasa/cli/project_templates/finance/docs/docs.md +8 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
- rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
- rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
- rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
- rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
- rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
- rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
- rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
- rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
- rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
- rasa/cli/project_templates/finance/domain/domain.md +18 -0
- rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
- rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
- rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
- rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
- rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
- rasa/cli/project_templates/finance/endpoints.yml +67 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +8 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +13 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +8 -10
- rasa/cli/scaffold.py +50 -6
- rasa/cli/shell.py +10 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +44 -30
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +232 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +53 -13
- rasa/core/actions/action_exceptions.py +1 -1
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +9 -2
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +22 -2
- rasa/core/available_agents.py +239 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +56 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +29 -16
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +56 -12
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +55 -1
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +82 -32
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +11 -6
- rasa/core/channels/voice_stream/browser_audio.py +91 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +19 -15
- rasa/core/channels/voice_stream/jambonz.py +22 -12
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +170 -32
- rasa/core/concurrent_lock_store.py +83 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
- rasa/core/config/configuration.py +295 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +17 -0
- rasa/core/exceptions.py +1 -1
- rasa/core/featurizers/tracker_featurizers.py +3 -2
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
- rasa/core/lock_store.py +50 -10
- rasa/core/nlg/contextual_response_rephraser.py +5 -0
- rasa/core/nlg/generator.py +1 -1
- rasa/core/persistor.py +7 -7
- rasa/core/policies/enterprise_search_policy.py +9 -10
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +720 -0
- rasa/core/policies/flows/flow_exceptions.py +5 -2
- rasa/core/policies/flows/flow_executor.py +146 -77
- rasa/core/policies/flows/mcp_tool_executor.py +304 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/rule_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +100 -44
- rasa/core/redis_connection_factory.py +474 -0
- rasa/core/run.py +49 -10
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +36 -14
- rasa/core/tracker_stores/sql_tracker_store.py +59 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
- rasa/dialogue_understanding/commands/utils.py +135 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +25 -8
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +2 -2
- rasa/model_manager/socket_bridge.py +21 -17
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_config.py +1 -1
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
- rasa/shared/agents/auth/constants.py +13 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/auth/utils.py +85 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +11 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +62 -22
- rasa/shared/core/events.py +329 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +57 -6
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +19 -10
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
- rasa/shared/exceptions.py +39 -2
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +86 -4
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +26 -1
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +92 -19
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +250 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/download.py +3 -0
- rasa/studio/prompts.py +1 -0
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +19 -52
- rasa/telemetry.py +166 -28
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/licensing.py +21 -10
- rasa/utils/log_utils.py +121 -7
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/utils/pypred.py +45 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +149 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dist-info/METADATA +212 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +583 -271
- rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
- rasa_pro-3.13.11.dist-info/METADATA +0 -192
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
rasa/studio/pull/pull.py
CHANGED
|
@@ -8,6 +8,7 @@ import structlog
|
|
|
8
8
|
|
|
9
9
|
import rasa.cli.utils
|
|
10
10
|
import rasa.shared.utils.cli
|
|
11
|
+
from rasa.cli.validation.config_path_validation import get_validated_path
|
|
11
12
|
from rasa.shared.constants import (
|
|
12
13
|
DEFAULT_CONFIG_PATH,
|
|
13
14
|
DEFAULT_DATA_PATH,
|
|
@@ -140,7 +141,7 @@ def _prepare_data_and_domain_paths(args: argparse.Namespace) -> Tuple[Path, Path
|
|
|
140
141
|
A tuple containing the domain path and a data path.
|
|
141
142
|
"""
|
|
142
143
|
# Prepare domain path.
|
|
143
|
-
domain_path =
|
|
144
|
+
domain_path = get_validated_path(
|
|
144
145
|
args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
|
|
145
146
|
)
|
|
146
147
|
domain_or_default_path = args.domain or DEFAULT_DOMAIN_PATH
|
|
@@ -152,7 +153,7 @@ def _prepare_data_and_domain_paths(args: argparse.Namespace) -> Tuple[Path, Path
|
|
|
152
153
|
if isinstance(domain_path, str):
|
|
153
154
|
domain_path = Path(domain_path)
|
|
154
155
|
|
|
155
|
-
data_path =
|
|
156
|
+
data_path = get_validated_path(
|
|
156
157
|
args.data, "data", DEFAULT_DATA_PATH, none_is_valid=True
|
|
157
158
|
)
|
|
158
159
|
|
rasa/studio/train.py
CHANGED
|
@@ -4,13 +4,15 @@ import sys
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Any, List, Optional
|
|
6
6
|
|
|
7
|
-
import rasa.cli.utils
|
|
8
|
-
import rasa.shared.utils.cli
|
|
9
7
|
from rasa.cli.train import (
|
|
10
8
|
_model_for_finetuning,
|
|
11
9
|
extract_core_additional_arguments,
|
|
12
10
|
extract_nlu_additional_arguments,
|
|
13
11
|
)
|
|
12
|
+
from rasa.cli.validation.config_path_validation import (
|
|
13
|
+
get_validated_config,
|
|
14
|
+
get_validated_path,
|
|
15
|
+
)
|
|
14
16
|
from rasa.shared.constants import (
|
|
15
17
|
CONFIG_MANDATORY_KEYS,
|
|
16
18
|
DEFAULT_DATA_PATH,
|
|
@@ -41,10 +43,10 @@ def handle_train(args: argparse.Namespace) -> Optional[str]:
|
|
|
41
43
|
else:
|
|
42
44
|
handler.request_all_data()
|
|
43
45
|
|
|
44
|
-
domain =
|
|
46
|
+
domain = get_validated_path(
|
|
45
47
|
args.domain, "domain", DEFAULT_DOMAIN_PATH, none_is_valid=True
|
|
46
48
|
)
|
|
47
|
-
config =
|
|
49
|
+
config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
|
|
48
50
|
data_form_studio, data_original = import_data_from_studio(
|
|
49
51
|
handler, domain, args.data
|
|
50
52
|
)
|
|
@@ -58,9 +60,7 @@ def handle_train(args: argparse.Namespace) -> Optional[str]:
|
|
|
58
60
|
)
|
|
59
61
|
|
|
60
62
|
training_files = [
|
|
61
|
-
|
|
62
|
-
f, "data", DEFAULT_DATA_PATH, none_is_valid=True
|
|
63
|
-
)
|
|
63
|
+
get_validated_path(f, "data", DEFAULT_DATA_PATH, none_is_valid=True)
|
|
64
64
|
for f in args.data
|
|
65
65
|
]
|
|
66
66
|
training_files.extend(studio_training_files)
|
|
@@ -68,6 +68,7 @@ def handle_train(args: argparse.Namespace) -> Optional[str]:
|
|
|
68
68
|
training_result = train_all(
|
|
69
69
|
domain=str(domain_file),
|
|
70
70
|
config=config,
|
|
71
|
+
endpoints=args.endpoints,
|
|
71
72
|
training_files=args.data,
|
|
72
73
|
output=args.out,
|
|
73
74
|
dry_run=args.dry_run,
|
rasa/studio/upload.py
CHANGED
|
@@ -7,12 +7,12 @@ from typing import Any, Dict, Iterable, List, Optional, Set, Text, Tuple, Union
|
|
|
7
7
|
import questionary
|
|
8
8
|
import requests
|
|
9
9
|
import structlog
|
|
10
|
-
from pydantic import BaseModel, Field
|
|
11
10
|
|
|
12
11
|
import rasa.cli.telemetry
|
|
13
12
|
import rasa.cli.utils
|
|
14
13
|
import rasa.shared.utils.cli
|
|
15
14
|
import rasa.shared.utils.io
|
|
15
|
+
from rasa.cli.validation.config_path_validation import get_validated_path
|
|
16
16
|
from rasa.shared.constants import (
|
|
17
17
|
CONFIG_LANGUAGE_KEY,
|
|
18
18
|
CONFIG_LLM_KEY,
|
|
@@ -24,9 +24,13 @@ from rasa.shared.constants import (
|
|
|
24
24
|
DEFAULT_DOMAIN_PATHS,
|
|
25
25
|
)
|
|
26
26
|
from rasa.shared.core.domain import Domain
|
|
27
|
-
from rasa.shared.core.flows.yaml_flows_io import YAMLFlowsReader
|
|
27
|
+
from rasa.shared.core.flows.yaml_flows_io import YAMLFlowsReader
|
|
28
28
|
from rasa.shared.exceptions import RasaException
|
|
29
|
-
from rasa.shared.importers.importer import
|
|
29
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
30
|
+
from rasa.shared.importers.utils import (
|
|
31
|
+
CALMUserData,
|
|
32
|
+
extract_calm_import_parts_from_importer,
|
|
33
|
+
)
|
|
30
34
|
from rasa.shared.nlu.training_data.formats.rasa_yaml import (
|
|
31
35
|
RasaYAMLReader,
|
|
32
36
|
RasaYAMLWriter,
|
|
@@ -34,7 +38,6 @@ from rasa.shared.nlu.training_data.formats.rasa_yaml import (
|
|
|
34
38
|
from rasa.shared.utils.llm import collect_custom_prompts
|
|
35
39
|
from rasa.shared.utils.yaml import (
|
|
36
40
|
dump_obj_as_yaml_to_string,
|
|
37
|
-
read_yaml,
|
|
38
41
|
read_yaml_file,
|
|
39
42
|
)
|
|
40
43
|
from rasa.studio import results_logger
|
|
@@ -43,6 +46,7 @@ from rasa.studio.config import StudioConfig
|
|
|
43
46
|
from rasa.studio.results_logger import StudioResult, with_studio_error_handler
|
|
44
47
|
from rasa.studio.utils import validate_argument_paths
|
|
45
48
|
from rasa.telemetry import track_upload_to_studio_failed
|
|
49
|
+
from rasa.utils.json_utils import extract_values
|
|
46
50
|
|
|
47
51
|
structlogger = structlog.get_logger()
|
|
48
52
|
|
|
@@ -68,16 +72,6 @@ DOMAIN_KEYS = [
|
|
|
68
72
|
]
|
|
69
73
|
|
|
70
74
|
|
|
71
|
-
class CALMImportParts(BaseModel):
|
|
72
|
-
"""All pieces that will be uploaded to Rasa Studio."""
|
|
73
|
-
|
|
74
|
-
flows: Dict[str, Any]
|
|
75
|
-
domain: Dict[str, Any]
|
|
76
|
-
config: Dict[str, Any]
|
|
77
|
-
endpoints: Dict[str, Any]
|
|
78
|
-
nlu: Dict[str, Any] = Field(default_factory=dict)
|
|
79
|
-
|
|
80
|
-
|
|
81
75
|
def _get_selected_entities_and_intents(
|
|
82
76
|
args: argparse.Namespace,
|
|
83
77
|
intents_from_files: Set[Text],
|
|
@@ -160,15 +154,15 @@ def handle_upload(args: argparse.Namespace) -> None:
|
|
|
160
154
|
"Authentication is invalid or expired. Please run `rasa studio login`."
|
|
161
155
|
)
|
|
162
156
|
|
|
157
|
+
from rasa.core.config.configuration import Configuration
|
|
158
|
+
|
|
159
|
+
Configuration.initialise_empty()
|
|
160
|
+
|
|
163
161
|
structlogger.info("rasa.studio.upload.loading_data", event_info="Loading data...")
|
|
164
162
|
|
|
165
|
-
args.domain =
|
|
166
|
-
args.domain, "domain", DEFAULT_DOMAIN_PATHS
|
|
167
|
-
)
|
|
163
|
+
args.domain = get_validated_path(args.domain, "domain", DEFAULT_DOMAIN_PATHS)
|
|
168
164
|
|
|
169
|
-
args.config =
|
|
170
|
-
args.config, "config", DEFAULT_CONFIG_PATH
|
|
171
|
-
)
|
|
165
|
+
args.config = get_validated_path(args.config, "config", DEFAULT_CONFIG_PATH)
|
|
172
166
|
|
|
173
167
|
config = read_yaml_file(args.config, expand_env_vars=False)
|
|
174
168
|
assistant_name = args.assistant_name or _get_assistant_name(config)
|
|
@@ -195,11 +189,6 @@ config_keys = [
|
|
|
195
189
|
]
|
|
196
190
|
|
|
197
191
|
|
|
198
|
-
def extract_values(data: Dict, keys: List[Text]) -> Dict:
|
|
199
|
-
"""Extracts values for given keys from a dictionary."""
|
|
200
|
-
return {key: data.get(key) for key in keys if data.get(key)}
|
|
201
|
-
|
|
202
|
-
|
|
203
192
|
def _get_assistant_name(config: Dict[Text, Any]) -> str:
|
|
204
193
|
config_assistant_id = config.get("assistant_id", "")
|
|
205
194
|
assistant_name = questionary.text(
|
|
@@ -238,7 +227,7 @@ def build_calm_import_parts(
|
|
|
238
227
|
config_path: Text,
|
|
239
228
|
endpoints_path: Optional[Text] = None,
|
|
240
229
|
assistant_name: Optional[Text] = None,
|
|
241
|
-
) -> Tuple[str,
|
|
230
|
+
) -> Tuple[str, CALMUserData]:
|
|
242
231
|
"""Builds the parts of the assistant to be uploaded to Studio.
|
|
243
232
|
|
|
244
233
|
Args:
|
|
@@ -251,9 +240,11 @@ def build_calm_import_parts(
|
|
|
251
240
|
Returns:
|
|
252
241
|
The assistant name and the parts to be uploaded
|
|
253
242
|
"""
|
|
243
|
+
training_data_paths = data_path if isinstance(data_path, list) else [str(data_path)]
|
|
254
244
|
importer = TrainingDataImporter.load_from_dict(
|
|
255
245
|
domain_path=domain_path,
|
|
256
246
|
config_path=config_path,
|
|
247
|
+
training_data_paths=training_data_paths,
|
|
257
248
|
expand_env_vars=False,
|
|
258
249
|
)
|
|
259
250
|
|
|
@@ -261,34 +252,10 @@ def build_calm_import_parts(
|
|
|
261
252
|
endpoints = read_yaml_file(endpoints_path, expand_env_vars=False)
|
|
262
253
|
assistant_name = assistant_name or _get_assistant_name(config)
|
|
263
254
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
training_data_paths = data_path if isinstance(data_path, list) else [str(data_path)]
|
|
268
|
-
flow_importer = FlowSyncImporter.load_from_dict(
|
|
269
|
-
training_data_paths=training_data_paths, expand_env_vars=False
|
|
270
|
-
)
|
|
271
|
-
|
|
272
|
-
flows = list(flow_importer.get_user_flows())
|
|
273
|
-
flows_yaml = YamlFlowsWriter().dumps(flows)
|
|
274
|
-
flows = read_yaml(flows_yaml, expand_env_vars=False)
|
|
275
|
-
|
|
276
|
-
nlu_importer = TrainingDataImporter.load_from_dict(
|
|
277
|
-
training_data_paths=training_data_paths, expand_env_vars=False
|
|
278
|
-
)
|
|
279
|
-
nlu_data = nlu_importer.get_nlu_data()
|
|
280
|
-
nlu_examples = nlu_data.filter_training_examples(
|
|
281
|
-
lambda ex: ex.get("intent") in nlu_data.intents
|
|
282
|
-
)
|
|
283
|
-
nlu_examples_yaml = RasaYAMLWriter().dumps(nlu_examples)
|
|
284
|
-
nlu = read_yaml(nlu_examples_yaml, expand_env_vars=False)
|
|
285
|
-
|
|
286
|
-
parts = CALMImportParts(
|
|
287
|
-
flows=flows,
|
|
288
|
-
domain=domain,
|
|
255
|
+
parts = extract_calm_import_parts_from_importer(
|
|
256
|
+
importer=importer,
|
|
289
257
|
config=config,
|
|
290
258
|
endpoints=endpoints,
|
|
291
|
-
nlu=nlu,
|
|
292
259
|
)
|
|
293
260
|
|
|
294
261
|
return assistant_name, parts
|
rasa/telemetry.py
CHANGED
|
@@ -3,7 +3,6 @@ import contextlib
|
|
|
3
3
|
import hashlib
|
|
4
4
|
import inspect
|
|
5
5
|
import json
|
|
6
|
-
import logging
|
|
7
6
|
import multiprocessing
|
|
8
7
|
import os
|
|
9
8
|
import platform
|
|
@@ -32,7 +31,6 @@ from rasa.constants import (
|
|
|
32
31
|
CONFIG_TELEMETRY_ENABLED,
|
|
33
32
|
CONFIG_TELEMETRY_ID,
|
|
34
33
|
)
|
|
35
|
-
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
36
34
|
from rasa.privacy.privacy_config import AnonymizationType, PrivacyConfig
|
|
37
35
|
from rasa.shared.constants import (
|
|
38
36
|
ASSISTANT_ID_KEY,
|
|
@@ -51,6 +49,7 @@ from rasa.shared.constants import (
|
|
|
51
49
|
UTTER_ASK_PREFIX,
|
|
52
50
|
)
|
|
53
51
|
from rasa.shared.core.flows import Flow
|
|
52
|
+
from rasa.shared.core.flows.flows_list import FlowsList
|
|
54
53
|
from rasa.shared.core.flows.steps import (
|
|
55
54
|
CallFlowStep,
|
|
56
55
|
CollectInformationFlowStep,
|
|
@@ -62,15 +61,15 @@ from rasa.utils import common as rasa_utils
|
|
|
62
61
|
|
|
63
62
|
if typing.TYPE_CHECKING:
|
|
64
63
|
from rasa.core.agent import Agent
|
|
65
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
66
64
|
from rasa.core.brokers.broker import EventBroker
|
|
67
65
|
from rasa.core.channels.channel import InputChannel
|
|
66
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
68
67
|
from rasa.core.tracker_stores.tracker_store import TrackerStore
|
|
69
68
|
from rasa.e2e_test.e2e_test_case import Fixture, Metadata, TestCase
|
|
70
69
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
71
70
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
72
71
|
|
|
73
|
-
|
|
72
|
+
structlogger = structlog.get_logger()
|
|
74
73
|
|
|
75
74
|
SEGMENT_TRACK_ENDPOINT = "https://api.segment.io/v1/track"
|
|
76
75
|
SEGMENT_IDENTIFY_ENDPOINT = "https://api.segment.io/v1/identify"
|
|
@@ -197,6 +196,10 @@ TELEMETRY_E2E_TEST_CONVERSION_EVENT = "E2E Test Conversion Completed"
|
|
|
197
196
|
E2E_TEST_CONVERSION_FILE_TYPE = "file_type"
|
|
198
197
|
E2E_TEST_CONVERSION_TEST_CASE_COUNT = "test_case_count"
|
|
199
198
|
|
|
199
|
+
# Copilot telemetry
|
|
200
|
+
TELEMETRY_COPILOT_USER_MESSAGE_EVENT = "copilot_user_message"
|
|
201
|
+
TELEMETRY_COPILOT_BOT_MESSAGE_EVENT = "copilot_bot_message"
|
|
202
|
+
|
|
200
203
|
|
|
201
204
|
def print_telemetry_reporting_info() -> None:
|
|
202
205
|
"""Print telemetry information to std out."""
|
|
@@ -255,7 +258,11 @@ def _is_telemetry_enabled_in_configuration() -> bool:
|
|
|
255
258
|
|
|
256
259
|
return stored_config[CONFIG_TELEMETRY_ENABLED]
|
|
257
260
|
except ValueError as e:
|
|
258
|
-
|
|
261
|
+
structlogger.debug(
|
|
262
|
+
"telemetry.is_telemetry_enabled_in_configuration.error",
|
|
263
|
+
error=str(e),
|
|
264
|
+
event_info="Could not read telemetry settings from configuration file",
|
|
265
|
+
)
|
|
259
266
|
|
|
260
267
|
# seems like there is no config, we'll create one and enable telemetry
|
|
261
268
|
success = _write_default_telemetry_configuration()
|
|
@@ -272,7 +279,10 @@ def is_telemetry_enabled() -> bool:
|
|
|
272
279
|
from rasa.utils import licensing
|
|
273
280
|
|
|
274
281
|
if licensing.is_champion_server_license():
|
|
275
|
-
|
|
282
|
+
structlogger.debug(
|
|
283
|
+
"telemetry.enabled.developer_license",
|
|
284
|
+
event_info="Telemetry is enabled for developer licenses.",
|
|
285
|
+
)
|
|
276
286
|
return True
|
|
277
287
|
|
|
278
288
|
telemetry_environ = os.environ.get(TELEMETRY_ENABLED_ENVIRONMENT_VARIABLE)
|
|
@@ -308,9 +318,13 @@ def initialize_telemetry() -> bool:
|
|
|
308
318
|
|
|
309
319
|
return telemetry_environ.lower() == "true"
|
|
310
320
|
except Exception as e: # skipcq:PYL-W0703
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
321
|
+
structlogger.exception(
|
|
322
|
+
"telemetry.initialize_telemetry.error",
|
|
323
|
+
error=str(e),
|
|
324
|
+
event_info=(
|
|
325
|
+
"Failed to initialize telemetry reporting. "
|
|
326
|
+
"Telemetry reporting will be disabled."
|
|
327
|
+
),
|
|
314
328
|
)
|
|
315
329
|
return False
|
|
316
330
|
|
|
@@ -481,7 +495,10 @@ def print_telemetry_payload(payload: Dict[Text, Any]) -> None:
|
|
|
481
495
|
payload: payload to be delivered to segment.
|
|
482
496
|
"""
|
|
483
497
|
payload_json = json.dumps(payload, indent=2)
|
|
484
|
-
|
|
498
|
+
structlogger.debug(
|
|
499
|
+
"telemetry.print_telemetry_payload.debug",
|
|
500
|
+
event_info=f"Telemetry payload: {payload_json}",
|
|
501
|
+
)
|
|
485
502
|
|
|
486
503
|
|
|
487
504
|
def _get_telemetry_write_key() -> Optional[Text]:
|
|
@@ -535,10 +552,24 @@ def _send_request(url: Text, payload: Dict[Text, Any]) -> None:
|
|
|
535
552
|
if not write_key:
|
|
536
553
|
# If RASA_TELEMETRY_WRITE_KEY is empty or `None`, telemetry has not
|
|
537
554
|
# been enabled for this build (e.g. because it is running from source)
|
|
538
|
-
|
|
555
|
+
structlogger.debug(
|
|
556
|
+
"telemetry.send_request.no_telemetry_key",
|
|
557
|
+
event_info="Skipping request to external service: telemetry key not set.",
|
|
558
|
+
)
|
|
539
559
|
return
|
|
540
560
|
|
|
541
|
-
|
|
561
|
+
send_segment_request(url, payload, write_key)
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
def send_segment_request(url: Text, payload: Dict[Text, Any], write_key: Text) -> None:
|
|
565
|
+
"""Send a request to the Segment API.
|
|
566
|
+
|
|
567
|
+
Args:
|
|
568
|
+
url: URL of the Segment API endpoint
|
|
569
|
+
payload: payload to send to the Segment API
|
|
570
|
+
write_key: write key for the Segment API
|
|
571
|
+
"""
|
|
572
|
+
headers = segment_request_header(write_key)
|
|
542
573
|
|
|
543
574
|
resp = requests.post(
|
|
544
575
|
url=url,
|
|
@@ -548,15 +579,22 @@ def _send_request(url: Text, payload: Dict[Text, Any]) -> None:
|
|
|
548
579
|
)
|
|
549
580
|
# handle different failure cases
|
|
550
581
|
if resp.status_code != 200:
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
582
|
+
structlogger.debug(
|
|
583
|
+
"telemetry.send_segment_request.error_response",
|
|
584
|
+
event_info=(
|
|
585
|
+
f"Segment telemetry request returned a {resp.status_code} "
|
|
586
|
+
f"response. Body: {resp.text}"
|
|
587
|
+
),
|
|
554
588
|
)
|
|
555
589
|
else:
|
|
556
590
|
data = resp.json()
|
|
557
591
|
if not data.get("success"):
|
|
558
|
-
|
|
559
|
-
|
|
592
|
+
structlogger.debug(
|
|
593
|
+
"telemetry.send_segment_request.failure",
|
|
594
|
+
event_info=(
|
|
595
|
+
f"Segment telemetry request returned a failure. "
|
|
596
|
+
f"Response: {data}"
|
|
597
|
+
),
|
|
560
598
|
)
|
|
561
599
|
|
|
562
600
|
|
|
@@ -609,6 +647,15 @@ def with_default_context_fields(
|
|
|
609
647
|
return {**_default_context_fields(), **context}
|
|
610
648
|
|
|
611
649
|
|
|
650
|
+
def get_deployment_stack() -> Text:
|
|
651
|
+
"""Return the deployment stack.
|
|
652
|
+
|
|
653
|
+
Returns:
|
|
654
|
+
The deployment stack.
|
|
655
|
+
"""
|
|
656
|
+
return os.environ.get("DEPLOYMENT_STACK", "")
|
|
657
|
+
|
|
658
|
+
|
|
612
659
|
def _default_context_fields() -> Dict[Text, Any]:
|
|
613
660
|
"""Return a dictionary that contains the default context values.
|
|
614
661
|
|
|
@@ -632,6 +679,7 @@ def _default_context_fields() -> Dict[Text, Any]:
|
|
|
632
679
|
"cpu": multiprocessing.cpu_count(),
|
|
633
680
|
"docker": _is_docker(),
|
|
634
681
|
"license_hash": get_license_hash(),
|
|
682
|
+
"deployment_stack": get_deployment_stack(),
|
|
635
683
|
"company": property_of_active_license(
|
|
636
684
|
lambda active_license: active_license.company
|
|
637
685
|
),
|
|
@@ -663,7 +711,10 @@ def _track(
|
|
|
663
711
|
telemetry_id = get_telemetry_id()
|
|
664
712
|
|
|
665
713
|
if not telemetry_id:
|
|
666
|
-
|
|
714
|
+
structlogger.debug(
|
|
715
|
+
"telemetry.track.no_id_found",
|
|
716
|
+
event_info="Will not report telemetry events as no ID was found.",
|
|
717
|
+
)
|
|
667
718
|
return
|
|
668
719
|
|
|
669
720
|
if not properties:
|
|
@@ -681,7 +732,11 @@ def _track(
|
|
|
681
732
|
with_default_context_fields(context),
|
|
682
733
|
)
|
|
683
734
|
except Exception as e: # skipcq:PYL-W0703
|
|
684
|
-
|
|
735
|
+
structlogger.debug(
|
|
736
|
+
"telemetry.track.error",
|
|
737
|
+
error=str(e),
|
|
738
|
+
event_info="Skipping telemetry reporting",
|
|
739
|
+
)
|
|
685
740
|
|
|
686
741
|
|
|
687
742
|
def _identify(
|
|
@@ -702,7 +757,10 @@ def _identify(
|
|
|
702
757
|
telemetry_id = get_telemetry_id()
|
|
703
758
|
|
|
704
759
|
if not telemetry_id:
|
|
705
|
-
|
|
760
|
+
structlogger.debug(
|
|
761
|
+
"telemetry.identify.no_id_found",
|
|
762
|
+
event_info="Will not report telemetry events as no ID was found.",
|
|
763
|
+
)
|
|
706
764
|
return
|
|
707
765
|
|
|
708
766
|
if not traits:
|
|
@@ -710,7 +768,11 @@ def _identify(
|
|
|
710
768
|
|
|
711
769
|
_send_traits(telemetry_id, traits, with_default_context_fields(context))
|
|
712
770
|
except Exception as e:
|
|
713
|
-
|
|
771
|
+
structlogger.debug(
|
|
772
|
+
"telemetry.identify.error",
|
|
773
|
+
error=str(e),
|
|
774
|
+
event_info="Skipping telemetry reporting",
|
|
775
|
+
)
|
|
714
776
|
|
|
715
777
|
|
|
716
778
|
def _send_traits(
|
|
@@ -868,13 +930,16 @@ def strip_sensitive_data_from_sentry_event(
|
|
|
868
930
|
|
|
869
931
|
|
|
870
932
|
@ensure_telemetry_enabled
|
|
871
|
-
def initialize_error_reporting() -> None:
|
|
933
|
+
def initialize_error_reporting(private_mode: bool = True) -> None:
|
|
872
934
|
"""Sets up automated error reporting.
|
|
873
935
|
|
|
874
936
|
Exceptions are reported to sentry. We avoid sending any metadata (local
|
|
875
937
|
variables, paths, ...) to make sure we don't compromise any data. Only the
|
|
876
938
|
exception and its stacktrace is logged and only if the exception origins
|
|
877
939
|
from the `rasa` package.
|
|
940
|
+
|
|
941
|
+
Args:
|
|
942
|
+
private_mode: If True, try to send as little data as possible.
|
|
878
943
|
"""
|
|
879
944
|
import sentry_sdk
|
|
880
945
|
from sentry_sdk import configure_scope
|
|
@@ -892,11 +957,18 @@ def initialize_error_reporting() -> None:
|
|
|
892
957
|
|
|
893
958
|
telemetry_id = get_telemetry_id()
|
|
894
959
|
|
|
960
|
+
# in hello rasa we use a different project, so we need to be able
|
|
961
|
+
# to set the whole url. since we can't change the behavior of sentry in pro
|
|
962
|
+
# we have two kinds of keys, full urls and jsut the key within the fixed rasa
|
|
963
|
+
# pro project.
|
|
964
|
+
if not key.startswith("https://"):
|
|
965
|
+
key = f"https://{key}.ingest.sentry.io/2801673"
|
|
966
|
+
|
|
895
967
|
# this is a very defensive configuration, avoiding as many integrations as
|
|
896
968
|
# possible. it also submits very little data (exception with error message
|
|
897
969
|
# and line numbers).
|
|
898
970
|
sentry_sdk.init(
|
|
899
|
-
|
|
971
|
+
key,
|
|
900
972
|
before_send=before_send,
|
|
901
973
|
integrations=[
|
|
902
974
|
ExcepthookIntegration(),
|
|
@@ -916,7 +988,7 @@ def initialize_error_reporting() -> None:
|
|
|
916
988
|
OSError,
|
|
917
989
|
],
|
|
918
990
|
in_app_include=["rasa"], # only submit errors in this package
|
|
919
|
-
include_local_variables=
|
|
991
|
+
include_local_variables=not private_mode,
|
|
920
992
|
release=f"rasa-{rasa.__version__}",
|
|
921
993
|
default_integrations=False,
|
|
922
994
|
environment="development" if in_continuous_integration() else "production",
|
|
@@ -937,6 +1009,7 @@ def initialize_error_reporting() -> None:
|
|
|
937
1009
|
# os is a nested dict, hence we report it separately
|
|
938
1010
|
scope.set_context("Operating System", default_context.pop("os"))
|
|
939
1011
|
scope.set_context("Environment", default_context)
|
|
1012
|
+
structlogger.debug("telemetry.sentry.initialized")
|
|
940
1013
|
|
|
941
1014
|
|
|
942
1015
|
@contextlib.contextmanager
|
|
@@ -983,7 +1056,7 @@ def track_model_training(
|
|
|
983
1056
|
"policies": config.get(CONFIG_POLICIES_KEY),
|
|
984
1057
|
"train_schema": config.get(CONFIG_TRAIN_SCHEMA),
|
|
985
1058
|
"predict_schema": config.get(CONFIG_PREDICT_SCHEMA),
|
|
986
|
-
"model_groups": rasa.core.
|
|
1059
|
+
"model_groups": rasa.core.config.configuration.Configuration.get_instance().endpoints.model_groups, # noqa: E501
|
|
987
1060
|
"api_health_check_enabled": (
|
|
988
1061
|
os.getenv(
|
|
989
1062
|
LLM_API_HEALTH_CHECK_ENV_VAR, LLM_API_HEALTH_CHECK_DEFAULT_VALUE
|
|
@@ -1010,6 +1083,7 @@ def track_model_training(
|
|
|
1010
1083
|
"num_regexes": len(nlu_data.regex_features),
|
|
1011
1084
|
"is_finetuning": is_finetuning,
|
|
1012
1085
|
"recipe": config.get(CONFIG_RECIPE_KEY),
|
|
1086
|
+
"agents": _collect_agent_configuration(flows),
|
|
1013
1087
|
}
|
|
1014
1088
|
|
|
1015
1089
|
flow_statistics = _collect_flow_statistics(flows.underlying_flows)
|
|
@@ -1052,6 +1126,67 @@ def track_model_training(
|
|
|
1052
1126
|
)
|
|
1053
1127
|
|
|
1054
1128
|
|
|
1129
|
+
def _collect_agent_configuration(flows: FlowsList) -> Dict[str, Any]:
|
|
1130
|
+
agent_data: Dict[str, Any] = {}
|
|
1131
|
+
|
|
1132
|
+
from rasa.core.config.configuration import Configuration
|
|
1133
|
+
|
|
1134
|
+
configuration = Configuration.get_instance()
|
|
1135
|
+
agents = configuration.available_agents.agents
|
|
1136
|
+
mcp_servers = configuration.endpoints.mcp_servers
|
|
1137
|
+
|
|
1138
|
+
if not agents and not mcp_servers:
|
|
1139
|
+
return agent_data
|
|
1140
|
+
|
|
1141
|
+
agent_data["usage"] = []
|
|
1142
|
+
|
|
1143
|
+
for flow in flows.underlying_flows:
|
|
1144
|
+
for step in flow.steps:
|
|
1145
|
+
if isinstance(step, CallFlowStep):
|
|
1146
|
+
if flows.flow_by_id(step.call) is not None:
|
|
1147
|
+
continue
|
|
1148
|
+
|
|
1149
|
+
if step.is_calling_mcp_tool():
|
|
1150
|
+
agent_data["usage"].append(
|
|
1151
|
+
{
|
|
1152
|
+
"flow": flow.id,
|
|
1153
|
+
"mcp_tool": step.call,
|
|
1154
|
+
"mcp_server": step.mcp_server,
|
|
1155
|
+
"mapping": step.mapping,
|
|
1156
|
+
}
|
|
1157
|
+
)
|
|
1158
|
+
|
|
1159
|
+
if step.is_calling_agent():
|
|
1160
|
+
if step.exit_if:
|
|
1161
|
+
agent_data["usage"].append(
|
|
1162
|
+
{
|
|
1163
|
+
"flow": flow.id,
|
|
1164
|
+
"agent": step.call,
|
|
1165
|
+
"exit_if": step.exit_if,
|
|
1166
|
+
}
|
|
1167
|
+
)
|
|
1168
|
+
else:
|
|
1169
|
+
agent_data["usage"].append(
|
|
1170
|
+
{
|
|
1171
|
+
"flow": flow.id,
|
|
1172
|
+
"agent": step.call,
|
|
1173
|
+
}
|
|
1174
|
+
)
|
|
1175
|
+
|
|
1176
|
+
# dump mcp_servers and agents as json and exclude any values that are None
|
|
1177
|
+
if mcp_servers:
|
|
1178
|
+
agent_data["mcp_servers"] = [
|
|
1179
|
+
mcp_server.model_dump(exclude_none=True) for mcp_server in mcp_servers
|
|
1180
|
+
]
|
|
1181
|
+
if agents:
|
|
1182
|
+
agent_data["agents"] = [
|
|
1183
|
+
{agent_name: agent_info.model_dump(exclude_none=True)}
|
|
1184
|
+
for agent_name, agent_info in agents.items()
|
|
1185
|
+
]
|
|
1186
|
+
|
|
1187
|
+
return agent_data
|
|
1188
|
+
|
|
1189
|
+
|
|
1055
1190
|
def _collect_flow_statistics(flows: List[Flow]) -> Dict[str, Any]:
|
|
1056
1191
|
"""Collects some statistics about the flows, such as number of specific steps."""
|
|
1057
1192
|
data = {
|
|
@@ -1357,7 +1492,7 @@ def track_server_start(
|
|
|
1357
1492
|
number_of_workers: number of used Sanic workers
|
|
1358
1493
|
is_api_enabled: whether the rasa API server is enabled
|
|
1359
1494
|
"""
|
|
1360
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
1495
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
1361
1496
|
|
|
1362
1497
|
def project_fingerprint_and_assistant_id_from_model(
|
|
1363
1498
|
_model_directory: Optional[Text],
|
|
@@ -1368,7 +1503,9 @@ def track_server_start(
|
|
|
1368
1503
|
|
|
1369
1504
|
try:
|
|
1370
1505
|
model_archive = model.get_local_model(_model_directory)
|
|
1371
|
-
metadata = LocalModelStorage.metadata_from_archive(
|
|
1506
|
+
metadata = rasa.engine.storage.local_model_storage.LocalModelStorage.metadata_from_archive( # noqa: E501
|
|
1507
|
+
model_archive
|
|
1508
|
+
)
|
|
1372
1509
|
|
|
1373
1510
|
return metadata.project_fingerprint, metadata.assistant_id
|
|
1374
1511
|
except Exception:
|
|
@@ -1426,6 +1563,7 @@ def track_shell_started(model_type: Text, assistant_id: Text) -> None:
|
|
|
1426
1563
|
|
|
1427
1564
|
Args:
|
|
1428
1565
|
model_type: Type of the model, core / nlu or rasa.
|
|
1566
|
+
assistant_id: ID of the assistant being inspected.
|
|
1429
1567
|
"""
|
|
1430
1568
|
_track(
|
|
1431
1569
|
TELEMETRY_SHELL_STARTED_EVENT,
|
|
@@ -1997,7 +2135,7 @@ def _extract_stream_pii(event_broker: Optional["EventBroker"]) -> bool:
|
|
|
1997
2135
|
def track_privacy_enabled(
|
|
1998
2136
|
privacy_config: "PrivacyConfig", event_broker: Optional["EventBroker"]
|
|
1999
2137
|
) -> None:
|
|
2000
|
-
"""Track when PII management capability is enabled"""
|
|
2138
|
+
"""Track when PII management capability is enabled."""
|
|
2001
2139
|
stream_pii = _extract_stream_pii(event_broker)
|
|
2002
2140
|
privacy_properties = _extract_privacy_enabled_event_properties(
|
|
2003
2141
|
privacy_config, stream_pii
|