rasa-pro 3.14.0.dev3__py3-none-any.whl → 3.14.0.dev5__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/api.py +0 -5
- rasa/builder/README.md +120 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +115 -0
- rasa/builder/copilot/constants.py +25 -0
- rasa/builder/copilot/copilot.py +372 -0
- rasa/builder/copilot/copilot_response_handler.py +487 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
- rasa/builder/copilot/exceptions.py +20 -0
- rasa/builder/copilot/models.py +431 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +726 -0
- rasa/builder/copilot/telemetry.py +195 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +26 -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 +55 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/constants.py +3 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +206 -0
- rasa/builder/guardrails/models.py +199 -0
- rasa/builder/guardrails/utils.py +305 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +234 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +209 -0
- rasa/builder/main.py +174 -0
- rasa/builder/models.py +197 -0
- rasa/builder/project_generator.py +450 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1142 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/training_service.py +132 -0
- rasa/builder/validation_service.py +93 -0
- rasa/cli/arguments/default_arguments.py +0 -12
- rasa/cli/arguments/run.py +0 -2
- rasa/cli/dialogue_understanding_test.py +0 -4
- rasa/cli/e2e_test.py +0 -4
- rasa/cli/inspect.py +0 -3
- rasa/cli/llm_fine_tuning.py +0 -5
- rasa/cli/project_templates/basic/actions/action_api.py +15 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +44 -0
- rasa/cli/project_templates/basic/config.yml +23 -0
- rasa/cli/project_templates/basic/credentials.yml +34 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +7 -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/welcome.yml +9 -0
- rasa/cli/project_templates/basic/data/system/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +65 -0
- rasa/cli/project_templates/basic/docs/template.txt +7 -0
- rasa/cli/project_templates/basic/domain/general/assistant_details.yml +12 -0
- rasa/cli/project_templates/basic/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +5 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +35 -0
- rasa/cli/project_templates/basic/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/basic/domain/general/welcome.yml +7 -0
- rasa/cli/project_templates/basic/endpoints.yml +73 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/finance/actions/__init__.py +46 -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/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 +21 -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/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/general/assistant_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 +63 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +25 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +10 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/flows/flow_global.yml +5 -0
- rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +6 -0
- rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +7 -0
- rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +9 -0
- rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/domain_global.yml +29 -0
- rasa/cli/project_templates/telco/domain/domain_patterns.yml +17 -0
- rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +20 -0
- rasa/cli/project_templates/telco/domain/domain_reset_router.yml +11 -0
- rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +24 -0
- rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +74 -0
- rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +102 -0
- rasa/cli/project_templates/telco/endpoints.yml +60 -0
- rasa/{dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 → cli/project_templates/telco/prompts/command-generator.jinja2} +3 -7
- rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +62 -0
- rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +130 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +68 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +13 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +21 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +15 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/run.py +0 -4
- rasa/cli/scaffold.py +46 -2
- rasa/cli/shell.py +0 -3
- rasa/constants.py +0 -6
- rasa/core/actions/action.py +2 -43
- rasa/core/agent.py +0 -16
- rasa/core/available_endpoints.py +0 -30
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +1 -1
- rasa/core/channels/inspector/dist/assets/{arc-2e78c586.js → arc-18042c22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-806b712e.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0745efa9.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-7bd1082b.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-d937ba49.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-a2a564ca.js → createText-2e5e7dd3-31422447.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b5256940.js → edges-e0da2a9e-518a90db.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-e6883ad2.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e576fc02.js → flowDb-956e92f1-e048c2be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-2e298d01.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-dd7b150a.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-5b79575c.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-3016f40a.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-3e19170f.js → graph-14702d8a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-eb9c86de.js → index-3862675e-f18b534b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +1335 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-b4280e4d.js → infoDiagram-f8f76790-64154b83.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-556091f8.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-08436411.js → layout-5a3b2123.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-683c4f3b.js → line-2272a8c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-cee6d791.js → linear-35bcf273.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-a0bf0b1a.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-3730d5c4.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-12a20fed.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-b9732102.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-a2e72776.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-8b7a76bb.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-e65853ac.js → stateDiagram-587899a1-b8a74083.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-6f58a44b.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-df25b934.js → styles-6aaf32cf-f1d54e34.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-88357141.js → styles-9a916d00-980de489.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-d600174d.js → styles-c10674c1-3c03abde.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-4adc3e0b.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-42816fa1.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-621eb66a.js → xychartDiagram-e933f94c-acbc628a.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 +10 -11
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
- rasa/core/channels/inspector/src/components/DialogueStack.tsx +5 -7
- rasa/core/channels/inspector/src/helpers/formatters.ts +3 -24
- rasa/core/channels/inspector/src/theme/base/styles.ts +1 -19
- rasa/core/channels/inspector/src/types.ts +0 -4
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +43 -23
- rasa/core/channels/voice_stream/voice_channel.py +5 -3
- rasa/core/constants.py +0 -4
- rasa/core/policies/enterprise_search_policy.py +6 -11
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/flow_executor.py +45 -415
- rasa/core/processor.py +1 -6
- rasa/core/run.py +14 -11
- rasa/core/utils.py +1 -21
- rasa/dialogue_understanding/commands/__init__.py +0 -8
- rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -97
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +0 -11
- rasa/dialogue_understanding/commands/clarify_command.py +0 -10
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +0 -11
- rasa/dialogue_understanding/commands/start_flow_command.py +8 -164
- rasa/dialogue_understanding/commands/utils.py +2 -6
- rasa/dialogue_understanding/generator/command_parser.py +0 -4
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -50
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +6 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +6 -7
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -41
- rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -163
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +8 -52
- rasa/dialogue_understanding/processor/command_processor.py +15 -31
- rasa/dialogue_understanding/stack/dialogue_stack.py +2 -123
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +0 -57
- rasa/dialogue_understanding/stack/utils.py +2 -17
- rasa/dialogue_understanding_test/du_test_runner.py +2 -7
- rasa/e2e_test/e2e_test_runner.py +0 -5
- rasa/engine/storage/local_model_storage.py +45 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +20 -14
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/server.py +0 -10
- rasa/shared/constants.py +0 -5
- rasa/shared/core/constants.py +1 -12
- rasa/shared/core/domain.py +58 -11
- rasa/shared/core/events.py +0 -319
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +2 -2
- rasa/shared/core/flows/flows_yaml_schema.json +186 -112
- rasa/shared/core/flows/steps/call.py +5 -53
- rasa/shared/core/flows/validation.py +7 -46
- rasa/shared/core/flows/yaml_flows_io.py +16 -8
- rasa/shared/core/slots.py +4 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- 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 +7 -39
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
- rasa/shared/providers/llm/litellm_router_llm_client.py +4 -8
- rasa/shared/providers/llm/llm_client.py +3 -7
- rasa/shared/providers/llm/llm_response.py +0 -49
- rasa/shared/providers/llm/self_hosted_llm_client.py +4 -8
- rasa/shared/utils/llm.py +5 -28
- rasa/shared/utils/schemas/events.py +0 -42
- rasa/studio/upload.py +16 -47
- rasa/telemetry.py +97 -23
- rasa/tracing/instrumentation/instrumentation.py +2 -4
- rasa/utils/common.py +0 -79
- 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/validator.py +7 -3
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/METADATA +3 -3
- {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/RECORD +405 -174
- rasa/agents/agent_factory.py +0 -122
- rasa/agents/agent_manager.py +0 -162
- rasa/agents/constants.py +0 -32
- rasa/agents/core/agent_protocol.py +0 -108
- rasa/agents/core/types.py +0 -70
- rasa/agents/exceptions.py +0 -8
- rasa/agents/protocol/__init__.py +0 -5
- rasa/agents/protocol/a2a/a2a_agent.py +0 -51
- rasa/agents/protocol/mcp/mcp_base_agent.py +0 -674
- rasa/agents/protocol/mcp/mcp_open_agent.py +0 -276
- rasa/agents/protocol/mcp/mcp_task_agent.py +0 -469
- rasa/agents/schemas/__init__.py +0 -12
- rasa/agents/schemas/agent_input.py +0 -38
- rasa/agents/schemas/agent_output.py +0 -26
- rasa/agents/schemas/agent_tool_result.py +0 -51
- rasa/agents/schemas/agent_tool_schema.py +0 -134
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +0 -15
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +0 -17
- rasa/agents/utils.py +0 -72
- rasa/core/available_agents.py +0 -196
- rasa/core/channels/inspector/dist/assets/channel-c436ca7c.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-50dd656b.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b2aeaf8.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-1bd9135e.js +0 -1353
- rasa/core/policies/flows/mcp_tool_executor.py +0 -277
- rasa/dialogue_understanding/commands/continue_agent_command.py +0 -91
- rasa/dialogue_understanding/commands/restart_agent_command.py +0 -162
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +0 -61
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +0 -81
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +0 -81
- rasa/shared/agents/utils.py +0 -35
- rasa/shared/utils/mcp/server_connection.py +0 -157
- /rasa/{agents → builder}/__init__.py +0 -0
- /rasa/{agents/core → builder/copilot}/__init__.py +0 -0
- /rasa/{agents/protocol/a2a → builder/copilot/prompts}/__init__.py +0 -0
- /rasa/{agents/protocol/mcp → builder/copilot/templated_messages}/__init__.py +0 -0
- /rasa/{agents/templates → builder/document_retrieval}/__init__.py +0 -0
- /rasa/{shared/agents → cli/project_templates/finance/actions/accounts}/__init__.py +0 -0
- /rasa/{shared/utils/mcp → cli/project_templates/finance/actions/cards}/__init__.py +0 -0
- {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/entry_points.txt +0 -0
|
@@ -1,469 +0,0 @@
|
|
|
1
|
-
import importlib
|
|
2
|
-
import json
|
|
3
|
-
import re
|
|
4
|
-
from typing import Any, Dict, List, Optional, Tuple
|
|
5
|
-
|
|
6
|
-
import structlog
|
|
7
|
-
from jinja2 import Template
|
|
8
|
-
from pypred import Predicate
|
|
9
|
-
|
|
10
|
-
from rasa.agents.constants import (
|
|
11
|
-
KEY_CONTENT,
|
|
12
|
-
KEY_ROLE,
|
|
13
|
-
KEY_TOOL_CALL_ID,
|
|
14
|
-
)
|
|
15
|
-
from rasa.agents.core.types import AgentStatus, ProtocolType
|
|
16
|
-
from rasa.agents.protocol.mcp.mcp_base_agent import MCPBaseAgent
|
|
17
|
-
from rasa.agents.schemas import (
|
|
18
|
-
AgentInput,
|
|
19
|
-
AgentOutput,
|
|
20
|
-
AgentToolResult,
|
|
21
|
-
AgentToolSchema,
|
|
22
|
-
)
|
|
23
|
-
from rasa.agents.schemas.agent_input import AgentInputSlot
|
|
24
|
-
from rasa.core.available_agents import AgentMCPServerConfig, ProtocolConfig
|
|
25
|
-
from rasa.shared.agents.utils import make_agent_identifier
|
|
26
|
-
from rasa.shared.constants import (
|
|
27
|
-
ROLE_TOOL,
|
|
28
|
-
)
|
|
29
|
-
from rasa.shared.core.events import SlotSet
|
|
30
|
-
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
31
|
-
|
|
32
|
-
DEFAULT_TASK_AGENT_PROMPT_TEMPLATE = importlib.resources.read_text(
|
|
33
|
-
"rasa.agents.templates", "mcp_task_agent_prompt_template.jinja2"
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
structlogger = structlog.get_logger()
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class MCPTaskAgent(MCPBaseAgent):
|
|
40
|
-
"""MCPTaskAgent client implementation"""
|
|
41
|
-
|
|
42
|
-
def __init__(
|
|
43
|
-
self,
|
|
44
|
-
name: str,
|
|
45
|
-
description: str,
|
|
46
|
-
protocol_type: ProtocolConfig,
|
|
47
|
-
server_configs: List[AgentMCPServerConfig],
|
|
48
|
-
llm_config: Optional[Dict[str, Any]] = None,
|
|
49
|
-
prompt_template: Optional[str] = None,
|
|
50
|
-
timeout: Optional[int] = None,
|
|
51
|
-
max_retries: Optional[int] = None,
|
|
52
|
-
):
|
|
53
|
-
super().__init__(
|
|
54
|
-
name,
|
|
55
|
-
description,
|
|
56
|
-
protocol_type,
|
|
57
|
-
server_configs,
|
|
58
|
-
llm_config,
|
|
59
|
-
prompt_template,
|
|
60
|
-
timeout,
|
|
61
|
-
max_retries,
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
-
@property
|
|
65
|
-
def protocol_type(self) -> ProtocolType:
|
|
66
|
-
return ProtocolType.MCP_TASK
|
|
67
|
-
|
|
68
|
-
@staticmethod
|
|
69
|
-
def get_default_prompt_template() -> str:
|
|
70
|
-
return DEFAULT_TASK_AGENT_PROMPT_TEMPLATE
|
|
71
|
-
|
|
72
|
-
@classmethod
|
|
73
|
-
def get_agent_specific_built_in_tools(
|
|
74
|
-
cls, agent_input: AgentInput
|
|
75
|
-
) -> List[AgentToolSchema]:
|
|
76
|
-
"""Get agentic specific built-in tools."""
|
|
77
|
-
slot_names = cls._get_slot_names_from_exit_conditions(agent_input)
|
|
78
|
-
slot_definitions = [
|
|
79
|
-
slot for slot in agent_input.slots if slot.name in slot_names
|
|
80
|
-
]
|
|
81
|
-
|
|
82
|
-
return [
|
|
83
|
-
AgentToolSchema.from_openai_json_format(
|
|
84
|
-
cls.get_slot_specific_set_slot_tool(slot)
|
|
85
|
-
)
|
|
86
|
-
for slot in slot_definitions
|
|
87
|
-
]
|
|
88
|
-
|
|
89
|
-
@classmethod
|
|
90
|
-
def _get_slot_names_from_exit_conditions(cls, agent_input: AgentInput) -> List[str]:
|
|
91
|
-
"""Extract valid slot names from exit conditions."""
|
|
92
|
-
exit_conditions = agent_input.metadata.get("exit_if", [])
|
|
93
|
-
|
|
94
|
-
# Find all unique names matching "slots.<name>"
|
|
95
|
-
extracted_slot_names = {
|
|
96
|
-
name
|
|
97
|
-
for condition in exit_conditions
|
|
98
|
-
for name in re.findall(r"\bslots\.(\w+)", condition)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
slot_names = agent_input.slot_names
|
|
102
|
-
|
|
103
|
-
# Keep only slots that actually exist in agent_input.slots
|
|
104
|
-
valid_slot_names = [
|
|
105
|
-
slot_name for slot_name in extracted_slot_names if slot_name in slot_names
|
|
106
|
-
]
|
|
107
|
-
|
|
108
|
-
structlogger.debug(
|
|
109
|
-
"mcp_task_agent.get_agent_specific_built_in_tools.slot_names",
|
|
110
|
-
exit_conditions=exit_conditions,
|
|
111
|
-
slot_names=valid_slot_names,
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
return valid_slot_names
|
|
115
|
-
|
|
116
|
-
@classmethod
|
|
117
|
-
def get_slot_specific_set_slot_tool(cls, slot: AgentInputSlot) -> Dict[str, Any]:
|
|
118
|
-
"""Get the set slot tool."""
|
|
119
|
-
tool_description = f"Set the slot '{slot.name}' to a specific value. "
|
|
120
|
-
tool_description += f"The slot type is {slot.type}."
|
|
121
|
-
if slot.type == "categorical":
|
|
122
|
-
tool_description += f" The allowed values are: {slot.allowed_values}."
|
|
123
|
-
|
|
124
|
-
return {
|
|
125
|
-
"type": "function",
|
|
126
|
-
"function": {
|
|
127
|
-
"name": f"set_slot_{slot.name}",
|
|
128
|
-
"description": tool_description,
|
|
129
|
-
"parameters": {
|
|
130
|
-
"type": "object",
|
|
131
|
-
"properties": {
|
|
132
|
-
"slot_value": {
|
|
133
|
-
"type": "string",
|
|
134
|
-
"description": "The value to assign to the slot.",
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
"required": ["slot_value"],
|
|
138
|
-
"additionalProperties": False,
|
|
139
|
-
},
|
|
140
|
-
"strict": True,
|
|
141
|
-
},
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
@classmethod
|
|
145
|
-
def _is_exit_conditions_met(
|
|
146
|
-
cls, agent_input: AgentInput, slots: Dict[str, Any]
|
|
147
|
-
) -> Tuple[bool, Optional[str]]:
|
|
148
|
-
"""Check if the exit conditions are met.
|
|
149
|
-
|
|
150
|
-
Args:
|
|
151
|
-
agent_input: The agent input.
|
|
152
|
-
slots: The slots to check the exit conditions against.
|
|
153
|
-
|
|
154
|
-
Returns:
|
|
155
|
-
A tuple containing a boolean indicating if the exit conditions are met
|
|
156
|
-
and a string indicating if an internal error occurred.
|
|
157
|
-
"""
|
|
158
|
-
if not slots:
|
|
159
|
-
return False, None
|
|
160
|
-
|
|
161
|
-
exit_conditions = agent_input.metadata.get("exit_if", [])
|
|
162
|
-
current_context = {"slots": slots}
|
|
163
|
-
|
|
164
|
-
internal_error = None
|
|
165
|
-
all_conditions_met = True
|
|
166
|
-
|
|
167
|
-
for condition in exit_conditions:
|
|
168
|
-
try:
|
|
169
|
-
rendered_template = Template(condition).render(current_context)
|
|
170
|
-
predicate = Predicate(rendered_template)
|
|
171
|
-
condition_result = predicate.evaluate(current_context)
|
|
172
|
-
structlogger.debug(
|
|
173
|
-
"mcp_task_agent.is_exit_conditions_met.predicate.result",
|
|
174
|
-
predicate=predicate.description(),
|
|
175
|
-
condition_result=condition_result,
|
|
176
|
-
slots=slots,
|
|
177
|
-
rendered_template=rendered_template,
|
|
178
|
-
)
|
|
179
|
-
|
|
180
|
-
# All conditions must be met (AND logic)
|
|
181
|
-
if not condition_result:
|
|
182
|
-
all_conditions_met = False
|
|
183
|
-
break
|
|
184
|
-
|
|
185
|
-
except (TypeError, Exception) as e:
|
|
186
|
-
structlogger.error(
|
|
187
|
-
"mcp_task_agent.is_exit_conditions_met.predicate.error",
|
|
188
|
-
predicate=condition,
|
|
189
|
-
error=str(e),
|
|
190
|
-
)
|
|
191
|
-
all_conditions_met = False
|
|
192
|
-
internal_error = str(e)
|
|
193
|
-
break
|
|
194
|
-
|
|
195
|
-
structlogger.debug(
|
|
196
|
-
"mcp_task_agent.is_exit_conditions_met.result",
|
|
197
|
-
all_conditions_met=all_conditions_met,
|
|
198
|
-
internal_error=internal_error,
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
return all_conditions_met, internal_error
|
|
202
|
-
|
|
203
|
-
def _get_slot_name_from_tool_name(self, tool_name: str) -> Optional[str]:
|
|
204
|
-
"""Get the slot name from the tool name."""
|
|
205
|
-
match = re.match(r"^set_slot_(\w+)$", tool_name)
|
|
206
|
-
if match:
|
|
207
|
-
return match.group(1)
|
|
208
|
-
return None
|
|
209
|
-
|
|
210
|
-
def _run_set_slot_tool(
|
|
211
|
-
self, slot_name: str, arguments: Dict[str, Any]
|
|
212
|
-
) -> Dict[str, Any]:
|
|
213
|
-
"""Run the set slot tool."""
|
|
214
|
-
slot_value = arguments.get("slot_value")
|
|
215
|
-
|
|
216
|
-
# Handle type conversion for common cases
|
|
217
|
-
if isinstance(slot_value, str):
|
|
218
|
-
# Convert common boolean strings to actual booleans
|
|
219
|
-
if slot_value.lower() == "true":
|
|
220
|
-
slot_value = True
|
|
221
|
-
elif slot_value.lower() == "false":
|
|
222
|
-
slot_value = False
|
|
223
|
-
|
|
224
|
-
return {slot_name: slot_value}
|
|
225
|
-
|
|
226
|
-
def _generate_agent_task_completed_output(
|
|
227
|
-
self,
|
|
228
|
-
agent_input: AgentInput,
|
|
229
|
-
slots: Dict[str, Any],
|
|
230
|
-
tool_results: Dict[str, AgentToolResult],
|
|
231
|
-
) -> AgentOutput:
|
|
232
|
-
"""Generate an agent task completed output."""
|
|
233
|
-
_slot_names_to_be_filled = self._get_slot_names_from_exit_conditions(
|
|
234
|
-
agent_input
|
|
235
|
-
)
|
|
236
|
-
return AgentOutput(
|
|
237
|
-
id=agent_input.id,
|
|
238
|
-
status=AgentStatus.COMPLETED,
|
|
239
|
-
events=[
|
|
240
|
-
SlotSet(slot_name, slot_value)
|
|
241
|
-
for slot_name, slot_value in slots.items()
|
|
242
|
-
if slot_name in _slot_names_to_be_filled
|
|
243
|
-
],
|
|
244
|
-
tool_results=self._get_tool_results_for_agent_output(
|
|
245
|
-
agent_input, tool_results
|
|
246
|
-
),
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
def render_prompt_template(self, context: AgentInput) -> str:
|
|
250
|
-
"""Render the prompt template with the provided inputs."""
|
|
251
|
-
slot_names = self._get_slot_names_from_exit_conditions(context)
|
|
252
|
-
|
|
253
|
-
return Template(self.prompt_template).render(
|
|
254
|
-
**context.model_dump(exclude={"id", "timestamp", "events"}),
|
|
255
|
-
description=self._description,
|
|
256
|
-
slot_names=slot_names,
|
|
257
|
-
)
|
|
258
|
-
|
|
259
|
-
async def send_message(self, agent_input: AgentInput) -> AgentOutput:
|
|
260
|
-
"""Send a message to the LLM and return the response."""
|
|
261
|
-
messages = self.build_messages_for_llm_request(agent_input)
|
|
262
|
-
tool_results: Dict[str, AgentToolResult] = {}
|
|
263
|
-
|
|
264
|
-
_slot_values = {slot.name: slot.value for slot in agent_input.slots}
|
|
265
|
-
_available_tools = self.get_available_tools(agent_input)
|
|
266
|
-
_available_tools_names = [tool.name for tool in _available_tools]
|
|
267
|
-
|
|
268
|
-
# Convert available tools to OpenAI JSON format
|
|
269
|
-
tools_in_openai_format = [
|
|
270
|
-
tool.to_openai_json_format() for tool in _available_tools
|
|
271
|
-
]
|
|
272
|
-
|
|
273
|
-
for iteration in range(self.MAX_ITERATIONS):
|
|
274
|
-
try:
|
|
275
|
-
# Make the LLM call using the llm_client
|
|
276
|
-
structlogger.info(
|
|
277
|
-
"mcp_task_agent.send_message.sending_message_to_llm",
|
|
278
|
-
messages=messages,
|
|
279
|
-
event_info=f"Sending message to LLM (iteration {iteration + 1})",
|
|
280
|
-
agent_name=self._name,
|
|
281
|
-
agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
|
|
282
|
-
)
|
|
283
|
-
llm_response = LLMResponse.ensure_llm_response(
|
|
284
|
-
await self.llm_client.acompletion(
|
|
285
|
-
messages, tools=tools_in_openai_format
|
|
286
|
-
)
|
|
287
|
-
)
|
|
288
|
-
|
|
289
|
-
# If no response from LLM, return an error output.
|
|
290
|
-
if llm_response is None or not (
|
|
291
|
-
llm_response.choices or llm_response.tool_calls
|
|
292
|
-
):
|
|
293
|
-
event_info = "No response from LLM."
|
|
294
|
-
structlogger.warning(
|
|
295
|
-
"mcp_task_agent.send_message.no_llm_response",
|
|
296
|
-
event_info=event_info,
|
|
297
|
-
agent_name=self._name,
|
|
298
|
-
agent_id=str(
|
|
299
|
-
make_agent_identifier(self._name, self.protocol_type)
|
|
300
|
-
),
|
|
301
|
-
)
|
|
302
|
-
return AgentOutput(
|
|
303
|
-
id=agent_input.id,
|
|
304
|
-
status=AgentStatus.RECOVERABLE_ERROR,
|
|
305
|
-
error_message=event_info,
|
|
306
|
-
tool_results=self._get_tool_results_for_agent_output(
|
|
307
|
-
agent_input, tool_results
|
|
308
|
-
),
|
|
309
|
-
)
|
|
310
|
-
|
|
311
|
-
# If no tool calls, return the response directly with input required.
|
|
312
|
-
if not llm_response.tool_calls and len(llm_response.choices) == 1:
|
|
313
|
-
return AgentOutput(
|
|
314
|
-
id=agent_input.id,
|
|
315
|
-
status=AgentStatus.INPUT_REQUIRED,
|
|
316
|
-
response_message=llm_response.choices[0],
|
|
317
|
-
tool_results=self._get_tool_results_for_agent_output(
|
|
318
|
-
agent_input, tool_results
|
|
319
|
-
),
|
|
320
|
-
)
|
|
321
|
-
|
|
322
|
-
# If there are tool calls, process them.
|
|
323
|
-
if llm_response.tool_calls:
|
|
324
|
-
# Add the assistant message with tool calls to the messages.
|
|
325
|
-
messages.append(
|
|
326
|
-
self._get_assistant_message_with_tool_calls(llm_response)
|
|
327
|
-
)
|
|
328
|
-
for tool_call in llm_response.tool_calls:
|
|
329
|
-
structlogger.info(
|
|
330
|
-
"mcp_task_agent.send_message.tool_call",
|
|
331
|
-
event_info=(
|
|
332
|
-
f"Processing tool call `{tool_call.tool_name}` with "
|
|
333
|
-
f"args: {tool_call.tool_args}"
|
|
334
|
-
),
|
|
335
|
-
tool_name=tool_call.tool_name,
|
|
336
|
-
tool_args=json.dumps(tool_call.tool_args),
|
|
337
|
-
agent_name=self._name,
|
|
338
|
-
agent_id=str(
|
|
339
|
-
make_agent_identifier(self._name, self.protocol_type)
|
|
340
|
-
),
|
|
341
|
-
)
|
|
342
|
-
|
|
343
|
-
# If the tool is not available, return a fatal error output.
|
|
344
|
-
if tool_call.tool_name not in _available_tools_names:
|
|
345
|
-
event_info = f"Tool {tool_call.tool_name} is not available."
|
|
346
|
-
structlogger.error(
|
|
347
|
-
"mcp_task_agent.send_message.tool_not_available",
|
|
348
|
-
tool_name=tool_call.tool_name,
|
|
349
|
-
event_info=event_info,
|
|
350
|
-
user_message=agent_input.user_message,
|
|
351
|
-
)
|
|
352
|
-
return AgentOutput(
|
|
353
|
-
id=agent_input.id,
|
|
354
|
-
status=AgentStatus.FATAL_ERROR,
|
|
355
|
-
error_message=event_info,
|
|
356
|
-
)
|
|
357
|
-
|
|
358
|
-
if slot_name := self._get_slot_name_from_tool_name(
|
|
359
|
-
tool_call.tool_name
|
|
360
|
-
):
|
|
361
|
-
if (
|
|
362
|
-
slot_name in _slot_values
|
|
363
|
-
and "slot_value" in tool_call.tool_args
|
|
364
|
-
):
|
|
365
|
-
_slot_values.update(
|
|
366
|
-
self._run_set_slot_tool(
|
|
367
|
-
slot_name, tool_call.tool_args
|
|
368
|
-
)
|
|
369
|
-
)
|
|
370
|
-
|
|
371
|
-
# Add the tool call message to the messages for
|
|
372
|
-
# slot-setting tools
|
|
373
|
-
messages.append(
|
|
374
|
-
{
|
|
375
|
-
KEY_ROLE: ROLE_TOOL,
|
|
376
|
-
KEY_TOOL_CALL_ID: tool_call.id,
|
|
377
|
-
KEY_CONTENT: f"Slot {slot_name} set to "
|
|
378
|
-
f"{tool_call.tool_args.get('slot_value')}",
|
|
379
|
-
}
|
|
380
|
-
)
|
|
381
|
-
else:
|
|
382
|
-
return AgentOutput(
|
|
383
|
-
id=agent_input.id,
|
|
384
|
-
status=AgentStatus.FATAL_ERROR,
|
|
385
|
-
error_message=(
|
|
386
|
-
f"The slot `{slot_name}` that the tool "
|
|
387
|
-
f"`{tool_call.tool_name}` is trying to set "
|
|
388
|
-
f"is not found in agent input."
|
|
389
|
-
),
|
|
390
|
-
)
|
|
391
|
-
else:
|
|
392
|
-
# Execute the tool call.
|
|
393
|
-
tool_output = await self._execute_tool_call(
|
|
394
|
-
tool_call.tool_name,
|
|
395
|
-
tool_call.tool_args,
|
|
396
|
-
)
|
|
397
|
-
|
|
398
|
-
# If the tool call failed, generate an agent error output.
|
|
399
|
-
if tool_output.is_error or tool_output.result is None:
|
|
400
|
-
return self._generate_agent_error_output(
|
|
401
|
-
tool_output, agent_input, tool_call
|
|
402
|
-
)
|
|
403
|
-
|
|
404
|
-
# Store the tool output in the tool_results.
|
|
405
|
-
tool_results[tool_call.id] = tool_output
|
|
406
|
-
|
|
407
|
-
# Add the tool call message to the messages.
|
|
408
|
-
messages.append(
|
|
409
|
-
{
|
|
410
|
-
KEY_ROLE: ROLE_TOOL,
|
|
411
|
-
KEY_TOOL_CALL_ID: tool_call.id,
|
|
412
|
-
KEY_CONTENT: tool_output.result,
|
|
413
|
-
}
|
|
414
|
-
)
|
|
415
|
-
|
|
416
|
-
exit_met, internal_error = self._is_exit_conditions_met(
|
|
417
|
-
agent_input, _slot_values
|
|
418
|
-
)
|
|
419
|
-
|
|
420
|
-
# Agent signals task completion if exit conditions are met.
|
|
421
|
-
if exit_met:
|
|
422
|
-
return self._generate_agent_task_completed_output(
|
|
423
|
-
agent_input, _slot_values, tool_results
|
|
424
|
-
)
|
|
425
|
-
|
|
426
|
-
# If an internal error occurred while checking the exit
|
|
427
|
-
# conditions, return a fatal error output.
|
|
428
|
-
if internal_error:
|
|
429
|
-
return AgentOutput(
|
|
430
|
-
id=agent_input.id,
|
|
431
|
-
status=AgentStatus.FATAL_ERROR,
|
|
432
|
-
response_message=(
|
|
433
|
-
"An internal error occurred while checking the "
|
|
434
|
-
"exit conditions."
|
|
435
|
-
),
|
|
436
|
-
tool_results=self._get_tool_results_for_agent_output(
|
|
437
|
-
agent_input, tool_results
|
|
438
|
-
),
|
|
439
|
-
error_message=internal_error,
|
|
440
|
-
)
|
|
441
|
-
|
|
442
|
-
except Exception as e:
|
|
443
|
-
structlogger.error(
|
|
444
|
-
"mcp_task_agent.send_message.error_in_agent_loop",
|
|
445
|
-
event_info=f"Failed to send message: {e}",
|
|
446
|
-
user_message=agent_input.user_message,
|
|
447
|
-
agent_name=self._name,
|
|
448
|
-
agent_id=str(make_agent_identifier(self._name, self.protocol_type)),
|
|
449
|
-
)
|
|
450
|
-
return AgentOutput(
|
|
451
|
-
id=agent_input.id,
|
|
452
|
-
status=AgentStatus.FATAL_ERROR,
|
|
453
|
-
response_message=f"I encountered an error: {e!s}",
|
|
454
|
-
tool_results=self._get_tool_results_for_agent_output(
|
|
455
|
-
agent_input, tool_results
|
|
456
|
-
),
|
|
457
|
-
error_message=str(e),
|
|
458
|
-
)
|
|
459
|
-
return AgentOutput(
|
|
460
|
-
id=agent_input.id,
|
|
461
|
-
status=AgentStatus.COMPLETED,
|
|
462
|
-
response_message=(
|
|
463
|
-
"I've completed my research but couldn't provide a final answer within"
|
|
464
|
-
"the allowed steps."
|
|
465
|
-
),
|
|
466
|
-
tool_results=self._get_tool_results_for_agent_output(
|
|
467
|
-
agent_input, tool_results
|
|
468
|
-
),
|
|
469
|
-
)
|
rasa/agents/schemas/__init__.py
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
from rasa.agents.schemas.agent_input import AgentInput
|
|
2
|
-
from rasa.agents.schemas.agent_output import AgentOutput
|
|
3
|
-
from rasa.agents.schemas.agent_tool_result import AgentToolResult
|
|
4
|
-
from rasa.agents.schemas.agent_tool_schema import AgentToolSchema, CustomToolSchema
|
|
5
|
-
|
|
6
|
-
__all__ = [
|
|
7
|
-
"AgentInput",
|
|
8
|
-
"AgentOutput",
|
|
9
|
-
"AgentToolSchema",
|
|
10
|
-
"AgentToolResult",
|
|
11
|
-
"CustomToolSchema",
|
|
12
|
-
]
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel
|
|
4
|
-
|
|
5
|
-
from rasa.shared.core.events import Event
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class AgentInputSlot(BaseModel):
|
|
9
|
-
"""A class that represents the schema of the input slot to the agent."""
|
|
10
|
-
|
|
11
|
-
name: str
|
|
12
|
-
value: Any
|
|
13
|
-
type: str
|
|
14
|
-
allowed_values: Optional[List[Any]] = None
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class AgentInput(BaseModel):
|
|
18
|
-
"""A class that represents the schema of the input to the agent."""
|
|
19
|
-
|
|
20
|
-
id: str
|
|
21
|
-
user_message: str
|
|
22
|
-
slots: List[AgentInputSlot]
|
|
23
|
-
conversation_history: str
|
|
24
|
-
events: List[Event]
|
|
25
|
-
metadata: Dict[str, Any]
|
|
26
|
-
timestamp: Optional[str] = None
|
|
27
|
-
|
|
28
|
-
class Config:
|
|
29
|
-
"""Skip validation for Event class as pydantic does not know how to
|
|
30
|
-
serialize or handle instances of the class.
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
arbitrary_types_allowed = True
|
|
34
|
-
|
|
35
|
-
@property
|
|
36
|
-
def slot_names(self) -> List[str]:
|
|
37
|
-
"""Get the names of the slots in the input."""
|
|
38
|
-
return [slot.name for slot in self.slots]
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel
|
|
4
|
-
|
|
5
|
-
from rasa.agents.core.types import AgentStatus
|
|
6
|
-
from rasa.shared.core.events import SlotSet
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class AgentOutput(BaseModel):
|
|
10
|
-
"""A class that represents the schema of the output from the agent."""
|
|
11
|
-
|
|
12
|
-
id: str
|
|
13
|
-
status: AgentStatus
|
|
14
|
-
response_message: Optional[str] = None
|
|
15
|
-
events: Optional[List[SlotSet]] = None
|
|
16
|
-
tool_results: Optional[List[List[Dict[str, Any]]]] = None
|
|
17
|
-
metadata: Optional[Dict[str, Any]] = None
|
|
18
|
-
timestamp: Optional[str] = None
|
|
19
|
-
error_message: Optional[str] = None
|
|
20
|
-
|
|
21
|
-
class Config:
|
|
22
|
-
"""Skip validation for SlotSet class as pydantic does not know how to
|
|
23
|
-
serialize or handle instances of the class.
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
arbitrary_types_allowed = True
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
from mcp.types import CallToolResult
|
|
5
|
-
from pydantic import BaseModel
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class AgentToolResult(BaseModel):
|
|
9
|
-
tool_name: str
|
|
10
|
-
result: Optional[str] = None
|
|
11
|
-
is_error: bool = False
|
|
12
|
-
error_message: Optional[str] = None
|
|
13
|
-
|
|
14
|
-
@classmethod
|
|
15
|
-
def from_mcp_tool_result(
|
|
16
|
-
cls, tool_name: str, tool_result: CallToolResult
|
|
17
|
-
) -> "AgentToolResult":
|
|
18
|
-
if tool_result.isError:
|
|
19
|
-
return cls(
|
|
20
|
-
tool_name=tool_name,
|
|
21
|
-
result=None,
|
|
22
|
-
is_error=tool_result.isError,
|
|
23
|
-
error_message=str(tool_result.content),
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
# try to use structured content if available
|
|
27
|
-
if tool_result.structuredContent:
|
|
28
|
-
return cls(
|
|
29
|
-
tool_name=tool_name,
|
|
30
|
-
result=json.dumps(tool_result.structuredContent),
|
|
31
|
-
is_error=tool_result.isError,
|
|
32
|
-
)
|
|
33
|
-
# fallback to content if structured content is not available
|
|
34
|
-
elif tool_result.content:
|
|
35
|
-
# TODO try to parse the content using the output schema defined
|
|
36
|
-
# in the tool schema (if present)
|
|
37
|
-
return cls(
|
|
38
|
-
tool_name=tool_name,
|
|
39
|
-
result=json.dumps(
|
|
40
|
-
[content.model_dump() for content in tool_result.content]
|
|
41
|
-
),
|
|
42
|
-
is_error=tool_result.isError,
|
|
43
|
-
)
|
|
44
|
-
# if no content is available, return None
|
|
45
|
-
else:
|
|
46
|
-
return cls(
|
|
47
|
-
tool_name=tool_name,
|
|
48
|
-
result=None,
|
|
49
|
-
is_error=tool_result.isError,
|
|
50
|
-
error_message="No content returned from tool `{tool_name}`",
|
|
51
|
-
)
|