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
|
@@ -35,8 +35,6 @@ class DirectCustomActionExecutor(CustomActionExecutor):
|
|
|
35
35
|
self.action_name = action_name
|
|
36
36
|
self.action_endpoint = action_endpoint
|
|
37
37
|
self.action_executor = self._create_action_executor()
|
|
38
|
-
self.register_actions_from_a_module()
|
|
39
|
-
self.action_executor.reload()
|
|
40
38
|
|
|
41
39
|
@staticmethod
|
|
42
40
|
@lru_cache(maxsize=1)
|
|
@@ -88,12 +86,21 @@ class DirectCustomActionExecutor(CustomActionExecutor):
|
|
|
88
86
|
|
|
89
87
|
Returns:
|
|
90
88
|
The response from the execution of the custom action.
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
RasaException: If the actions module specified does not exist.
|
|
91
92
|
"""
|
|
92
93
|
structlogger.debug(
|
|
93
94
|
"action.direct_custom_action_executor.run",
|
|
94
95
|
action_name=self.action_name,
|
|
95
96
|
)
|
|
96
97
|
|
|
98
|
+
# Register actions module if not already registered.
|
|
99
|
+
# This is done here instead of __init__ to allow proper
|
|
100
|
+
# exception handling and avoid hanging conversations.
|
|
101
|
+
self.register_actions_from_a_module()
|
|
102
|
+
self.action_executor.reload()
|
|
103
|
+
|
|
97
104
|
tracker_state = tracker.current_state(EventVerbosity.ALL)
|
|
98
105
|
action_call = {
|
|
99
106
|
"next_action": self.action_name,
|
|
@@ -152,7 +152,7 @@ class GRPCCustomActionExecutor(CustomActionExecutor):
|
|
|
152
152
|
structlogger.error(
|
|
153
153
|
"rasa.core.actions.grpc_custom_action_executor.domain_not_found",
|
|
154
154
|
event_info=(
|
|
155
|
-
f"Failed to execute custom action '{self.
|
|
155
|
+
f"Failed to execute custom action '{self.action_name}'. "
|
|
156
156
|
f"Could not find domain. {resource_not_found_error.message}"
|
|
157
157
|
),
|
|
158
158
|
)
|
rasa/core/agent.py
CHANGED
|
@@ -12,9 +12,11 @@ import aiohttp
|
|
|
12
12
|
from aiohttp import ClientError
|
|
13
13
|
|
|
14
14
|
import rasa.shared.utils.io
|
|
15
|
+
from rasa.agents.utils import initialize_agents
|
|
15
16
|
from rasa.core import jobs
|
|
16
|
-
from rasa.core.
|
|
17
|
+
from rasa.core.available_agents import AvailableAgents
|
|
17
18
|
from rasa.core.channels.channel import OutputChannel, UserMessage
|
|
19
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
18
20
|
from rasa.core.constants import DEFAULT_REQUEST_TIMEOUT
|
|
19
21
|
from rasa.core.exceptions import AgentNotReady
|
|
20
22
|
from rasa.core.http_interpreter import RasaNLUHttpInterpreter
|
|
@@ -34,7 +36,7 @@ from rasa.privacy.privacy_manager import BackgroundPrivacyManager
|
|
|
34
36
|
from rasa.shared.constants import DEFAULT_SENDER_ID
|
|
35
37
|
from rasa.shared.core.domain import Domain
|
|
36
38
|
from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
|
|
37
|
-
from rasa.shared.exceptions import RasaException
|
|
39
|
+
from rasa.shared.exceptions import AgentInitializationException, RasaException
|
|
38
40
|
from rasa.telemetry import track_privacy_enabled
|
|
39
41
|
from rasa.utils.common import TempDirectoryPath, get_temp_dir_name
|
|
40
42
|
from rasa.utils.endpoints import EndpointConfig
|
|
@@ -202,6 +204,7 @@ async def load_agent(
|
|
|
202
204
|
model_server: Optional[EndpointConfig] = None,
|
|
203
205
|
remote_storage: Optional[StorageType] = None,
|
|
204
206
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
207
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
205
208
|
loop: Optional[AbstractEventLoop] = None,
|
|
206
209
|
) -> Agent:
|
|
207
210
|
"""Loads agent from server, remote storage or disk.
|
|
@@ -211,6 +214,7 @@ async def load_agent(
|
|
|
211
214
|
model_server: Configuration for a potential server which serves the model.
|
|
212
215
|
remote_storage: Remote storage to use for loading the model.
|
|
213
216
|
endpoints: Endpoint configuration.
|
|
217
|
+
sub_agents: Sub-agents configuration.
|
|
214
218
|
loop: Optional async loop to pass to broker creation.
|
|
215
219
|
|
|
216
220
|
Returns:
|
|
@@ -281,8 +285,19 @@ async def load_agent(
|
|
|
281
285
|
"No valid configuration given to load agent. "
|
|
282
286
|
"Agent loaded with no model!"
|
|
283
287
|
)
|
|
288
|
+
|
|
289
|
+
if agent.processor and sub_agents:
|
|
290
|
+
flows = await agent.processor.get_flows()
|
|
291
|
+
# CLI commands that accept --sub-agents
|
|
292
|
+
# all route through this entry point.
|
|
293
|
+
# With all required data available,
|
|
294
|
+
# this is the best spot to initialize the subagents.
|
|
295
|
+
await initialize_agents(flows, sub_agents)
|
|
296
|
+
|
|
284
297
|
return agent
|
|
285
298
|
|
|
299
|
+
except AgentInitializationException as e:
|
|
300
|
+
raise e
|
|
286
301
|
except Exception as e:
|
|
287
302
|
logger.error(f"Could not load model due to {e}.", exc_info=True)
|
|
288
303
|
return agent
|
|
@@ -322,6 +337,7 @@ class Agent:
|
|
|
322
337
|
remote_storage: Optional[StorageType] = None,
|
|
323
338
|
http_interpreter: Optional[RasaNLUHttpInterpreter] = None,
|
|
324
339
|
endpoints: Optional[AvailableEndpoints] = None,
|
|
340
|
+
sub_agents: Optional[AvailableAgents] = None,
|
|
325
341
|
privacy_manager: Optional[BackgroundPrivacyManager] = None,
|
|
326
342
|
):
|
|
327
343
|
"""Initializes an `Agent`."""
|
|
@@ -334,6 +350,7 @@ class Agent:
|
|
|
334
350
|
self.action_endpoint = action_endpoint
|
|
335
351
|
self.http_interpreter = http_interpreter
|
|
336
352
|
self.endpoints = endpoints
|
|
353
|
+
self.sub_agents = sub_agents
|
|
337
354
|
|
|
338
355
|
self._set_fingerprint(fingerprint)
|
|
339
356
|
self.model_server = model_server
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
6
|
+
|
|
7
|
+
import structlog
|
|
8
|
+
from pydantic import BaseModel, Field, model_validator
|
|
9
|
+
from ruamel import yaml as yaml
|
|
10
|
+
|
|
11
|
+
from rasa.exceptions import ValidationError
|
|
12
|
+
from rasa.utils.singleton import Singleton
|
|
13
|
+
|
|
14
|
+
DEFAULT_AGENTS_CONFIG_FOLDER = "sub_agents"
|
|
15
|
+
|
|
16
|
+
structlogger = structlog.get_logger()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ProtocolConfig(str, Enum):
|
|
20
|
+
"""Supported protocols for agents."""
|
|
21
|
+
|
|
22
|
+
RASA = "RASA"
|
|
23
|
+
A2A = "A2A"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AgentInfo(BaseModel):
|
|
27
|
+
"""Configuration for an agent."""
|
|
28
|
+
|
|
29
|
+
name: str = Field(..., description="Agent name")
|
|
30
|
+
protocol: ProtocolConfig = Field(
|
|
31
|
+
default=ProtocolConfig.RASA,
|
|
32
|
+
description="Protocol used to communicate with the agent.",
|
|
33
|
+
)
|
|
34
|
+
description: str = Field(..., description="Agent description")
|
|
35
|
+
|
|
36
|
+
@model_validator(mode="before")
|
|
37
|
+
@classmethod
|
|
38
|
+
def validate_protocol(cls, values: Any) -> Any:
|
|
39
|
+
"""Validate and normalize protocol values to support lowercase input."""
|
|
40
|
+
if isinstance(values, dict) and "protocol" in values:
|
|
41
|
+
protocol_value = values["protocol"]
|
|
42
|
+
if isinstance(protocol_value, str):
|
|
43
|
+
# Map lowercase protocol names to uppercase enum values
|
|
44
|
+
protocol_mapping = {
|
|
45
|
+
"rasa": ProtocolConfig.RASA,
|
|
46
|
+
"a2a": ProtocolConfig.A2A,
|
|
47
|
+
"RASA": ProtocolConfig.RASA,
|
|
48
|
+
"A2A": ProtocolConfig.A2A,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if protocol_value.lower() in protocol_mapping:
|
|
52
|
+
values["protocol"] = protocol_mapping[protocol_value.lower()]
|
|
53
|
+
else:
|
|
54
|
+
# If it's not a recognized protocol, let Pydantic handle the
|
|
55
|
+
# validation
|
|
56
|
+
# This will raise a proper validation error
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
return values
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class AgentConfiguration(BaseModel):
|
|
63
|
+
llm: Optional[Dict[str, Any]] = None
|
|
64
|
+
prompt_template: Optional[str] = None
|
|
65
|
+
module: Optional[str] = None
|
|
66
|
+
timeout: Optional[int] = None # timeout in seconds
|
|
67
|
+
max_retries: Optional[int] = None
|
|
68
|
+
agent_card: Optional[str] = None
|
|
69
|
+
auth: Optional[Dict[str, Any]] = None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class AgentConnections(BaseModel):
|
|
73
|
+
mcp_servers: Optional[List[AgentMCPServerConfig]] = None
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class AgentMCPServerConfig(BaseModel):
|
|
77
|
+
name: str # Reference to MCPServerConfig
|
|
78
|
+
url: Optional[str] = None
|
|
79
|
+
type: Optional[str] = None
|
|
80
|
+
include_tools: Optional[List[str]] = None
|
|
81
|
+
exclude_tools: Optional[List[str]] = None
|
|
82
|
+
# Additional parameters for the MCP server
|
|
83
|
+
additional_params: Optional[Dict[str, Any]] = None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class AgentConfig(BaseModel):
|
|
87
|
+
agent: AgentInfo
|
|
88
|
+
configuration: Optional[AgentConfiguration] = None
|
|
89
|
+
connections: Optional[AgentConnections] = None
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class AvailableAgents(metaclass=Singleton):
|
|
93
|
+
"""Collection of configured agents."""
|
|
94
|
+
|
|
95
|
+
_instance = None
|
|
96
|
+
|
|
97
|
+
def __init__(self, agents: Optional[Dict[str, AgentConfig]] = None) -> None:
|
|
98
|
+
"""Create an `AvailableAgents` object."""
|
|
99
|
+
self.agents = agents or {}
|
|
100
|
+
|
|
101
|
+
@classmethod
|
|
102
|
+
def _read_agent_folder(cls, agent_folder: str) -> AvailableAgents:
|
|
103
|
+
"""Read the different agents from the given folder."""
|
|
104
|
+
agents: Dict[str, AgentConfig] = {}
|
|
105
|
+
|
|
106
|
+
if not os.path.isdir(agent_folder):
|
|
107
|
+
if agent_folder != DEFAULT_AGENTS_CONFIG_FOLDER:
|
|
108
|
+
# User explicitly specified a folder, it should exist
|
|
109
|
+
structlogger.error(
|
|
110
|
+
f"The specified agents config folder '{agent_folder}' does not "
|
|
111
|
+
f"exist or is not a directory."
|
|
112
|
+
)
|
|
113
|
+
raise ValueError(
|
|
114
|
+
f"The specified agents config folder '{agent_folder}' does not "
|
|
115
|
+
f"exist or is not a directory."
|
|
116
|
+
)
|
|
117
|
+
else:
|
|
118
|
+
# We are using the default folder, it may not be created yet
|
|
119
|
+
# Init with an empty agents in this case
|
|
120
|
+
structlogger.info(
|
|
121
|
+
f"Default agents config folder '{agent_folder}' does not exist. "
|
|
122
|
+
f"Agent configurations won't be loaded."
|
|
123
|
+
)
|
|
124
|
+
return cls(agents)
|
|
125
|
+
|
|
126
|
+
# First, load all agent configs into a temporary list for validation
|
|
127
|
+
agent_configs: List[AgentConfig] = []
|
|
128
|
+
for agent_name in os.listdir(agent_folder):
|
|
129
|
+
config_path = os.path.join(agent_folder, agent_name, "config.yml")
|
|
130
|
+
if not os.path.isfile(config_path):
|
|
131
|
+
continue
|
|
132
|
+
try:
|
|
133
|
+
agent_config = cls._read_agent_config(config_path)
|
|
134
|
+
if not isinstance(agent_config, AgentConfig):
|
|
135
|
+
raise ValueError(f"Invalid agent config type for {agent_name}")
|
|
136
|
+
agent_configs.append(agent_config)
|
|
137
|
+
except Exception as e:
|
|
138
|
+
raise ValidationError(
|
|
139
|
+
code="agent.load_failed",
|
|
140
|
+
event_info=f"Failed to load agent '{agent_name}': {e}",
|
|
141
|
+
details={
|
|
142
|
+
"agent_name": agent_name,
|
|
143
|
+
"agent_folder": agent_folder,
|
|
144
|
+
"error": str(e),
|
|
145
|
+
},
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
# Validate agent names are unique before adding to dictionary
|
|
149
|
+
from rasa.agents.validation import validate_agent_names_unique
|
|
150
|
+
|
|
151
|
+
validate_agent_names_unique(agent_configs)
|
|
152
|
+
|
|
153
|
+
for agent_config in agent_configs:
|
|
154
|
+
agents[agent_config.agent.name] = agent_config
|
|
155
|
+
|
|
156
|
+
return cls(agents)
|
|
157
|
+
|
|
158
|
+
@staticmethod
|
|
159
|
+
def _read_agent_config(config_path: str) -> AgentConfig:
|
|
160
|
+
"""Read the agent config from a yaml file into Pydantic models.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
config_path: Path to the config file.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
The parsed AgentConfig.
|
|
167
|
+
|
|
168
|
+
Raises:
|
|
169
|
+
yaml.YAMLError: If the YAML file is invalid.
|
|
170
|
+
ValueError: If the data structure is invalid for Pydantic models.
|
|
171
|
+
"""
|
|
172
|
+
with open(config_path, "r") as f:
|
|
173
|
+
data = yaml.safe_load(f)
|
|
174
|
+
|
|
175
|
+
# Create the agent config (this will trigger Pydantic validation)
|
|
176
|
+
agent_config = AgentConfig(
|
|
177
|
+
agent=AgentInfo(**data.get("agent", {})),
|
|
178
|
+
configuration=AgentConfiguration(**data.get("configuration", {}))
|
|
179
|
+
if data.get("configuration")
|
|
180
|
+
else None,
|
|
181
|
+
connections=AgentConnections(**data.get("connections", {}))
|
|
182
|
+
if data.get("connections")
|
|
183
|
+
else None,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
return agent_config
|
|
187
|
+
|
|
188
|
+
@classmethod
|
|
189
|
+
def get_instance(
|
|
190
|
+
cls, agent_folder: Optional[str] = DEFAULT_AGENTS_CONFIG_FOLDER
|
|
191
|
+
) -> AvailableAgents:
|
|
192
|
+
"""Get the singleton instance of `AvailableAgents`."""
|
|
193
|
+
if cls._instance is None:
|
|
194
|
+
cls._instance = cls._read_agent_folder(agent_folder)
|
|
195
|
+
|
|
196
|
+
return cls._instance
|
|
197
|
+
|
|
198
|
+
@classmethod
|
|
199
|
+
def reset_instance(cls) -> None:
|
|
200
|
+
cls._instance = None
|
|
201
|
+
# Also clear the metaclass singleton instances
|
|
202
|
+
if hasattr(type(cls), "_instances"):
|
|
203
|
+
type(cls)._instances.clear()
|
|
204
|
+
|
|
205
|
+
def as_json_list(self) -> List[Dict[str, Any]]:
|
|
206
|
+
"""Convert the available agents to a JSON-serializable list."""
|
|
207
|
+
return [
|
|
208
|
+
{
|
|
209
|
+
"name": agent_name,
|
|
210
|
+
"agent": agent_config.agent.model_dump(),
|
|
211
|
+
"configuration": agent_config.configuration.model_dump()
|
|
212
|
+
if agent_config.configuration
|
|
213
|
+
else None,
|
|
214
|
+
"connections": agent_config.connections.model_dump()
|
|
215
|
+
if agent_config.connections
|
|
216
|
+
else None,
|
|
217
|
+
}
|
|
218
|
+
for agent_name, agent_config in self.agents.items()
|
|
219
|
+
]
|
|
220
|
+
|
|
221
|
+
@classmethod
|
|
222
|
+
def get_agent_config(cls, agent_id: str) -> Optional[AgentConfig]:
|
|
223
|
+
instance = cls.get_instance()
|
|
224
|
+
return instance.agents.get(agent_id)
|
|
225
|
+
|
|
226
|
+
@classmethod
|
|
227
|
+
def has_agents(cls) -> bool:
|
|
228
|
+
instance = cls.get_instance()
|
|
229
|
+
return len(instance.agents) > 0
|
rasa/core/brokers/broker.py
CHANGED
|
@@ -66,7 +66,7 @@ class EventBroker:
|
|
|
66
66
|
raise NotImplementedError("Event broker must implement the `publish` method.")
|
|
67
67
|
|
|
68
68
|
def is_ready(self) -> bool:
|
|
69
|
-
"""Determine whether
|
|
69
|
+
"""Determine whether the event broker is ready.
|
|
70
70
|
|
|
71
71
|
Returns:
|
|
72
72
|
`True` by default, but this may be overridden by subclasses.
|
rasa/core/brokers/kafka.py
CHANGED
|
@@ -6,13 +6,18 @@ import threading
|
|
|
6
6
|
import time
|
|
7
7
|
from asyncio import AbstractEventLoop
|
|
8
8
|
from functools import cached_property
|
|
9
|
-
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Union
|
|
9
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Text, Tuple, Union
|
|
10
10
|
|
|
11
11
|
import structlog
|
|
12
12
|
|
|
13
13
|
import rasa.shared.utils.common
|
|
14
14
|
from rasa.core.brokers.broker import EventBroker
|
|
15
15
|
from rasa.core.exceptions import KafkaProducerInitializationError
|
|
16
|
+
from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
|
|
17
|
+
IAMCredentialsProviderInput,
|
|
18
|
+
SupportedServiceType,
|
|
19
|
+
create_iam_credentials_provider,
|
|
20
|
+
)
|
|
16
21
|
from rasa.shared.core.events import ErrorHandled
|
|
17
22
|
from rasa.shared.utils.io import DEFAULT_ENCODING
|
|
18
23
|
from rasa.utils.endpoints import EndpointConfig
|
|
@@ -93,6 +98,9 @@ class KafkaEventBroker(EventBroker):
|
|
|
93
98
|
self.ssl_keyfile = ssl_keyfile
|
|
94
99
|
self.queue_size = kwargs.get("queue_size")
|
|
95
100
|
self.ssl_check_hostname = "https" if ssl_check_hostname else None
|
|
101
|
+
self.iam_credentials_provider = create_iam_credentials_provider(
|
|
102
|
+
IAMCredentialsProviderInput(service_name=SupportedServiceType.EVENT_BROKER)
|
|
103
|
+
)
|
|
96
104
|
|
|
97
105
|
# PII management attributes
|
|
98
106
|
self.stream_pii = kwargs.get("stream_pii", True)
|
|
@@ -134,8 +142,8 @@ class KafkaEventBroker(EventBroker):
|
|
|
134
142
|
try:
|
|
135
143
|
self._check_kafka_connection()
|
|
136
144
|
logger.debug("Connection to kafka successful.")
|
|
137
|
-
except KafkaException:
|
|
138
|
-
logger.debug("Failed to connect kafka
|
|
145
|
+
except KafkaException as exc:
|
|
146
|
+
logger.debug(f"Failed to connect to kafka: {exc}")
|
|
139
147
|
return
|
|
140
148
|
while retries:
|
|
141
149
|
try:
|
|
@@ -215,7 +223,31 @@ class KafkaEventBroker(EventBroker):
|
|
|
215
223
|
KafkaException: if Kafka is disconnected.
|
|
216
224
|
"""
|
|
217
225
|
if self.producer is not None:
|
|
218
|
-
|
|
226
|
+
structlogger.debug(
|
|
227
|
+
"rasa.core.brokers.kafka.KafkaEventBroker.check_kafka_connection",
|
|
228
|
+
)
|
|
229
|
+
# we have to poll to trigger the oauth_cb if using IAM authentication
|
|
230
|
+
self.producer.poll(0)
|
|
231
|
+
self.producer.list_topics(self.topic, timeout=5)
|
|
232
|
+
|
|
233
|
+
def get_aws_iam_token(
|
|
234
|
+
self, oauth_config: Any
|
|
235
|
+
) -> Tuple[Optional[str], Optional[float]]:
|
|
236
|
+
"""Callback function to fetch AWS IAM token for MSK authentication.
|
|
237
|
+
|
|
238
|
+
The callback function requires this specific signature to work correctly.
|
|
239
|
+
|
|
240
|
+
Args:
|
|
241
|
+
oauth_config: OAuth configuration.
|
|
242
|
+
|
|
243
|
+
Returns:
|
|
244
|
+
A tuple of auth token and expiry time in seconds.
|
|
245
|
+
"""
|
|
246
|
+
if self.iam_credentials_provider is None:
|
|
247
|
+
return None, None
|
|
248
|
+
|
|
249
|
+
temp_credentials = self.iam_credentials_provider.get_temporary_credentials()
|
|
250
|
+
return temp_credentials.auth_token, temp_credentials.expiration
|
|
219
251
|
|
|
220
252
|
def _get_kafka_config(self) -> Dict[Text, Any]:
|
|
221
253
|
config = {
|
|
@@ -246,15 +278,27 @@ class KafkaEventBroker(EventBroker):
|
|
|
246
278
|
}
|
|
247
279
|
elif self.security_protocol == "SASL_SSL":
|
|
248
280
|
authentication_params = {
|
|
249
|
-
"sasl.username": self.sasl_username,
|
|
250
|
-
"sasl.password": self.sasl_password,
|
|
251
281
|
"ssl.ca.location": self.ssl_cafile,
|
|
252
|
-
"ssl.certificate.location": self.ssl_certfile,
|
|
253
|
-
"ssl.key.location": self.ssl_keyfile,
|
|
254
282
|
"ssl.endpoint.identification.algorithm": self.ssl_check_hostname,
|
|
255
283
|
"security.protocol": self.security_protocol,
|
|
256
284
|
"sasl.mechanism": self.sasl_mechanism,
|
|
257
285
|
}
|
|
286
|
+
|
|
287
|
+
if self.iam_credentials_provider is not None:
|
|
288
|
+
authentication_params.update(
|
|
289
|
+
{
|
|
290
|
+
"oauth_cb": self.get_aws_iam_token,
|
|
291
|
+
}
|
|
292
|
+
)
|
|
293
|
+
else:
|
|
294
|
+
authentication_params.update(
|
|
295
|
+
{
|
|
296
|
+
"sasl.username": self.sasl_username,
|
|
297
|
+
"sasl.password": self.sasl_password,
|
|
298
|
+
"ssl.certificate.location": self.ssl_certfile,
|
|
299
|
+
"ssl.key.location": self.ssl_keyfile,
|
|
300
|
+
}
|
|
301
|
+
)
|
|
258
302
|
else:
|
|
259
303
|
raise ValueError(
|
|
260
304
|
f"Cannot initialise `KafkaEventBroker`: "
|
rasa/core/channels/__init__.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# ruff: noqa: I001
|
|
2
|
-
from typing import Text, Dict, List, Type
|
|
2
|
+
from typing import Text, Dict, List, Type, Optional
|
|
3
3
|
|
|
4
4
|
from rasa.core.channels.channel import ( # noqa: F401
|
|
5
5
|
InputChannel,
|
|
@@ -15,54 +15,101 @@ from rasa.core.channels.socketio import SocketIOInput
|
|
|
15
15
|
from rasa.core.channels.botframework import BotFrameworkInput
|
|
16
16
|
from rasa.core.channels.callback import CallbackInput
|
|
17
17
|
from rasa.core.channels.console import CmdlineInput
|
|
18
|
-
from rasa.core.channels.facebook import FacebookInput
|
|
19
18
|
from rasa.core.channels.mattermost import MattermostInput
|
|
20
19
|
from rasa.core.channels.rasa_chat import RasaChatInput
|
|
21
20
|
from rasa.core.channels.rest import RestInput
|
|
22
21
|
from rasa.core.channels.rocketchat import RocketChatInput
|
|
23
|
-
from rasa.core.channels.slack import SlackInput
|
|
24
|
-
from rasa.core.channels.telegram import TelegramInput
|
|
25
|
-
from rasa.core.channels.twilio import TwilioInput
|
|
26
|
-
from rasa.core.channels.voice_ready.twilio_voice import TwilioVoiceInput
|
|
27
22
|
from rasa.core.channels.voice_ready.jambonz import JambonzVoiceReadyInput
|
|
28
23
|
from rasa.core.channels.voice_ready.audiocodes import AudiocodesInput
|
|
29
24
|
from rasa.core.channels.voice_stream.browser_audio import BrowserAudioInputChannel
|
|
30
|
-
from rasa.core.channels.webexteams import WebexTeamsInput
|
|
31
25
|
from rasa.core.channels.hangouts import HangoutsInput
|
|
32
|
-
from rasa.core.channels.vier_cvg import CVGInput
|
|
33
|
-
from rasa.core.channels.voice_stream.twilio_media_streams import (
|
|
34
|
-
TwilioMediaStreamsInputChannel,
|
|
35
|
-
)
|
|
36
26
|
from rasa.core.channels.voice_stream.genesys import GenesysInputChannel
|
|
37
27
|
from rasa.core.channels.studio_chat import StudioChatInput
|
|
38
28
|
from rasa.core.channels.voice_stream.audiocodes import AudiocodesVoiceInputChannel
|
|
39
29
|
from rasa.core.channels.voice_stream.jambonz import JambonzStreamInputChannel
|
|
40
30
|
|
|
31
|
+
# Type annotations for channels with optional dependencies
|
|
32
|
+
FacebookInput: Optional[Type[InputChannel]]
|
|
33
|
+
SlackInput: Optional[Type[InputChannel]]
|
|
34
|
+
TelegramInput: Optional[Type[InputChannel]]
|
|
35
|
+
TwilioInput: Optional[Type[InputChannel]]
|
|
36
|
+
TwilioVoiceInput: Optional[Type[InputChannel]]
|
|
37
|
+
TwilioMediaStreamsInputChannel: Optional[Type[InputChannel]]
|
|
38
|
+
WebexTeamsInput: Optional[Type[InputChannel]]
|
|
39
|
+
CVGInput: Optional[Type[InputChannel]]
|
|
40
|
+
|
|
41
|
+
# Channels with optional dependencies - import with try-except
|
|
42
|
+
try:
|
|
43
|
+
from rasa.core.channels.facebook import FacebookInput
|
|
44
|
+
except ImportError:
|
|
45
|
+
FacebookInput = None
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
from rasa.core.channels.slack import SlackInput
|
|
49
|
+
except ImportError:
|
|
50
|
+
SlackInput = None
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
from rasa.core.channels.telegram import TelegramInput
|
|
54
|
+
except ImportError:
|
|
55
|
+
TelegramInput = None
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
from rasa.core.channels.twilio import TwilioInput
|
|
59
|
+
except ImportError:
|
|
60
|
+
TwilioInput = None
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
from rasa.core.channels.voice_ready.twilio_voice import TwilioVoiceInput
|
|
64
|
+
except ImportError:
|
|
65
|
+
TwilioVoiceInput = None
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
from rasa.core.channels.voice_stream.twilio_media_streams import (
|
|
69
|
+
TwilioMediaStreamsInputChannel,
|
|
70
|
+
)
|
|
71
|
+
except ImportError:
|
|
72
|
+
TwilioMediaStreamsInputChannel = None
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
from rasa.core.channels.webexteams import WebexTeamsInput
|
|
76
|
+
except ImportError:
|
|
77
|
+
WebexTeamsInput = None
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
from rasa.core.channels.vier_cvg import CVGInput
|
|
81
|
+
except ImportError:
|
|
82
|
+
CVGInput = None
|
|
83
|
+
|
|
41
84
|
input_channel_classes: List[Type[InputChannel]] = [
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
85
|
+
c
|
|
86
|
+
for c in [
|
|
87
|
+
CmdlineInput,
|
|
88
|
+
FacebookInput,
|
|
89
|
+
SlackInput,
|
|
90
|
+
TelegramInput,
|
|
91
|
+
MattermostInput,
|
|
92
|
+
TwilioInput,
|
|
93
|
+
TwilioVoiceInput,
|
|
94
|
+
RasaChatInput,
|
|
95
|
+
BotFrameworkInput,
|
|
96
|
+
RocketChatInput,
|
|
97
|
+
CallbackInput,
|
|
98
|
+
RestInput,
|
|
99
|
+
SocketIOInput,
|
|
100
|
+
WebexTeamsInput,
|
|
101
|
+
HangoutsInput,
|
|
102
|
+
AudiocodesInput,
|
|
103
|
+
CVGInput,
|
|
104
|
+
JambonzVoiceReadyInput,
|
|
105
|
+
TwilioMediaStreamsInputChannel,
|
|
106
|
+
BrowserAudioInputChannel,
|
|
107
|
+
GenesysInputChannel,
|
|
108
|
+
StudioChatInput,
|
|
109
|
+
AudiocodesVoiceInputChannel,
|
|
110
|
+
JambonzStreamInputChannel,
|
|
111
|
+
]
|
|
112
|
+
if c is not None
|
|
66
113
|
]
|
|
67
114
|
|
|
68
115
|
# Mapping from an input channel name to its class to allow name based lookup.
|
|
@@ -70,17 +70,17 @@ class DevelopmentInspectorPlugin:
|
|
|
70
70
|
self.tasks.append(task)
|
|
71
71
|
self._cleanup_completed_tasks()
|
|
72
72
|
|
|
73
|
-
@hookimpl
|
|
73
|
+
@hookimpl
|
|
74
74
|
def after_new_user_message(self, tracker: DialogueStateTracker) -> None:
|
|
75
75
|
"""Broadcasts tracker updates after a new user message."""
|
|
76
76
|
self._create_broadcast_task(tracker)
|
|
77
77
|
|
|
78
|
-
@hookimpl
|
|
78
|
+
@hookimpl
|
|
79
79
|
def after_action_executed(self, tracker: DialogueStateTracker) -> None:
|
|
80
80
|
"""Broadcasts tracker updates after an action is executed."""
|
|
81
81
|
self._create_broadcast_task(tracker)
|
|
82
82
|
|
|
83
|
-
@hookimpl
|
|
83
|
+
@hookimpl
|
|
84
84
|
def after_server_stop(self) -> None:
|
|
85
85
|
"""Cancels all remaining tasks when the server stops."""
|
|
86
86
|
self._cancel_tasks()
|
|
@@ -145,15 +145,10 @@ class DevelopmentInspectProxy(InputChannel):
|
|
|
145
145
|
state = tracker.current_state(EventVerbosity.AFTER_RESTART)
|
|
146
146
|
return orjson.dumps(state, option=orjson.OPT_SERIALIZE_NUMPY).decode("utf-8")
|
|
147
147
|
|
|
148
|
-
async def on_tracker_updated(
|
|
149
|
-
self, tracker: DialogueStateTracker, latency: Optional[float] = None
|
|
150
|
-
) -> None:
|
|
148
|
+
async def on_tracker_updated(self, tracker: DialogueStateTracker) -> None:
|
|
151
149
|
"""Notifies all clients about tracker updates in real-time."""
|
|
152
150
|
if self.tracker_stream and tracker.sender_id:
|
|
153
151
|
state = tracker.current_state(EventVerbosity.AFTER_RESTART)
|
|
154
|
-
if latency is not None:
|
|
155
|
-
state["latency"] = {"rasa_processing_latency_ms": latency}
|
|
156
|
-
|
|
157
152
|
tracker_dump = orjson.dumps(
|
|
158
153
|
state, option=orjson.OPT_SERIALIZE_NUMPY
|
|
159
154
|
).decode("utf-8")
|
|
@@ -163,28 +158,13 @@ class DevelopmentInspectProxy(InputChannel):
|
|
|
163
158
|
"""Records the start time of a new turn."""
|
|
164
159
|
self._turn_start_times[sender_id] = time.time()
|
|
165
160
|
|
|
166
|
-
async def _broadcast_latency(self, sender_id: Text) -> None:
|
|
167
|
-
"""Broadcasts the tracker with latency of the current turn to all clients."""
|
|
168
|
-
if sender_id not in self._turn_start_times:
|
|
169
|
-
return None
|
|
170
|
-
|
|
171
|
-
latency = (time.time() - self._turn_start_times[sender_id]) * 1000
|
|
172
|
-
# The turn is over, so we can remove the start time
|
|
173
|
-
del self._turn_start_times[sender_id]
|
|
174
|
-
|
|
175
|
-
# broadcast tracker update with latency
|
|
176
|
-
tracker = await self._get_tracker(sender_id)
|
|
177
|
-
await self.on_tracker_updated(tracker, latency)
|
|
178
|
-
|
|
179
161
|
async def on_message_proxy(
|
|
180
162
|
self,
|
|
181
163
|
on_new_message: Callable[["UserMessage"], Awaitable[Any]],
|
|
182
164
|
message: "UserMessage",
|
|
183
165
|
) -> None:
|
|
184
166
|
"""Proxies the on_new_message call to the underlying channel."""
|
|
185
|
-
self._record_turn_start_time(message.sender_id)
|
|
186
167
|
await on_new_message(message)
|
|
187
|
-
await self._broadcast_latency(message.sender_id)
|
|
188
168
|
|
|
189
169
|
@classmethod
|
|
190
170
|
async def serve_inspect_html(cls) -> HTTPResponse:
|
rasa/core/channels/hangouts.py
CHANGED
|
@@ -213,7 +213,7 @@ class HangoutsInput(InputChannel):
|
|
|
213
213
|
# every message. Actual caching depends on response headers.
|
|
214
214
|
# see: https://github.com/googleapis/google-auth-library-python/blob/main/google/oauth2/id_token.py#L15 # noqa: E501
|
|
215
215
|
cached_session = cachecontrol.CacheControl(requests.session())
|
|
216
|
-
self.google_request = google.auth.transport.requests.Request(
|
|
216
|
+
self.google_request = google.auth.transport.requests.Request( # type: ignore[no-untyped-call]
|
|
217
217
|
session=cached_session
|
|
218
218
|
)
|
|
219
219
|
|
|
@@ -267,7 +267,7 @@ class HangoutsInput(InputChannel):
|
|
|
267
267
|
# see https://developers.google.com/chat/how-tos/bots-develop#verifying_bot_authenticity # noqa: E501
|
|
268
268
|
# and https://google-auth.readthedocs.io/en/latest/user-guide.html#identity-tokens # noqa: E501
|
|
269
269
|
try:
|
|
270
|
-
decoded_token = id_token.verify_token(
|
|
270
|
+
decoded_token = id_token.verify_token( # type: ignore[no-untyped-call]
|
|
271
271
|
bot_token,
|
|
272
272
|
self.google_request,
|
|
273
273
|
audience=self.project_id,
|