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,500 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Any, Dict, List, Literal, Optional, Union
|
|
4
|
+
|
|
5
|
+
import structlog
|
|
6
|
+
from openai.types.chat.chat_completion_chunk import ChatCompletionChunk
|
|
7
|
+
from pydantic import BaseModel, Field, field_serializer, model_validator
|
|
8
|
+
from typing_extensions import Annotated
|
|
9
|
+
|
|
10
|
+
from rasa.builder.copilot.constants import (
|
|
11
|
+
ROLE_ASSISTANT,
|
|
12
|
+
ROLE_COPILOT,
|
|
13
|
+
ROLE_COPILOT_INTERNAL,
|
|
14
|
+
ROLE_USER,
|
|
15
|
+
)
|
|
16
|
+
from rasa.builder.document_retrieval.models import Document
|
|
17
|
+
from rasa.builder.models import ServerSentEvent
|
|
18
|
+
from rasa.builder.shared.tracker_context import TrackerContext
|
|
19
|
+
|
|
20
|
+
structlogger = structlog.get_logger()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ResponseCompleteness(Enum):
|
|
24
|
+
"""Enum for response completeness levels."""
|
|
25
|
+
|
|
26
|
+
TOKEN = "token" # Streaming token/chunk
|
|
27
|
+
COMPLETE = "complete" # Complete response (e.g., templated responses)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ResponseCategory(Enum):
|
|
31
|
+
"""Enum for different categories of responses."""
|
|
32
|
+
|
|
33
|
+
# Copilot generated content
|
|
34
|
+
COPILOT = "copilot"
|
|
35
|
+
REFERENCE = "reference"
|
|
36
|
+
REFERENCE_ENTRY = "reference_entry"
|
|
37
|
+
# When Copilot detects a roleplay request / intent
|
|
38
|
+
ROLEPLAY_DETECTION = "roleplay_detection"
|
|
39
|
+
# When Copilot detects an out-of-scope request
|
|
40
|
+
OUT_OF_SCOPE_DETECTION = "out_of_scope_detection"
|
|
41
|
+
# When Copilot does not understand what caused the error
|
|
42
|
+
ERROR_FALLBACK = "error_fallback"
|
|
43
|
+
# When a policy violation is detected
|
|
44
|
+
GUARDRAILS_POLICY_VIOLATION = "guardrails_policy_violation"
|
|
45
|
+
# When Copilot access is blocked after repeated violations
|
|
46
|
+
GUARDRAILS_BLOCKED = "guardrails_blocked"
|
|
47
|
+
# When Copilot detects request for KB content
|
|
48
|
+
KNOWLEDGE_BASE_ACCESS_REQUESTED = "knowledge_base_access_requested"
|
|
49
|
+
# When Copilot analyzes error logs and provides suggestions
|
|
50
|
+
TRAINING_ERROR_LOG_ANALYSIS = "training_error_log_analysis"
|
|
51
|
+
E2E_TESTING_ERROR_LOG_ANALYSIS = "e2e_testing_error_log_analysis"
|
|
52
|
+
|
|
53
|
+
# Conversation history signature
|
|
54
|
+
SIGNATURE = "signature"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class BaseContent(BaseModel):
|
|
58
|
+
type: str
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class LinkContent(BaseContent):
|
|
62
|
+
type: Literal["link"]
|
|
63
|
+
url: str
|
|
64
|
+
label: str
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class ButtonContent(BaseContent):
|
|
68
|
+
type: Literal["button"]
|
|
69
|
+
payload: str
|
|
70
|
+
label: str
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class TextContent(BaseContent):
|
|
74
|
+
type: Literal["text"]
|
|
75
|
+
text: str
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class CodeContent(BaseContent):
|
|
79
|
+
type: Literal["code"]
|
|
80
|
+
text: str
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class FileContent(BaseContent):
|
|
84
|
+
type: Literal["file"]
|
|
85
|
+
file_path: str
|
|
86
|
+
file_content: str
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class LogContent(BaseContent):
|
|
90
|
+
type: Literal["log"]
|
|
91
|
+
content: str = Field(..., description="Logs, error messages, stack traces, etc.")
|
|
92
|
+
context: Optional[str] = Field(
|
|
93
|
+
None,
|
|
94
|
+
description=(
|
|
95
|
+
"Additional, optional context description for the logs "
|
|
96
|
+
"(e.g., 'training session', 'e2e testing run', 'deployment process')"
|
|
97
|
+
),
|
|
98
|
+
)
|
|
99
|
+
metadata: Dict[str, Any] = Field(
|
|
100
|
+
default_factory=dict,
|
|
101
|
+
description="Additional metadata about the log.",
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class EventContent(BaseModel):
|
|
106
|
+
type: Literal["event"]
|
|
107
|
+
event: str = Field(..., description="The event's type_name")
|
|
108
|
+
|
|
109
|
+
event_data: Dict[str, Any] = Field(
|
|
110
|
+
default_factory=dict, description="Contains event-specific data fields."
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
@model_validator(mode="before")
|
|
114
|
+
@classmethod
|
|
115
|
+
def _collect_event_data(cls, data: Dict[str, Any]) -> Dict[str, Any]:
|
|
116
|
+
generic = {"type", "event"}
|
|
117
|
+
data["event_data"] = {
|
|
118
|
+
key: data.pop(key) for key in list(data.keys()) if key not in generic
|
|
119
|
+
}
|
|
120
|
+
return data
|
|
121
|
+
|
|
122
|
+
class Config:
|
|
123
|
+
extra = "forbid"
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
ContentBlock = Annotated[
|
|
127
|
+
Union[
|
|
128
|
+
TextContent,
|
|
129
|
+
CodeContent,
|
|
130
|
+
FileContent,
|
|
131
|
+
LogContent,
|
|
132
|
+
EventContent,
|
|
133
|
+
LinkContent,
|
|
134
|
+
ButtonContent,
|
|
135
|
+
],
|
|
136
|
+
Field(
|
|
137
|
+
discriminator="type",
|
|
138
|
+
description=(
|
|
139
|
+
"The content of the message. "
|
|
140
|
+
"The content is expected to be a list of content blocks. "
|
|
141
|
+
"The content blocks are expected to be one of the following types: "
|
|
142
|
+
"text, link, code, or file."
|
|
143
|
+
),
|
|
144
|
+
),
|
|
145
|
+
]
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class CopilotChatMessage(BaseModel):
|
|
149
|
+
"""Model for a single chat messages between the user and the copilot."""
|
|
150
|
+
|
|
151
|
+
role: str = Field(
|
|
152
|
+
...,
|
|
153
|
+
pattern=f"^({ROLE_USER}|{ROLE_COPILOT}|{ROLE_COPILOT_INTERNAL})$",
|
|
154
|
+
description="The role of the message sender.",
|
|
155
|
+
)
|
|
156
|
+
content: List[ContentBlock]
|
|
157
|
+
response_category: Optional[ResponseCategory] = Field(
|
|
158
|
+
None,
|
|
159
|
+
description=(
|
|
160
|
+
"The category/source of this message. For user role messages, only `None` "
|
|
161
|
+
"or `GUARDRAILS_POLICY_VIOLATION` are allowed. For copilot role messages, "
|
|
162
|
+
"any category is permitted."
|
|
163
|
+
),
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
@model_validator(mode="after")
|
|
167
|
+
def validate_response_category_for_role(self) -> "CopilotChatMessage":
|
|
168
|
+
"""Validate value of response_category for the role of the message.
|
|
169
|
+
|
|
170
|
+
For 'user' role messages, only None or GUARDRAILS_POLICY_VIOLATION are allowed.
|
|
171
|
+
For 'copilot' role messages, any category is permitted.
|
|
172
|
+
For 'rasa_internal' role messages, any category is permitted.
|
|
173
|
+
"""
|
|
174
|
+
if (
|
|
175
|
+
self.role == ROLE_USER
|
|
176
|
+
and self.response_category is not None
|
|
177
|
+
and self.response_category != ResponseCategory.GUARDRAILS_POLICY_VIOLATION
|
|
178
|
+
):
|
|
179
|
+
message = (
|
|
180
|
+
f"User role messages can only have response_category of `None` or "
|
|
181
|
+
f"`{ResponseCategory.GUARDRAILS_POLICY_VIOLATION}`, "
|
|
182
|
+
f"got `{self.response_category}`."
|
|
183
|
+
)
|
|
184
|
+
structlogger.error(
|
|
185
|
+
"copilot_chat_message.validate_response_category_for_role"
|
|
186
|
+
".invalid_response_category",
|
|
187
|
+
event_info=message,
|
|
188
|
+
response_category=self.response_category,
|
|
189
|
+
role=self.role,
|
|
190
|
+
)
|
|
191
|
+
raise ValueError(message)
|
|
192
|
+
|
|
193
|
+
return self
|
|
194
|
+
|
|
195
|
+
@field_serializer("response_category", when_used="always")
|
|
196
|
+
def _serialize_response_category(
|
|
197
|
+
self, v: Optional[ResponseCategory]
|
|
198
|
+
) -> Optional[str]:
|
|
199
|
+
"""Serializing CopilotChatMessage, response_category should be a string."""
|
|
200
|
+
return None if v is None else v.value
|
|
201
|
+
|
|
202
|
+
def get_text_content(self) -> str:
|
|
203
|
+
"""Concatenate all 'text' content blocks into a single string."""
|
|
204
|
+
return "\n".join(
|
|
205
|
+
content_block.text
|
|
206
|
+
for content_block in self.content
|
|
207
|
+
if isinstance(content_block, TextContent)
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
def get_log_content(self) -> str:
|
|
211
|
+
"""Concatenate all 'log' content blocks into a single string."""
|
|
212
|
+
return "\n".join(
|
|
213
|
+
content_block.content
|
|
214
|
+
for content_block in self.content
|
|
215
|
+
if isinstance(content_block, LogContent)
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
def to_openai_format(self) -> Dict[str, Any]:
|
|
219
|
+
"""Convert to OpenAI message format for API calls."""
|
|
220
|
+
role_to_openai_format = {
|
|
221
|
+
ROLE_USER: self._user_message_to_openai_format,
|
|
222
|
+
ROLE_COPILOT: self._copilot_message_to_openai_format,
|
|
223
|
+
ROLE_COPILOT_INTERNAL: self._copilot_message_to_openai_format,
|
|
224
|
+
}
|
|
225
|
+
return role_to_openai_format[self.role]()
|
|
226
|
+
|
|
227
|
+
def _user_message_to_openai_format(self) -> Dict[str, Any]:
|
|
228
|
+
role = self._map_role_to_openai()
|
|
229
|
+
content = self.get_text_content()
|
|
230
|
+
return {"role": role, "content": content}
|
|
231
|
+
|
|
232
|
+
def _copilot_message_to_openai_format(self) -> Dict[str, Any]:
|
|
233
|
+
role = self._map_role_to_openai()
|
|
234
|
+
# For now the Copilot responds only with the text content and all the content
|
|
235
|
+
# is formatted as a markdown.
|
|
236
|
+
# TODO: Once we start predicting the files, and expecting other content blocks
|
|
237
|
+
# we should update this.
|
|
238
|
+
content = self.get_text_content()
|
|
239
|
+
return {"role": role, "content": content}
|
|
240
|
+
|
|
241
|
+
def _map_role_to_openai(self) -> str:
|
|
242
|
+
"""Map internal roles to OpenAI-compatible roles."""
|
|
243
|
+
role_mapping = {
|
|
244
|
+
ROLE_USER: ROLE_USER,
|
|
245
|
+
ROLE_COPILOT: ROLE_ASSISTANT,
|
|
246
|
+
ROLE_COPILOT_INTERNAL: ROLE_USER,
|
|
247
|
+
}
|
|
248
|
+
if self.role not in role_mapping.keys():
|
|
249
|
+
structlogger.error(
|
|
250
|
+
"copilot_chat_message.to_openai_format.invalid_role",
|
|
251
|
+
event_info=(
|
|
252
|
+
f"Invalid role: `{self.role}`. "
|
|
253
|
+
f"Only {', '.join(role_mapping.keys())} roles are supported."
|
|
254
|
+
),
|
|
255
|
+
role=self.role,
|
|
256
|
+
)
|
|
257
|
+
raise ValueError(f"Invalid role: {self.role}")
|
|
258
|
+
|
|
259
|
+
return role_mapping[self.role]
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class CopilotRequest(BaseModel):
|
|
263
|
+
"""Request model for the copilot endpoint."""
|
|
264
|
+
|
|
265
|
+
copilot_chat_history: List[CopilotChatMessage] = Field(
|
|
266
|
+
...,
|
|
267
|
+
description=(
|
|
268
|
+
"The chat history between the user and the copilot. "
|
|
269
|
+
"Used to generate a new response based on the previous conversation."
|
|
270
|
+
),
|
|
271
|
+
)
|
|
272
|
+
session_id: str = Field(
|
|
273
|
+
...,
|
|
274
|
+
description=(
|
|
275
|
+
"The session ID of chat session with the assistant. "
|
|
276
|
+
"Used to fetch the conversation from the tracker."
|
|
277
|
+
),
|
|
278
|
+
)
|
|
279
|
+
history_signature: Optional[str] = Field(
|
|
280
|
+
default=None,
|
|
281
|
+
description="HMAC signature (base64url) for the provided chat history.",
|
|
282
|
+
)
|
|
283
|
+
signature_version: Optional[str] = Field(
|
|
284
|
+
default=None,
|
|
285
|
+
description='Signature scheme version (e.g. "v1").',
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
@property
|
|
289
|
+
def last_message(self) -> Optional[CopilotChatMessage]:
|
|
290
|
+
"""Get the last message from the copilot chat history."""
|
|
291
|
+
if not self.copilot_chat_history:
|
|
292
|
+
return None
|
|
293
|
+
return self.copilot_chat_history[-1]
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
class CopilotOutput(BaseModel, ABC):
|
|
297
|
+
"""Base class for response events."""
|
|
298
|
+
|
|
299
|
+
response_completeness: ResponseCompleteness = Field(
|
|
300
|
+
description=(
|
|
301
|
+
"Indicates whether this is a streaming token (TOKEN) or a complete "
|
|
302
|
+
"response (COMPLETE)"
|
|
303
|
+
),
|
|
304
|
+
)
|
|
305
|
+
response_category: ResponseCategory = Field(
|
|
306
|
+
description=(
|
|
307
|
+
"The category/source of this response. Each response type has a fixed "
|
|
308
|
+
"category that cannot be changed. "
|
|
309
|
+
),
|
|
310
|
+
frozen=True,
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
@abstractmethod
|
|
314
|
+
def to_sse_event(self) -> ServerSentEvent:
|
|
315
|
+
"""Convert to SSE event format."""
|
|
316
|
+
pass
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
class GeneratedContent(CopilotOutput):
|
|
320
|
+
"""Represents generated content from the LLM to be streamed."""
|
|
321
|
+
|
|
322
|
+
content: str
|
|
323
|
+
response_category: ResponseCategory = Field(frozen=True)
|
|
324
|
+
response_completeness: ResponseCompleteness = ResponseCompleteness.TOKEN
|
|
325
|
+
|
|
326
|
+
def to_sse_event(self) -> ServerSentEvent:
|
|
327
|
+
"""Convert to SSE event format."""
|
|
328
|
+
return ServerSentEvent(
|
|
329
|
+
event="copilot_response",
|
|
330
|
+
data={
|
|
331
|
+
"content": self.content,
|
|
332
|
+
"response_category": self.response_category.value,
|
|
333
|
+
"completeness": self.response_completeness.value,
|
|
334
|
+
},
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
class ReferenceEntry(CopilotOutput):
|
|
339
|
+
"""Represents a reference entry with title and url."""
|
|
340
|
+
|
|
341
|
+
index: int
|
|
342
|
+
title: str
|
|
343
|
+
url: str
|
|
344
|
+
response_category: ResponseCategory = Field(
|
|
345
|
+
default=ResponseCategory.REFERENCE_ENTRY,
|
|
346
|
+
frozen=True,
|
|
347
|
+
)
|
|
348
|
+
response_completeness: ResponseCompleteness = ResponseCompleteness.COMPLETE
|
|
349
|
+
|
|
350
|
+
@model_validator(mode="after")
|
|
351
|
+
def validate_response_category(self) -> "ReferenceEntry":
|
|
352
|
+
"""Validate that response_category has the correct default value."""
|
|
353
|
+
if self.response_category != ResponseCategory.REFERENCE_ENTRY:
|
|
354
|
+
raise ValueError(
|
|
355
|
+
f"ReferenceEntry response_category must be "
|
|
356
|
+
f"{ResponseCategory.REFERENCE_ENTRY}, got `{self.response_category}`."
|
|
357
|
+
)
|
|
358
|
+
return self
|
|
359
|
+
|
|
360
|
+
def to_sse_event(self) -> ServerSentEvent:
|
|
361
|
+
"""Convert to SSE event format."""
|
|
362
|
+
return ServerSentEvent(
|
|
363
|
+
event="copilot_response",
|
|
364
|
+
data={
|
|
365
|
+
"index": self.index,
|
|
366
|
+
"title": self.title,
|
|
367
|
+
"url": self.url,
|
|
368
|
+
"response_category": self.response_category.value,
|
|
369
|
+
"completeness": self.response_completeness.value,
|
|
370
|
+
},
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
class ReferenceSection(CopilotOutput):
|
|
375
|
+
"""Represents a reference section with documentation links."""
|
|
376
|
+
|
|
377
|
+
references: list[ReferenceEntry]
|
|
378
|
+
response_category: ResponseCategory = Field(
|
|
379
|
+
default=ResponseCategory.REFERENCE,
|
|
380
|
+
frozen=True,
|
|
381
|
+
)
|
|
382
|
+
response_completeness: ResponseCompleteness = ResponseCompleteness.COMPLETE
|
|
383
|
+
|
|
384
|
+
@model_validator(mode="after")
|
|
385
|
+
def validate_response_category(self) -> "ReferenceSection":
|
|
386
|
+
"""Validate that response_category has the correct default value."""
|
|
387
|
+
if self.response_category != ResponseCategory.REFERENCE:
|
|
388
|
+
raise ValueError(
|
|
389
|
+
f"ReferenceSection response_category must be "
|
|
390
|
+
f"{ResponseCategory.REFERENCE}, got `{self.response_category}`."
|
|
391
|
+
)
|
|
392
|
+
return self
|
|
393
|
+
|
|
394
|
+
def to_sse_event(self) -> ServerSentEvent:
|
|
395
|
+
"""Convert to SSE event format."""
|
|
396
|
+
return ServerSentEvent(
|
|
397
|
+
event="copilot_response",
|
|
398
|
+
data={
|
|
399
|
+
"references": [
|
|
400
|
+
reference.model_dump(include={"index", "title", "url"})
|
|
401
|
+
for reference in self.references
|
|
402
|
+
],
|
|
403
|
+
"response_category": self.response_category.value,
|
|
404
|
+
"completeness": self.response_completeness.value,
|
|
405
|
+
},
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
def sort_references(self) -> None:
|
|
409
|
+
"""Sort references by index value."""
|
|
410
|
+
sorted_references = sorted(
|
|
411
|
+
self.references, key=lambda reference: (0, int(reference.index))
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
self.references = sorted_references
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
class CopilotContext(BaseModel):
|
|
418
|
+
"""Model containing the context used by the copilot to generate a response."""
|
|
419
|
+
|
|
420
|
+
assistant_logs: str = Field("")
|
|
421
|
+
assistant_files: Dict[str, str] = Field({})
|
|
422
|
+
copilot_chat_history: List["CopilotChatMessage"] = Field([])
|
|
423
|
+
tracker_context: Optional[TrackerContext] = Field(None)
|
|
424
|
+
|
|
425
|
+
class Config:
|
|
426
|
+
"""Config for LLMBuilderContext."""
|
|
427
|
+
|
|
428
|
+
arbitrary_types_allowed = True
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
class UsageStatistics(BaseModel):
|
|
432
|
+
prompt_tokens: Optional[int] = None
|
|
433
|
+
completion_tokens: Optional[int] = None
|
|
434
|
+
total_tokens: Optional[int] = None
|
|
435
|
+
model: Optional[str] = None
|
|
436
|
+
|
|
437
|
+
def reset(self) -> None:
|
|
438
|
+
"""Reset usage statistics to their default values."""
|
|
439
|
+
self.prompt_tokens = None
|
|
440
|
+
self.completion_tokens = None
|
|
441
|
+
self.total_tokens = None
|
|
442
|
+
self.model = None
|
|
443
|
+
|
|
444
|
+
def update_from_stream_chunk(self, chunk: ChatCompletionChunk) -> None:
|
|
445
|
+
"""Update usage statistics from an OpenAI stream chunk.
|
|
446
|
+
|
|
447
|
+
Args:
|
|
448
|
+
chunk: The OpenAI stream chunk containing usage statistics.
|
|
449
|
+
"""
|
|
450
|
+
if not (usage := getattr(chunk, "usage", None)):
|
|
451
|
+
return
|
|
452
|
+
|
|
453
|
+
self.prompt_tokens = usage.prompt_tokens
|
|
454
|
+
self.completion_tokens = usage.completion_tokens
|
|
455
|
+
self.total_tokens = usage.total_tokens
|
|
456
|
+
self.model = getattr(chunk, "model", None)
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
class SigningContext(BaseModel):
|
|
460
|
+
secret: Optional[str] = Field(None)
|
|
461
|
+
default_version: str = Field("v1", description="Default signature version")
|
|
462
|
+
|
|
463
|
+
@property
|
|
464
|
+
def available(self) -> bool:
|
|
465
|
+
"""Signing is enabled if a non-empty secret is present."""
|
|
466
|
+
secret = (self.secret or "").strip()
|
|
467
|
+
return bool(secret)
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
class CopilotGenerationContext(BaseModel):
|
|
471
|
+
"""Container for copilot generation context and supporting evidence.
|
|
472
|
+
|
|
473
|
+
This class organizes the context and supporting evidence information used by the
|
|
474
|
+
copilot's generate_response method, providing a cleaner interface than returning
|
|
475
|
+
a tuple for the non-streaming data.
|
|
476
|
+
"""
|
|
477
|
+
|
|
478
|
+
relevant_documents: List["Document"] = Field(
|
|
479
|
+
...,
|
|
480
|
+
description=(
|
|
481
|
+
"The relevant documents used as supporting evidence for the respons."
|
|
482
|
+
),
|
|
483
|
+
)
|
|
484
|
+
system_message: Dict[str, Any] = Field(
|
|
485
|
+
..., description="The system message with instructions."
|
|
486
|
+
)
|
|
487
|
+
chat_history: List[Dict[str, Any]] = Field(
|
|
488
|
+
...,
|
|
489
|
+
description=(
|
|
490
|
+
"The chat history messages (excluding the last message) used as a context."
|
|
491
|
+
),
|
|
492
|
+
)
|
|
493
|
+
last_user_message: Optional[Dict[str, Any]] = Field(
|
|
494
|
+
None, description="The last user message with context that was processed."
|
|
495
|
+
)
|
|
496
|
+
|
|
497
|
+
class Config:
|
|
498
|
+
"""Config for CopilotGenerationContext."""
|
|
499
|
+
|
|
500
|
+
arbitrary_types_allowed = True
|
|
File without changes
|