rasa-pro 3.14.0.dev7__py3-none-any.whl → 3.14.0.dev9__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/protocol/a2a/a2a_agent.py +385 -227
- rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
- rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
- rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
- rasa/agents/schemas/agent_output.py +1 -1
- rasa/agents/utils.py +90 -1
- 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/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/core/actions/action.py +0 -1
- rasa/core/available_agents.py +2 -0
- 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-cce7e0a8.js → arc-edef10dd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.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-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.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-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.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-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.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-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.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 +16 -42
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
- 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/types.ts +32 -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 +14 -5
- 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/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/default_flows_for_patterns.yml +1 -1
- rasa/dialogue_understanding/processor/command_processor.py +35 -0
- 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 +14 -0
- 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/core/constants.py +1 -0
- 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/llm.py +2 -1
- rasa/shared/utils/mcp/server_connection.py +84 -23
- 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.dev9.dist-info/METADATA +199 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/RECORD +466 -156
- rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
- rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.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 (
|
|
@@ -267,10 +267,14 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
267
267
|
f"Failed to connect to MCP servers after {self._max_retries} "
|
|
268
268
|
f"attempts. Agent `{self._name}` failed to initialize."
|
|
269
269
|
) from ce
|
|
270
|
-
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."
|
|
271
275
|
structlogger.error(
|
|
272
276
|
"mcp_agent.connect.unexpected_exception",
|
|
273
|
-
event_info=
|
|
277
|
+
event_info=event_info,
|
|
274
278
|
error=str(e),
|
|
275
279
|
agent_name=self._name,
|
|
276
280
|
agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
|
|
@@ -307,7 +311,7 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
307
311
|
agent_name=self._name,
|
|
308
312
|
agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
|
|
309
313
|
)
|
|
310
|
-
raise
|
|
314
|
+
raise e
|
|
311
315
|
|
|
312
316
|
async def connect_to_servers(self) -> None:
|
|
313
317
|
"""Connect to MCP servers."""
|
|
@@ -549,6 +553,19 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
549
553
|
KEY_CONTENT: tool_response.response_message,
|
|
550
554
|
}
|
|
551
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
|
+
|
|
552
569
|
# ============================================================================
|
|
553
570
|
# Tool Execution
|
|
554
571
|
# ============================================================================
|
|
@@ -640,24 +657,24 @@ class MCPBaseAgent(AgentProtocol):
|
|
|
640
657
|
error_message=tool_output.error_message,
|
|
641
658
|
)
|
|
642
659
|
|
|
643
|
-
def
|
|
660
|
+
def _get_structured_results_for_agent_output(
|
|
644
661
|
self,
|
|
645
662
|
agent_input: AgentInput,
|
|
646
663
|
current_tool_results: Dict[str, AgentToolResult],
|
|
647
664
|
) -> List[List[Dict[str, Any]]]:
|
|
648
665
|
"""Get the tool results for the agent output."""
|
|
649
|
-
|
|
666
|
+
structured_results_of_current_iteration: List[Dict[str, Any]] = []
|
|
650
667
|
for tool_result in current_tool_results.values():
|
|
651
|
-
|
|
652
|
-
{"
|
|
668
|
+
structured_results_of_current_iteration.append(
|
|
669
|
+
{"name": tool_result.tool_name, "result": tool_result.result}
|
|
653
670
|
)
|
|
654
671
|
|
|
655
|
-
|
|
656
|
-
agent_input.metadata.get(
|
|
672
|
+
previous_structured_results: List[List[Dict[str, Any]]] = (
|
|
673
|
+
agent_input.metadata.get(AGENT_METADATA_STRUCTURED_RESULTS_KEY, []) or []
|
|
657
674
|
)
|
|
658
|
-
|
|
675
|
+
previous_structured_results.append(structured_results_of_current_iteration)
|
|
659
676
|
|
|
660
|
-
return
|
|
677
|
+
return previous_structured_results
|
|
661
678
|
|
|
662
679
|
# ============================================================================
|
|
663
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(
|
|
@@ -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,4 +1,4 @@
|
|
|
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
|
|
@@ -11,8 +11,10 @@ from rasa.core.available_agents import (
|
|
|
11
11
|
from rasa.core.available_endpoints import AvailableEndpoints
|
|
12
12
|
from rasa.shared.agents.utils import get_protocol_type
|
|
13
13
|
from rasa.shared.core.domain import Domain
|
|
14
|
+
from rasa.shared.core.events import AgentCompleted
|
|
14
15
|
from rasa.shared.core.flows import FlowsList
|
|
15
16
|
from rasa.shared.core.flows.steps import CallFlowStep
|
|
17
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
16
18
|
|
|
17
19
|
|
|
18
20
|
def resolve_agent_config(
|
|
@@ -34,6 +36,7 @@ def resolve_agent_config(
|
|
|
34
36
|
if mcp_server_endpoint.name == mcp_server.name:
|
|
35
37
|
mcp_server.url = mcp_server_endpoint.url
|
|
36
38
|
mcp_server.type = mcp_server_endpoint.type
|
|
39
|
+
mcp_server.additional_params = mcp_server_endpoint.additional_params
|
|
37
40
|
|
|
38
41
|
return agent_config
|
|
39
42
|
|
|
@@ -75,3 +78,89 @@ async def initialize_agents(
|
|
|
75
78
|
protocol_type,
|
|
76
79
|
resolved_agent_config,
|
|
77
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
|
rasa/builder/README.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Rasa Prompt-to-Bot Service
|
|
2
|
+
|
|
3
|
+
A production-ready service that generates Rasa chatbots from natural language descriptions using LLMs.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
The service follows functional programming principles with minimal use of classes:
|
|
8
|
+
|
|
9
|
+
### Core Modules
|
|
10
|
+
|
|
11
|
+
- **`config.py`** - Configuration management using module-level constants
|
|
12
|
+
- **`exceptions.py`** - Custom exception hierarchy for error handling
|
|
13
|
+
- **`models.py`** - Pydantic models for request/response validation
|
|
14
|
+
- **`llm_service.py`** - LLM interactions (minimal class for state management)
|
|
15
|
+
- **`validation_service.py`** - Project validation functions
|
|
16
|
+
- **`training_service.py`** - Model training functions
|
|
17
|
+
- **`project_generator.py`** - Project generation (class for bot files state)
|
|
18
|
+
- **`service.py`** - Main orchestrating service (class for app state)
|
|
19
|
+
- **`logging_utils.py`** - Thread-safe logging utilities
|
|
20
|
+
- **`llm_context.py`** - Conversation context formatting
|
|
21
|
+
- **`main.py`** - Application entry point
|
|
22
|
+
|
|
23
|
+
### Utility Scripts
|
|
24
|
+
|
|
25
|
+
- **`scrape_rasa_docs.py`** - Documentation scraping
|
|
26
|
+
- **`create_openai_vector_store.py`** - Documentation indexing
|
|
27
|
+
|
|
28
|
+
## Key Design Principles
|
|
29
|
+
|
|
30
|
+
1. **Functional First**: Use functions for stateless operations
|
|
31
|
+
2. **Minimal Classes**: Classes only when state management is needed
|
|
32
|
+
3. **Configuration**: Environment variables with sensible defaults
|
|
33
|
+
4. **Error Handling**: Structured exception hierarchy
|
|
34
|
+
5. **Type Safety**: Full type annotations and Pydantic validation
|
|
35
|
+
6. **Thread Safety**: Safe concurrent operations
|
|
36
|
+
7. **Resource Management**: Proper cleanup and lifecycle handling
|
|
37
|
+
|
|
38
|
+
## Usage
|
|
39
|
+
|
|
40
|
+
### Running the Service
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
python rasa/builder/main.py
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Environment Configuration
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# OpenAI Settings
|
|
50
|
+
export OPENAI_MODEL="gpt-4.1-2025-04-14"
|
|
51
|
+
export OPENAI_TEMPERATURE="0.7"
|
|
52
|
+
export OPENAI_VECTOR_STORE_ID="vs_xxxxx"
|
|
53
|
+
export OPENAI_TIMEOUT="30"
|
|
54
|
+
|
|
55
|
+
# Server Settings
|
|
56
|
+
export SERVER_HOST="0.0.0.0"
|
|
57
|
+
export SERVER_PORT="5005"
|
|
58
|
+
export MAX_RETRIES="5"
|
|
59
|
+
export CORS_ORIGINS="http://localhost:3000,https://example.com"
|
|
60
|
+
|
|
61
|
+
# Validation Settings
|
|
62
|
+
export VALIDATION_FAIL_ON_WARNINGS="false"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### API Endpoints
|
|
66
|
+
|
|
67
|
+
- `POST /api/prompt-to-bot` - Generate bot from description
|
|
68
|
+
- `GET /api/bot-data` - Get current bot configuration
|
|
69
|
+
- `PUT /api/bot-data` - Update bot configuration (SSE)
|
|
70
|
+
- `POST /api/llm-builder` - LLM helper for bot development
|
|
71
|
+
- `GET /` - Health check
|
|
72
|
+
|
|
73
|
+
### Documentation Setup
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# 1. Scrape Rasa documentation
|
|
77
|
+
python rasa/builder/scrape_rasa_docs.py
|
|
78
|
+
|
|
79
|
+
# 2. Create OpenAI vector store
|
|
80
|
+
python rasa/builder/create_openai_vector_store.py
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Benefits of Functional Approach
|
|
84
|
+
|
|
85
|
+
- **Simpler**: Easy to understand and reason about
|
|
86
|
+
- **Testable**: Functions are easier to unit test
|
|
87
|
+
- **Reusable**: Pure functions can be composed
|
|
88
|
+
- **Maintainable**: Clear separation of concerns
|
|
89
|
+
- **Performant**: No unnecessary object overhead
|
|
90
|
+
- **Debuggable**: Clear call stacks and data flow
|
|
91
|
+
|
|
92
|
+
## Error Handling
|
|
93
|
+
|
|
94
|
+
The service uses a structured exception hierarchy:
|
|
95
|
+
|
|
96
|
+
- `PromptToBotError` - Base exception
|
|
97
|
+
- `ValidationError` - Project validation failures
|
|
98
|
+
- `TrainingError` - Model training issues
|
|
99
|
+
- `LLMGenerationError` - LLM API problems
|
|
100
|
+
- `ProjectGenerationError` - Generation retry exhaustion
|
|
101
|
+
- `AgentLoadError` - Agent loading failures
|
|
102
|
+
|
|
103
|
+
## Logging
|
|
104
|
+
|
|
105
|
+
Structured logging with context using `structlog`:
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
structlogger.info("operation.success", key="value")
|
|
109
|
+
structlogger.error("operation.failed", error=str(e))
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## State Management
|
|
113
|
+
|
|
114
|
+
Only classes that truly need state:
|
|
115
|
+
|
|
116
|
+
1. **`LLMService`** - Caches schemas and manages OpenAI client
|
|
117
|
+
2. **`ProjectGenerator`** - Maintains current bot files
|
|
118
|
+
3. **`BotBuilderService`** - Manages Sanic app and agent state
|
|
119
|
+
|
|
120
|
+
Everything else uses pure functions for maximum simplicity and testability.
|
rasa/builder/__init__.py
ADDED
|
File without changes
|