rasa-pro 3.14.0.dev6__py3-none-any.whl → 3.14.0.dev8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/agents/agent_manager.py +1 -1
- rasa/agents/constants.py +2 -2
- rasa/agents/exceptions.py +31 -1
- rasa/agents/protocol/a2a/a2a_agent.py +385 -227
- rasa/agents/protocol/mcp/mcp_base_agent.py +37 -19
- rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
- rasa/agents/protocol/mcp/mcp_task_agent.py +33 -10
- rasa/agents/schemas/agent_output.py +1 -1
- rasa/agents/utils.py +95 -1
- rasa/agents/validation.py +484 -0
- rasa/api.py +9 -6
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +92 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +31 -0
- rasa/builder/copilot/copilot.py +450 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +500 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +210 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/constants.py +9 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +206 -0
- rasa/builder/guardrails/models.py +231 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +328 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +282 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +243 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +458 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1345 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +244 -0
- rasa/builder/training_service.py +194 -0
- rasa/builder/validation_service.py +97 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/interactive.py +2 -0
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +9 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +8 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/finance/README.md +25 -0
- rasa/cli/project_templates/finance/actions/__init__.py +46 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
- rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
- rasa/cli/project_templates/finance/actions/database.py +277 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
- rasa/cli/project_templates/finance/config.yml +23 -0
- rasa/cli/project_templates/finance/credentials.yml +32 -0
- rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
- rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
- rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
- rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
- rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
- rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
- rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
- rasa/cli/project_templates/finance/csvs/users.csv +4 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
- rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/data/data.md +11 -0
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
- rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
- rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
- rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
- rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
- rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
- rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
- rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/domain/domain.md +10 -0
- rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
- rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
- rasa/cli/project_templates/finance/endpoints.yml +66 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +5 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +14 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/scaffold.py +46 -2
- rasa/cli/train.py +2 -0
- rasa/cli/utils.py +85 -1
- rasa/core/actions/action.py +2 -7
- rasa/core/available_agents.py +49 -26
- rasa/core/available_endpoints.py +17 -2
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +2 -22
- rasa/core/channels/inspector/README.md +26 -14
- rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-edef10dd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-9813e81c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-d8ba0870.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-790ef78b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-ecdce073.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-837fd3aa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-7e05afcb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-162eb295.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-41529fd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-b5b53234.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-13d138e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-94cbde3f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +42 -44
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +8 -8
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/types.ts +49 -7
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +59 -57
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +3 -0
- rasa/core/channels/voice_stream/browser_audio.py +53 -3
- rasa/core/channels/voice_stream/genesys.py +2 -1
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
- rasa/core/channels/voice_stream/voice_channel.py +66 -3
- rasa/core/constants.py +6 -0
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
- rasa/core/policies/enterprise_search_policy.py +4 -7
- rasa/core/policies/flows/flow_executor.py +66 -36
- rasa/core/policies/ted_policy.py +7 -5
- rasa/core/processor.py +32 -0
- rasa/core/redis_connection_factory.py +411 -0
- rasa/core/run.py +13 -3
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -81
- rasa/dialogue_understanding/commands/start_flow_command.py +18 -113
- rasa/dialogue_understanding/commands/utils.py +118 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +185 -114
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +18 -24
- rasa/dialogue_understanding/processor/command_processor.py +35 -0
- rasa/dialogue_understanding/stack/utils.py +43 -4
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/engine/graph.py +5 -1
- rasa/engine/recipes/default_components.py +78 -10
- rasa/engine/recipes/default_recipe.py +41 -1
- rasa/engine/storage/local_model_storage.py +83 -3
- rasa/graph_components/validators/default_recipe_validator.py +153 -135
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +20 -15
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +1 -1
- rasa/model_training.py +22 -6
- rasa/nlu/classifiers/diet_classifier.py +22 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
- rasa/nlu/extractors/extractor.py +1 -2
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +74 -0
- rasa/shared/agents/auth/agent_auth_manager.py +86 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
- rasa/shared/agents/auth/constants.py +11 -0
- rasa/shared/agents/auth/types.py +11 -0
- rasa/shared/constants.py +3 -0
- rasa/shared/core/constants.py +6 -6
- rasa/shared/core/domain.py +58 -11
- rasa/shared/core/events.py +2 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +6 -0
- rasa/shared/core/flows/steps/call.py +15 -12
- rasa/shared/core/flows/validation.py +238 -44
- rasa/shared/core/flows/yaml_flows_io.py +15 -6
- rasa/shared/core/slots.py +4 -0
- rasa/shared/exceptions.py +12 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/_utils.py +60 -44
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
- rasa/shared/providers/llm/_base_litellm_client.py +2 -2
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
- rasa/shared/providers/llm/llm_response.py +4 -4
- rasa/shared/utils/common.py +24 -0
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +2 -1
- rasa/shared/utils/mcp/server_connection.py +108 -27
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/studio/upload.py +16 -47
- rasa/telemetry.py +97 -23
- rasa/tracing/config.py +38 -12
- rasa/tracing/instrumentation/attribute_extractors.py +5 -1
- rasa/tracing/instrumentation/instrumentation.py +85 -8
- rasa/utils/common.py +1 -1
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/tensorflow/__init__.py +29 -0
- rasa/utils/tensorflow/callback.py +1 -1
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +11 -4
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +41 -6
- rasa/utils/tensorflow/rasa_layers.py +6 -4
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +68 -38
- rasa/validator.py +18 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +486 -173
- rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
- rasa_pro-3.14.0.dev6.dist-info/METADATA +0 -190
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
|
@@ -10,7 +10,7 @@ from mcp import ListToolsResult
|
|
|
10
10
|
from rasa.agents.constants import (
|
|
11
11
|
AGENT_DEFAULT_MAX_RETRIES,
|
|
12
12
|
AGENT_DEFAULT_TIMEOUT_SECONDS,
|
|
13
|
-
|
|
13
|
+
AGENT_METADATA_STRUCTURED_RESULTS_KEY,
|
|
14
14
|
KEY_ARGUMENTS,
|
|
15
15
|
KEY_CONTENT,
|
|
16
16
|
KEY_FUNCTION,
|
|
@@ -45,7 +45,7 @@ from rasa.shared.constants import (
|
|
|
45
45
|
TIMEOUT_CONFIG_KEY,
|
|
46
46
|
)
|
|
47
47
|
from rasa.shared.core.events import BotUttered, UserUttered
|
|
48
|
-
from rasa.shared.exceptions import AgentInitializationException
|
|
48
|
+
from rasa.shared.exceptions import AgentInitializationException, AuthenticationError
|
|
49
49
|
from rasa.shared.providers.llm.llm_response import LLMResponse, LLMToolCall
|
|
50
50
|
from rasa.shared.utils.constants import LOG_COMPONENT_SOURCE_METHOD_INIT
|
|
51
51
|
from rasa.shared.utils.llm import (
|
|
@@ -253,7 +253,8 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
253
253
|
except ConnectionError as ce:
|
|
254
254
|
structlogger.warning(
|
|
255
255
|
"mcp_agent.connect.connection_error",
|
|
256
|
-
event_info=f"Connection attempt {attempt} failed
|
|
256
|
+
event_info=f"Connection attempt {attempt} failed.",
|
|
257
|
+
error=str(ce),
|
|
257
258
|
attempt=attempt,
|
|
258
259
|
max_retries=self._max_retries,
|
|
259
260
|
)
|
|
@@ -266,10 +267,14 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
266
267
|
f"Failed to connect to MCP servers after {self._max_retries} "
|
|
267
268
|
f"attempts. Agent `{self._name}` failed to initialize."
|
|
268
269
|
) from ce
|
|
269
|
-
except Exception as e:
|
|
270
|
+
except (Exception, AuthenticationError) as e:
|
|
271
|
+
if isinstance(e, AuthenticationError):
|
|
272
|
+
event_info = "Authentication error during agent initialization."
|
|
273
|
+
else:
|
|
274
|
+
event_info = "Unexpected error during agent initialization."
|
|
270
275
|
structlogger.error(
|
|
271
276
|
"mcp_agent.connect.unexpected_exception",
|
|
272
|
-
event_info=
|
|
277
|
+
event_info=event_info,
|
|
273
278
|
error=str(e),
|
|
274
279
|
agent_name=self._name,
|
|
275
280
|
agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
|
|
@@ -296,7 +301,7 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
296
301
|
except Exception as e:
|
|
297
302
|
event_info = (
|
|
298
303
|
f"Agent `{self._name}` failed to connect to MCP server - "
|
|
299
|
-
f"{server_name} @ {server_config.url}
|
|
304
|
+
f"`{server_name}` @ `{server_config.url}`: {e!s}"
|
|
300
305
|
)
|
|
301
306
|
structlogger.error(
|
|
302
307
|
"mcp_agent.connect.failed_to_connect",
|
|
@@ -306,7 +311,7 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
306
311
|
agent_name=self._name,
|
|
307
312
|
agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
|
|
308
313
|
)
|
|
309
|
-
raise
|
|
314
|
+
raise e
|
|
310
315
|
|
|
311
316
|
async def connect_to_servers(self) -> None:
|
|
312
317
|
"""Connect to MCP servers."""
|
|
@@ -333,7 +338,7 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
333
338
|
except Exception as e:
|
|
334
339
|
structlogger.error(
|
|
335
340
|
"mcp_agent.disconnect_server.error",
|
|
336
|
-
event_info=f"Failed to disconnect from server `{server_name}`: {e}",
|
|
341
|
+
event_info=f"Failed to disconnect from server `{server_name}`: {e!s}",
|
|
337
342
|
server_name=server_name,
|
|
338
343
|
agent_name=self._name,
|
|
339
344
|
agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
|
|
@@ -548,6 +553,19 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
548
553
|
KEY_CONTENT: tool_response.response_message,
|
|
549
554
|
}
|
|
550
555
|
|
|
556
|
+
def _get_system_message_for_malformed_tool_response(self) -> Dict[str, Any]:
|
|
557
|
+
"""Get the system message for a malformed tool response."""
|
|
558
|
+
system_message = (
|
|
559
|
+
"The previous tool response contained invalid or incomplete JSON and could"
|
|
560
|
+
"not be parsed. Retry by generating a tool response in STRICT JSON string "
|
|
561
|
+
"format only. Ensure the JSON is fully well-formed and corresponds exactly "
|
|
562
|
+
"to the user's last request."
|
|
563
|
+
)
|
|
564
|
+
return {
|
|
565
|
+
KEY_ROLE: ROLE_SYSTEM,
|
|
566
|
+
KEY_CONTENT: system_message,
|
|
567
|
+
}
|
|
568
|
+
|
|
551
569
|
# ============================================================================
|
|
552
570
|
# Tool Execution
|
|
553
571
|
# ============================================================================
|
|
@@ -566,8 +584,8 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
566
584
|
|
|
567
585
|
server_id = self._tool_to_server_mapper[tool_name]
|
|
568
586
|
connection = self._server_connections[server_id]
|
|
569
|
-
session = await connection.ensure_active_session()
|
|
570
587
|
try:
|
|
588
|
+
session = await connection.ensure_active_session()
|
|
571
589
|
result = await session.call_tool(tool_name, arguments)
|
|
572
590
|
return AgentToolResult.from_mcp_tool_result(tool_name, result)
|
|
573
591
|
except Exception as e:
|
|
@@ -577,7 +595,7 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
577
595
|
is_error=True,
|
|
578
596
|
error_message=(
|
|
579
597
|
f"Failed to execute tool `{tool_name}` via MCP server `{server_id}`"
|
|
580
|
-
f"@ {connection.server_url}
|
|
598
|
+
f" @ `{connection.server_url}`: {e!s}"
|
|
581
599
|
),
|
|
582
600
|
)
|
|
583
601
|
|
|
@@ -606,7 +624,7 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
606
624
|
tool_name=tool_name,
|
|
607
625
|
result=None,
|
|
608
626
|
is_error=True,
|
|
609
|
-
error_message=f"Failed to execute built-in tool `{tool_name}`: {e}",
|
|
627
|
+
error_message=f"Failed to execute built-in tool `{tool_name}`: {e!s}",
|
|
610
628
|
)
|
|
611
629
|
return await self._execute_mcp_tool(tool_name, arguments)
|
|
612
630
|
|
|
@@ -639,24 +657,24 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
639
657
|
error_message=tool_output.error_message,
|
|
640
658
|
)
|
|
641
659
|
|
|
642
|
-
def
|
|
660
|
+
def _get_structured_results_for_agent_output(
|
|
643
661
|
self,
|
|
644
662
|
agent_input: AgentInput,
|
|
645
663
|
current_tool_results: Dict[str, AgentToolResult],
|
|
646
664
|
) -> List[List[Dict[str, Any]]]:
|
|
647
665
|
"""Get the tool results for the agent output."""
|
|
648
|
-
|
|
666
|
+
structured_results_of_current_iteration: List[Dict[str, Any]] = []
|
|
649
667
|
for tool_result in current_tool_results.values():
|
|
650
|
-
|
|
651
|
-
{"
|
|
668
|
+
structured_results_of_current_iteration.append(
|
|
669
|
+
{"name": tool_result.tool_name, "result": tool_result.result}
|
|
652
670
|
)
|
|
653
671
|
|
|
654
|
-
|
|
655
|
-
agent_input.metadata.get(
|
|
672
|
+
previous_structured_results: List[List[Dict[str, Any]]] = (
|
|
673
|
+
agent_input.metadata.get(AGENT_METADATA_STRUCTURED_RESULTS_KEY, []) or []
|
|
656
674
|
)
|
|
657
|
-
|
|
675
|
+
previous_structured_results.append(structured_results_of_current_iteration)
|
|
658
676
|
|
|
659
|
-
return
|
|
677
|
+
return previous_structured_results
|
|
660
678
|
|
|
661
679
|
# ============================================================================
|
|
662
680
|
# Core Protocol Methods
|
|
@@ -31,6 +31,10 @@ from rasa.shared.agents.utils import make_agent_identifier
|
|
|
31
31
|
from rasa.shared.constants import (
|
|
32
32
|
ROLE_TOOL,
|
|
33
33
|
)
|
|
34
|
+
from rasa.shared.exceptions import (
|
|
35
|
+
LLMToolResponseDecodeError,
|
|
36
|
+
ProviderClientAPIException,
|
|
37
|
+
)
|
|
34
38
|
from rasa.shared.providers.llm.llm_response import LLMResponse, LLMToolCall
|
|
35
39
|
|
|
36
40
|
DEFAULT_OPEN_AGENT_PROMPT_TEMPLATE = importlib.resources.read_text(
|
|
@@ -130,7 +134,7 @@ class MCPOpenAgent(MCPBaseAgent):
|
|
|
130
134
|
id=agent_input.id,
|
|
131
135
|
status=AgentStatus.COMPLETED,
|
|
132
136
|
response_message=tool_result.result,
|
|
133
|
-
|
|
137
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
134
138
|
agent_input, tool_results
|
|
135
139
|
),
|
|
136
140
|
)
|
|
@@ -178,7 +182,7 @@ class MCPOpenAgent(MCPBaseAgent):
|
|
|
178
182
|
id=agent_input.id,
|
|
179
183
|
status=AgentStatus.RECOVERABLE_ERROR,
|
|
180
184
|
error_message=event_info,
|
|
181
|
-
|
|
185
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
182
186
|
agent_input, tool_results
|
|
183
187
|
),
|
|
184
188
|
)
|
|
@@ -189,7 +193,7 @@ class MCPOpenAgent(MCPBaseAgent):
|
|
|
189
193
|
id=agent_input.id,
|
|
190
194
|
status=AgentStatus.INPUT_REQUIRED,
|
|
191
195
|
response_message=llm_response.choices[0],
|
|
192
|
-
|
|
196
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
193
197
|
agent_input, tool_results
|
|
194
198
|
),
|
|
195
199
|
)
|
|
@@ -258,9 +262,28 @@ class MCPOpenAgent(MCPBaseAgent):
|
|
|
258
262
|
)
|
|
259
263
|
|
|
260
264
|
except Exception as e:
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
265
|
+
if isinstance(e, ProviderClientAPIException) and isinstance(
|
|
266
|
+
e.original_exception, LLMToolResponseDecodeError
|
|
267
|
+
):
|
|
268
|
+
structlogger.debug(
|
|
269
|
+
"mcp_open_agent.send_message.malformed_tool_response_error",
|
|
270
|
+
event_info=(
|
|
271
|
+
"Malformed tool response received from LLM "
|
|
272
|
+
"(JSON decode error). Retrying the LLM call."
|
|
273
|
+
),
|
|
274
|
+
user_message=agent_input.user_message,
|
|
275
|
+
agent_name=self._name,
|
|
276
|
+
agent_id=str(
|
|
277
|
+
make_agent_identifier(self._name, self.protocol_type)
|
|
278
|
+
),
|
|
279
|
+
original_exception=str(e.original_exception),
|
|
280
|
+
)
|
|
281
|
+
# Continue to make another LLM call by breaking out of the current
|
|
282
|
+
# iteration and letting the loop continue with a fresh LLM request
|
|
283
|
+
messages.append(
|
|
284
|
+
self._get_system_message_for_malformed_tool_response()
|
|
285
|
+
)
|
|
286
|
+
continue
|
|
264
287
|
structlogger.error(
|
|
265
288
|
"mcp_open_agent.send_message.error_in_agent_loop",
|
|
266
289
|
event_info=f"Failed to send message: {e}",
|
|
@@ -272,7 +295,7 @@ class MCPOpenAgent(MCPBaseAgent):
|
|
|
272
295
|
id=agent_input.id,
|
|
273
296
|
status=AgentStatus.FATAL_ERROR,
|
|
274
297
|
response_message=f"I encountered an error: {e!s}",
|
|
275
|
-
|
|
298
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
276
299
|
agent_input, tool_results
|
|
277
300
|
),
|
|
278
301
|
error_message=str(e),
|
|
@@ -284,7 +307,7 @@ class MCPOpenAgent(MCPBaseAgent):
|
|
|
284
307
|
"I've completed my research but couldn't provide a final answer within"
|
|
285
308
|
"the allowed steps."
|
|
286
309
|
),
|
|
287
|
-
|
|
310
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
288
311
|
agent_input, tool_results
|
|
289
312
|
),
|
|
290
313
|
)
|
|
@@ -27,6 +27,10 @@ from rasa.shared.constants import (
|
|
|
27
27
|
ROLE_TOOL,
|
|
28
28
|
)
|
|
29
29
|
from rasa.shared.core.events import SlotSet
|
|
30
|
+
from rasa.shared.exceptions import (
|
|
31
|
+
LLMToolResponseDecodeError,
|
|
32
|
+
ProviderClientAPIException,
|
|
33
|
+
)
|
|
30
34
|
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
31
35
|
|
|
32
36
|
DEFAULT_TASK_AGENT_PROMPT_TEMPLATE = importlib.resources.read_text(
|
|
@@ -98,7 +102,7 @@ class MCPTaskAgent(MCPBaseAgent):
|
|
|
98
102
|
for name in re.findall(r"\bslots\.(\w+)", condition)
|
|
99
103
|
}
|
|
100
104
|
|
|
101
|
-
slot_names = agent_input.
|
|
105
|
+
slot_names = [slot.name for slot in agent_input.slots]
|
|
102
106
|
|
|
103
107
|
# Keep only slots that actually exist in agent_input.slots
|
|
104
108
|
valid_slot_names = [
|
|
@@ -241,7 +245,7 @@ class MCPTaskAgent(MCPBaseAgent):
|
|
|
241
245
|
for slot_name, slot_value in slots.items()
|
|
242
246
|
if slot_name in _slot_names_to_be_filled
|
|
243
247
|
],
|
|
244
|
-
|
|
248
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
245
249
|
agent_input, tool_results
|
|
246
250
|
),
|
|
247
251
|
)
|
|
@@ -303,7 +307,7 @@ class MCPTaskAgent(MCPBaseAgent):
|
|
|
303
307
|
id=agent_input.id,
|
|
304
308
|
status=AgentStatus.RECOVERABLE_ERROR,
|
|
305
309
|
error_message=event_info,
|
|
306
|
-
|
|
310
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
307
311
|
agent_input, tool_results
|
|
308
312
|
),
|
|
309
313
|
)
|
|
@@ -314,7 +318,7 @@ class MCPTaskAgent(MCPBaseAgent):
|
|
|
314
318
|
id=agent_input.id,
|
|
315
319
|
status=AgentStatus.INPUT_REQUIRED,
|
|
316
320
|
response_message=llm_response.choices[0],
|
|
317
|
-
|
|
321
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
318
322
|
agent_input, tool_results
|
|
319
323
|
),
|
|
320
324
|
)
|
|
@@ -445,16 +449,35 @@ class MCPTaskAgent(MCPBaseAgent):
|
|
|
445
449
|
"An internal error occurred while checking the "
|
|
446
450
|
"exit conditions."
|
|
447
451
|
),
|
|
448
|
-
|
|
452
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
449
453
|
agent_input, tool_results
|
|
450
454
|
),
|
|
451
455
|
error_message=internal_error,
|
|
452
456
|
)
|
|
453
457
|
|
|
454
458
|
except Exception as e:
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
459
|
+
if isinstance(e, ProviderClientAPIException) and isinstance(
|
|
460
|
+
e.original_exception, LLMToolResponseDecodeError
|
|
461
|
+
):
|
|
462
|
+
structlogger.debug(
|
|
463
|
+
"mcp_task_agent.send_message.malformed_tool_response_error",
|
|
464
|
+
event_info=(
|
|
465
|
+
"Malformed tool response received from LLM "
|
|
466
|
+
"(JSON decode error). Retrying the LLM call."
|
|
467
|
+
),
|
|
468
|
+
user_message=agent_input.user_message,
|
|
469
|
+
agent_name=self._name,
|
|
470
|
+
agent_id=str(
|
|
471
|
+
make_agent_identifier(self._name, self.protocol_type)
|
|
472
|
+
),
|
|
473
|
+
original_exception=str(e.original_exception),
|
|
474
|
+
)
|
|
475
|
+
# Continue to make another LLM call by breaking out of the current
|
|
476
|
+
# iteration and letting the loop continue with a fresh LLM request
|
|
477
|
+
messages.append(
|
|
478
|
+
self._get_system_message_for_malformed_tool_response()
|
|
479
|
+
)
|
|
480
|
+
continue
|
|
458
481
|
structlogger.error(
|
|
459
482
|
"mcp_task_agent.send_message.error_in_agent_loop",
|
|
460
483
|
event_info=f"Failed to send message: {e}",
|
|
@@ -466,7 +489,7 @@ class MCPTaskAgent(MCPBaseAgent):
|
|
|
466
489
|
id=agent_input.id,
|
|
467
490
|
status=AgentStatus.FATAL_ERROR,
|
|
468
491
|
response_message=f"I encountered an error: {e!s}",
|
|
469
|
-
|
|
492
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
470
493
|
agent_input, tool_results
|
|
471
494
|
),
|
|
472
495
|
error_message=str(e),
|
|
@@ -478,7 +501,7 @@ class MCPTaskAgent(MCPBaseAgent):
|
|
|
478
501
|
"I've completed my research but couldn't provide a final answer within"
|
|
479
502
|
"the allowed steps."
|
|
480
503
|
),
|
|
481
|
-
|
|
504
|
+
structured_results=self._get_structured_results_for_agent_output(
|
|
482
505
|
agent_input, tool_results
|
|
483
506
|
),
|
|
484
507
|
)
|
|
@@ -13,7 +13,7 @@ class AgentOutput(BaseModel):
|
|
|
13
13
|
status: AgentStatus
|
|
14
14
|
response_message: Optional[str] = None
|
|
15
15
|
events: Optional[List[SlotSet]] = None
|
|
16
|
-
|
|
16
|
+
structured_results: Optional[List[List[Dict[str, Any]]]] = None
|
|
17
17
|
metadata: Optional[Dict[str, Any]] = None
|
|
18
18
|
timestamp: Optional[str] = None
|
|
19
19
|
error_message: Optional[str] = None
|
rasa/agents/utils.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
from typing import List, Optional
|
|
1
|
+
from typing import Dict, List, Optional
|
|
2
2
|
|
|
3
3
|
from rasa.agents.agent_manager import AgentManager
|
|
4
4
|
from rasa.agents.exceptions import AgentNotFoundException
|
|
5
|
+
from rasa.agents.validation import validate_agent_names_not_conflicting_with_flows
|
|
5
6
|
from rasa.core.available_agents import (
|
|
6
7
|
AgentConfig,
|
|
7
8
|
AgentMCPServerConfig,
|
|
@@ -10,8 +11,10 @@ from rasa.core.available_agents import (
|
|
|
10
11
|
from rasa.core.available_endpoints import AvailableEndpoints
|
|
11
12
|
from rasa.shared.agents.utils import get_protocol_type
|
|
12
13
|
from rasa.shared.core.domain import Domain
|
|
14
|
+
from rasa.shared.core.events import AgentCompleted
|
|
13
15
|
from rasa.shared.core.flows import FlowsList
|
|
14
16
|
from rasa.shared.core.flows.steps import CallFlowStep
|
|
17
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
15
18
|
|
|
16
19
|
|
|
17
20
|
def resolve_agent_config(
|
|
@@ -33,6 +36,7 @@ def resolve_agent_config(
|
|
|
33
36
|
if mcp_server_endpoint.name == mcp_server.name:
|
|
34
37
|
mcp_server.url = mcp_server_endpoint.url
|
|
35
38
|
mcp_server.type = mcp_server_endpoint.type
|
|
39
|
+
mcp_server.additional_params = mcp_server_endpoint.additional_params
|
|
36
40
|
|
|
37
41
|
return agent_config
|
|
38
42
|
|
|
@@ -46,6 +50,10 @@ async def initialize_agents(
|
|
|
46
50
|
agent_manager: AgentManager = AgentManager()
|
|
47
51
|
endpoints = AvailableEndpoints.get_instance()
|
|
48
52
|
|
|
53
|
+
# Validate agent names don't conflict with flow names
|
|
54
|
+
flow_names = {flow.id for flow in flows.underlying_flows}
|
|
55
|
+
validate_agent_names_not_conflicting_with_flows(sub_agents.agents, flow_names)
|
|
56
|
+
|
|
49
57
|
for flow in flows.underlying_flows:
|
|
50
58
|
for step in flow.steps:
|
|
51
59
|
if isinstance(step, CallFlowStep):
|
|
@@ -70,3 +78,89 @@ async def initialize_agents(
|
|
|
70
78
|
protocol_type,
|
|
71
79
|
resolved_agent_config,
|
|
72
80
|
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def is_agent_valid(agent_id: str) -> bool:
|
|
84
|
+
"""Check if an agent ID references a valid agent.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
agent_id: The agent ID to validate.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
True if the agent exists, False otherwise.
|
|
91
|
+
"""
|
|
92
|
+
agent_config = AvailableAgents.get_agent_config(agent_id)
|
|
93
|
+
return agent_config is not None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def is_agent_completed(tracker: DialogueStateTracker, agent_id: str) -> bool:
|
|
97
|
+
"""Check if an agent has been completed.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
tracker: The dialogue state tracker.
|
|
101
|
+
agent_id: The agent ID to check.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
True if the agent has been completed, False otherwise.
|
|
105
|
+
"""
|
|
106
|
+
# Look for AgentCompleted events for this agent
|
|
107
|
+
for event in reversed(tracker.events):
|
|
108
|
+
if isinstance(event, AgentCompleted) and event.agent_id == agent_id:
|
|
109
|
+
return True
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def get_agent_info(agent_id: str) -> Optional[Dict[str, str]]:
|
|
114
|
+
"""Get basic agent information (name and description).
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
agent_id: The agent ID to get information for.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Dictionary with agent name and description if found, None otherwise.
|
|
121
|
+
"""
|
|
122
|
+
agent_config = AvailableAgents.get_agent_config(agent_id)
|
|
123
|
+
if agent_config is None:
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
"name": agent_config.agent.name,
|
|
128
|
+
"description": agent_config.agent.description,
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def get_completed_agents_info(tracker: DialogueStateTracker) -> List[Dict[str, str]]:
|
|
133
|
+
"""Get information for all completed agents.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
tracker: The dialogue state tracker.
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
List of dictionaries containing agent information for completed agents.
|
|
140
|
+
"""
|
|
141
|
+
completed_agents = []
|
|
142
|
+
for event in reversed(tracker.events):
|
|
143
|
+
if isinstance(event, AgentCompleted):
|
|
144
|
+
agent_info = get_agent_info(event.agent_id)
|
|
145
|
+
if agent_info:
|
|
146
|
+
completed_agents.append(agent_info)
|
|
147
|
+
return completed_agents
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def get_active_agent_info(
|
|
151
|
+
tracker: DialogueStateTracker, flow_id: str
|
|
152
|
+
) -> Optional[Dict[str, str]]:
|
|
153
|
+
"""Get information for the active agent in a specific flow.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
tracker: The dialogue state tracker.
|
|
157
|
+
flow_id: The flow ID to get the active agent for.
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
Dictionary with agent name and description if an agent is active,
|
|
161
|
+
None otherwise.
|
|
162
|
+
"""
|
|
163
|
+
agent_frame = tracker.stack.find_active_agent_stack_frame_for_flow(flow_id)
|
|
164
|
+
if agent_frame:
|
|
165
|
+
return get_agent_info(agent_frame.agent_id)
|
|
166
|
+
return None
|