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
rasa/cli/llm_fine_tuning.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import argparse
|
|
2
2
|
import asyncio
|
|
3
3
|
import sys
|
|
4
|
+
from pathlib import Path
|
|
4
5
|
from typing import Any, Dict, List, Type, cast
|
|
5
6
|
|
|
6
7
|
import structlog
|
|
@@ -14,13 +15,15 @@ from rasa.cli.arguments.default_arguments import (
|
|
|
14
15
|
add_endpoint_param,
|
|
15
16
|
add_model_param,
|
|
16
17
|
add_remote_storage_param,
|
|
18
|
+
add_sub_agents_param,
|
|
17
19
|
)
|
|
18
20
|
from rasa.cli.e2e_test import (
|
|
19
21
|
RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
|
|
20
22
|
read_test_cases,
|
|
21
23
|
validate_model_path,
|
|
22
24
|
)
|
|
23
|
-
from rasa.core.available_endpoints import AvailableEndpoints
|
|
25
|
+
from rasa.core.config.available_endpoints import AvailableEndpoints
|
|
26
|
+
from rasa.core.config.configuration import Configuration
|
|
24
27
|
from rasa.core.exceptions import AgentNotReady
|
|
25
28
|
from rasa.dialogue_understanding.generator.llm_based_command_generator import (
|
|
26
29
|
LLMBasedCommandGenerator,
|
|
@@ -46,7 +49,6 @@ from rasa.llm_fine_tuning.train_test_split_module import (
|
|
|
46
49
|
split_llm_fine_tuning_data,
|
|
47
50
|
)
|
|
48
51
|
from rasa.shared.constants import (
|
|
49
|
-
DEFAULT_ENDPOINTS_PATH,
|
|
50
52
|
DEFAULT_MODELS_PATH,
|
|
51
53
|
LLM_CONFIG_KEY,
|
|
52
54
|
)
|
|
@@ -137,6 +139,8 @@ def add_data_preparation_arguments(parser: argparse.ArgumentParser) -> None:
|
|
|
137
139
|
default=DEFAULT_INPUT_E2E_TEST_PATH,
|
|
138
140
|
)
|
|
139
141
|
|
|
142
|
+
add_sub_agents_param(parser)
|
|
143
|
+
|
|
140
144
|
add_remote_storage_param(parser)
|
|
141
145
|
|
|
142
146
|
rephrasing_arguments = parser.add_argument_group("Rephrasing Module")
|
|
@@ -376,6 +380,7 @@ def write_params(
|
|
|
376
380
|
"rephrase_config": rephrase_config,
|
|
377
381
|
"model": args.model,
|
|
378
382
|
"endpoints": args.endpoints,
|
|
383
|
+
"sub-agents": args.sub_agents,
|
|
379
384
|
"remote-storage": args.remote_storage,
|
|
380
385
|
"train_frac": args.train_frac,
|
|
381
386
|
"output_format": args.output_format,
|
|
@@ -393,10 +398,9 @@ def write_statistics(statistics: Dict[str, Any], output_path: str) -> None:
|
|
|
393
398
|
|
|
394
399
|
|
|
395
400
|
def get_valid_endpoints(endpoints_file: str) -> AvailableEndpoints:
|
|
396
|
-
|
|
397
|
-
endpoints_file
|
|
398
|
-
)
|
|
399
|
-
endpoints = AvailableEndpoints.get_instance(validated_endpoints_file)
|
|
401
|
+
endpoints = Configuration.initialise_endpoints(
|
|
402
|
+
endpoints_path=Path(endpoints_file)
|
|
403
|
+
).endpoints
|
|
400
404
|
|
|
401
405
|
# Ignore all endpoints apart from action server, model, nlu and nlg
|
|
402
406
|
# to ensure InMemoryTrackerStore is being used instead of production
|
|
@@ -420,6 +424,7 @@ def set_up_e2e_test_runner(args: argparse.Namespace) -> E2ETestRunner:
|
|
|
420
424
|
model_path=args.model,
|
|
421
425
|
model_server=endpoints.model,
|
|
422
426
|
endpoints=endpoints,
|
|
427
|
+
sub_agents_path=args.sub_agents,
|
|
423
428
|
)
|
|
424
429
|
except AgentNotReady as error:
|
|
425
430
|
structlogger.error(
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Basic Rasa Template
|
|
2
|
+
|
|
3
|
+
A simple, general-purpose conversational agent template that provides essential conversational capabilities.
|
|
4
|
+
|
|
5
|
+
## 🚀 What's Included
|
|
6
|
+
|
|
7
|
+
This template provides a foundation for building conversational agents with:
|
|
8
|
+
- **Basic conversational flows**: Greetings, help, feedback, and human handoff
|
|
9
|
+
- **Help system**: Users can ask for assistance and get guided responses
|
|
10
|
+
- **Feedback collection**: Gather user feedback to improve the agent
|
|
11
|
+
- **Human handoff**: Seamlessly transfer conversations to human agents when needed
|
|
12
|
+
|
|
13
|
+
## 📁 Directory Structure
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
├── actions/ # Custom Python logic for agent actions
|
|
17
|
+
├── data/ # Conversational flows and training data
|
|
18
|
+
├── domain/ # Agent configuration (slots, responses, actions)
|
|
19
|
+
├── docs/ # Knowledge base documents (optional)
|
|
20
|
+
├── prompts/ # LLM prompts for enhanced responses
|
|
21
|
+
└── config.yml # Training pipeline configuration
|
|
22
|
+
```
|
|
23
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## 📂 `actions/` – The Agent's Toolkit
|
|
2
|
+
|
|
3
|
+
This folder contains Python files that define custom actions your agent can perform. Actions are pieces of code that run when your agent needs to do something beyond just responding with text.
|
|
4
|
+
|
|
5
|
+
**What you'll find:**
|
|
6
|
+
- `action_human_handoff.py`: Handles transferring the conversation to a human agent when needed.
|
|
7
|
+
|
|
8
|
+
**Edit Python files in this folder** to add new custom logic, integrate with APIs, or perform calculations and data processing.
|
|
9
|
+
|
|
10
|
+
Learn more about custom actions in the [Rasa documentation](https://rasa.com/docs/pro/build/custom-actions).
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# Rasa
|
|
2
|
-
# This file controls your
|
|
1
|
+
# Rasa Agent Configuration
|
|
2
|
+
# This file controls your agent's language, message processing pipeline, and conversation policies.
|
|
3
3
|
# For full documentation, see: https://rasa.com/docs/pro/build/configuring-assistant
|
|
4
4
|
recipe: default.v1
|
|
5
5
|
language: en
|
|
6
6
|
|
|
7
|
-
# The
|
|
8
|
-
# This default value must be replaced with a unique
|
|
7
|
+
# The agent project unique identifier
|
|
8
|
+
# This default value must be replaced with a unique agent name within your deployment
|
|
9
9
|
assistant_id: placeholder_default
|
|
10
10
|
|
|
11
11
|
pipeline:
|
|
@@ -24,4 +24,6 @@ policies:
|
|
|
24
24
|
source: "./docs"
|
|
25
25
|
llm:
|
|
26
26
|
model_group: openai-gpt-4o
|
|
27
|
+
embeddings:
|
|
28
|
+
model_group: openai-embeddings
|
|
27
29
|
check_relevancy: true
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
## 📂 `data/` – The
|
|
1
|
+
## 📂 `data/` – The Agent's Business Logic
|
|
2
2
|
|
|
3
|
-
This folder holds files that define your agent’s skills using "flows". Each flow is a step-by-step conversation pattern (like a recipe) for handling a user goal (e.g., checking a balance, updating an address).
|
|
3
|
+
This folder holds files that define your agent’s skills using "flows". [1](https://rasa.com/docs/pro/build/writing-flows) Each flow is a step-by-step conversation pattern (like a recipe) for handling a user goal (e.g., checking a balance, updating an address).
|
|
4
4
|
|
|
5
|
-
**What you
|
|
6
|
-
-
|
|
7
|
-
- Flows are made of steps: collecting info, calling actions, and responding.
|
|
5
|
+
**What you'll find:**
|
|
6
|
+
- **general/**: Basic conversational flows (greetings, help, feedback, human handoff)
|
|
8
7
|
|
|
9
|
-
**Edit
|
|
8
|
+
**Edit YAML files in this folder** to add new skills, change existing flows, or adjust what the agent asks.
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
## 📂 `domain/` – The
|
|
1
|
+
## 📂 `domain/` – The Agent's Brain
|
|
2
2
|
|
|
3
|
-
This folder contains YAML files that define the agent
|
|
4
|
-
- **Slots**: The agent
|
|
5
|
-
- **Responses**: The messages your
|
|
6
|
-
- **Actions**: Custom logic your agent can run (e.g.,
|
|
3
|
+
This folder contains YAML files that define the agent's:
|
|
4
|
+
- **Slots**: The agent's memory (e.g., user's name, session info) [1](https://rasa.com/docs/reference/primitives/slots/).
|
|
5
|
+
- **Responses**: The messages your agent can say to users (e.g., greetings, confirmations) [2](https://rasa.com/docs/reference/primitives/responses).
|
|
6
|
+
- **Actions**: Custom logic your agent can run (e.g., handling feedback, human handoff) [3](https://rasa.com/docs/reference/primitives/custom-actions).
|
|
7
7
|
|
|
8
|
+
**What you'll find:**
|
|
9
|
+
- **general/**: Basic conversational domain elements (greetings, help, feedback)
|
|
8
10
|
|
|
9
11
|
You can organize the domain as one big file or many small ones. Rasa will automatically merge everything during training [1](https://rasa.com/docs/reference/config/domain).
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Finance Banking Agent Template
|
|
2
|
+
|
|
3
|
+
A lightweight banking conversational agent template for the fictional **Fenlo Bank** that handles account management, card services, and money transfers.
|
|
4
|
+
|
|
5
|
+
## 🚀 What's Included
|
|
6
|
+
|
|
7
|
+
This template provides a banking assistant with:
|
|
8
|
+
- **Account Management**: Balance checking and statement downloads
|
|
9
|
+
- **Card Services**: Card activation, blocking, replacement, and listing
|
|
10
|
+
- **Money Transfers**: Account-to-account transfers and third-party payments
|
|
11
|
+
- **Contact Management**: Add, list, and remove trusted contacts
|
|
12
|
+
- **Bill Management**: Bill payment reminders and scheduling
|
|
13
|
+
- **Banking Knowledge**: FAQ system with Fenlo Bank documentation
|
|
14
|
+
|
|
15
|
+
## 📁 Directory Structure
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
├── actions/ # Custom Python logic for banking operations
|
|
19
|
+
├── data/ # Banking conversation flows and training data
|
|
20
|
+
├── domain/ # Banking agent configuration
|
|
21
|
+
├── db/ # Mock JSON database for testing
|
|
22
|
+
├── docs/ # Fenlo Bank knowledge base and FAQ documents
|
|
23
|
+
├── prompts/ # LLM prompts for enhanced banking responses
|
|
24
|
+
└── config.yml # Training pipeline configuration
|
|
25
|
+
```
|
|
26
|
+
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Account actions
|
|
2
|
-
from actions.accounts.action_ask_account import ActionAskAccount
|
|
3
|
-
from actions.accounts.action_check_balance import ActionCheckBalance
|
|
4
|
-
|
|
5
|
-
# General actions
|
|
6
|
-
from actions.action_session_start import ActionSessionStart
|
|
7
|
-
|
|
8
|
-
# Card actions
|
|
9
|
-
from actions.cards.action_ask_card import ActionAskCard
|
|
10
|
-
from actions.cards.action_check_card_existence import ActionCheckCardExistence
|
|
11
|
-
from actions.cards.action_update_card_status import ActionUpdateCardStatus
|
|
12
|
-
|
|
13
|
-
# Transfer actions
|
|
14
|
-
from actions.transfers.action_add_payee import ActionAddPayee
|
|
15
|
-
from actions.transfers.action_ask_account_from import ActionAskAccountFrom
|
|
16
|
-
from actions.transfers.action_check_payee_existence import ActionCheckPayeeExistence
|
|
17
|
-
from actions.transfers.action_check_sufficient_funds import ActionCheckSufficientFunds
|
|
18
|
-
from actions.transfers.action_list_payees import ActionListPayees
|
|
19
|
-
from actions.transfers.action_process_immediate_payment import (
|
|
20
|
-
ActionProcessImmediatePayment,
|
|
21
|
-
)
|
|
22
|
-
from actions.transfers.action_remove_payee import ActionRemovePayee
|
|
23
|
-
from actions.transfers.action_schedule_payment import ActionSchedulePayment
|
|
24
|
-
from actions.transfers.action_validate_payment_date import ActionValidatePaymentDate
|
|
25
|
-
|
|
26
|
-
__all__ = [
|
|
27
|
-
# General actions
|
|
28
|
-
"ActionSessionStart",
|
|
29
|
-
# Account actions
|
|
30
|
-
"ActionAskAccount",
|
|
31
|
-
"ActionCheckBalance",
|
|
32
|
-
# Card actions
|
|
33
|
-
"ActionAskCard",
|
|
34
|
-
"ActionCheckCardExistence",
|
|
35
|
-
"ActionUpdateCardStatus",
|
|
36
|
-
# Transfer actions
|
|
37
|
-
"ActionAddPayee",
|
|
38
|
-
"ActionAskAccountFrom",
|
|
39
|
-
"ActionCheckPayeeExistence",
|
|
40
|
-
"ActionCheckSufficientFunds",
|
|
41
|
-
"ActionListPayees",
|
|
42
|
-
"ActionProcessImmediatePayment",
|
|
43
|
-
"ActionRemovePayee",
|
|
44
|
-
"ActionSchedulePayment",
|
|
45
|
-
"ActionValidatePaymentDate",
|
|
46
|
-
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Any, Dict, List
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.db import get_account
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CheckBalance(Action):
|
|
11
|
+
def name(self) -> str:
|
|
12
|
+
return "check_balance"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
|
|
16
|
+
) -> List[Dict[str, Any]]:
|
|
17
|
+
account = get_account(tracker.sender_id)
|
|
18
|
+
return [SlotSet("current_balance", account.funds)]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
## 📂 `actions/` – The Agent's Toolkit
|
|
2
|
+
|
|
3
|
+
This folder contains Python files that define custom banking actions your agent can perform. Actions handle complex banking operations, database interactions, and business logic validation.
|
|
4
|
+
|
|
5
|
+
**What you'll find:**
|
|
6
|
+
- **accounts/**: Account-related actions (balance checking, account validation)
|
|
7
|
+
- **cards/**: Card management actions (card existence checks, status updates)
|
|
8
|
+
- **transfers/**: Payment and transfer actions (payee management, fund transfers, scheduling)
|
|
9
|
+
- **contacts/**: Contact and advisor management
|
|
10
|
+
- `database.py`: Core database interactions with banking data
|
|
11
|
+
- `action_session_start.py`: Session initialization for banking context
|
|
12
|
+
|
|
13
|
+
**Edit Python files in this folder** to add new banking features, modify business rules, or integrate with external banking APIs and systems.
|
|
14
|
+
|
|
15
|
+
Learn more about custom actions in the [Rasa documentation](https://rasa.com/docs/pro/build/custom-actions).
|
|
@@ -5,9 +5,9 @@ from rasa_sdk.events import SlotSet
|
|
|
5
5
|
from rasa_sdk.executor import CollectingDispatcher
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class
|
|
8
|
+
class ActionCheckThatCardExists(Action):
|
|
9
9
|
def name(self) -> Text:
|
|
10
|
-
return "
|
|
10
|
+
return "check_that_card_exists"
|
|
11
11
|
|
|
12
12
|
def run(
|
|
13
13
|
self,
|
|
@@ -15,4 +15,7 @@ class ActionProcessImmediatePayment(Action):
|
|
|
15
15
|
tracker: Tracker,
|
|
16
16
|
domain: Dict[Text, Any],
|
|
17
17
|
) -> List[Dict[Text, Any]]:
|
|
18
|
-
|
|
18
|
+
# For example purposes, we assume the card exists; in a real situation,
|
|
19
|
+
# fetch this info from a database or service.
|
|
20
|
+
# card_number = tracker.get_slot("bank_card_number")
|
|
21
|
+
return [SlotSet("return_value", True)]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from typing import Any, Dict, List
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.db import get_cards
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ListCards(Action):
|
|
11
|
+
def name(self) -> str:
|
|
12
|
+
return "list_cards"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
|
|
16
|
+
) -> List[Dict[str, Any]]:
|
|
17
|
+
cards = get_cards(tracker.sender_id)
|
|
18
|
+
if len(cards) > 0:
|
|
19
|
+
cards_list = "".join([f"- {c.name} ({c.handle}) \n" for c in cards])
|
|
20
|
+
return [SlotSet("cards_list", cards_list)]
|
|
21
|
+
else:
|
|
22
|
+
return [SlotSet("cards_list", None)]
|
|
File without changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from typing import Any, Dict, List
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.db import Contact, add_contact, get_contacts
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class AddContact(Action):
|
|
11
|
+
def name(self) -> str:
|
|
12
|
+
return "add_contact"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
|
|
16
|
+
) -> List[Dict[str, Any]]:
|
|
17
|
+
contacts = get_contacts(tracker.sender_id)
|
|
18
|
+
name = tracker.get_slot("add_contact_name")
|
|
19
|
+
handle = tracker.get_slot("add_contact_handle")
|
|
20
|
+
|
|
21
|
+
if name is None or handle is None:
|
|
22
|
+
return [SlotSet("return_value", "data_not_present")]
|
|
23
|
+
|
|
24
|
+
existing_handles = {c.handle for c in contacts}
|
|
25
|
+
if handle in existing_handles:
|
|
26
|
+
return [SlotSet("return_value", "already_exists")]
|
|
27
|
+
|
|
28
|
+
new_contact = Contact(name=name, handle=handle)
|
|
29
|
+
add_contact(tracker.sender_id, new_contact)
|
|
30
|
+
return [SlotSet("return_value", "success")]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from typing import Any, Dict, List
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.db import get_contacts
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ListContacts(Action):
|
|
11
|
+
def name(self) -> str:
|
|
12
|
+
return "list_contacts"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
|
|
16
|
+
) -> List[Dict[str, Any]]:
|
|
17
|
+
contacts = get_contacts(tracker.sender_id)
|
|
18
|
+
if len(contacts) > 0:
|
|
19
|
+
contacts_list = "".join([f"- {c.name} ({c.handle}) \n" for c in contacts])
|
|
20
|
+
return [SlotSet("contacts_list", contacts_list)]
|
|
21
|
+
else:
|
|
22
|
+
return [SlotSet("contacts_list", None)]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from typing import Any, Dict, List
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.events import SlotSet
|
|
5
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
6
|
+
|
|
7
|
+
from actions.db import get_contacts, write_contacts
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class RemoveContact(Action):
|
|
11
|
+
def name(self) -> str:
|
|
12
|
+
return "remove_contact"
|
|
13
|
+
|
|
14
|
+
def run(
|
|
15
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
|
|
16
|
+
) -> List[Dict[str, Any]]:
|
|
17
|
+
contacts = get_contacts(tracker.sender_id)
|
|
18
|
+
handle = tracker.get_slot("remove_contact_handle")
|
|
19
|
+
|
|
20
|
+
if handle is not None:
|
|
21
|
+
contact_indices_with_handle = [
|
|
22
|
+
i for i, c in enumerate(contacts) if c.handle == handle
|
|
23
|
+
]
|
|
24
|
+
if len(contact_indices_with_handle) == 0:
|
|
25
|
+
return [SlotSet("return_value", "not_found")]
|
|
26
|
+
else:
|
|
27
|
+
removed_contact = contacts.pop(contact_indices_with_handle[0])
|
|
28
|
+
write_contacts(tracker.sender_id, contacts)
|
|
29
|
+
return [
|
|
30
|
+
SlotSet("return_value", "success"),
|
|
31
|
+
SlotSet("remove_contact_name", removed_contact.name),
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
else:
|
|
35
|
+
return [SlotSet("return_value", "missing_handle")]
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import shutil
|
|
3
|
+
import tempfile
|
|
4
|
+
from typing import Any, List
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel
|
|
7
|
+
|
|
8
|
+
from rasa.nlu.utils import write_json_to_file
|
|
9
|
+
from rasa.shared.utils.io import read_json_file
|
|
10
|
+
|
|
11
|
+
ORIGIN_DB_PATH = "db"
|
|
12
|
+
CONTACTS = "contacts.json"
|
|
13
|
+
TRANSACTIONS = "transactions.json"
|
|
14
|
+
MY_ACCOUNT = "my_account.json"
|
|
15
|
+
CARDS = "cards.json"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class MyAccount(BaseModel):
|
|
19
|
+
account: str
|
|
20
|
+
funds: int
|
|
21
|
+
daily_limit: int
|
|
22
|
+
monthly_limit: int
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Transaction(BaseModel):
|
|
26
|
+
datetime: str
|
|
27
|
+
recipient: str
|
|
28
|
+
sender: str
|
|
29
|
+
amount: str
|
|
30
|
+
description: str
|
|
31
|
+
|
|
32
|
+
def stringify(self) -> str:
|
|
33
|
+
from datetime import datetime
|
|
34
|
+
|
|
35
|
+
parsed_date = datetime.strptime(self.datetime, "%Y-%m-%dT%H:%M:%S.%f")
|
|
36
|
+
formatted_date = parsed_date.strftime("%Y-%m-%d %H:%M:%S")
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
f"- {self.amount} from {self.sender} to "
|
|
40
|
+
f"{self.recipient}: {self.description} ({formatted_date})"
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class Contact(BaseModel):
|
|
45
|
+
name: str
|
|
46
|
+
handle: str
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class Card(BaseModel):
|
|
50
|
+
name: str
|
|
51
|
+
number: str
|
|
52
|
+
expiration_date: str
|
|
53
|
+
cvv: str
|
|
54
|
+
handle: str
|
|
55
|
+
status: str
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def get_session_db_path(session_id: str) -> str:
|
|
59
|
+
tempdir = tempfile.gettempdir()
|
|
60
|
+
project_name = "rasa-calm-demo"
|
|
61
|
+
return os.path.join(tempdir, project_name, session_id)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def prepare_db_file(session_id: str, db: str) -> str:
|
|
65
|
+
session_db_path = get_session_db_path(session_id)
|
|
66
|
+
os.makedirs(session_db_path, exist_ok=True)
|
|
67
|
+
destination_file = os.path.join(session_db_path, db)
|
|
68
|
+
if not os.path.exists(destination_file):
|
|
69
|
+
origin_file = os.path.join(ORIGIN_DB_PATH, db)
|
|
70
|
+
shutil.copy(origin_file, destination_file)
|
|
71
|
+
return destination_file
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def read_db(session_id: str, db: str) -> Any:
|
|
75
|
+
db_file = prepare_db_file(session_id, db)
|
|
76
|
+
return read_json_file(db_file)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def write_db(session_id: str, db: str, data: Any) -> None:
|
|
80
|
+
db_file = prepare_db_file(session_id, db)
|
|
81
|
+
write_json_to_file(db_file, data)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def get_contacts(session_id: str) -> List[Contact]:
|
|
85
|
+
return [Contact(**item) for item in read_db(session_id, CONTACTS)]
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def get_cards(session_id: str) -> List[Card]:
|
|
89
|
+
return [Card(**item) for item in read_db(session_id, CARDS)]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def get_transactions(session_id: str) -> List[Transaction]:
|
|
93
|
+
return [Transaction(**item) for item in read_db(session_id, TRANSACTIONS)]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def get_account(session_id: str) -> MyAccount:
|
|
97
|
+
return MyAccount(**read_db(session_id, MY_ACCOUNT))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def write_account(session_id: str, account: MyAccount) -> None:
|
|
101
|
+
write_db(session_id, MY_ACCOUNT, account.dict())
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def add_contact(session_id: str, contact: Contact) -> None:
|
|
105
|
+
contacts = get_contacts(session_id)
|
|
106
|
+
contacts.append(contact)
|
|
107
|
+
write_db(session_id, CONTACTS, [c.dict() for c in contacts])
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def add_transaction(session_id: str, transaction: Transaction) -> None:
|
|
111
|
+
transactions = get_transactions(session_id)
|
|
112
|
+
transactions.append(transaction)
|
|
113
|
+
write_db(session_id, TRANSACTIONS, [t.dict() for t in transactions])
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def write_contacts(session_id: str, contacts: List[Contact]) -> None:
|
|
117
|
+
write_db(session_id, CONTACTS, [c.dict() for c in contacts])
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from openai import AsyncOpenAI
|
|
4
|
+
from rasa_sdk import Action, Tracker
|
|
5
|
+
from rasa_sdk.events import BotUttered
|
|
6
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
7
|
+
from rasa_sdk.types import DomainDict
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionHumanHandoff(Action):
|
|
11
|
+
def __init__(self) -> None:
|
|
12
|
+
super().__init__()
|
|
13
|
+
self.client = AsyncOpenAI()
|
|
14
|
+
|
|
15
|
+
def name(self) -> Text:
|
|
16
|
+
return "action_human_handoff"
|
|
17
|
+
|
|
18
|
+
async def run(
|
|
19
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
20
|
+
) -> List[Dict[Text, Any]]:
|
|
21
|
+
# Collect conversation
|
|
22
|
+
convo = []
|
|
23
|
+
for event in tracker.events:
|
|
24
|
+
if event.get("event") == "user":
|
|
25
|
+
user_text = "{}".format(event.get("text"))
|
|
26
|
+
user_text2 = "user - " + user_text
|
|
27
|
+
convo.append(user_text2)
|
|
28
|
+
if event.get("event") == "bot":
|
|
29
|
+
bot_text = "{}".format(event.get("text"))
|
|
30
|
+
bot_text2 = "bot - " + bot_text
|
|
31
|
+
# print(bot_text)
|
|
32
|
+
convo.append(bot_text2)
|
|
33
|
+
prompt = (
|
|
34
|
+
f"The following is a conversation between a bot and a human user, "
|
|
35
|
+
f"please summarise so that a human agent can easily understand "
|
|
36
|
+
f"the important context. Conversation: {convo}"
|
|
37
|
+
)
|
|
38
|
+
response = await self.client.chat.completions.create(
|
|
39
|
+
model="gpt-4", # or "gpt-3.5-turbo"
|
|
40
|
+
messages=[{"role": "user", "content": prompt}],
|
|
41
|
+
)
|
|
42
|
+
summarised_conversation = response.choices[0].message.content or ""
|
|
43
|
+
return [
|
|
44
|
+
BotUttered(
|
|
45
|
+
f"I will transfer the following summary of our conversation "
|
|
46
|
+
f"to the Callback Manager:\n"
|
|
47
|
+
f"{summarised_conversation}"
|
|
48
|
+
)
|
|
49
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import re
|
|
2
|
+
from typing import Any, Dict, List
|
|
3
|
+
|
|
4
|
+
from rasa_sdk import Action, Tracker
|
|
5
|
+
from rasa_sdk.events import SlotSet
|
|
6
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
7
|
+
|
|
8
|
+
from actions.db import get_account
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CheckTransferFunds(Action):
|
|
12
|
+
def name(self) -> str:
|
|
13
|
+
return "check_transfer_funds"
|
|
14
|
+
|
|
15
|
+
def run(
|
|
16
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[str, Any]
|
|
17
|
+
) -> List[Dict[str, Any]]:
|
|
18
|
+
account = get_account(tracker.sender_id)
|
|
19
|
+
amount_of_money = tracker.get_slot("amount_of_money")
|
|
20
|
+
if not amount_of_money:
|
|
21
|
+
has_sufficient_funds = False
|
|
22
|
+
else:
|
|
23
|
+
if isinstance(amount_of_money, str):
|
|
24
|
+
# Remove any non-numeric characters (except for the decimal point)
|
|
25
|
+
amount_of_money = float(re.sub(r"[^0-9.]", "", amount_of_money))
|
|
26
|
+
has_sufficient_funds = account.funds >= amount_of_money
|
|
27
|
+
return [SlotSet("has_sufficient_funds", has_sufficient_funds)]
|