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
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"""Functions for training and loading Rasa models."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
import structlog
|
|
8
|
+
from sanic import Sanic
|
|
9
|
+
|
|
10
|
+
from rasa.builder.exceptions import AgentLoadError, TrainingError
|
|
11
|
+
from rasa.builder.models import TrainingInput
|
|
12
|
+
from rasa.core.agent import Agent, load_agent
|
|
13
|
+
from rasa.core.channels.studio_chat import StudioChatInput
|
|
14
|
+
from rasa.core.utils import AvailableEndpoints, read_endpoints_from_path
|
|
15
|
+
from rasa.model import get_latest_model
|
|
16
|
+
from rasa.model_training import TrainingResult, train
|
|
17
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
18
|
+
|
|
19
|
+
structlogger = structlog.get_logger()
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def update_agent(agent: Optional[Agent], app: Sanic) -> None:
|
|
23
|
+
"""Update the agent in the request context."""
|
|
24
|
+
app.ctx.agent = agent
|
|
25
|
+
if hasattr(app.ctx, "input_channel") and isinstance(
|
|
26
|
+
app.ctx.input_channel, StudioChatInput
|
|
27
|
+
):
|
|
28
|
+
app.ctx.input_channel.agent = agent
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def train_and_load_agent(input: TrainingInput) -> Agent:
|
|
32
|
+
"""Train a model and load an agent.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
input: Training input with importer and endpoints file
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
Loaded and ready agent
|
|
39
|
+
|
|
40
|
+
Raises:
|
|
41
|
+
TrainingError: If training fails
|
|
42
|
+
AgentLoadError: If agent loading fails
|
|
43
|
+
"""
|
|
44
|
+
try:
|
|
45
|
+
# Setup endpoints for training validation
|
|
46
|
+
await _setup_endpoints(input.endpoints_file)
|
|
47
|
+
|
|
48
|
+
# Train the model
|
|
49
|
+
training_result = await _train_model(input.importer)
|
|
50
|
+
|
|
51
|
+
# Load the agent
|
|
52
|
+
agent_instance = await _load_agent(training_result.model)
|
|
53
|
+
|
|
54
|
+
# Verify agent is ready
|
|
55
|
+
if not agent_instance.is_ready():
|
|
56
|
+
raise AgentLoadError("Agent failed to load properly - model is not ready")
|
|
57
|
+
|
|
58
|
+
structlogger.info("training.agent_ready", model_path=training_result.model)
|
|
59
|
+
|
|
60
|
+
return agent_instance
|
|
61
|
+
|
|
62
|
+
except (TrainingError, AgentLoadError):
|
|
63
|
+
raise
|
|
64
|
+
except Exception as e:
|
|
65
|
+
raise TrainingError(f"Unexpected error during training: {e}")
|
|
66
|
+
except SystemExit as e:
|
|
67
|
+
raise TrainingError(f"SystemExit during training: {e}")
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
async def try_load_existing_agent(project_folder: str) -> Optional[Agent]:
|
|
71
|
+
"""Try to load an existing agent from the project's models directory.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
project_folder: Path to the project folder
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Loaded Agent instance if successful, None otherwise
|
|
78
|
+
"""
|
|
79
|
+
models_dir = os.path.join(project_folder, "models")
|
|
80
|
+
|
|
81
|
+
if not os.path.exists(models_dir) or not os.path.isdir(models_dir):
|
|
82
|
+
structlogger.debug("No models directory found", models_dir=models_dir)
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
try:
|
|
86
|
+
# Find the latest model in the models directory
|
|
87
|
+
latest_model_path = get_latest_model(models_dir)
|
|
88
|
+
if not latest_model_path:
|
|
89
|
+
structlogger.debug(
|
|
90
|
+
"No models found in models directory", models_dir=models_dir
|
|
91
|
+
)
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
structlogger.info(
|
|
95
|
+
"Found existing model, attempting to load", model_path=latest_model_path
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
# Get available endpoints for agent loading
|
|
99
|
+
available_endpoints = AvailableEndpoints.get_instance()
|
|
100
|
+
|
|
101
|
+
# Load the agent
|
|
102
|
+
agent = await load_agent(
|
|
103
|
+
model_path=latest_model_path, endpoints=available_endpoints
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
if agent and agent.is_ready():
|
|
107
|
+
structlogger.info(
|
|
108
|
+
"Successfully loaded existing agent", model_path=latest_model_path
|
|
109
|
+
)
|
|
110
|
+
return agent
|
|
111
|
+
else:
|
|
112
|
+
structlogger.warning(
|
|
113
|
+
"Agent loaded but not ready", model_path=latest_model_path
|
|
114
|
+
)
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
except Exception as e:
|
|
118
|
+
structlogger.warning(
|
|
119
|
+
"Failed to load existing agent",
|
|
120
|
+
models_dir=models_dir,
|
|
121
|
+
error=str(e),
|
|
122
|
+
exc_info=True,
|
|
123
|
+
)
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
async def _setup_endpoints(endpoints_file: Path) -> None:
|
|
128
|
+
"""Setup endpoints configuration for training."""
|
|
129
|
+
try:
|
|
130
|
+
# Reset and load endpoints
|
|
131
|
+
AvailableEndpoints.reset_instance()
|
|
132
|
+
read_endpoints_from_path(endpoints_file)
|
|
133
|
+
|
|
134
|
+
structlogger.debug("training.endpoints_setup", endpoints_file=endpoints_file)
|
|
135
|
+
|
|
136
|
+
except Exception as e:
|
|
137
|
+
raise TrainingError(f"Failed to setup endpoints: {e}")
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
async def _train_model(importer: TrainingDataImporter) -> TrainingResult:
|
|
141
|
+
"""Train the Rasa model."""
|
|
142
|
+
try:
|
|
143
|
+
structlogger.info("training.started")
|
|
144
|
+
|
|
145
|
+
training_result = await train(
|
|
146
|
+
domain="",
|
|
147
|
+
config="",
|
|
148
|
+
training_files=None,
|
|
149
|
+
file_importer=importer,
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
if not training_result or not training_result.model:
|
|
153
|
+
raise TrainingError("Training completed but no model was produced")
|
|
154
|
+
|
|
155
|
+
structlogger.info("training.completed", model_path=training_result.model)
|
|
156
|
+
|
|
157
|
+
return training_result
|
|
158
|
+
|
|
159
|
+
except Exception as e:
|
|
160
|
+
raise TrainingError(f"Model training failed: {e}")
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
async def _load_agent(model_path: str) -> Agent:
|
|
164
|
+
"""Load the trained agent."""
|
|
165
|
+
try:
|
|
166
|
+
structlogger.info("training.loading_agent", model_path=model_path)
|
|
167
|
+
|
|
168
|
+
available_endpoints = AvailableEndpoints.get_instance()
|
|
169
|
+
if available_endpoints is None:
|
|
170
|
+
raise AgentLoadError("No endpoints available for agent loading")
|
|
171
|
+
|
|
172
|
+
structlogger.debug(
|
|
173
|
+
"training.loading_agent.cwd",
|
|
174
|
+
cwd=os.getcwd(),
|
|
175
|
+
model_path=model_path,
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
agent_instance = await load_agent(
|
|
179
|
+
model_path=model_path,
|
|
180
|
+
remote_storage=None,
|
|
181
|
+
endpoints=available_endpoints,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
if agent_instance is None:
|
|
185
|
+
raise AgentLoadError("Agent loading returned None")
|
|
186
|
+
|
|
187
|
+
structlogger.info("training.agent_loaded", model_path=model_path)
|
|
188
|
+
|
|
189
|
+
return agent_instance
|
|
190
|
+
|
|
191
|
+
except AgentLoadError:
|
|
192
|
+
raise
|
|
193
|
+
except Exception as e:
|
|
194
|
+
raise AgentLoadError(f"Failed to load agent: {e}")
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Functions for validating Rasa projects."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
from contextlib import contextmanager
|
|
5
|
+
from typing import Any, Dict, Generator, Optional
|
|
6
|
+
|
|
7
|
+
import structlog
|
|
8
|
+
|
|
9
|
+
from rasa.builder import config
|
|
10
|
+
from rasa.builder.exceptions import ValidationError
|
|
11
|
+
from rasa.builder.logging_utils import capture_validation_logs
|
|
12
|
+
from rasa.cli.utils import validate_files
|
|
13
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
14
|
+
|
|
15
|
+
structlogger = structlog.get_logger()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@contextmanager
|
|
19
|
+
def _mock_sys_exit() -> Generator[Dict[str, bool], Any, None]:
|
|
20
|
+
"""Context manager to prevent sys.exit from being called during validation."""
|
|
21
|
+
was_sys_exit_called = {"value": False}
|
|
22
|
+
|
|
23
|
+
def sys_exit_mock(code: int = 0) -> None:
|
|
24
|
+
was_sys_exit_called["value"] = True
|
|
25
|
+
|
|
26
|
+
original_exit = sys.exit
|
|
27
|
+
sys.exit = sys_exit_mock # type: ignore[assignment]
|
|
28
|
+
|
|
29
|
+
try:
|
|
30
|
+
yield was_sys_exit_called
|
|
31
|
+
finally:
|
|
32
|
+
sys.exit = original_exit
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def validate_project(importer: TrainingDataImporter) -> Optional[str]:
|
|
36
|
+
"""Validate a Rasa project.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
importer: Training data importer with domain, flows, and config
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
None if validation passes, error message if validation fails.
|
|
43
|
+
|
|
44
|
+
Raises:
|
|
45
|
+
ValidationError: If validation fails
|
|
46
|
+
"""
|
|
47
|
+
with capture_validation_logs() as captured_logs:
|
|
48
|
+
try:
|
|
49
|
+
with _mock_sys_exit() as exit_tracker:
|
|
50
|
+
validate_files(
|
|
51
|
+
fail_on_warnings=config.VALIDATION_FAIL_ON_WARNINGS,
|
|
52
|
+
max_history=config.VALIDATION_MAX_HISTORY,
|
|
53
|
+
importer=importer,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
if exit_tracker["value"]:
|
|
57
|
+
error_logs = [
|
|
58
|
+
log for log in captured_logs if log.get("log_level") != "debug"
|
|
59
|
+
]
|
|
60
|
+
structlogger.error(
|
|
61
|
+
"validation.failed.sys_exit",
|
|
62
|
+
error_logs=error_logs,
|
|
63
|
+
)
|
|
64
|
+
raise ValidationError(
|
|
65
|
+
"Validation failed with sys.exit", validation_logs=error_logs
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
structlogger.info("validation.success")
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
except ValidationError:
|
|
72
|
+
raise
|
|
73
|
+
|
|
74
|
+
except Exception as e:
|
|
75
|
+
error_msg = f"Validation failed with exception: {e}"
|
|
76
|
+
|
|
77
|
+
error_logs = [
|
|
78
|
+
log for log in captured_logs if log.get("log_level") != "debug"
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
structlogger.error(
|
|
82
|
+
"validation.failed.exception", error=str(e), validation_logs=error_logs
|
|
83
|
+
)
|
|
84
|
+
raise ValidationError(error_msg, validation_logs=error_logs)
|
|
85
|
+
|
|
86
|
+
except SystemExit as e:
|
|
87
|
+
error_logs = [
|
|
88
|
+
log for log in captured_logs if log.get("log_level") != "debug"
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
structlogger.error(
|
|
92
|
+
"validation.failed.sys_exit",
|
|
93
|
+
error_logs=error_logs,
|
|
94
|
+
)
|
|
95
|
+
raise ValidationError(
|
|
96
|
+
f"SystemExit during validation: {e}", validation_logs=error_logs
|
|
97
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Basic Rasa Template
|
|
2
|
+
|
|
3
|
+
A simple, general-purpose conversational agent template that provides essential conversational capabilities.
|
|
4
|
+
|
|
5
|
+
## π What's Included
|
|
6
|
+
|
|
7
|
+
This template provides a foundation for building conversational agents with:
|
|
8
|
+
- **Basic conversational flows**: Greetings, help, feedback, and human handoff
|
|
9
|
+
- **Help system**: Users can ask for assistance and get guided responses
|
|
10
|
+
- **Feedback collection**: Gather user feedback to improve the agent
|
|
11
|
+
- **Human handoff**: Seamlessly transfer conversations to human agents when needed
|
|
12
|
+
|
|
13
|
+
## π Directory Structure
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
βββ actions/ # Custom Python logic for agent actions
|
|
17
|
+
βββ data/ # Conversational flows and training data
|
|
18
|
+
βββ domain/ # Agent configuration (slots, responses, actions)
|
|
19
|
+
βββ docs/ # Knowledge base documents (optional)
|
|
20
|
+
βββ prompts/ # LLM prompts for enhanced responses
|
|
21
|
+
βββ config.yml # Training pipeline configuration
|
|
22
|
+
```
|
|
23
|
+
|
|
File without changes
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
import openai
|
|
4
|
+
from rasa_sdk import Action, Tracker
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
from rasa_sdk.types import DomainDict
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ActionHumanHandoff(Action):
|
|
10
|
+
def name(self) -> Text:
|
|
11
|
+
return "action_human_handoff"
|
|
12
|
+
|
|
13
|
+
async def run(
|
|
14
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
15
|
+
) -> List[Dict[Text, Any]]:
|
|
16
|
+
convo: List[str] = []
|
|
17
|
+
for event in tracker.events:
|
|
18
|
+
if event.get("event") == "user":
|
|
19
|
+
user_text = str(event.get("text") or "")
|
|
20
|
+
convo.append(f"user - {user_text}")
|
|
21
|
+
elif event.get("event") == "bot":
|
|
22
|
+
bot_text = str(event.get("text") or "")
|
|
23
|
+
convo.append(f"bot - {bot_text}")
|
|
24
|
+
prompt = (
|
|
25
|
+
f"The following is a conversation between a bot and a human user. "
|
|
26
|
+
f"Please summarise so that a human agent can easily understand the "
|
|
27
|
+
f"important context. Conversation: "
|
|
28
|
+
f"{convo}"
|
|
29
|
+
)
|
|
30
|
+
response = openai.chat.completions.create(
|
|
31
|
+
model="gpt-4o",
|
|
32
|
+
messages=[{"role": "user", "content": prompt}],
|
|
33
|
+
)
|
|
34
|
+
summarised_conversation = (
|
|
35
|
+
response.choices[0].message.content or "No summary available"
|
|
36
|
+
)
|
|
37
|
+
dispatcher.utter_message(
|
|
38
|
+
response="utter_transfer_to_manager", summary=summarised_conversation
|
|
39
|
+
)
|
|
40
|
+
return []
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## π `actions/` β The Agent's Toolkit
|
|
2
|
+
|
|
3
|
+
This folder contains Python files that define custom actions your agent can perform. Actions are pieces of code that run when your agent needs to do something beyond just responding with text.
|
|
4
|
+
|
|
5
|
+
**What you'll find:**
|
|
6
|
+
- `action_human_handoff.py`: Handles transferring the conversation to a human agent when needed.
|
|
7
|
+
|
|
8
|
+
**Edit Python files in this folder** to add new custom logic, integrate with APIs, or perform calculations and data processing.
|
|
9
|
+
|
|
10
|
+
Learn more about custom actions in the [Rasa documentation](https://rasa.com/docs/pro/build/custom-actions).
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Rasa Agent Configuration
|
|
2
|
+
# This file controls your agent's language, message processing pipeline, and conversation policies.
|
|
3
|
+
# For full documentation, see: https://rasa.com/docs/pro/build/configuring-assistant
|
|
4
|
+
recipe: default.v1
|
|
5
|
+
language: en
|
|
6
|
+
|
|
7
|
+
# The agent project unique identifier
|
|
8
|
+
# This default value must be replaced with a unique agent name within your deployment
|
|
9
|
+
assistant_id: placeholder_default
|
|
10
|
+
|
|
11
|
+
pipeline:
|
|
12
|
+
- name: SearchReadyLLMCommandGenerator
|
|
13
|
+
llm:
|
|
14
|
+
model_group: openai-gpt-4o
|
|
15
|
+
flow_retrieval:
|
|
16
|
+
active: false
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
policies:
|
|
20
|
+
- name: FlowPolicy
|
|
21
|
+
- name: EnterpriseSearchPolicy
|
|
22
|
+
vector_store:
|
|
23
|
+
type: "faiss"
|
|
24
|
+
source: "./docs"
|
|
25
|
+
llm:
|
|
26
|
+
model_group: openai-gpt-4o
|
|
27
|
+
embeddings:
|
|
28
|
+
model_group: openai-embeddings
|
|
29
|
+
check_relevancy: true
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# This file contains the credentials for the voice & chat platforms
|
|
2
|
+
# which your bot is using.
|
|
3
|
+
# https://rasa.com/docs/rasa-pro/connectors/messaging-and-voice-channels/
|
|
4
|
+
|
|
5
|
+
rest:
|
|
6
|
+
# # you don't need to provide anything here - this channel doesn't
|
|
7
|
+
# # require any credentials
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
#facebook:
|
|
11
|
+
# verify: "<verify>"
|
|
12
|
+
# secret: "<your secret>"
|
|
13
|
+
# page-access-token: "<your page access token>"
|
|
14
|
+
|
|
15
|
+
#slack:
|
|
16
|
+
# slack_token: "<your slack token>"
|
|
17
|
+
# slack_channel: "<the slack channel>"
|
|
18
|
+
# slack_signing_secret: "<your slack signing secret>"
|
|
19
|
+
|
|
20
|
+
#socketio:
|
|
21
|
+
# user_message_evt: <event name for user message>
|
|
22
|
+
# bot_message_evt: <event name for bot messages>
|
|
23
|
+
# session_persistence: <true/false>
|
|
24
|
+
|
|
25
|
+
#mattermost:
|
|
26
|
+
# url: "https://<mattermost instance>/api/v4"
|
|
27
|
+
# token: "<bot token>"
|
|
28
|
+
# webhook_url: "<callback URL>"
|
|
29
|
+
|
|
30
|
+
# This entry is needed if you are using Rasa Enterprise. The entry represents credentials
|
|
31
|
+
# for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers.
|
|
32
|
+
rasa:
|
|
33
|
+
url: "http://localhost:5002/api"
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
## π `data/` β The agent's Business Logic
|
|
2
|
+
|
|
3
|
+
This folder holds files that define your agentβs skills using "flows". Each flow is a step-by-step conversation pattern (like a recipe) for handling a user goal (e.g., checking a balance, updating an address).
|
|
4
|
+
|
|
5
|
+
**What youβll find:**
|
|
6
|
+
- Each YAML file = one or more skills.
|
|
7
|
+
- Flows are made of steps: collecting info, calling actions, and responding.
|
|
8
|
+
|
|
9
|
+
**Edit txt files in this folder** to add new skills, change existing flows, or adjust what the agent asks.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Simple thumbs up/down feedback flow
|
|
2
|
+
flows:
|
|
3
|
+
leave_feedback:
|
|
4
|
+
name: leaving feedback
|
|
5
|
+
description: This flow collects simple thumbs up or thumbs down feedback
|
|
6
|
+
if: False # Flow guard to prevent direct triggering
|
|
7
|
+
steps:
|
|
8
|
+
- collect: feedback_rating
|
|
9
|
+
description: Ask user for thumbs up or thumbs down feedback
|
|
10
|
+
- id: feedback_response
|
|
11
|
+
noop: true
|
|
12
|
+
next:
|
|
13
|
+
- if: slots.feedback_rating == "thumbs_up"
|
|
14
|
+
then: positive_response
|
|
15
|
+
- else: negative_response
|
|
16
|
+
- id: positive_response
|
|
17
|
+
action: utter_thankyou_positive
|
|
18
|
+
next: END
|
|
19
|
+
- id: negative_response
|
|
20
|
+
action: utter_thankyou_negative
|
|
21
|
+
next: END
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
version: "3.1"
|
|
2
|
+
flows:
|
|
3
|
+
human_handoff:
|
|
4
|
+
description: When you are unable to handle the request or the user is frustrated - offers to hand the user over to a live human agent.
|
|
5
|
+
steps:
|
|
6
|
+
- collect: confirm_human_handoff
|
|
7
|
+
ask_before_filling: True
|
|
8
|
+
next:
|
|
9
|
+
- if: slots.confirm_human_handoff is "Yes"
|
|
10
|
+
then:
|
|
11
|
+
- action: utter_transferring_to_human
|
|
12
|
+
- action: action_human_handoff
|
|
13
|
+
next: END
|
|
14
|
+
- else:
|
|
15
|
+
- action: utter_human_handoff_cancelled
|
|
16
|
+
next: END
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
## π `docs/` β The Agent's Knowledge Base (optional)
|
|
2
|
+
|
|
3
|
+
If your agent answers knowledge-based questions (FAQs, policies, etc.), you can put markdown, PDFs, or text files in this folder. Rasa can use this content for retrieval-augmented responses if set up with a vector store [2](https://rasa.com/docs/pro/build/retrieval-actions).
|
|
4
|
+
|
|
5
|
+
**Edit here** to update what your agent can retrieve and summarize for users.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
1. General Questions
|
|
2
|
+
|
|
3
|
+
Q: What is Rasa and what can I build with it?
|
|
4
|
+
A: Rasa is a conversational AI framework that lets you build agents using flows and large language models (LLMs). You can create agents for customer support, automation, or any use case that needs reliable, multi-step conversations.
|
|
5
|
+
|
|
6
|
+
Q: What is CALM in Rasa?
|
|
7
|
+
A: CALM (Conversational AI with Language Models) is Rasaβs architecture for building agents that combine LLM-powered language understanding with deterministic business logic, defined in flows.
|
|
8
|
+
|
|
9
|
+
Q: What is a flow in Rasa?
|
|
10
|
+
A: A flow is a step-by-step definition of a business process or conversation path. Flows specify what information to collect, what actions to perform, and how to branch or complete the conversation.
|
|
11
|
+
|
|
12
|
+
Q: How do I customize what my agent asks or does?
|
|
13
|
+
A: You can edit or add flows in the flows.yml file, providing clear descriptions for each flow and for each step. Slot descriptions help the agent extract the right information from the user.
|
|
14
|
+
|
|
15
|
+
Q: How does Rasa use LLMs?
|
|
16
|
+
A: Rasa uses LLMs to interpret user messages and generate high-level commands. These commands are then executed through flows and actions, ensuring reliable and controlled conversations.
|
|
17
|
+
|
|
18
|
+
Q: What files are important in a CALM-based Rasa project?
|
|
19
|
+
A: Key files include flows.yml (flows and their descriptions), domain.yml (slots, responses, and actions), and actions.py (custom business logic or integrations).
|
|
20
|
+
|
|
21
|
+
Q: How do I test my agent?
|
|
22
|
+
A: You can test your agent using the Rasa shell or Rasa Inspector, which lets you interact with your agent and debug flow execution.
|
|
23
|
+
|
|
24
|
+
Q: Can I extend my agent with custom logic?
|
|
25
|
+
A: Yes, you can implement custom actions in Python in actions.py. These can be used for API calls, database checks, or any other business logic.
|
|
26
|
+
|
|
27
|
+
Q: Do I need to define intents or entities?
|
|
28
|
+
A: No, with CALM and flows, you do not need to define intents or entities unless you have a specific use case for them.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
## π `domain/` β The Agent's Brain
|
|
2
|
+
|
|
3
|
+
This folder contains YAML files that define the agent's:
|
|
4
|
+
- **Slots**: The agent's memory (e.g., user's name, account number, address) [1](https://rasa.com/docs/reference/primitives/slots/).
|
|
5
|
+
- **Responses**: The messages your agent can say to users (e.g., greetings, confirmations) [2](https://rasa.com/docs/reference/primitives/responses).
|
|
6
|
+
- **Actions**: Custom logic your agent can run (e.g., checking a balance) [3](https://rasa.com/docs/reference/primitives/custom-actions).
|
|
7
|
+
|
|
8
|
+
You can organize the domain as one big file or many small ones. Rasa will automatically merge everything during training [1](https://rasa.com/docs/reference/config/domain).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
slots:
|
|
2
|
+
feedback_rating:
|
|
3
|
+
type: categorical
|
|
4
|
+
values: [thumbs_up, thumbs_down]
|
|
5
|
+
mappings:
|
|
6
|
+
- type: from_llm
|
|
7
|
+
|
|
8
|
+
responses:
|
|
9
|
+
utter_ask_feedback_rating:
|
|
10
|
+
- text: "We'd love to hear about your experience! How are we doing?"
|
|
11
|
+
buttons:
|
|
12
|
+
- title: "π Great"
|
|
13
|
+
payload: "/SetSlots(feedback_rating=thumbs_up)"
|
|
14
|
+
- title: "π Could be better"
|
|
15
|
+
payload: "/SetSlots(feedback_rating=thumbs_down)"
|
|
16
|
+
|
|
17
|
+
utter_thankyou_positive:
|
|
18
|
+
- text: "That's wonderful to hear! We appreciate you taking the time to provide us with feedback. π"
|
|
19
|
+
- text: "So glad we could help! Thanks for the positive feedback! π"
|
|
20
|
+
- text: "Amazing! We're thrilled you had a great experience. Thank you for your feedback! π"
|
|
21
|
+
|
|
22
|
+
utter_thankyou_negative:
|
|
23
|
+
- text: "We appreciate you taking the time to provide us with feedback. We're always working to improve our service."
|
|
24
|
+
- text: "Thank you for your honest feedback. We'll use it to make our service better."
|
|
25
|
+
- text: "Thanks for letting us know. Your feedback helps us improve our agent."
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
version: "3.1"
|
|
2
|
+
|
|
3
|
+
responses:
|
|
4
|
+
utter_goodbye:
|
|
5
|
+
- text: "Thanks for stopping by β take care!"
|
|
6
|
+
- text: "Thanks for the chat. Have a great day!"
|
|
7
|
+
- text: "Catch you later! Feel free to reach out anytime."
|
|
8
|
+
- text: "Goodbye for now β we're here if you need anything."
|
|
9
|
+
- text: "Take care! Let us know if you have any other questions."
|