rasa-pro 3.14.0.dev6__py3-none-any.whl → 3.14.0.dev8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/agents/agent_manager.py +1 -1
- rasa/agents/constants.py +2 -2
- rasa/agents/exceptions.py +31 -1
- rasa/agents/protocol/a2a/a2a_agent.py +385 -227
- rasa/agents/protocol/mcp/mcp_base_agent.py +37 -19
- rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
- rasa/agents/protocol/mcp/mcp_task_agent.py +33 -10
- rasa/agents/schemas/agent_output.py +1 -1
- rasa/agents/utils.py +95 -1
- rasa/agents/validation.py +484 -0
- rasa/api.py +9 -6
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +92 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +31 -0
- rasa/builder/copilot/copilot.py +450 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +500 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +210 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/constants.py +9 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +206 -0
- rasa/builder/guardrails/models.py +231 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +328 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +282 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +243 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +458 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1345 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +244 -0
- rasa/builder/training_service.py +194 -0
- rasa/builder/validation_service.py +97 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/interactive.py +2 -0
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +9 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +8 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/finance/README.md +25 -0
- rasa/cli/project_templates/finance/actions/__init__.py +46 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
- rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
- rasa/cli/project_templates/finance/actions/database.py +277 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
- rasa/cli/project_templates/finance/config.yml +23 -0
- rasa/cli/project_templates/finance/credentials.yml +32 -0
- rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
- rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
- rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
- rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
- rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
- rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
- rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
- rasa/cli/project_templates/finance/csvs/users.csv +4 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
- rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/data/data.md +11 -0
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
- rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
- rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
- rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
- rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
- rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
- rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
- rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/domain/domain.md +10 -0
- rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
- rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
- rasa/cli/project_templates/finance/endpoints.yml +66 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +5 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +14 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/scaffold.py +46 -2
- rasa/cli/train.py +2 -0
- rasa/cli/utils.py +85 -1
- rasa/core/actions/action.py +2 -7
- rasa/core/available_agents.py +49 -26
- rasa/core/available_endpoints.py +17 -2
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +2 -22
- rasa/core/channels/inspector/README.md +26 -14
- rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-edef10dd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-9813e81c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-d8ba0870.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-790ef78b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-ecdce073.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-837fd3aa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-7e05afcb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-162eb295.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-41529fd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-b5b53234.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-13d138e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-94cbde3f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +42 -44
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +8 -8
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/types.ts +49 -7
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +59 -57
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +3 -0
- rasa/core/channels/voice_stream/browser_audio.py +53 -3
- rasa/core/channels/voice_stream/genesys.py +2 -1
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
- rasa/core/channels/voice_stream/voice_channel.py +66 -3
- rasa/core/constants.py +6 -0
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
- rasa/core/policies/enterprise_search_policy.py +4 -7
- rasa/core/policies/flows/flow_executor.py +66 -36
- rasa/core/policies/ted_policy.py +7 -5
- rasa/core/processor.py +32 -0
- rasa/core/redis_connection_factory.py +411 -0
- rasa/core/run.py +13 -3
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -1
- rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -81
- rasa/dialogue_understanding/commands/start_flow_command.py +18 -113
- rasa/dialogue_understanding/commands/utils.py +118 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +185 -114
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +18 -24
- rasa/dialogue_understanding/processor/command_processor.py +35 -0
- rasa/dialogue_understanding/stack/utils.py +43 -4
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/engine/graph.py +5 -1
- rasa/engine/recipes/default_components.py +78 -10
- rasa/engine/recipes/default_recipe.py +41 -1
- rasa/engine/storage/local_model_storage.py +83 -3
- rasa/graph_components/validators/default_recipe_validator.py +153 -135
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +20 -15
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +1 -1
- rasa/model_training.py +22 -6
- rasa/nlu/classifiers/diet_classifier.py +22 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
- rasa/nlu/extractors/extractor.py +1 -2
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +74 -0
- rasa/shared/agents/auth/agent_auth_manager.py +86 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
- rasa/shared/agents/auth/constants.py +11 -0
- rasa/shared/agents/auth/types.py +11 -0
- rasa/shared/constants.py +3 -0
- rasa/shared/core/constants.py +6 -6
- rasa/shared/core/domain.py +58 -11
- rasa/shared/core/events.py +2 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +6 -0
- rasa/shared/core/flows/steps/call.py +15 -12
- rasa/shared/core/flows/validation.py +238 -44
- rasa/shared/core/flows/yaml_flows_io.py +15 -6
- rasa/shared/core/slots.py +4 -0
- rasa/shared/exceptions.py +12 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/_utils.py +60 -44
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
- rasa/shared/providers/llm/_base_litellm_client.py +2 -2
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
- rasa/shared/providers/llm/llm_response.py +4 -4
- rasa/shared/utils/common.py +24 -0
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +2 -1
- rasa/shared/utils/mcp/server_connection.py +108 -27
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/studio/upload.py +16 -47
- rasa/telemetry.py +97 -23
- rasa/tracing/config.py +38 -12
- rasa/tracing/instrumentation/attribute_extractors.py +5 -1
- rasa/tracing/instrumentation/instrumentation.py +85 -8
- rasa/utils/common.py +1 -1
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/tensorflow/__init__.py +29 -0
- rasa/utils/tensorflow/callback.py +1 -1
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +11 -4
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +41 -6
- rasa/utils/tensorflow/rasa_layers.py +6 -4
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +68 -38
- rasa/validator.py +18 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +486 -173
- rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
- rasa_pro-3.14.0.dev6.dist-info/METADATA +0 -190
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from typing import Any, Dict, List
|
|
5
|
+
from typing import Any, Dict, List
|
|
6
6
|
|
|
7
7
|
import structlog
|
|
8
8
|
|
|
@@ -16,7 +16,6 @@ from rasa.dialogue_understanding.commands.command_syntax_manager import (
|
|
|
16
16
|
)
|
|
17
17
|
from rasa.dialogue_understanding.patterns.cancel import CancelPatternFlowStackFrame
|
|
18
18
|
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
19
|
-
from rasa.dialogue_understanding.stack.frames import DialogueStackFrame
|
|
20
19
|
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
21
20
|
FlowStackFrameType,
|
|
22
21
|
UserFlowStackFrame,
|
|
@@ -74,8 +73,7 @@ class CancelFlowCommand(Command):
|
|
|
74
73
|
# we should never get here as we should always find the user flow
|
|
75
74
|
# that was canceled.
|
|
76
75
|
raise ValueError(
|
|
77
|
-
f"Could not find a user flow frame to cancel. "
|
|
78
|
-
f"Current stack: {stack}."
|
|
76
|
+
f"Could not find a user flow frame to cancel. Current stack: {stack}."
|
|
79
77
|
)
|
|
80
78
|
|
|
81
79
|
def run_command_on_tracker(
|
|
@@ -175,80 +173,3 @@ class CancelFlowCommand(Command):
|
|
|
175
173
|
CommandSyntaxManager.get_syntax_version(),
|
|
176
174
|
mapper[CommandSyntaxManager.get_default_syntax_version()],
|
|
177
175
|
)
|
|
178
|
-
|
|
179
|
-
def cancel_flow(
|
|
180
|
-
self,
|
|
181
|
-
tracker: DialogueStateTracker,
|
|
182
|
-
stack: DialogueStack,
|
|
183
|
-
flow_id: str,
|
|
184
|
-
) -> List[Event]:
|
|
185
|
-
"""Cancels a flow by flow id."""
|
|
186
|
-
applied_events: List[Event] = []
|
|
187
|
-
|
|
188
|
-
frames_to_cancel, user_frame_to_cancel = self._collect_frames_to_cancel(
|
|
189
|
-
stack, flow_id
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
# if the flow is not on the stack, do nothing
|
|
193
|
-
if user_frame_to_cancel is None:
|
|
194
|
-
structlogger.error(
|
|
195
|
-
"cancel_flow_command.cancel_flow.no_user_frame_to_cancel",
|
|
196
|
-
command=self,
|
|
197
|
-
)
|
|
198
|
-
return []
|
|
199
|
-
|
|
200
|
-
frames_ids_to_cancel = [frame.frame_id for frame in frames_to_cancel]
|
|
201
|
-
|
|
202
|
-
stack.push(
|
|
203
|
-
CancelPatternFlowStackFrame(
|
|
204
|
-
canceled_name=flow_id,
|
|
205
|
-
canceled_frames=frames_ids_to_cancel,
|
|
206
|
-
)
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
# create flow cancelled event
|
|
210
|
-
applied_events.extend(
|
|
211
|
-
[
|
|
212
|
-
FlowCancelled(
|
|
213
|
-
user_frame_to_cancel.flow_id, user_frame_to_cancel.step_id
|
|
214
|
-
),
|
|
215
|
-
]
|
|
216
|
-
)
|
|
217
|
-
|
|
218
|
-
update_stack_events = tracker.create_stack_updated_events(stack)
|
|
219
|
-
|
|
220
|
-
return applied_events + update_stack_events
|
|
221
|
-
|
|
222
|
-
def _collect_frames_to_cancel(
|
|
223
|
-
self, stack: DialogueStack, target_flow_id: str
|
|
224
|
-
) -> Tuple[List[DialogueStackFrame], Optional[UserFlowStackFrame]]:
|
|
225
|
-
"""Collect frames that need to be cancelled.
|
|
226
|
-
|
|
227
|
-
Args:
|
|
228
|
-
stack: The stack to collect frames from.
|
|
229
|
-
target_flow_id: The ID of the flow to cancel.
|
|
230
|
-
|
|
231
|
-
Returns:
|
|
232
|
-
A tuple containing (frames_to_cancel, frame_to_cancel).
|
|
233
|
-
"""
|
|
234
|
-
frames_to_cancel: List[DialogueStackFrame] = []
|
|
235
|
-
frame_found = False
|
|
236
|
-
frame_to_cancel = None
|
|
237
|
-
|
|
238
|
-
for frame in stack.frames:
|
|
239
|
-
if isinstance(frame, UserFlowStackFrame) and (
|
|
240
|
-
frame.frame_type == FlowStackFrameType.REGULAR
|
|
241
|
-
or frame.frame_type == FlowStackFrameType.INTERRUPT
|
|
242
|
-
):
|
|
243
|
-
if frame.flow_id == target_flow_id:
|
|
244
|
-
frames_to_cancel.append(frame)
|
|
245
|
-
frame_to_cancel = frame
|
|
246
|
-
frame_found = True
|
|
247
|
-
continue
|
|
248
|
-
elif frame_found:
|
|
249
|
-
break
|
|
250
|
-
|
|
251
|
-
if frame_found:
|
|
252
|
-
frames_to_cancel.append(frame)
|
|
253
|
-
|
|
254
|
-
return list(frames_to_cancel), frame_to_cancel
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from typing import Any, Dict, List, Optional
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
6
6
|
|
|
7
7
|
import structlog
|
|
8
8
|
|
|
@@ -11,17 +11,15 @@ from rasa.dialogue_understanding.commands.command_syntax_manager import (
|
|
|
11
11
|
CommandSyntaxManager,
|
|
12
12
|
CommandSyntaxVersion,
|
|
13
13
|
)
|
|
14
|
-
from rasa.dialogue_understanding.
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
from rasa.dialogue_understanding.commands.utils import (
|
|
15
|
+
remove_pattern_continue_interrupted_frames,
|
|
16
|
+
resume_flow,
|
|
17
17
|
)
|
|
18
18
|
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
19
|
-
AgentStackFrame,
|
|
20
19
|
AgentState,
|
|
21
20
|
FlowStackFrameType,
|
|
22
21
|
UserFlowStackFrame,
|
|
23
22
|
)
|
|
24
|
-
from rasa.dialogue_understanding.stack.frames.pattern_frame import PatternFlowStackFrame
|
|
25
23
|
from rasa.dialogue_understanding.stack.utils import (
|
|
26
24
|
is_continue_interrupted_flow_active,
|
|
27
25
|
top_user_flow_frame,
|
|
@@ -29,10 +27,8 @@ from rasa.dialogue_understanding.stack.utils import (
|
|
|
29
27
|
)
|
|
30
28
|
from rasa.shared.core.events import (
|
|
31
29
|
AgentInterrupted,
|
|
32
|
-
AgentResumed,
|
|
33
30
|
Event,
|
|
34
31
|
FlowInterrupted,
|
|
35
|
-
FlowResumed,
|
|
36
32
|
)
|
|
37
33
|
from rasa.shared.core.flows import FlowsList
|
|
38
34
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
@@ -108,7 +104,7 @@ class StartFlowCommand(Command):
|
|
|
108
104
|
# predicted a start flow command for the flow which is on top of the stack,
|
|
109
105
|
# we just need to remove the pattern_continue_interrupted frame(s) from the
|
|
110
106
|
# stack
|
|
111
|
-
stack =
|
|
107
|
+
stack = remove_pattern_continue_interrupted_frames(stack)
|
|
112
108
|
return applied_events + tracker.create_stack_updated_events(stack)
|
|
113
109
|
|
|
114
110
|
# if the flow is already on the stack, resume it
|
|
@@ -118,11 +114,22 @@ class StartFlowCommand(Command):
|
|
|
118
114
|
):
|
|
119
115
|
# if pattern_continue_interrupted is active, we need to remove it
|
|
120
116
|
# from the stack before resuming the flow
|
|
121
|
-
stack =
|
|
122
|
-
|
|
117
|
+
stack = remove_pattern_continue_interrupted_frames(stack)
|
|
118
|
+
applied_events.extend(resume_flow(self.flow, tracker, stack))
|
|
119
|
+
# the current active flow is interrupted
|
|
120
|
+
applied_events.append(
|
|
121
|
+
FlowInterrupted(
|
|
122
|
+
original_user_frame.flow_id, original_user_frame.step_id
|
|
123
|
+
)
|
|
124
|
+
)
|
|
125
|
+
return applied_events
|
|
123
126
|
|
|
124
127
|
frame_type = FlowStackFrameType.REGULAR
|
|
125
128
|
|
|
129
|
+
# remove the pattern_continue_interrupted frames from the stack
|
|
130
|
+
# if it is currently active but the user digressed from the pattern
|
|
131
|
+
stack = remove_pattern_continue_interrupted_frames(stack)
|
|
132
|
+
|
|
126
133
|
if original_top_flow:
|
|
127
134
|
# if the original top flow is not the same as the flow to start,
|
|
128
135
|
# interrupt the current active flow
|
|
@@ -198,105 +205,3 @@ class StartFlowCommand(Command):
|
|
|
198
205
|
CommandSyntaxManager.get_syntax_version(),
|
|
199
206
|
mapper[CommandSyntaxManager.get_default_syntax_version()],
|
|
200
207
|
)
|
|
201
|
-
|
|
202
|
-
def resume_flow(
|
|
203
|
-
self,
|
|
204
|
-
tracker: DialogueStateTracker,
|
|
205
|
-
stack: DialogueStack,
|
|
206
|
-
original_user_frame: UserFlowStackFrame,
|
|
207
|
-
) -> List[Event]:
|
|
208
|
-
"""Resumes a flow by reordering frames."""
|
|
209
|
-
applied_events: List[Event] = []
|
|
210
|
-
|
|
211
|
-
# Resume existing flow by reordering frames
|
|
212
|
-
frames_to_resume, user_frame_to_resume = self._collect_frames_to_resume(
|
|
213
|
-
stack, self.flow
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
# if the flow is not on the stack, do nothing
|
|
217
|
-
# this should not happen, but just in case
|
|
218
|
-
if user_frame_to_resume is None:
|
|
219
|
-
structlogger.error(
|
|
220
|
-
"start_flow_command.resume_flow.no_user_frame_to_resume",
|
|
221
|
-
command=self,
|
|
222
|
-
)
|
|
223
|
-
return []
|
|
224
|
-
|
|
225
|
-
# move the frames to the top of the stack, e.g. reorder the frames
|
|
226
|
-
# on the stack
|
|
227
|
-
stack.move_frames_to_top(frames_to_resume)
|
|
228
|
-
agent_stack_frame = next(
|
|
229
|
-
(frame for frame in frames_to_resume if isinstance(frame, AgentStackFrame)),
|
|
230
|
-
None,
|
|
231
|
-
)
|
|
232
|
-
if agent_stack_frame:
|
|
233
|
-
agent_id = agent_stack_frame.agent_id
|
|
234
|
-
applied_events.append(AgentResumed(agent_id, agent_stack_frame.flow_id))
|
|
235
|
-
|
|
236
|
-
# Create flow interruption and resumption events
|
|
237
|
-
applied_events.extend(
|
|
238
|
-
[
|
|
239
|
-
# the current active flow is interrupted
|
|
240
|
-
FlowInterrupted(
|
|
241
|
-
original_user_frame.flow_id, original_user_frame.step_id
|
|
242
|
-
),
|
|
243
|
-
# the flow, which was on the stack, is resumed
|
|
244
|
-
FlowResumed(user_frame_to_resume.flow_id, user_frame_to_resume.step_id),
|
|
245
|
-
]
|
|
246
|
-
)
|
|
247
|
-
|
|
248
|
-
return applied_events + tracker.create_stack_updated_events(stack)
|
|
249
|
-
|
|
250
|
-
def _collect_frames_to_resume(
|
|
251
|
-
self, stack: DialogueStack, target_flow_id: str
|
|
252
|
-
) -> Tuple[List[DialogueStackFrame], Optional[UserFlowStackFrame]]:
|
|
253
|
-
"""Collect frames that need to be resumed for the target flow.
|
|
254
|
-
|
|
255
|
-
Args:
|
|
256
|
-
stack: The stack to collect frames from.
|
|
257
|
-
target_flow_id: The ID of the flow to resume.
|
|
258
|
-
|
|
259
|
-
Returns:
|
|
260
|
-
A tuple containing (frames_to_resume, frame_to_resume).
|
|
261
|
-
"""
|
|
262
|
-
frames_to_resume: List[DialogueStackFrame] = []
|
|
263
|
-
frame_found = False
|
|
264
|
-
frame_to_resume = None
|
|
265
|
-
|
|
266
|
-
for frame in stack.frames:
|
|
267
|
-
if isinstance(frame, UserFlowStackFrame) and (
|
|
268
|
-
frame.frame_type == FlowStackFrameType.REGULAR
|
|
269
|
-
or frame.frame_type == FlowStackFrameType.INTERRUPT
|
|
270
|
-
):
|
|
271
|
-
if frame.flow_id == target_flow_id:
|
|
272
|
-
frames_to_resume.append(frame)
|
|
273
|
-
frame_to_resume = frame
|
|
274
|
-
frame_found = True
|
|
275
|
-
continue
|
|
276
|
-
elif frame_found:
|
|
277
|
-
break
|
|
278
|
-
|
|
279
|
-
if frame_found:
|
|
280
|
-
frames_to_resume.append(frame)
|
|
281
|
-
|
|
282
|
-
return list(frames_to_resume), frame_to_resume
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
def _remove_pattern_continue_interrupted_frames(stack: DialogueStack) -> DialogueStack:
|
|
286
|
-
"""Remove pattern_continue_interrupted frames from the stack."""
|
|
287
|
-
if not is_continue_interrupted_flow_active(stack):
|
|
288
|
-
return stack
|
|
289
|
-
|
|
290
|
-
# remove pattern_continue_interrupted from the stack
|
|
291
|
-
top_frame = stack.top()
|
|
292
|
-
while isinstance(top_frame, PatternFlowStackFrame):
|
|
293
|
-
# If the top frame is a pattern frame, we need to remove it
|
|
294
|
-
# before continuing with the active user flow frame.
|
|
295
|
-
# This prevents the pattern frame
|
|
296
|
-
# from being left on the stack when the flow is started
|
|
297
|
-
# which would prevent pattern_completed to be triggered
|
|
298
|
-
# once the user flow is completed.
|
|
299
|
-
stack.pop()
|
|
300
|
-
top_frame = stack.top()
|
|
301
|
-
|
|
302
|
-
return stack
|
|
@@ -5,9 +5,21 @@ import structlog
|
|
|
5
5
|
from rasa.dialogue_understanding.patterns.validate_slot import (
|
|
6
6
|
ValidateSlotPatternFlowStackFrame,
|
|
7
7
|
)
|
|
8
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
9
|
+
from rasa.dialogue_understanding.stack.frames.dialogue_stack_frame import (
|
|
10
|
+
DialogueStackFrame,
|
|
11
|
+
)
|
|
12
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
13
|
+
AgentStackFrame,
|
|
14
|
+
FlowStackFrameType,
|
|
15
|
+
UserFlowStackFrame,
|
|
16
|
+
)
|
|
17
|
+
from rasa.dialogue_understanding.stack.frames.pattern_frame import PatternFlowStackFrame
|
|
8
18
|
from rasa.shared.constants import ACTION_ASK_PREFIX, UTTER_ASK_PREFIX
|
|
9
19
|
from rasa.shared.core.events import (
|
|
20
|
+
AgentResumed,
|
|
10
21
|
Event,
|
|
22
|
+
FlowResumed,
|
|
11
23
|
SlotSet,
|
|
12
24
|
)
|
|
13
25
|
from rasa.shared.core.flows import FlowsList
|
|
@@ -154,3 +166,109 @@ def find_default_flows_collecting_slot(
|
|
|
154
166
|
for step in flow.get_collect_steps()
|
|
155
167
|
)
|
|
156
168
|
]
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def resume_flow(
|
|
172
|
+
flow_to_resume: str,
|
|
173
|
+
tracker: DialogueStateTracker,
|
|
174
|
+
stack: DialogueStack,
|
|
175
|
+
) -> List[Event]:
|
|
176
|
+
"""Resumes a flow by reordering frames."""
|
|
177
|
+
applied_events: List[Event] = []
|
|
178
|
+
|
|
179
|
+
# Resume existing flow by reordering frames
|
|
180
|
+
frames_to_resume, user_frame_to_resume = collect_frames_to_resume(
|
|
181
|
+
stack, flow_to_resume
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# if the flow is not on the stack, do nothing
|
|
185
|
+
# this should not happen, but just in case
|
|
186
|
+
if user_frame_to_resume is None:
|
|
187
|
+
structlogger.error(
|
|
188
|
+
"resume_flow.no_user_frame_to_resume",
|
|
189
|
+
flow_to_resume=flow_to_resume,
|
|
190
|
+
)
|
|
191
|
+
return []
|
|
192
|
+
|
|
193
|
+
# move the frames to the top of the stack, e.g. reorder the frames
|
|
194
|
+
# on the stack
|
|
195
|
+
stack.move_frames_to_top(frames_to_resume)
|
|
196
|
+
|
|
197
|
+
# create agent resumed events if the agent frame is now on top of the stack
|
|
198
|
+
agent_stack_frame = next(
|
|
199
|
+
(frame for frame in frames_to_resume if isinstance(frame, AgentStackFrame)),
|
|
200
|
+
None,
|
|
201
|
+
)
|
|
202
|
+
if agent_stack_frame:
|
|
203
|
+
agent_id = agent_stack_frame.agent_id
|
|
204
|
+
applied_events.append(AgentResumed(agent_id, agent_stack_frame.flow_id))
|
|
205
|
+
|
|
206
|
+
# Create flow interruption and resumption events
|
|
207
|
+
applied_events.extend(
|
|
208
|
+
[
|
|
209
|
+
# the flow, which was on the stack, is resumed
|
|
210
|
+
FlowResumed(user_frame_to_resume.flow_id, user_frame_to_resume.step_id),
|
|
211
|
+
]
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
return applied_events + tracker.create_stack_updated_events(stack)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def collect_frames_to_resume(
|
|
218
|
+
stack: DialogueStack,
|
|
219
|
+
target_flow_id: str, # pyright: ignore[reportUndefinedVariable]
|
|
220
|
+
) -> Tuple[List[DialogueStackFrame], Optional[UserFlowStackFrame]]:
|
|
221
|
+
"""Collect frames that need to be resumed for the target flow.
|
|
222
|
+
|
|
223
|
+
Args:
|
|
224
|
+
stack: The stack to collect frames from.
|
|
225
|
+
target_flow_id: The ID of the flow to resume.
|
|
226
|
+
|
|
227
|
+
Returns:
|
|
228
|
+
A tuple containing (frames_to_resume, frame_to_resume).
|
|
229
|
+
"""
|
|
230
|
+
frames_to_resume: List[DialogueStackFrame] = []
|
|
231
|
+
frame_found = False
|
|
232
|
+
frame_to_resume = None
|
|
233
|
+
|
|
234
|
+
for frame in stack.frames:
|
|
235
|
+
if isinstance(frame, UserFlowStackFrame) and (
|
|
236
|
+
frame.frame_type == FlowStackFrameType.REGULAR
|
|
237
|
+
or frame.frame_type == FlowStackFrameType.INTERRUPT
|
|
238
|
+
):
|
|
239
|
+
if frame.flow_id == target_flow_id:
|
|
240
|
+
frames_to_resume.append(frame)
|
|
241
|
+
frame_to_resume = frame
|
|
242
|
+
frame_found = True
|
|
243
|
+
continue
|
|
244
|
+
elif frame_found:
|
|
245
|
+
break
|
|
246
|
+
|
|
247
|
+
if frame_found:
|
|
248
|
+
frames_to_resume.append(frame)
|
|
249
|
+
|
|
250
|
+
return list(frames_to_resume), frame_to_resume
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def remove_pattern_continue_interrupted_frames(stack: DialogueStack) -> DialogueStack:
|
|
254
|
+
"""Remove pattern_continue_interrupted frames from the stack."""
|
|
255
|
+
from rasa.dialogue_understanding.stack.utils import (
|
|
256
|
+
is_continue_interrupted_flow_active,
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
if not is_continue_interrupted_flow_active(stack):
|
|
260
|
+
return stack
|
|
261
|
+
|
|
262
|
+
# remove pattern_continue_interrupted from the stack
|
|
263
|
+
top_frame = stack.top()
|
|
264
|
+
while isinstance(top_frame, PatternFlowStackFrame):
|
|
265
|
+
# If the top frame is a pattern frame, we need to remove it
|
|
266
|
+
# before continuing with the active user flow frame.
|
|
267
|
+
# This prevents the pattern frame
|
|
268
|
+
# from being left on the stack when the flow is started
|
|
269
|
+
# which would prevent pattern_completed to be triggered
|
|
270
|
+
# once the user flow is completed.
|
|
271
|
+
stack.pop()
|
|
272
|
+
top_frame = stack.top()
|
|
273
|
+
|
|
274
|
+
return stack
|
|
@@ -219,11 +219,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
|
|
|
219
219
|
if self.vector_store is not None:
|
|
220
220
|
with self._model_storage.write_to(self._resource) as model_path:
|
|
221
221
|
self.vector_store.save_local(model_path)
|
|
222
|
-
else:
|
|
223
|
-
structlogger.warning(
|
|
224
|
-
"flow_retrieval.persist_vector_store.not_initialized",
|
|
225
|
-
event_info="Vector store is None, not persisted.",
|
|
226
|
-
)
|
|
227
222
|
|
|
228
223
|
def _persist_config(self) -> None:
|
|
229
224
|
with self._model_storage.write_to(self._resource) as path:
|
|
@@ -249,6 +244,16 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
|
|
|
249
244
|
)
|
|
250
245
|
|
|
251
246
|
flows_to_embedd = flows.exclude_link_only_flows()
|
|
247
|
+
|
|
248
|
+
if not flows_to_embedd:
|
|
249
|
+
structlogger.debug(
|
|
250
|
+
"flow_retrieval.populate_vector_store.no_flows_to_embed",
|
|
251
|
+
event_info=(
|
|
252
|
+
"No flows to embed in the vector store, skipping population."
|
|
253
|
+
),
|
|
254
|
+
)
|
|
255
|
+
return
|
|
256
|
+
|
|
252
257
|
embeddings = self._create_embedder(self.config)
|
|
253
258
|
documents = self._generate_flow_documents(flows_to_embedd, domain)
|
|
254
259
|
try:
|
|
@@ -420,10 +425,6 @@ class FlowRetrieval(EmbeddingsHealthCheckMixin):
|
|
|
420
425
|
The top k documents with similarity scores.
|
|
421
426
|
"""
|
|
422
427
|
if self.vector_store is None:
|
|
423
|
-
structlogger.error(
|
|
424
|
-
"flow_retrieval.query_vector_store.vector_store_not_configured",
|
|
425
|
-
event_info="Vector store is not configured",
|
|
426
|
-
)
|
|
427
428
|
return []
|
|
428
429
|
try:
|
|
429
430
|
documents_with_scores = (
|
|
@@ -5,15 +5,15 @@ Your task is to analyze the current conversation context and generate a list of
|
|
|
5
5
|
|
|
6
6
|
## Available Actions:
|
|
7
7
|
* `start flow flow_name`: Starting a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
|
|
8
|
-
* `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
|
|
8
|
+
* `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values. ONLY use slots that are explicitly defined in the flow's slot list.
|
|
9
9
|
* `cancel flow`: Cancelling the current flow.
|
|
10
10
|
* `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: Disambiguate which flow should be started when user input is ambiguous by listing the potential flows as options. For example, `disambiguate flows list_contacts add_contact remove_contact ...` if the user just wrote "contacts".
|
|
11
11
|
* `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
|
|
12
12
|
* `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
|
|
13
13
|
* `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
|
|
14
14
|
* `repeat message`: Repeating the last bot message.
|
|
15
|
-
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
16
|
-
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user
|
|
15
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}. This has HIGHEST PRIORITY when an agent is active and the user is responding to agent questions.{% endif %}
|
|
16
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user changed his mind about the car he wants to buy. ONLY use agents that are listed in the `completed_agents` section.{% endif %}
|
|
17
17
|
|
|
18
18
|
--
|
|
19
19
|
|
|
@@ -23,13 +23,18 @@ Your task is to analyze the current conversation context and generate a list of
|
|
|
23
23
|
* Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
|
|
24
24
|
* Always refer to the slot description to determine what information should be extracted and how it should be formatted.
|
|
25
25
|
* For text slots, extract values exactly as provided by the user unless the slot description specifies otherwise. Preserve formatting and avoid rewording, truncation, or making assumptions.
|
|
26
|
+
* ONLY use `set slot` with slots that are explicitly defined in the current flow's slot list. Do NOT create or assume slots that don't exist.
|
|
26
27
|
* Only use information provided by the user.
|
|
27
28
|
* Use clarification in ambiguous cases.
|
|
28
29
|
* Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
|
|
29
30
|
* Do not cancel the flow unless the user explicitly requests it.
|
|
30
31
|
* Strictly adhere to the provided action format.
|
|
32
|
+
* ONLY use the exact actions listed above. Do NOT invent new actions like "respond <message>" or any other variations.
|
|
31
33
|
* Focus on the last message and take it one step at a time.
|
|
32
|
-
* Use the previous conversation steps only to aid understanding.
|
|
34
|
+
* Use the previous conversation steps only to aid understanding.{% if active_agent %}
|
|
35
|
+
* When an agent is active, ALWAYS prioritize `continue agent` over `provide info` or `offtopic reply` unless the user is clearly asking something unrelated to the agent's task.{% endif %}{% if completed_agents %}
|
|
36
|
+
* ONLY use `restart agent` with agents that are listed in the `completed_agents` section. Do NOT restart non-existent agents.{% endif %}{% if active_agent or completed_agents %}
|
|
37
|
+
* If you're unsure about agent names, refer to the structured data provided in the `Current State` section.{% endif %}
|
|
33
38
|
|
|
34
39
|
--
|
|
35
40
|
|
|
@@ -44,7 +49,7 @@ Use the following structured data:
|
|
|
44
49
|
## Current State
|
|
45
50
|
{% if current_flow != None %}Use the following structured data:
|
|
46
51
|
```json
|
|
47
|
-
{"active_flow":
|
|
52
|
+
{"active_flow":{"name":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":{{ current_slot_description | to_json_escaped_string }}},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}{% if active_agent %},"active_agent":{"name":"{{ active_agent.name }}","description":{{ active_agent.description | to_json_escaped_string }}}{% endif %}{% if completed_agents %},"completed_agents":[{% for agent in completed_agents %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
48
53
|
```{% else %}
|
|
49
54
|
You are currently not inside any flow.{% endif %}
|
|
50
55
|
|
|
@@ -13,15 +13,15 @@ Use the following structured data:
|
|
|
13
13
|
|
|
14
14
|
## Available Actions:
|
|
15
15
|
* `start flow flow_name`: Starting a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
|
|
16
|
-
* `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
|
|
16
|
+
* `set slot slot_name slot_value`: Slot setting. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values. ONLY use slots that are explicitly defined in the flow's slot list.
|
|
17
17
|
* `cancel flow`: Cancelling the current flow.
|
|
18
18
|
* `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: Disambiguate which flow should be started when user input is ambiguous by listing the potential flows as options. For example, `disambiguate flows list_contacts add_contact remove_contact ...` if the user just wrote "contacts".
|
|
19
19
|
* `provide info`: Responding to the user's questions by supplying relevant information, such as answering FAQs or explaining services.
|
|
20
20
|
* `offtopic reply`: Responding to casual or social user messages that are unrelated to any flows, engaging in friendly conversation and addressing off-topic remarks.
|
|
21
21
|
* `hand over`: Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one.
|
|
22
22
|
* `repeat message`: Repeating the last bot message.
|
|
23
|
-
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
24
|
-
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user
|
|
23
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}. This has HIGHEST PRIORITY when an agent is active and the user is responding to agent questions.{% endif %}
|
|
24
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user changed his mind about the car he wants to buy. ONLY use agents that are listed in the `completed_agents` section.{% endif %}
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
@@ -30,13 +30,18 @@ Use the following structured data:
|
|
|
30
30
|
* For categorical slots try to match the user message with allowed slot values. Use "other" if you cannot match it.
|
|
31
31
|
* Set the boolean slots based on the user response. Map positive responses to `True`, and negative to `False`.
|
|
32
32
|
* Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
|
|
33
|
+
* ONLY use `set slot` with slots that are explicitly defined in the current flow's slot list. Do NOT create or assume slots that don't exist.
|
|
33
34
|
* Only use information provided by the user.
|
|
34
35
|
* Use clarification in ambiguous cases.
|
|
35
36
|
* Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
|
|
36
37
|
* Do not cancel the flow unless the user explicitly requests it.
|
|
37
38
|
* Strictly adhere to the provided action format.
|
|
39
|
+
* ONLY use the exact actions listed above. Do NOT invent new actions like "respond <message>" or any other variations.
|
|
38
40
|
* Focus on the last message and take it one step at a time.
|
|
39
|
-
* Use the previous conversation steps only to aid understanding.
|
|
41
|
+
* Use the previous conversation steps only to aid understanding.{% if active_agent %}
|
|
42
|
+
* When an agent is active, ALWAYS prioritize `continue agent` over `provide info` or `offtopic reply` unless the user is clearly asking something unrelated to the agent's task.{% endif %}{% if completed_agents %}
|
|
43
|
+
* ONLY use `restart agent` with agents that are listed in the `completed_agents` section. Do NOT restart non-existent agents.{% endif %}{% if active_agent or completed_agents %}
|
|
44
|
+
* If you're unsure about agent names, refer to the structured data provided in the `Current State` section.{% endif %}
|
|
40
45
|
|
|
41
46
|
---
|
|
42
47
|
|
|
@@ -44,7 +49,7 @@ Use the following structured data:
|
|
|
44
49
|
{% if current_flow != None %}
|
|
45
50
|
Use the following structured data:
|
|
46
51
|
```json
|
|
47
|
-
{"active_flow":
|
|
52
|
+
{"active_flow":{"name":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":{{ current_slot_description | to_json_escaped_string }}},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}{% if active_agent %},"active_agent":{"name":"{{ active_agent.name }}","description":{{ active_agent.description | to_json_escaped_string }}}{% endif %}{% if completed_agents %},"completed_agents":[{% for agent in completed_agents %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
48
53
|
```{% else %}
|
|
49
54
|
You are currently not inside any flow.{% endif %}
|
|
50
55
|
|
|
@@ -5,13 +5,13 @@ Your task is to analyze the current conversation context and generate a list of
|
|
|
5
5
|
|
|
6
6
|
## Available Actions:
|
|
7
7
|
* `start flow flow_name`: Start a flow. For example, `start flow transfer_money` or `start flow list_contacts`.
|
|
8
|
-
* `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values.
|
|
8
|
+
* `set slot slot_name slot_value`: Set a slot for the active flow. For example, `set slot transfer_money_recipient Freddy`. Can be used to correct and change previously set values. ONLY use slots that are explicitly defined in the flow's slot list.
|
|
9
9
|
* `disambiguate flows flow_name1 flow_name2 ... flow_name_n`: When a message could refer to multiple flows, list the possible flows as options to clarify. Example: `disambiguate flows list_contacts add_contact remove_contact`.
|
|
10
10
|
* `search and reply`: Provide a response from the knowledge base to address the user's inquiry when no flows fit, including domain knowledge, FAQs, and all off-topic or social messages.
|
|
11
11
|
* `cancel flow`: Cancel the current flow if the user requests it.
|
|
12
12
|
* `repeat message`: Repeat the last bot message.
|
|
13
|
-
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}.{% endif %}
|
|
14
|
-
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user
|
|
13
|
+
{% if active_agent %} * `continue agent`: Continue the currently active agent {{ active_agent.name }}. This has HIGHEST PRIORITY when an agent is active and the user is responding to agent questions.{% endif %}
|
|
14
|
+
{% if completed_agents %}* `restart agent agent_name`: Restart the agent with the given name, in case the user wants to change some answer to a previous question asked by the agent. For example, `restart agent car_research_agent` if the user changed his mind about the car he wants to buy. ONLY use agents that are listed in the `completed_agents` section.{% endif %}
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -24,6 +24,7 @@ Your task is to analyze the current conversation context and generate a list of
|
|
|
24
24
|
* For categorical slots, try to match the user message with allowed slot values. Use "other" if you cannot match it.
|
|
25
25
|
* Set the boolean slots based on the user's response. Map positive responses to `True`, and negative to `False`.
|
|
26
26
|
* Extract text slot values exactly as provided by the user. Avoid assumptions, format changes, or partial extractions.
|
|
27
|
+
* ONLY use `set slot` with slots that are explicitly defined in the current flow's slot list. Do NOT create or assume slots that don't exist.
|
|
27
28
|
### Disambiguate Flows
|
|
28
29
|
* Use `disambiguate flows` when the user's message matches multiple flows and you cannot decide which flow is most appropriate.
|
|
29
30
|
* If the user message is short and not precise enough to start a flow or `search and reply`, disambiguate.
|
|
@@ -34,22 +35,29 @@ Your task is to analyze the current conversation context and generate a list of
|
|
|
34
35
|
* Flow Priority: If you are unsure between starting a flow or `search and reply`, always prioritize starting a flow.
|
|
35
36
|
### Cancel Flow
|
|
36
37
|
* Do not cancel any flow unless the user explicitly requests it.
|
|
37
|
-
* Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.
|
|
38
|
-
###
|
|
38
|
+
* Multiple flows can be started without cancelling the previous, if the user wants to pursue multiple processes.{% if active_agent or completed_agents %}
|
|
39
|
+
### Agents{% if active_agent %}
|
|
40
|
+
* When an agent is active, ALWAYS prioritize `continue agent` over `search and reply` unless the user is clearly asking something unrelated to the agent's task.{% endif %}{% if completed_agents %}
|
|
41
|
+
* ONLY use `restart agent` with agents that are listed in the `completed_agents` section. Do NOT restart non-existent agents.{% endif %}
|
|
42
|
+
* If you're unsure about agent names, refer to the structured data provided in the `Current State` section.
|
|
43
|
+
{% endif %}### General Tips
|
|
39
44
|
* Only use information provided by the user.
|
|
40
45
|
* Strictly adhere to the provided action format.
|
|
46
|
+
* ONLY use the exact actions listed above. Do NOT invent new actions like "respond <message>" or any other variations.
|
|
41
47
|
* Focus on the last message and take it one step at a time.
|
|
42
48
|
* Use the previous conversation steps only to aid understanding.
|
|
43
49
|
|
|
50
|
+
|
|
44
51
|
---
|
|
45
52
|
|
|
46
53
|
## Decision Rule Table
|
|
47
|
-
| Condition
|
|
48
|
-
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
54
|
+
| Condition | Action |
|
|
55
|
+
|---------------------------------------------------------------|--------------------|{% if active_agent %}
|
|
56
|
+
| Agent is active and the user is responding to agent questions | continue agent |{% endif %}
|
|
57
|
+
| Flow perfectly matches user's message | start flow |
|
|
58
|
+
| Multiple flows are equally strong, relevant matches | disambiguate flows |
|
|
59
|
+
| User's message is unclear or imprecise | disambiguate flows |
|
|
60
|
+
| No flow fits at all, but knowledge base may help | search and reply |
|
|
53
61
|
|
|
54
62
|
---
|
|
55
63
|
|
|
@@ -64,7 +72,7 @@ Use the following structured data:
|
|
|
64
72
|
## Current State
|
|
65
73
|
{% if current_flow != None %}Use the following structured data:
|
|
66
74
|
```json
|
|
67
|
-
{"active_flow":
|
|
75
|
+
{"active_flow":{"name":"{{ current_flow }}","current_step":{"requested_slot":"{{ current_slot }}","requested_slot_description":{{ current_slot_description | to_json_escaped_string }}},"slots":[{% for slot in flow_slots %}{"name":"{{ slot.name }}","value":"{{ slot.value }}","type":"{{ slot.type }}"{% if slot.description %},"description":{{ slot.description | to_json_escaped_string }}{% endif %}{% if slot.allowed_values %},"allowed_values":"{{ slot.allowed_values }}"{% endif %}}{% if not loop.last %},{% endif %}{% endfor %}]}{% if active_agent %},"active_agent":{"name":"{{ active_agent.name }}","description":{{ active_agent.description | to_json_escaped_string }}}{% endif %}{% if completed_agents %},"completed_agents":[{% for agent in completed_agents %}{"name":"{{ agent.name }}","description":{{ agent.description | to_json_escaped_string }}}{% if not loop.last %},{% endif %}{% endfor %}]{% endif %}}
|
|
68
76
|
```{% else %}
|
|
69
77
|
You are currently not inside any flow.{% endif %}
|
|
70
78
|
|