rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__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/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +213 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +889 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +228 -0
- rasa/agents/validation.py +538 -0
- rasa/api.py +23 -9
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +96 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +38 -0
- rasa/builder/copilot/copilot.py +562 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +690 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +234 -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 +41 -0
- rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -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/clients.py +256 -0
- rasa/builder/guardrails/constants.py +12 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/models.py +266 -0
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +94 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +609 -0
- rasa/builder/llm_service.py +273 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +234 -0
- rasa/builder/models.py +229 -0
- rasa/builder/project_generator.py +463 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/service.py +1367 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +188 -0
- rasa/builder/validation_service.py +101 -0
- rasa/cli/arguments/data.py +9 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +78 -10
- rasa/cli/dialogue_understanding_test.py +11 -7
- rasa/cli/e2e_test.py +10 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +9 -4
- rasa/cli/interactive.py +8 -4
- rasa/cli/llm_fine_tuning.py +12 -6
- 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 +8 -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 +11 -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/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/defaults.py +1 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -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/check_that_card_exists.py +21 -0
- rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
- rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
- rasa/cli/project_templates/finance/actions/db.py +117 -0
- rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
- rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
- rasa/cli/project_templates/finance/config.yml +29 -0
- rasa/cli/project_templates/finance/credentials.yml +33 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
- rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
- rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
- rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
- rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
- rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
- rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
- rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
- rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
- rasa/cli/project_templates/finance/data/data.md +14 -0
- rasa/cli/project_templates/finance/data/general/bot_challenge.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 +6 -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_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/transfers/check_transfer_limit.yml +18 -0
- rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
- rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
- rasa/cli/project_templates/finance/db/cards.json +18 -0
- rasa/cli/project_templates/finance/db/contacts.json +10 -0
- rasa/cli/project_templates/finance/db/my_account.json +6 -0
- rasa/cli/project_templates/finance/db/transactions.json +22 -0
- rasa/cli/project_templates/finance/docs/docs.md +8 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
- rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
- rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
- rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
- rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
- rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
- rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
- rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
- rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
- rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
- rasa/cli/project_templates/finance/domain/domain.md +18 -0
- rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
- rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
- rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
- rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
- rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
- rasa/cli/project_templates/finance/endpoints.yml +67 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -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 +8 -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 +13 -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 +74 -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/with_stub/network/solve_internet_not_slow.yml +33 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +8 -10
- rasa/cli/scaffold.py +50 -6
- rasa/cli/shell.py +10 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +44 -30
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +232 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +53 -13
- rasa/core/actions/action_exceptions.py +1 -1
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +22 -2
- rasa/core/available_agents.py +239 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +56 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +29 -16
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +56 -12
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- 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/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +55 -1
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +82 -32
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- 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 +11 -6
- rasa/core/channels/voice_stream/browser_audio.py +91 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +19 -15
- rasa/core/channels/voice_stream/jambonz.py +22 -12
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +170 -32
- rasa/core/concurrent_lock_store.py +83 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
- rasa/core/config/configuration.py +295 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +17 -0
- rasa/core/exceptions.py +1 -1
- rasa/core/featurizers/tracker_featurizers.py +3 -2
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
- rasa/core/lock_store.py +50 -10
- rasa/core/nlg/contextual_response_rephraser.py +5 -0
- rasa/core/nlg/generator.py +1 -1
- rasa/core/persistor.py +7 -7
- rasa/core/policies/enterprise_search_policy.py +9 -10
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +720 -0
- rasa/core/policies/flows/flow_exceptions.py +5 -2
- rasa/core/policies/flows/flow_executor.py +146 -77
- rasa/core/policies/flows/mcp_tool_executor.py +304 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/rule_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +100 -44
- rasa/core/redis_connection_factory.py +474 -0
- rasa/core/run.py +49 -10
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +36 -14
- rasa/core/tracker_stores/sql_tracker_store.py +59 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
- rasa/dialogue_understanding/commands/utils.py +135 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +25 -8
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +2 -2
- rasa/model_manager/socket_bridge.py +21 -17
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_config.py +1 -1
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -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 +170 -0
- rasa/shared/agents/auth/constants.py +13 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/auth/utils.py +85 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +11 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +62 -22
- rasa/shared/core/events.py +329 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +57 -6
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +19 -10
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
- rasa/shared/exceptions.py +39 -2
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +86 -4
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +26 -1
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +92 -19
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +250 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/download.py +3 -0
- rasa/studio/prompts.py +1 -0
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +19 -52
- rasa/telemetry.py +166 -28
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +121 -7
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/utils/pypred.py +45 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +149 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dist-info/METADATA +212 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
- rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
- rasa_pro-3.13.12.dist-info/METADATA +0 -192
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
rasa/utils/tensorflow/models.py
CHANGED
|
@@ -8,7 +8,6 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
|
|
|
8
8
|
import numpy as np
|
|
9
9
|
import tensorflow as tf
|
|
10
10
|
from keras import Model
|
|
11
|
-
from keras.src.utils import tf_utils
|
|
12
11
|
|
|
13
12
|
import rasa.utils.train_utils
|
|
14
13
|
from rasa.shared.constants import DIAGNOSTIC_DATA
|
|
@@ -78,6 +77,7 @@ class RasaModel(Model):
|
|
|
78
77
|
|
|
79
78
|
Args:
|
|
80
79
|
random_seed: set the random seed to get reproducible results
|
|
80
|
+
**kwargs: Additional keyword arguments passed to the parent class
|
|
81
81
|
"""
|
|
82
82
|
# make sure that keras releases resources from previously trained model
|
|
83
83
|
tf.keras.backend.clear_session()
|
|
@@ -273,7 +273,8 @@ class RasaModel(Model):
|
|
|
273
273
|
if self._run_eagerly:
|
|
274
274
|
# Once we take advantage of TF's distributed training, this is where
|
|
275
275
|
# scheduled functions will be forced to execute and return actual values.
|
|
276
|
-
|
|
276
|
+
step_output = self.predict_step(batch_in)
|
|
277
|
+
outputs = self._convert_tensors_to_numpy(step_output)
|
|
277
278
|
if DIAGNOSTIC_DATA in outputs:
|
|
278
279
|
outputs[DIAGNOSTIC_DATA] = self._empty_lists_to_none_in_dict(
|
|
279
280
|
outputs[DIAGNOSTIC_DATA]
|
|
@@ -287,9 +288,8 @@ class RasaModel(Model):
|
|
|
287
288
|
|
|
288
289
|
# Once we take advantage of TF's distributed training, this is where
|
|
289
290
|
# scheduled functions will be forced to execute and return actual values.
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
)
|
|
291
|
+
step_output = self._tf_predict_step(list(batch_in))
|
|
292
|
+
outputs = self._convert_tensors_to_numpy(step_output)
|
|
293
293
|
if DIAGNOSTIC_DATA in outputs:
|
|
294
294
|
outputs[DIAGNOSTIC_DATA] = self._empty_lists_to_none_in_dict(
|
|
295
295
|
outputs[DIAGNOSTIC_DATA]
|
|
@@ -388,6 +388,35 @@ class RasaModel(Model):
|
|
|
388
388
|
|
|
389
389
|
return {k: _recurse(v) for k, v in input_dict.items()}
|
|
390
390
|
|
|
391
|
+
def _convert_tensors_to_numpy(
|
|
392
|
+
self, step_output: Dict[Text, Any]
|
|
393
|
+
) -> Dict[Text, Any]:
|
|
394
|
+
""" "Recursively convert TensorFlow tensors to numpy arrays for Keras 3.x
|
|
395
|
+
compatibility.
|
|
396
|
+
Replaces the deprecated tf_utils.sync_to_numpy_or_python_type() function.
|
|
397
|
+
Converts tensors (objects with 'numpy' method) to numpy arrays,
|
|
398
|
+
leaves others unchanged.
|
|
399
|
+
"""
|
|
400
|
+
|
|
401
|
+
def to_numpy(obj: Any) -> Any:
|
|
402
|
+
if hasattr(obj, "numpy"):
|
|
403
|
+
try:
|
|
404
|
+
return obj.numpy()
|
|
405
|
+
except Exception:
|
|
406
|
+
# Fallback: return as-is if not convertible
|
|
407
|
+
return obj
|
|
408
|
+
# Dict: recurse into values
|
|
409
|
+
if isinstance(obj, dict):
|
|
410
|
+
return {k: to_numpy(v) for k, v in obj.items()}
|
|
411
|
+
# List/Tuple: recurse preserving type
|
|
412
|
+
if isinstance(obj, list):
|
|
413
|
+
return [to_numpy(v) for v in obj]
|
|
414
|
+
if isinstance(obj, tuple):
|
|
415
|
+
return tuple(to_numpy(v) for v in obj)
|
|
416
|
+
return obj
|
|
417
|
+
|
|
418
|
+
return {key: to_numpy(value) for key, value in step_output.items()}
|
|
419
|
+
|
|
391
420
|
def _get_metric_results(self, prefix: Optional[Text] = "") -> Dict[Text, float]:
|
|
392
421
|
return {
|
|
393
422
|
f"{prefix}{metric.name}": metric.result()
|
|
@@ -403,7 +432,21 @@ class RasaModel(Model):
|
|
|
403
432
|
overwrite: If 'True' an already existing model with the same file name will
|
|
404
433
|
be overwritten.
|
|
405
434
|
"""
|
|
406
|
-
|
|
435
|
+
# Ensure filename ends with .weights.h5 and model is built for Keras 3.x
|
|
436
|
+
# compatibility
|
|
437
|
+
model_file_name = str(model_file_name)
|
|
438
|
+
if not model_file_name.endswith(".weights.h5"):
|
|
439
|
+
model_file_name += ".weights.h5"
|
|
440
|
+
|
|
441
|
+
if not self.built:
|
|
442
|
+
import tensorflow as tf
|
|
443
|
+
|
|
444
|
+
_ = self(tf.zeros((1, 1)))
|
|
445
|
+
|
|
446
|
+
# TensorFlow 2.19: save weights with different file extension
|
|
447
|
+
if not model_file_name.endswith(".weights.h5"):
|
|
448
|
+
model_file_name += ".weights.h5"
|
|
449
|
+
self.save_weights(model_file_name, overwrite=overwrite)
|
|
407
450
|
|
|
408
451
|
@classmethod
|
|
409
452
|
def load(
|
|
@@ -438,18 +481,23 @@ class RasaModel(Model):
|
|
|
438
481
|
learning_rate = kwargs.get("config", {}).get(LEARNING_RATE, 0.001)
|
|
439
482
|
run_eagerly = kwargs.get("config", {}).get(RUN_EAGERLY)
|
|
440
483
|
|
|
441
|
-
# need to train on 1 example to build weights of the correct size
|
|
442
484
|
model.compile(
|
|
443
485
|
optimizer=tf.keras.optimizers.Adam(learning_rate), run_eagerly=run_eagerly
|
|
444
486
|
)
|
|
445
487
|
data_generator = RasaBatchDataGenerator(model_data_example, batch_size=1)
|
|
446
488
|
model.fit(data_generator, verbose=False)
|
|
489
|
+
|
|
490
|
+
# Ensure model is built before loading weights
|
|
491
|
+
if not model.built:
|
|
492
|
+
sample_batch = next(iter(data_generator))
|
|
493
|
+
_ = model(sample_batch)
|
|
494
|
+
|
|
447
495
|
# load trained weights
|
|
448
496
|
model.load_weights(model_file_name)
|
|
449
497
|
|
|
450
498
|
# predict on one data example to speed up prediction during inference
|
|
451
499
|
# the first prediction always takes a bit longer to trace tf function
|
|
452
|
-
if
|
|
500
|
+
if predict_data_example:
|
|
453
501
|
model.run_inference(predict_data_example)
|
|
454
502
|
|
|
455
503
|
logger.debug("Finished loading the model.")
|
|
@@ -291,7 +291,7 @@ class ConcatenateSparseDenseFeatures(RasaCustomLayer):
|
|
|
291
291
|
[
|
|
292
292
|
config[DENSE_DIMENSION][attribute]
|
|
293
293
|
if signature.is_sparse
|
|
294
|
-
else signature.units
|
|
294
|
+
else (signature.units or 0)
|
|
295
295
|
for signature in feature_type_signature
|
|
296
296
|
]
|
|
297
297
|
)
|
|
@@ -301,12 +301,12 @@ class ConcatenateSparseDenseFeatures(RasaCustomLayer):
|
|
|
301
301
|
) -> tf.Tensor:
|
|
302
302
|
"""Turns sparse tensor into dense, possibly adds dropout before and/or after."""
|
|
303
303
|
if self.SPARSE_DROPOUT in self._tf_layers:
|
|
304
|
-
feature = self._tf_layers[self.SPARSE_DROPOUT](feature, training)
|
|
304
|
+
feature = self._tf_layers[self.SPARSE_DROPOUT](feature, training=training)
|
|
305
305
|
|
|
306
306
|
feature = self._tf_layers[self.SPARSE_TO_DENSE](feature)
|
|
307
307
|
|
|
308
308
|
if self.DENSE_DROPOUT in self._tf_layers:
|
|
309
|
-
feature = self._tf_layers[self.DENSE_DROPOUT](feature, training)
|
|
309
|
+
feature = self._tf_layers[self.DENSE_DROPOUT](feature, training=training)
|
|
310
310
|
|
|
311
311
|
return feature
|
|
312
312
|
|
|
@@ -944,7 +944,7 @@ class RasaSequenceLayer(RasaCustomLayer):
|
|
|
944
944
|
# Note that only sequence-level features are masked, nothing happens to the
|
|
945
945
|
# sentence-level features in the combined features tensor.
|
|
946
946
|
seq_sent_features, mlm_boolean_mask = self._tf_layers[self.MLM_INPUT_MASK](
|
|
947
|
-
seq_sent_features, mask_sequence, training
|
|
947
|
+
seq_sent_features, mask_sequence, training=training
|
|
948
948
|
)
|
|
949
949
|
|
|
950
950
|
return seq_sent_features, token_ids, mlm_boolean_mask
|
|
@@ -1002,7 +1002,9 @@ class RasaSequenceLayer(RasaCustomLayer):
|
|
|
1002
1002
|
]((sequence_features, sentence_features, sequence_feature_lengths))
|
|
1003
1003
|
|
|
1004
1004
|
# Apply one or more dense layers.
|
|
1005
|
-
seq_sent_features = self._tf_layers[self.FFNN](
|
|
1005
|
+
seq_sent_features = self._tf_layers[self.FFNN](
|
|
1006
|
+
seq_sent_features, training=training
|
|
1007
|
+
)
|
|
1006
1008
|
|
|
1007
1009
|
# If using masked language modeling, mask the transformer inputs and get labels
|
|
1008
1010
|
# for the masked tokens and a boolean mask. Note that TED does not use MLM loss,
|
|
@@ -1031,7 +1033,7 @@ class RasaSequenceLayer(RasaCustomLayer):
|
|
|
1031
1033
|
if self._has_transformer:
|
|
1032
1034
|
mask_padding = 1 - mask_combined_sequence_sentence
|
|
1033
1035
|
outputs, attention_weights = self._tf_layers[self.TRANSFORMER](
|
|
1034
|
-
seq_sent_features_masked, mask_padding, training
|
|
1036
|
+
seq_sent_features_masked, mask_padding, training=training
|
|
1035
1037
|
)
|
|
1036
1038
|
outputs = tf.nn.gelu(outputs)
|
|
1037
1039
|
else:
|
|
@@ -2,10 +2,8 @@ from typing import Optional, Text, Tuple, Union
|
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
import tensorflow as tf
|
|
5
|
-
|
|
6
|
-
# TODO: The following is not (yet) available via tf.keras
|
|
7
|
-
from keras.src.utils.control_flow_util import smart_cond
|
|
8
5
|
from tensorflow.keras import backend as K
|
|
6
|
+
from tensorflow.python.keras.utils.control_flow_util import smart_cond
|
|
9
7
|
|
|
10
8
|
from rasa.utils.tensorflow.exceptions import TFLayerConfigException
|
|
11
9
|
from rasa.utils.tensorflow.layers import RandomlyConnectedDense
|
|
@@ -280,6 +278,7 @@ class MultiHeadAttention(tf.keras.layers.Layer):
|
|
|
280
278
|
value: A tensor with shape (..., length, depth).
|
|
281
279
|
pad_mask: Float tensor with shape broadcastable
|
|
282
280
|
to (..., length, length). Defaults to None.
|
|
281
|
+
training: A tensor
|
|
283
282
|
|
|
284
283
|
Returns:
|
|
285
284
|
output: A tensor with shape (..., length, depth).
|
rasa/utils/train_utils.py
CHANGED
|
@@ -11,29 +11,57 @@ from rasa.nlu.constants import NUMBER_OF_SUB_TOKENS
|
|
|
11
11
|
from rasa.shared.constants import NEXT_MAJOR_VERSION_FOR_DEPRECATIONS
|
|
12
12
|
from rasa.shared.exceptions import InvalidConfigException
|
|
13
13
|
from rasa.shared.nlu.constants import SPLIT_ENTITIES_BY_COMMA
|
|
14
|
-
from rasa.utils.tensorflow
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
14
|
+
from rasa.utils.tensorflow import TENSORFLOW_AVAILABLE
|
|
15
|
+
|
|
16
|
+
# Conditional imports for TensorFlow-dependent modules
|
|
17
|
+
if TENSORFLOW_AVAILABLE:
|
|
18
|
+
from rasa.utils.tensorflow.callback import RasaModelCheckpoint, RasaTrainingLogger
|
|
19
|
+
from rasa.utils.tensorflow.constants import (
|
|
20
|
+
AUTO,
|
|
21
|
+
CHECKPOINT_MODEL,
|
|
22
|
+
CONSTRAIN_SIMILARITIES,
|
|
23
|
+
COSINE,
|
|
24
|
+
CROSS_ENTROPY,
|
|
25
|
+
EPOCHS,
|
|
26
|
+
EVAL_NUM_EPOCHS,
|
|
27
|
+
EVAL_NUM_EXAMPLES,
|
|
28
|
+
INNER,
|
|
29
|
+
LOSS_TYPE,
|
|
30
|
+
MARGIN,
|
|
31
|
+
MODEL_CONFIDENCE,
|
|
32
|
+
RANKING_LENGTH,
|
|
33
|
+
RENORMALIZE_CONFIDENCES,
|
|
34
|
+
SEQUENCE,
|
|
35
|
+
SIMILARITY_TYPE,
|
|
36
|
+
SOFTMAX,
|
|
37
|
+
TOLERANCE,
|
|
38
|
+
)
|
|
39
|
+
from rasa.utils.tensorflow.data_generator import RasaBatchDataGenerator
|
|
40
|
+
from rasa.utils.tensorflow.model_data import RasaModelData
|
|
41
|
+
else:
|
|
42
|
+
# Placeholder values when TensorFlow is not available
|
|
43
|
+
RasaModelCheckpoint = None # type: ignore
|
|
44
|
+
RasaTrainingLogger = None # type: ignore
|
|
45
|
+
RasaBatchDataGenerator = None # type: ignore
|
|
46
|
+
RasaModelData = None # type: ignore
|
|
47
|
+
AUTO = "auto"
|
|
48
|
+
CHECKPOINT_MODEL = "checkpoint_model"
|
|
49
|
+
CONSTRAIN_SIMILARITIES = "constrain_similarities"
|
|
50
|
+
COSINE = "cosine"
|
|
51
|
+
CROSS_ENTROPY = "cross_entropy"
|
|
52
|
+
EPOCHS = "epochs"
|
|
53
|
+
EVAL_NUM_EPOCHS = "eval_num_epochs"
|
|
54
|
+
EVAL_NUM_EXAMPLES = "eval_num_examples"
|
|
55
|
+
INNER = "inner"
|
|
56
|
+
LOSS_TYPE = "loss_type"
|
|
57
|
+
MARGIN = "margin"
|
|
58
|
+
MODEL_CONFIDENCE = "model_confidence"
|
|
59
|
+
RANKING_LENGTH = "ranking_length"
|
|
60
|
+
RENORMALIZE_CONFIDENCES = "renormalize_confidences"
|
|
61
|
+
SEQUENCE = "sequence"
|
|
62
|
+
SIMILARITY_TYPE = "similarity_type"
|
|
63
|
+
SOFTMAX = "softmax"
|
|
64
|
+
TOLERANCE = "tolerance"
|
|
37
65
|
|
|
38
66
|
if TYPE_CHECKING:
|
|
39
67
|
from tensorflow.keras.callbacks import Callback
|
|
@@ -87,7 +115,9 @@ def rank_and_mask(
|
|
|
87
115
|
|
|
88
116
|
|
|
89
117
|
def update_similarity_type(config: Dict[Text, Any]) -> Dict[Text, Any]:
|
|
90
|
-
"""
|
|
118
|
+
"""Function to update the similarity type in the model configuration.
|
|
119
|
+
|
|
120
|
+
If SIMILARITY_TYPE is set to 'auto', update the SIMILARITY_TYPE depending
|
|
91
121
|
on the LOSS_TYPE.
|
|
92
122
|
|
|
93
123
|
Args:
|
rasa/validator.py
CHANGED
|
@@ -4,16 +4,16 @@ import string
|
|
|
4
4
|
from collections import defaultdict
|
|
5
5
|
from typing import Any, Dict, List, Optional, Set, Text, Tuple
|
|
6
6
|
|
|
7
|
+
import jinja2.exceptions
|
|
7
8
|
import structlog
|
|
8
9
|
from jinja2 import Template
|
|
9
|
-
from pypred import Predicate
|
|
10
10
|
from pypred.ast import CompareOperator, Literal, NegateOperator
|
|
11
11
|
|
|
12
12
|
import rasa.core.training.story_conflict
|
|
13
13
|
import rasa.shared.nlu.constants
|
|
14
|
-
|
|
15
|
-
import rasa.shared.utils.io
|
|
14
|
+
from rasa.agents.validation import validate_agent_names_not_conflicting_with_flows
|
|
16
15
|
from rasa.core.channels import UserMessage
|
|
16
|
+
from rasa.core.config.configuration import Configuration
|
|
17
17
|
from rasa.dialogue_understanding.stack.frames import PatternFlowStackFrame
|
|
18
18
|
from rasa.engine.language import Language
|
|
19
19
|
from rasa.exceptions import ValidationError
|
|
@@ -70,10 +70,11 @@ from rasa.shared.core.training_data.structures import StoryGraph
|
|
|
70
70
|
from rasa.shared.data import create_regex_pattern_reader
|
|
71
71
|
from rasa.shared.exceptions import RasaException
|
|
72
72
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
73
|
-
from rasa.shared.nlu.constants import COMMANDS
|
|
73
|
+
from rasa.shared.nlu.constants import COMMANDS, INTENT
|
|
74
74
|
from rasa.shared.nlu.training_data.message import Message
|
|
75
75
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
76
76
|
from rasa.telemetry import track_validation_error_log
|
|
77
|
+
from rasa.utils.pypred import Predicate
|
|
77
78
|
|
|
78
79
|
logger = logging.getLogger(__name__)
|
|
79
80
|
|
|
@@ -130,7 +131,7 @@ class Validator:
|
|
|
130
131
|
"""Compares list of intents in domain with intents in NLU training data."""
|
|
131
132
|
everything_is_alright = True
|
|
132
133
|
|
|
133
|
-
nlu_data_intents = {e.data[
|
|
134
|
+
nlu_data_intents = {e.data[INTENT] for e in self.intents.intent_examples}
|
|
134
135
|
|
|
135
136
|
for intent in self._non_default_intents():
|
|
136
137
|
if intent not in nlu_data_intents:
|
|
@@ -172,7 +173,7 @@ class Validator:
|
|
|
172
173
|
duplication_hash = defaultdict(set)
|
|
173
174
|
for example in self.intents.intent_examples:
|
|
174
175
|
text = example.get(rasa.shared.nlu.constants.TEXT)
|
|
175
|
-
duplication_hash[text].add(example.get(
|
|
176
|
+
duplication_hash[text].add(example.get(INTENT))
|
|
176
177
|
|
|
177
178
|
for text, intents in duplication_hash.items():
|
|
178
179
|
if len(duplication_hash[text]) > 1:
|
|
@@ -629,11 +630,14 @@ class Validator:
|
|
|
629
630
|
flow_id: str,
|
|
630
631
|
) -> bool:
|
|
631
632
|
"""Validates that a collect step can have either an action or an utterance.
|
|
633
|
+
|
|
632
634
|
Also logs an error if neither an action nor an utterance is defined.
|
|
633
635
|
|
|
634
636
|
Args:
|
|
635
637
|
collect: the name of the slot to collect
|
|
636
638
|
all_good: boolean value indicating the validation status
|
|
639
|
+
domain_slots: dictionary of domain slots
|
|
640
|
+
flow_id: the ID of the flow being validated
|
|
637
641
|
|
|
638
642
|
Returns:
|
|
639
643
|
False, if validation failed, true, otherwise
|
|
@@ -682,9 +686,10 @@ class Validator:
|
|
|
682
686
|
has_action_defined=has_action_defined,
|
|
683
687
|
flow=flow_id,
|
|
684
688
|
event_info=(
|
|
685
|
-
f"The collect step '{collect.collect}' has neither
|
|
686
|
-
f"nor an action defined,
|
|
687
|
-
f"You
|
|
689
|
+
f"The collect step '{collect.collect}' has neither a response "
|
|
690
|
+
f"nor an action defined, nor an initial value defined in the "
|
|
691
|
+
f"domain. You can fix this by adding a response named "
|
|
692
|
+
f"'{collect.utter}' used in the collect step."
|
|
688
693
|
),
|
|
689
694
|
)
|
|
690
695
|
all_good = False
|
|
@@ -1179,23 +1184,27 @@ class Validator:
|
|
|
1179
1184
|
)
|
|
1180
1185
|
|
|
1181
1186
|
if isinstance(step, CollectInformationFlowStep):
|
|
1182
|
-
|
|
1183
|
-
for
|
|
1187
|
+
dumped_predicates = [predicate.if_ for predicate in step.rejections]
|
|
1188
|
+
for dumped_predicate in dumped_predicates:
|
|
1184
1189
|
all_good = self._verify_namespaces(
|
|
1185
|
-
|
|
1190
|
+
dumped_predicate, step.id, flow.id, all_good
|
|
1186
1191
|
)
|
|
1187
1192
|
|
|
1188
|
-
|
|
1189
|
-
|
|
1193
|
+
predicate, all_good = self._construct_predicate(
|
|
1194
|
+
dumped_predicate,
|
|
1195
|
+
step.id,
|
|
1196
|
+
context,
|
|
1197
|
+
is_step=True,
|
|
1198
|
+
all_good=all_good,
|
|
1190
1199
|
)
|
|
1191
|
-
if
|
|
1200
|
+
if predicate and not predicate.is_valid():
|
|
1192
1201
|
structlogger.error(
|
|
1193
1202
|
"validator.verify_predicates.invalid_rejection",
|
|
1194
1203
|
step=step.id,
|
|
1195
1204
|
rejection=predicate,
|
|
1196
1205
|
flow=flow.id,
|
|
1197
1206
|
event_info=(
|
|
1198
|
-
f"Detected invalid rejection '{
|
|
1207
|
+
f"Detected invalid rejection '{dumped_predicate}' "
|
|
1199
1208
|
f"at `collect` step '{step.id}' "
|
|
1200
1209
|
f"for flow id '{flow.id}'. "
|
|
1201
1210
|
f"Please make sure that all conditions are valid."
|
|
@@ -1280,6 +1289,41 @@ class Validator:
|
|
|
1280
1289
|
|
|
1281
1290
|
return all_good
|
|
1282
1291
|
|
|
1292
|
+
def validate_agent_flow_conflicts(self, sub_agents_path: str) -> bool:
|
|
1293
|
+
"""Validates that agent names don't conflict with flow names.
|
|
1294
|
+
|
|
1295
|
+
Args:
|
|
1296
|
+
sub_agents_path: Path to the sub-agents directory.
|
|
1297
|
+
|
|
1298
|
+
Returns:
|
|
1299
|
+
True if validation passes, False otherwise.
|
|
1300
|
+
"""
|
|
1301
|
+
if self.flows.is_empty():
|
|
1302
|
+
return True
|
|
1303
|
+
|
|
1304
|
+
try:
|
|
1305
|
+
configuration = Configuration.get_instance()
|
|
1306
|
+
available_agents = configuration.available_agents
|
|
1307
|
+
flow_names = {flow.id for flow in self.flows.underlying_flows}
|
|
1308
|
+
|
|
1309
|
+
structlogger.debug(
|
|
1310
|
+
"validator.agent_flow_conflicts.debug",
|
|
1311
|
+
event_info="Checking conflicts between agents and flows",
|
|
1312
|
+
)
|
|
1313
|
+
|
|
1314
|
+
validate_agent_names_not_conflicting_with_flows(
|
|
1315
|
+
available_agents.agents, flow_names
|
|
1316
|
+
)
|
|
1317
|
+
return True
|
|
1318
|
+
except Exception as e:
|
|
1319
|
+
structlogger.error(
|
|
1320
|
+
"validator.agent_flow_conflicts",
|
|
1321
|
+
sub_agents_path=sub_agents_path,
|
|
1322
|
+
error=str(e),
|
|
1323
|
+
event_info=f"Agent-flow name conflict validation failed: {e}",
|
|
1324
|
+
)
|
|
1325
|
+
return False
|
|
1326
|
+
|
|
1283
1327
|
def _get_response_translation_warnings(self) -> list:
|
|
1284
1328
|
"""Collect warnings for responses missing translations.
|
|
1285
1329
|
|
|
@@ -1932,6 +1976,95 @@ class Validator:
|
|
|
1932
1976
|
|
|
1933
1977
|
return all_good
|
|
1934
1978
|
|
|
1979
|
+
def verify_prompt_templates(self) -> bool:
|
|
1980
|
+
"""Verify that all prompt templates have valid Jinja2 syntax.
|
|
1981
|
+
|
|
1982
|
+
Returns:
|
|
1983
|
+
True if all templates are valid, False otherwise.
|
|
1984
|
+
"""
|
|
1985
|
+
all_good = True
|
|
1986
|
+
|
|
1987
|
+
# Check the components in the pipeline and policies for prompt templates
|
|
1988
|
+
pipeline = self.config.get(CONFIG_PIPELINE_KEY, [])
|
|
1989
|
+
for component in pipeline:
|
|
1990
|
+
if isinstance(component, dict):
|
|
1991
|
+
component_name = component.get("name", "")
|
|
1992
|
+
prompt_template = component.get("prompt_template")
|
|
1993
|
+
if prompt_template:
|
|
1994
|
+
all_good = (
|
|
1995
|
+
self._validate_template_file(
|
|
1996
|
+
prompt_template, component_name, "pipeline component"
|
|
1997
|
+
)
|
|
1998
|
+
and all_good
|
|
1999
|
+
)
|
|
2000
|
+
|
|
2001
|
+
# Check policies for prompt templates
|
|
2002
|
+
policies = self.config.get("policies") or []
|
|
2003
|
+
for policy in policies:
|
|
2004
|
+
if isinstance(policy, dict):
|
|
2005
|
+
policy_name = policy.get("name", "")
|
|
2006
|
+
prompt_template = policy.get("prompt_template")
|
|
2007
|
+
if prompt_template:
|
|
2008
|
+
all_good = (
|
|
2009
|
+
self._validate_template_file(
|
|
2010
|
+
prompt_template, policy_name, "policy"
|
|
2011
|
+
)
|
|
2012
|
+
and all_good
|
|
2013
|
+
)
|
|
2014
|
+
|
|
2015
|
+
return all_good
|
|
2016
|
+
|
|
2017
|
+
def _validate_template_file(
|
|
2018
|
+
self, prompt_template: str, component_name: str, component_type: str
|
|
2019
|
+
) -> bool:
|
|
2020
|
+
"""Validate a single prompt template file.
|
|
2021
|
+
|
|
2022
|
+
Args:
|
|
2023
|
+
prompt_template: The template file path to validate
|
|
2024
|
+
component_name: Name of the component using the template
|
|
2025
|
+
component_type: Type of component (e.g., "policy", "pipeline component")
|
|
2026
|
+
|
|
2027
|
+
Returns:
|
|
2028
|
+
True if template is valid, False otherwise.
|
|
2029
|
+
"""
|
|
2030
|
+
try:
|
|
2031
|
+
# Use a simple default template, as we're assuming
|
|
2032
|
+
# that the default templates are valid
|
|
2033
|
+
default_template = "{{ content }}"
|
|
2034
|
+
template_content = rasa.shared.utils.llm.get_prompt_template(
|
|
2035
|
+
prompt_template,
|
|
2036
|
+
default_template,
|
|
2037
|
+
log_source_component=f"validator.{component_name}",
|
|
2038
|
+
log_source_method="init",
|
|
2039
|
+
)
|
|
2040
|
+
|
|
2041
|
+
# Validate Jinja2 syntax using the shared validation function
|
|
2042
|
+
rasa.shared.utils.llm.validate_jinja2_template(template_content)
|
|
2043
|
+
return True
|
|
2044
|
+
except jinja2.exceptions.TemplateSyntaxError as e:
|
|
2045
|
+
structlogger.error(
|
|
2046
|
+
"validator.verify_prompt_templates.syntax_error",
|
|
2047
|
+
component=component_name,
|
|
2048
|
+
component_type=component_type,
|
|
2049
|
+
event_info=(
|
|
2050
|
+
f"Invalid Jinja2 template syntax in file {prompt_template} "
|
|
2051
|
+
f"at line {e.lineno}: {e.message}"
|
|
2052
|
+
),
|
|
2053
|
+
error=str(e),
|
|
2054
|
+
template_line=e.lineno,
|
|
2055
|
+
template_file=prompt_template,
|
|
2056
|
+
)
|
|
2057
|
+
return False
|
|
2058
|
+
except Exception as e:
|
|
2059
|
+
structlogger.error(
|
|
2060
|
+
"validator.verify_prompt_templates.error",
|
|
2061
|
+
component=component_name,
|
|
2062
|
+
component_type=component_type,
|
|
2063
|
+
event_info=f"Error validating prompt template: {e}",
|
|
2064
|
+
error=str(e),
|
|
2065
|
+
)
|
|
2066
|
+
return False
|
|
2067
|
+
|
|
1935
2068
|
def validate_conditional_response_variation_predicates(self) -> bool:
|
|
1936
2069
|
"""Validate the conditional response variation predicates."""
|
|
1937
2070
|
context = {SLOTS: {slot.name: None for slot in self.domain.slots}}
|
rasa/version.py
CHANGED