rasa-pro 3.14.0.dev7__py3-none-any.whl → 3.14.0.dev9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/agents/agent_manager.py +1 -1
- rasa/agents/constants.py +2 -2
- rasa/agents/protocol/a2a/a2a_agent.py +385 -227
- rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
- rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
- rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
- rasa/agents/schemas/agent_output.py +1 -1
- rasa/agents/utils.py +90 -1
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +92 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +31 -0
- rasa/builder/copilot/copilot.py +450 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +500 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +210 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/constants.py +9 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +206 -0
- rasa/builder/guardrails/models.py +231 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +328 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +282 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +243 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +458 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1345 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +244 -0
- rasa/builder/training_service.py +194 -0
- rasa/builder/validation_service.py +97 -0
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +9 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +8 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/finance/README.md +25 -0
- rasa/cli/project_templates/finance/actions/__init__.py +46 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
- rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
- rasa/cli/project_templates/finance/actions/actions.md +15 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
- rasa/cli/project_templates/finance/actions/database.py +277 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
- rasa/cli/project_templates/finance/config.yml +23 -0
- rasa/cli/project_templates/finance/credentials.yml +32 -0
- rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
- rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
- rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
- rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
- rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
- rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
- rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
- rasa/cli/project_templates/finance/csvs/users.csv +4 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
- rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/data/data.md +11 -0
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
- rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
- rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
- rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
- rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
- rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
- rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
- rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
- rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
- rasa/cli/project_templates/finance/domain/domain.md +10 -0
- rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
- rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
- rasa/cli/project_templates/finance/endpoints.yml +66 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +5 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +14 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/scaffold.py +46 -2
- rasa/core/actions/action.py +0 -1
- rasa/core/available_agents.py +2 -0
- rasa/core/available_endpoints.py +17 -2
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +2 -22
- rasa/core/channels/inspector/README.md +26 -14
- rasa/core/channels/inspector/dist/assets/{arc-cce7e0a8.js → arc-edef10dd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.js → index-3862675e-ecdce073.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +16 -42
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
- rasa/core/channels/inspector/src/types.ts +32 -7
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +59 -57
- rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
- rasa/core/channels/voice_stream/asr/azure.py +6 -3
- rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +3 -0
- rasa/core/channels/voice_stream/browser_audio.py +53 -3
- rasa/core/channels/voice_stream/genesys.py +2 -1
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
- rasa/core/channels/voice_stream/voice_channel.py +66 -3
- rasa/core/constants.py +6 -0
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
- rasa/core/policies/enterprise_search_policy.py +4 -7
- rasa/core/policies/flows/flow_executor.py +14 -5
- rasa/core/policies/ted_policy.py +7 -5
- rasa/core/processor.py +32 -0
- rasa/core/redis_connection_factory.py +411 -0
- rasa/core/run.py +13 -3
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -1
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
- rasa/dialogue_understanding/processor/command_processor.py +35 -0
- rasa/engine/graph.py +5 -1
- rasa/engine/recipes/default_components.py +78 -10
- rasa/engine/recipes/default_recipe.py +41 -1
- rasa/engine/storage/local_model_storage.py +83 -3
- rasa/graph_components/validators/default_recipe_validator.py +153 -135
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +20 -15
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +1 -1
- rasa/model_training.py +14 -0
- rasa/nlu/classifiers/diet_classifier.py +22 -6
- rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
- rasa/nlu/extractors/extractor.py +1 -2
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +74 -0
- rasa/shared/agents/auth/agent_auth_manager.py +86 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
- rasa/shared/agents/auth/constants.py +11 -0
- rasa/shared/agents/auth/types.py +11 -0
- rasa/shared/core/constants.py +1 -0
- rasa/shared/core/domain.py +58 -11
- rasa/shared/core/events.py +2 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +6 -0
- rasa/shared/core/flows/steps/call.py +15 -12
- rasa/shared/core/flows/validation.py +238 -44
- rasa/shared/core/flows/yaml_flows_io.py +15 -6
- rasa/shared/core/slots.py +4 -0
- rasa/shared/exceptions.py +12 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/_utils.py +60 -44
- rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
- rasa/shared/providers/llm/_base_litellm_client.py +2 -2
- rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
- rasa/shared/providers/llm/llm_response.py +4 -4
- rasa/shared/utils/common.py +24 -0
- rasa/shared/utils/llm.py +2 -1
- rasa/shared/utils/mcp/server_connection.py +84 -23
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/studio/upload.py +16 -47
- rasa/telemetry.py +97 -23
- rasa/tracing/config.py +38 -12
- rasa/tracing/instrumentation/attribute_extractors.py +5 -1
- rasa/tracing/instrumentation/instrumentation.py +85 -8
- rasa/utils/common.py +1 -1
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/tensorflow/__init__.py +29 -0
- rasa/utils/tensorflow/callback.py +1 -1
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +11 -4
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +41 -6
- rasa/utils/tensorflow/rasa_layers.py +6 -4
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +68 -38
- rasa/validator.py +18 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dev9.dist-info/METADATA +199 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/RECORD +466 -156
- rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
- rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev9.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,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,66 @@
|
|
|
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_completion_tokens: 256
|
|
63
|
+
- id: openai-embeddings
|
|
64
|
+
models:
|
|
65
|
+
- provider: openai
|
|
66
|
+
model: text-embedding-3-large
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
The following is a conversation with an AI agent.
|
|
2
|
+
The agent 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 agent'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:
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Telecom Customer Service Agent Template
|
|
2
|
+
|
|
3
|
+
A lightweight telecommunications customer service agent template that handles network support, billing inquiries, and technical troubleshooting.
|
|
4
|
+
|
|
5
|
+
## 🚀 What's Included
|
|
6
|
+
|
|
7
|
+
This template provides a complete telecom customer service assistant with:
|
|
8
|
+
- **Network Diagnostics**: Automated troubleshooting and service status checking
|
|
9
|
+
- **Billing Support**: Account management, bill inquiries, and payment assistance
|
|
10
|
+
- **Technical Support**: Issue resolution, service guidance, and escalation management
|
|
11
|
+
- **Knowledge Base**: Technical documentation and common issue solutions
|
|
12
|
+
- **Customer Management**: Account verification and personalized service interactions
|
|
13
|
+
|
|
14
|
+
## 📁 Directory Structure
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
├── actions/ # Custom Python logic for telecom operations
|
|
18
|
+
├── data/ # Telecom conversation flows and training data
|
|
19
|
+
├── domain/ # Telecom agent configuration
|
|
20
|
+
├── csvs/ # Mock database for testing
|
|
21
|
+
├── docs/ # Basic knowledge base and documentation
|
|
22
|
+
├── tests/ # End-to-end test cases for telecom scenarios
|
|
23
|
+
├── prompts/ # LLM prompts for enhanced technical responses
|
|
24
|
+
└── config.yml # Training pipeline configuration
|
|
25
|
+
```
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## 📂 `actions/` – The Agent's Toolkit
|
|
2
|
+
|
|
3
|
+
This folder contains Python files that define custom telecom actions your agent can perform. Actions handle technical diagnostics, service management, and customer support operations specific to telecommunications.
|
|
4
|
+
|
|
5
|
+
**What you'll find:**
|
|
6
|
+
- **billing/**: Billing-related actions (bill inquiries, payment processing, account management)
|
|
7
|
+
- **network/**: Network service actions (diagnostics, data retrieval, service status checks)
|
|
8
|
+
- **general/**: General support actions (human handoff, session management)
|
|
9
|
+
|
|
10
|
+
**Edit Python files in this folder** to add new telecom features, integrate with network management systems, or extend customer service capabilities.
|
|
11
|
+
|
|
12
|
+
Learn more about custom actions in the [Rasa documentation](https://rasa.com/docs/pro/build/custom-actions).
|
|
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,29 @@
|
|
|
1
|
+
# Rasa Agent Configuration
|
|
2
|
+
# This file controls your agent's language, message processing pipeline, and conversation policies.
|
|
3
|
+
# For full documentation, see: https://rasa.com/docs/pro/build/configuring-assistant
|
|
4
|
+
recipe: default.v1
|
|
5
|
+
language: en
|
|
6
|
+
|
|
7
|
+
# The agent project unique identifier
|
|
8
|
+
# This default value must be replaced with a unique agent name within your deployment
|
|
9
|
+
assistant_id: placeholder_default
|
|
10
|
+
|
|
11
|
+
pipeline:
|
|
12
|
+
- name: SearchReadyLLMCommandGenerator
|
|
13
|
+
llm:
|
|
14
|
+
model_group: openai-gpt-4o
|
|
15
|
+
flow_retrieval:
|
|
16
|
+
active: false
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
policies:
|
|
20
|
+
- name: FlowPolicy
|
|
21
|
+
- name: EnterpriseSearchPolicy
|
|
22
|
+
vector_store:
|
|
23
|
+
type: "faiss"
|
|
24
|
+
source: "./docs"
|
|
25
|
+
llm:
|
|
26
|
+
model_group: openai-gpt-4o
|
|
27
|
+
embeddings:
|
|
28
|
+
model_group: openai-embeddings
|
|
29
|
+
check_relevancy: true
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# This file contains the credentials for the voice & chat platforms
|
|
2
|
+
# which your bot is using.
|
|
3
|
+
# https://rasa.com/docs/rasa-pro/connectors/messaging-and-voice-channels/
|
|
4
|
+
|
|
5
|
+
rest:
|
|
6
|
+
# # you don't need to provide anything here - this channel doesn't
|
|
7
|
+
# # require any credentials
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
#facebook:
|
|
11
|
+
# verify: "<verify>"
|
|
12
|
+
# secret: "<your secret>"
|
|
13
|
+
# page-access-token: "<your page access token>"
|
|
14
|
+
|
|
15
|
+
#slack:
|
|
16
|
+
# slack_token: "<your slack token>"
|
|
17
|
+
# slack_channel: "<the slack channel>"
|
|
18
|
+
# slack_signing_secret: "<your slack signing secret>"
|
|
19
|
+
|
|
20
|
+
#socketio:
|
|
21
|
+
# user_message_evt: <event name for user message>
|
|
22
|
+
# bot_message_evt: <event name for bot messages>
|
|
23
|
+
# session_persistence: <true/false>
|
|
24
|
+
|
|
25
|
+
#mattermost:
|
|
26
|
+
# url: "https://<mattermost instance>/api/v4"
|
|
27
|
+
# token: "<bot token>"
|
|
28
|
+
# webhook_url: "<callback URL>"
|
|
29
|
+
|
|
30
|
+
# This entry is needed if you are using Rasa Enterprise. The entry represents credentials
|
|
31
|
+
# for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers.
|
|
32
|
+
rasa:
|
|
33
|
+
url: "http://localhost:5002/api"
|
|
@@ -0,0 +1,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
|