rasa-pro 3.13.12__py3-none-any.whl → 3.14.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/__main__.py +15 -3
- rasa/agents/__init__.py +0 -0
- rasa/agents/agent_factory.py +122 -0
- rasa/agents/agent_manager.py +213 -0
- rasa/agents/constants.py +43 -0
- rasa/agents/core/__init__.py +0 -0
- rasa/agents/core/agent_protocol.py +107 -0
- rasa/agents/core/types.py +81 -0
- rasa/agents/exceptions.py +38 -0
- rasa/agents/protocol/__init__.py +5 -0
- rasa/agents/protocol/a2a/__init__.py +0 -0
- rasa/agents/protocol/a2a/a2a_agent.py +889 -0
- rasa/agents/protocol/mcp/__init__.py +0 -0
- rasa/agents/protocol/mcp/mcp_base_agent.py +778 -0
- rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
- rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
- rasa/agents/schemas/__init__.py +13 -0
- rasa/agents/schemas/agent_input.py +38 -0
- rasa/agents/schemas/agent_output.py +26 -0
- rasa/agents/schemas/agent_tool_result.py +65 -0
- rasa/agents/schemas/agent_tool_schema.py +186 -0
- rasa/agents/templates/__init__.py +0 -0
- rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
- rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
- rasa/agents/utils.py +228 -0
- rasa/agents/validation.py +538 -0
- rasa/api.py +23 -9
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +96 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +38 -0
- rasa/builder/copilot/copilot.py +562 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +81 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +690 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +787 -0
- rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
- rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +91 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +234 -0
- rasa/builder/copilot/templated_messages/__init__.py +0 -0
- rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
- rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +41 -0
- rasa/builder/copilot/templated_messages/copilot_welcome_messages.yml +56 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +15 -0
- rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
- rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/clients.py +256 -0
- rasa/builder/guardrails/constants.py +12 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/models.py +266 -0
- rasa/builder/guardrails/policy_checker.py +324 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +94 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +609 -0
- rasa/builder/llm_service.py +273 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +234 -0
- rasa/builder/models.py +229 -0
- rasa/builder/project_generator.py +463 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/service.py +1367 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +69 -0
- rasa/builder/training_service.py +188 -0
- rasa/builder/validation_service.py +101 -0
- rasa/cli/arguments/data.py +9 -0
- rasa/cli/arguments/default_arguments.py +12 -0
- rasa/cli/arguments/run.py +2 -0
- rasa/cli/arguments/train.py +2 -0
- rasa/cli/data.py +78 -10
- rasa/cli/dialogue_understanding_test.py +11 -7
- rasa/cli/e2e_test.py +10 -6
- rasa/cli/evaluate.py +4 -2
- rasa/cli/export.py +5 -2
- rasa/cli/inspect.py +9 -4
- rasa/cli/interactive.py +8 -4
- rasa/cli/llm_fine_tuning.py +12 -6
- rasa/cli/project_templates/basic/README.md +23 -0
- rasa/cli/project_templates/basic/actions/__init__ +0 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
- rasa/cli/project_templates/basic/actions/actions.md +10 -0
- rasa/cli/project_templates/basic/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +8 -0
- rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
- rasa/cli/project_templates/basic/data/general/help.yml +6 -0
- rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/docs.md +5 -0
- rasa/cli/project_templates/basic/docs/template.txt +28 -0
- rasa/cli/project_templates/basic/domain/domain.md +11 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
- rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
- rasa/cli/project_templates/basic/endpoints.yml +67 -0
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/help.yml +8 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/human_handoff.yml +41 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/patterns.yml +32 -0
- rasa/cli/project_templates/basic/tests/e2e_test_cases/without_stub/general/show_faqs.yml +8 -0
- rasa/cli/project_templates/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- rasa/cli/project_templates/defaults.py +1 -0
- rasa/cli/project_templates/finance/README.md +26 -0
- rasa/cli/project_templates/finance/actions/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- 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/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/check_that_card_exists.py +21 -0
- 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/__init__.py +0 -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 +29 -0
- rasa/cli/project_templates/finance/credentials.yml +33 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +9 -0
- 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 +45 -0
- 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/feedback.yml +20 -0
- rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/finance/data/general/hello.yml +6 -0
- rasa/cli/project_templates/finance/data/general/help.yml +9 -0
- rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
- rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
- 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 +34 -0
- 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 +15 -0
- 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 +44 -0
- 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 +8 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +31 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +39 -0
- 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 +221 -0
- rasa/cli/project_templates/finance/endpoints.yml +67 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/check_balance.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/accounts/download_statements.yml +43 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/cards/block_card.yml +55 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/general/patterns.yml +22 -0
- rasa/cli/project_templates/finance/tests/e2e_test_cases/without_stub/transfers/transfer_money.yml +56 -0
- rasa/cli/project_templates/telco/README.md +25 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/actions.md +12 -0
- rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
- rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
- rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
- rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
- rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
- rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
- rasa/cli/project_templates/telco/config.yml +29 -0
- rasa/cli/project_templates/telco/credentials.yml +33 -0
- rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
- rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
- rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
- rasa/cli/project_templates/telco/data/data.md +11 -0
- rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
- rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
- rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
- rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
- rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
- rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
- rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
- rasa/cli/project_templates/telco/docs/docs.md +8 -0
- rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
- rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
- rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
- rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
- rasa/cli/project_templates/telco/domain/domain.md +13 -0
- rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
- rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
- rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
- rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +74 -0
- rasa/cli/project_templates/telco/domain/shared.yml +129 -0
- rasa/cli/project_templates/telco/endpoints.yml +67 -0
- rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_not_slow.yml +33 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/with_stub/network/solve_internet_slow.yml +47 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/billing/understand_bill.yml +67 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/bot_challenge.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/feedback.yml +46 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/goodbye.yml +9 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/hello.yml +8 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/human_handoff.yml +35 -0
- rasa/cli/project_templates/telco/tests/e2e_test_cases/without_stub/general/patterns.yml +23 -0
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/project_templates/tutorial/credentials.yml +10 -0
- rasa/cli/run.py +8 -10
- rasa/cli/scaffold.py +50 -6
- rasa/cli/shell.py +10 -5
- rasa/cli/studio/studio.py +1 -1
- rasa/cli/test.py +34 -14
- rasa/cli/train.py +44 -30
- rasa/cli/utils.py +1 -393
- rasa/cli/validation/__init__.py +0 -0
- rasa/cli/validation/bot_config.py +232 -0
- rasa/cli/validation/config_path_validation.py +257 -0
- rasa/cli/x.py +8 -4
- rasa/constants.py +7 -1
- rasa/core/actions/action.py +53 -13
- rasa/core/actions/action_exceptions.py +1 -1
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/grpc_custom_action_executor.py +1 -1
- rasa/core/agent.py +22 -2
- rasa/core/available_agents.py +239 -0
- rasa/core/brokers/broker.py +1 -1
- rasa/core/brokers/kafka.py +56 -8
- rasa/core/channels/__init__.py +82 -35
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +29 -16
- rasa/core/channels/hangouts.py +2 -2
- rasa/core/channels/inspector/README.md +25 -13
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-6177260a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-088372e2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-58676240.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-ea63f85c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-0a6f8466.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-7610671a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e7fbc2bf.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-a8aa457c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-3351e0d2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-0e770395.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-36a9e70d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-884a8b5b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-dc097813.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/package.json +18 -18
- rasa/core/channels/inspector/src/App.tsx +56 -12
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
- rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +296 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +26 -4
- rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
- rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
- rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
- rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
- rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
- rasa/core/channels/inspector/src/types.ts +55 -1
- rasa/core/channels/inspector/yarn.lock +336 -189
- rasa/core/channels/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +82 -32
- rasa/core/channels/telegram.py +4 -9
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- 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 +11 -6
- rasa/core/channels/voice_stream/browser_audio.py +91 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +19 -15
- rasa/core/channels/voice_stream/jambonz.py +22 -12
- rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
- rasa/core/channels/voice_stream/twilio_media_streams.py +35 -14
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +170 -32
- rasa/core/concurrent_lock_store.py +83 -16
- rasa/core/config/__init__.py +0 -0
- rasa/core/{available_endpoints.py → config/available_endpoints.py} +56 -18
- rasa/core/config/configuration.py +295 -0
- rasa/core/config/credentials.py +19 -0
- rasa/core/config/message_procesing_config.py +34 -0
- rasa/core/constants.py +17 -0
- rasa/core/exceptions.py +1 -1
- rasa/core/featurizers/tracker_featurizers.py +3 -2
- rasa/core/iam_credentials_providers/__init__.py +0 -0
- rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +291 -0
- rasa/core/iam_credentials_providers/credentials_provider_protocol.py +91 -0
- rasa/core/lock_store.py +50 -10
- rasa/core/nlg/contextual_response_rephraser.py +5 -0
- rasa/core/nlg/generator.py +1 -1
- rasa/core/persistor.py +7 -7
- rasa/core/policies/enterprise_search_policy.py +9 -10
- rasa/core/policies/flow_policy.py +4 -4
- rasa/core/policies/flows/agent_executor.py +720 -0
- rasa/core/policies/flows/flow_exceptions.py +5 -2
- rasa/core/policies/flows/flow_executor.py +146 -77
- rasa/core/policies/flows/mcp_tool_executor.py +304 -0
- rasa/core/policies/intentless_policy.py +1 -1
- rasa/core/policies/rule_policy.py +1 -1
- rasa/core/policies/ted_policy.py +20 -12
- rasa/core/policies/unexpected_intent_policy.py +6 -0
- rasa/core/processor.py +100 -44
- rasa/core/redis_connection_factory.py +474 -0
- rasa/core/run.py +49 -10
- rasa/core/test.py +4 -0
- rasa/core/tracker_stores/redis_tracker_store.py +36 -14
- rasa/core/tracker_stores/sql_tracker_store.py +59 -1
- rasa/core/tracker_stores/tracker_store.py +3 -7
- rasa/core/train.py +1 -1
- rasa/core/training/interactive.py +20 -18
- rasa/core/training/story_conflict.py +5 -5
- rasa/core/utils.py +22 -23
- rasa/dialogue_understanding/commands/__init__.py +8 -0
- rasa/dialogue_understanding/commands/cancel_flow_command.py +20 -6
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/clarify_command.py +20 -2
- rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
- rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
- rasa/dialogue_understanding/commands/start_flow_command.py +75 -7
- rasa/dialogue_understanding/commands/utils.py +135 -2
- rasa/dialogue_understanding/generator/command_parser.py +4 -0
- rasa/dialogue_understanding/generator/flow_retrieval.py +0 -9
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +52 -12
- rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
- rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
- rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
- rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
- rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
- rasa/dialogue_understanding/patterns/cancel.py +27 -6
- rasa/dialogue_understanding/patterns/clarify.py +3 -14
- rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +49 -9
- rasa/dialogue_understanding/processor/command_processor.py +136 -15
- rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
- rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
- rasa/dialogue_understanding/stack/utils.py +57 -3
- rasa/dialogue_understanding/utils.py +24 -4
- rasa/dialogue_understanding_test/du_test_runner.py +8 -3
- rasa/e2e_test/e2e_test_runner.py +13 -3
- rasa/engine/caching.py +2 -2
- rasa/engine/constants.py +1 -1
- rasa/engine/graph.py +5 -1
- rasa/engine/loader.py +12 -0
- rasa/engine/recipes/default_components.py +138 -49
- rasa/engine/recipes/default_recipe.py +108 -11
- rasa/engine/runner/dask.py +8 -5
- rasa/engine/validation.py +25 -8
- rasa/graph_components/validators/default_recipe_validator.py +86 -28
- rasa/hooks.py +5 -5
- rasa/llm_fine_tuning/utils.py +2 -2
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +2 -2
- rasa/model_manager/socket_bridge.py +21 -17
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/model_manager/warm_rasa_process.py +13 -3
- rasa/model_training.py +60 -47
- rasa/nlu/classifiers/diet_classifier.py +198 -98
- rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
- rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
- rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
- rasa/nlu/extractors/crf_entity_extractor.py +9 -10
- rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
- rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
- rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
- rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
- rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
- rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
- rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
- rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
- rasa/nlu/selectors/response_selector.py +10 -2
- rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
- rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
- rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
- rasa/nlu/utils/mitie_utils.py +3 -0
- rasa/nlu/utils/spacy_utils.py +3 -2
- rasa/plugin.py +8 -8
- rasa/privacy/privacy_config.py +1 -1
- rasa/privacy/privacy_manager.py +12 -3
- rasa/server.py +15 -3
- rasa/shared/agents/__init__.py +0 -0
- rasa/shared/agents/auth/__init__.py +0 -0
- rasa/shared/agents/auth/agent_auth_factory.py +105 -0
- rasa/shared/agents/auth/agent_auth_manager.py +92 -0
- rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
- rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
- rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
- rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
- rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +170 -0
- rasa/shared/agents/auth/constants.py +13 -0
- rasa/shared/agents/auth/types.py +12 -0
- rasa/shared/agents/auth/utils.py +85 -0
- rasa/shared/agents/utils.py +35 -0
- rasa/shared/constants.py +11 -0
- rasa/shared/core/constants.py +17 -1
- rasa/shared/core/domain.py +62 -22
- rasa/shared/core/events.py +329 -0
- rasa/shared/core/flows/constants.py +5 -0
- rasa/shared/core/flows/flow.py +1 -1
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/flows_list.py +21 -5
- rasa/shared/core/flows/flows_yaml_schema.json +119 -184
- rasa/shared/core/flows/steps/call.py +57 -6
- rasa/shared/core/flows/steps/collect.py +98 -13
- rasa/shared/core/flows/validation.py +372 -8
- rasa/shared/core/flows/yaml_flows_io.py +19 -10
- rasa/shared/core/slots.py +6 -2
- rasa/shared/core/trackers.py +5 -2
- rasa/shared/core/training_data/story_reader/story_reader.py +1 -1
- rasa/shared/exceptions.py +39 -2
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/rasa.py +1 -1
- rasa/shared/importers/utils.py +86 -4
- rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
- rasa/shared/providers/llm/_base_litellm_client.py +41 -9
- rasa/shared/providers/llm/litellm_router_llm_client.py +10 -6
- rasa/shared/providers/llm/llm_client.py +7 -3
- rasa/shared/providers/llm/llm_response.py +66 -0
- rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
- rasa/shared/utils/common.py +26 -1
- rasa/shared/utils/health_check/health_check.py +7 -3
- rasa/shared/utils/llm.py +92 -19
- rasa/shared/utils/mcp/__init__.py +0 -0
- rasa/shared/utils/mcp/server_connection.py +250 -0
- rasa/shared/utils/mcp/utils.py +20 -0
- rasa/shared/utils/schemas/events.py +42 -0
- rasa/shared/utils/yaml.py +3 -1
- rasa/studio/download.py +3 -0
- rasa/studio/prompts.py +1 -0
- rasa/studio/pull/pull.py +3 -2
- rasa/studio/train.py +8 -7
- rasa/studio/upload.py +19 -52
- rasa/telemetry.py +166 -28
- rasa/tracing/config.py +45 -12
- rasa/tracing/constants.py +14 -0
- rasa/tracing/instrumentation/attribute_extractors.py +142 -9
- rasa/tracing/instrumentation/instrumentation.py +626 -21
- rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
- rasa/tracing/instrumentation/metrics.py +32 -0
- rasa/tracing/metric_instrument_provider.py +68 -0
- rasa/utils/common.py +92 -1
- rasa/utils/endpoints.py +11 -2
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/log_utils.py +121 -7
- rasa/utils/ml_utils.py +1 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/utils/pypred.py +45 -0
- rasa/utils/tensorflow/__init__.py +7 -0
- rasa/utils/tensorflow/callback.py +136 -101
- rasa/utils/tensorflow/crf.py +1 -1
- rasa/utils/tensorflow/data_generator.py +21 -8
- rasa/utils/tensorflow/layers.py +21 -11
- rasa/utils/tensorflow/metrics.py +7 -3
- rasa/utils/tensorflow/models.py +56 -8
- rasa/utils/tensorflow/rasa_layers.py +8 -6
- rasa/utils/tensorflow/transformer.py +2 -3
- rasa/utils/train_utils.py +54 -24
- rasa/validator.py +149 -16
- rasa/version.py +1 -1
- rasa_pro-3.14.0.dist-info/METADATA +212 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/RECORD +581 -269
- rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
- rasa/core/channels/inspector/dist/assets/index-c804b295.js +0 -1335
- rasa_pro-3.13.12.dist-info/METADATA +0 -192
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.12.dist-info → rasa_pro-3.14.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
responses:
|
|
2
|
+
roleplay_response: |
|
|
3
|
+
Looks like we’ve slipped into chatting as if I were your bot. I’m here to help you
|
|
4
|
+
build and improve your Rasa agent, not to roleplay as it. If you'd like to test your
|
|
5
|
+
agent, add your message in the chat preview on the right. If you’re not sure what to
|
|
6
|
+
test, I can help you create a new skill or suggest a few example conversations to
|
|
7
|
+
try.
|
|
8
|
+
|
|
9
|
+
out_of_scope_response: |
|
|
10
|
+
I’m here to help you build and improve your Rasa chatbot. I can explain concepts,
|
|
11
|
+
walk you through changes, or debug things with you.
|
|
12
|
+
|
|
13
|
+
Do you want me to show you what your assistant can do right now, or help you add
|
|
14
|
+
something new?
|
|
15
|
+
|
|
16
|
+
error_fallback_response: |
|
|
17
|
+
Your project ran into an error, but I'm not sure what caused it. Take a look at the
|
|
18
|
+
logs for the full details.
|
|
19
|
+
|
|
20
|
+
guardrail_policy_violation_response: |
|
|
21
|
+
I’m here to help you with Rasa agent development in a safe and respectful
|
|
22
|
+
environment. I cannot assist with harmful content, inappropriate material, or
|
|
23
|
+
attempts to manipulate my responses. Continued attempts to use the system in this
|
|
24
|
+
way may result in project termination and account blocking.
|
|
25
|
+
|
|
26
|
+
copilot_redacted_message: "[Copilot response redacted for guardrails check.]"
|
|
27
|
+
|
|
28
|
+
knowledge_base_access_requested_response: |
|
|
29
|
+
At the moment I can't read your knowledge base directly, but you can browse the
|
|
30
|
+
available entries in the `/docs` folder in your code editor.
|
|
31
|
+
|
|
32
|
+
guardrail_blocked_user_response: |
|
|
33
|
+
Your Copilot access has been temporarily blocked due to repeated policy violations.
|
|
34
|
+
If you believe this is an error or would like to request a review, please reach out to support@rasa.com.
|
|
35
|
+
|
|
36
|
+
guardrail_blocked_project_response: |
|
|
37
|
+
Your Copilot access has been temporarily blocked due to repeated policy violations.
|
|
38
|
+
If you believe this is an error or would like to request a review, please reach out to support@rasa.com.
|
|
39
|
+
|
|
40
|
+
training_success_response: |
|
|
41
|
+
Your changes have been saved successfully.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
welcome_messages:
|
|
2
|
+
copilot_intro: |
|
|
3
|
+
👋 Welcome to Hello Rasa!
|
|
4
|
+
|
|
5
|
+
I'm your **Copilot** — here to help you explore Rasa and start customizing your agent.
|
|
6
|
+
You can ask me how your agent works, how to add new skills, or how to connect integrations.
|
|
7
|
+
|
|
8
|
+
finance: |
|
|
9
|
+
👋 Welcome to Hello Rasa!
|
|
10
|
+
|
|
11
|
+
I'm your **Copilot** — here to help you explore Rasa and start customizing your agent.
|
|
12
|
+
You can ask me how your agent works, how to add new skills, or how to connect integrations.
|
|
13
|
+
|
|
14
|
+
Your **Banking Agent template** is now live.
|
|
15
|
+
|
|
16
|
+
### ▶️ **First step: try it out**
|
|
17
|
+
Ask your agent (in the chat preview on the right):
|
|
18
|
+
- *What's my current balance?*
|
|
19
|
+
- *Send 100 dollars to James.*
|
|
20
|
+
|
|
21
|
+
telco: |
|
|
22
|
+
👋 Welcome to Hello Rasa!
|
|
23
|
+
|
|
24
|
+
I'm your **Copilot** — here to help you explore Rasa and start customizing your agent.
|
|
25
|
+
You can ask me how your agent works, how to add new skills, or how to connect integrations.
|
|
26
|
+
|
|
27
|
+
Your **Telecom Support Agent template** is now live.
|
|
28
|
+
|
|
29
|
+
### ▶️ **First step: try it out**
|
|
30
|
+
Ask your agent (in the chat preview on the right):
|
|
31
|
+
- *Why is my internet slow?*
|
|
32
|
+
- *How do i reboot my router?*
|
|
33
|
+
|
|
34
|
+
basic: |
|
|
35
|
+
👋 Welcome to Hello Rasa!
|
|
36
|
+
|
|
37
|
+
I'm your **Copilot** — here to help you explore Rasa and start customizing your agent.
|
|
38
|
+
You can ask me how your agent works, how to add new skills, or how to connect integrations.
|
|
39
|
+
|
|
40
|
+
Your **Starter Agent template** is now live.
|
|
41
|
+
|
|
42
|
+
### ▶️ **First step: try it out**
|
|
43
|
+
Ask your agent (in the chat preview on the right):
|
|
44
|
+
- *What can you do?*
|
|
45
|
+
- *Can I talk to a human?*
|
|
46
|
+
|
|
47
|
+
prompt_to_bot: |
|
|
48
|
+
👋 Welcome to Hello Rasa!
|
|
49
|
+
|
|
50
|
+
I'm your **Copilot** — here to help you explore Rasa and start customizing your agent.
|
|
51
|
+
You can ask me how your agent works, how to add new skills, or how to connect integrations.
|
|
52
|
+
|
|
53
|
+
Your custom agent has been created and trained successfully.
|
|
54
|
+
|
|
55
|
+
### ▶️ **First step: try it out**
|
|
56
|
+
Test your agent in the chat preview on the right to see how it responds to your users.
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import importlib_resources
|
|
2
|
+
|
|
3
|
+
from rasa.constants import PACKAGE_NAME
|
|
4
|
+
|
|
5
|
+
INKEEP_API_KEY_ENV_VAR = "INKEEP_API_KEY"
|
|
6
|
+
|
|
7
|
+
INKEEP_RAG_RESPONSE_SCHEMA_PATH = str(
|
|
8
|
+
importlib_resources.files(PACKAGE_NAME)
|
|
9
|
+
.joinpath("builder")
|
|
10
|
+
.joinpath("document_retrieval")
|
|
11
|
+
.joinpath("inkeep-rag-response-schema.json")
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
INKEEP_DOCUMENT_RETRIEVAL_MODEL = "inkeep-rag"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"content": {
|
|
6
|
+
"type": "array",
|
|
7
|
+
"items": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"type": {
|
|
11
|
+
"type": "string"
|
|
12
|
+
},
|
|
13
|
+
"source": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {
|
|
16
|
+
"content": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"type": {
|
|
22
|
+
"type": "string"
|
|
23
|
+
},
|
|
24
|
+
"media_type": {
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
"text": {
|
|
28
|
+
"type": "string"
|
|
29
|
+
},
|
|
30
|
+
"data": {
|
|
31
|
+
"type": "string"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"type": {
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"media_type": {
|
|
40
|
+
"type": "string"
|
|
41
|
+
},
|
|
42
|
+
"data": {
|
|
43
|
+
"type": "string"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"title": {
|
|
48
|
+
"type": "string"
|
|
49
|
+
},
|
|
50
|
+
"context": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"record_type": {
|
|
54
|
+
"type": "string"
|
|
55
|
+
},
|
|
56
|
+
"url": {
|
|
57
|
+
"type": "string"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"required": ["content"]
|
|
64
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
from contextlib import asynccontextmanager
|
|
5
|
+
from typing import AsyncGenerator, List, Optional
|
|
6
|
+
|
|
7
|
+
import openai
|
|
8
|
+
import structlog
|
|
9
|
+
from openai.types.chat import ChatCompletion
|
|
10
|
+
|
|
11
|
+
from rasa.builder import config
|
|
12
|
+
from rasa.builder.copilot.constants import ROLE_USER
|
|
13
|
+
from rasa.builder.document_retrieval.constants import (
|
|
14
|
+
INKEEP_API_KEY_ENV_VAR,
|
|
15
|
+
INKEEP_DOCUMENT_RETRIEVAL_MODEL,
|
|
16
|
+
INKEEP_RAG_RESPONSE_SCHEMA_PATH,
|
|
17
|
+
)
|
|
18
|
+
from rasa.builder.document_retrieval.models import Document
|
|
19
|
+
from rasa.builder.exceptions import DocumentRetrievalError
|
|
20
|
+
from rasa.shared.utils.io import read_json_file
|
|
21
|
+
|
|
22
|
+
structlogger = structlog.get_logger()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class InKeepDocumentRetrieval:
|
|
26
|
+
"""Handles the document retrieval from InKeep AI."""
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
api_key: Optional[str] = None,
|
|
31
|
+
):
|
|
32
|
+
self._rag_schema = read_json_file(INKEEP_RAG_RESPONSE_SCHEMA_PATH)
|
|
33
|
+
self._api_key = api_key or os.getenv(INKEEP_API_KEY_ENV_VAR)
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def api_key(self) -> str:
|
|
37
|
+
"""Resolve the correct API key/token based on proxy usage."""
|
|
38
|
+
using_proxy = bool(config.HELLO_LLM_PROXY_BASE_URL)
|
|
39
|
+
if using_proxy:
|
|
40
|
+
if not config.RASA_PRO_LICENSE:
|
|
41
|
+
raise DocumentRetrievalError(
|
|
42
|
+
"HELLO_LLM_PROXY_BASE_URL is set but RASA_PRO_LICENSE is missing. "
|
|
43
|
+
"Proxy requires a Rasa Pro license token for authentication."
|
|
44
|
+
)
|
|
45
|
+
return config.RASA_PRO_LICENSE
|
|
46
|
+
|
|
47
|
+
if not self._api_key:
|
|
48
|
+
raise DocumentRetrievalError(
|
|
49
|
+
"INKEEP_API_KEY is missing. Provide it via env INKEEP_API_KEY "
|
|
50
|
+
"or pass api_key= to InKeepDocumentRetrieval."
|
|
51
|
+
)
|
|
52
|
+
return self._api_key
|
|
53
|
+
|
|
54
|
+
async def retrieve_documents(
|
|
55
|
+
self, query: str, temperature: float = 0.0, timeout: float = 30.0
|
|
56
|
+
) -> List[Document]:
|
|
57
|
+
"""Retrieve relevant documents using InKeep AI based on the given query.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
query: The search query
|
|
61
|
+
temperature: Controls randomness in generation (0.0 for deterministic)
|
|
62
|
+
timeout: Timeout for the API call
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
List of Document objects containing retrieved content
|
|
66
|
+
|
|
67
|
+
Raises:
|
|
68
|
+
DocumentRetrievalError: When document retrieval fails due to:
|
|
69
|
+
- Empty response from InKeep AI API
|
|
70
|
+
- OpenAI API errors (authentication, rate limiting, etc.)
|
|
71
|
+
- Request timeout
|
|
72
|
+
- Unexpected errors during API communication
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
response = await self._call_inkeep_rag_api(
|
|
76
|
+
query=query,
|
|
77
|
+
temperature=temperature,
|
|
78
|
+
timeout=timeout,
|
|
79
|
+
)
|
|
80
|
+
documents = self._parse_documents_from_response(response)
|
|
81
|
+
return documents
|
|
82
|
+
except DocumentRetrievalError as e:
|
|
83
|
+
structlogger.error(
|
|
84
|
+
"inkeep_document_retrieval.retrieve_documents.error",
|
|
85
|
+
event_info="InKeep Document Retrieval: Error",
|
|
86
|
+
query=query,
|
|
87
|
+
error=str(e),
|
|
88
|
+
)
|
|
89
|
+
raise e
|
|
90
|
+
|
|
91
|
+
async def _call_inkeep_rag_api(
|
|
92
|
+
self, query: str, temperature: float, timeout: float
|
|
93
|
+
) -> ChatCompletion:
|
|
94
|
+
"""Call InKeep AI RAG's API endpoint and return the response content.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
query: The search query to send to InKeep
|
|
98
|
+
temperature: Controls randomness in generation (0.0 for deterministic)
|
|
99
|
+
timeout: Timeout for the API call
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
The response content from InKeep AI. The response is made of the retrieved
|
|
103
|
+
documents.
|
|
104
|
+
|
|
105
|
+
Raises:
|
|
106
|
+
LLMGenerationError: If the API call fails or returns invalid response
|
|
107
|
+
"""
|
|
108
|
+
try:
|
|
109
|
+
async with self._get_client() as client:
|
|
110
|
+
response = await client.chat.completions.create(
|
|
111
|
+
model=INKEEP_DOCUMENT_RETRIEVAL_MODEL,
|
|
112
|
+
messages=[{"role": ROLE_USER, "content": query}],
|
|
113
|
+
temperature=temperature,
|
|
114
|
+
timeout=timeout,
|
|
115
|
+
response_format={
|
|
116
|
+
"type": "json_schema",
|
|
117
|
+
"json_schema": self._rag_schema,
|
|
118
|
+
},
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
if not response.choices[0].message.content:
|
|
122
|
+
structlogger.warning(
|
|
123
|
+
"inkeep_document_retrieval.empty_response",
|
|
124
|
+
event_info="InKeep AI returned an empty response. ",
|
|
125
|
+
query=query,
|
|
126
|
+
response_content=response.choices[0].message.content,
|
|
127
|
+
)
|
|
128
|
+
raise DocumentRetrievalError(
|
|
129
|
+
"InKeep Document Retrieval: Empty response"
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
return response
|
|
133
|
+
|
|
134
|
+
except openai.OpenAIError as e:
|
|
135
|
+
structlogger.error(
|
|
136
|
+
"inkeep_document_retrieval.call_inkeep_rag_api.api_error",
|
|
137
|
+
event_info="InKeep Document Retrieval: API error",
|
|
138
|
+
query=query,
|
|
139
|
+
error=e,
|
|
140
|
+
)
|
|
141
|
+
raise DocumentRetrievalError(f"InKeep Document Retrieval: API error: {e}")
|
|
142
|
+
except asyncio.TimeoutError as e:
|
|
143
|
+
structlogger.error(
|
|
144
|
+
"inkeep_document_retrieval.call_inkeep_rag_api.timeout_error",
|
|
145
|
+
event_info="InKeep Document Retrieval: Timeout error",
|
|
146
|
+
query=query,
|
|
147
|
+
error=e,
|
|
148
|
+
)
|
|
149
|
+
raise DocumentRetrievalError(f"InKeep AI request timed out: {e}")
|
|
150
|
+
except Exception as e:
|
|
151
|
+
structlogger.error(
|
|
152
|
+
"inkeep_document_retrieval.call_inkeep_rag_api.error",
|
|
153
|
+
event_info="InKeep Document Retrieval: Error",
|
|
154
|
+
query=query,
|
|
155
|
+
error=e,
|
|
156
|
+
)
|
|
157
|
+
raise DocumentRetrievalError(
|
|
158
|
+
f"InKeep Document Retrieval: Unexpected error: {e}"
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
@asynccontextmanager
|
|
162
|
+
async def _get_client(self) -> AsyncGenerator[openai.AsyncOpenAI, None]:
|
|
163
|
+
"""Get or create client that handles the API calls to InKeep AI."""
|
|
164
|
+
# Ensure trailing slash to match client expectations/tests
|
|
165
|
+
base_url = f"{config.INKEEP_BASE_URL.rstrip('/')}/"
|
|
166
|
+
client = openai.AsyncOpenAI(base_url=base_url, api_key=self.api_key)
|
|
167
|
+
structlogger.debug("inkeep_document_retrieval._get_client", base_url=base_url)
|
|
168
|
+
|
|
169
|
+
try:
|
|
170
|
+
yield client
|
|
171
|
+
except Exception as e:
|
|
172
|
+
structlogger.error(
|
|
173
|
+
"inkeep_document_retrieval.client_error",
|
|
174
|
+
event_info="InKeep Document Retrieval: Client error",
|
|
175
|
+
error=str(e),
|
|
176
|
+
)
|
|
177
|
+
raise
|
|
178
|
+
|
|
179
|
+
def _parse_documents_from_response(
|
|
180
|
+
self, response: ChatCompletion
|
|
181
|
+
) -> List[Document]:
|
|
182
|
+
"""Parse the InKeep AI response into Document objects.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
response: ChatCompletion response from InKeep AI's RAG model.
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
List of Document objects. Empty list is returned if the response is empty
|
|
189
|
+
or if the response is invalid.
|
|
190
|
+
"""
|
|
191
|
+
try:
|
|
192
|
+
content = response.choices[0].message.content
|
|
193
|
+
if not content:
|
|
194
|
+
return []
|
|
195
|
+
|
|
196
|
+
response_data = json.loads(content)
|
|
197
|
+
documents = []
|
|
198
|
+
|
|
199
|
+
for item in response_data.get("content", []):
|
|
200
|
+
try:
|
|
201
|
+
document = Document.from_inkeep_rag_response(item)
|
|
202
|
+
documents.append(document)
|
|
203
|
+
except Exception as e:
|
|
204
|
+
structlogger.warning(
|
|
205
|
+
"inkeep_document_retrieval.invalid_document_skipped",
|
|
206
|
+
event_info=(
|
|
207
|
+
"InKeep Document Retrieval: Invalid document structure "
|
|
208
|
+
"skipped. Returning empty list for this item."
|
|
209
|
+
),
|
|
210
|
+
error=str(e),
|
|
211
|
+
item=item,
|
|
212
|
+
)
|
|
213
|
+
# Continue processing other items, skip this invalid one
|
|
214
|
+
continue
|
|
215
|
+
|
|
216
|
+
return documents
|
|
217
|
+
|
|
218
|
+
except json.JSONDecodeError as e:
|
|
219
|
+
structlogger.warning(
|
|
220
|
+
"inkeep_document_retrieval.parse_documents_from_response"
|
|
221
|
+
".parse_response_failed",
|
|
222
|
+
event_info=(
|
|
223
|
+
"InKeep Document Retrieval: Parse response failed. "
|
|
224
|
+
"Returning empty list.",
|
|
225
|
+
),
|
|
226
|
+
error=str(e),
|
|
227
|
+
)
|
|
228
|
+
return []
|
|
229
|
+
except Exception as e:
|
|
230
|
+
structlogger.error(
|
|
231
|
+
"inkeep_document_retrieval.parse_documents_from_response.error",
|
|
232
|
+
event_info=(
|
|
233
|
+
"InKeep Document Retrieval: Parse response error. "
|
|
234
|
+
"Returning empty list.",
|
|
235
|
+
),
|
|
236
|
+
error=str(e),
|
|
237
|
+
)
|
|
238
|
+
return []
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from typing import Any, Dict, Optional
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
4
|
+
from pydantic import BaseModel, Field
|
|
5
|
+
|
|
6
|
+
structlogger = structlog.get_logger()
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Document(BaseModel):
|
|
10
|
+
"""Model for document retrieval results."""
|
|
11
|
+
|
|
12
|
+
content: str = Field(...)
|
|
13
|
+
url: Optional[str] = Field(default=None)
|
|
14
|
+
title: Optional[str] = Field(default=None)
|
|
15
|
+
metadata: Optional[Dict[str, Any]] = Field(default=None)
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def from_inkeep_rag_response(cls, rag_item: Dict[str, Any]) -> "Document":
|
|
19
|
+
"""Create a Document object from a single InKeep RAG response item.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
rag_item: Single item from InKeep RAG response
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Document object with extracted content and metadata
|
|
26
|
+
"""
|
|
27
|
+
source = rag_item.get("source", {})
|
|
28
|
+
text_content = cls._extract_text_from_source(source)
|
|
29
|
+
|
|
30
|
+
return cls(
|
|
31
|
+
content=text_content.strip() if text_content else "",
|
|
32
|
+
url=rag_item.get("url"),
|
|
33
|
+
title=rag_item.get("title"),
|
|
34
|
+
metadata={
|
|
35
|
+
"type": rag_item.get("type"),
|
|
36
|
+
"record_type": rag_item.get("record_type"),
|
|
37
|
+
"context": rag_item.get("context"),
|
|
38
|
+
"media_type": source.get("media_type"),
|
|
39
|
+
},
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
def _extract_text_from_source(source: Dict[str, Any]) -> str:
|
|
44
|
+
"""Extract text content from InKeep source object.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
source: Source object from InKeep RAG response
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Extracted text content
|
|
51
|
+
"""
|
|
52
|
+
# Try to extract from content array first
|
|
53
|
+
if "content" in source:
|
|
54
|
+
text_parts = []
|
|
55
|
+
for content_item in source["content"]:
|
|
56
|
+
if content_item.get("type") == "text" and content_item.get("text"):
|
|
57
|
+
text_parts.append(content_item["text"])
|
|
58
|
+
if text_parts:
|
|
59
|
+
return "\n".join(text_parts)
|
|
60
|
+
|
|
61
|
+
# Fallback to source data
|
|
62
|
+
return source.get("data", "")
|
rasa/builder/download.py
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Download utilities for bot projects."""
|
|
2
|
+
|
|
3
|
+
import io
|
|
4
|
+
import os
|
|
5
|
+
import sys
|
|
6
|
+
import tarfile
|
|
7
|
+
from textwrap import dedent
|
|
8
|
+
from typing import Dict, Optional
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _get_env_content() -> str:
|
|
12
|
+
"""Generate .env file content."""
|
|
13
|
+
return f"RASA_PRO_LICENSE={os.getenv('RASA_PRO_LICENSE')}\n"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _get_python_version_content() -> str:
|
|
17
|
+
"""Generate .python-version file content with current Python version."""
|
|
18
|
+
return f"{sys.version_info.major}.{sys.version_info.minor}\n"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _get_pyproject_toml_content(project_id: str) -> str:
|
|
22
|
+
"""Generate pyproject.toml file content."""
|
|
23
|
+
return dedent(
|
|
24
|
+
f"""
|
|
25
|
+
[project]
|
|
26
|
+
name = "{project_id}"
|
|
27
|
+
version = "0.1.0"
|
|
28
|
+
description = "Add your description for your Rasa bot here"
|
|
29
|
+
readme = "README.md"
|
|
30
|
+
dependencies = ["rasa-pro>=3.13"]
|
|
31
|
+
requires-python = ">={sys.version_info.major}.{sys.version_info.minor}"
|
|
32
|
+
"""
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _get_readme_content() -> str:
|
|
37
|
+
"""Generate README.md file content with basic instructions."""
|
|
38
|
+
return dedent(
|
|
39
|
+
"""
|
|
40
|
+
# Rasa Assistant
|
|
41
|
+
|
|
42
|
+
This is your Rasa assistant project. Below are the basic commands to
|
|
43
|
+
get started.
|
|
44
|
+
|
|
45
|
+
## Prerequisites
|
|
46
|
+
Make sure you have [uv](https://docs.astral.sh/uv/) installed.
|
|
47
|
+
|
|
48
|
+
## Training the Assistant
|
|
49
|
+
|
|
50
|
+
To train your assistant with the current configuration and training data:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uv run rasa train
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This will create a model in the `models/` directory.
|
|
57
|
+
|
|
58
|
+
## Testing the Assistant
|
|
59
|
+
|
|
60
|
+
To test your assistant interactively in the command line:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
uv run rasa inspect
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Running the Assistant
|
|
67
|
+
|
|
68
|
+
To start the Rasa server:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
uv run rasa run
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The server will be available at `http://localhost:5005`.
|
|
75
|
+
|
|
76
|
+
## Project Structure
|
|
77
|
+
|
|
78
|
+
- `config.yml` - Configuration for your NLU pipeline and policies
|
|
79
|
+
- `domain.yml` - Defines intents, entities, slots, responses, and actions
|
|
80
|
+
- `data/` - Flows of your bot
|
|
81
|
+
- `actions/` - Custom action code (if any)
|
|
82
|
+
|
|
83
|
+
## Next Steps
|
|
84
|
+
|
|
85
|
+
1. Customize your domain and flows
|
|
86
|
+
2. Train your model with `rasa train`
|
|
87
|
+
3. Test your assistant with `rasa inspect`
|
|
88
|
+
4. Deploy your assistant with `rasa run`
|
|
89
|
+
|
|
90
|
+
For more information, visit the [Rasa documentation](https://rasa.com/docs/).
|
|
91
|
+
"""
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _add_file_to_tar(tar: tarfile.TarFile, filename: str, content: str) -> None:
|
|
96
|
+
"""Add a file with the given content to the tar archive.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
tar: The tar file object to add to
|
|
100
|
+
filename: Name of the file in the archive
|
|
101
|
+
content: Content of the file as a string
|
|
102
|
+
"""
|
|
103
|
+
file_data = content.encode("utf-8")
|
|
104
|
+
tarinfo = tarfile.TarInfo(name=filename)
|
|
105
|
+
tarinfo.size = len(file_data)
|
|
106
|
+
tar.addfile(tarinfo, io.BytesIO(file_data))
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def create_bot_project_archive(
|
|
110
|
+
bot_files: Dict[str, Optional[str]], project_id: str
|
|
111
|
+
) -> bytes:
|
|
112
|
+
"""Create a tar.gz archive containing bot files and additional project files.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
bot_files: Dictionary mapping file names to their content
|
|
116
|
+
project_id: Name of the project for the archive filename and pyproject.toml
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
bytes: The tar.gz archive data
|
|
120
|
+
"""
|
|
121
|
+
tar_buffer = io.BytesIO()
|
|
122
|
+
|
|
123
|
+
with tarfile.open(fileobj=tar_buffer, mode="w:gz") as tar:
|
|
124
|
+
# Add bot files to archive
|
|
125
|
+
for filename, content in bot_files.items():
|
|
126
|
+
if content is not None:
|
|
127
|
+
_add_file_to_tar(tar, filename, content)
|
|
128
|
+
|
|
129
|
+
# Add additional project files
|
|
130
|
+
_add_file_to_tar(tar, ".env", _get_env_content())
|
|
131
|
+
_add_file_to_tar(tar, ".python-version", _get_python_version_content())
|
|
132
|
+
_add_file_to_tar(
|
|
133
|
+
tar,
|
|
134
|
+
"pyproject.toml",
|
|
135
|
+
_get_pyproject_toml_content(project_id),
|
|
136
|
+
)
|
|
137
|
+
_add_file_to_tar(tar, "README.md", _get_readme_content())
|
|
138
|
+
|
|
139
|
+
tar_buffer.seek(0)
|
|
140
|
+
return tar_buffer.getvalue()
|