rasa-pro 3.14.0.dev4__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 +10 -56
- 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 +4 -4
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-18042c22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.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-df71a04c.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.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-1c669cad.js → createText-2e5e7dd3-31422447.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-518a90db.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-e048c2be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.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-e1dc03e5.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-14702d8a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.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-faa9999b.js → infoDiagram-f8f76790-64154b83.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-5a3b2123.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-2272a8c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-35bcf273.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-b8a74083.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-f1d54e34.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-980de489.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-3c03abde.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.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 +4 -6
- 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 +49 -29
- rasa/core/channels/voice_stream/genesys.py +1 -1
- 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 -456
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/unexpected_intent_policy.py +0 -1
- rasa/core/processor.py +15 -18
- rasa/core/run.py +14 -11
- rasa/core/tracker_stores/tracker_store.py +7 -3
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +16 -16
- rasa/core/training/story_conflict.py +5 -5
- 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/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- 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 +2 -12
- rasa/engine/caching.py +2 -2
- rasa/engine/recipes/default_components.py +18 -10
- rasa/engine/storage/local_model_storage.py +45 -2
- rasa/graph_components/validators/default_recipe_validator.py +134 -134
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +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/model_manager/warm_rasa_process.py +1 -1
- rasa/nlu/extractors/extractor.py +1 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_manager.py +2 -11
- rasa/server.py +2 -14
- 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 -327
- 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 +17 -9
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +2 -5
- rasa/shared/exceptions.py +0 -4
- 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/shared/utils/yaml.py +1 -3
- rasa/studio/upload.py +16 -47
- rasa/telemetry.py +97 -23
- rasa/tracing/instrumentation/instrumentation.py +10 -12
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -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 +6 -2
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/tensorflow/rasa_layers.py +1 -1
- rasa/utils/train_utils.py +15 -15
- rasa/validator.py +21 -19
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/METADATA +17 -14
- {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/RECORD +431 -200
- rasa/agents/agent_factory.py +0 -122
- rasa/agents/agent_manager.py +0 -162
- rasa/agents/constants.py +0 -40
- rasa/agents/core/agent_protocol.py +0 -107
- 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 -662
- rasa/agents/protocol/mcp/mcp_base_agent.py +0 -676
- 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 -199
- rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
- rasa/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.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev4.dist-info → rasa_pro-3.14.0.dev5.dist-info}/entry_points.txt +0 -0
|
@@ -1,31 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Any, Dict
|
|
4
|
+
from typing import Any, Dict
|
|
5
5
|
|
|
6
|
-
from rasa.core.actions.action import Action
|
|
7
|
-
from rasa.core.channels import OutputChannel
|
|
8
|
-
from rasa.core.nlg import NaturalLanguageGenerator
|
|
9
6
|
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
10
|
-
from rasa.dialogue_understanding.stack.utils import top_user_flow_frame
|
|
11
7
|
from rasa.shared.constants import RASA_DEFAULT_FLOW_PATTERN_PREFIX
|
|
12
|
-
from rasa.shared.core.constants import (
|
|
13
|
-
ACTION_ASK_INTERRUPTED_FLOW_TO_CONTINUE,
|
|
14
|
-
ACTION_CANCEL_INTERRUPTED_FLOW,
|
|
15
|
-
ACTION_CONTINUE_INTERRUPTED_FLOW,
|
|
16
|
-
ACTION_SET_INTERRUPTED_FLOWS,
|
|
17
|
-
)
|
|
18
|
-
from rasa.shared.core.domain import Domain
|
|
19
|
-
from rasa.shared.core.events import Event, SlotSet
|
|
20
|
-
from rasa.shared.core.trackers import DialogueStateTracker
|
|
21
8
|
|
|
22
9
|
FLOW_PATTERN_CONTINUE_INTERRUPTED = (
|
|
23
10
|
RASA_DEFAULT_FLOW_PATTERN_PREFIX + "continue_interrupted"
|
|
24
11
|
)
|
|
25
|
-
INTERRUPTED_FLOWS_SLOT = "interrupted_flows"
|
|
26
|
-
INTERRUPTED_FLOW_TO_CONTINUE_SLOT = "interrupted_flow_to_continue"
|
|
27
|
-
MULTIPLE_FLOWS_INTERRUPTED_SLOT = "multiple_flows_interrupted"
|
|
28
|
-
CONFIRMATION_CONTINUE_INTERRUPTED_FLOW_SLOT = "confirmation_continue_interrupted_flow"
|
|
29
12
|
|
|
30
13
|
|
|
31
14
|
@dataclass
|
|
@@ -66,148 +49,3 @@ class ContinueInterruptedPatternFlowStackFrame(PatternFlowStackFrame):
|
|
|
66
49
|
and self.step_id == other.step_id
|
|
67
50
|
and self.previous_flow_name == other.previous_flow_name
|
|
68
51
|
)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
class ActionSetInterruptedFlows(Action):
|
|
72
|
-
def name(self) -> str:
|
|
73
|
-
return ACTION_SET_INTERRUPTED_FLOWS
|
|
74
|
-
|
|
75
|
-
async def run(
|
|
76
|
-
self,
|
|
77
|
-
output_channel: OutputChannel,
|
|
78
|
-
nlg: NaturalLanguageGenerator,
|
|
79
|
-
tracker: DialogueStateTracker,
|
|
80
|
-
domain: Domain,
|
|
81
|
-
metadata: Optional[Dict[Text, Any]] = None,
|
|
82
|
-
) -> list[Event]:
|
|
83
|
-
interrupted_flows_set = set()
|
|
84
|
-
interrupted_user_flow_stack_frames = tracker.stack.get_all_user_flow_frames()
|
|
85
|
-
|
|
86
|
-
for frame in interrupted_user_flow_stack_frames:
|
|
87
|
-
interrupted_flows_set.add(frame.flow_id)
|
|
88
|
-
|
|
89
|
-
interrupted_flows = list(interrupted_flows_set)
|
|
90
|
-
multiple_flows_interrupted = len(interrupted_flows) > 1
|
|
91
|
-
|
|
92
|
-
return [
|
|
93
|
-
SlotSet(INTERRUPTED_FLOWS_SLOT, interrupted_flows),
|
|
94
|
-
SlotSet(MULTIPLE_FLOWS_INTERRUPTED_SLOT, multiple_flows_interrupted),
|
|
95
|
-
]
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
class ActionAskInterruptedFlowToContinue(Action):
|
|
99
|
-
def name(self) -> str:
|
|
100
|
-
return ACTION_ASK_INTERRUPTED_FLOW_TO_CONTINUE
|
|
101
|
-
|
|
102
|
-
async def run(
|
|
103
|
-
self,
|
|
104
|
-
output_channel: OutputChannel,
|
|
105
|
-
nlg: NaturalLanguageGenerator,
|
|
106
|
-
tracker: DialogueStateTracker,
|
|
107
|
-
domain: Domain,
|
|
108
|
-
metadata: Optional[Dict[Text, Any]] = None,
|
|
109
|
-
) -> List[Event]:
|
|
110
|
-
interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
|
|
111
|
-
|
|
112
|
-
buttons = [
|
|
113
|
-
{
|
|
114
|
-
"title": flow_id,
|
|
115
|
-
"payload": f'/SetSlots{{"{INTERRUPTED_FLOW_TO_CONTINUE_SLOT}": '
|
|
116
|
-
f'"{flow_id}"}}',
|
|
117
|
-
}
|
|
118
|
-
for flow_id in interrupted_flows or []
|
|
119
|
-
]
|
|
120
|
-
buttons.append(
|
|
121
|
-
{
|
|
122
|
-
"title": "None of them",
|
|
123
|
-
"payload": f'/SetSlots{{"{INTERRUPTED_FLOW_TO_CONTINUE_SLOT}": '
|
|
124
|
-
f'"none"}}',
|
|
125
|
-
}
|
|
126
|
-
)
|
|
127
|
-
|
|
128
|
-
await output_channel.send_text_with_buttons(
|
|
129
|
-
tracker.sender_id,
|
|
130
|
-
"You previously started several other tasks. "
|
|
131
|
-
"Would you like to resume any of them?",
|
|
132
|
-
buttons=buttons,
|
|
133
|
-
)
|
|
134
|
-
|
|
135
|
-
return []
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
class ActionContinueInterruptedFlow(Action):
|
|
139
|
-
def name(self) -> str:
|
|
140
|
-
return ACTION_CONTINUE_INTERRUPTED_FLOW
|
|
141
|
-
|
|
142
|
-
async def run(
|
|
143
|
-
self,
|
|
144
|
-
output_channel: OutputChannel,
|
|
145
|
-
nlg: NaturalLanguageGenerator,
|
|
146
|
-
tracker: DialogueStateTracker,
|
|
147
|
-
domain: Domain,
|
|
148
|
-
metadata: Optional[Dict[Text, Any]] = None,
|
|
149
|
-
) -> List[Event]:
|
|
150
|
-
from rasa.dialogue_understanding.commands import StartFlowCommand
|
|
151
|
-
|
|
152
|
-
# get all necessary slot values
|
|
153
|
-
multiple = tracker.get_slot(MULTIPLE_FLOWS_INTERRUPTED_SLOT)
|
|
154
|
-
selected_flow = tracker.get_slot(INTERRUPTED_FLOW_TO_CONTINUE_SLOT)
|
|
155
|
-
interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
|
|
156
|
-
|
|
157
|
-
original_user_frame = top_user_flow_frame(tracker.stack)
|
|
158
|
-
|
|
159
|
-
# case of multiple interrupted flows, where the user selected a flow to continue
|
|
160
|
-
if multiple:
|
|
161
|
-
flow_id = selected_flow if selected_flow else None
|
|
162
|
-
# case of single interrupted flow, so there is only one flow to continue
|
|
163
|
-
else:
|
|
164
|
-
flow_id = interrupted_flows[0] if interrupted_flows else None
|
|
165
|
-
|
|
166
|
-
event_list = []
|
|
167
|
-
if flow_id:
|
|
168
|
-
# TODO: refactor to avoid creating a StartFlowCommand first
|
|
169
|
-
# resume the flow with the provided flow id
|
|
170
|
-
start_flow_command = StartFlowCommand(flow_id)
|
|
171
|
-
event_list = start_flow_command.resume_flow(
|
|
172
|
-
tracker, tracker.stack, original_user_frame
|
|
173
|
-
)
|
|
174
|
-
else:
|
|
175
|
-
await output_channel.send_text_message(
|
|
176
|
-
tracker.sender_id,
|
|
177
|
-
"You haven't selected a valid task to resume. "
|
|
178
|
-
"Please specify the task you would like to continue.",
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
return event_list
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
class ActionCancelInterruptedFlow(Action):
|
|
185
|
-
def name(self) -> str:
|
|
186
|
-
return ACTION_CANCEL_INTERRUPTED_FLOW
|
|
187
|
-
|
|
188
|
-
async def run(
|
|
189
|
-
self,
|
|
190
|
-
output_channel: OutputChannel,
|
|
191
|
-
nlg: NaturalLanguageGenerator,
|
|
192
|
-
tracker: DialogueStateTracker,
|
|
193
|
-
domain: Domain,
|
|
194
|
-
metadata: Optional[Dict[Text, Any]] = None,
|
|
195
|
-
) -> List[Event]:
|
|
196
|
-
from rasa.dialogue_understanding.commands import CancelFlowCommand
|
|
197
|
-
|
|
198
|
-
interrupted_flows = tracker.get_slot(INTERRUPTED_FLOWS_SLOT) or []
|
|
199
|
-
|
|
200
|
-
event_list = []
|
|
201
|
-
for flow_id in interrupted_flows:
|
|
202
|
-
# TODO: refactor to avoid creating a CancelFlowCommand first
|
|
203
|
-
cancel_flow_command = CancelFlowCommand()
|
|
204
|
-
event_list.extend(
|
|
205
|
-
cancel_flow_command.cancel_flow(tracker, tracker.stack, flow_id)
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
return event_list + [
|
|
209
|
-
SlotSet(INTERRUPTED_FLOWS_SLOT, None),
|
|
210
|
-
SlotSet(INTERRUPTED_FLOW_TO_CONTINUE_SLOT, None),
|
|
211
|
-
SlotSet(MULTIPLE_FLOWS_INTERRUPTED_SLOT, None),
|
|
212
|
-
SlotSet(CONFIRMATION_CONTINUE_INTERRUPTED_FLOW_SLOT, None),
|
|
213
|
-
]
|
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
version: "3.1"
|
|
2
2
|
responses:
|
|
3
3
|
|
|
4
|
-
utter_ask_continue_interrupted_flow:
|
|
5
|
-
- text: "Would you like to continue with {{ context.previous_flow_name }}?"
|
|
6
|
-
metadata:
|
|
7
|
-
rephrase: True
|
|
8
|
-
template: jinja
|
|
9
|
-
buttons:
|
|
10
|
-
- title: "Yes"
|
|
11
|
-
payload: "/SetSlots(confirmation_continue_interrupted_flow=true)"
|
|
12
|
-
- title: "No"
|
|
13
|
-
payload: "/SetSlots(confirmation_continue_interrupted_flow=false)"
|
|
14
|
-
|
|
15
4
|
utter_ask_rephrase:
|
|
16
5
|
- text: I’m sorry I am unable to understand you, could you please rephrase?
|
|
17
6
|
|
|
@@ -64,6 +53,12 @@ responses:
|
|
|
64
53
|
rephrase: True
|
|
65
54
|
template: jinja
|
|
66
55
|
|
|
56
|
+
utter_flow_continue_interrupted:
|
|
57
|
+
- text: "Let's continue with {{ context.previous_flow_name }}."
|
|
58
|
+
metadata:
|
|
59
|
+
rephrase: True
|
|
60
|
+
template: jinja
|
|
61
|
+
|
|
67
62
|
utter_free_chitchat_response:
|
|
68
63
|
- text: "Sorry, I'm not able to answer that right now."
|
|
69
64
|
metadata:
|
|
@@ -86,7 +81,7 @@ responses:
|
|
|
86
81
|
rephrase: True
|
|
87
82
|
|
|
88
83
|
utter_inform_hangup:
|
|
89
|
-
- text:
|
|
84
|
+
- text: I haven’t heard from you, so I’ll end our conversation shortly.
|
|
90
85
|
metadata:
|
|
91
86
|
rephrase: True
|
|
92
87
|
|
|
@@ -129,19 +124,6 @@ slots:
|
|
|
129
124
|
type: float
|
|
130
125
|
initial_value: 0.0
|
|
131
126
|
max_value: 1000000
|
|
132
|
-
interrupted_flows:
|
|
133
|
-
type: list
|
|
134
|
-
multiple_flows_interrupted:
|
|
135
|
-
type: bool
|
|
136
|
-
initial_value: false
|
|
137
|
-
confirmation_continue_interrupted_flow:
|
|
138
|
-
type: bool
|
|
139
|
-
mappings:
|
|
140
|
-
- type: from_llm
|
|
141
|
-
interrupted_flow_to_continue:
|
|
142
|
-
type: text
|
|
143
|
-
mappings:
|
|
144
|
-
- type: from_llm
|
|
145
127
|
|
|
146
128
|
flows:
|
|
147
129
|
pattern_cancel_flow:
|
|
@@ -228,33 +210,7 @@ flows:
|
|
|
228
210
|
description: Conversation repair flow for managing when users switch between different flows
|
|
229
211
|
name: pattern continue interrupted
|
|
230
212
|
steps:
|
|
231
|
-
- action:
|
|
232
|
-
- noop: true
|
|
233
|
-
next:
|
|
234
|
-
- if: slots.multiple_flows_interrupted
|
|
235
|
-
then:
|
|
236
|
-
- collect: interrupted_flow_to_continue
|
|
237
|
-
description: "Fill this slot with the name of the flow the user wants to continue. If the user does not want to continue any of the interrupted flows, fill this slot with 'none'."
|
|
238
|
-
next:
|
|
239
|
-
- if: slots.interrupted_flow_to_continue != "none"
|
|
240
|
-
then:
|
|
241
|
-
- action: action_continue_interrupted_flow
|
|
242
|
-
next: END
|
|
243
|
-
- else:
|
|
244
|
-
- action: action_cancel_interrupted_flow
|
|
245
|
-
next: END
|
|
246
|
-
- else:
|
|
247
|
-
- collect: confirmation_continue_interrupted_flow
|
|
248
|
-
description: "If the user wants to continue the interrupted flow, fill this slot with true. If the user does not want to continue the interrupted flow, fill this slot with false."
|
|
249
|
-
utter: utter_ask_continue_interrupted_flow
|
|
250
|
-
next:
|
|
251
|
-
- if: slots.confirmation_continue_interrupted_flow
|
|
252
|
-
then:
|
|
253
|
-
- action: action_continue_interrupted_flow
|
|
254
|
-
next: END
|
|
255
|
-
- else:
|
|
256
|
-
- action: action_cancel_interrupted_flow
|
|
257
|
-
next: END
|
|
213
|
+
- action: utter_flow_continue_interrupted
|
|
258
214
|
|
|
259
215
|
pattern_correction:
|
|
260
216
|
description: Conversation repair flow for managing user input changes or error corrections
|
|
@@ -37,7 +37,6 @@ from rasa.dialogue_understanding.stack.frames import (
|
|
|
37
37
|
BaseFlowStackFrame,
|
|
38
38
|
)
|
|
39
39
|
from rasa.dialogue_understanding.stack.utils import (
|
|
40
|
-
is_continue_interrupted_flow_active,
|
|
41
40
|
top_flow_frame,
|
|
42
41
|
top_user_flow_frame,
|
|
43
42
|
)
|
|
@@ -429,9 +428,22 @@ def clean_up_commands(
|
|
|
429
428
|
)
|
|
430
429
|
|
|
431
430
|
elif isinstance(command, StartFlowCommand):
|
|
432
|
-
|
|
433
|
-
|
|
431
|
+
top_user_frame = top_user_flow_frame(
|
|
432
|
+
tracker.stack, ignore_call_and_link_frames=False
|
|
434
433
|
)
|
|
434
|
+
top_flow_id = top_user_frame.flow_id if top_user_frame else ""
|
|
435
|
+
|
|
436
|
+
if top_flow_id == command.flow:
|
|
437
|
+
# drop a start flow command if the starting flow is equal
|
|
438
|
+
# to the currently active flow
|
|
439
|
+
structlogger.debug(
|
|
440
|
+
"command_processor.clean_up_commands."
|
|
441
|
+
"skip_command_flow_already_active",
|
|
442
|
+
command=command,
|
|
443
|
+
)
|
|
444
|
+
continue
|
|
445
|
+
|
|
446
|
+
clean_commands.append(command)
|
|
435
447
|
|
|
436
448
|
# handle chitchat command differently from other free-form answer commands
|
|
437
449
|
elif isinstance(command, ChitChatAnswerCommand):
|
|
@@ -517,34 +529,6 @@ def ensure_max_number_of_command_type(
|
|
|
517
529
|
return filtered
|
|
518
530
|
|
|
519
531
|
|
|
520
|
-
def clean_up_start_flow_command(
|
|
521
|
-
clean_commands: List[Command],
|
|
522
|
-
tracker: DialogueStateTracker,
|
|
523
|
-
command: StartFlowCommand,
|
|
524
|
-
) -> List[Command]:
|
|
525
|
-
"""Clean up a start flow command."""
|
|
526
|
-
continue_interrupted_flow_active = is_continue_interrupted_flow_active(
|
|
527
|
-
tracker.stack
|
|
528
|
-
)
|
|
529
|
-
|
|
530
|
-
top_user_frame = top_user_flow_frame(
|
|
531
|
-
tracker.stack, ignore_call_and_link_frames=False
|
|
532
|
-
)
|
|
533
|
-
top_flow_id = top_user_frame.flow_id if top_user_frame else ""
|
|
534
|
-
|
|
535
|
-
if top_flow_id == command.flow and not continue_interrupted_flow_active:
|
|
536
|
-
# drop a start flow command if the starting flow is equal
|
|
537
|
-
# to the currently active flow
|
|
538
|
-
structlogger.debug(
|
|
539
|
-
"command_processor.clean_up_commands." "skip_command_flow_already_active",
|
|
540
|
-
command=command,
|
|
541
|
-
)
|
|
542
|
-
return clean_commands
|
|
543
|
-
|
|
544
|
-
clean_commands.append(command)
|
|
545
|
-
return clean_commands
|
|
546
|
-
|
|
547
|
-
|
|
548
532
|
def clean_up_clarify_command(
|
|
549
533
|
commands_so_far: List[Command],
|
|
550
534
|
all_commands: List[Command],
|
|
@@ -8,13 +8,6 @@ from typing import Any, Callable, Dict, List, Optional
|
|
|
8
8
|
import jsonpatch
|
|
9
9
|
import structlog
|
|
10
10
|
|
|
11
|
-
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
12
|
-
AgentStackFrame,
|
|
13
|
-
AgentState,
|
|
14
|
-
FlowStackFrameType,
|
|
15
|
-
UserFlowStackFrame,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
11
|
if typing.TYPE_CHECKING:
|
|
19
12
|
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
20
13
|
|
|
@@ -98,42 +91,6 @@ class DialogueStack:
|
|
|
98
91
|
"""
|
|
99
92
|
return self.frames.pop()
|
|
100
93
|
|
|
101
|
-
def move_frames_to_top(self, frames_to_move: List["DialogueStackFrame"]) -> None:
|
|
102
|
-
"""Moves specified frames to top of stack while preserving their relative order.
|
|
103
|
-
|
|
104
|
-
Args:
|
|
105
|
-
frames_to_move: The frames to move to the top of the stack.
|
|
106
|
-
"""
|
|
107
|
-
# Get frames that are not being moved
|
|
108
|
-
frames_to_keep = [frame for frame in self.frames if frame not in frames_to_move]
|
|
109
|
-
|
|
110
|
-
# Reorder: keep frames first, then moved frames
|
|
111
|
-
self.frames = frames_to_keep + frames_to_move
|
|
112
|
-
|
|
113
|
-
# set all frames to interrupt except for LINK and CALL
|
|
114
|
-
for frame in self.frames:
|
|
115
|
-
if (
|
|
116
|
-
isinstance(frame, UserFlowStackFrame)
|
|
117
|
-
and frame.frame_type == FlowStackFrameType.LINK
|
|
118
|
-
):
|
|
119
|
-
continue
|
|
120
|
-
if (
|
|
121
|
-
isinstance(frame, UserFlowStackFrame)
|
|
122
|
-
and frame.frame_type == FlowStackFrameType.CALL
|
|
123
|
-
):
|
|
124
|
-
continue
|
|
125
|
-
if (
|
|
126
|
-
isinstance(frame, UserFlowStackFrame)
|
|
127
|
-
and frame.frame_type == FlowStackFrameType.REGULAR
|
|
128
|
-
):
|
|
129
|
-
frame.frame_type = FlowStackFrameType.INTERRUPT
|
|
130
|
-
|
|
131
|
-
# set the first frame to regular
|
|
132
|
-
for frame in self.frames:
|
|
133
|
-
if isinstance(frame, UserFlowStackFrame):
|
|
134
|
-
frame.frame_type = FlowStackFrameType.REGULAR
|
|
135
|
-
return
|
|
136
|
-
|
|
137
94
|
def current_context(self) -> Dict[str, Any]:
|
|
138
95
|
"""Returns the context of the topmost frame.
|
|
139
96
|
|
|
@@ -152,7 +109,7 @@ class DialogueStack:
|
|
|
152
109
|
"""Returns the topmost frame from the stack.
|
|
153
110
|
|
|
154
111
|
Args:
|
|
155
|
-
|
|
112
|
+
ignore_frame: The ID of the flow to ignore. Picks the top most
|
|
156
113
|
frame that has a different flow ID.
|
|
157
114
|
|
|
158
115
|
Returns:
|
|
@@ -179,8 +136,7 @@ class DialogueStack:
|
|
|
179
136
|
patch_dump: The patch to apply to the stack.
|
|
180
137
|
|
|
181
138
|
Returns:
|
|
182
|
-
|
|
183
|
-
"""
|
|
139
|
+
The updated stack."""
|
|
184
140
|
patch = jsonpatch.JsonPatch.from_string(patch_dump)
|
|
185
141
|
dialogue_stack_dump = patch.apply(self.as_dict())
|
|
186
142
|
return DialogueStack.from_dict(dialogue_stack_dump)
|
|
@@ -221,80 +177,3 @@ class DialogueStack:
|
|
|
221
177
|
if patch:
|
|
222
178
|
return patch.to_string()
|
|
223
179
|
return None
|
|
224
|
-
|
|
225
|
-
def _find_agent_frame_by_predicate(
|
|
226
|
-
self, predicate: Callable[[AgentStackFrame], bool]
|
|
227
|
-
) -> List[AgentStackFrame]:
|
|
228
|
-
stack_frames: List[AgentStackFrame] = []
|
|
229
|
-
for stack_frame in reversed(self.frames):
|
|
230
|
-
if isinstance(stack_frame, AgentStackFrame) and predicate(stack_frame):
|
|
231
|
-
stack_frames.append(stack_frame)
|
|
232
|
-
return stack_frames
|
|
233
|
-
|
|
234
|
-
def find_active_agent_frame(self) -> Optional[AgentStackFrame]:
|
|
235
|
-
stack_frames = self._find_agent_frame_by_predicate(
|
|
236
|
-
lambda frame: frame.state == AgentState.WAITING_FOR_INPUT
|
|
237
|
-
)
|
|
238
|
-
if stack_frames:
|
|
239
|
-
return stack_frames[0]
|
|
240
|
-
return None
|
|
241
|
-
|
|
242
|
-
def find_agent_stack_frame_by_agent(
|
|
243
|
-
self, agent_id: str
|
|
244
|
-
) -> Optional[AgentStackFrame]:
|
|
245
|
-
"""Get the agent stack frame for a specific agent ID.
|
|
246
|
-
|
|
247
|
-
May also include the agent stack frame in the INTERRUPTED state.
|
|
248
|
-
"""
|
|
249
|
-
stack_frames = self._find_agent_frame_by_predicate(
|
|
250
|
-
lambda frame: frame.agent_id == agent_id
|
|
251
|
-
)
|
|
252
|
-
if stack_frames:
|
|
253
|
-
return stack_frames[0]
|
|
254
|
-
return None
|
|
255
|
-
|
|
256
|
-
def find_active_agent_stack_frame_for_flow(
|
|
257
|
-
self, flow_id: str
|
|
258
|
-
) -> Optional[AgentStackFrame]:
|
|
259
|
-
"""Get the agent stack frame of a specific flow."""
|
|
260
|
-
stack_frames = self._find_agent_frame_by_predicate(
|
|
261
|
-
lambda frame: frame.flow_id == flow_id
|
|
262
|
-
)
|
|
263
|
-
for stack_frame in stack_frames:
|
|
264
|
-
if stack_frame.state == AgentState.WAITING_FOR_INPUT:
|
|
265
|
-
return stack_frame
|
|
266
|
-
return None
|
|
267
|
-
|
|
268
|
-
def get_active_agent_id(self) -> Optional[typing.Text]:
|
|
269
|
-
agent_frame = self.find_active_agent_frame()
|
|
270
|
-
if agent_frame:
|
|
271
|
-
return agent_frame.agent_id
|
|
272
|
-
return None
|
|
273
|
-
|
|
274
|
-
def agent_is_active(self) -> bool:
|
|
275
|
-
return self.find_active_agent_frame() is not None
|
|
276
|
-
|
|
277
|
-
def get_all_user_flow_frames(
|
|
278
|
-
self, ignore_call_and_link_frames: bool = True
|
|
279
|
-
) -> List[UserFlowStackFrame]:
|
|
280
|
-
"""Get all user flow frames from the dialogue stack.
|
|
281
|
-
|
|
282
|
-
Args:
|
|
283
|
-
ignore_call_and_link_frames: Whether to ignore user frames of type `call`
|
|
284
|
-
and `link`. By default, these frames are ignored.
|
|
285
|
-
|
|
286
|
-
Returns:
|
|
287
|
-
A list of all user flow frames in the dialogue stack.
|
|
288
|
-
"""
|
|
289
|
-
return [
|
|
290
|
-
frame
|
|
291
|
-
for frame in self.frames
|
|
292
|
-
if isinstance(frame, UserFlowStackFrame)
|
|
293
|
-
and (
|
|
294
|
-
not ignore_call_and_link_frames
|
|
295
|
-
or (
|
|
296
|
-
frame.frame_type != FlowStackFrameType.CALL
|
|
297
|
-
and frame.frame_type != FlowStackFrameType.LINK
|
|
298
|
-
)
|
|
299
|
-
)
|
|
300
|
-
]
|
|
@@ -94,18 +94,6 @@ class InvalidFlowStepIdException(Exception):
|
|
|
94
94
|
super().__init__(f"Invalid flow step ID '{step_id}' for flow '{flow_id}'.")
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
class InvalidAgentState(RasaException):
|
|
98
|
-
"""Raised if the agent state is invalid."""
|
|
99
|
-
|
|
100
|
-
def __init__(self, invalid_state: str) -> None:
|
|
101
|
-
"""Creates a `InvalidAgentState`.
|
|
102
|
-
|
|
103
|
-
Args:
|
|
104
|
-
invalid_state: The invalid agent state.
|
|
105
|
-
"""
|
|
106
|
-
super().__init__(f"Invalid agent state '{invalid_state}'.")
|
|
107
|
-
|
|
108
|
-
|
|
109
97
|
@dataclass
|
|
110
98
|
class BaseFlowStackFrame(DialogueStackFrame):
|
|
111
99
|
flow_id: str = "" # needed to avoid "default arg before non-default" error
|
|
@@ -183,48 +171,3 @@ class UserFlowStackFrame(BaseFlowStackFrame):
|
|
|
183
171
|
step_id=data["step_id"],
|
|
184
172
|
frame_type=FlowStackFrameType.from_str(data.get("frame_type")),
|
|
185
173
|
)
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
class AgentState(str, Enum):
|
|
189
|
-
INTERRUPTED = "interrupted"
|
|
190
|
-
WAITING_FOR_INPUT = "waiting_for_input"
|
|
191
|
-
|
|
192
|
-
@staticmethod
|
|
193
|
-
def from_str(state: Optional[str]) -> AgentState:
|
|
194
|
-
if state == AgentState.WAITING_FOR_INPUT.value:
|
|
195
|
-
return AgentState.WAITING_FOR_INPUT
|
|
196
|
-
elif state == AgentState.INTERRUPTED.value:
|
|
197
|
-
return AgentState.INTERRUPTED
|
|
198
|
-
else:
|
|
199
|
-
raise InvalidAgentState(state)
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
@dataclass
|
|
203
|
-
class AgentStackFrame(BaseFlowStackFrame):
|
|
204
|
-
agent_id: str = ""
|
|
205
|
-
state: AgentState = AgentState.WAITING_FOR_INPUT
|
|
206
|
-
metadata: Optional[Dict[str, Any]] = None
|
|
207
|
-
|
|
208
|
-
@classmethod
|
|
209
|
-
def type(cls) -> str:
|
|
210
|
-
"""Returns the type of the frame."""
|
|
211
|
-
return "agent"
|
|
212
|
-
|
|
213
|
-
@staticmethod
|
|
214
|
-
def from_dict(data: Dict[str, Any]) -> AgentStackFrame:
|
|
215
|
-
"""Creates a `AgentStackFrame` from a dictionary.
|
|
216
|
-
|
|
217
|
-
Args:
|
|
218
|
-
data: The dictionary to create the `AgentStackFrame` from.
|
|
219
|
-
|
|
220
|
-
Returns:
|
|
221
|
-
The created `AgentStackFrame`.
|
|
222
|
-
"""
|
|
223
|
-
return AgentStackFrame(
|
|
224
|
-
frame_id=data["frame_id"],
|
|
225
|
-
flow_id=data["flow_id"],
|
|
226
|
-
step_id=data["step_id"],
|
|
227
|
-
agent_id=data["agent_id"],
|
|
228
|
-
state=AgentState.from_str(data["state"]),
|
|
229
|
-
metadata=data.get("metadata"),
|
|
230
|
-
)
|
|
@@ -198,9 +198,8 @@ def end_top_user_flow(stack: DialogueStack) -> DialogueStack:
|
|
|
198
198
|
def get_collect_steps_excluding_ask_before_filling_for_active_flow(
|
|
199
199
|
dialogue_stack: DialogueStack, all_flows: FlowsList
|
|
200
200
|
) -> Set[str]:
|
|
201
|
-
"""Get all collect steps that are part of the current flow
|
|
202
|
-
|
|
203
|
-
Collect steps that have to be asked before filling are not considered.
|
|
201
|
+
"""Get all collect steps that are part of the current flow, without
|
|
202
|
+
considering the collect steps that has to be asked before filling.
|
|
204
203
|
|
|
205
204
|
Args:
|
|
206
205
|
dialogue_stack: The dialogue stack.
|
|
@@ -231,17 +230,3 @@ def get_collect_steps_excluding_ask_before_filling_for_active_flow(
|
|
|
231
230
|
for step in active_flow.get_collect_steps()
|
|
232
231
|
if not step.ask_before_filling
|
|
233
232
|
)
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
def is_continue_interrupted_flow_active(stack: DialogueStack) -> bool:
|
|
237
|
-
"""Check if the continue interrupted flow is active."""
|
|
238
|
-
from rasa.dialogue_understanding.patterns.continue_interrupted import (
|
|
239
|
-
ContinueInterruptedPatternFlowStackFrame,
|
|
240
|
-
)
|
|
241
|
-
|
|
242
|
-
for frame in reversed(stack.frames):
|
|
243
|
-
if isinstance(frame, ContinueInterruptedPatternFlowStackFrame):
|
|
244
|
-
return True
|
|
245
|
-
if isinstance(frame, UserFlowStackFrame):
|
|
246
|
-
return False
|
|
247
|
-
return False
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import time
|
|
3
|
-
from
|
|
4
|
-
from typing import Any, Dict, List, Optional, Union
|
|
3
|
+
from typing import Any, Dict, List, Optional, Text
|
|
5
4
|
|
|
6
5
|
import structlog
|
|
7
6
|
from tqdm import tqdm
|
|
8
7
|
|
|
9
|
-
from rasa.core.available_agents import AvailableAgents
|
|
10
8
|
from rasa.core.available_endpoints import AvailableEndpoints
|
|
11
9
|
from rasa.core.channels import CollectingOutputChannel, UserMessage
|
|
12
10
|
from rasa.core.exceptions import AgentNotReady
|
|
@@ -54,11 +52,10 @@ class DialogueUnderstandingTestRunner:
|
|
|
54
52
|
|
|
55
53
|
def __init__(
|
|
56
54
|
self,
|
|
57
|
-
model_path: Optional[
|
|
55
|
+
model_path: Optional[Text] = None,
|
|
58
56
|
model_server: Optional[EndpointConfig] = None,
|
|
59
57
|
remote_storage: Optional[StorageType] = None,
|
|
60
58
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
61
|
-
sub_agents_path: Optional[Union[Path, str]] = None,
|
|
62
59
|
) -> None:
|
|
63
60
|
"""Initializes the Dialogue Understanding test suite runner.
|
|
64
61
|
|
|
@@ -71,7 +68,6 @@ class DialogueUnderstandingTestRunner:
|
|
|
71
68
|
import rasa.core.agent
|
|
72
69
|
|
|
73
70
|
self._check_action_server(endpoints)
|
|
74
|
-
sub_agents = AvailableAgents.get_instance(sub_agents_path)
|
|
75
71
|
|
|
76
72
|
self.agent = asyncio.run(
|
|
77
73
|
rasa.core.agent.load_agent(
|
|
@@ -79,7 +75,6 @@ class DialogueUnderstandingTestRunner:
|
|
|
79
75
|
model_server=model_server,
|
|
80
76
|
remote_storage=remote_storage,
|
|
81
77
|
endpoints=endpoints,
|
|
82
|
-
sub_agents=sub_agents,
|
|
83
78
|
)
|
|
84
79
|
)
|
|
85
80
|
if not self.agent.is_ready():
|
rasa/e2e_test/e2e_test_runner.py
CHANGED
|
@@ -13,7 +13,6 @@ import structlog
|
|
|
13
13
|
from tqdm import tqdm
|
|
14
14
|
|
|
15
15
|
import rasa.shared.utils.io
|
|
16
|
-
from rasa.core.available_agents import AvailableAgents
|
|
17
16
|
from rasa.core.available_endpoints import AvailableEndpoints
|
|
18
17
|
from rasa.core.channels import CollectingOutputChannel, UserMessage
|
|
19
18
|
from rasa.core.constants import ACTIVE_FLOW_METADATA_KEY, STEP_ID_METADATA_KEY
|
|
@@ -66,7 +65,6 @@ class E2ETestRunner:
|
|
|
66
65
|
model_server: Optional[EndpointConfig] = None,
|
|
67
66
|
remote_storage: Optional[StorageType] = None,
|
|
68
67
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
69
|
-
sub_agents_path: Optional[Text] = None,
|
|
70
68
|
**kwargs: Any,
|
|
71
69
|
) -> None:
|
|
72
70
|
"""Initializes the E2E test suite runner.
|
|
@@ -96,15 +94,12 @@ class E2ETestRunner:
|
|
|
96
94
|
if endpoints and not are_custom_actions_stubbed:
|
|
97
95
|
self._action_server_is_reachable(endpoints)
|
|
98
96
|
|
|
99
|
-
sub_agents = AvailableAgents.get_instance(sub_agents_path)
|
|
100
|
-
|
|
101
97
|
self.agent = asyncio.run(
|
|
102
98
|
rasa.core.agent.load_agent(
|
|
103
99
|
model_path=model_path,
|
|
104
100
|
model_server=model_server,
|
|
105
101
|
remote_storage=remote_storage,
|
|
106
102
|
endpoints=endpoints,
|
|
107
|
-
sub_agents=sub_agents,
|
|
108
103
|
)
|
|
109
104
|
)
|
|
110
105
|
|
|
@@ -747,7 +742,7 @@ class E2ETestRunner:
|
|
|
747
742
|
test_result = test_turns[index]
|
|
748
743
|
if index in failure_points:
|
|
749
744
|
diff_test_text, diff_actual_text = cls._handle_fail_diff(
|
|
750
|
-
test_result,
|
|
745
|
+
test_result, # type: ignore[arg-type]
|
|
751
746
|
latest_response,
|
|
752
747
|
cls._select_bot_utter_turns(test_turns, index),
|
|
753
748
|
) # test_result can only be TestStep in failure_points
|
|
@@ -811,12 +806,7 @@ class E2ETestRunner:
|
|
|
811
806
|
"""
|
|
812
807
|
# This will only be used when the TestCase is not started
|
|
813
808
|
# with a user step
|
|
814
|
-
|
|
815
|
-
if not isinstance(latest_response_event, ActualStepOutput):
|
|
816
|
-
raise ValueError(
|
|
817
|
-
f"Expected ActualStepOutput, got {type(latest_response_event)}"
|
|
818
|
-
)
|
|
819
|
-
latest_response: ActualStepOutput = latest_response_event
|
|
809
|
+
latest_response: ActualStepOutput = test_turns[-1] # type: ignore[assignment]
|
|
820
810
|
failures = []
|
|
821
811
|
match = None
|
|
822
812
|
for position in range(last_user_step_position, len(test_turns) - 1):
|