rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__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/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +213 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +889 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +228 -0
- rasa/agents/validation.py +538 -0
- rasa/api.py +23 -9
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +96 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +38 -0
- rasa/builder/copilot/copilot.py +562 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +690 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +234 -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 +41 -0
- rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -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/clients.py +256 -0
- rasa/builder/guardrails/constants.py +12 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/models.py +266 -0
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +94 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +609 -0
- rasa/builder/llm_service.py +273 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +234 -0
- rasa/builder/models.py +229 -0
- rasa/builder/project_generator.py +463 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/service.py +1367 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +188 -0
- rasa/builder/validation_service.py +101 -0
- rasa/cli/arguments/data.py +9 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +78 -10
- rasa/cli/dialogue_understanding_test.py +11 -7
- rasa/cli/e2e_test.py +10 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +9 -4
- rasa/cli/interactive.py +8 -4
- rasa/cli/llm_fine_tuning.py +12 -6
- 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 +8 -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 +11 -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/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/defaults.py +1 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/check_balance.py +18 -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/check_that_card_exists.py +21 -0
- rasa/cli/project_templates/finance/actions/cards/list_cards.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/contacts/add_contact.py +30 -0
- rasa/cli/project_templates/finance/actions/contacts/list_contacts.py +22 -0
- rasa/cli/project_templates/finance/actions/contacts/remove_contact.py +35 -0
- rasa/cli/project_templates/finance/actions/db.py +117 -0
- rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_funds.py +27 -0
- rasa/cli/project_templates/finance/actions/transfers/check_transfer_limit.py +36 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_recurrent_payment.py +20 -0
- rasa/cli/project_templates/finance/actions/transfers/execute_transfer.py +45 -0
- rasa/cli/project_templates/finance/actions/transfers/list_transactions.py +32 -0
- rasa/cli/project_templates/finance/config.yml +29 -0
- rasa/cli/project_templates/finance/credentials.yml +33 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/data/accounts/download_statements.yml +26 -0
- rasa/cli/project_templates/finance/data/bills/bill_pay_reminder.yml +25 -0
- rasa/cli/project_templates/finance/data/cards/activate_card.yml +35 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +45 -0
- rasa/cli/project_templates/finance/data/cards/list_cards.yml +14 -0
- rasa/cli/project_templates/finance/data/cards/replace_card.yml +16 -0
- rasa/cli/project_templates/finance/data/cards/replace_eligible_card.yml +29 -0
- rasa/cli/project_templates/finance/data/contacts/add_contact.yml +33 -0
- rasa/cli/project_templates/finance/data/contacts/list_contacts.yml +14 -0
- rasa/cli/project_templates/finance/data/contacts/remove_contact.yml +31 -0
- rasa/cli/project_templates/finance/data/data.md +14 -0
- rasa/cli/project_templates/finance/data/general/bot_challenge.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 +6 -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_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/transfers/check_transfer_limit.yml +18 -0
- rasa/cli/project_templates/finance/data/transfers/list_transactions.yml +46 -0
- rasa/cli/project_templates/finance/data/transfers/move_money_between_accounts.yml +51 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +34 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money_to_a_third_party.yml +175 -0
- rasa/cli/project_templates/finance/db/cards.json +18 -0
- rasa/cli/project_templates/finance/db/contacts.json +10 -0
- rasa/cli/project_templates/finance/db/my_account.json +6 -0
- rasa/cli/project_templates/finance/db/transactions.json +22 -0
- rasa/cli/project_templates/finance/docs/docs.md +8 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/budgeting_analytics.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/multi_currency_accounts.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/account_features/premium_benefits.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/contactless_limits.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/freeze_unfreeze_card.txt +16 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/card_management/lost_stolen_card.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/instant_payments.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/money_transfers/international_transfers.txt +19 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/fraud_protection.txt +22 -0
- rasa/cli/project_templates/finance/docs/fenlo_banking_faq/security_fraud/secure_payments.txt +22 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +15 -0
- rasa/cli/project_templates/finance/domain/accounts/download_statements.yml +40 -0
- rasa/cli/project_templates/finance/domain/bills/bill_pay_reminder.yml +49 -0
- rasa/cli/project_templates/finance/domain/cards/activate_card.yml +24 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +44 -0
- rasa/cli/project_templates/finance/domain/cards/list_cards.yml +16 -0
- rasa/cli/project_templates/finance/domain/cards/replace_card.yml +43 -0
- rasa/cli/project_templates/finance/domain/cards/shared.yml +15 -0
- rasa/cli/project_templates/finance/domain/contacts/add_contact.yml +37 -0
- rasa/cli/project_templates/finance/domain/contacts/list_contacts.yml +16 -0
- rasa/cli/project_templates/finance/domain/contacts/remove_contact.yml +32 -0
- rasa/cli/project_templates/finance/domain/domain.md +18 -0
- rasa/cli/project_templates/finance/domain/general/_shared.yml +39 -0
- rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +8 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
- rasa/cli/project_templates/finance/domain/transfers/check_transfer_limit.yml +32 -0
- rasa/cli/project_templates/finance/domain/transfers/list_transactions.yml +44 -0
- rasa/cli/project_templates/finance/domain/transfers/shared.yml +17 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +221 -0
- rasa/cli/project_templates/finance/endpoints.yml +67 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -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 +8 -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 +13 -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 +74 -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/with_stub/network/solve_internet_not_slow.yml +33 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +8 -10
- rasa/cli/scaffold.py +50 -6
- rasa/cli/shell.py +10 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +44 -30
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +232 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +53 -13
- rasa/core/actions/action_exceptions.py +1 -1
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +22 -2
- rasa/core/available_agents.py +239 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +56 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +29 -16
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +56 -12
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +55 -1
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +82 -32
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- 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 +11 -6
- rasa/core/channels/voice_stream/browser_audio.py +91 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +19 -15
- rasa/core/channels/voice_stream/jambonz.py +22 -12
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +170 -32
- rasa/core/concurrent_lock_store.py +83 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
- rasa/core/config/configuration.py +295 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +17 -0
- rasa/core/exceptions.py +1 -1
- rasa/core/featurizers/tracker_featurizers.py +3 -2
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
- rasa/core/lock_store.py +50 -10
- rasa/core/nlg/contextual_response_rephraser.py +5 -0
- rasa/core/nlg/generator.py +1 -1
- rasa/core/persistor.py +7 -7
- rasa/core/policies/enterprise_search_policy.py +9 -10
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +720 -0
- rasa/core/policies/flows/flow_exceptions.py +5 -2
- rasa/core/policies/flows/flow_executor.py +146 -77
- rasa/core/policies/flows/mcp_tool_executor.py +304 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/rule_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +100 -44
- rasa/core/redis_connection_factory.py +474 -0
- rasa/core/run.py +49 -10
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +36 -14
- rasa/core/tracker_stores/sql_tracker_store.py +59 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
- rasa/dialogue_understanding/commands/utils.py +135 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +25 -8
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +2 -2
- rasa/model_manager/socket_bridge.py +21 -17
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_config.py +1 -1
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -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 +170 -0
- rasa/shared/agents/auth/constants.py +13 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/auth/utils.py +85 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +11 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +62 -22
- rasa/shared/core/events.py +329 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +57 -6
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +19 -10
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
- rasa/shared/exceptions.py +39 -2
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +86 -4
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +26 -1
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +92 -19
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +250 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/download.py +3 -0
- rasa/studio/prompts.py +1 -0
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +19 -52
- rasa/telemetry.py +166 -28
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +121 -7
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/utils/pypred.py +45 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +149 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dist-info/METADATA +212 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
- rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
- rasa_pro-3.13.12.dist-info/METADATA +0 -192
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
rasa/shared/core/slots.py
CHANGED
|
@@ -68,9 +68,9 @@ class SlotRejection:
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
class SlotValidation(BaseModel):
|
|
71
|
-
rejections: List[SlotRejection] = Field(alias=REJECTIONS)
|
|
71
|
+
rejections: List[SlotRejection] = Field(alias=REJECTIONS) # type: ignore[literal-required]
|
|
72
72
|
"""how the slot value is validated using predicate evaluation."""
|
|
73
|
-
refill_utter: str = Field(alias=REFILL_UTTER)
|
|
73
|
+
refill_utter: str = Field(alias=REFILL_UTTER) # type: ignore[literal-required]
|
|
74
74
|
"""The utterance that the assistant uses to ask for the slot."""
|
|
75
75
|
|
|
76
76
|
@staticmethod
|
|
@@ -273,10 +273,14 @@ class Slot(ABC):
|
|
|
273
273
|
try:
|
|
274
274
|
return rasa.shared.utils.common.class_from_module_path(type_name)
|
|
275
275
|
except (ImportError, AttributeError):
|
|
276
|
+
known_types = [
|
|
277
|
+
cls.type_name for cls in rasa.shared.utils.common.all_subclasses(Slot)
|
|
278
|
+
]
|
|
276
279
|
raise InvalidSlotTypeException(
|
|
277
280
|
f"Failed to find slot type, '{type_name}' is neither a known type nor "
|
|
278
281
|
f"user-defined. If you are creating your own slot type, make "
|
|
279
282
|
f"sure its module path is correct. "
|
|
283
|
+
f"Known types: {', '.join(known_types)} "
|
|
280
284
|
f"You can find all build in types at {DOCS_URL_SLOTS}"
|
|
281
285
|
)
|
|
282
286
|
|
rasa/shared/core/trackers.py
CHANGED
|
@@ -849,7 +849,7 @@ class DialogueStateTracker:
|
|
|
849
849
|
action_names_to_exclude: Optional[List[Text]] = None,
|
|
850
850
|
skip: int = 0,
|
|
851
851
|
event_verbosity: EventVerbosity = EventVerbosity.APPLIED,
|
|
852
|
-
) -> Optional[
|
|
852
|
+
) -> Optional[Event]:
|
|
853
853
|
"""Gets the last event of a given type which was actually applied.
|
|
854
854
|
|
|
855
855
|
Args:
|
|
@@ -889,9 +889,12 @@ class DialogueStateTracker:
|
|
|
889
889
|
Returns:
|
|
890
890
|
`True` if last executed action had name `name`, otherwise `False`.
|
|
891
891
|
"""
|
|
892
|
-
|
|
892
|
+
last_event = self.get_last_event_for(
|
|
893
893
|
ActionExecuted, action_names_to_exclude=[ACTION_LISTEN_NAME], skip=skip
|
|
894
894
|
)
|
|
895
|
+
last: Optional[ActionExecuted] = (
|
|
896
|
+
last_event if isinstance(last_event, ActionExecuted) else None
|
|
897
|
+
)
|
|
895
898
|
return last is not None and last.action_name == name
|
|
896
899
|
|
|
897
900
|
###
|
rasa/shared/exceptions.py
CHANGED
|
@@ -16,6 +16,17 @@ class RasaException(Exception):
|
|
|
16
16
|
to the users, but will be ignored in telemetry.
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
|
+
def __init__(self, message: str, suppress_stack_trace: bool = False, **kwargs: Any):
|
|
20
|
+
"""Initialize the exception.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
message: The error message.
|
|
24
|
+
suppress_stack_trace: If True, the stack trace will be suppressed in logs.
|
|
25
|
+
**kwargs: Additional keyword arguments (e.g., cause for exception chaining).
|
|
26
|
+
"""
|
|
27
|
+
Exception.__init__(self, message)
|
|
28
|
+
self.suppress_stack_trace = suppress_stack_trace
|
|
29
|
+
|
|
19
30
|
|
|
20
31
|
class RasaCoreException(RasaException):
|
|
21
32
|
"""Basic exception for errors raised by Rasa Core."""
|
|
@@ -113,6 +124,17 @@ class SchemaValidationError(RasaException, jsonschema.ValidationError):
|
|
|
113
124
|
class InvalidEntityFormatException(RasaException, json.JSONDecodeError):
|
|
114
125
|
"""Raised if the format of an entity is invalid."""
|
|
115
126
|
|
|
127
|
+
def __init__(self, msg: str, doc: str = "", pos: int = 0):
|
|
128
|
+
"""Initialize the exception.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
msg: The error message.
|
|
132
|
+
doc: The document that caused the error.
|
|
133
|
+
pos: The position in the document where the error occurred.
|
|
134
|
+
"""
|
|
135
|
+
RasaException.__init__(self, msg)
|
|
136
|
+
json.JSONDecodeError.__init__(self, msg, doc, pos)
|
|
137
|
+
|
|
116
138
|
@classmethod
|
|
117
139
|
def create_from(
|
|
118
140
|
cls, other: json.JSONDecodeError, msg: Text
|
|
@@ -130,8 +152,7 @@ class ConnectionException(RasaException):
|
|
|
130
152
|
|
|
131
153
|
|
|
132
154
|
class ProviderClientAPIException(RasaException):
|
|
133
|
-
"""
|
|
134
|
-
with LLM / embedding providers.
|
|
155
|
+
"""For errors during API interactions with LLM / embedding providers.
|
|
135
156
|
|
|
136
157
|
Attributes:
|
|
137
158
|
original_exception (Exception): The original exception that was
|
|
@@ -163,9 +184,25 @@ class ProviderClientAPIException(RasaException):
|
|
|
163
184
|
return s
|
|
164
185
|
|
|
165
186
|
|
|
187
|
+
class LLMToolResponseDecodeError(ProviderClientAPIException):
|
|
188
|
+
"""Raised when a JSON decoding error occurs in LLM tool response."""
|
|
189
|
+
|
|
190
|
+
|
|
166
191
|
class ProviderClientValidationError(RasaException):
|
|
167
192
|
"""Raised for errors that occur during validation of the API client."""
|
|
168
193
|
|
|
169
194
|
|
|
170
195
|
class FinetuningDataPreparationException(RasaException):
|
|
171
196
|
"""Raised when there is an error in data preparation for fine-tuning."""
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class AgentInitializationException(RasaException):
|
|
200
|
+
"""Raised when there is an error during the initialization of an agent."""
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class AgentAuthInitializationException(RasaException):
|
|
204
|
+
"""Raised when there is an error during the initialization of agent auth client."""
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class AuthenticationError(RasaException):
|
|
208
|
+
"""Raised when there is an authentication error."""
|
|
@@ -207,6 +207,12 @@ class TrainingDataImporter(ABC):
|
|
|
207
207
|
)
|
|
208
208
|
]
|
|
209
209
|
|
|
210
|
+
return TrainingDataImporter.wrap_in_builtins(importers)
|
|
211
|
+
|
|
212
|
+
@staticmethod
|
|
213
|
+
def wrap_in_builtins(
|
|
214
|
+
importers: List["TrainingDataImporter"],
|
|
215
|
+
) -> "TrainingDataImporter":
|
|
210
216
|
return LanguageImporter(
|
|
211
217
|
E2EImporter(
|
|
212
218
|
FlowSyncImporter(ResponsesSyncImporter(CombinedDataImporter(importers)))
|
rasa/shared/importers/rasa.py
CHANGED
|
@@ -74,7 +74,7 @@ class RasaFileImporter(TrainingDataImporter):
|
|
|
74
74
|
@cached_method
|
|
75
75
|
def get_flows(self) -> FlowsList:
|
|
76
76
|
"""Retrieves training stories / rules (see parent class for full docstring)."""
|
|
77
|
-
return utils.flows_from_paths(self._flow_files)
|
|
77
|
+
return utils.flows_from_paths(self._flow_files, self.get_domain())
|
|
78
78
|
|
|
79
79
|
@cached_method
|
|
80
80
|
def get_conversation_tests(self) -> StoryGraph:
|
rasa/shared/importers/utils.py
CHANGED
|
@@ -1,9 +1,37 @@
|
|
|
1
|
-
from typing import Iterable, List, Optional, Text
|
|
1
|
+
from typing import Any, Dict, Iterable, List, Optional, Text
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
2
4
|
|
|
3
5
|
from rasa.shared.core.domain import Domain
|
|
4
6
|
from rasa.shared.core.flows import FlowsList
|
|
7
|
+
from rasa.shared.core.flows.yaml_flows_io import KEY_FLOWS, get_flows_as_json
|
|
5
8
|
from rasa.shared.core.training_data.structures import StoryGraph
|
|
9
|
+
from rasa.shared.importers.importer import TrainingDataImporter
|
|
10
|
+
from rasa.shared.nlu.training_data.formats.rasa_yaml import RasaYAMLWriter
|
|
6
11
|
from rasa.shared.nlu.training_data.training_data import TrainingData
|
|
12
|
+
from rasa.utils.json_utils import extract_values
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CALMUserData(BaseModel):
|
|
16
|
+
"""All pieces that will be uploaded to Rasa Studio."""
|
|
17
|
+
|
|
18
|
+
flows: Dict[str, Any] = Field(default_factory=dict)
|
|
19
|
+
domain: Dict[str, Any] = Field(default_factory=dict)
|
|
20
|
+
config: Dict[str, Any] = Field(default_factory=dict)
|
|
21
|
+
endpoints: Dict[str, Any] = Field(default_factory=dict)
|
|
22
|
+
nlu: Dict[str, Any] = Field(default_factory=dict)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
DOMAIN_KEYS = [
|
|
26
|
+
"version",
|
|
27
|
+
"actions",
|
|
28
|
+
"responses",
|
|
29
|
+
"slots",
|
|
30
|
+
"intents",
|
|
31
|
+
"entities",
|
|
32
|
+
"forms",
|
|
33
|
+
"session_config",
|
|
34
|
+
]
|
|
7
35
|
|
|
8
36
|
|
|
9
37
|
def training_data_from_paths(paths: Iterable[Text], language: Text) -> TrainingData:
|
|
@@ -23,8 +51,14 @@ def story_graph_from_paths(
|
|
|
23
51
|
return StoryGraph(story_steps)
|
|
24
52
|
|
|
25
53
|
|
|
26
|
-
def flows_from_paths(files: List[Text]) -> FlowsList:
|
|
27
|
-
"""Returns the flows from paths.
|
|
54
|
+
def flows_from_paths(files: List[Text], domain: Optional[Domain] = None) -> FlowsList:
|
|
55
|
+
"""Returns the flows from paths.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
files: List of flow file paths to load.
|
|
59
|
+
domain: Optional domain for validation. If provided, exit_if conditions
|
|
60
|
+
will be validated against defined slots.
|
|
61
|
+
"""
|
|
28
62
|
from rasa.shared.core.flows.yaml_flows_io import YAMLFlowsReader
|
|
29
63
|
|
|
30
64
|
flows = FlowsList(underlying_flows=[])
|
|
@@ -32,5 +66,53 @@ def flows_from_paths(files: List[Text]) -> FlowsList:
|
|
|
32
66
|
flows = flows.merge(
|
|
33
67
|
YAMLFlowsReader.read_from_file(file), ignore_duplicates=False
|
|
34
68
|
)
|
|
35
|
-
flows.validate()
|
|
69
|
+
flows.validate(domain)
|
|
36
70
|
return flows
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def extract_calm_import_parts_from_importer(
|
|
74
|
+
importer: TrainingDataImporter,
|
|
75
|
+
config: Optional[Dict[str, Any]] = None,
|
|
76
|
+
endpoints: Optional[Dict[str, Any]] = None,
|
|
77
|
+
) -> CALMUserData:
|
|
78
|
+
"""Extracts CALMUserData from a TrainingDataImporter.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
importer: The training data importer
|
|
82
|
+
data_paths: The path(s) to the training data for flows
|
|
83
|
+
config: Optional config dict, if not provided will use importer.get_config()
|
|
84
|
+
endpoints: Optional endpoints dict, defaults to empty dict
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
CALMUserData containing flows, domain, config, endpoints, and nlu data
|
|
88
|
+
"""
|
|
89
|
+
# Extract config
|
|
90
|
+
if config is None:
|
|
91
|
+
config = importer.get_config()
|
|
92
|
+
|
|
93
|
+
# Extract domain
|
|
94
|
+
domain_from_files = importer.get_user_domain().as_dict()
|
|
95
|
+
domain = extract_values(domain_from_files, DOMAIN_KEYS)
|
|
96
|
+
|
|
97
|
+
# Extract flows
|
|
98
|
+
flows = importer.get_user_flows()
|
|
99
|
+
flows_dict = {KEY_FLOWS: get_flows_as_json(flows)}
|
|
100
|
+
|
|
101
|
+
# Extract NLU data
|
|
102
|
+
nlu_data = importer.get_nlu_data()
|
|
103
|
+
nlu_examples = nlu_data.filter_training_examples(
|
|
104
|
+
lambda ex: ex.get("intent") in nlu_data.intents
|
|
105
|
+
)
|
|
106
|
+
nlu_dict = RasaYAMLWriter().training_data_to_dict(nlu_examples)
|
|
107
|
+
|
|
108
|
+
# Use provided endpoints or default to empty dict
|
|
109
|
+
if endpoints is None:
|
|
110
|
+
endpoints = {}
|
|
111
|
+
|
|
112
|
+
return CALMUserData(
|
|
113
|
+
flows=flows_dict or {},
|
|
114
|
+
domain=domain or {},
|
|
115
|
+
config=config or {},
|
|
116
|
+
endpoints=endpoints or {},
|
|
117
|
+
nlu=nlu_dict or {},
|
|
118
|
+
)
|
|
@@ -21,7 +21,7 @@ from rasa.shared.providers._ssl_verification_utils import (
|
|
|
21
21
|
ensure_ssl_certificates_for_litellm_non_openai_based_clients,
|
|
22
22
|
ensure_ssl_certificates_for_litellm_openai_based_clients,
|
|
23
23
|
)
|
|
24
|
-
from rasa.shared.providers.llm.llm_response import LLMResponse, LLMUsage
|
|
24
|
+
from rasa.shared.providers.llm.llm_response import LLMResponse, LLMToolCall, LLMUsage
|
|
25
25
|
from rasa.shared.utils.io import resolve_environment_variables, suppress_logs
|
|
26
26
|
|
|
27
27
|
structlogger = structlog.get_logger()
|
|
@@ -126,7 +126,9 @@ class _BaseLiteLLMClient:
|
|
|
126
126
|
raise ProviderClientValidationError(event_info)
|
|
127
127
|
|
|
128
128
|
@suppress_logs(log_level=logging.WARNING)
|
|
129
|
-
def completion(
|
|
129
|
+
def completion(
|
|
130
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
131
|
+
) -> LLMResponse:
|
|
130
132
|
"""Synchronously generate completions for given list of messages.
|
|
131
133
|
|
|
132
134
|
Args:
|
|
@@ -138,6 +140,7 @@ class _BaseLiteLLMClient:
|
|
|
138
140
|
- a list of messages. Each message is a string and will be formatted
|
|
139
141
|
as a user message.
|
|
140
142
|
- a single message as a string which will be formatted as user message.
|
|
143
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
141
144
|
|
|
142
145
|
Returns:
|
|
143
146
|
List of message completions.
|
|
@@ -147,15 +150,19 @@ class _BaseLiteLLMClient:
|
|
|
147
150
|
"""
|
|
148
151
|
try:
|
|
149
152
|
formatted_messages = self._get_formatted_messages(messages)
|
|
150
|
-
arguments =
|
|
151
|
-
|
|
153
|
+
arguments = cast(
|
|
154
|
+
Dict[str, Any], resolve_environment_variables(self._completion_fn_args)
|
|
155
|
+
)
|
|
156
|
+
response = completion(
|
|
157
|
+
messages=formatted_messages, **{**arguments, **kwargs}
|
|
158
|
+
)
|
|
152
159
|
return self._format_response(response)
|
|
153
160
|
except Exception as e:
|
|
154
|
-
raise ProviderClientAPIException(e)
|
|
161
|
+
raise ProviderClientAPIException(e) from e
|
|
155
162
|
|
|
156
163
|
@suppress_logs(log_level=logging.WARNING)
|
|
157
164
|
async def acompletion(
|
|
158
|
-
self, messages: Union[List[dict], List[str], str]
|
|
165
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
159
166
|
) -> LLMResponse:
|
|
160
167
|
"""Asynchronously generate completions for given list of messages.
|
|
161
168
|
|
|
@@ -168,6 +175,7 @@ class _BaseLiteLLMClient:
|
|
|
168
175
|
- a list of messages. Each message is a string and will be formatted
|
|
169
176
|
as a user message.
|
|
170
177
|
- a single message as a string which will be formatted as user message.
|
|
178
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
171
179
|
|
|
172
180
|
Returns:
|
|
173
181
|
List of message completions.
|
|
@@ -177,8 +185,12 @@ class _BaseLiteLLMClient:
|
|
|
177
185
|
"""
|
|
178
186
|
try:
|
|
179
187
|
formatted_messages = self._get_formatted_messages(messages)
|
|
180
|
-
arguments =
|
|
181
|
-
|
|
188
|
+
arguments = cast(
|
|
189
|
+
Dict[str, Any], resolve_environment_variables(self._completion_fn_args)
|
|
190
|
+
)
|
|
191
|
+
response = await acompletion(
|
|
192
|
+
messages=formatted_messages, **{**arguments, **kwargs}
|
|
193
|
+
)
|
|
182
194
|
return self._format_response(response)
|
|
183
195
|
except Exception as e:
|
|
184
196
|
message = ""
|
|
@@ -197,7 +209,7 @@ class _BaseLiteLLMClient:
|
|
|
197
209
|
"In case you are getting OpenAI connection errors, such as missing "
|
|
198
210
|
"API key, your configuration is incorrect."
|
|
199
211
|
)
|
|
200
|
-
raise ProviderClientAPIException(e, message)
|
|
212
|
+
raise ProviderClientAPIException(e, message) from e
|
|
201
213
|
|
|
202
214
|
def _get_formatted_messages(
|
|
203
215
|
self, messages: Union[List[dict], List[str], str]
|
|
@@ -246,12 +258,32 @@ class _BaseLiteLLMClient:
|
|
|
246
258
|
else 0
|
|
247
259
|
)
|
|
248
260
|
formatted_response.usage = LLMUsage(prompt_tokens, completion_tokens)
|
|
261
|
+
|
|
262
|
+
# Extract tool calls from all choices
|
|
263
|
+
formatted_response.tool_calls = self._extract_tool_calls(response)
|
|
264
|
+
|
|
249
265
|
structlogger.debug(
|
|
250
266
|
"base_litellm_client.formatted_response",
|
|
251
267
|
formatted_response=formatted_response.to_dict(),
|
|
252
268
|
)
|
|
253
269
|
return formatted_response
|
|
254
270
|
|
|
271
|
+
def _extract_tool_calls(self, response: Any) -> List[LLMToolCall]:
|
|
272
|
+
"""Extract tool calls from response choices.
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
response: List of response choices from LiteLLM
|
|
276
|
+
|
|
277
|
+
Returns:
|
|
278
|
+
List of LLMToolCall objects, empty if no tool calls found
|
|
279
|
+
"""
|
|
280
|
+
return [
|
|
281
|
+
LLMToolCall.from_litellm(tool_call)
|
|
282
|
+
for choice in response.choices
|
|
283
|
+
if choice.message.tool_calls
|
|
284
|
+
for tool_call in choice.message.tool_calls
|
|
285
|
+
]
|
|
286
|
+
|
|
255
287
|
def _format_text_completion_response(self, response: Any) -> LLMResponse:
|
|
256
288
|
"""Parses the LiteLLM text completion response to Rasa format."""
|
|
257
289
|
formatted_response = LLMResponse(
|
|
@@ -122,7 +122,9 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
122
122
|
raise ProviderClientAPIException(e)
|
|
123
123
|
|
|
124
124
|
@suppress_logs(log_level=logging.WARNING)
|
|
125
|
-
def completion(
|
|
125
|
+
def completion(
|
|
126
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
127
|
+
) -> LLMResponse:
|
|
126
128
|
"""
|
|
127
129
|
Synchronously generate completions for given list of messages.
|
|
128
130
|
|
|
@@ -140,6 +142,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
140
142
|
- a list of messages. Each message is a string and will be formatted
|
|
141
143
|
as a user message.
|
|
142
144
|
- a single message as a string which will be formatted as user message.
|
|
145
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
143
146
|
Returns:
|
|
144
147
|
List of message completions.
|
|
145
148
|
Raises:
|
|
@@ -148,9 +151,9 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
148
151
|
if not self._use_chat_completions_endpoint:
|
|
149
152
|
return self._text_completion(messages)
|
|
150
153
|
try:
|
|
151
|
-
formatted_messages = self.
|
|
154
|
+
formatted_messages = self._get_formatted_messages(messages)
|
|
152
155
|
response = self.router_client.completion(
|
|
153
|
-
messages=formatted_messages, **self._completion_fn_args
|
|
156
|
+
messages=formatted_messages, **{**self._completion_fn_args, **kwargs}
|
|
154
157
|
)
|
|
155
158
|
return self._format_response(response)
|
|
156
159
|
except Exception as e:
|
|
@@ -158,7 +161,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
158
161
|
|
|
159
162
|
@suppress_logs(log_level=logging.WARNING)
|
|
160
163
|
async def acompletion(
|
|
161
|
-
self, messages: Union[List[dict], List[str], str]
|
|
164
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
162
165
|
) -> LLMResponse:
|
|
163
166
|
"""
|
|
164
167
|
Asynchronously generate completions for given list of messages.
|
|
@@ -177,6 +180,7 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
177
180
|
- a list of messages. Each message is a string and will be formatted
|
|
178
181
|
as a user message.
|
|
179
182
|
- a single message as a string which will be formatted as user message.
|
|
183
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
180
184
|
Returns:
|
|
181
185
|
List of message completions.
|
|
182
186
|
Raises:
|
|
@@ -185,9 +189,9 @@ class LiteLLMRouterLLMClient(_BaseLiteLLMRouterClient, _BaseLiteLLMClient):
|
|
|
185
189
|
if not self._use_chat_completions_endpoint:
|
|
186
190
|
return await self._atext_completion(messages)
|
|
187
191
|
try:
|
|
188
|
-
formatted_messages = self.
|
|
192
|
+
formatted_messages = self._get_formatted_messages(messages)
|
|
189
193
|
response = await self.router_client.acompletion(
|
|
190
|
-
messages=formatted_messages, **self._completion_fn_args
|
|
194
|
+
messages=formatted_messages, **{**self._completion_fn_args, **kwargs}
|
|
191
195
|
)
|
|
192
196
|
return self._format_response(response)
|
|
193
197
|
except Exception as e:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Protocol, Union, runtime_checkable
|
|
3
|
+
from typing import Any, Dict, List, Protocol, Union, runtime_checkable
|
|
4
4
|
|
|
5
5
|
from rasa.shared.providers.llm.llm_response import LLMResponse
|
|
6
6
|
|
|
@@ -32,7 +32,9 @@ class LLMClient(Protocol):
|
|
|
32
32
|
"""
|
|
33
33
|
...
|
|
34
34
|
|
|
35
|
-
def completion(
|
|
35
|
+
def completion(
|
|
36
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
37
|
+
) -> LLMResponse:
|
|
36
38
|
"""
|
|
37
39
|
Synchronously generate completions for given list of messages.
|
|
38
40
|
|
|
@@ -48,13 +50,14 @@ class LLMClient(Protocol):
|
|
|
48
50
|
- a list of messages. Each message is a string and will be formatted
|
|
49
51
|
as a user message.
|
|
50
52
|
- a single message as a string which will be formatted as user message.
|
|
53
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
51
54
|
Returns:
|
|
52
55
|
LLMResponse
|
|
53
56
|
"""
|
|
54
57
|
...
|
|
55
58
|
|
|
56
59
|
async def acompletion(
|
|
57
|
-
self, messages: Union[List[dict], List[str], str]
|
|
60
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
58
61
|
) -> LLMResponse:
|
|
59
62
|
"""
|
|
60
63
|
Asynchronously generate completions for given list of messages.
|
|
@@ -71,6 +74,7 @@ class LLMClient(Protocol):
|
|
|
71
74
|
- a list of messages. Each message is a string and will be formatted
|
|
72
75
|
as a user message.
|
|
73
76
|
- a single message as a string which will be formatted as user message.
|
|
77
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
74
78
|
Returns:
|
|
75
79
|
LLMResponse
|
|
76
80
|
"""
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import functools
|
|
2
|
+
import json
|
|
2
3
|
import time
|
|
3
4
|
from dataclasses import asdict, dataclass, field
|
|
4
5
|
from typing import Any, Awaitable, Callable, Dict, List, Optional, Text, Union
|
|
5
6
|
|
|
6
7
|
import structlog
|
|
8
|
+
from litellm.utils import ChatCompletionMessageToolCall
|
|
9
|
+
from pydantic import BaseModel
|
|
10
|
+
|
|
11
|
+
from rasa.shared.constants import KEY_TOOL_CALLS
|
|
12
|
+
from rasa.shared.exceptions import LLMToolResponseDecodeError
|
|
7
13
|
|
|
8
14
|
structlogger = structlog.get_logger()
|
|
9
15
|
|
|
@@ -38,6 +44,53 @@ class LLMUsage:
|
|
|
38
44
|
return asdict(self)
|
|
39
45
|
|
|
40
46
|
|
|
47
|
+
class LLMToolCall(BaseModel):
|
|
48
|
+
"""A class representing a response from an LLM tool call."""
|
|
49
|
+
|
|
50
|
+
id: str
|
|
51
|
+
"""The ID of the tool call."""
|
|
52
|
+
|
|
53
|
+
tool_name: str
|
|
54
|
+
"""The name of the tool that was called."""
|
|
55
|
+
|
|
56
|
+
tool_args: Dict[str, Any]
|
|
57
|
+
"""The arguments passed to the tool call."""
|
|
58
|
+
|
|
59
|
+
type: str = "function"
|
|
60
|
+
"""The type of the tool call."""
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def from_dict(cls, data: Dict[Text, Any]) -> "LLMToolCall":
|
|
64
|
+
"""Creates an LLMToolResponse from a dictionary."""
|
|
65
|
+
return cls(**data)
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_litellm(cls, data: ChatCompletionMessageToolCall) -> "LLMToolCall":
|
|
69
|
+
"""Creates an LLMToolResponse from a dictionary."""
|
|
70
|
+
try:
|
|
71
|
+
tool_args = json.loads(data.function.arguments)
|
|
72
|
+
except json.JSONDecodeError as e:
|
|
73
|
+
structlogger.error(
|
|
74
|
+
"llm_response.litellm_tool_call.invalid_arguments",
|
|
75
|
+
tool_name=data.function.name,
|
|
76
|
+
tool_call=data.function.arguments,
|
|
77
|
+
)
|
|
78
|
+
raise LLMToolResponseDecodeError(
|
|
79
|
+
original_exception=e,
|
|
80
|
+
message=(
|
|
81
|
+
f"Invalid arguments for tool call - `{data.function.name}`: "
|
|
82
|
+
f"`{data.function.arguments}`"
|
|
83
|
+
),
|
|
84
|
+
) from e
|
|
85
|
+
|
|
86
|
+
return cls(
|
|
87
|
+
id=data.id,
|
|
88
|
+
tool_name=data.function.name,
|
|
89
|
+
tool_args=tool_args,
|
|
90
|
+
type=data.type,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
41
94
|
@dataclass
|
|
42
95
|
class LLMResponse:
|
|
43
96
|
id: str
|
|
@@ -62,12 +115,22 @@ class LLMResponse:
|
|
|
62
115
|
latency: Optional[float] = None
|
|
63
116
|
"""Optional field to store the latency of the LLM API call."""
|
|
64
117
|
|
|
118
|
+
tool_calls: Optional[List[LLMToolCall]] = None
|
|
119
|
+
"""The list of tool calls the model generated for the input prompt."""
|
|
120
|
+
|
|
65
121
|
@classmethod
|
|
66
122
|
def from_dict(cls, data: Dict[Text, Any]) -> "LLMResponse":
|
|
67
123
|
"""Creates an LLMResponse from a dictionary."""
|
|
68
124
|
usage_data = data.get("usage", {})
|
|
69
125
|
usage_obj = LLMUsage.from_dict(usage_data) if usage_data else None
|
|
70
126
|
|
|
127
|
+
tool_calls_data = data.get(KEY_TOOL_CALLS, [])
|
|
128
|
+
tool_calls_obj = (
|
|
129
|
+
[LLMToolCall.from_dict(tool) for tool in tool_calls_data]
|
|
130
|
+
if tool_calls_data
|
|
131
|
+
else None
|
|
132
|
+
)
|
|
133
|
+
|
|
71
134
|
return cls(
|
|
72
135
|
id=data["id"],
|
|
73
136
|
choices=data["choices"],
|
|
@@ -76,6 +139,7 @@ class LLMResponse:
|
|
|
76
139
|
usage=usage_obj,
|
|
77
140
|
additional_info=data.get("additional_info"),
|
|
78
141
|
latency=data.get("latency"),
|
|
142
|
+
tool_calls=tool_calls_obj,
|
|
79
143
|
)
|
|
80
144
|
|
|
81
145
|
@classmethod
|
|
@@ -92,6 +156,8 @@ class LLMResponse:
|
|
|
92
156
|
result = asdict(self)
|
|
93
157
|
if self.usage:
|
|
94
158
|
result["usage"] = self.usage.to_dict()
|
|
159
|
+
if self.tool_calls:
|
|
160
|
+
result[KEY_TOOL_CALLS] = [tool.model_dump() for tool in self.tool_calls]
|
|
95
161
|
return result
|
|
96
162
|
|
|
97
163
|
|
|
@@ -237,7 +237,7 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
237
237
|
raise ProviderClientAPIException(e)
|
|
238
238
|
|
|
239
239
|
async def acompletion(
|
|
240
|
-
self, messages: Union[List[dict], List[str], str]
|
|
240
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
241
241
|
) -> LLMResponse:
|
|
242
242
|
"""Asynchronous completion of the model with the given messages.
|
|
243
243
|
|
|
@@ -255,15 +255,18 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
255
255
|
- a list of messages. Each message is a string and will be formatted
|
|
256
256
|
as a user message.
|
|
257
257
|
- a single message as a string which will be formatted as user message.
|
|
258
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
258
259
|
|
|
259
260
|
Returns:
|
|
260
261
|
The completion response.
|
|
261
262
|
"""
|
|
262
263
|
if self._use_chat_completions_endpoint:
|
|
263
|
-
return await super().acompletion(messages)
|
|
264
|
+
return await super().acompletion(messages, **kwargs)
|
|
264
265
|
return await self._atext_completion(messages)
|
|
265
266
|
|
|
266
|
-
def completion(
|
|
267
|
+
def completion(
|
|
268
|
+
self, messages: Union[List[dict], List[str], str], **kwargs: Any
|
|
269
|
+
) -> LLMResponse:
|
|
267
270
|
"""Completion of the model with the given messages.
|
|
268
271
|
|
|
269
272
|
Method overrides the base class method to call the appropriate
|
|
@@ -273,12 +276,13 @@ class SelfHostedLLMClient(_BaseLiteLLMClient):
|
|
|
273
276
|
|
|
274
277
|
Args:
|
|
275
278
|
messages: The messages to be used for completion.
|
|
279
|
+
**kwargs: Additional parameters to pass to the completion call.
|
|
276
280
|
|
|
277
281
|
Returns:
|
|
278
282
|
The completion response.
|
|
279
283
|
"""
|
|
280
284
|
if self._use_chat_completions_endpoint:
|
|
281
|
-
return super().completion(messages)
|
|
285
|
+
return super().completion(messages, **kwargs)
|
|
282
286
|
return self._text_completion(messages)
|
|
283
287
|
|
|
284
288
|
@staticmethod
|