rasa-pro 3.14.0.dev20250825__py3-none-any.whl → 3.14.0.dev20250901__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 +376 -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 +147 -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 +270 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +258 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +462 -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/training_service.py +124 -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 +27 -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 +63 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -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 +21 -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 +63 -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 +27 -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 +63 -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/core/actions/action.py +0 -1
- rasa/core/channels/inspector/dist/assets/{arc-1ddec37b.js → arc-18042c22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-18af387c.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-250127a3.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-c3388b34.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9c893a82.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-c111213b.js → createText-2e5e7dd3-31422447.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-812a729d.js → edges-e0da2a9e-518a90db.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-fd5051bc.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-3287ac02.js → flowDb-956e92f1-e048c2be.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-692fb0b2.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-008376f1.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-df330a69.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-e03676fb.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-46fad2ba.js → graph-14702d8a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-a484ac55.js → index-3862675e-f18b534b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-a003633f.js → index-4d4bdf3a.js} +231 -231
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-3f9e6ec2.js → infoDiagram-f8f76790-64154b83.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-79f72383.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-aad098e5.js → layout-5a3b2123.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-219ab7ae.js → line-2272a8c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-2cddbe62.js → linear-35bcf273.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-1d41ed99.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-cc496ee8.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-84d32884.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-c0deb984.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-b9d7fd62.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-7d517565.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-98ef9b27.js → stateDiagram-587899a1-b8a74083.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-cee70748.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-3f9d1c96.js → styles-6aaf32cf-f1d54e34.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-67471923.js → styles-9a916d00-980de489.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-bd093fb7.js → styles-c10674c1-3c03abde.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-675794e8.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-0ac67617.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-c018dc37.js → xychartDiagram-e933f94c-acbc628a.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 +10 -11
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
- rasa/core/channels/studio_chat.py +25 -7
- rasa/core/policies/enterprise_search_policy.py +4 -7
- rasa/core/policies/flows/flow_executor.py +8 -1
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/engine/storage/local_model_storage.py +45 -2
- rasa/model_manager/model_api.py +1 -2
- rasa/model_manager/runner_service.py +1 -1
- 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/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/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/validator.py +7 -3
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev20250825.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/METADATA +9 -10
- {rasa_pro-3.14.0.dev20250825.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/RECORD +347 -73
- rasa/core/channels/inspector/dist/assets/channel-59f6d54b.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-26177ddb.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-29c03f5a.js +0 -1
- {rasa_pro-3.14.0.dev20250825.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev20250825.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev20250825.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
version: "3.1"
|
|
2
|
+
|
|
3
|
+
slots:
|
|
4
|
+
account_from:
|
|
5
|
+
type: text
|
|
6
|
+
payee_name:
|
|
7
|
+
type: text
|
|
8
|
+
payee_exists:
|
|
9
|
+
type: bool
|
|
10
|
+
amount:
|
|
11
|
+
type: float
|
|
12
|
+
sufficient_funds:
|
|
13
|
+
type: bool
|
|
14
|
+
timing:
|
|
15
|
+
type: categorical
|
|
16
|
+
values:
|
|
17
|
+
- now
|
|
18
|
+
- future
|
|
19
|
+
payment_date:
|
|
20
|
+
type: text
|
|
21
|
+
confirm_immediate_payment:
|
|
22
|
+
type: bool
|
|
23
|
+
confirm_future_payment:
|
|
24
|
+
type: bool
|
|
25
|
+
payment_processed:
|
|
26
|
+
type: bool
|
|
27
|
+
payment_scheduled:
|
|
28
|
+
type: bool
|
|
29
|
+
valid_payment_date:
|
|
30
|
+
type: bool
|
|
31
|
+
future_payment_date:
|
|
32
|
+
type: bool
|
|
33
|
+
|
|
34
|
+
responses:
|
|
35
|
+
utter_transfer_money_understand:
|
|
36
|
+
- text: "Okay lets transfer money"
|
|
37
|
+
metadata:
|
|
38
|
+
rephrase: True
|
|
39
|
+
utter_ask_payee_name:
|
|
40
|
+
- text: "Which payee would you like to send money to?"
|
|
41
|
+
utter_ask_amount:
|
|
42
|
+
- text: "How much money would you like to transfer?"
|
|
43
|
+
utter_insufficient_funds:
|
|
44
|
+
- text: "I'm sorry, but you have insufficient funds for this transfer. Please enter a different amount"
|
|
45
|
+
utter_ask_timing:
|
|
46
|
+
- text: "When would you like this transfer to be made?"
|
|
47
|
+
buttons:
|
|
48
|
+
- title: Immediate
|
|
49
|
+
payload: "/SetSlots(timing=now)"
|
|
50
|
+
- title: Future
|
|
51
|
+
payload: "/SetSlots(timing=future)"
|
|
52
|
+
utter_ask_payment_date:
|
|
53
|
+
- text: "On which date would you like this payment to be made?"
|
|
54
|
+
utter_ask_confirm_future_payment:
|
|
55
|
+
- text: "A payment of ${amount} to {payee_name} will be scheduled for {payment_date}. Is this correct?"
|
|
56
|
+
utter_payment_scheduled:
|
|
57
|
+
- text: "Your payment of ${amount} to {payee_name} has been successfully scheduled for {payment_date}"
|
|
58
|
+
utter_ask_confirm_immediate_payment:
|
|
59
|
+
- text: "An immediate payment of ${amount} to {payee_name} will be processed. Is this correct?"
|
|
60
|
+
utter_transfer_successful:
|
|
61
|
+
- text: "Your transfer of ${amount} to {payee_name} has been successfully processed"
|
|
62
|
+
utter_cancel_transfer:
|
|
63
|
+
- text: "No problem. I will cancel this transfer"
|
|
64
|
+
utter_invalid_amount:
|
|
65
|
+
- text: "You have to enter an amount greater than 0"
|
|
66
|
+
metadata:
|
|
67
|
+
rephrase: True
|
|
68
|
+
utter_past_payment_date:
|
|
69
|
+
- text: "A future payment date cannot be in the past!"
|
|
70
|
+
metadata:
|
|
71
|
+
rephrase: True
|
|
72
|
+
|
|
73
|
+
actions:
|
|
74
|
+
- action_ask_account_from
|
|
75
|
+
- action_check_payee_existence
|
|
76
|
+
- action_check_sufficient_funds
|
|
77
|
+
- action_schedule_payment
|
|
78
|
+
- action_process_immediate_payment
|
|
79
|
+
- action_validate_payment_date
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# This file contains the different endpoints your bot can use.
|
|
2
|
+
|
|
3
|
+
# Server where the models are pulled from.
|
|
4
|
+
# https://rasa.com/docs/rasa-pro/production/model-storage#fetching-models-from-a-server
|
|
5
|
+
|
|
6
|
+
#models:
|
|
7
|
+
# url: http://my-server.com/models/default_core@latest
|
|
8
|
+
# wait_time_between_pulls: 10 # [optional](default: 100)
|
|
9
|
+
|
|
10
|
+
# Server which runs your custom actions.
|
|
11
|
+
# https://rasa.com/docs/rasa-pro/concepts/custom-actions
|
|
12
|
+
|
|
13
|
+
action_endpoint:
|
|
14
|
+
actions_module: "actions"
|
|
15
|
+
|
|
16
|
+
# Tracker store which is used to store the conversations.
|
|
17
|
+
# By default the conversations are stored in memory.
|
|
18
|
+
# https://rasa.com/docs/rasa-pro/production/tracker-stores
|
|
19
|
+
|
|
20
|
+
#tracker_store:
|
|
21
|
+
# type: redis
|
|
22
|
+
# url: <host of the redis instance, e.g. localhost>
|
|
23
|
+
# port: <port of your redis instance, usually 6379>
|
|
24
|
+
# db: <number of your database within redis, e.g. 0>
|
|
25
|
+
# password: <password used for authentication>
|
|
26
|
+
# use_ssl: <whether or not the communication is encrypted, default false>
|
|
27
|
+
|
|
28
|
+
#tracker_store:
|
|
29
|
+
# type: mongod
|
|
30
|
+
# url: <url to your mongo instance, e.g. mongodb://localhost:27017>
|
|
31
|
+
# db: <name of the db within your mongo instance, e.g. rasa>
|
|
32
|
+
# username: <username used for authentication>
|
|
33
|
+
# password: <password used for authentication>
|
|
34
|
+
|
|
35
|
+
# Event broker which all conversation events should be streamed to.
|
|
36
|
+
# https://rasa.com/docs/rasa-pro/production/event-brokers
|
|
37
|
+
|
|
38
|
+
#event_broker:
|
|
39
|
+
# url: localhost
|
|
40
|
+
# username: username
|
|
41
|
+
# password: password
|
|
42
|
+
# queue: queue
|
|
43
|
+
|
|
44
|
+
# The lines below activate contextual rephrasing, using the default OpenAI language model.
|
|
45
|
+
# Ensure the OPENAI_API_KEY is set to prevent any missing API key errors.
|
|
46
|
+
# For more details, refer to the documentation:
|
|
47
|
+
# https://rasa.com/docs/rasa-pro/concepts/contextual-response-rephraser
|
|
48
|
+
# To enable the rephraser, remove the comment symbols in the lines below.
|
|
49
|
+
nlg:
|
|
50
|
+
type: rephrase
|
|
51
|
+
llm:
|
|
52
|
+
model_group: openai-gpt-4o
|
|
53
|
+
prompt: prompts/rephraser_demo_personality_prompt.jinja2
|
|
54
|
+
rephrase_all: False
|
|
55
|
+
|
|
56
|
+
model_groups:
|
|
57
|
+
- id: openai-gpt-4o
|
|
58
|
+
models:
|
|
59
|
+
- provider: openai
|
|
60
|
+
model: gpt-4o-2024-11-20
|
|
61
|
+
request_timeout: 7
|
|
62
|
+
max_tokens: 256
|
|
63
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
The following is a conversation with an AI assistant.
|
|
2
|
+
The assistant is professional, calm, and highly attentive to detail.
|
|
3
|
+
Its main priorities are efficiency, speed, and accuracy when handling user requests.
|
|
4
|
+
|
|
5
|
+
Please rephrase the suggested AI response, staying close to the original meaning while
|
|
6
|
+
ensuring the assistant's tone remains formal yet empathetic, friendly, and reassuring.
|
|
7
|
+
It should convey patience, even with vague or repetitive questions, and be clear,
|
|
8
|
+
informative, and slightly humorous where appropriate.
|
|
9
|
+
|
|
10
|
+
Write your responses in English
|
|
11
|
+
|
|
12
|
+
Context / previous conversation with the user:
|
|
13
|
+
{{history}}
|
|
14
|
+
|
|
15
|
+
{{current_input}}
|
|
16
|
+
|
|
17
|
+
Suggested AI Response: {{suggested_response}}
|
|
18
|
+
|
|
19
|
+
Rephrased AI Response:
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import csv
|
|
2
|
+
import logging
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
|
|
6
|
+
from rasa_sdk import Action
|
|
7
|
+
from rasa_sdk.events import SlotSet
|
|
8
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
9
|
+
from rasa_sdk.interfaces import Tracker
|
|
10
|
+
from rasa_sdk.types import DomainDict
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ActionVerifyBillByDate(Action):
|
|
14
|
+
def name(self) -> str:
|
|
15
|
+
return "action_verify_bill_by_date"
|
|
16
|
+
|
|
17
|
+
@staticmethod
|
|
18
|
+
def text_to_date(month_text: str) -> str:
|
|
19
|
+
try:
|
|
20
|
+
# Get the current year
|
|
21
|
+
current_year = datetime.now().year
|
|
22
|
+
|
|
23
|
+
# Combine user input with the current year
|
|
24
|
+
full_text = f"{month_text} {current_year}"
|
|
25
|
+
|
|
26
|
+
# Parse the text format (e.g., "March 2025")
|
|
27
|
+
date_obj = datetime.strptime(full_text, "%B %Y")
|
|
28
|
+
|
|
29
|
+
# Format as DD/MM/YYYY (defaults to the first day of the month)
|
|
30
|
+
formatted_date = date_obj.strftime("01/%m/%Y")
|
|
31
|
+
logging.info(f"This is an info message: formatted_date: {formatted_date}")
|
|
32
|
+
return formatted_date
|
|
33
|
+
except ValueError:
|
|
34
|
+
return "Invalid format. Please use a full month name (e.g., 'March')."
|
|
35
|
+
|
|
36
|
+
def run(
|
|
37
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
38
|
+
) -> List[Dict[str, Any]]:
|
|
39
|
+
# Get customer ID and date from slots
|
|
40
|
+
customer_id = tracker.get_slot("customer_id")
|
|
41
|
+
bill_month = tracker.get_slot("bill_month")
|
|
42
|
+
|
|
43
|
+
bill_date = ActionVerifyBillByDate.text_to_date(bill_month)
|
|
44
|
+
|
|
45
|
+
if not customer_id:
|
|
46
|
+
dispatcher.utter_message(
|
|
47
|
+
"I couldn't find your customer ID. Please provide it."
|
|
48
|
+
)
|
|
49
|
+
return []
|
|
50
|
+
|
|
51
|
+
if not bill_date:
|
|
52
|
+
dispatcher.utter_message(
|
|
53
|
+
"Please specify the date for the bill you want to check."
|
|
54
|
+
)
|
|
55
|
+
return []
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
# Load CSV file with billing data
|
|
59
|
+
with open("csvs/billing.csv", "r", newline="") as csvfile:
|
|
60
|
+
reader = csv.DictReader(csvfile)
|
|
61
|
+
|
|
62
|
+
# Convert bill_date to datetime for comparison
|
|
63
|
+
bill_date_obj = datetime.strptime(bill_date, "%d/%m/%Y")
|
|
64
|
+
|
|
65
|
+
# Filter data for the given customer and date
|
|
66
|
+
customer_bills = []
|
|
67
|
+
specific_bill = None
|
|
68
|
+
|
|
69
|
+
for row in reader:
|
|
70
|
+
if row["customer_id"] == str(customer_id):
|
|
71
|
+
# Parse the date from CSV
|
|
72
|
+
row_date = datetime.strptime(row["date"], "%d/%m/%Y")
|
|
73
|
+
row["amount"] = float(row["amount"])
|
|
74
|
+
customer_bills.append(row)
|
|
75
|
+
|
|
76
|
+
# Check if this is the specific bill we're looking for
|
|
77
|
+
if row_date.date() == bill_date_obj.date():
|
|
78
|
+
specific_bill = row
|
|
79
|
+
|
|
80
|
+
if specific_bill is None:
|
|
81
|
+
dispatcher.utter_message(
|
|
82
|
+
f"No bill found for {bill_date_obj.date()}."
|
|
83
|
+
)
|
|
84
|
+
return []
|
|
85
|
+
|
|
86
|
+
bill_amount = float(specific_bill["amount"])
|
|
87
|
+
|
|
88
|
+
# Calculate average
|
|
89
|
+
if customer_bills:
|
|
90
|
+
average_bill = sum(
|
|
91
|
+
float(bill["amount"]) for bill in customer_bills
|
|
92
|
+
) / len(customer_bills)
|
|
93
|
+
else:
|
|
94
|
+
average_bill = 0.0
|
|
95
|
+
|
|
96
|
+
difference = bill_amount - average_bill
|
|
97
|
+
|
|
98
|
+
# Generate response
|
|
99
|
+
response = (
|
|
100
|
+
f"Your bill for {bill_month} {bill_date_obj.date().year} is "
|
|
101
|
+
f"${bill_amount:.2f}. \n"
|
|
102
|
+
f"The average of your past bills is ${average_bill:.2f}. \n"
|
|
103
|
+
f"This bill is {'higher' if difference > 0 else 'lower'} than "
|
|
104
|
+
f"your average by ${abs(difference):.2f}."
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
dispatcher.utter_message(response)
|
|
108
|
+
return [
|
|
109
|
+
SlotSet("bill_amount", float(bill_amount)),
|
|
110
|
+
SlotSet("average_bill", float(average_bill)),
|
|
111
|
+
SlotSet("difference", float(difference)),
|
|
112
|
+
]
|
|
113
|
+
|
|
114
|
+
except FileNotFoundError:
|
|
115
|
+
dispatcher.utter_message("Billing data file not found.")
|
|
116
|
+
return []
|
|
117
|
+
except Exception:
|
|
118
|
+
dispatcher.utter_message("Error retrieving billing information.")
|
|
119
|
+
return []
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class ActionRecapBill(Action):
|
|
123
|
+
def name(self) -> str:
|
|
124
|
+
return "action_recap_bill"
|
|
125
|
+
|
|
126
|
+
def run(
|
|
127
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
128
|
+
) -> List[Dict[str, Any]]:
|
|
129
|
+
# Get customer_id and bill_date from slots
|
|
130
|
+
customer_id = tracker.get_slot("customer_id")
|
|
131
|
+
bill_month = tracker.get_slot("bill_month")
|
|
132
|
+
|
|
133
|
+
bill_date = ActionVerifyBillByDate.text_to_date(bill_month)
|
|
134
|
+
|
|
135
|
+
if not customer_id:
|
|
136
|
+
dispatcher.utter_message(
|
|
137
|
+
"I need your customer ID to fetch your bill recap."
|
|
138
|
+
)
|
|
139
|
+
return []
|
|
140
|
+
|
|
141
|
+
if not bill_date:
|
|
142
|
+
dispatcher.utter_message(
|
|
143
|
+
"I need a date to fetch your bill recap. Can you provide one?"
|
|
144
|
+
)
|
|
145
|
+
return []
|
|
146
|
+
|
|
147
|
+
# Convert customer_id to int if needed
|
|
148
|
+
try:
|
|
149
|
+
customer_id = int(customer_id)
|
|
150
|
+
except ValueError:
|
|
151
|
+
dispatcher.utter_message("Invalid customer ID format.")
|
|
152
|
+
return []
|
|
153
|
+
|
|
154
|
+
try:
|
|
155
|
+
# Load CSV file
|
|
156
|
+
with open("csvs/billing.csv", "r", newline="") as csvfile:
|
|
157
|
+
reader = csv.DictReader(csvfile)
|
|
158
|
+
|
|
159
|
+
bill_date_obj = datetime.strptime(bill_date, "%d/%m/%Y")
|
|
160
|
+
|
|
161
|
+
# Filter records for the given customer_id
|
|
162
|
+
filtered_records: List[Dict[str, Any]] = []
|
|
163
|
+
for row in reader:
|
|
164
|
+
if row["customer_id"] == str(customer_id):
|
|
165
|
+
# Parse date and add to filtered records
|
|
166
|
+
row_date: datetime = datetime.strptime(row["date"], "%d/%m/%Y")
|
|
167
|
+
filtered_records.append(
|
|
168
|
+
{
|
|
169
|
+
"date": row_date.date(),
|
|
170
|
+
"amount": float(row["amount"]),
|
|
171
|
+
"source": row["source"],
|
|
172
|
+
}
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
if not filtered_records:
|
|
176
|
+
dispatcher.utter_message(
|
|
177
|
+
f"No transactions found for customer {customer_id} on "
|
|
178
|
+
f"{bill_date_obj.date().strftime('%B %Y')}."
|
|
179
|
+
)
|
|
180
|
+
return []
|
|
181
|
+
|
|
182
|
+
# Format the output
|
|
183
|
+
response1 = "Here is a summary of your costs :"
|
|
184
|
+
dispatcher.utter_message(response1)
|
|
185
|
+
response = "\n".join(
|
|
186
|
+
[
|
|
187
|
+
(
|
|
188
|
+
f"{record['date']} | {record['amount']} $ "
|
|
189
|
+
f"| {record['source']}"
|
|
190
|
+
)
|
|
191
|
+
for record in filtered_records
|
|
192
|
+
]
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
# Send response to user
|
|
196
|
+
dispatcher.utter_message(response)
|
|
197
|
+
return []
|
|
198
|
+
|
|
199
|
+
except FileNotFoundError:
|
|
200
|
+
dispatcher.utter_message("Billing data file not found.")
|
|
201
|
+
return []
|
|
202
|
+
except Exception:
|
|
203
|
+
dispatcher.utter_message("Error retrieving billing information.")
|
|
204
|
+
return []
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from openai import AsyncOpenAI
|
|
4
|
+
from rasa_sdk import Action, Tracker
|
|
5
|
+
from rasa_sdk.events import BotUttered
|
|
6
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
7
|
+
from rasa_sdk.types import DomainDict
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionHumanHandoff(Action):
|
|
11
|
+
def __init__(self) -> None:
|
|
12
|
+
super().__init__()
|
|
13
|
+
self.client = AsyncOpenAI()
|
|
14
|
+
|
|
15
|
+
def name(self) -> Text:
|
|
16
|
+
return "action_human_handoff"
|
|
17
|
+
|
|
18
|
+
async def run(
|
|
19
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
20
|
+
) -> List[Dict[Text, Any]]:
|
|
21
|
+
# Collect conversation
|
|
22
|
+
convo = []
|
|
23
|
+
for event in tracker.events:
|
|
24
|
+
if event.get("event") == "user":
|
|
25
|
+
user_text = "{}".format(event.get("text"))
|
|
26
|
+
user_text2 = "user - " + user_text
|
|
27
|
+
convo.append(user_text2)
|
|
28
|
+
if event.get("event") == "bot":
|
|
29
|
+
bot_text = "{}".format(event.get("text"))
|
|
30
|
+
bot_text2 = "bot - " + bot_text
|
|
31
|
+
# print(bot_text)
|
|
32
|
+
convo.append(bot_text2)
|
|
33
|
+
prompt = (
|
|
34
|
+
f"The following is a conversation between a bot and a human user, "
|
|
35
|
+
f"please summarise so that a human agent can easily understand "
|
|
36
|
+
f"the important context. Conversation: {convo}"
|
|
37
|
+
)
|
|
38
|
+
response = await self.client.chat.completions.create(
|
|
39
|
+
model="gpt-4", # or "gpt-3.5-turbo"
|
|
40
|
+
messages=[{"role": "user", "content": prompt}],
|
|
41
|
+
)
|
|
42
|
+
summarised_conversation = response.choices[0].message.content or ""
|
|
43
|
+
return [
|
|
44
|
+
BotUttered(
|
|
45
|
+
f"I will transfer the following summary of our conversation "
|
|
46
|
+
f"to the Callback Manager:\n"
|
|
47
|
+
f"{summarised_conversation}"
|
|
48
|
+
)
|
|
49
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import csv
|
|
2
|
+
from typing import Dict, List
|
|
3
|
+
|
|
4
|
+
from rasa_sdk import Action
|
|
5
|
+
from rasa_sdk.events import SlotSet
|
|
6
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
7
|
+
from rasa_sdk.interfaces import Tracker
|
|
8
|
+
from rasa_sdk.types import DomainDict
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ActionGetCustomerInfo(Action):
|
|
12
|
+
def name(self) -> str:
|
|
13
|
+
return "action_get_customer_info"
|
|
14
|
+
|
|
15
|
+
def run(
|
|
16
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
17
|
+
) -> List[Dict]:
|
|
18
|
+
# Load CSV file
|
|
19
|
+
file_path = "csvs/customers.csv" # get information from your DBs
|
|
20
|
+
customer_id = tracker.get_slot("customer_id")
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
with open(file_path, "r", newline="") as csvfile:
|
|
24
|
+
reader = csv.DictReader(csvfile)
|
|
25
|
+
|
|
26
|
+
# Filter data for the given customer ID
|
|
27
|
+
customer_info = None
|
|
28
|
+
for row in reader:
|
|
29
|
+
if row["customer_id"] == str(customer_id):
|
|
30
|
+
customer_info = row
|
|
31
|
+
break
|
|
32
|
+
|
|
33
|
+
if customer_info is None:
|
|
34
|
+
dispatcher.utter_message("No customer found with this ID.")
|
|
35
|
+
return []
|
|
36
|
+
|
|
37
|
+
# Extract customer details
|
|
38
|
+
first_name = customer_info["first_name"]
|
|
39
|
+
|
|
40
|
+
# Set the retrieved name in a slot
|
|
41
|
+
return [SlotSet("customer_first_name", first_name)]
|
|
42
|
+
|
|
43
|
+
except FileNotFoundError:
|
|
44
|
+
dispatcher.utter_message("Customer database file not found.")
|
|
45
|
+
return []
|
|
46
|
+
except Exception:
|
|
47
|
+
dispatcher.utter_message("Error retrieving customer information.")
|
|
48
|
+
return []
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import random
|
|
3
|
+
|
|
4
|
+
from rasa_sdk import Action
|
|
5
|
+
from rasa_sdk.events import EventType, SlotSet
|
|
6
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
7
|
+
from rasa_sdk.interfaces import Tracker
|
|
8
|
+
from rasa_sdk.types import DomainDict
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ActionSleepAndRespond(Action):
|
|
12
|
+
def name(self) -> str:
|
|
13
|
+
return "actions_run_speed_test"
|
|
14
|
+
|
|
15
|
+
async def run(
|
|
16
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
17
|
+
) -> list[EventType]:
|
|
18
|
+
await asyncio.sleep(10)
|
|
19
|
+
dispatcher.utter_message(
|
|
20
|
+
text="Thank you for waiting... ✅ "
|
|
21
|
+
) # Send to the user
|
|
22
|
+
|
|
23
|
+
random_number = random.randint(
|
|
24
|
+
50, 150
|
|
25
|
+
) # we will pick randomly the internet speed here
|
|
26
|
+
# for local testing purposes you can define the number
|
|
27
|
+
# for Production testing connect to the API to get this data
|
|
28
|
+
return [SlotSet("network_speed", random_number)]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action
|
|
4
|
+
from rasa_sdk.events import EventType
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
from rasa_sdk.interfaces import Tracker
|
|
7
|
+
from rasa_sdk.types import DomainDict
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionSleepAndRespond(Action):
|
|
11
|
+
def name(self) -> str:
|
|
12
|
+
return "action_sleep_few_sec"
|
|
13
|
+
|
|
14
|
+
async def run(
|
|
15
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
16
|
+
) -> list[EventType]:
|
|
17
|
+
await asyncio.sleep(3)
|
|
18
|
+
return []
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
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,19 @@
|
|
|
1
|
+
customer_id,date,amount,source
|
|
2
|
+
123,01/01/2025,150.50,Internet
|
|
3
|
+
123,01/02/2025,55.00,Internet
|
|
4
|
+
123,01/03/2025,60.00,Internet
|
|
5
|
+
123,01/04/2025,65.00,Internet
|
|
6
|
+
123,01/05/2025,70.00,Internet
|
|
7
|
+
123,01/06/2025,75.00,Internet
|
|
8
|
+
123,01/07/2025,80.00,Internet
|
|
9
|
+
123,01/08/2025,85.00,Internet
|
|
10
|
+
123,01/09/2025,90.00,Internet
|
|
11
|
+
123,01/10/2025,95.00,Internet
|
|
12
|
+
123,01/11/2025,100.00,Internet
|
|
13
|
+
123,01/12/2025,105.00,Internet
|
|
14
|
+
124,01/01/2025,53.00,TV
|
|
15
|
+
124,01/02/2025,53.00,TV
|
|
16
|
+
124,01/03/2025,53.00,TV
|
|
17
|
+
125,01/01/2025,89.75,Mobile
|
|
18
|
+
125,01/02/2025,89.75,Mobile
|
|
19
|
+
125,01/03/2025,89.75,Mobile
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
flows:
|
|
2
|
+
understand_bill:
|
|
3
|
+
if: slots.user_authenticated # the user has to be authenticated in order to access this flow
|
|
4
|
+
description: This flow allows users to check their bill and billing related details.
|
|
5
|
+
steps:
|
|
6
|
+
- collect: bill_month
|
|
7
|
+
ask_before_filling: False
|
|
8
|
+
- action: action_verify_bill_by_date
|
|
9
|
+
- collect: breakdown_cost
|
|
10
|
+
description: |
|
|
11
|
+
This slot is boolean variable. it holds one of two possible values: true or false
|
|
12
|
+
(breakdown_cost = True, breakdown_cost = False), and if the user says "yup," it should be considered True, while "nope" should be considered False
|
|
13
|
+
(e.g., breakdown_cost = True for "yup", breakdown_cost = False for "nope").
|
|
14
|
+
ask_before_filling: true # This can be useful some LLMs will prefill bool slots here we make it mandatory for the bot to ask the user
|
|
15
|
+
next:
|
|
16
|
+
- if: slots.breakdown_cost # it has to be 'slots' with an 's', this means breakdown_cost is True
|
|
17
|
+
then:
|
|
18
|
+
- action: action_recap_bill
|
|
19
|
+
- collect: more_bill_details
|
|
20
|
+
next:
|
|
21
|
+
- if: slots.more_bill_details
|
|
22
|
+
then:
|
|
23
|
+
- action: utter_provide_bill_sources
|
|
24
|
+
next: "END"
|
|
25
|
+
- else: issue_solved_section # this will call "issue_solved_section" section
|
|
26
|
+
|
|
27
|
+
- else: issue_solved_section
|
|
28
|
+
|
|
29
|
+
- id: issue_solved_section # This will help avoid re-writting the same piece of code, this way it can be re-used
|
|
30
|
+
collect: issue_solved
|
|
31
|
+
description: |
|
|
32
|
+
This slot is boolean variable. it holds one of two possible values: true or false
|
|
33
|
+
(issue_solved = True, issue_solved = False), and if the user says "yup" it should be considered True, while "nope" should be considered False
|
|
34
|
+
(e.g., issue_solved = True for "yup", issue_solved = False for "nope").
|
|
35
|
+
ask_before_filling: true
|
|
36
|
+
next:
|
|
37
|
+
- if: not slots.issue_solved # this means issue_solved is False
|
|
38
|
+
then:
|
|
39
|
+
- action: utter_connect_to_human
|
|
40
|
+
- action: action_sleep_few_sec
|
|
41
|
+
- link: human_handoff
|
|
42
|
+
|
|
43
|
+
- else:
|
|
44
|
+
- action: utter_end_conversation
|
|
45
|
+
next: "END"
|