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,277 @@
|
|
|
1
|
+
import csv
|
|
2
|
+
import logging
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Database:
|
|
9
|
+
def __init__(self, csv_path: Optional[Path] = None) -> None:
|
|
10
|
+
"""Initialize the database with CSV file paths."""
|
|
11
|
+
self.project_root_path = Path(__file__).resolve().parent.parent
|
|
12
|
+
self.csv_path = csv_path or self.project_root_path / "csvs"
|
|
13
|
+
self.logger = self.setup_logger()
|
|
14
|
+
|
|
15
|
+
def setup_logger(self) -> logging.Logger:
|
|
16
|
+
"""Set up logging configuration."""
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
logger.setLevel(logging.DEBUG)
|
|
19
|
+
|
|
20
|
+
formatter = logging.Formatter(
|
|
21
|
+
"%(asctime)s %(levelname)8s %(name)s - %(message)s"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
console_handler = logging.StreamHandler()
|
|
25
|
+
console_handler.setLevel(logging.DEBUG)
|
|
26
|
+
console_handler.setFormatter(formatter)
|
|
27
|
+
logger.addHandler(console_handler)
|
|
28
|
+
|
|
29
|
+
return logger
|
|
30
|
+
|
|
31
|
+
def _read_csv(self, filename: str) -> List[Dict[str, Any]]:
|
|
32
|
+
"""Read CSV file and return list of dictionaries."""
|
|
33
|
+
try:
|
|
34
|
+
with open(self.csv_path / filename, "r", newline="") as csvfile:
|
|
35
|
+
reader = csv.DictReader(csvfile)
|
|
36
|
+
return list(reader)
|
|
37
|
+
except Exception as e:
|
|
38
|
+
self.logger.error(f"Error reading CSV file {filename}: {e}")
|
|
39
|
+
return []
|
|
40
|
+
|
|
41
|
+
def _write_csv(self, filename: str, data: List[Dict[str, Any]]) -> bool:
|
|
42
|
+
"""Write list of dictionaries to CSV file."""
|
|
43
|
+
try:
|
|
44
|
+
if not data:
|
|
45
|
+
return True
|
|
46
|
+
|
|
47
|
+
with open(self.csv_path / filename, "w", newline="") as csvfile:
|
|
48
|
+
writer = csv.DictWriter(csvfile, fieldnames=data[0].keys())
|
|
49
|
+
writer.writeheader()
|
|
50
|
+
writer.writerows(data)
|
|
51
|
+
return True
|
|
52
|
+
except Exception as e:
|
|
53
|
+
self.logger.error(f"Error writing CSV file {filename}: {e}")
|
|
54
|
+
return False
|
|
55
|
+
|
|
56
|
+
def get_user_by_name(self, username: str) -> Optional[Dict[str, Any]]:
|
|
57
|
+
"""Get user information by username."""
|
|
58
|
+
try:
|
|
59
|
+
users = self._read_csv("users.csv")
|
|
60
|
+
for user in users:
|
|
61
|
+
if user["name"] == username:
|
|
62
|
+
return user
|
|
63
|
+
return None
|
|
64
|
+
except Exception as e:
|
|
65
|
+
self.logger.error(f"Error getting user by name: {e}")
|
|
66
|
+
return None
|
|
67
|
+
|
|
68
|
+
def get_user_by_id(self, user_id: int) -> Optional[Dict[str, Any]]:
|
|
69
|
+
"""Get user information by user_id."""
|
|
70
|
+
try:
|
|
71
|
+
users = self._read_csv("users.csv")
|
|
72
|
+
for user in users:
|
|
73
|
+
if int(user["id"]) == user_id:
|
|
74
|
+
return user
|
|
75
|
+
return None
|
|
76
|
+
except Exception as e:
|
|
77
|
+
self.logger.error(f"Error getting user by id: {e}")
|
|
78
|
+
return None
|
|
79
|
+
|
|
80
|
+
def get_account_by_user_and_number(
|
|
81
|
+
self, user_id: int, account_number: str
|
|
82
|
+
) -> Optional[Dict[str, Any]]:
|
|
83
|
+
"""Get account information by user_id and account number."""
|
|
84
|
+
try:
|
|
85
|
+
accounts = self._read_csv("accounts.csv")
|
|
86
|
+
for account in accounts:
|
|
87
|
+
if (
|
|
88
|
+
int(account["user_id"]) == user_id
|
|
89
|
+
and account["number"] == account_number
|
|
90
|
+
):
|
|
91
|
+
return account
|
|
92
|
+
return None
|
|
93
|
+
except Exception as e:
|
|
94
|
+
self.logger.error(f"Error getting account: {e}")
|
|
95
|
+
return None
|
|
96
|
+
|
|
97
|
+
def get_accounts_by_user(self, user_id: int) -> List[Dict[str, Any]]:
|
|
98
|
+
"""Get all accounts for a user."""
|
|
99
|
+
try:
|
|
100
|
+
accounts = self._read_csv("accounts.csv")
|
|
101
|
+
return [
|
|
102
|
+
account for account in accounts if int(account["user_id"]) == user_id
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
except Exception as e:
|
|
106
|
+
self.logger.error(f"Error getting accounts by user: {e}")
|
|
107
|
+
return []
|
|
108
|
+
|
|
109
|
+
def get_payees_by_user(self, user_id: int) -> List[Dict[str, Any]]:
|
|
110
|
+
"""Get all payees for a user."""
|
|
111
|
+
try:
|
|
112
|
+
payees = self._read_csv("payees.csv")
|
|
113
|
+
return [payee for payee in payees if int(payee["user_id"]) == user_id]
|
|
114
|
+
except Exception as e:
|
|
115
|
+
self.logger.error(f"Error getting payees by user: {e}")
|
|
116
|
+
return []
|
|
117
|
+
|
|
118
|
+
def get_payee_by_name_and_user(
|
|
119
|
+
self, payee_name: str, user_id: int
|
|
120
|
+
) -> Optional[Dict[str, Any]]:
|
|
121
|
+
"""Get payee information by name and user_id."""
|
|
122
|
+
try:
|
|
123
|
+
payees = self._read_csv("payees.csv")
|
|
124
|
+
for payee in payees:
|
|
125
|
+
if payee["name"] == payee_name and int(payee["user_id"]) == user_id:
|
|
126
|
+
return payee
|
|
127
|
+
return None
|
|
128
|
+
except Exception as e:
|
|
129
|
+
self.logger.error(f"Error getting payee by name and user: {e}")
|
|
130
|
+
return None
|
|
131
|
+
|
|
132
|
+
def get_cards_by_user(self, user_id: int) -> List[Dict[str, Any]]:
|
|
133
|
+
"""Get all cards for a user."""
|
|
134
|
+
try:
|
|
135
|
+
cards = self._read_csv("cards.csv")
|
|
136
|
+
return [card for card in cards if int(card["user_id"]) == user_id]
|
|
137
|
+
except Exception as e:
|
|
138
|
+
self.logger.error(f"Error getting cards by user: {e}")
|
|
139
|
+
return []
|
|
140
|
+
|
|
141
|
+
def get_card_by_number(self, card_number: str) -> Optional[Dict[str, Any]]:
|
|
142
|
+
"""Get card information by card number."""
|
|
143
|
+
try:
|
|
144
|
+
cards = self._read_csv("cards.csv")
|
|
145
|
+
for card in cards:
|
|
146
|
+
if card["number"] == card_number:
|
|
147
|
+
return card
|
|
148
|
+
return None
|
|
149
|
+
except Exception as e:
|
|
150
|
+
self.logger.error(f"Error getting card by number: {e}")
|
|
151
|
+
return None
|
|
152
|
+
|
|
153
|
+
def update_card_status(self, card_number: str, status: str) -> bool:
|
|
154
|
+
"""Update card status."""
|
|
155
|
+
try:
|
|
156
|
+
cards = self._read_csv("cards.csv")
|
|
157
|
+
for card in cards:
|
|
158
|
+
if card["number"] == card_number:
|
|
159
|
+
card["status"] = status
|
|
160
|
+
break
|
|
161
|
+
return self._write_csv("cards.csv", cards)
|
|
162
|
+
except Exception as e:
|
|
163
|
+
self.logger.error(f"Error updating card status: {e}")
|
|
164
|
+
return False
|
|
165
|
+
|
|
166
|
+
def add_payee(
|
|
167
|
+
self,
|
|
168
|
+
user_id: int,
|
|
169
|
+
name: str,
|
|
170
|
+
sort_code: str,
|
|
171
|
+
account_number: str,
|
|
172
|
+
payee_type: str,
|
|
173
|
+
reference: str = "",
|
|
174
|
+
) -> bool:
|
|
175
|
+
"""Add a new payee."""
|
|
176
|
+
try:
|
|
177
|
+
payees = self._read_csv("payees.csv")
|
|
178
|
+
|
|
179
|
+
# Get the next ID
|
|
180
|
+
next_id = 1
|
|
181
|
+
if payees:
|
|
182
|
+
next_id = max(int(payee["id"]) for payee in payees) + 1
|
|
183
|
+
|
|
184
|
+
# Create new payee record
|
|
185
|
+
new_payee = {
|
|
186
|
+
"id": str(next_id),
|
|
187
|
+
"user_id": str(user_id),
|
|
188
|
+
"name": name,
|
|
189
|
+
"sort_code": sort_code,
|
|
190
|
+
"account_number": account_number,
|
|
191
|
+
"type": payee_type,
|
|
192
|
+
"reference": reference,
|
|
193
|
+
"added_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
# Add to list and save
|
|
197
|
+
payees.append(new_payee)
|
|
198
|
+
return self._write_csv("payees.csv", payees)
|
|
199
|
+
except Exception as e:
|
|
200
|
+
self.logger.error(f"Error adding payee: {e}")
|
|
201
|
+
return False
|
|
202
|
+
|
|
203
|
+
def remove_payee(self, payee_name: str, user_id: int) -> bool:
|
|
204
|
+
"""Remove a payee."""
|
|
205
|
+
try:
|
|
206
|
+
payees = self._read_csv("payees.csv")
|
|
207
|
+
payees = [
|
|
208
|
+
payee
|
|
209
|
+
for payee in payees
|
|
210
|
+
if not (
|
|
211
|
+
payee["name"] == payee_name and int(payee["user_id"]) == user_id
|
|
212
|
+
)
|
|
213
|
+
]
|
|
214
|
+
return self._write_csv("payees.csv", payees)
|
|
215
|
+
except Exception as e:
|
|
216
|
+
self.logger.error(f"Error removing payee: {e}")
|
|
217
|
+
return False
|
|
218
|
+
|
|
219
|
+
def check_sufficient_funds(
|
|
220
|
+
self, user_id: int, account_number: str, amount: float
|
|
221
|
+
) -> bool:
|
|
222
|
+
"""Check if account has sufficient funds."""
|
|
223
|
+
try:
|
|
224
|
+
account = self.get_account_by_user_and_number(user_id, account_number)
|
|
225
|
+
if not account:
|
|
226
|
+
return False
|
|
227
|
+
return float(account["balance"]) >= amount
|
|
228
|
+
except Exception as e:
|
|
229
|
+
self.logger.error(f"Error checking sufficient funds: {e}")
|
|
230
|
+
return False
|
|
231
|
+
|
|
232
|
+
def get_branches(self) -> List[Dict[str, Any]]:
|
|
233
|
+
"""Get all branches."""
|
|
234
|
+
try:
|
|
235
|
+
return self._read_csv("branches.csv")
|
|
236
|
+
except Exception as e:
|
|
237
|
+
self.logger.error(f"Error getting branches: {e}")
|
|
238
|
+
return []
|
|
239
|
+
|
|
240
|
+
def get_advisors_by_branch(self, branch_id: int) -> List[Dict[str, Any]]:
|
|
241
|
+
"""Get all advisors for a branch."""
|
|
242
|
+
try:
|
|
243
|
+
advisors = self._read_csv("advisors.csv")
|
|
244
|
+
return [
|
|
245
|
+
advisor
|
|
246
|
+
for advisor in advisors
|
|
247
|
+
if int(advisor["branch_id"]) == branch_id
|
|
248
|
+
]
|
|
249
|
+
except Exception as e:
|
|
250
|
+
self.logger.error(f"Error getting advisors by branch: {e}")
|
|
251
|
+
return []
|
|
252
|
+
|
|
253
|
+
def get_appointments_by_advisor(self, advisor_id: int) -> List[Dict[str, Any]]:
|
|
254
|
+
"""Get all appointments for an advisor."""
|
|
255
|
+
try:
|
|
256
|
+
appointments = self._read_csv("appointments.csv")
|
|
257
|
+
return [
|
|
258
|
+
appointment
|
|
259
|
+
for appointment in appointments
|
|
260
|
+
if int(appointment["advisor_id"]) == advisor_id
|
|
261
|
+
]
|
|
262
|
+
except Exception as e:
|
|
263
|
+
self.logger.error(f"Error getting appointments by advisor: {e}")
|
|
264
|
+
return []
|
|
265
|
+
|
|
266
|
+
def __enter__(self) -> "Database":
|
|
267
|
+
"""Enter the runtime context related to this object."""
|
|
268
|
+
return self
|
|
269
|
+
|
|
270
|
+
def __exit__(
|
|
271
|
+
self,
|
|
272
|
+
exc_type: Optional[type],
|
|
273
|
+
exc_value: Optional[BaseException],
|
|
274
|
+
traceback: Optional[Any],
|
|
275
|
+
) -> None:
|
|
276
|
+
"""Exit the runtime context related to this object."""
|
|
277
|
+
self.logger.info("Database connection closed")
|
|
File without changes
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.database import Database
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionAddPayee(Action):
|
|
11
|
+
def name(self) -> Text:
|
|
12
|
+
return "action_add_payee"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self,
|
|
16
|
+
dispatcher: CollectingDispatcher,
|
|
17
|
+
tracker: Tracker,
|
|
18
|
+
domain: Dict[Text, Any],
|
|
19
|
+
) -> List[Dict[Text, Any]]:
|
|
20
|
+
name = tracker.get_slot("name")
|
|
21
|
+
payee_name = tracker.get_slot("payee_name")
|
|
22
|
+
account_number = tracker.get_slot("account_number")
|
|
23
|
+
sort_code = tracker.get_slot("sort_code")
|
|
24
|
+
payee_type = tracker.get_slot("payee_type")
|
|
25
|
+
reference = tracker.get_slot("reference") or ""
|
|
26
|
+
|
|
27
|
+
db = Database()
|
|
28
|
+
|
|
29
|
+
# Get user information
|
|
30
|
+
user = db.get_user_by_name(name)
|
|
31
|
+
if not user:
|
|
32
|
+
dispatcher.utter_message(text="User not found.")
|
|
33
|
+
return []
|
|
34
|
+
|
|
35
|
+
# Add the payee
|
|
36
|
+
success = db.add_payee(
|
|
37
|
+
int(user["id"]),
|
|
38
|
+
payee_name,
|
|
39
|
+
sort_code,
|
|
40
|
+
account_number,
|
|
41
|
+
payee_type,
|
|
42
|
+
reference,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
if success:
|
|
46
|
+
dispatcher.utter_message(
|
|
47
|
+
text=f"Payee {payee_name} has been added successfully."
|
|
48
|
+
)
|
|
49
|
+
return [SlotSet("payee_added", True)]
|
|
50
|
+
else:
|
|
51
|
+
dispatcher.utter_message(text="Failed to add payee. Please try again.")
|
|
52
|
+
return [SlotSet("payee_added", False)]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
5
|
+
|
|
6
|
+
from actions.database import Database
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ActionAskAccountFrom(Action):
|
|
10
|
+
def name(self) -> Text:
|
|
11
|
+
return "action_ask_account_from"
|
|
12
|
+
|
|
13
|
+
def run(
|
|
14
|
+
self,
|
|
15
|
+
dispatcher: CollectingDispatcher,
|
|
16
|
+
tracker: Tracker,
|
|
17
|
+
domain: Dict[Text, Any],
|
|
18
|
+
) -> List[Dict[Text, Any]]:
|
|
19
|
+
name = tracker.get_slot("name")
|
|
20
|
+
|
|
21
|
+
db = Database()
|
|
22
|
+
|
|
23
|
+
# Get user information
|
|
24
|
+
user = db.get_user_by_name(name)
|
|
25
|
+
if not user:
|
|
26
|
+
dispatcher.utter_message(text="User not found.")
|
|
27
|
+
return []
|
|
28
|
+
|
|
29
|
+
# Get all accounts for the user
|
|
30
|
+
user_id = int(user["id"])
|
|
31
|
+
accounts = db.get_accounts_by_user(user_id)
|
|
32
|
+
print(f"DEBUG: Accounts found: {accounts}")
|
|
33
|
+
if not accounts:
|
|
34
|
+
dispatcher.utter_message(text="No accounts found for this user.")
|
|
35
|
+
return []
|
|
36
|
+
|
|
37
|
+
buttons = [
|
|
38
|
+
{
|
|
39
|
+
"content_type": "text",
|
|
40
|
+
"title": (
|
|
41
|
+
f"{account['type'].title()} (Balance: "
|
|
42
|
+
f"${float(account['balance']):.2f})"
|
|
43
|
+
),
|
|
44
|
+
"payload": str(account["number"]),
|
|
45
|
+
}
|
|
46
|
+
for account in accounts
|
|
47
|
+
]
|
|
48
|
+
message = "Which account would you like to transfer money from?"
|
|
49
|
+
dispatcher.utter_message(text=message, buttons=buttons)
|
|
50
|
+
|
|
51
|
+
return []
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.database import Database
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionCheckPayeeExistence(Action):
|
|
11
|
+
def name(self) -> Text:
|
|
12
|
+
return "action_check_payee_existence"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self,
|
|
16
|
+
dispatcher: CollectingDispatcher,
|
|
17
|
+
tracker: Tracker,
|
|
18
|
+
domain: Dict[Text, Any],
|
|
19
|
+
) -> List[Dict[Text, Any]]:
|
|
20
|
+
name = tracker.get_slot("name")
|
|
21
|
+
payee_name = tracker.get_slot("payee_name")
|
|
22
|
+
|
|
23
|
+
db = Database()
|
|
24
|
+
|
|
25
|
+
# Get user information
|
|
26
|
+
user = db.get_user_by_name(name)
|
|
27
|
+
if not user:
|
|
28
|
+
dispatcher.utter_message(text="User not found.")
|
|
29
|
+
return []
|
|
30
|
+
|
|
31
|
+
# Check if payee exists
|
|
32
|
+
payee = db.get_payee_by_name_and_user(payee_name, int(user["id"]))
|
|
33
|
+
|
|
34
|
+
if payee:
|
|
35
|
+
return [SlotSet("payee_exists", True)]
|
|
36
|
+
|
|
37
|
+
dispatcher.utter_message(
|
|
38
|
+
text=f"{payee_name} is not an authorised payee. Let's add them!"
|
|
39
|
+
)
|
|
40
|
+
return [SlotSet("payee_exists", False)]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.database import Database
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionCheckSufficientFunds(Action):
|
|
11
|
+
def name(self) -> Text:
|
|
12
|
+
return "action_check_sufficient_funds"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self,
|
|
16
|
+
dispatcher: CollectingDispatcher,
|
|
17
|
+
tracker: Tracker,
|
|
18
|
+
domain: Dict[Text, Any],
|
|
19
|
+
) -> List[Dict[Text, Any]]:
|
|
20
|
+
name = tracker.get_slot("name")
|
|
21
|
+
account_from = tracker.get_slot("account_from")
|
|
22
|
+
amount = float(tracker.get_slot("amount"))
|
|
23
|
+
|
|
24
|
+
db = Database()
|
|
25
|
+
|
|
26
|
+
# Get user information
|
|
27
|
+
user = db.get_user_by_name(name)
|
|
28
|
+
if not user:
|
|
29
|
+
dispatcher.utter_message(text="User not found.")
|
|
30
|
+
return []
|
|
31
|
+
|
|
32
|
+
# Check if user has sufficient funds
|
|
33
|
+
has_sufficient_funds = db.check_sufficient_funds(
|
|
34
|
+
int(user["id"]), account_from, amount
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if has_sufficient_funds:
|
|
38
|
+
return [SlotSet("sufficient_funds", True)]
|
|
39
|
+
else:
|
|
40
|
+
return [SlotSet("sufficient_funds", False)]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
5
|
+
|
|
6
|
+
from actions.database import Database
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ActionListPayees(Action):
|
|
10
|
+
def name(self) -> Text:
|
|
11
|
+
return "action_list_payees"
|
|
12
|
+
|
|
13
|
+
def run(
|
|
14
|
+
self,
|
|
15
|
+
dispatcher: CollectingDispatcher,
|
|
16
|
+
tracker: Tracker,
|
|
17
|
+
domain: Dict[Text, Any],
|
|
18
|
+
) -> List[Dict[Text, Any]]:
|
|
19
|
+
name = tracker.get_slot("name")
|
|
20
|
+
|
|
21
|
+
db = Database()
|
|
22
|
+
|
|
23
|
+
# Get user information
|
|
24
|
+
user = db.get_user_by_name(name)
|
|
25
|
+
if not user:
|
|
26
|
+
dispatcher.utter_message(text="User not found.")
|
|
27
|
+
return []
|
|
28
|
+
|
|
29
|
+
# Get payees for the user
|
|
30
|
+
user_id = int(user["id"])
|
|
31
|
+
payees = db.get_payees_by_user(user_id)
|
|
32
|
+
|
|
33
|
+
if not payees:
|
|
34
|
+
dispatcher.utter_message(text="You have no payees set up.")
|
|
35
|
+
return []
|
|
36
|
+
|
|
37
|
+
payee_names = [payee["name"] for payee in payees]
|
|
38
|
+
if len(payee_names) > 1:
|
|
39
|
+
payees_list = ", ".join(payee_names[:-1]) + " and " + payee_names[-1]
|
|
40
|
+
else:
|
|
41
|
+
payees_list = payee_names[0]
|
|
42
|
+
|
|
43
|
+
message = f"You are authorised to transfer money to: {payees_list}"
|
|
44
|
+
dispatcher.utter_message(text=message)
|
|
45
|
+
|
|
46
|
+
return []
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ActionProcessImmediatePayment(Action):
|
|
9
|
+
def name(self) -> Text:
|
|
10
|
+
return "action_process_immediate_payment"
|
|
11
|
+
|
|
12
|
+
def run(
|
|
13
|
+
self,
|
|
14
|
+
dispatcher: CollectingDispatcher,
|
|
15
|
+
tracker: Tracker,
|
|
16
|
+
domain: Dict[Text, Any],
|
|
17
|
+
) -> List[Dict[Text, Any]]:
|
|
18
|
+
return [SlotSet("payment_processed", True)]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.database import Database
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionRemovePayee(Action):
|
|
11
|
+
def name(self) -> Text:
|
|
12
|
+
return "action_remove_payee"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self,
|
|
16
|
+
dispatcher: CollectingDispatcher,
|
|
17
|
+
tracker: Tracker,
|
|
18
|
+
domain: Dict[Text, Any],
|
|
19
|
+
) -> List[Dict[Text, Any]]:
|
|
20
|
+
name = tracker.get_slot("name")
|
|
21
|
+
payee_name = tracker.get_slot("payee_name")
|
|
22
|
+
|
|
23
|
+
db = Database()
|
|
24
|
+
|
|
25
|
+
# Get user information
|
|
26
|
+
user = db.get_user_by_name(name)
|
|
27
|
+
if not user:
|
|
28
|
+
dispatcher.utter_message(text="User not found.")
|
|
29
|
+
return []
|
|
30
|
+
|
|
31
|
+
# Check if payee exists
|
|
32
|
+
payee = db.get_payee_by_name_and_user(payee_name, int(user["id"]))
|
|
33
|
+
if not payee:
|
|
34
|
+
dispatcher.utter_message(
|
|
35
|
+
text=f"I'm sorry, but I couldn't find a payee named '{payee_name}'"
|
|
36
|
+
)
|
|
37
|
+
return [SlotSet("payee_removed", False)]
|
|
38
|
+
|
|
39
|
+
# Remove the payee
|
|
40
|
+
success = db.remove_payee(payee_name, int(user["id"]))
|
|
41
|
+
|
|
42
|
+
if success:
|
|
43
|
+
dispatcher.utter_message(
|
|
44
|
+
text=f"Payee {payee_name} has been removed successfully."
|
|
45
|
+
)
|
|
46
|
+
return [SlotSet("payee_removed", True)]
|
|
47
|
+
else:
|
|
48
|
+
dispatcher.utter_message(text="Failed to remove payee. Please try again.")
|
|
49
|
+
return [SlotSet("payee_removed", False)]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ActionSchedulePayment(Action):
|
|
9
|
+
def name(self) -> Text:
|
|
10
|
+
return "action_schedule_payment"
|
|
11
|
+
|
|
12
|
+
def run(
|
|
13
|
+
self,
|
|
14
|
+
dispatcher: CollectingDispatcher,
|
|
15
|
+
tracker: Tracker,
|
|
16
|
+
domain: Dict[Text, Any],
|
|
17
|
+
) -> List[Dict[Text, Any]]:
|
|
18
|
+
# TODO: Should this add the payment to a scheduled_payment table?
|
|
19
|
+
return [SlotSet("payment_scheduled", True)]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from typing import Any, Dict, List, Text
|
|
3
|
+
|
|
4
|
+
from rasa_sdk import Action, Tracker
|
|
5
|
+
from rasa_sdk.events import SlotSet
|
|
6
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ActionValidatePaymentDate(Action):
|
|
10
|
+
def name(self) -> Text:
|
|
11
|
+
return "action_validate_payment_date"
|
|
12
|
+
|
|
13
|
+
def is_future_date(self, payment_date_str: str, current_date_str: str) -> bool:
|
|
14
|
+
current_date = datetime.strptime(current_date_str, "%d/%m/%Y").date()
|
|
15
|
+
payment_date = datetime.strptime(payment_date_str, "%d/%m/%Y").date()
|
|
16
|
+
return payment_date > current_date
|
|
17
|
+
|
|
18
|
+
def run(
|
|
19
|
+
self,
|
|
20
|
+
dispatcher: CollectingDispatcher,
|
|
21
|
+
tracker: Tracker,
|
|
22
|
+
domain: Dict[Text, Any],
|
|
23
|
+
) -> List[Dict[Text, Any]]:
|
|
24
|
+
current_date = tracker.get_slot("current_date")
|
|
25
|
+
payment_date = tracker.get_slot("payment_date")
|
|
26
|
+
|
|
27
|
+
if self.is_future_date(payment_date, current_date):
|
|
28
|
+
return [
|
|
29
|
+
SlotSet("valid_payment_date", True),
|
|
30
|
+
SlotSet("future_payment_date", True),
|
|
31
|
+
]
|
|
32
|
+
else:
|
|
33
|
+
return [
|
|
34
|
+
SlotSet("valid_payment_date", True),
|
|
35
|
+
SlotSet("future_payment_date", False),
|
|
36
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
recipe: default.v1
|
|
2
|
+
language: en
|
|
3
|
+
assistant_id: placeholder_default
|
|
4
|
+
|
|
5
|
+
pipeline:
|
|
6
|
+
- name: SearchReadyLLMCommandGenerator
|
|
7
|
+
llm:
|
|
8
|
+
model_group: openai-gpt-4o
|
|
9
|
+
flow_retrieval:
|
|
10
|
+
active: false
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
policies:
|
|
14
|
+
- name: FlowPolicy
|
|
15
|
+
- name: EnterpriseSearchPolicy
|
|
16
|
+
vector_store:
|
|
17
|
+
type: "faiss"
|
|
18
|
+
source: "./docs"
|
|
19
|
+
llm:
|
|
20
|
+
model_group: openai-gpt-4o
|
|
21
|
+
embeddings:
|
|
22
|
+
model_group: openai-embeddings
|
|
23
|
+
check_relevancy: true
|