rasa-pro 3.14.0a16__py3-none-any.whl → 3.14.0a17__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/copilot/prompts/copilot_system_prompt.jinja2 +156 -105
- rasa/builder/copilot/telemetry.py +35 -19
- rasa/builder/jobs.py +15 -5
- rasa/builder/models.py +7 -7
- rasa/builder/project_generator.py +129 -22
- rasa/builder/service.py +34 -18
- 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 +4 -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 +1 -1
- 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/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 +6 -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/agent_details.yml +6 -0
- 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 +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/_system/patterns/pattern_session_start.yml +11 -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 +53 -0
- rasa/cli/project_templates/finance/domain/general/agent_details.yml +31 -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/human_handoff.yml +7 -3
- rasa/cli/project_templates/finance/domain/general/welcome.yml +5 -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 +4 -3
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +31 -12
- 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 +4 -4
- rasa/cli/project_templates/telco/data/data.md +11 -0
- 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/endpoints.yml +1 -1
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +1 -1
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +52 -8
- rasa/core/channels/inspector/dist/assets/{arc-460861ce.js → arc-35222594.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-16c993e0.js → blockDiagram-38ab4fdb-a0efbfd3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-488337d7.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-b08e53a8.js → classDiagram-70f12bd4-39f40dbe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-b73f5a83.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-0210a219.js → createText-2e5e7dd3-b0f4f0fe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-28df7099.js → edges-e0da2a9e-9039bff9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-9fbf4a58.js → erDiagram-9861fffd-65c9b127.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fa691f62.js → flowDb-956e92f1-4f08b38e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-ca907b67.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-c10945f2.js → flowchart-elk-definition-4a651766-703c3015.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-9d49a75a.js → ganttDiagram-c361ad54-699328ea.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-9aa698ac.js → gitGraphDiagram-72cf32ee-04cf4b05.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-3ab38d50.js → graph-ee94449e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-6edac98f.js → index-3862675e-940162b4.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-61128091.js → index-c941dcb3.js} +3 -3
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-21baff85.js → infoDiagram-f8f76790-c79c2866.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-4a6c7e98.js → journeyDiagram-49397b02-84489d30.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-4beae36e.js → layout-a9aa9858.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-633b638e.js → line-eb73cf26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-22d77d65.js → linear-b3399f9a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f219ef43.js → mindmap-definition-fc14e90a-b095bf1a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-c7e1cafb.js → pieDiagram-8a3498a8-07644b66.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-045e49b4.js → quadrantDiagram-120e2f19-573a3f9c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-22485cb9.js → requirementDiagram-deff3bca-d457e1e1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-281c3da2.js → sankeyDiagram-04a897e0-9d26e1a2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-a3dd10e0.js → sequenceDiagram-704730f1-3a9cde10.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-61bd6eb2.js → stateDiagram-587899a1-4f3e8cec.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-deead491.js → stateDiagram-v2-d93cdb3a-e617e5bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-1b10e104.js → styles-6aaf32cf-eab30d2f.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-b1e18e58.js → styles-9a916d00-09994be2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-956c3492.js → styles-c10674c1-b7110364.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-e13f753d.js → svgDrawCommon-08f97a94-3ebc92ad.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e568acd2.js → timeline-definition-85554ec2-7d13d2f2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-8b7e27fc.js → xychartDiagram-e933f94c-488385e1.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
- rasa/core/channels/studio_chat.py +7 -0
- 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 +53 -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/iam_credentials_providers/aws_iam_credentials_providers.py +76 -1
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +1 -1
- rasa/core/lock_store.py +41 -7
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/version.py +1 -1
- {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/METADATA +4 -3
- {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/RECORD +162 -224
- 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/goodbye.yml +0 -7
- 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-b560a3d4.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-67015557.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-4a070961.js +0 -1
- {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/NOTICE +0 -0
- {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/WHEEL +0 -0
- {rasa_pro-3.14.0a16.dist-info → rasa_pro-3.14.0a17.dist-info}/entry_points.txt +0 -0
|
@@ -5,6 +5,65 @@ guidance and practical code solutions.
|
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
# Instruction Priority
|
|
9
|
+
|
|
10
|
+
1. Special tokens
|
|
11
|
+
- [ERROR_FALLBACK], [ROLEPLAY_REQUEST_DETECTED], [OUT_OF_SCOPE_REQUEST_DETECTED]
|
|
12
|
+
2. Handling Greetings / Handling Goodbyes. Highest priority for casual messages
|
|
13
|
+
3. Handling Knowledge Base Content Request
|
|
14
|
+
4. Response Guidelines & Format (including citations)
|
|
15
|
+
5. Everything else
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Default Introductions
|
|
20
|
+
|
|
21
|
+
## About Rasa
|
|
22
|
+
Rasa is a leading platform for generative conversational AI, designed to help
|
|
23
|
+
enterprises build and operate advanced AI assistants at scale.
|
|
24
|
+
|
|
25
|
+
If the user asks *"What is Rasa?"* or something similar, respond with this introduction.
|
|
26
|
+
Then follow it with a friendly next-step question, such as:
|
|
27
|
+
- "Do you want to learn more about the platform?"
|
|
28
|
+
- "Can I help you get started with exploring your assistant?"
|
|
29
|
+
|
|
30
|
+
***
|
|
31
|
+
|
|
32
|
+
## Handling Greetings
|
|
33
|
+
|
|
34
|
+
When the user sends a **greeting** message, reply **only** per the template below and
|
|
35
|
+
**then stop**:
|
|
36
|
+
- **Match their tone, style, and energy**. For example: "hi" -> "Hi!", "yo" -> "Yo!"
|
|
37
|
+
- Add **at most one** optional next-step. For example: "The assistant is loaded and ready. Want to start by exploring what it can do?"
|
|
38
|
+
- Keep it **brief, playful, and approachable**.
|
|
39
|
+
- **Response size limit:** 30 words max, 3 sentences max.
|
|
40
|
+
|
|
41
|
+
***
|
|
42
|
+
|
|
43
|
+
## Handling Goodbyes
|
|
44
|
+
When the user sends a **goodbye** message, reply **only** per the template below and
|
|
45
|
+
**then stop**:
|
|
46
|
+
|
|
47
|
+
- **Match their tone and energy**. For example: "cya" -> "See you!"
|
|
48
|
+
- Keep it **short, warm, and natural**.
|
|
49
|
+
- You may add a brief acknowledgment. For example: "thanks" -> "You're welcome!"
|
|
50
|
+
- **Response size limit:** 15 words max, 2 sentences max.
|
|
51
|
+
|
|
52
|
+
***
|
|
53
|
+
|
|
54
|
+
## When asked *"What can you do?"*
|
|
55
|
+
If a user asks: "What can you do" (or variations like "How can you help me?"),
|
|
56
|
+
always respond with the answer with this response pattern:
|
|
57
|
+
"""
|
|
58
|
+
I can help you understand how your assistant works, explain Rasa concepts, and guide you
|
|
59
|
+
through troubleshooting or improving your project. You can ask me things like:
|
|
60
|
+
- How does [Assistant Name] know what skills it has?
|
|
61
|
+
- What triggers this greeting?
|
|
62
|
+
- Help me add another banking skill to my assistant.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
8
67
|
# Your Abilities
|
|
9
68
|
You can help users with:
|
|
10
69
|
- **Debugging & Explanation**: Analyze conversations and logs to explain assistant behavior.
|
|
@@ -99,48 +158,6 @@ continuity.
|
|
|
99
158
|
|
|
100
159
|
---
|
|
101
160
|
|
|
102
|
-
# Default Introductions
|
|
103
|
-
|
|
104
|
-
## About Rasa
|
|
105
|
-
Rasa is a leading platform for generative conversational AI, designed to help
|
|
106
|
-
enterprises build and operate advanced AI assistants at scale.
|
|
107
|
-
|
|
108
|
-
If the user asks *"What is Rasa?"* or something similar, respond with this introduction.
|
|
109
|
-
Then follow it with a friendly next-step question, such as:
|
|
110
|
-
- "Do you want to learn more about the platform?"
|
|
111
|
-
- "Can I help you get started with exploring your assistant?"
|
|
112
|
-
|
|
113
|
-
***
|
|
114
|
-
|
|
115
|
-
## When asked *"What can you do?"*
|
|
116
|
-
If a user asks: "What can you do" (or variations like "How can you help me?"),
|
|
117
|
-
always respond with the answer with this response pattern:
|
|
118
|
-
"""
|
|
119
|
-
I can help you understand how your assistant works, explain Rasa concepts, and guide you
|
|
120
|
-
through troubleshooting or improving your project. You can ask me things like:
|
|
121
|
-
- How does [Assistant Name] know what skills it has?
|
|
122
|
-
- What triggers this greeting?
|
|
123
|
-
- Help me add another banking skill to my assistant.
|
|
124
|
-
"""
|
|
125
|
-
|
|
126
|
-
## Greetings (When user says *hey | hi | yo | hello*)
|
|
127
|
-
When the user greets you casually, **match the
|
|
128
|
-
tone of their greeting** and respond similarly to these friendly introduction patterns:
|
|
129
|
-
|
|
130
|
-
**Example 1:**
|
|
131
|
-
"""
|
|
132
|
-
Hey! I've got your assistant loaded and ready. Want to start by exploring what it can
|
|
133
|
-
do, or should we dive into editing a skill?
|
|
134
|
-
"""
|
|
135
|
-
|
|
136
|
-
**Example 2:**
|
|
137
|
-
"""
|
|
138
|
-
Yo! Your project's open. I can walk you through how it works, help debug, or add
|
|
139
|
-
something new. What's on your mind today?
|
|
140
|
-
"""
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
161
|
# Response Guidelines & Format
|
|
145
162
|
|
|
146
163
|
Your reply must be **Markdown** and communicate one clear idea (concept, explanation,
|
|
@@ -478,7 +495,103 @@ Do not attempt to explain, summarize, or speculate once fallback is triggered. S
|
|
|
478
495
|
|
|
479
496
|
---
|
|
480
497
|
|
|
481
|
-
# Examples
|
|
498
|
+
# Appendix: Full Examples
|
|
499
|
+
|
|
500
|
+
## Example: Greetings
|
|
501
|
+
|
|
502
|
+
User greeted you with one of the following messages:
|
|
503
|
+
1. "hi"
|
|
504
|
+
2. "Hey!"
|
|
505
|
+
3. "What's up?"
|
|
506
|
+
4. "hello there"
|
|
507
|
+
|
|
508
|
+
Your response should match the tone of the user's message:
|
|
509
|
+
1. "Heeyy! I've got your assistant loaded and ready. Want to start by exploring what it can do?"
|
|
510
|
+
2. "Hey there! Ready when you are. Should we dive into editing a skill?"
|
|
511
|
+
3. "All good here! I've got your assistant loaded and ready. What do you want to explore?"
|
|
512
|
+
4. "Hello there! You can start by testing a flow or updating a response."
|
|
513
|
+
|
|
514
|
+
***
|
|
515
|
+
|
|
516
|
+
## Example: Goodbye
|
|
517
|
+
|
|
518
|
+
User sent a goodbye message::
|
|
519
|
+
1. "bye"
|
|
520
|
+
2. "Goodbye!"
|
|
521
|
+
3. "See you later!"
|
|
522
|
+
4. "Good night!"
|
|
523
|
+
5. "Thanks. Catch you later."
|
|
524
|
+
6. "See you!"
|
|
525
|
+
|
|
526
|
+
Your response should match the tone of the user's message:
|
|
527
|
+
1. "Bye! Take care."
|
|
528
|
+
2. "Goodbye! Have a great day!"
|
|
529
|
+
3. "See you later! Feel free to reach out anytime."
|
|
530
|
+
4. "Good night! Talk to you later."
|
|
531
|
+
5. "You're very welcome. See you!"
|
|
532
|
+
6. "See you!"
|
|
533
|
+
|
|
534
|
+
***
|
|
535
|
+
|
|
536
|
+
## Example: Roleplaying as the Assistant
|
|
537
|
+
|
|
538
|
+
User is building an assistant that can book doctor appointments. User asked you, the
|
|
539
|
+
**Rasa assistant development expert**, to roleplay as the assistant itself. User
|
|
540
|
+
asked the following question:
|
|
541
|
+
"""
|
|
542
|
+
Get me appointment at the Dr. John Doe's office.
|
|
543
|
+
"""
|
|
544
|
+
|
|
545
|
+
Your response should be:
|
|
546
|
+
"""
|
|
547
|
+
[ROLEPLAY_REQUEST_DETECTED]
|
|
548
|
+
"""
|
|
549
|
+
|
|
550
|
+
***
|
|
551
|
+
|
|
552
|
+
## Example: Out of scope request
|
|
553
|
+
|
|
554
|
+
User is building an assistant that can book doctor appointments. User asked you, the
|
|
555
|
+
**Rasa assistant development expert**, one of the following questions:
|
|
556
|
+
- "What is the weather in Tokyo?"
|
|
557
|
+
- "How can I get a loan?"
|
|
558
|
+
- "What's the best crypto to invest in?"
|
|
559
|
+
|
|
560
|
+
Your response should be:
|
|
561
|
+
"""
|
|
562
|
+
[OUT_OF_SCOPE_REQUEST_DETECTED]
|
|
563
|
+
"""
|
|
564
|
+
|
|
565
|
+
***
|
|
566
|
+
|
|
567
|
+
## Example: Error handling
|
|
568
|
+
|
|
569
|
+
User provided a sentence that describes their error:
|
|
570
|
+
"""
|
|
571
|
+
Not a valid 'next' definition. Expected else block or if-then block.
|
|
572
|
+
"""
|
|
573
|
+
|
|
574
|
+
Your response should be:
|
|
575
|
+
"""
|
|
576
|
+
**The error is happening because** your `lorem_ipsum` flow has an invalid `next` section
|
|
577
|
+
right after the `collect: foo` step.
|
|
578
|
+
|
|
579
|
+
The structure of the conditional branching is incorrect. The next block is not following
|
|
580
|
+
the required `if` / `then` pattern. [1](https://rasa.com/docs/reference/primitives/flows)
|
|
581
|
+
|
|
582
|
+
**Here's how you can fix it:**
|
|
583
|
+
1. Ensure each condition inside `next:` uses both `if:` and `then:` keys. Neither can be skipped.
|
|
584
|
+
2. Add a final `else:` clause to handle cases where no conditions match.
|
|
585
|
+
3. Verify YAML structure: indentation must be exact, and every `if`/`then`/`else` item must be properly nested as a list item.
|
|
586
|
+
```
|
|
587
|
+
next:
|
|
588
|
+
- if: slots.foo > 1000
|
|
589
|
+
then: bar_step
|
|
590
|
+
- else: buzz_step
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
To prevent this in the future, always validate your flow YAML files with `rasa data validate` [2](https://rasa.com/docs/reference/api/command-line-interface/) to catch formatting and logic errors early.
|
|
594
|
+
"""
|
|
482
595
|
|
|
483
596
|
## Example: Creating a doctor appointment booking flow
|
|
484
597
|
|
|
@@ -651,65 +764,3 @@ assistant to personalize responses, make decisions, or maintain context across d
|
|
|
651
764
|
turns. Slots can be filled by the LLM, by user input, or by custom logic, and are often
|
|
652
765
|
used in flows to collect and validate information from users [1](https://rasa.com/docs/reference/primitives/slots)[3](https://rasa.com/docs/pro/build/assistant-memory)[4](https://rasa.com/docs/pro/tutorial)[7](https://rasa.com/docs/studio/build/flow-building/collect)[9](https://rasa.com/docs/reference/primitives/flows).
|
|
653
766
|
"""
|
|
654
|
-
|
|
655
|
-
***
|
|
656
|
-
|
|
657
|
-
## Example: Roleplaying as the Assistant
|
|
658
|
-
|
|
659
|
-
User is building an assistant that can book doctor appointments. User asked you, the
|
|
660
|
-
**Rasa assistant development expert**, to roleplay as the assistant itself. User
|
|
661
|
-
asked the following question:
|
|
662
|
-
"""
|
|
663
|
-
Get me appointment at the Dr. John Doe's office.
|
|
664
|
-
"""
|
|
665
|
-
|
|
666
|
-
Your response should be:
|
|
667
|
-
"""
|
|
668
|
-
[ROLEPLAY_REQUEST_DETECTED]
|
|
669
|
-
"""
|
|
670
|
-
|
|
671
|
-
***
|
|
672
|
-
|
|
673
|
-
## Example: Out of scope request
|
|
674
|
-
|
|
675
|
-
User is building an assistant that can book doctor appointments. User asked you, the
|
|
676
|
-
**Rasa assistant development expert**, one of the following questions:
|
|
677
|
-
- "What is the weather in Tokyo?"
|
|
678
|
-
- "How can I get a loan?"
|
|
679
|
-
- "What's the best crypto to invest in?"
|
|
680
|
-
|
|
681
|
-
Your response should be:
|
|
682
|
-
"""
|
|
683
|
-
[OUT_OF_SCOPE_REQUEST_DETECTED]
|
|
684
|
-
"""
|
|
685
|
-
|
|
686
|
-
***
|
|
687
|
-
|
|
688
|
-
## Example: Error handling
|
|
689
|
-
|
|
690
|
-
User provided a sentence that describes their error:
|
|
691
|
-
"""
|
|
692
|
-
Not a valid 'next' definition. Expected else block or if-then block.
|
|
693
|
-
"""
|
|
694
|
-
|
|
695
|
-
Your response should be:
|
|
696
|
-
"""
|
|
697
|
-
**The error is happening because** your `lorem_ipsum` flow has an invalid `next` section
|
|
698
|
-
right after the `collect: foo` step.
|
|
699
|
-
|
|
700
|
-
The structure of the conditional branching is incorrect. The next block is not following
|
|
701
|
-
the required `if` / `then` pattern. [1](https://rasa.com/docs/reference/primitives/flows)
|
|
702
|
-
|
|
703
|
-
**Here's how you can fix it:**
|
|
704
|
-
1. Ensure each condition inside `next:` uses both `if:` and `then:` keys. Neither can be skipped.
|
|
705
|
-
2. Add a final `else:` clause to handle cases where no conditions match.
|
|
706
|
-
3. Verify YAML structure: indentation must be exact, and every `if`/`then`/`else` item must be properly nested as a list item.
|
|
707
|
-
```
|
|
708
|
-
next:
|
|
709
|
-
- if: slots.foo > 1000
|
|
710
|
-
then: bar_step
|
|
711
|
-
- else: buzz_step
|
|
712
|
-
```
|
|
713
|
-
|
|
714
|
-
To prevent this in the future, always validate your flow YAML files with `rasa data validate` [2](https://rasa.com/docs/reference/api/command-line-interface/) to catch formatting and logic errors early.
|
|
715
|
-
"""
|
|
@@ -99,7 +99,7 @@ class CopilotTelemetry:
|
|
|
99
99
|
total_tokens: Optional[int] = None,
|
|
100
100
|
system_message: Optional[dict[str, Any]] = None,
|
|
101
101
|
chat_history: Optional[list[dict[str, Any]]] = None,
|
|
102
|
-
last_user_message: Optional[
|
|
102
|
+
last_user_message: Optional[str] = None,
|
|
103
103
|
) -> None:
|
|
104
104
|
"""Track a copilot message in the conversation.
|
|
105
105
|
|
|
@@ -112,28 +112,44 @@ class CopilotTelemetry:
|
|
|
112
112
|
input_tokens: Number of input tokens used (optional).
|
|
113
113
|
output_tokens: Number of output tokens generated (optional).
|
|
114
114
|
total_tokens: Total number of tokens used (input + output) (optional).
|
|
115
|
+
system_message: The system message used (optional).
|
|
116
|
+
chat_history: The chat history messages used (optional).
|
|
117
|
+
last_user_message: The last user message used (optional).
|
|
115
118
|
"""
|
|
116
119
|
structlogger.debug("builder.telemetry.log_copilot_turn", text=text)
|
|
120
|
+
|
|
121
|
+
# FIXME: Temporarily remove the system_message from telemetry payload.
|
|
122
|
+
# Reason: It often exceeds Segment payload size limits, causing the request
|
|
123
|
+
# to be rejected and the event to be absent in Segment. Instead, temporarily
|
|
124
|
+
# log the system_message so it's visible in Grafana.
|
|
125
|
+
telemetry_data = {
|
|
126
|
+
"project_id": self._project_id,
|
|
127
|
+
"message_id": uuid.uuid4().hex,
|
|
128
|
+
"text": text,
|
|
129
|
+
"prompt_version": self._prompt_version,
|
|
130
|
+
"source_urls": list(source_urls),
|
|
131
|
+
"flags": list(flags),
|
|
132
|
+
"latency_ms": latency_ms,
|
|
133
|
+
"model": model,
|
|
134
|
+
"input_tokens": input_tokens,
|
|
135
|
+
"output_tokens": output_tokens,
|
|
136
|
+
"total_tokens": total_tokens,
|
|
137
|
+
"chat_history": chat_history,
|
|
138
|
+
"last_user_message": last_user_message,
|
|
139
|
+
"timestamp": dt.datetime.utcnow().isoformat(),
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
# Log all telemetry data plus system_message for debugging
|
|
143
|
+
log_data = telemetry_data.copy()
|
|
144
|
+
if system_message:
|
|
145
|
+
log_data["system_message"] = system_message
|
|
146
|
+
|
|
147
|
+
structlogger.info("builder.telemetry.copilot_turn", **log_data)
|
|
148
|
+
|
|
117
149
|
_track(
|
|
118
150
|
COPILOT_BOT_MESSAGE_EVENT,
|
|
119
151
|
self._user_id,
|
|
120
|
-
|
|
121
|
-
"project_id": self._project_id,
|
|
122
|
-
"message_id": uuid.uuid4().hex,
|
|
123
|
-
"text": text,
|
|
124
|
-
"prompt_version": self._prompt_version,
|
|
125
|
-
"source_urls": list(source_urls),
|
|
126
|
-
"flags": list(flags),
|
|
127
|
-
"latency_ms": latency_ms,
|
|
128
|
-
"model": model,
|
|
129
|
-
"input_tokens": input_tokens,
|
|
130
|
-
"output_tokens": output_tokens,
|
|
131
|
-
"total_tokens": total_tokens,
|
|
132
|
-
"system_message": system_message,
|
|
133
|
-
"chat_history": chat_history,
|
|
134
|
-
"last_user_message": last_user_message,
|
|
135
|
-
"timestamp": dt.datetime.utcnow().isoformat(),
|
|
136
|
-
},
|
|
152
|
+
telemetry_data,
|
|
137
153
|
)
|
|
138
154
|
|
|
139
155
|
@staticmethod
|
|
@@ -177,7 +193,7 @@ class CopilotTelemetry:
|
|
|
177
193
|
total_tokens: int,
|
|
178
194
|
system_message: dict[str, Any],
|
|
179
195
|
chat_history: list[dict[str, Any]],
|
|
180
|
-
last_user_message:
|
|
196
|
+
last_user_message: Optional[str],
|
|
181
197
|
) -> None:
|
|
182
198
|
"""Log a copilot message from the response handler.
|
|
183
199
|
|
rasa/builder/jobs.py
CHANGED
|
@@ -207,16 +207,26 @@ async def run_template_to_bot_job(
|
|
|
207
207
|
job_manager.mark_done(job, error=str(exc))
|
|
208
208
|
|
|
209
209
|
|
|
210
|
-
async def
|
|
210
|
+
async def run_replace_all_files_job(
|
|
211
211
|
app: "Sanic",
|
|
212
212
|
job: JobInfo,
|
|
213
213
|
bot_files: dict,
|
|
214
214
|
) -> None:
|
|
215
|
+
"""Run the replace-all-files job in the background.
|
|
216
|
+
|
|
217
|
+
This replaces all bot files with the provided files and deletes any files
|
|
218
|
+
not included in the request (excluding .rasa/ and models/ directories).
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
app: The Sanic application instance.
|
|
222
|
+
job: The job information instance.
|
|
223
|
+
bot_files: Dictionary of file names to content for replacement.
|
|
224
|
+
"""
|
|
215
225
|
project_generator = app.ctx.project_generator
|
|
216
226
|
await push_job_status_event(job, JobStatus.received)
|
|
217
227
|
|
|
218
228
|
try:
|
|
219
|
-
project_generator.
|
|
229
|
+
project_generator.replace_all_bot_files(bot_files)
|
|
220
230
|
|
|
221
231
|
# 1. Validating
|
|
222
232
|
await push_job_status_event(job, JobStatus.validating)
|
|
@@ -240,7 +250,7 @@ async def run_update_files_job(
|
|
|
240
250
|
if config.VALIDATION_FAIL_ON_WARNINGS:
|
|
241
251
|
log_levels.append("warning")
|
|
242
252
|
structlogger.debug(
|
|
243
|
-
"
|
|
253
|
+
"replace_all_files_job.validation_error",
|
|
244
254
|
job_id=job.id,
|
|
245
255
|
error=str(exc),
|
|
246
256
|
validation_logs=exc.validation_logs,
|
|
@@ -254,7 +264,7 @@ async def run_update_files_job(
|
|
|
254
264
|
|
|
255
265
|
except TrainingError as exc:
|
|
256
266
|
structlogger.debug(
|
|
257
|
-
"
|
|
267
|
+
"replace_all_files_job.train_error",
|
|
258
268
|
job_id=job.id,
|
|
259
269
|
error=str(exc),
|
|
260
270
|
)
|
|
@@ -264,7 +274,7 @@ async def run_update_files_job(
|
|
|
264
274
|
except Exception as exc:
|
|
265
275
|
# Capture full traceback for anything truly unexpected
|
|
266
276
|
structlogger.exception(
|
|
267
|
-
"
|
|
277
|
+
"replace_all_files_job.unexpected_error",
|
|
268
278
|
job_id=job.id,
|
|
269
279
|
error=str(exc),
|
|
270
280
|
)
|
rasa/builder/models.py
CHANGED
|
@@ -6,7 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Any, Dict, List, Literal, Optional
|
|
7
7
|
|
|
8
8
|
import structlog
|
|
9
|
-
from pydantic import BaseModel, Field,
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
10
10
|
|
|
11
11
|
from rasa.cli.scaffold import ProjectTemplateName
|
|
12
12
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
@@ -21,7 +21,8 @@ class PromptRequest(BaseModel):
|
|
|
21
21
|
..., min_length=1, max_length=10000, description="The skill description prompt"
|
|
22
22
|
)
|
|
23
23
|
|
|
24
|
-
@
|
|
24
|
+
@field_validator("prompt")
|
|
25
|
+
@classmethod
|
|
25
26
|
def validate_prompt(cls, v: str) -> str:
|
|
26
27
|
if not v.strip():
|
|
27
28
|
raise ValueError("Prompt cannot be empty or whitespace only")
|
|
@@ -38,7 +39,8 @@ class TemplateRequest(BaseModel):
|
|
|
38
39
|
),
|
|
39
40
|
)
|
|
40
41
|
|
|
41
|
-
@
|
|
42
|
+
@field_validator("template_name")
|
|
43
|
+
@classmethod
|
|
42
44
|
def validate_template_name(cls, v: Any) -> Any:
|
|
43
45
|
if v not in ProjectTemplateName:
|
|
44
46
|
raise ValueError(
|
|
@@ -54,10 +56,8 @@ class BotDataUpdateRequest(BaseModel):
|
|
|
54
56
|
flows_yml: Optional[str] = Field(None, alias="flows.yml")
|
|
55
57
|
config_yml: Optional[str] = Field(None, alias="config.yml")
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
allow_population_by_field_name = True
|
|
59
|
+
# Allow using either field names or aliases when creating the model
|
|
60
|
+
model_config = ConfigDict(populate_by_name=True)
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
class BotData(BaseModel):
|
|
@@ -5,23 +5,25 @@ import os
|
|
|
5
5
|
import shutil
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from textwrap import dedent
|
|
8
|
-
from typing import Any, Dict, List, Optional
|
|
8
|
+
from typing import Any, Dict, Generator, List, Optional
|
|
9
9
|
|
|
10
10
|
import structlog
|
|
11
11
|
|
|
12
12
|
from rasa.builder import config
|
|
13
13
|
from rasa.builder.exceptions import ProjectGenerationError, ValidationError
|
|
14
14
|
from rasa.builder.llm_service import get_skill_generation_messages, llm_service
|
|
15
|
+
from rasa.builder.logging_utils import capture_exception_with_context
|
|
15
16
|
from rasa.builder.models import BotFiles
|
|
16
17
|
from rasa.builder.project_info import ProjectInfo, ensure_first_used, load_project_info
|
|
17
18
|
from rasa.builder.template_cache import copy_cache_for_template_if_available
|
|
18
19
|
from rasa.builder.training_service import TrainingInput
|
|
19
20
|
from rasa.builder.validation_service import validate_project
|
|
20
21
|
from rasa.cli.scaffold import ProjectTemplateName, create_initial_project
|
|
22
|
+
from rasa.shared.constants import DEFAULT_MODELS_PATH
|
|
21
23
|
from rasa.shared.core.flows import yaml_flows_io
|
|
22
24
|
from rasa.shared.importers.importer import TrainingDataImporter
|
|
23
25
|
from rasa.shared.utils.yaml import dump_obj_as_yaml_to_string
|
|
24
|
-
from rasa.utils.io import subpath
|
|
26
|
+
from rasa.utils.io import InvalidPathException, subpath
|
|
25
27
|
|
|
26
28
|
structlogger = structlog.get_logger()
|
|
27
29
|
|
|
@@ -233,25 +235,9 @@ class ProjectGenerator:
|
|
|
233
235
|
"""
|
|
234
236
|
bot_files: BotFiles = {}
|
|
235
237
|
|
|
236
|
-
for file in self.
|
|
237
|
-
# Skip directories
|
|
238
|
-
if not file.is_file():
|
|
239
|
-
continue
|
|
240
|
-
|
|
238
|
+
for file in self.bot_file_paths():
|
|
241
239
|
relative_path = file.relative_to(self.project_folder)
|
|
242
240
|
|
|
243
|
-
# Skip hidden files and directories (any path component starting with '.')
|
|
244
|
-
# as well as `__pycache__` folders
|
|
245
|
-
if any(part.startswith(".") for part in relative_path.parts):
|
|
246
|
-
continue
|
|
247
|
-
|
|
248
|
-
if "__pycache__" in relative_path.parts:
|
|
249
|
-
continue
|
|
250
|
-
|
|
251
|
-
# exclude the project_folder / models folder
|
|
252
|
-
if relative_path.parts[0] == "models":
|
|
253
|
-
continue
|
|
254
|
-
|
|
255
241
|
# Exclude the docs directory if specified
|
|
256
242
|
if exclude_docs_directory and relative_path.parts[0] == "docs":
|
|
257
243
|
continue
|
|
@@ -263,7 +249,6 @@ class ProjectGenerator:
|
|
|
263
249
|
]
|
|
264
250
|
if file.suffix.lstrip(".").lower() not in allowed_file_extensions:
|
|
265
251
|
continue
|
|
266
|
-
|
|
267
252
|
# Read file content and store with relative path as key
|
|
268
253
|
try:
|
|
269
254
|
bot_files[relative_path.as_posix()] = file.read_text(encoding="utf-8")
|
|
@@ -274,9 +259,40 @@ class ProjectGenerator:
|
|
|
274
259
|
file_path=file.as_posix(),
|
|
275
260
|
)
|
|
276
261
|
bot_files[relative_path.as_posix()] = None
|
|
277
|
-
|
|
278
262
|
return bot_files
|
|
279
263
|
|
|
264
|
+
def is_restricted_path(self, path: Path) -> bool:
|
|
265
|
+
"""Check if the path is restricted.
|
|
266
|
+
|
|
267
|
+
These paths are excluded from deletion and editing by the user.
|
|
268
|
+
"""
|
|
269
|
+
relative_path = path.relative_to(self.project_folder)
|
|
270
|
+
|
|
271
|
+
# Skip hidden files and directories (any path component starting with '.')
|
|
272
|
+
# as well as `__pycache__` folders
|
|
273
|
+
if any(part.startswith(".") for part in relative_path.parts):
|
|
274
|
+
return True
|
|
275
|
+
|
|
276
|
+
if "__pycache__" in relative_path.parts:
|
|
277
|
+
return True
|
|
278
|
+
|
|
279
|
+
# exclude the project_folder / models folder
|
|
280
|
+
if relative_path.parts[0] == DEFAULT_MODELS_PATH:
|
|
281
|
+
return True
|
|
282
|
+
|
|
283
|
+
return False
|
|
284
|
+
|
|
285
|
+
def bot_file_paths(
|
|
286
|
+
self,
|
|
287
|
+
) -> Generator[Path, None, None]:
|
|
288
|
+
"""Get the paths of all bot files."""
|
|
289
|
+
for file in self.project_folder.glob("**/*"):
|
|
290
|
+
# Skip directories
|
|
291
|
+
if not file.is_file() or self.is_restricted_path(file):
|
|
292
|
+
continue
|
|
293
|
+
|
|
294
|
+
yield file
|
|
295
|
+
|
|
280
296
|
def _get_bot_data_for_llm(self) -> Dict[str, Any]:
|
|
281
297
|
"""Get the current bot data for the LLM."""
|
|
282
298
|
file_importer = self._create_importer()
|
|
@@ -321,7 +337,7 @@ class ProjectGenerator:
|
|
|
321
337
|
def update_bot_files(self, files: Dict[str, Optional[str]]) -> None:
|
|
322
338
|
"""Update bot files with new content by writing to disk."""
|
|
323
339
|
for filename, content in files.items():
|
|
324
|
-
file_path = Path(subpath(self.project_folder, filename))
|
|
340
|
+
file_path = Path(subpath(str(self.project_folder), filename))
|
|
325
341
|
# Disallow updates inside .rasa project metadata directory
|
|
326
342
|
if any(
|
|
327
343
|
part.startswith(".")
|
|
@@ -332,6 +348,95 @@ class ProjectGenerator:
|
|
|
332
348
|
file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
333
349
|
file_path.write_text(content, encoding="utf-8")
|
|
334
350
|
|
|
351
|
+
def ensure_all_files_are_writable(self, files: Dict[str, Optional[str]]) -> None:
|
|
352
|
+
"""Ensure all files are writable."""
|
|
353
|
+
for filename, content in files.items():
|
|
354
|
+
file_path = Path(subpath(str(self.project_folder), filename))
|
|
355
|
+
if self.is_restricted_path(file_path):
|
|
356
|
+
raise InvalidPathException(
|
|
357
|
+
f"This file or folder is restricted from editing: {file_path}"
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
def replace_all_bot_files(self, files: Dict[str, Optional[str]]) -> None:
|
|
361
|
+
"""Replace all bot files with new content, deleting files not in the request.
|
|
362
|
+
|
|
363
|
+
Files/folders starting with .rasa/ or models/ are excluded from deletion.
|
|
364
|
+
|
|
365
|
+
Args:
|
|
366
|
+
files: Dictionary mapping file names to their content
|
|
367
|
+
"""
|
|
368
|
+
self.ensure_all_files_are_writable(files)
|
|
369
|
+
# Collect all existing files - any files not in the new `files` dict will be
|
|
370
|
+
# deleted from this set
|
|
371
|
+
existing_files = set(path.as_posix() for path in self.bot_file_paths())
|
|
372
|
+
|
|
373
|
+
# Write all new files
|
|
374
|
+
for filename, content in files.items():
|
|
375
|
+
if content is None:
|
|
376
|
+
continue
|
|
377
|
+
|
|
378
|
+
file_path = Path(subpath(str(self.project_folder), filename))
|
|
379
|
+
file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
380
|
+
|
|
381
|
+
try:
|
|
382
|
+
file_path.write_text(content, encoding="utf-8")
|
|
383
|
+
except Exception as e:
|
|
384
|
+
# Log write failure and avoid deleting an existing file by mistake
|
|
385
|
+
capture_exception_with_context(
|
|
386
|
+
e,
|
|
387
|
+
"project_generator.replace_all_bot_files.write_error",
|
|
388
|
+
extra={"file_path": file_path},
|
|
389
|
+
)
|
|
390
|
+
if file_path.as_posix() in existing_files:
|
|
391
|
+
# Keep the original file if it already existed
|
|
392
|
+
existing_files.discard(file_path.as_posix())
|
|
393
|
+
continue
|
|
394
|
+
|
|
395
|
+
# Remove from deletion set since this file is in the new set of files
|
|
396
|
+
existing_files.discard(file_path.as_posix())
|
|
397
|
+
|
|
398
|
+
# Delete files that weren't in the request
|
|
399
|
+
for file_to_delete in existing_files:
|
|
400
|
+
file_path = Path(file_to_delete)
|
|
401
|
+
try:
|
|
402
|
+
file_path.unlink()
|
|
403
|
+
except Exception as e:
|
|
404
|
+
capture_exception_with_context(
|
|
405
|
+
e,
|
|
406
|
+
"project_generator.replace_all_bot_files.delete_error",
|
|
407
|
+
extra={"file_path": file_path},
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
# Clean up empty directories (except excluded ones)
|
|
411
|
+
self._cleanup_empty_directories()
|
|
412
|
+
|
|
413
|
+
def _cleanup_empty_directories(self) -> None:
|
|
414
|
+
"""Remove empty directories from the project folder.
|
|
415
|
+
|
|
416
|
+
Excludes hidden files and directories, and models/ from cleanup.
|
|
417
|
+
"""
|
|
418
|
+
# Walk directories in reverse order (deepest first)
|
|
419
|
+
for dirpath, dirnames, filenames in os.walk(self.project_folder, topdown=False):
|
|
420
|
+
# Skip if this is the project root
|
|
421
|
+
if dirpath == str(self.project_folder):
|
|
422
|
+
continue
|
|
423
|
+
|
|
424
|
+
if self.is_restricted_path(Path(dirpath)):
|
|
425
|
+
continue
|
|
426
|
+
|
|
427
|
+
relative_path = Path(dirpath).relative_to(self.project_folder)
|
|
428
|
+
|
|
429
|
+
try:
|
|
430
|
+
# Only remove if directory is empty
|
|
431
|
+
if not os.listdir(dirpath):
|
|
432
|
+
os.rmdir(dirpath)
|
|
433
|
+
except Exception as e:
|
|
434
|
+
capture_exception_with_context(
|
|
435
|
+
e,
|
|
436
|
+
"project_generator.cleanup_empty_directories.error",
|
|
437
|
+
extra={"directory": relative_path.as_posix()},
|
|
438
|
+
)
|
|
439
|
+
|
|
335
440
|
def cleanup(self) -> None:
|
|
336
441
|
"""Cleanup the project folder."""
|
|
337
442
|
# remove all the files and folders in the project folder resulting
|
|
@@ -339,6 +444,8 @@ class ProjectGenerator:
|
|
|
339
444
|
for filename in os.listdir(self.project_folder):
|
|
340
445
|
file_path = os.path.join(self.project_folder, filename)
|
|
341
446
|
try:
|
|
447
|
+
if filename == "lost+found":
|
|
448
|
+
continue
|
|
342
449
|
if os.path.isfile(file_path) or os.path.islink(file_path):
|
|
343
450
|
os.unlink(file_path)
|
|
344
451
|
elif os.path.isdir(file_path):
|