rasa-pro 3.13.11__py3-none-any.whl → 3.14.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +213 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +889 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +228 -0
- rasa/agents/validation.py +538 -0
- rasa/api.py +23 -9
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +96 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +38 -0
- rasa/builder/copilot/copilot.py +562 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +690 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +234 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
- rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/clients.py +256 -0
- rasa/builder/guardrails/constants.py +12 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/models.py +266 -0
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +94 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +609 -0
- rasa/builder/llm_service.py +273 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +234 -0
- rasa/builder/models.py +229 -0
- rasa/builder/project_generator.py +463 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/service.py +1367 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +188 -0
- rasa/builder/validation_service.py +101 -0
- rasa/cli/arguments/data.py +9 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +78 -10
- rasa/cli/dialogue_understanding_test.py +11 -7
- rasa/cli/e2e_test.py +10 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +9 -4
- rasa/cli/interactive.py +8 -4
- rasa/cli/llm_fine_tuning.py +12 -6
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +8 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +11 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/defaults.py +1 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
- rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
- rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
- rasa/cli/project_templates/finance/actions/db.py +117 -0
- rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
- rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
- rasa/cli/project_templates/finance/config.yml +29 -0
- rasa/cli/project_templates/finance/credentials.yml +33 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
- rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
- rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
- rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
- rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
- rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
- rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
- rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
- rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
- rasa/cli/project_templates/finance/data/data.md +14 -0
- rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/transfers/check_transfer_limit.yml +18 -0
- rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
- rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
- rasa/cli/project_templates/finance/db/cards.json +18 -0
- rasa/cli/project_templates/finance/db/contacts.json +10 -0
- rasa/cli/project_templates/finance/db/my_account.json +6 -0
- rasa/cli/project_templates/finance/db/transactions.json +22 -0
- rasa/cli/project_templates/finance/docs/docs.md +8 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
- rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
- rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
- rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
- rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
- rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
- rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
- rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
- rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
- rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
- rasa/cli/project_templates/finance/domain/domain.md +18 -0
- rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
- rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
- rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
- rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
- rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
- rasa/cli/project_templates/finance/endpoints.yml +67 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +8 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +13 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +8 -10
- rasa/cli/scaffold.py +50 -6
- rasa/cli/shell.py +10 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +44 -30
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +232 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +53 -13
- rasa/core/actions/action_exceptions.py +1 -1
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +9 -2
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +22 -2
- rasa/core/available_agents.py +239 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +56 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +29 -16
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +56 -12
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +55 -1
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +82 -32
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +11 -6
- rasa/core/channels/voice_stream/browser_audio.py +91 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +19 -15
- rasa/core/channels/voice_stream/jambonz.py +22 -12
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +170 -32
- rasa/core/concurrent_lock_store.py +83 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
- rasa/core/config/configuration.py +295 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +17 -0
- rasa/core/exceptions.py +1 -1
- rasa/core/featurizers/tracker_featurizers.py +3 -2
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
- rasa/core/lock_store.py +50 -10
- rasa/core/nlg/contextual_response_rephraser.py +5 -0
- rasa/core/nlg/generator.py +1 -1
- rasa/core/persistor.py +7 -7
- rasa/core/policies/enterprise_search_policy.py +9 -10
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +720 -0
- rasa/core/policies/flows/flow_exceptions.py +5 -2
- rasa/core/policies/flows/flow_executor.py +146 -77
- rasa/core/policies/flows/mcp_tool_executor.py +304 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/rule_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +100 -44
- rasa/core/redis_connection_factory.py +474 -0
- rasa/core/run.py +49 -10
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +36 -14
- rasa/core/tracker_stores/sql_tracker_store.py +59 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
- rasa/dialogue_understanding/commands/utils.py +135 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +25 -8
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +2 -2
- rasa/model_manager/socket_bridge.py +21 -17
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_config.py +1 -1
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
- rasa/shared/agents/auth/constants.py +13 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/auth/utils.py +85 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +11 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +62 -22
- rasa/shared/core/events.py +329 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +57 -6
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +19 -10
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
- rasa/shared/exceptions.py +39 -2
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +86 -4
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +26 -1
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +92 -19
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +250 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/download.py +3 -0
- rasa/studio/prompts.py +1 -0
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +19 -52
- rasa/telemetry.py +166 -28
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/licensing.py +21 -10
- rasa/utils/log_utils.py +121 -7
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/utils/pypred.py +45 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +149 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dist-info/METADATA +212 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +583 -271
- rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
- rasa_pro-3.13.11.dist-info/METADATA +0 -192
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.11.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from datetime import timedelta
|
|
3
|
+
from typing import Any, Dict, List, Optional
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
from jinja2.sandbox import SandboxedEnvironment
|
|
7
|
+
from mcp.types import CallToolResult
|
|
8
|
+
|
|
9
|
+
from rasa.core.config.configuration import Configuration
|
|
10
|
+
from rasa.core.policies.flows.flow_step_result import (
|
|
11
|
+
ContinueFlowWithNextStep,
|
|
12
|
+
FlowStepResult,
|
|
13
|
+
)
|
|
14
|
+
from rasa.dialogue_understanding.patterns.internal_error import (
|
|
15
|
+
InternalErrorPatternFlowStackFrame,
|
|
16
|
+
)
|
|
17
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
18
|
+
from rasa.shared.core.events import Event, SlotSet
|
|
19
|
+
from rasa.shared.core.flows.steps import CallFlowStep
|
|
20
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
21
|
+
from rasa.shared.utils.mcp.server_connection import MCPServerConnection
|
|
22
|
+
from rasa.utils.common import ensure_jsonified_iterable
|
|
23
|
+
|
|
24
|
+
structlogger = structlog.get_logger()
|
|
25
|
+
|
|
26
|
+
CONFIG_VALUE = "value"
|
|
27
|
+
CONFIG_SLOT = "slot"
|
|
28
|
+
TOOL_CALL_DEFATULT_TIMEOUT = 10 # seconds
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def call_mcp_tool(
|
|
32
|
+
initial_events: List[Event],
|
|
33
|
+
stack: DialogueStack,
|
|
34
|
+
step: CallFlowStep,
|
|
35
|
+
tracker: DialogueStateTracker,
|
|
36
|
+
) -> FlowStepResult:
|
|
37
|
+
"""Run an MCP tool call step."""
|
|
38
|
+
structlogger.debug(
|
|
39
|
+
"flow.step.call_mcp_tool",
|
|
40
|
+
tool_id=step.call,
|
|
41
|
+
mcp_server=step.mcp_server,
|
|
42
|
+
mapping=step.mapping,
|
|
43
|
+
step_id=step.id,
|
|
44
|
+
flow_id=step.flow_id,
|
|
45
|
+
json_formatting=["mapping"],
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
return await _execute_mcp_tool_call(initial_events, stack, step, tracker)
|
|
50
|
+
except Exception as e:
|
|
51
|
+
return _handle_mcp_tool_error(
|
|
52
|
+
stack,
|
|
53
|
+
initial_events,
|
|
54
|
+
error_message=f"Failed to execute MCP tool call: {e}.",
|
|
55
|
+
tool_name=step.call,
|
|
56
|
+
mcp_server=step.mcp_server,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
async def _execute_mcp_tool_call(
|
|
61
|
+
initial_events: List[Event],
|
|
62
|
+
stack: DialogueStack,
|
|
63
|
+
step: CallFlowStep,
|
|
64
|
+
tracker: DialogueStateTracker,
|
|
65
|
+
) -> FlowStepResult:
|
|
66
|
+
"""Execute the MCP tool call with proper error handling."""
|
|
67
|
+
mcp_server_connection = None
|
|
68
|
+
try:
|
|
69
|
+
# Connect to the MCP server
|
|
70
|
+
mcp_server_connection = await _connect_to_mcp_server(step.mcp_server)
|
|
71
|
+
|
|
72
|
+
if not mcp_server_connection:
|
|
73
|
+
return _handle_mcp_tool_error(
|
|
74
|
+
stack,
|
|
75
|
+
initial_events,
|
|
76
|
+
f"Cannot connect to MCP server '{step.mcp_server}'.",
|
|
77
|
+
tool_name=step.call,
|
|
78
|
+
mcp_server=step.mcp_server,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Validate tool availability
|
|
82
|
+
if not await _is_tool_available(mcp_server_connection, step.call):
|
|
83
|
+
return _handle_mcp_tool_error(
|
|
84
|
+
stack,
|
|
85
|
+
initial_events,
|
|
86
|
+
f"Tool '{step.call}' is not available on MCP server "
|
|
87
|
+
f"'{step.mcp_server}'.",
|
|
88
|
+
tool_name=step.call,
|
|
89
|
+
mcp_server=step.mcp_server,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
# This should not happen, but we need to check for type checking to pass
|
|
93
|
+
if not step.mapping:
|
|
94
|
+
return _handle_mcp_tool_error(
|
|
95
|
+
stack,
|
|
96
|
+
initial_events,
|
|
97
|
+
f"No mapping found for tool '{step.call}'.",
|
|
98
|
+
tool_name=step.call,
|
|
99
|
+
mcp_server=step.mcp_server,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
# Prepare arguments for the tool call
|
|
103
|
+
arguments = _prepare_tool_arguments(step.mapping["input"], tracker)
|
|
104
|
+
|
|
105
|
+
# Call the tool with parameters
|
|
106
|
+
mcp_server = await mcp_server_connection.ensure_active_session()
|
|
107
|
+
result = await mcp_server.call_tool(
|
|
108
|
+
step.call,
|
|
109
|
+
arguments,
|
|
110
|
+
read_timeout_seconds=timedelta(seconds=TOOL_CALL_DEFATULT_TIMEOUT),
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
# Handle tool execution result
|
|
114
|
+
if result is None or result.isError:
|
|
115
|
+
return _handle_mcp_tool_error(
|
|
116
|
+
stack,
|
|
117
|
+
initial_events,
|
|
118
|
+
f"Tool '{step.call}' execution failed: {result.content}.",
|
|
119
|
+
tool_name=step.call,
|
|
120
|
+
mcp_server=step.mcp_server,
|
|
121
|
+
)
|
|
122
|
+
elif not result.content:
|
|
123
|
+
structlogger.warning(
|
|
124
|
+
"call_mcp_tool.empty_tool_result",
|
|
125
|
+
tool_name=step.call,
|
|
126
|
+
mcp_server=step.mcp_server,
|
|
127
|
+
)
|
|
128
|
+
else:
|
|
129
|
+
structlogger.debug(
|
|
130
|
+
"call_mcp_tool.tool_execution_success",
|
|
131
|
+
tool_name=step.call,
|
|
132
|
+
mcp_server=step.mcp_server,
|
|
133
|
+
result_content=result.content,
|
|
134
|
+
result_structured_content=result.structuredContent,
|
|
135
|
+
json_formatting=["result_content", "result_structured_content"],
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
# Process successful result
|
|
139
|
+
if set_slot_event := _process_tool_result(result, step.mapping["output"]):
|
|
140
|
+
initial_events.extend(set_slot_event)
|
|
141
|
+
else:
|
|
142
|
+
return _handle_mcp_tool_error(
|
|
143
|
+
stack,
|
|
144
|
+
initial_events,
|
|
145
|
+
f"Failed to process tool result for '{step.call}'.",
|
|
146
|
+
tool_name=step.call,
|
|
147
|
+
mcp_server=step.mcp_server,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
return ContinueFlowWithNextStep(events=initial_events)
|
|
151
|
+
|
|
152
|
+
finally:
|
|
153
|
+
# Always clean up the connection to prevent resource leaks
|
|
154
|
+
if mcp_server_connection:
|
|
155
|
+
try:
|
|
156
|
+
await mcp_server_connection.close()
|
|
157
|
+
except Exception as e:
|
|
158
|
+
structlogger.warning(
|
|
159
|
+
"call_mcp_tool.connection_cleanup_failed",
|
|
160
|
+
tool_name=step.call,
|
|
161
|
+
mcp_server=step.mcp_server,
|
|
162
|
+
error=str(e),
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
async def _is_tool_available(
|
|
167
|
+
mcp_server_connection: MCPServerConnection, tool_name: str
|
|
168
|
+
) -> bool:
|
|
169
|
+
"""Check if the specified tool is available on the MCP server."""
|
|
170
|
+
try:
|
|
171
|
+
# Get the active session from the connection
|
|
172
|
+
mcp_server = await mcp_server_connection.ensure_active_session()
|
|
173
|
+
available_tools = await mcp_server.list_tools()
|
|
174
|
+
tool_names = [tool.name for tool in available_tools.tools]
|
|
175
|
+
return tool_name in tool_names
|
|
176
|
+
except Exception as e:
|
|
177
|
+
structlogger.warning(
|
|
178
|
+
"call_mcp_tool.tool_availability_check_failed",
|
|
179
|
+
tool_name=tool_name,
|
|
180
|
+
error=str(e),
|
|
181
|
+
)
|
|
182
|
+
return False
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
async def _connect_to_mcp_server(
|
|
186
|
+
mcp_server_name: Optional[str],
|
|
187
|
+
) -> Optional[MCPServerConnection]:
|
|
188
|
+
"""Connect to the MCP server."""
|
|
189
|
+
if not mcp_server_name:
|
|
190
|
+
return None
|
|
191
|
+
|
|
192
|
+
# get the MCP server config from the available endpoints
|
|
193
|
+
endpoints = Configuration.get_instance().endpoints
|
|
194
|
+
mcp_servers = endpoints.mcp_servers
|
|
195
|
+
if not mcp_servers:
|
|
196
|
+
return None
|
|
197
|
+
|
|
198
|
+
mcp_server_configs = [
|
|
199
|
+
mcp_server for mcp_server in mcp_servers if mcp_server.name == mcp_server_name
|
|
200
|
+
]
|
|
201
|
+
if not mcp_server_configs or len(mcp_server_configs) != 1:
|
|
202
|
+
return None
|
|
203
|
+
|
|
204
|
+
mcp_server_config = mcp_server_configs[0]
|
|
205
|
+
|
|
206
|
+
mcp_server_connection = MCPServerConnection.from_config(
|
|
207
|
+
mcp_server_config.model_dump()
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# Ensure the connection is established and return the connection object
|
|
211
|
+
await mcp_server_connection.ensure_active_session()
|
|
212
|
+
return mcp_server_connection
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def _prepare_tool_arguments(
|
|
216
|
+
input_mapping: List[Dict[str, str]], tracker: DialogueStateTracker
|
|
217
|
+
) -> Dict[str, Any]:
|
|
218
|
+
"""Prepare arguments for the tool call from slot values."""
|
|
219
|
+
arguments = {}
|
|
220
|
+
for argument in input_mapping:
|
|
221
|
+
slot_value = tracker.get_slot(argument["slot"])
|
|
222
|
+
arguments[argument["param"]] = slot_value
|
|
223
|
+
return arguments
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def _jsonify_slot_value(value: Any) -> str | int | float | bool | None:
|
|
227
|
+
"""Prepare value for SlotSet: iterables -> JSON string, primitives -> as-is"""
|
|
228
|
+
if isinstance(value, (list, dict)) and len(value):
|
|
229
|
+
return json.dumps(ensure_jsonified_iterable(value))
|
|
230
|
+
return value
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def _get_slot_value_from_jinja2_expression(
|
|
234
|
+
result_expression: str,
|
|
235
|
+
result_as_dict: Dict[str, Any],
|
|
236
|
+
) -> Any:
|
|
237
|
+
"""Get the slot value from the Jinja2 expression"""
|
|
238
|
+
# Create a sandboxed environment to evaluate the expression
|
|
239
|
+
_env = SandboxedEnvironment()
|
|
240
|
+
|
|
241
|
+
# Compile the expression
|
|
242
|
+
compiled_expr = _env.compile_expression(result_expression)
|
|
243
|
+
|
|
244
|
+
# Evaluate the expression
|
|
245
|
+
return compiled_expr(result_as_dict)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def _process_tool_result(
|
|
249
|
+
result: CallToolResult,
|
|
250
|
+
output_mapping: List[Dict[str, str]],
|
|
251
|
+
) -> Optional[List[SlotSet]]:
|
|
252
|
+
"""Create a SetSlot event for the tool result using Jinja2 expressions"""
|
|
253
|
+
try:
|
|
254
|
+
_result_as_dict = {"result": result.model_dump()}
|
|
255
|
+
slots = []
|
|
256
|
+
for mapping in output_mapping:
|
|
257
|
+
try:
|
|
258
|
+
result_expression = mapping[CONFIG_VALUE]
|
|
259
|
+
|
|
260
|
+
# Get the slot value from the Jinja2 expression
|
|
261
|
+
slot_value = _get_slot_value_from_jinja2_expression(
|
|
262
|
+
result_expression, _result_as_dict
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
slots.append(
|
|
266
|
+
SlotSet(mapping[CONFIG_SLOT], _jsonify_slot_value(slot_value))
|
|
267
|
+
)
|
|
268
|
+
except Exception as e:
|
|
269
|
+
structlogger.error(
|
|
270
|
+
"call_mcp_tool.value_not_found_in_tool_result",
|
|
271
|
+
slot=mapping[CONFIG_SLOT],
|
|
272
|
+
value=mapping[CONFIG_VALUE],
|
|
273
|
+
result=_result_as_dict,
|
|
274
|
+
error=str(e),
|
|
275
|
+
json_formatting=["result"],
|
|
276
|
+
)
|
|
277
|
+
return None
|
|
278
|
+
return slots
|
|
279
|
+
except Exception as e:
|
|
280
|
+
structlogger.error(
|
|
281
|
+
"call_mcp_tool.result_processing_failed",
|
|
282
|
+
error=str(e),
|
|
283
|
+
result=result,
|
|
284
|
+
json_formatting=["result"],
|
|
285
|
+
)
|
|
286
|
+
return None
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def _handle_mcp_tool_error(
|
|
290
|
+
stack: DialogueStack,
|
|
291
|
+
events: List[Event],
|
|
292
|
+
error_message: str,
|
|
293
|
+
tool_name: str,
|
|
294
|
+
mcp_server: Optional[str],
|
|
295
|
+
) -> FlowStepResult:
|
|
296
|
+
"""Handle MCP tool errors consistently."""
|
|
297
|
+
structlogger.error(
|
|
298
|
+
"call_mcp_tool.error",
|
|
299
|
+
error_message=error_message,
|
|
300
|
+
tool_name=tool_name,
|
|
301
|
+
mcp_server=mcp_server,
|
|
302
|
+
)
|
|
303
|
+
stack.push(InternalErrorPatternFlowStackFrame())
|
|
304
|
+
return ContinueFlowWithNextStep(events=events)
|
|
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple
|
|
|
5
5
|
|
|
6
6
|
import structlog
|
|
7
7
|
import tiktoken
|
|
8
|
-
from deprecated import deprecated # type: ignore[import]
|
|
8
|
+
from deprecated import deprecated # type: ignore[import-untyped]
|
|
9
9
|
from jinja2 import Template
|
|
10
10
|
from langchain.docstore.document import Document
|
|
11
11
|
from langchain.schema.embeddings import Embeddings
|
rasa/core/policies/ted_policy.py
CHANGED
|
@@ -58,6 +58,7 @@ from rasa.shared.nlu.training_data.features import (
|
|
|
58
58
|
save_features,
|
|
59
59
|
)
|
|
60
60
|
from rasa.shared.nlu.training_data.message import Message
|
|
61
|
+
from rasa.shared.utils.io import raise_deprecation_warning
|
|
61
62
|
from rasa.utils import train_utils
|
|
62
63
|
from rasa.utils.tensorflow import rasa_layers
|
|
63
64
|
from rasa.utils.tensorflow.constants import (
|
|
@@ -80,7 +81,6 @@ from rasa.utils.tensorflow.constants import (
|
|
|
80
81
|
EMBEDDING_DIMENSION,
|
|
81
82
|
ENCODING_DIMENSION,
|
|
82
83
|
ENTITY_RECOGNITION,
|
|
83
|
-
EPOCH_OVERRIDE,
|
|
84
84
|
EPOCHS,
|
|
85
85
|
EVAL_NUM_EPOCHS,
|
|
86
86
|
EVAL_NUM_EXAMPLES,
|
|
@@ -363,6 +363,9 @@ class TEDPolicy(Policy):
|
|
|
363
363
|
entity_tag_specs: Optional[List[EntityTagSpec]] = None,
|
|
364
364
|
) -> None:
|
|
365
365
|
"""Declares instance variables with default values."""
|
|
366
|
+
raise_deprecation_warning(
|
|
367
|
+
"TEDPolicy is deprecated and will be removed in a future version."
|
|
368
|
+
)
|
|
366
369
|
super().__init__(
|
|
367
370
|
config, model_storage, resource, execution_context, featurizer=featurizer
|
|
368
371
|
)
|
|
@@ -668,6 +671,7 @@ class TEDPolicy(Policy):
|
|
|
668
671
|
self.model.compile(
|
|
669
672
|
optimizer=tf.keras.optimizers.Adam(self.config[LEARNING_RATE])
|
|
670
673
|
)
|
|
674
|
+
|
|
671
675
|
(
|
|
672
676
|
data_generator,
|
|
673
677
|
validation_data_generator,
|
|
@@ -943,14 +947,16 @@ class TEDPolicy(Policy):
|
|
|
943
947
|
|
|
944
948
|
with self._model_storage.write_to(self._resource) as model_path:
|
|
945
949
|
model_filename = self._metadata_filename()
|
|
946
|
-
tf_model_file = model_path / f"{model_filename}.
|
|
950
|
+
tf_model_file = model_path / f"{model_filename}.weights.h5"
|
|
947
951
|
|
|
948
952
|
rasa.shared.utils.io.create_directory_for_file(tf_model_file)
|
|
949
953
|
|
|
950
954
|
self.featurizer.persist(model_path)
|
|
951
955
|
|
|
952
956
|
if self.config[CHECKPOINT_MODEL] and self.tmp_checkpoint_dir:
|
|
953
|
-
self.model.load_weights(
|
|
957
|
+
self.model.load_weights(
|
|
958
|
+
self.tmp_checkpoint_dir / "checkpoint.weights.h5"
|
|
959
|
+
)
|
|
954
960
|
# Save an empty file to flag that this model has been
|
|
955
961
|
# produced using checkpointing
|
|
956
962
|
checkpoint_marker = model_path / f"{model_filename}.from_checkpoint.pkl"
|
|
@@ -1009,7 +1015,7 @@ class TEDPolicy(Policy):
|
|
|
1009
1015
|
Args:
|
|
1010
1016
|
model_path: Path where model is to be persisted.
|
|
1011
1017
|
"""
|
|
1012
|
-
tf_model_file = model_path / f"{cls._metadata_filename()}.
|
|
1018
|
+
tf_model_file = model_path / f"{cls._metadata_filename()}.weights.h5"
|
|
1013
1019
|
|
|
1014
1020
|
# load data example
|
|
1015
1021
|
loaded_data = deserialize_nested_feature_arrays(
|
|
@@ -1109,8 +1115,6 @@ class TEDPolicy(Policy):
|
|
|
1109
1115
|
model_utilities = cls._load_model_utilities(model_path)
|
|
1110
1116
|
|
|
1111
1117
|
config = cls._update_loaded_params(config)
|
|
1112
|
-
if execution_context.is_finetuning and EPOCH_OVERRIDE in config:
|
|
1113
|
-
config[EPOCHS] = config.get(EPOCH_OVERRIDE)
|
|
1114
1118
|
|
|
1115
1119
|
(
|
|
1116
1120
|
model_data_example,
|
|
@@ -1125,7 +1129,6 @@ class TEDPolicy(Policy):
|
|
|
1125
1129
|
model_data_example,
|
|
1126
1130
|
predict_data_example,
|
|
1127
1131
|
featurizer,
|
|
1128
|
-
execution_context.is_finetuning,
|
|
1129
1132
|
)
|
|
1130
1133
|
|
|
1131
1134
|
return cls._load_policy_with_model(
|
|
@@ -1167,7 +1170,6 @@ class TEDPolicy(Policy):
|
|
|
1167
1170
|
model_data_example: RasaModelData,
|
|
1168
1171
|
predict_data_example: RasaModelData,
|
|
1169
1172
|
featurizer: TrackerFeaturizer,
|
|
1170
|
-
should_finetune: bool,
|
|
1171
1173
|
) -> TED:
|
|
1172
1174
|
model = cls.model_class().load(
|
|
1173
1175
|
str(model_utilities["tf_model_file"]),
|
|
@@ -1180,7 +1182,9 @@ class TEDPolicy(Policy):
|
|
|
1180
1182
|
),
|
|
1181
1183
|
label_data=model_utilities["label_data"],
|
|
1182
1184
|
entity_tag_specs=model_utilities["entity_tag_specs"],
|
|
1183
|
-
|
|
1185
|
+
# This feature is no longer supported as the updated version
|
|
1186
|
+
# of Keras does not allow updating a compiled model anymore.
|
|
1187
|
+
finetune_mode=False,
|
|
1184
1188
|
)
|
|
1185
1189
|
return model
|
|
1186
1190
|
|
|
@@ -1463,7 +1467,7 @@ class TED(TransformerRasaModel):
|
|
|
1463
1467
|
|
|
1464
1468
|
dialogue_transformed, attention_weights = self._tf_layers[
|
|
1465
1469
|
f"transformer.{DIALOGUE}"
|
|
1466
|
-
](dialogue_in, 1 - mask, self._training)
|
|
1470
|
+
](dialogue_in, 1 - mask, training=self._training)
|
|
1467
1471
|
dialogue_transformed = tf.nn.gelu(dialogue_transformed)
|
|
1468
1472
|
|
|
1469
1473
|
if self.max_history_featurizer_is_used:
|
|
@@ -1708,7 +1712,7 @@ class TED(TransformerRasaModel):
|
|
|
1708
1712
|
|
|
1709
1713
|
if attribute in SENTENCE_FEATURES_TO_ENCODE + LABEL_FEATURES_TO_ENCODE:
|
|
1710
1714
|
attribute_features = self._tf_layers[f"encoding_layer.{attribute}"](
|
|
1711
|
-
attribute_features, self._training
|
|
1715
|
+
attribute_features, training=self._training
|
|
1712
1716
|
)
|
|
1713
1717
|
|
|
1714
1718
|
# attribute features have shape
|
|
@@ -2102,7 +2106,11 @@ class TED(TransformerRasaModel):
|
|
|
2102
2106
|
predictions = {
|
|
2103
2107
|
"scores": scores,
|
|
2104
2108
|
"similarities": sim_all,
|
|
2105
|
-
DIAGNOSTIC_DATA: {
|
|
2109
|
+
DIAGNOSTIC_DATA: {
|
|
2110
|
+
"attention_weights": attention_weights.numpy()
|
|
2111
|
+
if attention_weights is not None and hasattr(attention_weights, "numpy")
|
|
2112
|
+
else attention_weights,
|
|
2113
|
+
},
|
|
2106
2114
|
}
|
|
2107
2115
|
|
|
2108
2116
|
if (
|
|
@@ -54,6 +54,7 @@ from rasa.shared.nlu.constants import (
|
|
|
54
54
|
)
|
|
55
55
|
from rasa.shared.nlu.training_data.features import Features
|
|
56
56
|
from rasa.shared.utils import common
|
|
57
|
+
from rasa.shared.utils.io import raise_deprecation_warning
|
|
57
58
|
from rasa.utils import train_utils
|
|
58
59
|
from rasa.utils.tensorflow import layers
|
|
59
60
|
from rasa.utils.tensorflow.constants import (
|
|
@@ -300,6 +301,10 @@ class UnexpecTEDIntentPolicy(TEDPolicy):
|
|
|
300
301
|
label_quantiles: Optional[Dict[int, List[float]]] = None,
|
|
301
302
|
):
|
|
302
303
|
"""Declares instance variables with default values."""
|
|
304
|
+
raise_deprecation_warning(
|
|
305
|
+
"UnexpecTEDIntentPolicy is deprecated and "
|
|
306
|
+
"will be removed in a future version."
|
|
307
|
+
)
|
|
303
308
|
# Set all invalid / non configurable parameters
|
|
304
309
|
config[ENTITY_RECOGNITION] = False
|
|
305
310
|
config[BILOU_FLAG] = False
|
|
@@ -624,6 +629,7 @@ class UnexpecTEDIntentPolicy(TEDPolicy):
|
|
|
624
629
|
query_intent = (
|
|
625
630
|
last_user_uttered_event.intent_name
|
|
626
631
|
if last_user_uttered_event is not None
|
|
632
|
+
and isinstance(last_user_uttered_event, UserUttered)
|
|
627
633
|
else ""
|
|
628
634
|
)
|
|
629
635
|
is_unlikely_intent = self._check_unlikely_intent(
|