rasa-pro 3.14.0.dev20250901__py3-none-any.whl → 3.14.0rc1__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 +211 -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 +879 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +726 -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 +206 -0
- rasa/agents/validation.py +485 -0
- rasa/api.py +24 -9
- rasa/builder/config.py +7 -2
- rasa/builder/copilot/constants.py +3 -0
- rasa/builder/copilot/copilot.py +128 -54
- rasa/builder/copilot/models.py +39 -3
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +183 -188
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
- rasa/builder/copilot/telemetry.py +46 -20
- rasa/builder/document_retrieval/models.py +3 -3
- rasa/builder/download.py +1 -8
- rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
- rasa/builder/guardrails/constants.py +3 -0
- rasa/builder/guardrails/models.py +45 -10
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/utils.py +42 -276
- rasa/builder/jobs.py +33 -21
- rasa/builder/llm_service.py +32 -5
- rasa/builder/main.py +38 -62
- rasa/builder/models.py +8 -7
- rasa/builder/project_generator.py +149 -148
- rasa/builder/service.py +58 -40
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +84 -20
- rasa/builder/validation_service.py +1 -1
- 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 +10 -8
- rasa/cli/dialogue_understanding_test.py +10 -7
- rasa/cli/e2e_test.py +9 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +8 -4
- rasa/cli/interactive.py +5 -4
- rasa/cli/llm_fine_tuning.py +11 -6
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +6 -4
- rasa/cli/project_templates/basic/data/data.md +5 -6
- rasa/cli/project_templates/basic/domain/domain.md +7 -5
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +1 -1
- rasa/cli/project_templates/basic/endpoints.yml +5 -1
- 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 +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -46
- 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/{transfers/action_process_immediate_payment.py → cards/check_that_card_exists.py} +6 -3
- 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/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 +8 -0
- rasa/cli/project_templates/finance/credentials.yml +7 -6
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +3 -4
- 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 +37 -58
- 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/goodbye.yml +1 -1
- rasa/cli/project_templates/finance/data/general/hello.yml +1 -2
- rasa/cli/project_templates/finance/data/general/help.yml +2 -2
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +2 -2
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +1 -1
- 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 +29 -62
- 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 +9 -5
- 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 +33 -90
- 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 +5 -2
- rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -3
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +6 -6
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +10 -9
- rasa/cli/project_templates/finance/domain/general/welcome.yml +33 -2
- 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 +203 -61
- rasa/cli/project_templates/finance/endpoints.yml +8 -4
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
- rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/config.yml +6 -4
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +1 -1
- rasa/cli/project_templates/telco/docs/docs.md +3 -0
- rasa/cli/project_templates/telco/domain/domain.md +13 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +3 -6
- rasa/cli/project_templates/telco/endpoints.yml +5 -1
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +1 -1
- 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/credentials.yml +10 -0
- rasa/cli/run.py +12 -10
- rasa/cli/scaffold.py +4 -4
- rasa/cli/shell.py +9 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +41 -28
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +223 -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 +51 -10
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +9 -2
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +19 -2
- rasa/core/available_agents.py +229 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +52 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/development_inspector.py +4 -24
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.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-81efba3e.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.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-31422447.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.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-cb4d8723.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.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-64154b83.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.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 +34 -35
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- 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 +9 -1
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +20 -3
- 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 +53 -7
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/studio_chat.py +29 -47
- rasa/core/channels/telegram.py +4 -9
- 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 +55 -3
- rasa/core/channels/voice_stream/genesys.py +3 -2
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +21 -1
- rasa/core/channels/voice_stream/voice_channel.py +64 -0
- rasa/core/concurrent_lock_store.py +66 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
- rasa/core/config/configuration.py +260 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +11 -0
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +226 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +90 -0
- rasa/core/lock_store.py +46 -10
- rasa/core/nlg/generator.py +1 -1
- rasa/core/policies/enterprise_search_policy.py +5 -3
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +632 -0
- rasa/core/policies/flows/flow_executor.py +137 -76
- rasa/core/policies/flows/mcp_tool_executor.py +298 -0
- rasa/core/policies/intentless_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 +469 -0
- rasa/core/run.py +37 -8
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -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 +19 -5
- 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 +68 -7
- rasa/dialogue_understanding/commands/utils.py +124 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -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 +46 -8
- 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/storage/local_model_storage.py +41 -4
- rasa/engine/validation.py +19 -6
- 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/socket_bridge.py +1 -2
- 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_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 +167 -0
- rasa/shared/agents/auth/constants.py +12 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +8 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +0 -7
- 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/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +49 -5
- 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 +3 -2
- rasa/shared/core/slots.py +2 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/exceptions.py +16 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +9 -3
- 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 +8 -4
- 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 +24 -0
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +39 -16
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +247 -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/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +3 -6
- rasa/telemetry.py +69 -5
- 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/log_utils.py +96 -5
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/pypred.py +38 -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 +17 -13
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/METADATA +59 -51
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/RECORD +452 -428
- rasa/builder/scrape_rasa_docs.py +0 -97
- rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
- rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
- rasa/cli/project_templates/finance/actions/database.py +0 -277
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
- rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
- rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
- rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
- rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
- rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
- rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
- rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
- rasa/cli/project_templates/finance/csvs/users.csv +0 -4
- rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
- rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
- rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
- rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
- rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
- rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
- rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
- rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
- rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
- rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
- rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
- rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
- rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
- /rasa/cli/project_templates/telco/domain/billing/{domain_undertand_bill.yml → understand_bill.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_reboot_router.yml → reboot_router.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_reset_router.yml → reset_router.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_run_speed_test.yml → run_speed_test.yml} +0 -0
- /rasa/cli/project_templates/telco/domain/network/{domain_solve_internet_issue.yml → solve_internet_issue.yml} +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0rc1.dist-info}/entry_points.txt +0 -0
|
@@ -16,6 +16,7 @@ from typing import (
|
|
|
16
16
|
Text,
|
|
17
17
|
Type,
|
|
18
18
|
TypeVar,
|
|
19
|
+
cast,
|
|
19
20
|
)
|
|
20
21
|
|
|
21
22
|
from multidict import MultiDict
|
|
@@ -24,6 +25,9 @@ from opentelemetry.sdk.trace import TracerProvider
|
|
|
24
25
|
from opentelemetry.trace import SpanKind, Tracer
|
|
25
26
|
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
|
|
26
27
|
|
|
28
|
+
from rasa.agents.core.agent_protocol import AgentProtocol
|
|
29
|
+
from rasa.agents.protocol.mcp.mcp_base_agent import MCPBaseAgent
|
|
30
|
+
from rasa.agents.schemas import AgentInput, AgentOutput, AgentToolSchema
|
|
27
31
|
from rasa.core.actions.action import Action, CustomActionExecutor, RemoteAction
|
|
28
32
|
from rasa.core.actions.custom_action_executor import RetryCustomActionExecutor
|
|
29
33
|
from rasa.core.actions.grpc_custom_action_executor import GRPCCustomActionExecutor
|
|
@@ -49,14 +53,27 @@ from rasa.dialogue_understanding.generator import (
|
|
|
49
53
|
)
|
|
50
54
|
from rasa.dialogue_understanding.generator.flow_retrieval import FlowRetrieval
|
|
51
55
|
from rasa.dialogue_understanding.generator.nlu_command_adapter import NLUCommandAdapter
|
|
56
|
+
from rasa.dialogue_understanding.patterns.internal_error import (
|
|
57
|
+
InternalErrorPatternFlowStackFrame,
|
|
58
|
+
)
|
|
59
|
+
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
52
60
|
from rasa.engine.graph import GraphNode
|
|
53
61
|
from rasa.engine.training.graph_trainer import GraphTrainer
|
|
62
|
+
from rasa.shared.agents.utils import make_agent_identifier
|
|
54
63
|
from rasa.shared.core.domain import Domain
|
|
64
|
+
from rasa.shared.core.events import Event
|
|
55
65
|
from rasa.shared.core.flows import FlowsList
|
|
66
|
+
from rasa.shared.core.flows.steps.call import CallFlowStep
|
|
67
|
+
from rasa.shared.core.slots import Slot
|
|
56
68
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
57
69
|
from rasa.shared.nlu.constants import SET_SLOT_COMMAND
|
|
58
70
|
from rasa.shared.nlu.training_data.message import Message
|
|
59
|
-
from rasa.tracing.constants import
|
|
71
|
+
from rasa.tracing.constants import (
|
|
72
|
+
AGENT_EXECUTION_DURATION_METRIC_NAME,
|
|
73
|
+
MCP_TOOL_EXECUTION_DURATION_METRIC_NAME,
|
|
74
|
+
REQUEST_BODY_SIZE_IN_BYTES_ATTRIBUTE_NAME,
|
|
75
|
+
TOOL_OUTPUT_VALUE_MAX_LENGTH,
|
|
76
|
+
)
|
|
60
77
|
from rasa.tracing.instrumentation import attribute_extractors
|
|
61
78
|
from rasa.tracing.instrumentation.intentless_policy_instrumentation import (
|
|
62
79
|
_instrument_extract_ai_responses,
|
|
@@ -69,11 +86,13 @@ from rasa.tracing.instrumentation.metrics import (
|
|
|
69
86
|
record_compact_llm_command_generator_metrics,
|
|
70
87
|
record_enterprise_search_policy_metrics,
|
|
71
88
|
record_llm_command_generator_metrics,
|
|
89
|
+
record_mcp_agent_llm_metrics,
|
|
72
90
|
record_multi_step_llm_command_generator_metrics,
|
|
73
91
|
record_request_size_in_bytes,
|
|
74
92
|
record_search_ready_llm_command_generator_metrics,
|
|
75
93
|
record_single_step_llm_command_generator_metrics,
|
|
76
94
|
)
|
|
95
|
+
from rasa.tracing.metric_instrument_provider import MetricInstrumentProvider
|
|
77
96
|
from rasa.utils.endpoints import EndpointConfig, concat_url
|
|
78
97
|
|
|
79
98
|
# The `TypeVar` representing the return type for a function to be wrapped.
|
|
@@ -89,6 +108,7 @@ COMMAND_PROCESSOR_MODULE_NAME = (
|
|
|
89
108
|
"rasa.dialogue_understanding.processor.command_processor"
|
|
90
109
|
)
|
|
91
110
|
FLOW_EXECUTOR_MODULE_NAME = "rasa.core.policies.flows.flow_executor"
|
|
111
|
+
AGENT_EXECUTOR_MODULE_NAME = "rasa.core.policies.flows.agent_executor"
|
|
92
112
|
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME = "rasa.dialogue_understanding_test.io"
|
|
93
113
|
|
|
94
114
|
|
|
@@ -244,6 +264,67 @@ def traceable_async(
|
|
|
244
264
|
return async_wrapper
|
|
245
265
|
|
|
246
266
|
|
|
267
|
+
def traceable_module_async(
|
|
268
|
+
fn: Callable[..., Awaitable[S]],
|
|
269
|
+
tracer: Tracer,
|
|
270
|
+
attr_extractor: Optional[Callable[..., Dict[str, Any]]],
|
|
271
|
+
header_extractor: Optional[Callable[..., Dict[str, Any]]],
|
|
272
|
+
metrics_recorder: Optional[Callable],
|
|
273
|
+
) -> Callable[..., Awaitable[S]]:
|
|
274
|
+
"""Wrap a module-level async function with tracing functionality.
|
|
275
|
+
|
|
276
|
+
:param fn: The async function to be wrapped.
|
|
277
|
+
:param tracer: The `Tracer` that shall be used for tracing this function.
|
|
278
|
+
:param attr_extractor: A function that is applied to the function's arguments.
|
|
279
|
+
:param header_extractor: A function that is applied to the function's arguments.
|
|
280
|
+
:param metrics_recorder: A function that records metric measurements.
|
|
281
|
+
:return: The wrapped function.
|
|
282
|
+
"""
|
|
283
|
+
should_extract_args = _check_extractor_argument_list(fn, attr_extractor)
|
|
284
|
+
|
|
285
|
+
@functools.wraps(fn)
|
|
286
|
+
async def async_wrapper(*args: Any, **kwargs: Any) -> S:
|
|
287
|
+
attrs = (
|
|
288
|
+
attr_extractor(*args, **kwargs)
|
|
289
|
+
if attr_extractor and should_extract_args
|
|
290
|
+
else {}
|
|
291
|
+
)
|
|
292
|
+
headers = header_extractor(*args, **kwargs) if header_extractor else {}
|
|
293
|
+
context = extract_tracing_context_from_headers(headers)
|
|
294
|
+
|
|
295
|
+
# Use module name from attrs or fallback to function module
|
|
296
|
+
module_name = attrs.pop("module_name", "")
|
|
297
|
+
if module_name in [
|
|
298
|
+
"command_processor",
|
|
299
|
+
FLOW_EXECUTOR_MODULE_NAME,
|
|
300
|
+
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
301
|
+
]:
|
|
302
|
+
span_name = f"{module_name}.{fn.__name__}"
|
|
303
|
+
else:
|
|
304
|
+
span_name = f"{fn.__module__}.{fn.__name__}"
|
|
305
|
+
|
|
306
|
+
with tracer.start_as_current_span(
|
|
307
|
+
span_name,
|
|
308
|
+
attributes=attrs,
|
|
309
|
+
context=context,
|
|
310
|
+
) as span:
|
|
311
|
+
TraceContextTextMapPropagator().inject(headers)
|
|
312
|
+
|
|
313
|
+
ctx = span.get_span_context()
|
|
314
|
+
logger.debug(
|
|
315
|
+
f"The trace id for the current span '{span_name}' is '{ctx.trace_id}'."
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
result = await fn(*args, **kwargs)
|
|
319
|
+
|
|
320
|
+
if metrics_recorder:
|
|
321
|
+
metrics_recorder(attrs)
|
|
322
|
+
|
|
323
|
+
return result
|
|
324
|
+
|
|
325
|
+
return async_wrapper
|
|
326
|
+
|
|
327
|
+
|
|
247
328
|
def traceable_async_generator(
|
|
248
329
|
fn: Callable[[T, Any, Any], AsyncIterator[S]],
|
|
249
330
|
tracer: Tracer,
|
|
@@ -278,6 +359,9 @@ def traceable_async_generator(
|
|
|
278
359
|
|
|
279
360
|
# This `TypeVar` restricts the agent_class to be instrumented to subclasses of `Agent`.
|
|
280
361
|
AgentType = TypeVar("AgentType", bound=Agent)
|
|
362
|
+
# This `TypeVar` restricts the subagent_class to be instrumented to subclasses of
|
|
363
|
+
# `AgentProtocol`.
|
|
364
|
+
AgentProtocolType = TypeVar("AgentProtocolType", bound=AgentProtocol)
|
|
281
365
|
# This `TypeVar` restricts the processor_class to be instrumented to subclasses of
|
|
282
366
|
# `MessageProcessor`.
|
|
283
367
|
ProcessorType = TypeVar("ProcessorType", bound=MessageProcessor)
|
|
@@ -342,6 +426,7 @@ def instrument(
|
|
|
342
426
|
List[Type[CustomActionExecutor]]
|
|
343
427
|
] = None,
|
|
344
428
|
flow_retrieval_class: Optional[Type[FlowRetrievalType]] = None,
|
|
429
|
+
subagent_classes: Optional[List[Type[AgentProtocolType]]] = None,
|
|
345
430
|
) -> None:
|
|
346
431
|
"""Substitute methods to be traced by their traced counterparts.
|
|
347
432
|
|
|
@@ -395,8 +480,10 @@ def instrument(
|
|
|
395
480
|
to be instrumented. If `None` is given, no `MultiStepLLMCommandGenerator` will
|
|
396
481
|
be instrumented.
|
|
397
482
|
:param custom_action_executor_subclasses: The subclasses of `CustomActionExecutor`
|
|
398
|
-
|
|
399
|
-
|
|
483
|
+
to be instrumented. If `None` is given, no subclass of `CustomActionExecutor`
|
|
484
|
+
will be instrumented.
|
|
485
|
+
:param subagent_classes: The `AgentProtocol` classes to be instrumented.
|
|
486
|
+
If `None` is given, no `AgentProtocol` classes will be instrumented.
|
|
400
487
|
"""
|
|
401
488
|
if agent_class is not None and not class_is_instrumented(agent_class):
|
|
402
489
|
_instrument_method(
|
|
@@ -408,6 +495,49 @@ def instrument(
|
|
|
408
495
|
)
|
|
409
496
|
mark_class_as_instrumented(agent_class)
|
|
410
497
|
|
|
498
|
+
if subagent_classes is not None:
|
|
499
|
+
for subagent_class in subagent_classes:
|
|
500
|
+
if not class_is_instrumented(subagent_class):
|
|
501
|
+
# Instrument _execute_tool_call method if it exists
|
|
502
|
+
if hasattr(subagent_class, "_execute_tool_call"):
|
|
503
|
+
_instrument_execute_tool_call(
|
|
504
|
+
tracer_provider.get_tracer(subagent_class.__module__),
|
|
505
|
+
subagent_class,
|
|
506
|
+
)
|
|
507
|
+
|
|
508
|
+
# Instrument send_message method for MCP agents
|
|
509
|
+
if hasattr(subagent_class, "send_message"):
|
|
510
|
+
_instrument_method(
|
|
511
|
+
tracer_provider.get_tracer(subagent_class.__module__),
|
|
512
|
+
subagent_class,
|
|
513
|
+
"send_message",
|
|
514
|
+
attribute_extractors.extract_attrs_for_mcp_agent_llm_call,
|
|
515
|
+
metrics_recorder=record_mcp_agent_llm_metrics,
|
|
516
|
+
)
|
|
517
|
+
|
|
518
|
+
_instrument_mcp_agent_send_message_response_capture(
|
|
519
|
+
tracer_provider.get_tracer(subagent_class.__module__),
|
|
520
|
+
subagent_class,
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
# Instrument get_available_tools method for MCP agents
|
|
524
|
+
if hasattr(subagent_class, "get_available_tools"):
|
|
525
|
+
_instrument_mcp_agent_get_available_tools_response_capture(
|
|
526
|
+
tracer_provider.get_tracer(subagent_class.__module__),
|
|
527
|
+
subagent_class,
|
|
528
|
+
)
|
|
529
|
+
|
|
530
|
+
# Instrument health check method for A2A agents
|
|
531
|
+
if hasattr(subagent_class, "_perform_health_check"):
|
|
532
|
+
_instrument_method(
|
|
533
|
+
tracer_provider.get_tracer(subagent_class.__module__),
|
|
534
|
+
subagent_class,
|
|
535
|
+
"_perform_health_check",
|
|
536
|
+
attribute_extractors.extract_attrs_for_a2a_agent_perform_health_check,
|
|
537
|
+
)
|
|
538
|
+
|
|
539
|
+
mark_class_as_instrumented(subagent_class)
|
|
540
|
+
|
|
411
541
|
if processor_class is not None and not class_is_instrumented(processor_class):
|
|
412
542
|
_instrument_processor(tracer_provider, processor_class)
|
|
413
543
|
mark_class_as_instrumented(processor_class)
|
|
@@ -443,7 +573,7 @@ def instrument(
|
|
|
443
573
|
tracer_provider.get_tracer(lock_store_class.__module__),
|
|
444
574
|
attribute_extractors.extract_attrs_for_lock_store,
|
|
445
575
|
)
|
|
446
|
-
lock_store_class.lock = contextlib.asynccontextmanager(traced_lock_method) # type: ignore[
|
|
576
|
+
lock_store_class.lock = contextlib.asynccontextmanager(traced_lock_method) # type: ignore[method-assign]
|
|
447
577
|
|
|
448
578
|
logger.debug(f"Instrumented '{lock_store_class.__name__}.lock'.")
|
|
449
579
|
|
|
@@ -761,6 +891,96 @@ def instrument(
|
|
|
761
891
|
mark_class_as_instrumented(custom_action_executor_subclass)
|
|
762
892
|
|
|
763
893
|
|
|
894
|
+
def _instrument_mcp_agent_send_message_response_capture(
|
|
895
|
+
tracer: Tracer, agent_class: Type["MCPBaseAgent"]
|
|
896
|
+
) -> None:
|
|
897
|
+
"""Add response capture to the send_message method."""
|
|
898
|
+
|
|
899
|
+
def tracing_send_message_response_wrapper(fn: Callable) -> Callable:
|
|
900
|
+
@functools.wraps(fn)
|
|
901
|
+
async def wrapper(
|
|
902
|
+
self: "MCPBaseAgent",
|
|
903
|
+
agent_input: "AgentInput",
|
|
904
|
+
) -> "AgentOutput":
|
|
905
|
+
agent_output = await fn(self, agent_input)
|
|
906
|
+
|
|
907
|
+
# Only create response span if there's actually a response to capture
|
|
908
|
+
if agent_output:
|
|
909
|
+
with tracer.start_as_current_span(
|
|
910
|
+
f"{self.__class__.__name__}.{fn.__name__}.llm_response"
|
|
911
|
+
) as span:
|
|
912
|
+
span.set_attributes(
|
|
913
|
+
{
|
|
914
|
+
"agent_output_response_message": (
|
|
915
|
+
agent_output.response_message or ""
|
|
916
|
+
),
|
|
917
|
+
"agent_output_id": str(agent_output.id),
|
|
918
|
+
"agent_output_status": str(agent_output.status),
|
|
919
|
+
"agent_output_events_count": (
|
|
920
|
+
len(agent_output.events) if agent_output.events else 0
|
|
921
|
+
),
|
|
922
|
+
}
|
|
923
|
+
)
|
|
924
|
+
|
|
925
|
+
return agent_output
|
|
926
|
+
|
|
927
|
+
return wrapper
|
|
928
|
+
|
|
929
|
+
agent_class.send_message = tracing_send_message_response_wrapper( # type: ignore[method-assign]
|
|
930
|
+
agent_class.send_message
|
|
931
|
+
)
|
|
932
|
+
logger.debug(
|
|
933
|
+
f"Instrumented '{agent_class.__name__}.send_message' for response capture."
|
|
934
|
+
)
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
def _instrument_mcp_agent_get_available_tools_response_capture(
|
|
938
|
+
tracer: Tracer, agent_class: Type["MCPBaseAgent"]
|
|
939
|
+
) -> None:
|
|
940
|
+
"""Add response capture to the get_available_tools method."""
|
|
941
|
+
|
|
942
|
+
def tracing_get_available_tools_response_wrapper(fn: Callable) -> Callable:
|
|
943
|
+
@functools.wraps(fn)
|
|
944
|
+
def wrapper(
|
|
945
|
+
self: "MCPBaseAgent",
|
|
946
|
+
agent_input: "AgentInput",
|
|
947
|
+
) -> List["AgentToolSchema"]:
|
|
948
|
+
# Call the original method
|
|
949
|
+
available_tools = fn(self, agent_input)
|
|
950
|
+
|
|
951
|
+
# Create a span to capture the tool information
|
|
952
|
+
with tracer.start_as_current_span(
|
|
953
|
+
f"{self.__class__.__name__}.{fn.__name__}"
|
|
954
|
+
) as span:
|
|
955
|
+
# Create a simple dictionary of tool names and descriptions
|
|
956
|
+
tools_dict = {
|
|
957
|
+
tool.name: tool.description or "" for tool in available_tools
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
span.set_attributes(
|
|
961
|
+
{
|
|
962
|
+
"agent_name": self._name,
|
|
963
|
+
"agent_id": str(
|
|
964
|
+
make_agent_identifier(self._name, self.protocol_type)
|
|
965
|
+
),
|
|
966
|
+
"total_available_tools_count": len(available_tools),
|
|
967
|
+
"available_tools": json.dumps(tools_dict),
|
|
968
|
+
}
|
|
969
|
+
)
|
|
970
|
+
|
|
971
|
+
return available_tools
|
|
972
|
+
|
|
973
|
+
return wrapper
|
|
974
|
+
|
|
975
|
+
agent_class.get_available_tools = tracing_get_available_tools_response_wrapper( # type: ignore[method-assign]
|
|
976
|
+
agent_class.get_available_tools
|
|
977
|
+
)
|
|
978
|
+
logger.debug(
|
|
979
|
+
f"Instrumented '{agent_class.__name__}.get_available_tools' "
|
|
980
|
+
f"for response capture."
|
|
981
|
+
)
|
|
982
|
+
|
|
983
|
+
|
|
764
984
|
def _instrument_nlu_command_adapter_predict_commands(
|
|
765
985
|
tracer: Tracer, nlu_command_adapter_class: Type[NLUCommandAdapterType]
|
|
766
986
|
) -> None:
|
|
@@ -790,7 +1010,7 @@ def _instrument_nlu_command_adapter_predict_commands(
|
|
|
790
1010
|
|
|
791
1011
|
return wrapper
|
|
792
1012
|
|
|
793
|
-
nlu_command_adapter_class.predict_commands = ( # type: ignore[
|
|
1013
|
+
nlu_command_adapter_class.predict_commands = ( # type: ignore[method-assign]
|
|
794
1014
|
tracing_nlu_command_adapter_predict_commands_wrapper(
|
|
795
1015
|
nlu_command_adapter_class.predict_commands
|
|
796
1016
|
)
|
|
@@ -839,7 +1059,7 @@ def _instrument_multi_step_llm_command_generator_parse_commands(
|
|
|
839
1059
|
|
|
840
1060
|
return wrapper
|
|
841
1061
|
|
|
842
|
-
multi_step_llm_command_generator_class.parse_commands = ( # type: ignore[
|
|
1062
|
+
multi_step_llm_command_generator_class.parse_commands = ( # type: ignore[method-assign]
|
|
843
1063
|
tracing_multi_step_llm_command_generator_parse_commands_wrapper(
|
|
844
1064
|
multi_step_llm_command_generator_class.parse_commands
|
|
845
1065
|
)
|
|
@@ -873,7 +1093,7 @@ def _instrument_information_retrieval_search(
|
|
|
873
1093
|
|
|
874
1094
|
return wrapper
|
|
875
1095
|
|
|
876
|
-
vector_store_class.search = tracing_information_retrieval_search_wrapper( # type: ignore[
|
|
1096
|
+
vector_store_class.search = tracing_information_retrieval_search_wrapper( # type: ignore[method-assign]
|
|
877
1097
|
vector_store_class.search
|
|
878
1098
|
)
|
|
879
1099
|
|
|
@@ -1013,7 +1233,7 @@ def _instrument_get_tracker(
|
|
|
1013
1233
|
|
|
1014
1234
|
return wrapper
|
|
1015
1235
|
|
|
1016
|
-
processor_class.get_tracker = tracing_get_tracker_wrapper( # type: ignore[
|
|
1236
|
+
processor_class.get_tracker = tracing_get_tracker_wrapper( # type: ignore[method-assign]
|
|
1017
1237
|
processor_class.get_tracker
|
|
1018
1238
|
)
|
|
1019
1239
|
|
|
@@ -1066,6 +1286,21 @@ def _instrument_flow_executor_module(tracer_provider: TracerProvider) -> None:
|
|
|
1066
1286
|
"run_step",
|
|
1067
1287
|
attribute_extractors.extract_attrs_for_run_step,
|
|
1068
1288
|
)
|
|
1289
|
+
# Instrument the agent execution function
|
|
1290
|
+
_instrument_call_agent_with_retry(
|
|
1291
|
+
tracer_provider.get_tracer(FLOW_EXECUTOR_MODULE_NAME),
|
|
1292
|
+
AGENT_EXECUTOR_MODULE_NAME,
|
|
1293
|
+
)
|
|
1294
|
+
# Instrument the MCP tool execution function
|
|
1295
|
+
_instrument_execute_mcp_tool_call(
|
|
1296
|
+
tracer_provider.get_tracer("rasa.core.policies.flows.mcp_tool_executor"),
|
|
1297
|
+
"rasa.core.policies.flows.mcp_tool_executor",
|
|
1298
|
+
)
|
|
1299
|
+
# Instrument agent internal state transitions
|
|
1300
|
+
_instrument_agent_internal_state_transitions(
|
|
1301
|
+
tracer_provider.get_tracer(FLOW_EXECUTOR_MODULE_NAME),
|
|
1302
|
+
FLOW_EXECUTOR_MODULE_NAME,
|
|
1303
|
+
)
|
|
1069
1304
|
mark_module_as_instrumented(FLOW_EXECUTOR_MODULE_NAME)
|
|
1070
1305
|
|
|
1071
1306
|
|
|
@@ -1088,13 +1323,16 @@ def _instrument_advance_flows_until_next_action(
|
|
|
1088
1323
|
) -> None:
|
|
1089
1324
|
def tracing_advance_flows_until_next_action_wrapper(fn: Callable) -> Callable:
|
|
1090
1325
|
@functools.wraps(fn)
|
|
1091
|
-
def wrapper(
|
|
1326
|
+
async def wrapper(
|
|
1092
1327
|
tracker: DialogueStateTracker,
|
|
1093
1328
|
available_actions: List[str],
|
|
1094
1329
|
flows: FlowsList,
|
|
1330
|
+
slots: List[Slot],
|
|
1095
1331
|
) -> FlowActionPrediction:
|
|
1096
1332
|
with tracer.start_as_current_span(f"{module_name}.{fn.__name__}") as span:
|
|
1097
|
-
prediction: FlowActionPrediction = fn(
|
|
1333
|
+
prediction: FlowActionPrediction = await fn(
|
|
1334
|
+
tracker, available_actions, flows, slots
|
|
1335
|
+
)
|
|
1098
1336
|
|
|
1099
1337
|
span.set_attributes(
|
|
1100
1338
|
{
|
|
@@ -1129,6 +1367,288 @@ def _instrument_advance_flows_until_next_action(
|
|
|
1129
1367
|
)
|
|
1130
1368
|
|
|
1131
1369
|
|
|
1370
|
+
def _instrument_call_agent_with_retry(
|
|
1371
|
+
tracer: Tracer,
|
|
1372
|
+
module_name: str,
|
|
1373
|
+
) -> None:
|
|
1374
|
+
"""Instrument the actual agent execution function to capture inputs/outputs."""
|
|
1375
|
+
module = importlib.import_module(module_name)
|
|
1376
|
+
|
|
1377
|
+
original_function = getattr(module, "_call_agent_with_retry")
|
|
1378
|
+
|
|
1379
|
+
@functools.wraps(original_function)
|
|
1380
|
+
async def traced_call_agent_with_retry(
|
|
1381
|
+
agent_name: str,
|
|
1382
|
+
protocol_type: Any,
|
|
1383
|
+
agent_input: Any,
|
|
1384
|
+
max_retries: int,
|
|
1385
|
+
) -> Any:
|
|
1386
|
+
agent_input_attrs = {
|
|
1387
|
+
"agent_name": agent_name,
|
|
1388
|
+
"protocol_type": str(protocol_type),
|
|
1389
|
+
"max_retries": max_retries,
|
|
1390
|
+
"agent_input_id": agent_input.id,
|
|
1391
|
+
"agent_input_user_message": agent_input.user_message,
|
|
1392
|
+
"agent_input_slots_count": len(agent_input.slots),
|
|
1393
|
+
"agent_input_events_count": len(agent_input.events),
|
|
1394
|
+
"agent_input_conversation_history_length": len(
|
|
1395
|
+
agent_input.conversation_history
|
|
1396
|
+
),
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
if agent_input.metadata:
|
|
1400
|
+
agent_input_attrs["agent_input_metadata"] = json.dumps(
|
|
1401
|
+
agent_input.metadata, sort_keys=True
|
|
1402
|
+
)
|
|
1403
|
+
|
|
1404
|
+
span_name = f"{module_name}._call_agent_with_retry"
|
|
1405
|
+
with tracer.start_as_current_span(
|
|
1406
|
+
span_name, attributes=agent_input_attrs
|
|
1407
|
+
) as span:
|
|
1408
|
+
start_time = time.perf_counter_ns()
|
|
1409
|
+
result = await original_function(
|
|
1410
|
+
agent_name, protocol_type, agent_input, max_retries
|
|
1411
|
+
)
|
|
1412
|
+
end_time = time.perf_counter_ns()
|
|
1413
|
+
duration_ns = end_time - start_time
|
|
1414
|
+
|
|
1415
|
+
span.set_attribute(AGENT_EXECUTION_DURATION_METRIC_NAME, duration_ns)
|
|
1416
|
+
span.set_attribute("agent_output_id", str(result.id))
|
|
1417
|
+
span.set_attribute("agent_output_status", str(result.status))
|
|
1418
|
+
|
|
1419
|
+
instrument_provider = MetricInstrumentProvider()
|
|
1420
|
+
if not instrument_provider.instruments:
|
|
1421
|
+
logger.warning(
|
|
1422
|
+
"MetricInstrumentProvider has no instruments registered. "
|
|
1423
|
+
"Agent execution metrics will not be recorded."
|
|
1424
|
+
)
|
|
1425
|
+
else:
|
|
1426
|
+
agent_metric = instrument_provider.get_instrument(
|
|
1427
|
+
AGENT_EXECUTION_DURATION_METRIC_NAME
|
|
1428
|
+
)
|
|
1429
|
+
if agent_metric is None:
|
|
1430
|
+
logger.warning(
|
|
1431
|
+
f"Failed to get instrument "
|
|
1432
|
+
f"'{AGENT_EXECUTION_DURATION_METRIC_NAME}'. "
|
|
1433
|
+
f"Agent execution metrics will not be recorded."
|
|
1434
|
+
)
|
|
1435
|
+
else:
|
|
1436
|
+
agent_metric_attrs = {
|
|
1437
|
+
"agent_name": agent_name,
|
|
1438
|
+
"protocol_type": str(protocol_type),
|
|
1439
|
+
"status": str(result.status),
|
|
1440
|
+
}
|
|
1441
|
+
agent_metric.record(
|
|
1442
|
+
amount=duration_ns, attributes=agent_metric_attrs
|
|
1443
|
+
)
|
|
1444
|
+
|
|
1445
|
+
if result.response_message:
|
|
1446
|
+
span.set_attribute(
|
|
1447
|
+
"agent_output_response_message", result.response_message
|
|
1448
|
+
)
|
|
1449
|
+
|
|
1450
|
+
if result.events:
|
|
1451
|
+
span.set_attribute("agent_output_events_count", len(result.events))
|
|
1452
|
+
|
|
1453
|
+
if result.structured_results:
|
|
1454
|
+
span.set_attribute(
|
|
1455
|
+
"agent_output_structured_results_count",
|
|
1456
|
+
len(result.structured_results),
|
|
1457
|
+
)
|
|
1458
|
+
|
|
1459
|
+
if result.error_message:
|
|
1460
|
+
span.set_attribute("agent_output_error", result.error_message)
|
|
1461
|
+
|
|
1462
|
+
if result.metadata:
|
|
1463
|
+
span.set_attribute("agent_output_metadata", json.dumps(result.metadata))
|
|
1464
|
+
|
|
1465
|
+
return result
|
|
1466
|
+
|
|
1467
|
+
setattr(module, "_call_agent_with_retry", traced_call_agent_with_retry)
|
|
1468
|
+
logger.debug(
|
|
1469
|
+
f"Instrumented function '_call_agent_with_retry' in module '{module_name}'"
|
|
1470
|
+
)
|
|
1471
|
+
|
|
1472
|
+
|
|
1473
|
+
def _instrument_execute_mcp_tool_call(
|
|
1474
|
+
tracer: Tracer,
|
|
1475
|
+
module_name: str,
|
|
1476
|
+
) -> None:
|
|
1477
|
+
"""Instrument the actual MCP tool execution function to capture inputs/outputs."""
|
|
1478
|
+
module = importlib.import_module(module_name)
|
|
1479
|
+
|
|
1480
|
+
original_function = getattr(module, "_execute_mcp_tool_call")
|
|
1481
|
+
|
|
1482
|
+
@functools.wraps(original_function)
|
|
1483
|
+
async def traced_execute_mcp_tool_call(
|
|
1484
|
+
initial_events: List[Event],
|
|
1485
|
+
stack: DialogueStack,
|
|
1486
|
+
step: "CallFlowStep",
|
|
1487
|
+
tracker: DialogueStateTracker,
|
|
1488
|
+
) -> Any:
|
|
1489
|
+
tool_input_attrs = {
|
|
1490
|
+
"tool_id": step.call,
|
|
1491
|
+
"mcp_server": step.mcp_server or "unknown",
|
|
1492
|
+
"execution_context": "flow",
|
|
1493
|
+
"tool_input_mapping": (
|
|
1494
|
+
json.dumps(step.mapping["input"])
|
|
1495
|
+
if step.mapping and "input" in step.mapping
|
|
1496
|
+
else "{}"
|
|
1497
|
+
),
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
if step.mapping and "input" in step.mapping and step.mapping["input"]:
|
|
1501
|
+
try:
|
|
1502
|
+
from rasa.core.policies.flows.mcp_tool_executor import (
|
|
1503
|
+
_prepare_tool_arguments,
|
|
1504
|
+
)
|
|
1505
|
+
|
|
1506
|
+
arguments = _prepare_tool_arguments(step.mapping["input"], tracker)
|
|
1507
|
+
tool_input_attrs["tool_input_arguments"] = json.dumps(arguments)
|
|
1508
|
+
except Exception as e:
|
|
1509
|
+
logger.warning(f"Failed to prepare tool arguments: {e}")
|
|
1510
|
+
tool_input_attrs["tool_input_arguments"] = "{}"
|
|
1511
|
+
|
|
1512
|
+
span_name = f"{module_name}._execute_mcp_tool_call"
|
|
1513
|
+
with tracer.start_as_current_span(
|
|
1514
|
+
span_name, attributes=tool_input_attrs
|
|
1515
|
+
) as span:
|
|
1516
|
+
start_time = time.perf_counter_ns()
|
|
1517
|
+
result = await original_function(initial_events, stack, step, tracker)
|
|
1518
|
+
end_time = time.perf_counter_ns()
|
|
1519
|
+
duration_ns = end_time - start_time
|
|
1520
|
+
|
|
1521
|
+
span.set_attribute(MCP_TOOL_EXECUTION_DURATION_METRIC_NAME, duration_ns)
|
|
1522
|
+
|
|
1523
|
+
# Count events that were generated by the tool execution
|
|
1524
|
+
# Success: result.events contains initial_events + new tool events
|
|
1525
|
+
# Error: result.events contains only initial_events (unchanged)
|
|
1526
|
+
tool_generated_events_count = len(result.events) - len(initial_events)
|
|
1527
|
+
span.set_attribute("tool_output_events_count", tool_generated_events_count)
|
|
1528
|
+
|
|
1529
|
+
instrument_provider = MetricInstrumentProvider()
|
|
1530
|
+
if not instrument_provider.instruments:
|
|
1531
|
+
logger.warning(
|
|
1532
|
+
"MetricInstrumentProvider has no instruments registered. "
|
|
1533
|
+
"MCP tool execution metrics will not be recorded."
|
|
1534
|
+
)
|
|
1535
|
+
else:
|
|
1536
|
+
tool_metric = instrument_provider.get_instrument(
|
|
1537
|
+
MCP_TOOL_EXECUTION_DURATION_METRIC_NAME
|
|
1538
|
+
)
|
|
1539
|
+
if tool_metric is None:
|
|
1540
|
+
logger.warning(
|
|
1541
|
+
f"Failed to get instrument "
|
|
1542
|
+
f"'{MCP_TOOL_EXECUTION_DURATION_METRIC_NAME}'. "
|
|
1543
|
+
"MCP tool execution metrics will not be recorded."
|
|
1544
|
+
)
|
|
1545
|
+
else:
|
|
1546
|
+
success = "true"
|
|
1547
|
+
if len(result.events) == len(initial_events):
|
|
1548
|
+
for frame in stack.frames:
|
|
1549
|
+
if isinstance(frame, InternalErrorPatternFlowStackFrame):
|
|
1550
|
+
success = "false"
|
|
1551
|
+
break
|
|
1552
|
+
tool_metric_attrs = {
|
|
1553
|
+
"tool_id": step.call,
|
|
1554
|
+
"mcp_server": step.mcp_server or "unknown",
|
|
1555
|
+
"execution_context": "flow",
|
|
1556
|
+
"success": success,
|
|
1557
|
+
}
|
|
1558
|
+
tool_metric.record(amount=duration_ns, attributes=tool_metric_attrs)
|
|
1559
|
+
|
|
1560
|
+
tool_output_events = []
|
|
1561
|
+
if result.events and len(result.events) > len(initial_events):
|
|
1562
|
+
for event in result.events[len(initial_events) :]:
|
|
1563
|
+
if hasattr(event, "key") and hasattr(event, "value"):
|
|
1564
|
+
tool_output_events.append(
|
|
1565
|
+
{
|
|
1566
|
+
"slot": str(event.key),
|
|
1567
|
+
"value": (
|
|
1568
|
+
str(event.value)[:TOOL_OUTPUT_VALUE_MAX_LENGTH]
|
|
1569
|
+
if event.value
|
|
1570
|
+
else None
|
|
1571
|
+
),
|
|
1572
|
+
}
|
|
1573
|
+
)
|
|
1574
|
+
|
|
1575
|
+
if tool_output_events:
|
|
1576
|
+
span.set_attribute("tool_output_slots", json.dumps(tool_output_events))
|
|
1577
|
+
|
|
1578
|
+
return result
|
|
1579
|
+
|
|
1580
|
+
setattr(module, "_execute_mcp_tool_call", traced_execute_mcp_tool_call)
|
|
1581
|
+
logger.debug(
|
|
1582
|
+
f"Instrumented function '_execute_mcp_tool_call' in module '{module_name}'"
|
|
1583
|
+
)
|
|
1584
|
+
|
|
1585
|
+
|
|
1586
|
+
def _instrument_execute_tool_call(
|
|
1587
|
+
tracer: Tracer,
|
|
1588
|
+
agent_class: Type[AgentProtocolType],
|
|
1589
|
+
) -> None:
|
|
1590
|
+
"""Instrument the agent's _execute_tool_call method."""
|
|
1591
|
+
original_method = getattr(agent_class, "_execute_tool_call")
|
|
1592
|
+
|
|
1593
|
+
@functools.wraps(original_method)
|
|
1594
|
+
async def traced_execute_tool_call(
|
|
1595
|
+
self: AgentProtocolType, tool_name: str, arguments: Dict[str, Any]
|
|
1596
|
+
) -> Any:
|
|
1597
|
+
tool_input_attrs = {
|
|
1598
|
+
"tool_name": tool_name,
|
|
1599
|
+
"tool_arguments": json.dumps(arguments, sort_keys=True),
|
|
1600
|
+
"agent_name": getattr(self, "_name", None),
|
|
1601
|
+
"protocol_type": str(self.protocol_type),
|
|
1602
|
+
"execution_context": "agent",
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
span_name = f"{agent_class.__name__}._execute_tool_call"
|
|
1606
|
+
with tracer.start_as_current_span(
|
|
1607
|
+
span_name, attributes=tool_input_attrs
|
|
1608
|
+
) as span:
|
|
1609
|
+
start_time = time.perf_counter_ns()
|
|
1610
|
+
result = await original_method(self, tool_name, arguments)
|
|
1611
|
+
end_time = time.perf_counter_ns()
|
|
1612
|
+
duration_ns = end_time - start_time
|
|
1613
|
+
|
|
1614
|
+
# Set execution time
|
|
1615
|
+
span.set_attribute("tool_execution_duration_ns", duration_ns)
|
|
1616
|
+
|
|
1617
|
+
# Set tool result attributes
|
|
1618
|
+
span.set_attribute("tool_result_name", result.tool_name)
|
|
1619
|
+
span.set_attribute("tool_result_is_error", result.is_error)
|
|
1620
|
+
|
|
1621
|
+
if result.result:
|
|
1622
|
+
# Truncate result if too long
|
|
1623
|
+
result_str = str(result.result)
|
|
1624
|
+
if len(result_str) > TOOL_OUTPUT_VALUE_MAX_LENGTH:
|
|
1625
|
+
result_str = result_str[:TOOL_OUTPUT_VALUE_MAX_LENGTH] + "..."
|
|
1626
|
+
span.set_attribute("tool_result_content", result_str)
|
|
1627
|
+
|
|
1628
|
+
if result.error_message:
|
|
1629
|
+
span.set_attribute("tool_result_error_message", result.error_message)
|
|
1630
|
+
|
|
1631
|
+
# Record metrics
|
|
1632
|
+
instrument_provider = MetricInstrumentProvider()
|
|
1633
|
+
if instrument_provider.instruments:
|
|
1634
|
+
tool_metric = instrument_provider.get_instrument(
|
|
1635
|
+
MCP_TOOL_EXECUTION_DURATION_METRIC_NAME
|
|
1636
|
+
)
|
|
1637
|
+
if tool_metric:
|
|
1638
|
+
tool_metric_attrs = {
|
|
1639
|
+
"tool_name": tool_name,
|
|
1640
|
+
"agent_name": getattr(self, "_name", None),
|
|
1641
|
+
"execution_context": "agent",
|
|
1642
|
+
"success": "false" if result.is_error else "true",
|
|
1643
|
+
}
|
|
1644
|
+
tool_metric.record(amount=duration_ns, attributes=tool_metric_attrs)
|
|
1645
|
+
|
|
1646
|
+
return result
|
|
1647
|
+
|
|
1648
|
+
setattr(agent_class, "_execute_tool_call", traced_execute_tool_call)
|
|
1649
|
+
logger.debug(f"Instrumented '{agent_class.__name__}._execute_tool_call'.")
|
|
1650
|
+
|
|
1651
|
+
|
|
1132
1652
|
def _instrument_method(
|
|
1133
1653
|
tracer: Tracer,
|
|
1134
1654
|
instrumented_class: Type,
|
|
@@ -1156,7 +1676,11 @@ def _instrument_function(
|
|
|
1156
1676
|
module = importlib.import_module(module_name)
|
|
1157
1677
|
function_to_trace = getattr(module, function_name)
|
|
1158
1678
|
traced_function = _wrap_with_tracing_decorator(
|
|
1159
|
-
function_to_trace,
|
|
1679
|
+
function_to_trace,
|
|
1680
|
+
tracer,
|
|
1681
|
+
attr_extractor,
|
|
1682
|
+
header_extractor,
|
|
1683
|
+
is_module_function=True,
|
|
1160
1684
|
)
|
|
1161
1685
|
|
|
1162
1686
|
setattr(module, function_name, traced_function)
|
|
@@ -1172,15 +1696,27 @@ def _wrap_with_tracing_decorator(
|
|
|
1172
1696
|
attr_extractor: Optional[Callable],
|
|
1173
1697
|
header_extractor: Optional[Callable] = None,
|
|
1174
1698
|
metrics_recorder: Optional[Callable] = None,
|
|
1699
|
+
is_module_function: bool = False,
|
|
1175
1700
|
) -> Callable:
|
|
1176
1701
|
if inspect.iscoroutinefunction(callable_to_trace):
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1702
|
+
if is_module_function:
|
|
1703
|
+
# This is a module-level async function
|
|
1704
|
+
traced_callable = traceable_module_async(
|
|
1705
|
+
callable_to_trace,
|
|
1706
|
+
tracer,
|
|
1707
|
+
attr_extractor,
|
|
1708
|
+
header_extractor,
|
|
1709
|
+
metrics_recorder,
|
|
1710
|
+
)
|
|
1711
|
+
else:
|
|
1712
|
+
# This is a class method
|
|
1713
|
+
traced_callable = traceable_async(
|
|
1714
|
+
callable_to_trace,
|
|
1715
|
+
tracer,
|
|
1716
|
+
attr_extractor,
|
|
1717
|
+
header_extractor,
|
|
1718
|
+
metrics_recorder,
|
|
1719
|
+
)
|
|
1184
1720
|
else:
|
|
1185
1721
|
traced_callable = traceable(
|
|
1186
1722
|
callable_to_trace, tracer, attr_extractor, metrics_recorder
|
|
@@ -1223,7 +1759,7 @@ def _instrument_run_action(
|
|
|
1223
1759
|
|
|
1224
1760
|
return wrapper
|
|
1225
1761
|
|
|
1226
|
-
processor_class._run_action = tracing_run_action_wrapper( # type: ignore[
|
|
1762
|
+
processor_class._run_action = tracing_run_action_wrapper( # type: ignore[method-assign]
|
|
1227
1763
|
processor_class._run_action
|
|
1228
1764
|
)
|
|
1229
1765
|
|
|
@@ -1282,7 +1818,7 @@ def _instrument_endpoint_config(
|
|
|
1282
1818
|
|
|
1283
1819
|
return wrapper
|
|
1284
1820
|
|
|
1285
|
-
endpoint_config_class.request = tracing_endpoint_config_wrapper( # type: ignore[
|
|
1821
|
+
endpoint_config_class.request = tracing_endpoint_config_wrapper( # type: ignore[method-assign]
|
|
1286
1822
|
endpoint_config_class.request
|
|
1287
1823
|
)
|
|
1288
1824
|
|
|
@@ -1314,7 +1850,7 @@ def _instrument_grpc_custom_action_executor(
|
|
|
1314
1850
|
|
|
1315
1851
|
return wrapper
|
|
1316
1852
|
|
|
1317
|
-
grpc_custom_action_executor_class.run = tracing_grpc_custom_action_executor_wrapper( # type: ignore[
|
|
1853
|
+
grpc_custom_action_executor_class.run = tracing_grpc_custom_action_executor_wrapper( # type: ignore[method-assign]
|
|
1318
1854
|
grpc_custom_action_executor_class.run
|
|
1319
1855
|
)
|
|
1320
1856
|
|
|
@@ -1411,3 +1947,72 @@ def mark_module_as_instrumented(module_name: Text) -> None:
|
|
|
1411
1947
|
module = importlib.import_module(module_name)
|
|
1412
1948
|
if not module_is_instrumented(module_name):
|
|
1413
1949
|
setattr(module, _instrumented_module_boolean_attribute_name(module_name), True)
|
|
1950
|
+
|
|
1951
|
+
|
|
1952
|
+
def _instrument_agent_internal_state_transitions(
|
|
1953
|
+
tracer: Tracer,
|
|
1954
|
+
module_name: str,
|
|
1955
|
+
) -> None:
|
|
1956
|
+
"""Instrument agent internal state transitions."""
|
|
1957
|
+
# Import agent stack frame
|
|
1958
|
+
from rasa.dialogue_understanding.stack.frames.flow_stack_frame import (
|
|
1959
|
+
AgentStackFrame,
|
|
1960
|
+
)
|
|
1961
|
+
|
|
1962
|
+
# Store original __setattr__ method
|
|
1963
|
+
original_setattr = AgentStackFrame.__setattr__
|
|
1964
|
+
|
|
1965
|
+
def traced_setattr(self: object, name: str, value: Any) -> None:
|
|
1966
|
+
# Type assertion: we know this is called only on AgentStackFrame instances
|
|
1967
|
+
agent_frame = cast("AgentStackFrame", self)
|
|
1968
|
+
|
|
1969
|
+
# Check if we're setting the state field
|
|
1970
|
+
if name == "state":
|
|
1971
|
+
# Get current state before change
|
|
1972
|
+
current_state = agent_frame.state
|
|
1973
|
+
|
|
1974
|
+
# Call original setattr
|
|
1975
|
+
original_setattr(self, name, value)
|
|
1976
|
+
|
|
1977
|
+
# Track state transition if state actually changed
|
|
1978
|
+
if current_state != value:
|
|
1979
|
+
_track_agent_internal_state_transition(
|
|
1980
|
+
tracer=tracer,
|
|
1981
|
+
agent_id=agent_frame.agent_id,
|
|
1982
|
+
flow_id=agent_frame.flow_id,
|
|
1983
|
+
from_state=current_state.value,
|
|
1984
|
+
to_state=value.value,
|
|
1985
|
+
step_id=agent_frame.step_id,
|
|
1986
|
+
)
|
|
1987
|
+
else:
|
|
1988
|
+
# For other attributes, just call original setattr
|
|
1989
|
+
original_setattr(self, name, value)
|
|
1990
|
+
|
|
1991
|
+
# Replace the __setattr__ method with our traced version
|
|
1992
|
+
AgentStackFrame.__setattr__ = traced_setattr # type: ignore[method-assign]
|
|
1993
|
+
|
|
1994
|
+
|
|
1995
|
+
def _track_agent_internal_state_transition(
|
|
1996
|
+
tracer: Tracer,
|
|
1997
|
+
agent_id: str,
|
|
1998
|
+
flow_id: str,
|
|
1999
|
+
from_state: str,
|
|
2000
|
+
to_state: str,
|
|
2001
|
+
step_id: str,
|
|
2002
|
+
) -> None:
|
|
2003
|
+
"""Track an agent internal state transition."""
|
|
2004
|
+
# Create span for state transition
|
|
2005
|
+
span_name = "AgentStackFrame.state_transition"
|
|
2006
|
+
with tracer.start_as_current_span(
|
|
2007
|
+
span_name,
|
|
2008
|
+
attributes={
|
|
2009
|
+
"agent_id": agent_id,
|
|
2010
|
+
"flow_id": flow_id,
|
|
2011
|
+
"from_state": from_state,
|
|
2012
|
+
"to_state": to_state,
|
|
2013
|
+
"step_id": step_id,
|
|
2014
|
+
},
|
|
2015
|
+
):
|
|
2016
|
+
# Context manager ensures proper span lifecycle (start/end)
|
|
2017
|
+
# No additional work needed - span attributes are set at creation
|
|
2018
|
+
pass
|