rasa-pro 3.14.0.dev20250901__py3-none-any.whl → 3.14.0.dev20250922__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/builder/config.py +1 -0
- 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/jobs.py +33 -21
- rasa/builder/main.py +38 -62
- rasa/builder/models.py +7 -7
- rasa/builder/project_generator.py +143 -147
- rasa/builder/service.py +42 -27
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +74 -4
- 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/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +9 -2
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +52 -8
- rasa/core/channels/development_inspector.py +1 -21
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-35222594.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-a0efbfd3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-0584c0f2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-39f40dbe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-1ad755f3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-b0f4f0fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-9039bff9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-65c9b127.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-4f08b38e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-e95c362a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-703c3015.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-699328ea.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-04cf4b05.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-ee94449e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-940162b4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-4d4bdf3a.js → index-c941dcb3.js} +132 -131
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-c79c2866.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-84489d30.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-a9aa9858.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-eb73cf26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-b3399f9a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-b095bf1a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-07644b66.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-573a3f9c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-d457e1e1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-9d26e1a2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-3a9cde10.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-4f3e8cec.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-e617e5bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-eab30d2f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-09994be2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-b7110364.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-3ebc92ad.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-7d13d2f2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-488385e1.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +5 -31
- rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
- 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 +14 -0
- rasa/core/channels/inspector/src/types.ts +32 -7
- rasa/core/channels/studio_chat.py +23 -41
- 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 +2 -1
- rasa/core/channels/voice_stream/jambonz.py +9 -1
- rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
- rasa/core/channels/voice_stream/voice_channel.py +61 -0
- rasa/core/concurrent_lock_store.py +66 -16
- rasa/core/constants.py +7 -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/flows/flow_executor.py +1 -1
- rasa/core/processor.py +32 -0
- rasa/core/redis_connection_factory.py +469 -0
- rasa/core/tracker_stores/redis_tracker_store.py +32 -14
- rasa/core/tracker_stores/sql_tracker_store.py +57 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/storage/local_model_storage.py +41 -4
- rasa/model_manager/socket_bridge.py +1 -2
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/shared/core/constants.py +1 -0
- rasa/shared/core/events.py +2 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/utils/pypred.py +38 -0
- rasa/validator.py +12 -8
- rasa/version.py +1 -1
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0.dev20250922.dist-info}/METADATA +19 -16
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0.dev20250922.dist-info}/RECORD +231 -266
- 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/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.0.dev20250922.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0.dev20250922.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0.dev20250901.dist-info → rasa_pro-3.14.0.dev20250922.dist-info}/entry_points.txt +0 -0
rasa/builder/service.py
CHANGED
|
@@ -54,8 +54,8 @@ from rasa.builder.guardrails.utils import (
|
|
|
54
54
|
from rasa.builder.job_manager import job_manager
|
|
55
55
|
from rasa.builder.jobs import (
|
|
56
56
|
run_prompt_to_bot_job,
|
|
57
|
+
run_replace_all_files_job,
|
|
57
58
|
run_template_to_bot_job,
|
|
58
|
-
run_update_files_job,
|
|
59
59
|
)
|
|
60
60
|
from rasa.builder.llm_service import llm_service
|
|
61
61
|
from rasa.builder.logging_utils import (
|
|
@@ -512,26 +512,31 @@ async def get_bot_files(request: Request) -> HTTPResponse:
|
|
|
512
512
|
)
|
|
513
513
|
|
|
514
514
|
|
|
515
|
-
@bp.route("/files", methods=["
|
|
516
|
-
@openapi.summary("
|
|
515
|
+
@bp.route("/files", methods=["POST"])
|
|
516
|
+
@openapi.summary("Replace all bot files")
|
|
517
517
|
@openapi.description(
|
|
518
|
-
"
|
|
519
|
-
"
|
|
520
|
-
"
|
|
518
|
+
"Replaces all bot configuration files with the provided files, deletes any "
|
|
519
|
+
"files not included in the request (excluding .rasa/ and models/ directories), "
|
|
520
|
+
"and retrains the model. Returns immediately with a job ID. Connect to "
|
|
521
|
+
"`/job-events/<job_id>` for real-time SSE progress tracking."
|
|
521
522
|
"\n\n"
|
|
523
|
+
"**File Management:**\n"
|
|
524
|
+
"- All files in the request are written to the project folder\n"
|
|
525
|
+
"- Files not included in the request are deleted from the project\n"
|
|
526
|
+
"- Files/folders starting with `.rasa/` or `models/` are excluded from deletion\n\n"
|
|
522
527
|
"**SSE Event Flow:** (available via /job-events/<job_id>)\n"
|
|
523
528
|
"1. `received` - Request received by server\n"
|
|
524
529
|
"2. `validating` - Validating bot configuration files\n"
|
|
525
530
|
"3. `validation_success` - File validation completed successfully\n"
|
|
526
531
|
"4. `training` - Training the bot model with updated files\n"
|
|
527
532
|
"5. `train_success` - Model training completed\n"
|
|
528
|
-
"6. `done` - Bot files
|
|
533
|
+
"6. `done` - Bot files replacement completed\n\n"
|
|
529
534
|
"**Error Events (can occur at any time):**\n"
|
|
530
535
|
"- `validation_error` - Bot configuration files are invalid\n"
|
|
531
536
|
"- `train_error` - Files updated but training failed\n"
|
|
532
537
|
"- `error` - Unexpected error occurred\n\n"
|
|
533
538
|
"**Usage:**\n"
|
|
534
|
-
"1. Send
|
|
539
|
+
"1. Send POST request with Content-Type: application/json\n"
|
|
535
540
|
"2. The response will be a JSON object `{job_id: ...}`\n"
|
|
536
541
|
"3. Connect to `/job-events/<job_id>` for a server-sent event stream of progress."
|
|
537
542
|
)
|
|
@@ -539,9 +544,11 @@ async def get_bot_files(request: Request) -> HTTPResponse:
|
|
|
539
544
|
@openapi.body(
|
|
540
545
|
{"application/json": {str: Optional[str]}},
|
|
541
546
|
description=(
|
|
542
|
-
"A dictionary mapping file names to their
|
|
543
|
-
"
|
|
544
|
-
"Files
|
|
547
|
+
"A dictionary mapping file names to their complete content. "
|
|
548
|
+
"All files in the project will be replaced with these files. "
|
|
549
|
+
"Files not included in the request will be deleted from the project "
|
|
550
|
+
"(except for .rasa/ and models/ directories). "
|
|
551
|
+
"The file name should be the relative path from the project root."
|
|
545
552
|
),
|
|
546
553
|
required=True,
|
|
547
554
|
example={
|
|
@@ -558,6 +565,10 @@ async def get_bot_files(request: Request) -> HTTPResponse:
|
|
|
558
565
|
" - name: CountVectorsFeaturizer\n"
|
|
559
566
|
"policies:\n - name: MemoizationPolicy\n - name: RulePolicy"
|
|
560
567
|
),
|
|
568
|
+
"data/nlu.yml": (
|
|
569
|
+
"version: '3.1'\n"
|
|
570
|
+
"nlu:\n- intent: greet\n examples: |\n - hello\n - hi"
|
|
571
|
+
),
|
|
561
572
|
},
|
|
562
573
|
)
|
|
563
574
|
@openapi.response(
|
|
@@ -565,7 +576,7 @@ async def get_bot_files(request: Request) -> HTTPResponse:
|
|
|
565
576
|
{"application/json": model_to_schema(JobCreateResponse)},
|
|
566
577
|
description=(
|
|
567
578
|
"Job created. Poll or subscribe to /job-events/<job_id> "
|
|
568
|
-
"for progress and SSE updates."
|
|
579
|
+
"for progress and SSE updates on file replacement and training."
|
|
569
580
|
),
|
|
570
581
|
)
|
|
571
582
|
@openapi.response(
|
|
@@ -607,8 +618,8 @@ async def get_bot_files(request: Request) -> HTTPResponse:
|
|
|
607
618
|
schema=str,
|
|
608
619
|
)
|
|
609
620
|
@protected()
|
|
610
|
-
async def
|
|
611
|
-
"""
|
|
621
|
+
async def replace_all_bot_files(request: Request) -> HTTPResponse:
|
|
622
|
+
"""Replace all bot files with server-sent events for progress tracking."""
|
|
612
623
|
try:
|
|
613
624
|
bot_files = request.json
|
|
614
625
|
except Exception as exc:
|
|
@@ -621,17 +632,17 @@ async def update_bot_files(request: Request) -> HTTPResponse:
|
|
|
621
632
|
|
|
622
633
|
try:
|
|
623
634
|
job = job_manager.create_job()
|
|
624
|
-
request.app.add_task(
|
|
635
|
+
request.app.add_task(run_replace_all_files_job(request.app, job, bot_files))
|
|
625
636
|
return response.json(JobCreateResponse(job_id=job.id).model_dump(), status=200)
|
|
626
637
|
except Exception as exc:
|
|
627
638
|
capture_exception_with_context(
|
|
628
639
|
exc,
|
|
629
|
-
"bot_builder_service.
|
|
630
|
-
tags={"endpoint": "/api/files", "method": "
|
|
640
|
+
"bot_builder_service.replace_all_bot_files.unexpected_error",
|
|
641
|
+
tags={"endpoint": "/api/files", "method": "POST"},
|
|
631
642
|
)
|
|
632
643
|
return response.json(
|
|
633
644
|
ApiErrorResponse(
|
|
634
|
-
error="Failed to
|
|
645
|
+
error="Failed to replace bot files", details={"error": str(exc)}
|
|
635
646
|
).model_dump(),
|
|
636
647
|
status=HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
637
648
|
)
|
|
@@ -1122,11 +1133,9 @@ async def copilot(request: Request) -> None:
|
|
|
1122
1133
|
# copilot response handler
|
|
1123
1134
|
start_timestamp = time.perf_counter()
|
|
1124
1135
|
copilot_client = llm_service.instantiate_copilot()
|
|
1125
|
-
(
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
system_prompt,
|
|
1129
|
-
) = await copilot_client.generate_response(context)
|
|
1136
|
+
(original_stream, generation_context) = await copilot_client.generate_response(
|
|
1137
|
+
context
|
|
1138
|
+
)
|
|
1130
1139
|
|
|
1131
1140
|
copilot_response_handler = llm_service.instantiate_handler(
|
|
1132
1141
|
COPILOT_HANDLER_ROLLING_BUFFER_SIZE
|
|
@@ -1142,18 +1151,24 @@ async def copilot(request: Request) -> None:
|
|
|
1142
1151
|
asyncio.to_thread(
|
|
1143
1152
|
telemetry.log_copilot_from_handler,
|
|
1144
1153
|
handler=copilot_response_handler,
|
|
1145
|
-
used_documents=
|
|
1154
|
+
used_documents=generation_context.relevant_documents,
|
|
1146
1155
|
latency_ms=int((time.perf_counter() - start_timestamp) * 1000),
|
|
1147
|
-
|
|
1156
|
+
system_message=generation_context.system_message,
|
|
1157
|
+
chat_history=generation_context.chat_history,
|
|
1158
|
+
last_user_message=(
|
|
1159
|
+
req.last_message.get_text_content()
|
|
1160
|
+
if (req.last_message and req.last_message.role == ROLE_USER)
|
|
1161
|
+
else None
|
|
1162
|
+
),
|
|
1148
1163
|
**copilot_client.usage_statistics.model_dump(),
|
|
1149
1164
|
)
|
|
1150
1165
|
)
|
|
1151
1166
|
|
|
1152
1167
|
# 9. Once the stream is over, extract and send references
|
|
1153
1168
|
# if any documents were used
|
|
1154
|
-
if
|
|
1169
|
+
if generation_context.relevant_documents:
|
|
1155
1170
|
reference_section = copilot_response_handler.extract_references(
|
|
1156
|
-
|
|
1171
|
+
generation_context.relevant_documents
|
|
1157
1172
|
)
|
|
1158
1173
|
await sse.send(reference_section.to_sse_event().format())
|
|
1159
1174
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
import aiofiles
|
|
5
|
+
import aiofiles.os
|
|
6
|
+
import aioshutil
|
|
7
|
+
import structlog
|
|
8
|
+
|
|
9
|
+
from rasa.cli.scaffold import ProjectTemplateName
|
|
10
|
+
|
|
11
|
+
structlogger = structlog.get_logger()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Root directory for storing downloaded template caches on disk.
|
|
15
|
+
_CACHE_ROOT_DIR = Path(os.getenv("RASA_TEMPLATE_CACHE_DIR", "/templates"))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _template_cache_dir(template: ProjectTemplateName) -> Path:
|
|
19
|
+
"""Return the local cache directory for a given template and version."""
|
|
20
|
+
return _CACHE_ROOT_DIR / template.value
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
async def _copytree(src: Path, dst: Path) -> None:
|
|
24
|
+
"""Copy directory tree from src to dst, merging into dst.
|
|
25
|
+
|
|
26
|
+
Existing files are overwritten. Hidden files and directories are included, as
|
|
27
|
+
caches can contain `.rasa` metadata that should be applied before calling
|
|
28
|
+
`ensure_first_used`.
|
|
29
|
+
"""
|
|
30
|
+
for root, dirs, files in os.walk(src):
|
|
31
|
+
rel_path = Path(root).relative_to(src)
|
|
32
|
+
target_dir = dst / rel_path
|
|
33
|
+
await aiofiles.os.makedirs(target_dir, exist_ok=True)
|
|
34
|
+
for filename in files:
|
|
35
|
+
src_file = Path(root) / filename
|
|
36
|
+
dst_file = target_dir / filename
|
|
37
|
+
await aioshutil.copy2(src_file, dst_file)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def copy_cache_for_template_if_available(
|
|
41
|
+
template: ProjectTemplateName, project_folder: Path
|
|
42
|
+
) -> None:
|
|
43
|
+
"""Copy a previously downloaded cache for `template` into `project_folder`.
|
|
44
|
+
|
|
45
|
+
If the cache does not exist, this function is a no-op.
|
|
46
|
+
"""
|
|
47
|
+
try:
|
|
48
|
+
cache_dir = _template_cache_dir(template)
|
|
49
|
+
if cache_dir.exists() and any(cache_dir.iterdir()):
|
|
50
|
+
await _copytree(cache_dir, project_folder)
|
|
51
|
+
structlogger.info(
|
|
52
|
+
"project_generator.copy_cache_for_template.success",
|
|
53
|
+
template=template,
|
|
54
|
+
event_info=(
|
|
55
|
+
"Copied cached template files from cache to project folder."
|
|
56
|
+
),
|
|
57
|
+
)
|
|
58
|
+
else:
|
|
59
|
+
structlogger.debug(
|
|
60
|
+
"project_generator.copy_cache_for_template.missing",
|
|
61
|
+
template=template,
|
|
62
|
+
event_info=("No local cache found for template; skipping copy."),
|
|
63
|
+
)
|
|
64
|
+
except Exception as exc:
|
|
65
|
+
structlogger.warning(
|
|
66
|
+
"project_generator.copy_cache_for_template.error",
|
|
67
|
+
error=str(exc),
|
|
68
|
+
template=template,
|
|
69
|
+
)
|
rasa/builder/training_service.py
CHANGED
|
@@ -2,20 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
from typing import Optional
|
|
5
6
|
|
|
6
7
|
import structlog
|
|
8
|
+
from sanic import Sanic
|
|
7
9
|
|
|
8
10
|
from rasa.builder.exceptions import AgentLoadError, TrainingError
|
|
9
11
|
from rasa.builder.models import TrainingInput
|
|
10
|
-
from rasa.core import
|
|
12
|
+
from rasa.core.agent import Agent, load_agent
|
|
13
|
+
from rasa.core.channels.studio_chat import StudioChatInput
|
|
11
14
|
from rasa.core.utils import AvailableEndpoints, read_endpoints_from_path
|
|
15
|
+
from rasa.model import get_latest_model
|
|
12
16
|
from rasa.model_training import TrainingResult, train
|
|
13
17
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
14
18
|
|
|
15
19
|
structlogger = structlog.get_logger()
|
|
16
20
|
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
def update_agent(agent: Optional[Agent], app: Sanic) -> None:
|
|
23
|
+
"""Update the agent in the request context."""
|
|
24
|
+
app.ctx.agent = agent
|
|
25
|
+
if hasattr(app.ctx, "input_channel") and isinstance(
|
|
26
|
+
app.ctx.input_channel, StudioChatInput
|
|
27
|
+
):
|
|
28
|
+
app.ctx.input_channel.agent = agent
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def train_and_load_agent(input: TrainingInput) -> Agent:
|
|
19
32
|
"""Train a model and load an agent.
|
|
20
33
|
|
|
21
34
|
Args:
|
|
@@ -54,6 +67,63 @@ async def train_and_load_agent(input: TrainingInput) -> agent.Agent:
|
|
|
54
67
|
raise TrainingError(f"SystemExit during training: {e}")
|
|
55
68
|
|
|
56
69
|
|
|
70
|
+
async def try_load_existing_agent(project_folder: str) -> Optional[Agent]:
|
|
71
|
+
"""Try to load an existing agent from the project's models directory.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
project_folder: Path to the project folder
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Loaded Agent instance if successful, None otherwise
|
|
78
|
+
"""
|
|
79
|
+
models_dir = os.path.join(project_folder, "models")
|
|
80
|
+
|
|
81
|
+
if not os.path.exists(models_dir) or not os.path.isdir(models_dir):
|
|
82
|
+
structlogger.debug("No models directory found", models_dir=models_dir)
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
try:
|
|
86
|
+
# Find the latest model in the models directory
|
|
87
|
+
latest_model_path = get_latest_model(models_dir)
|
|
88
|
+
if not latest_model_path:
|
|
89
|
+
structlogger.debug(
|
|
90
|
+
"No models found in models directory", models_dir=models_dir
|
|
91
|
+
)
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
structlogger.info(
|
|
95
|
+
"Found existing model, attempting to load", model_path=latest_model_path
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
# Get available endpoints for agent loading
|
|
99
|
+
available_endpoints = AvailableEndpoints.get_instance()
|
|
100
|
+
|
|
101
|
+
# Load the agent
|
|
102
|
+
agent = await load_agent(
|
|
103
|
+
model_path=latest_model_path, endpoints=available_endpoints
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
if agent and agent.is_ready():
|
|
107
|
+
structlogger.info(
|
|
108
|
+
"Successfully loaded existing agent", model_path=latest_model_path
|
|
109
|
+
)
|
|
110
|
+
return agent
|
|
111
|
+
else:
|
|
112
|
+
structlogger.warning(
|
|
113
|
+
"Agent loaded but not ready", model_path=latest_model_path
|
|
114
|
+
)
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
except Exception as e:
|
|
118
|
+
structlogger.warning(
|
|
119
|
+
"Failed to load existing agent",
|
|
120
|
+
models_dir=models_dir,
|
|
121
|
+
error=str(e),
|
|
122
|
+
exc_info=True,
|
|
123
|
+
)
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
|
|
57
127
|
async def _setup_endpoints(endpoints_file: Path) -> None:
|
|
58
128
|
"""Setup endpoints configuration for training."""
|
|
59
129
|
try:
|
|
@@ -90,7 +160,7 @@ async def _train_model(importer: TrainingDataImporter) -> TrainingResult:
|
|
|
90
160
|
raise TrainingError(f"Model training failed: {e}")
|
|
91
161
|
|
|
92
162
|
|
|
93
|
-
async def _load_agent(model_path: str) ->
|
|
163
|
+
async def _load_agent(model_path: str) -> Agent:
|
|
94
164
|
"""Load the trained agent."""
|
|
95
165
|
try:
|
|
96
166
|
structlogger.info("training.loading_agent", model_path=model_path)
|
|
@@ -105,7 +175,7 @@ async def _load_agent(model_path: str) -> agent.Agent:
|
|
|
105
175
|
model_path=model_path,
|
|
106
176
|
)
|
|
107
177
|
|
|
108
|
-
agent_instance = await
|
|
178
|
+
agent_instance = await load_agent(
|
|
109
179
|
model_path=model_path,
|
|
110
180
|
remote_storage=None,
|
|
111
181
|
endpoints=available_endpoints,
|
|
@@ -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
|