rasa-pro 3.14.0.dev7__py3-none-any.whl → 3.14.0.dev9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/agents/agent_manager.py +1 -1
- rasa/agents/constants.py +2 -2
- rasa/agents/protocol/a2a/a2a_agent.py +385 -227
- rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
- rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
- rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
- rasa/agents/schemas/agent_output.py +1 -1
- rasa/agents/utils.py +90 -1
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +92 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +31 -0
- rasa/builder/copilot/copilot.py +450 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +500 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +210 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/constants.py +9 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +206 -0
- rasa/builder/guardrails/models.py +231 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +328 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +282 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +243 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +458 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1345 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +244 -0
- rasa/builder/training_service.py +194 -0
- rasa/builder/validation_service.py +97 -0
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +9 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +8 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/finance/README.md +25 -0
- rasa/cli/project_templates/finance/actions/__init__.py +46 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
- rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
- rasa/cli/project_templates/finance/actions/database.py +277 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
- rasa/cli/project_templates/finance/config.yml +23 -0
- rasa/cli/project_templates/finance/credentials.yml +32 -0
- rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
- rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
- rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
- rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
- rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
- rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
- rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
- rasa/cli/project_templates/finance/csvs/users.csv +4 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
- rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/data/data.md +11 -0
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
- rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
- rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
- rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
- rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
- rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
- rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
- rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/domain/domain.md +10 -0
- rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
- rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
- rasa/cli/project_templates/finance/endpoints.yml +66 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +5 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +14 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/scaffold.py +46 -2
- rasa/core/actions/action.py +0 -1
- rasa/core/available_agents.py +2 -0
- rasa/core/available_endpoints.py +17 -2
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +2 -22
- rasa/core/channels/inspector/README.md +26 -14
- rasa/core/channels/inspector/dist/assets/{arc-cce7e0a8.js → arc-edef10dd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.js → index-3862675e-ecdce073.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +16 -42
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
- rasa/core/channels/inspector/src/types.ts +32 -7
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +59 -57
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +3 -0
- rasa/core/channels/voice_stream/browser_audio.py +53 -3
- rasa/core/channels/voice_stream/genesys.py +2 -1
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
- rasa/core/channels/voice_stream/voice_channel.py +66 -3
- rasa/core/constants.py +6 -0
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
- rasa/core/policies/enterprise_search_policy.py +4 -7
- rasa/core/policies/flows/flow_executor.py +14 -5
- rasa/core/policies/ted_policy.py +7 -5
- rasa/core/processor.py +32 -0
- rasa/core/redis_connection_factory.py +411 -0
- rasa/core/run.py +13 -3
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -1
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
- rasa/dialogue_understanding/processor/command_processor.py +35 -0
- rasa/engine/graph.py +5 -1
- rasa/engine/recipes/default_components.py +78 -10
- rasa/engine/recipes/default_recipe.py +41 -1
- rasa/engine/storage/local_model_storage.py +83 -3
- rasa/graph_components/validators/default_recipe_validator.py +153 -135
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +20 -15
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +1 -1
- rasa/model_training.py +14 -0
- rasa/nlu/classifiers/diet_classifier.py +22 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
- rasa/nlu/extractors/extractor.py +1 -2
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +74 -0
- rasa/shared/agents/auth/agent_auth_manager.py +86 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
- rasa/shared/agents/auth/constants.py +11 -0
- rasa/shared/agents/auth/types.py +11 -0
- rasa/shared/core/constants.py +1 -0
- rasa/shared/core/domain.py +58 -11
- rasa/shared/core/events.py +2 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +6 -0
- rasa/shared/core/flows/steps/call.py +15 -12
- rasa/shared/core/flows/validation.py +238 -44
- rasa/shared/core/flows/yaml_flows_io.py +15 -6
- rasa/shared/core/slots.py +4 -0
- rasa/shared/exceptions.py +12 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/_utils.py +60 -44
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
- rasa/shared/providers/llm/_base_litellm_client.py +2 -2
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
- rasa/shared/providers/llm/llm_response.py +4 -4
- rasa/shared/utils/common.py +24 -0
- rasa/shared/utils/llm.py +2 -1
- rasa/shared/utils/mcp/server_connection.py +84 -23
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/studio/upload.py +16 -47
- rasa/telemetry.py +97 -23
- rasa/tracing/config.py +38 -12
- rasa/tracing/instrumentation/attribute_extractors.py +5 -1
- rasa/tracing/instrumentation/instrumentation.py +85 -8
- rasa/utils/common.py +1 -1
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/tensorflow/__init__.py +29 -0
- rasa/utils/tensorflow/callback.py +1 -1
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +11 -4
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +41 -6
- rasa/utils/tensorflow/rasa_layers.py +6 -4
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +68 -38
- rasa/validator.py +18 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dev9.dist-info/METADATA +199 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/RECORD +466 -156
- rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
- rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/entry_points.txt +0 -0
|
@@ -10,40 +10,61 @@ from rasa.core.policies.flow_policy import FlowPolicy
|
|
|
10
10
|
from rasa.core.policies.memoization import AugmentedMemoizationPolicy, MemoizationPolicy
|
|
11
11
|
from rasa.core.policies.policy import Policy, SupportedData
|
|
12
12
|
from rasa.core.policies.rule_policy import RulePolicy
|
|
13
|
-
|
|
14
|
-
# from rasa.core.policies.ted_policy import TEDPolicy
|
|
15
|
-
# from rasa.core.policies.unexpected_intent_policy import UnexpecTEDIntentPolicy
|
|
16
13
|
from rasa.engine.graph import ExecutionContext, GraphComponent, GraphSchema, SchemaNode
|
|
17
14
|
from rasa.engine.storage.resource import Resource
|
|
18
15
|
from rasa.engine.storage.storage import ModelStorage
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# CRFEntityExtractorOptions,
|
|
24
|
-
# )
|
|
16
|
+
from rasa.nlu.extractors.crf_entity_extractor import (
|
|
17
|
+
CRFEntityExtractor,
|
|
18
|
+
CRFEntityExtractorOptions,
|
|
19
|
+
)
|
|
25
20
|
from rasa.nlu.extractors.entity_synonyms import EntitySynonymMapper
|
|
26
21
|
from rasa.nlu.extractors.mitie_entity_extractor import MitieEntityExtractor
|
|
27
22
|
from rasa.nlu.extractors.regex_entity_extractor import RegexEntityExtractor
|
|
28
23
|
from rasa.nlu.featurizers.featurizer import Featurizer
|
|
29
24
|
from rasa.nlu.featurizers.sparse_featurizer.regex_featurizer import RegexFeaturizer
|
|
30
|
-
|
|
31
|
-
# from rasa.nlu.selectors.response_selector import ResponseSelector
|
|
32
25
|
from rasa.nlu.tokenizers.tokenizer import Tokenizer
|
|
33
26
|
from rasa.shared.constants import (
|
|
27
|
+
DEFAULT_CONFIG_PATH,
|
|
34
28
|
DOCS_URL_COMPONENTS,
|
|
29
|
+
DOCS_URL_DEFAULT_ACTIONS,
|
|
35
30
|
DOCS_URL_NLU_BASED_POLICIES,
|
|
31
|
+
DOCS_URL_RULES,
|
|
32
|
+
)
|
|
33
|
+
from rasa.shared.core.constants import (
|
|
34
|
+
ACTION_BACK_NAME,
|
|
35
|
+
ACTION_RESTART_NAME,
|
|
36
|
+
USER_INTENT_BACK,
|
|
37
|
+
USER_INTENT_RESTART,
|
|
36
38
|
)
|
|
37
|
-
from rasa.shared.core.domain import Domain
|
|
39
|
+
from rasa.shared.core.domain import Domain, InvalidDomain
|
|
38
40
|
from rasa.shared.core.training_data.structures import RuleStep, StoryGraph
|
|
39
41
|
from rasa.shared.exceptions import InvalidConfigException
|
|
40
42
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
41
43
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
44
|
+
from rasa.shared.utils.common import conditional_import
|
|
45
|
+
|
|
46
|
+
# Conditional imports for TensorFlow-dependent components
|
|
47
|
+
TEDPolicy, TED_POLICY_AVAILABLE = conditional_import(
|
|
48
|
+
"rasa.core.policies.ted_policy", "TEDPolicy"
|
|
49
|
+
)
|
|
50
|
+
UnexpecTEDIntentPolicy, UNEXPECTED_INTENT_POLICY_AVAILABLE = conditional_import(
|
|
51
|
+
"rasa.core.policies.unexpected_intent_policy", "UnexpecTEDIntentPolicy"
|
|
52
|
+
)
|
|
53
|
+
DIETClassifier, DIET_CLASSIFIER_AVAILABLE = conditional_import(
|
|
54
|
+
"rasa.nlu.classifiers.diet_classifier", "DIETClassifier"
|
|
55
|
+
)
|
|
56
|
+
ResponseSelector, RESPONSE_SELECTOR_AVAILABLE = conditional_import(
|
|
57
|
+
"rasa.nlu.selectors.response_selector", "ResponseSelector"
|
|
58
|
+
)
|
|
42
59
|
|
|
43
60
|
# TODO: Can we replace this with the registered types from the regitry?
|
|
44
|
-
TRAINABLE_EXTRACTORS = [MitieEntityExtractor
|
|
61
|
+
TRAINABLE_EXTRACTORS = [MitieEntityExtractor, CRFEntityExtractor]
|
|
62
|
+
if DIET_CLASSIFIER_AVAILABLE:
|
|
63
|
+
TRAINABLE_EXTRACTORS.append(DIETClassifier)
|
|
45
64
|
# TODO: replace these once the Recipe is merged (used in tests)
|
|
46
65
|
POLICY_CLASSSES = {MemoizationPolicy, RulePolicy}
|
|
66
|
+
if TED_POLICY_AVAILABLE:
|
|
67
|
+
POLICY_CLASSSES.add(TEDPolicy)
|
|
47
68
|
|
|
48
69
|
|
|
49
70
|
def _types_to_str(types: Iterable[Type]) -> Text:
|
|
@@ -129,17 +150,16 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
129
150
|
"""
|
|
130
151
|
if (
|
|
131
152
|
training_data.response_examples
|
|
132
|
-
|
|
153
|
+
and ResponseSelector not in self._component_types
|
|
133
154
|
):
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
# )
|
|
155
|
+
rasa.shared.utils.io.raise_warning(
|
|
156
|
+
f"You have defined training data with examples for training a response "
|
|
157
|
+
f"selector, but your NLU configuration does not include a response "
|
|
158
|
+
f"selector component. "
|
|
159
|
+
f"To train a model on your response selector data, add a "
|
|
160
|
+
f"'{ResponseSelector.__name__}' to your configuration.",
|
|
161
|
+
docs=DOCS_URL_COMPONENTS,
|
|
162
|
+
)
|
|
143
163
|
|
|
144
164
|
if training_data.entity_examples and self._component_types.isdisjoint(
|
|
145
165
|
TRAINABLE_EXTRACTORS
|
|
@@ -153,21 +173,21 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
153
173
|
docs=DOCS_URL_COMPONENTS,
|
|
154
174
|
)
|
|
155
175
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
176
|
+
if training_data.entity_examples and self._component_types.isdisjoint(
|
|
177
|
+
{DIETClassifier, CRFEntityExtractor}
|
|
178
|
+
):
|
|
179
|
+
if training_data.entity_roles_groups_used():
|
|
180
|
+
rasa.shared.utils.io.raise_warning(
|
|
181
|
+
f"You have defined training data with entities that "
|
|
182
|
+
f"have roles/groups, but your NLU configuration does not "
|
|
183
|
+
f"include a '{DIETClassifier.__name__}' "
|
|
184
|
+
f"or a '{CRFEntityExtractor.__name__}'. "
|
|
185
|
+
f"To train entities that have roles/groups, "
|
|
186
|
+
f"add either '{DIETClassifier.__name__}' "
|
|
187
|
+
f"or '{CRFEntityExtractor.__name__}' to your "
|
|
188
|
+
f"configuration.",
|
|
189
|
+
docs=DOCS_URL_COMPONENTS,
|
|
190
|
+
)
|
|
171
191
|
|
|
172
192
|
if training_data.regex_features and self._component_types.isdisjoint(
|
|
173
193
|
[RegexFeaturizer, RegexEntityExtractor]
|
|
@@ -197,45 +217,45 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
197
217
|
docs=DOCS_URL_COMPONENTS,
|
|
198
218
|
)
|
|
199
219
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
220
|
+
if training_data.lookup_tables:
|
|
221
|
+
if self._component_types.isdisjoint([CRFEntityExtractor, DIETClassifier]):
|
|
222
|
+
rasa.shared.utils.io.raise_warning(
|
|
223
|
+
f"You have defined training data consisting of lookup tables, but "
|
|
224
|
+
f"your NLU configuration does not include any components "
|
|
225
|
+
f"that uses the features created from the lookup table. "
|
|
226
|
+
f"To make use of the features that are created with the "
|
|
227
|
+
f"help of the lookup tables, "
|
|
228
|
+
f"add a '{DIETClassifier.__name__}' or a "
|
|
229
|
+
f"'{CRFEntityExtractor.__name__}' "
|
|
230
|
+
f"with the 'pattern' feature "
|
|
231
|
+
f"to your configuration.",
|
|
232
|
+
docs=DOCS_URL_COMPONENTS,
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
elif CRFEntityExtractor in self._component_types:
|
|
236
|
+
crf_schema_nodes = [
|
|
237
|
+
schema_node
|
|
238
|
+
for schema_node in self._graph_schema.nodes.values()
|
|
239
|
+
if schema_node.uses == CRFEntityExtractor
|
|
240
|
+
]
|
|
241
|
+
has_pattern_feature = any(
|
|
242
|
+
CRFEntityExtractorOptions.PATTERN in feature_list
|
|
243
|
+
for crf in crf_schema_nodes
|
|
244
|
+
for feature_list in crf.config.get("features", [])
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
if not has_pattern_feature:
|
|
248
|
+
rasa.shared.utils.io.raise_warning(
|
|
249
|
+
f"You have defined training data consisting of "
|
|
250
|
+
f"lookup tables, but your NLU configuration's "
|
|
251
|
+
f"'{CRFEntityExtractor.__name__}' "
|
|
252
|
+
f"does not include the "
|
|
253
|
+
f"'pattern' feature. To featurize lookup tables, "
|
|
254
|
+
f"add the 'pattern' feature to the "
|
|
255
|
+
f"'{CRFEntityExtractor.__name__}' "
|
|
256
|
+
"in your configuration.",
|
|
257
|
+
docs=DOCS_URL_COMPONENTS,
|
|
258
|
+
)
|
|
239
259
|
|
|
240
260
|
if (
|
|
241
261
|
training_data.entity_synonyms
|
|
@@ -387,22 +407,21 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
387
407
|
|
|
388
408
|
def _warn_if_no_policy_handles_default_intents(self) -> None:
|
|
389
409
|
"""Warns if there is no policy handling the default intents."""
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
pass
|
|
410
|
+
policies_handling_default_indents = (RulePolicy, FlowPolicy)
|
|
411
|
+
|
|
412
|
+
contains_policy_handling_default_intents = any(
|
|
413
|
+
issubclass(node.uses, policies_handling_default_indents)
|
|
414
|
+
for node in self._policy_schema_nodes
|
|
415
|
+
)
|
|
416
|
+
if not contains_policy_handling_default_intents:
|
|
417
|
+
rasa.shared.utils.io.raise_warning(
|
|
418
|
+
f"'{RulePolicy.__name__}' is not included in the model's "
|
|
419
|
+
f"policy configuration. Default intents such as "
|
|
420
|
+
f"'{USER_INTENT_RESTART}' and '{USER_INTENT_BACK}' will "
|
|
421
|
+
f"not trigger actions '{ACTION_RESTART_NAME}' and "
|
|
422
|
+
f"'{ACTION_BACK_NAME}'.",
|
|
423
|
+
docs=DOCS_URL_DEFAULT_ACTIONS,
|
|
424
|
+
)
|
|
406
425
|
|
|
407
426
|
def _raise_if_domain_contains_form_names_but_no_rule_policy_given(
|
|
408
427
|
self, domain: Domain
|
|
@@ -412,20 +431,19 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
412
431
|
Raises:
|
|
413
432
|
`InvalidConfigException` if domain and rule policies do not match
|
|
414
433
|
"""
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
# )
|
|
434
|
+
contains_rule_policy = any(
|
|
435
|
+
schema_node
|
|
436
|
+
for schema_node in self._graph_schema.nodes.values()
|
|
437
|
+
if issubclass(schema_node.uses, RulePolicy)
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
if domain.form_names and not contains_rule_policy:
|
|
441
|
+
raise InvalidDomain(
|
|
442
|
+
"You have defined a form action, but have not added the "
|
|
443
|
+
f"'{RulePolicy.__name__}' to your policy ensemble. "
|
|
444
|
+
f"Either remove all forms from your domain or add the "
|
|
445
|
+
f"'{RulePolicy.__name__}' to your policy configuration."
|
|
446
|
+
)
|
|
429
447
|
|
|
430
448
|
def _raise_if_dm1_and_calm_policies_used_at_the_same_time(self) -> None:
|
|
431
449
|
"""Validates that there exists a rule policy if forms are defined.
|
|
@@ -443,13 +461,16 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
443
461
|
return
|
|
444
462
|
|
|
445
463
|
# if we are using a flow policy, there shouldn't be any dm1 policies
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
# TEDPolicy,
|
|
464
|
+
dm1_policies_list = [
|
|
465
|
+
RulePolicy,
|
|
449
466
|
MemoizationPolicy,
|
|
450
467
|
AugmentedMemoizationPolicy,
|
|
451
|
-
|
|
452
|
-
|
|
468
|
+
]
|
|
469
|
+
if TED_POLICY_AVAILABLE:
|
|
470
|
+
dm1_policies_list.append(TEDPolicy)
|
|
471
|
+
if UNEXPECTED_INTENT_POLICY_AVAILABLE:
|
|
472
|
+
dm1_policies_list.append(UnexpecTEDIntentPolicy)
|
|
473
|
+
dm1_policies = tuple(dm1_policies_list)
|
|
453
474
|
|
|
454
475
|
for schema_node in self._graph_schema.nodes.values():
|
|
455
476
|
if issubclass(schema_node.uses, dm1_policies):
|
|
@@ -469,11 +490,10 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
469
490
|
`InvalidDomain` if domain and rule policies do not match
|
|
470
491
|
"""
|
|
471
492
|
for schema_node in self._graph_schema.nodes.values():
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
pass
|
|
493
|
+
if schema_node.uses == RulePolicy:
|
|
494
|
+
RulePolicy.raise_if_incompatible_with_domain(
|
|
495
|
+
config=schema_node.config, domain=domain
|
|
496
|
+
)
|
|
477
497
|
|
|
478
498
|
def _validate_policy_priorities(self) -> None:
|
|
479
499
|
"""Checks if every policy has a valid priority value.
|
|
@@ -529,22 +549,20 @@ class DefaultV1RecipeValidator(GraphComponent):
|
|
|
529
549
|
)
|
|
530
550
|
|
|
531
551
|
if consuming_rule_data and not contains_rule_tracker:
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
pass
|
|
552
|
+
rasa.shared.utils.io.raise_warning(
|
|
553
|
+
f"Found a rule-based policy in your configuration but "
|
|
554
|
+
f"no rule-based training data. Please add rule-based "
|
|
555
|
+
f"stories to your training data or "
|
|
556
|
+
f"remove the rule-based policy "
|
|
557
|
+
f"(`{RulePolicy.__name__}`) from your "
|
|
558
|
+
f"your configuration.",
|
|
559
|
+
docs=DOCS_URL_RULES,
|
|
560
|
+
)
|
|
542
561
|
elif not consuming_rule_data and contains_rule_tracker:
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
pass
|
|
562
|
+
rasa.shared.utils.io.raise_warning(
|
|
563
|
+
f"Found rule-based training data but no policy supporting rule-based "
|
|
564
|
+
f"data. Please add `{RulePolicy.__name__}` "
|
|
565
|
+
f"or another rule-supporting "
|
|
566
|
+
f"policy to the `policies` section in `{DEFAULT_CONFIG_PATH}`.",
|
|
567
|
+
docs=DOCS_URL_RULES,
|
|
568
|
+
)
|
rasa/model_manager/model_api.py
CHANGED
|
@@ -39,11 +39,9 @@ from rasa.model_manager.trainer_service import (
|
|
|
39
39
|
update_training_status,
|
|
40
40
|
)
|
|
41
41
|
from rasa.model_manager.utils import (
|
|
42
|
-
InvalidPathException,
|
|
43
42
|
get_logs_content,
|
|
44
43
|
logs_base_path,
|
|
45
44
|
models_base_path,
|
|
46
|
-
subpath,
|
|
47
45
|
)
|
|
48
46
|
from rasa.model_manager.warm_rasa_process import (
|
|
49
47
|
initialize_warm_rasa_process,
|
|
@@ -53,6 +51,7 @@ from rasa.server import ErrorResponse
|
|
|
53
51
|
from rasa.shared.exceptions import InvalidConfigException
|
|
54
52
|
from rasa.shared.utils.yaml import dump_obj_as_yaml_to_string
|
|
55
53
|
from rasa.studio.upload import build_calm_import_parts
|
|
54
|
+
from rasa.utils.io import InvalidPathException, subpath
|
|
56
55
|
|
|
57
56
|
dotenv.load_dotenv()
|
|
58
57
|
|
|
@@ -571,10 +570,10 @@ def external_blueprint() -> Blueprint:
|
|
|
571
570
|
"""Create a blueprint for the model manager API."""
|
|
572
571
|
from rasa.core.channels.socketio import SocketBlueprint
|
|
573
572
|
|
|
574
|
-
|
|
575
|
-
bp = SocketBlueprint(
|
|
573
|
+
sio_server = AsyncServer(async_mode="sanic", cors_allowed_origins="*")
|
|
574
|
+
bp = SocketBlueprint(sio_server, "", "model_api_external")
|
|
576
575
|
|
|
577
|
-
create_bridge_server(
|
|
576
|
+
create_bridge_server(sio_server, running_bots)
|
|
578
577
|
|
|
579
578
|
@bp.get("/health")
|
|
580
579
|
async def health(request: Request) -> response.HTTPResponse:
|
|
@@ -15,11 +15,11 @@ from rasa.model_manager import config
|
|
|
15
15
|
from rasa.model_manager.utils import (
|
|
16
16
|
logs_path,
|
|
17
17
|
models_base_path,
|
|
18
|
-
subpath,
|
|
19
18
|
write_encoded_data_to_file,
|
|
20
19
|
)
|
|
21
20
|
from rasa.model_manager.warm_rasa_process import start_rasa_process
|
|
22
21
|
from rasa.studio.prompts import handle_prompts
|
|
22
|
+
from rasa.utils.io import subpath
|
|
23
23
|
|
|
24
24
|
structlogger = structlog.get_logger()
|
|
25
25
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import json
|
|
2
1
|
from typing import Any, Dict, Optional
|
|
3
2
|
|
|
4
3
|
import structlog
|
|
@@ -19,7 +18,7 @@ socket_proxy_clients = {}
|
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
async def socketio_websocket_traffic_wrapper(
|
|
22
|
-
|
|
21
|
+
sio_server: AsyncServer,
|
|
23
22
|
running_bots: Dict[str, BotSession],
|
|
24
23
|
sid: str,
|
|
25
24
|
auth: Optional[Dict],
|
|
@@ -55,7 +54,9 @@ async def socketio_websocket_traffic_wrapper(
|
|
|
55
54
|
structlogger.error("model_runner.bot_not_alive", deployment_id=deployment_id)
|
|
56
55
|
raise ConnectionRefusedError("model_runner.bot_not_alive")
|
|
57
56
|
|
|
58
|
-
client = await create_bridge_client(
|
|
57
|
+
client = await create_bridge_client(
|
|
58
|
+
sio_server, bot.internal_url, sid, deployment_id
|
|
59
|
+
)
|
|
59
60
|
|
|
60
61
|
if client.sid is not None:
|
|
61
62
|
structlogger.debug(
|
|
@@ -70,20 +71,24 @@ async def socketio_websocket_traffic_wrapper(
|
|
|
70
71
|
raise ConnectionRefusedError("model_runner.bot_connection_failed")
|
|
71
72
|
|
|
72
73
|
|
|
73
|
-
def create_bridge_server(
|
|
74
|
+
def create_bridge_server(
|
|
75
|
+
sio_server: AsyncServer, running_bots: Dict[str, BotSession]
|
|
76
|
+
) -> None:
|
|
74
77
|
"""Create handlers for the socket server side.
|
|
75
78
|
|
|
76
79
|
Forwards messages coming from the user to the bot.
|
|
77
80
|
"""
|
|
78
81
|
|
|
79
|
-
@
|
|
82
|
+
@sio_server.on("connect")
|
|
80
83
|
async def socketio_websocket_traffic(
|
|
81
84
|
sid: str, environ: Dict, auth: Optional[Dict]
|
|
82
85
|
) -> bool:
|
|
83
86
|
"""Bridge websockets between user chat socket and bot server."""
|
|
84
|
-
return await socketio_websocket_traffic_wrapper(
|
|
87
|
+
return await socketio_websocket_traffic_wrapper(
|
|
88
|
+
sio_server, running_bots, sid, auth
|
|
89
|
+
)
|
|
85
90
|
|
|
86
|
-
@
|
|
91
|
+
@sio_server.on("disconnect")
|
|
87
92
|
async def disconnect(sid: str) -> None:
|
|
88
93
|
"""Disconnect the bot connection."""
|
|
89
94
|
structlogger.debug("model_runner.bot_disconnect", sid=sid)
|
|
@@ -91,7 +96,7 @@ def create_bridge_server(sio: AsyncServer, running_bots: Dict[str, BotSession])
|
|
|
91
96
|
await socket_proxy_clients[sid].disconnect()
|
|
92
97
|
del socket_proxy_clients[sid]
|
|
93
98
|
|
|
94
|
-
@
|
|
99
|
+
@sio_server.on("*")
|
|
95
100
|
async def handle_message(event: str, sid: str, data: Dict[str, Any]) -> None:
|
|
96
101
|
"""Bridge messages between user and bot.
|
|
97
102
|
|
|
@@ -108,7 +113,7 @@ def create_bridge_server(sio: AsyncServer, running_bots: Dict[str, BotSession])
|
|
|
108
113
|
|
|
109
114
|
|
|
110
115
|
async def create_bridge_client(
|
|
111
|
-
|
|
116
|
+
sio_server: AsyncServer, url: str, sid: str, deployment_id: str
|
|
112
117
|
) -> AsyncClient:
|
|
113
118
|
"""Create a new socket bridge client.
|
|
114
119
|
|
|
@@ -123,36 +128,36 @@ async def create_bridge_client(
|
|
|
123
128
|
structlogger.debug(
|
|
124
129
|
"model_runner.bot_session_confirmed", deployment_id=deployment_id
|
|
125
130
|
)
|
|
126
|
-
await
|
|
131
|
+
await sio_server.emit("session_confirm", room=sid)
|
|
127
132
|
|
|
128
133
|
@client.event # type: ignore[misc]
|
|
129
134
|
async def bot_message(data: Dict[str, Any]) -> None:
|
|
130
135
|
structlogger.debug("model_runner.bot_message", deployment_id=deployment_id)
|
|
131
|
-
await
|
|
136
|
+
await sio_server.emit("bot_message", data, room=sid)
|
|
132
137
|
|
|
133
138
|
@client.event # type: ignore[misc]
|
|
134
139
|
async def error(data: Dict[str, Any]) -> None:
|
|
135
140
|
structlogger.debug(
|
|
136
141
|
"model_runner.bot_error", deployment_id=deployment_id, data=data
|
|
137
142
|
)
|
|
138
|
-
await
|
|
143
|
+
await sio_server.emit("error", data, room=sid)
|
|
139
144
|
|
|
140
145
|
@client.event # type: ignore[misc]
|
|
141
146
|
async def tracker(data: Dict[str, Any]) -> None:
|
|
142
|
-
await
|
|
147
|
+
await sio_server.emit("tracker", data, room=sid)
|
|
143
148
|
|
|
144
149
|
@client.event # type: ignore[misc]
|
|
145
150
|
async def disconnect() -> None:
|
|
146
151
|
structlogger.debug(
|
|
147
152
|
"model_runner.bot_connection_closed", deployment_id=deployment_id
|
|
148
153
|
)
|
|
149
|
-
await
|
|
154
|
+
await sio_server.emit("disconnect", room=sid)
|
|
150
155
|
|
|
151
156
|
@client.event # type: ignore[misc]
|
|
152
157
|
async def connect_error() -> None:
|
|
153
158
|
structlogger.error(
|
|
154
159
|
"model_runner.bot_connection_error", deployment_id=deployment_id
|
|
155
160
|
)
|
|
156
|
-
await
|
|
161
|
+
await sio_server.emit("disconnect", room=sid)
|
|
157
162
|
|
|
158
163
|
return client
|
|
@@ -14,7 +14,6 @@ from rasa.model_manager.utils import (
|
|
|
14
14
|
ensure_base_directory_exists,
|
|
15
15
|
logs_path,
|
|
16
16
|
models_base_path,
|
|
17
|
-
subpath,
|
|
18
17
|
write_encoded_data_to_file,
|
|
19
18
|
)
|
|
20
19
|
from rasa.model_manager.warm_rasa_process import (
|
|
@@ -22,6 +21,7 @@ from rasa.model_manager.warm_rasa_process import (
|
|
|
22
21
|
)
|
|
23
22
|
from rasa.model_training import generate_random_model_name
|
|
24
23
|
from rasa.studio.prompts import handle_prompts
|
|
24
|
+
from rasa.utils.io import subpath
|
|
25
25
|
|
|
26
26
|
structlogger = structlog.get_logger()
|
|
27
27
|
|
|
@@ -53,6 +53,15 @@ class TrainingSession(BaseModel):
|
|
|
53
53
|
"""Check if the training is running."""
|
|
54
54
|
return self.status == TrainingSessionStatus.RUNNING
|
|
55
55
|
|
|
56
|
+
def has_just_finished(self) -> bool:
|
|
57
|
+
if not self.is_status_indicating_alive():
|
|
58
|
+
# skip if the training is not running
|
|
59
|
+
return False
|
|
60
|
+
if self.process.poll() is None:
|
|
61
|
+
# process is still running
|
|
62
|
+
return False
|
|
63
|
+
return True
|
|
64
|
+
|
|
56
65
|
def model_path(self) -> str:
|
|
57
66
|
"""Return the path to the model."""
|
|
58
67
|
return subpath(models_base_path(), f"{self.model_name}.tar.gz")
|
|
@@ -89,14 +98,8 @@ def terminate_training(training: TrainingSession) -> None:
|
|
|
89
98
|
|
|
90
99
|
|
|
91
100
|
def update_training_status(training: TrainingSession) -> None:
|
|
92
|
-
if
|
|
93
|
-
|
|
94
|
-
return
|
|
95
|
-
if training.process.poll() is None:
|
|
96
|
-
# process is still running
|
|
97
|
-
return
|
|
98
|
-
|
|
99
|
-
complete_training(training)
|
|
101
|
+
if training.has_just_finished():
|
|
102
|
+
complete_training(training)
|
|
100
103
|
|
|
101
104
|
|
|
102
105
|
def complete_training(training: TrainingSession) -> None:
|
rasa/model_manager/utils.py
CHANGED
|
@@ -5,15 +5,11 @@ from typing import Optional
|
|
|
5
5
|
import structlog
|
|
6
6
|
|
|
7
7
|
from rasa.model_manager import config
|
|
8
|
-
from rasa.
|
|
8
|
+
from rasa.utils.io import subpath
|
|
9
9
|
|
|
10
10
|
structlogger = structlog.get_logger()
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
class InvalidPathException(RasaException):
|
|
14
|
-
"""Raised if a path is invalid - e.g. path traversal is detected."""
|
|
15
|
-
|
|
16
|
-
|
|
17
13
|
def write_encoded_data_to_file(encoded_data: bytes, file: str) -> None:
|
|
18
14
|
"""Write base64 encoded data to a file."""
|
|
19
15
|
# create the directory if it does not exist of the parent directory
|
|
@@ -53,30 +49,6 @@ def logs_path(action_id: str) -> str:
|
|
|
53
49
|
return subpath(logs_base_path(), f"{action_id}.txt")
|
|
54
50
|
|
|
55
51
|
|
|
56
|
-
def subpath(parent: str, child: str) -> str:
|
|
57
|
-
"""Return the path to the child directory of the parent directory.
|
|
58
|
-
|
|
59
|
-
Ensures, that child doesn't navigate to parent directories. Prevents
|
|
60
|
-
path traversal. Raises an InvalidPathException if the path is invalid.
|
|
61
|
-
|
|
62
|
-
Based on Snyk's directory traversal mitigation:
|
|
63
|
-
https://learn.snyk.io/lesson/directory-traversal/
|
|
64
|
-
"""
|
|
65
|
-
safe_path = os.path.abspath(os.path.join(parent, child))
|
|
66
|
-
parent = os.path.abspath(parent)
|
|
67
|
-
|
|
68
|
-
common_base = os.path.commonpath([parent, safe_path])
|
|
69
|
-
if common_base != parent:
|
|
70
|
-
raise InvalidPathException(f"Invalid path: {safe_path}")
|
|
71
|
-
|
|
72
|
-
if os.path.basename(safe_path) != child:
|
|
73
|
-
raise InvalidPathException(
|
|
74
|
-
f"Invalid path - path traversal detected: {safe_path}"
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
return safe_path
|
|
78
|
-
|
|
79
|
-
|
|
80
52
|
def get_logs_content(action_id: str) -> Optional[str]:
|
|
81
53
|
"""Return the content of the log file for a given action id."""
|
|
82
54
|
try:
|
|
@@ -157,8 +157,8 @@ def warmup() -> None:
|
|
|
157
157
|
import pandas # noqa: F401
|
|
158
158
|
import presidio_analyzer # noqa: F401
|
|
159
159
|
import spacy # noqa: F401
|
|
160
|
+
import tensorflow # noqa: F401
|
|
160
161
|
|
|
161
|
-
# import tensorflow
|
|
162
162
|
import rasa.validator # noqa: F401
|
|
163
163
|
except ImportError:
|
|
164
164
|
pass
|