rasa-pro 3.13.8__py3-none-any.whl โ 3.14.0a2__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/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +91 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +28 -0
- rasa/builder/copilot/copilot.py +354 -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 +464 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +771 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +200 -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 +142 -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 +276 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +242 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +351 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1335 -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 +183 -0
- rasa/builder/validation_service.py +97 -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/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 +9 -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/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/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/general/bot_identity.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
- rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
- rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
- rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
- rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
- rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
- rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
- rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
- rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
- rasa/cli/project_templates/finance/endpoints.yml +66 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/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/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/domain_undertand_bill.yml +102 -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 +29 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/domain_reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/domain_reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/domain_run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/domain_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/tutorial/config.yml +2 -1
- rasa/cli/scaffold.py +46 -2
- rasa/cli/train.py +2 -2
- rasa/core/actions/action.py +27 -38
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +48 -15
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js โ arc-c24d8d79.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js โ blockDiagram-38ab4fdb-1b6b9f26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js โ c4Diagram-3d4e48cf-da91d0f9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-d2444dfd.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js โ classDiagram-70f12bd4-6067f302.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js โ classDiagram-v2-f2320105-705d024a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-281a0990.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js โ createText-2e5e7dd3-3751dffe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js โ edges-e0da2a9e-7b25b4af.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js โ erDiagram-9861fffd-eb7deea8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js โ flowDb-956e92f1-67235ff6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js โ flowDiagram-66a62f08-34c3a16a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-aa4cca3b.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js โ flowchart-elk-definition-4a651766-f1a93631.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js โ ganttDiagram-c361ad54-a68cbad1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js โ gitGraphDiagram-72cf32ee-0b1e4a1d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js โ graph-f3c1d212.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-c804b295.js โ index-051c5a6e.js} +255 -255
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js โ index-3862675e-34cbca30.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js โ infoDiagram-f8f76790-e69960a1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js โ journeyDiagram-49397b02-8dd3296a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js โ layout-e93126bc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js โ line-15eb1e26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js โ linear-fec95d33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js โ mindmap-definition-fc14e90a-2557813e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js โ pieDiagram-8a3498a8-40d756b1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js โ quadrantDiagram-120e2f19-a48cbdcd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js โ requirementDiagram-deff3bca-dc778150.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js โ sankeyDiagram-04a897e0-10026b94.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js โ sequenceDiagram-704730f1-3b2ed10a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js โ stateDiagram-587899a1-c5f3b3fb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js โ stateDiagram-v2-d93cdb3a-e503656b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js โ styles-6aaf32cf-a683ce56.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js โ styles-9a916d00-02bcdcee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js โ styles-c10674c1-8e90dbb9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js โ svgDrawCommon-08f97a94-7c23fc1e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js โ timeline-definition-85554ec2-c42faec8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js โ xychartDiagram-e933f94c-5e3bb0ea.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +36 -10
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +268 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +8 -3
- rasa/core/channels/inspector/src/types.ts +8 -0
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +161 -50
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +9 -6
- rasa/core/channels/voice_stream/browser_audio.py +39 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +16 -13
- rasa/core/channels/voice_stream/jambonz.py +13 -11
- rasa/core/channels/voice_stream/twilio_media_streams.py +14 -13
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +106 -32
- rasa/core/nlg/contextual_response_rephraser.py +11 -7
- rasa/core/nlg/generator.py +21 -5
- rasa/core/nlg/response.py +43 -6
- rasa/core/nlg/translate.py +8 -0
- rasa/core/policies/enterprise_search_policy.py +4 -7
- rasa/core/policies/flows/flow_executor.py +8 -1
- rasa/core/run.py +13 -3
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
- rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
- rasa/e2e_test/e2e_test_schema.yml +3 -3
- rasa/engine/graph.py +5 -1
- rasa/engine/storage/local_model_storage.py +41 -4
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +27 -15
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/shared/core/domain.py +62 -15
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/steps/call.py +8 -1
- rasa/shared/core/flows/yaml_flows_io.py +16 -8
- rasa/shared/core/slots.py +4 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- rasa/shared/utils/common.py +2 -1
- rasa/studio/upload.py +12 -46
- rasa/telemetry.py +97 -23
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/licensing.py +21 -10
- rasa/utils/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/validator.py +7 -3
- rasa/version.py +1 -1
- {rasa_pro-3.13.8.dist-info โ rasa_pro-3.14.0a2.dist-info}/METADATA +23 -24
- {rasa_pro-3.13.8.dist-info โ rasa_pro-3.14.0a2.dist-info}/RECORD +382 -105
- 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_pro-3.13.8.dist-info โ rasa_pro-3.14.0a2.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.8.dist-info โ rasa_pro-3.14.0a2.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.8.dist-info โ rasa_pro-3.14.0a2.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
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
|
+
|
|
9
|
+
from rasa.builder.exceptions import AgentLoadError, TrainingError
|
|
10
|
+
from rasa.builder.models import TrainingInput
|
|
11
|
+
from rasa.core.agent import Agent, load_agent
|
|
12
|
+
from rasa.core.utils import AvailableEndpoints, read_endpoints_from_path
|
|
13
|
+
from rasa.model import get_latest_model
|
|
14
|
+
from rasa.model_training import TrainingResult, train
|
|
15
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
16
|
+
|
|
17
|
+
structlogger = structlog.get_logger()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
async def train_and_load_agent(input: TrainingInput) -> Agent:
|
|
21
|
+
"""Train a model and load an agent.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
input: Training input with importer and endpoints file
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
Loaded and ready agent
|
|
28
|
+
|
|
29
|
+
Raises:
|
|
30
|
+
TrainingError: If training fails
|
|
31
|
+
AgentLoadError: If agent loading fails
|
|
32
|
+
"""
|
|
33
|
+
try:
|
|
34
|
+
# Setup endpoints for training validation
|
|
35
|
+
await _setup_endpoints(input.endpoints_file)
|
|
36
|
+
|
|
37
|
+
# Train the model
|
|
38
|
+
training_result = await _train_model(input.importer)
|
|
39
|
+
|
|
40
|
+
# Load the agent
|
|
41
|
+
agent_instance = await _load_agent(training_result.model)
|
|
42
|
+
|
|
43
|
+
# Verify agent is ready
|
|
44
|
+
if not agent_instance.is_ready():
|
|
45
|
+
raise AgentLoadError("Agent failed to load properly - model is not ready")
|
|
46
|
+
|
|
47
|
+
structlogger.info("training.agent_ready", model_path=training_result.model)
|
|
48
|
+
|
|
49
|
+
return agent_instance
|
|
50
|
+
|
|
51
|
+
except (TrainingError, AgentLoadError):
|
|
52
|
+
raise
|
|
53
|
+
except Exception as e:
|
|
54
|
+
raise TrainingError(f"Unexpected error during training: {e}")
|
|
55
|
+
except SystemExit as e:
|
|
56
|
+
raise TrainingError(f"SystemExit during training: {e}")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
async def try_load_existing_agent(project_folder: str) -> Optional[Agent]:
|
|
60
|
+
"""Try to load an existing agent from the project's models directory.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
project_folder: Path to the project folder
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
Loaded Agent instance if successful, None otherwise
|
|
67
|
+
"""
|
|
68
|
+
models_dir = os.path.join(project_folder, "models")
|
|
69
|
+
|
|
70
|
+
if not os.path.exists(models_dir) or not os.path.isdir(models_dir):
|
|
71
|
+
structlogger.debug("No models directory found", models_dir=models_dir)
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
# Find the latest model in the models directory
|
|
76
|
+
latest_model_path = get_latest_model(models_dir)
|
|
77
|
+
if not latest_model_path:
|
|
78
|
+
structlogger.debug(
|
|
79
|
+
"No models found in models directory", models_dir=models_dir
|
|
80
|
+
)
|
|
81
|
+
return None
|
|
82
|
+
|
|
83
|
+
structlogger.info(
|
|
84
|
+
"Found existing model, attempting to load", model_path=latest_model_path
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
# Get available endpoints for agent loading
|
|
88
|
+
available_endpoints = AvailableEndpoints.get_instance()
|
|
89
|
+
|
|
90
|
+
# Load the agent
|
|
91
|
+
agent = await load_agent(
|
|
92
|
+
model_path=latest_model_path, endpoints=available_endpoints
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
if agent and agent.is_ready():
|
|
96
|
+
structlogger.info(
|
|
97
|
+
"Successfully loaded existing agent", model_path=latest_model_path
|
|
98
|
+
)
|
|
99
|
+
return agent
|
|
100
|
+
else:
|
|
101
|
+
structlogger.warning(
|
|
102
|
+
"Agent loaded but not ready", model_path=latest_model_path
|
|
103
|
+
)
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
except Exception as e:
|
|
107
|
+
structlogger.warning(
|
|
108
|
+
"Failed to load existing agent",
|
|
109
|
+
models_dir=models_dir,
|
|
110
|
+
error=str(e),
|
|
111
|
+
exc_info=True,
|
|
112
|
+
)
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
async def _setup_endpoints(endpoints_file: Path) -> None:
|
|
117
|
+
"""Setup endpoints configuration for training."""
|
|
118
|
+
try:
|
|
119
|
+
# Reset and load endpoints
|
|
120
|
+
AvailableEndpoints.reset_instance()
|
|
121
|
+
read_endpoints_from_path(endpoints_file)
|
|
122
|
+
|
|
123
|
+
structlogger.debug("training.endpoints_setup", endpoints_file=endpoints_file)
|
|
124
|
+
|
|
125
|
+
except Exception as e:
|
|
126
|
+
raise TrainingError(f"Failed to setup endpoints: {e}")
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
async def _train_model(importer: TrainingDataImporter) -> TrainingResult:
|
|
130
|
+
"""Train the Rasa model."""
|
|
131
|
+
try:
|
|
132
|
+
structlogger.info("training.started")
|
|
133
|
+
|
|
134
|
+
training_result = await train(
|
|
135
|
+
domain="",
|
|
136
|
+
config="",
|
|
137
|
+
training_files=None,
|
|
138
|
+
file_importer=importer,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
if not training_result or not training_result.model:
|
|
142
|
+
raise TrainingError("Training completed but no model was produced")
|
|
143
|
+
|
|
144
|
+
structlogger.info("training.completed", model_path=training_result.model)
|
|
145
|
+
|
|
146
|
+
return training_result
|
|
147
|
+
|
|
148
|
+
except Exception as e:
|
|
149
|
+
raise TrainingError(f"Model training failed: {e}")
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
async def _load_agent(model_path: str) -> Agent:
|
|
153
|
+
"""Load the trained agent."""
|
|
154
|
+
try:
|
|
155
|
+
structlogger.info("training.loading_agent", model_path=model_path)
|
|
156
|
+
|
|
157
|
+
available_endpoints = AvailableEndpoints.get_instance()
|
|
158
|
+
if available_endpoints is None:
|
|
159
|
+
raise AgentLoadError("No endpoints available for agent loading")
|
|
160
|
+
|
|
161
|
+
structlogger.debug(
|
|
162
|
+
"training.loading_agent.cwd",
|
|
163
|
+
cwd=os.getcwd(),
|
|
164
|
+
model_path=model_path,
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
agent_instance = await load_agent(
|
|
168
|
+
model_path=model_path,
|
|
169
|
+
remote_storage=None,
|
|
170
|
+
endpoints=available_endpoints,
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
if agent_instance is None:
|
|
174
|
+
raise AgentLoadError("Agent loading returned None")
|
|
175
|
+
|
|
176
|
+
structlogger.info("training.agent_loaded", model_path=model_path)
|
|
177
|
+
|
|
178
|
+
return agent_instance
|
|
179
|
+
|
|
180
|
+
except AgentLoadError:
|
|
181
|
+
raise
|
|
182
|
+
except Exception as e:
|
|
183
|
+
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
|
+
)
|
|
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,29 @@
|
|
|
1
|
+
# Rasa Assistant Configuration
|
|
2
|
+
# This file controls your assistant'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 assistant project unique identifier
|
|
8
|
+
# This default value must be replaced with a unique assistant 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,9 @@
|
|
|
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).
|
|
5
|
+
- **Responses**: The messages your bot can say to users (e.g., greetings, confirmations).
|
|
6
|
+
- **Actions**: Custom logic your agent can run (e.g., checking a balance).
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
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."
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
version: "3.1"
|
|
2
|
+
|
|
3
|
+
slots:
|
|
4
|
+
example_questions:
|
|
5
|
+
type: text
|
|
6
|
+
initial_value: |
|
|
7
|
+
- What can you do?
|
|
8
|
+
- Connect me to a human
|
|
9
|
+
- Browse FAQs
|
|
10
|
+
mappings:
|
|
11
|
+
- type: controlled
|
|
12
|
+
|
|
13
|
+
responses:
|
|
14
|
+
utter_what_can_you_do:
|
|
15
|
+
- text: |
|
|
16
|
+
I can help you with a few basics like:
|
|
17
|
+
- Connecting you to a human
|
|
18
|
+
- Help you try out the FAQs
|
|
19
|
+
- Collect your feedback
|
|
20
|
+
metadata:
|
|
21
|
+
rephrase: True
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
version: "3.1"
|
|
2
|
+
actions:
|
|
3
|
+
- "action_human_handoff"
|
|
4
|
+
|
|
5
|
+
slots:
|
|
6
|
+
confirm_human_handoff:
|
|
7
|
+
type: "categorical"
|
|
8
|
+
mappings:
|
|
9
|
+
- type: "from_llm"
|
|
10
|
+
values:
|
|
11
|
+
- "Yes"
|
|
12
|
+
- "No"
|
|
13
|
+
|
|
14
|
+
responses:
|
|
15
|
+
utter_ask_confirm_human_handoff:
|
|
16
|
+
- text: "Do you want to be connected to a human agent?"
|
|
17
|
+
buttons:
|
|
18
|
+
- payload: "/SetSlots(confirm_human_handoff=Yes)"
|
|
19
|
+
title: "Yes"
|
|
20
|
+
- payload: "/SetSlots(confirm_human_handoff=No)"
|
|
21
|
+
title: "No"
|
|
22
|
+
|
|
23
|
+
utter_transferring_to_human:
|
|
24
|
+
- text: "You will be transfered to a human agent in a few moments."
|
|
25
|
+
|
|
26
|
+
utter_human_handoff_cancelled:
|
|
27
|
+
- text: "Ok, I understand you don't want to be connected to a human agent. Is there something else I can help you with?"
|
|
28
|
+
metadata:
|
|
29
|
+
rephrase: True
|
|
30
|
+
|
|
31
|
+
utter_transfer_to_manager:
|
|
32
|
+
- text: "I will transfer the following summary of our conversation to the Callback Manager:\n{summary}"
|