rasa-pro 3.13.1a18__py3-none-any.whl → 3.13.1a20__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 +8 -0
- rasa/builder/auth.py +71 -0
- rasa/builder/config.py +16 -0
- rasa/builder/copilot/constants.py +15 -0
- rasa/builder/copilot/copilot.py +342 -0
- rasa/builder/copilot/copilot_response_handler.py +471 -0
- rasa/builder/copilot/exceptions.py +20 -0
- rasa/builder/copilot/models.py +344 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +495 -0
- rasa/builder/copilot/telemetry.py +195 -0
- rasa/builder/document_retrieval/__init__.py +0 -0
- rasa/builder/document_retrieval/constants.py +16 -0
- rasa/builder/{inkeep_document_retrieval.py → document_retrieval/inkeep_document_retrieval.py} +53 -44
- rasa/builder/document_retrieval/models.py +62 -0
- rasa/builder/download.py +140 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/constants.py +4 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +188 -0
- rasa/builder/guardrails/models.py +199 -0
- rasa/builder/guardrails/utils.py +305 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +232 -0
- rasa/builder/llm_service.py +89 -173
- rasa/builder/logging_utils.py +162 -4
- rasa/builder/main.py +29 -16
- rasa/builder/models.py +93 -121
- rasa/builder/project_generator.py +91 -7
- rasa/builder/scrape_rasa_docs.py +1 -1
- rasa/builder/service.py +650 -452
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/validation_service.py +4 -4
- rasa/cli/data.py +8 -3
- rasa/cli/project_templates/basic/actions/action_api.py +15 -0
- rasa/cli/project_templates/basic/actions/action_human_handoff.py +44 -0
- rasa/cli/project_templates/basic/config.yml +23 -0
- rasa/cli/project_templates/{plain → basic}/credentials.yml +8 -7
- rasa/cli/project_templates/basic/data/general/feedback.yml +20 -0
- rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
- rasa/cli/project_templates/basic/data/general/hello.yml +7 -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/welcome.yml +9 -0
- rasa/cli/project_templates/{finance/data/patterns → basic/data/system}/pattern_completed.yml +2 -1
- rasa/cli/project_templates/basic/data/system/pattern_correction.yml +7 -0
- rasa/cli/project_templates/basic/data/system/pattern_search.yml +8 -0
- rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +8 -0
- rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +65 -0
- rasa/cli/project_templates/basic/docs/template.txt +7 -0
- rasa/cli/project_templates/basic/domain/general/assistant_details.yml +12 -0
- rasa/cli/project_templates/basic/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/basic/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/basic/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/basic/domain/general/help.yml +5 -0
- rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +35 -0
- rasa/cli/project_templates/{finance/domain/default_actions.yml → basic/domain/general/utils.yml} +0 -3
- rasa/cli/project_templates/basic/domain/general/welcome.yml +7 -0
- rasa/cli/project_templates/{plain → basic}/endpoints.yml +42 -27
- rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/defaults.py +25 -3
- rasa/cli/project_templates/finance/actions/__init__.py +46 -0
- rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/{action_ask_account.py → accounts/action_ask_account.py} +6 -9
- rasa/cli/project_templates/finance/actions/{action_check_balance.py → accounts/action_check_balance.py} +4 -4
- rasa/cli/project_templates/finance/actions/action_session_start.py +11 -6
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/{action_ask_card.py → cards/action_ask_card.py} +4 -3
- rasa/cli/project_templates/finance/actions/{action_check_card_existence.py → cards/action_check_card_existence.py} +4 -3
- rasa/cli/project_templates/finance/actions/{action_update_card_status.py → cards/action_update_card_status.py} +18 -9
- rasa/cli/project_templates/finance/actions/database.py +1 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/{action_add_payee.py → transfers/action_add_payee.py} +8 -3
- rasa/cli/project_templates/finance/actions/{action_ask_account_from.py → transfers/action_ask_account_from.py} +5 -4
- rasa/cli/project_templates/finance/actions/{action_check_payee_existence.py → transfers/action_check_payee_existence.py} +3 -3
- rasa/cli/project_templates/finance/actions/{action_check_sufficient_funds.py → transfers/action_check_sufficient_funds.py} +3 -4
- rasa/cli/project_templates/finance/actions/{action_list_payees.py → transfers/action_list_payees.py} +4 -3
- rasa/cli/project_templates/finance/actions/{action_remove_payee.py → transfers/action_remove_payee.py} +4 -4
- rasa/cli/project_templates/finance/config.yml +8 -19
- rasa/cli/project_templates/finance/credentials.yml +6 -7
- rasa/cli/project_templates/finance/csvs/cards.csv +10 -10
- rasa/cli/project_templates/finance/csvs/payees.csv +10 -9
- rasa/cli/project_templates/finance/data/{flows → accounts}/check_balance.yml +2 -1
- rasa/cli/project_templates/finance/data/general/bot_identity.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 +7 -0
- rasa/cli/project_templates/finance/data/{flows/welcome.yml → general/help.yml} +2 -7
- 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/{patterns → system/patterns}/pattern_chitchat.yml +0 -2
- 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/{patterns → system/patterns}/pattern_session_start.yml +0 -1
- rasa/cli/project_templates/finance/domain/{check_balance.yml → accounts/check_balance.yml} +2 -0
- rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
- rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
- rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
- rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
- rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
- rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
- rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
- rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
- rasa/cli/project_templates/finance/endpoints.yml +1 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +3 -3
- rasa/cli/project_templates/telco/actions/actions_billing.py +24 -17
- rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +6 -1
- rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +6 -1
- rasa/cli/project_templates/telco/actions/actions_session_start.py +6 -1
- rasa/cli/project_templates/tutorial/config.yml +2 -1
- rasa/cli/scaffold.py +27 -2
- rasa/cli/train.py +8 -0
- rasa/cli/utils.py +31 -15
- rasa/core/actions/action.py +28 -41
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/channels/development_inspector.py +47 -14
- rasa/core/channels/inspector/dist/assets/{arc-371401b1.js → arc-1ddec37b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-3f126156.js → blockDiagram-38ab4fdb-18af387c.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-12f22eb7.js → c4Diagram-3d4e48cf-250127a3.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-59f6d54b.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-03b1d386.js → classDiagram-70f12bd4-c3388b34.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-84f69d63.js → classDiagram-v2-f2320105-9c893a82.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-26177ddb.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-ca47fd38.js → createText-2e5e7dd3-c111213b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-f837ca8a.js → edges-e0da2a9e-812a729d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-8717ac54.js → erDiagram-9861fffd-fd5051bc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-94f38b83.js → flowDb-956e92f1-3287ac02.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-b616f9fb.js → flowDiagram-66a62f08-692fb0b2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-29c03f5a.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-f5d24bb8.js → flowchart-elk-definition-4a651766-008376f1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-b43ba8d9.js → ganttDiagram-c361ad54-df330a69.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-c3aafaa5.js → gitGraphDiagram-72cf32ee-e03676fb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-0d0a2c10.js → graph-46fad2ba.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-3862675e-58ea0305.js → index-3862675e-a484ac55.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-cce6f8a1.js → index-a003633f.js} +179 -179
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-b8f60461.js → infoDiagram-f8f76790-3f9e6ec2.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-95be5545.js → journeyDiagram-49397b02-79f72383.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-da885b9b.js → layout-aad098e5.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-f1c817d3.js → line-219ab7ae.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-d42801e6.js → linear-2cddbe62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-a38923a6.js → mindmap-definition-fc14e90a-1d41ed99.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-ca6e71e9.js → pieDiagram-8a3498a8-cc496ee8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-b290dae9.js → quadrantDiagram-120e2f19-84d32884.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-03f02ceb.js → requirementDiagram-deff3bca-c0deb984.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-c49eee40.js → sankeyDiagram-04a897e0-b9d7fd62.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-b2cd6a3d.js → sequenceDiagram-704730f1-7d517565.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-e53a2028.js → stateDiagram-587899a1-98ef9b27.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e1982a03.js → stateDiagram-v2-d93cdb3a-cee70748.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-d0226ca5.js → styles-6aaf32cf-3f9d1c96.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-0e21dc00.js → styles-9a916d00-67471923.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-9588494e.js → styles-c10674c1-bd093fb7.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-be478d4f.js → svgDrawCommon-08f97a94-675794e8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-74631749.js → timeline-definition-85554ec2-0ac67617.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-a043552f.js → xychartDiagram-e933f94c-c018dc37.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +2 -2
- rasa/core/channels/inspector/index.html +1 -1
- rasa/core/channels/inspector/package.json +4 -3
- rasa/core/channels/inspector/src/App.tsx +53 -7
- rasa/core/channels/inspector/src/components/Chat.tsx +3 -2
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +268 -0
- rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
- rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +8 -3
- rasa/core/channels/inspector/src/types.ts +8 -0
- rasa/core/channels/inspector/yarn.lock +12 -12
- rasa/core/channels/studio_chat.py +119 -34
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- rasa/core/channels/voice_stream/asr/asr_engine.py +5 -1
- rasa/core/channels/voice_stream/asr/deepgram.py +5 -0
- rasa/core/channels/voice_stream/audiocodes.py +16 -8
- rasa/core/channels/voice_stream/browser_audio.py +39 -4
- rasa/core/channels/voice_stream/call_state.py +13 -2
- rasa/core/channels/voice_stream/genesys.py +16 -13
- rasa/core/channels/voice_stream/jambonz.py +14 -12
- rasa/core/channels/voice_stream/twilio_media_streams.py +14 -13
- rasa/core/channels/voice_stream/util.py +11 -1
- rasa/core/channels/voice_stream/voice_channel.py +108 -29
- rasa/core/nlg/callback.py +1 -1
- rasa/core/nlg/contextual_response_rephraser.py +19 -9
- rasa/core/nlg/generator.py +21 -5
- rasa/core/nlg/response.py +43 -6
- rasa/core/nlg/translate.py +8 -0
- rasa/core/policies/enterprise_search_policy.py +16 -21
- rasa/dialogue_understanding/commands/correct_slots_command.py +38 -10
- rasa/dialogue_understanding/generator/command_generator.py +5 -5
- rasa/dialogue_understanding/generator/command_parser.py +9 -13
- rasa/dialogue_understanding/processor/command_processor.py +149 -55
- rasa/dialogue_understanding/stack/utils.py +13 -3
- rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
- rasa/dialogue_understanding_test/validation.py +9 -10
- rasa/e2e_test/e2e_config.py +18 -11
- rasa/e2e_test/e2e_test_schema.yml +3 -3
- rasa/e2e_test/utils/validation.py +17 -19
- rasa/engine/validation.py +86 -91
- rasa/exceptions.py +26 -1
- rasa/model_manager/model_api.py +2 -2
- rasa/model_manager/socket_bridge.py +8 -2
- rasa/shared/providers/_configs/default_litellm_client_config.py +3 -7
- rasa/shared/utils/cli.py +2 -0
- rasa/shared/utils/common.py +2 -1
- rasa/shared/utils/health_check/health_check.py +10 -14
- rasa/studio/upload.py +6 -2
- rasa/studio/utils.py +33 -22
- rasa/telemetry.py +95 -22
- rasa/utils/licensing.py +21 -10
- rasa/utils/log_utils.py +1 -1
- rasa/utils/tensorflow/transformer.py +3 -3
- rasa/validator.py +7 -5
- rasa/version.py +1 -1
- {rasa_pro-3.13.1a18.dist-info → rasa_pro-3.13.1a20.dist-info}/METADATA +7 -7
- {rasa_pro-3.13.1a18.dist-info → rasa_pro-3.13.1a20.dist-info}/RECORD +242 -203
- rasa/builder/create_openai_vector_store.py +0 -228
- rasa/builder/llm-helper-schema.json +0 -69
- rasa/builder/llm_context.py +0 -81
- rasa/builder/llm_helper_prompt.jinja2 +0 -245
- rasa/cli/project_templates/finance/data/nlu.yml +0 -29
- rasa/cli/project_templates/finance/data/patterns/pattern_search.yml +0 -5
- rasa/cli/project_templates/finance/domain/default_flows.yml +0 -33
- rasa/cli/project_templates/finance/prompts/command-generator.jinja2 +0 -57
- rasa/cli/project_templates/finance/tests/conversation_repair/cancellations.yml +0 -12
- rasa/cli/project_templates/finance/tests/conversation_repair/cannot_handle.yml +0 -7
- rasa/cli/project_templates/finance/tests/conversation_repair/chitchat.yml +0 -7
- rasa/cli/project_templates/finance/tests/conversation_repair/clarification.yml +0 -9
- rasa/cli/project_templates/finance/tests/conversation_repair/completion.yml +0 -18
- rasa/cli/project_templates/finance/tests/conversation_repair/corrections.yml +0 -17
- rasa/cli/project_templates/finance/tests/conversation_repair/digressions.yml +0 -32
- rasa/cli/project_templates/finance/tests/conversation_repair/human_handoff.yml +0 -21
- rasa/cli/project_templates/finance/tests/conversation_repair/skipping_collect_steps.yml +0 -16
- rasa/cli/project_templates/finance/tests/demo_scripts/main.yml +0 -16
- rasa/cli/project_templates/finance/tests/happy_paths/balance_verification.yml +0 -15
- rasa/cli/project_templates/finance/tests/happy_paths/banking_questions.yml +0 -12
- rasa/cli/project_templates/finance/tests/happy_paths/card_blocking.yml +0 -52
- rasa/cli/project_templates/finance/tests/happy_paths/money_transfer.yml +0 -136
- rasa/cli/project_templates/finance/tests/happy_paths/payee_management.yml +0 -27
- rasa/cli/project_templates/finance/tests/happy_paths/user_greeted.yml +0 -5
- rasa/cli/project_templates/plain/config.yml +0 -17
- rasa/cli/project_templates/plain/data/patterns/pattern_session_start.yml +0 -7
- rasa/cli/project_templates/plain/domain.yml +0 -5
- rasa/core/channels/inspector/dist/assets/channel-f1efda17.js +0 -1
- rasa/core/channels/inspector/dist/assets/clone-fdf164e2.js +0 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-7d7a1629.js +0 -1
- rasa/shared/importers/static.py +0 -63
- /rasa/{cli/project_templates/plain/actions → builder/copilot}/__init__.py +0 -0
- /rasa/builder/{inkeep-rag-response-schema.json → document_retrieval/inkeep-rag-response-schema.json} +0 -0
- /rasa/cli/project_templates/finance/actions/{action_process_immediate_payment.py → transfers/action_process_immediate_payment.py} +0 -0
- /rasa/cli/project_templates/finance/actions/{action_schedule_payment.py → transfers/action_schedule_payment.py} +0 -0
- /rasa/cli/project_templates/finance/actions/{action_validate_payment_date.py → transfers/action_validate_payment_date.py} +0 -0
- /rasa/cli/project_templates/finance/data/{flows → cards}/block_card.yml +0 -0
- /rasa/cli/project_templates/finance/data/{flows → cards}/select_card.yml +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/accounts.json +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/advisors.json +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/appointments.json +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/branches.json +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/cards.json +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/payees.json +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/transactions.json +0 -0
- /rasa/cli/project_templates/finance/data/{source → system/source}/users.json +0 -0
- /rasa/cli/project_templates/finance/data/{flows → transfers}/add_payee.yml +0 -0
- /rasa/cli/project_templates/finance/data/{flows → transfers}/list_payees.yml +0 -0
- /rasa/cli/project_templates/finance/data/{flows → transfers}/remove_payee.yml +0 -0
- /rasa/cli/project_templates/finance/data/{flows → transfers}/transfer_money.yml +0 -0
- /rasa/cli/project_templates/finance/domain/{block_card.yml → cards/block_card.yml} +0 -0
- /rasa/cli/project_templates/finance/domain/{select_card.yml → cards/select_card.yml} +0 -0
- /rasa/cli/project_templates/finance/domain/{add_payee.yml → transfers/add_payee.yml} +0 -0
- /rasa/cli/project_templates/finance/domain/{list_payees.yml → transfers/list_payees.yml} +0 -0
- /rasa/cli/project_templates/finance/domain/{remove_payee.yml → transfers/remove_payee.yml} +0 -0
- /rasa/cli/project_templates/finance/domain/{transfer_money.yml → transfers/transfer_money.yml} +0 -0
- {rasa_pro-3.13.1a18.dist-info → rasa_pro-3.13.1a20.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.1a18.dist-info → rasa_pro-3.13.1a20.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.1a18.dist-info → rasa_pro-3.13.1a20.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Optional
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from rasa.builder.copilot.constants import ROLE_ASSISTANT, ROLE_USER
|
|
6
|
+
from rasa.shared.core.constants import DEFAULT_SLOT_NAMES
|
|
7
|
+
from rasa.shared.core.events import (
|
|
8
|
+
ActionExecuted,
|
|
9
|
+
BotUttered,
|
|
10
|
+
FlowCompleted,
|
|
11
|
+
FlowStarted,
|
|
12
|
+
SlotSet,
|
|
13
|
+
UserUttered,
|
|
14
|
+
)
|
|
15
|
+
from rasa.shared.core.trackers import DialogueStateTracker
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AssistantMessage(BaseModel):
|
|
19
|
+
text: str
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class UserMessage(BaseModel):
|
|
23
|
+
text: str
|
|
24
|
+
predicted_commands: List[str] = Field(default_factory=list)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class TrackerEvent(BaseModel):
|
|
28
|
+
event: str
|
|
29
|
+
data: Dict[str, Any] = Field(default_factory=dict)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class AssistantConversationTurn(BaseModel):
|
|
33
|
+
user_message: Optional[UserMessage] = None
|
|
34
|
+
assistant_messages: List[AssistantMessage] = Field(default_factory=list)
|
|
35
|
+
context_events: List[TrackerEvent] = Field(default_factory=list)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class CurrentState(BaseModel):
|
|
39
|
+
latest_message: Optional[str] = None
|
|
40
|
+
active_flow: Optional[str] = None
|
|
41
|
+
flow_stack: Optional[List[Dict[str, Any]]] = None
|
|
42
|
+
slots: Optional[Dict[str, Any]] = None
|
|
43
|
+
latest_action: Optional[str] = None
|
|
44
|
+
followup_action: Optional[str] = None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class TrackerContext(BaseModel):
|
|
48
|
+
conversation_turns: List[AssistantConversationTurn]
|
|
49
|
+
current_state: CurrentState
|
|
50
|
+
|
|
51
|
+
def to_openai_format(self) -> List[Dict[str, Any]]:
|
|
52
|
+
"""Convert the TrackerContext to a format suitable for OpenAI.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
A list of user and assistant messages in the format suitable for OpenAI.
|
|
56
|
+
"""
|
|
57
|
+
messages: List[Dict[str, Any]] = []
|
|
58
|
+
for turn in self.conversation_turns:
|
|
59
|
+
if turn.user_message:
|
|
60
|
+
messages.append({"role": ROLE_USER, "content": turn.user_message.text})
|
|
61
|
+
for message in turn.assistant_messages:
|
|
62
|
+
messages.append({"role": ROLE_ASSISTANT, "content": message.text})
|
|
63
|
+
return messages
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def from_tracker(
|
|
67
|
+
cls, tracker: Optional[DialogueStateTracker], max_turns: int = 10
|
|
68
|
+
) -> Optional["TrackerContext"]:
|
|
69
|
+
"""Convert a tracker to a TrackerContext."""
|
|
70
|
+
if not tracker or not tracker.events:
|
|
71
|
+
return None
|
|
72
|
+
|
|
73
|
+
conversation_turns = cls._build_conversation_turns(tracker)
|
|
74
|
+
conversation_turns = conversation_turns[-max_turns:]
|
|
75
|
+
current_state = cls._build_current_state(tracker)
|
|
76
|
+
|
|
77
|
+
return cls(
|
|
78
|
+
conversation_turns=conversation_turns,
|
|
79
|
+
current_state=current_state,
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
@classmethod
|
|
83
|
+
def _build_conversation_turns(
|
|
84
|
+
cls, tracker: DialogueStateTracker
|
|
85
|
+
) -> List[AssistantConversationTurn]:
|
|
86
|
+
"""Build conversation turns from tracker events."""
|
|
87
|
+
conversation_turns: List[AssistantConversationTurn] = []
|
|
88
|
+
current_user_message: Optional[UserMessage] = None
|
|
89
|
+
current_assistant_messages: List[AssistantMessage] = []
|
|
90
|
+
current_context_events: List[TrackerEvent] = []
|
|
91
|
+
|
|
92
|
+
for event in tracker.applied_events():
|
|
93
|
+
if isinstance(event, UserUttered):
|
|
94
|
+
# Save previous turn if exists and has content. A new turn starts with a
|
|
95
|
+
# user message. However, since it's possible that "turn" started with an
|
|
96
|
+
# assistant message, we save that turn without the user message.
|
|
97
|
+
if (
|
|
98
|
+
current_user_message
|
|
99
|
+
or current_assistant_messages
|
|
100
|
+
or current_context_events
|
|
101
|
+
):
|
|
102
|
+
conversation_turns.append(
|
|
103
|
+
AssistantConversationTurn(
|
|
104
|
+
user_message=current_user_message,
|
|
105
|
+
assistant_messages=current_assistant_messages,
|
|
106
|
+
context_events=current_context_events,
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
current_assistant_messages = []
|
|
110
|
+
current_context_events = []
|
|
111
|
+
|
|
112
|
+
# Start new turn
|
|
113
|
+
|
|
114
|
+
# Fetch the predicted commands for the user message
|
|
115
|
+
predicted_commands = (
|
|
116
|
+
[command.get("command") for command in event.commands]
|
|
117
|
+
if event.commands
|
|
118
|
+
else []
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
current_user_message = UserMessage(
|
|
122
|
+
text=event.text or "",
|
|
123
|
+
predicted_commands=predicted_commands,
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# Assistant conversation turn can have multiple messages from the assistant
|
|
127
|
+
elif isinstance(event, BotUttered):
|
|
128
|
+
current_assistant_messages.append(
|
|
129
|
+
AssistantMessage(text=event.text or "")
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# Handle non-user and non-assistant events. These are useful for more
|
|
133
|
+
# adding context to the conversation turn.
|
|
134
|
+
else:
|
|
135
|
+
context_event = cls._process_tracker_event(event)
|
|
136
|
+
if context_event:
|
|
137
|
+
current_context_events.append(context_event)
|
|
138
|
+
|
|
139
|
+
# Add the final turn if there is one
|
|
140
|
+
if current_user_message or current_assistant_messages:
|
|
141
|
+
conversation_turns.append(
|
|
142
|
+
AssistantConversationTurn(
|
|
143
|
+
user_message=current_user_message,
|
|
144
|
+
assistant_messages=current_assistant_messages,
|
|
145
|
+
context_events=current_context_events,
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
return conversation_turns
|
|
150
|
+
|
|
151
|
+
@staticmethod
|
|
152
|
+
def _process_tracker_event(event: Any) -> Optional[TrackerEvent]:
|
|
153
|
+
if isinstance(event, ActionExecuted):
|
|
154
|
+
return TrackerEvent(
|
|
155
|
+
event=ActionExecuted.type_name,
|
|
156
|
+
data={"action_name": event.action_name, "confidence": event.confidence},
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
elif isinstance(event, SlotSet) and event.key not in DEFAULT_SLOT_NAMES:
|
|
160
|
+
return TrackerEvent(
|
|
161
|
+
event=SlotSet.type_name,
|
|
162
|
+
data={"slot_name": event.key, "slot_value": event.value},
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
elif isinstance(event, FlowStarted):
|
|
166
|
+
return TrackerEvent(
|
|
167
|
+
event=FlowStarted.type_name,
|
|
168
|
+
data={"flow_id": event.flow_id},
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
elif isinstance(event, FlowCompleted):
|
|
172
|
+
return TrackerEvent(
|
|
173
|
+
event=FlowCompleted.type_name,
|
|
174
|
+
data={"flow_id": event.flow_id},
|
|
175
|
+
)
|
|
176
|
+
else:
|
|
177
|
+
return None
|
|
178
|
+
|
|
179
|
+
@classmethod
|
|
180
|
+
def _build_current_state(cls, tracker: DialogueStateTracker) -> CurrentState:
|
|
181
|
+
"""Build the current state from the tracker."""
|
|
182
|
+
latest_message = tracker.latest_message.text if tracker.latest_message else None
|
|
183
|
+
latest_action = (
|
|
184
|
+
tracker.latest_action.get("action_name") if tracker.latest_action else None
|
|
185
|
+
)
|
|
186
|
+
followup_action = tracker.followup_action
|
|
187
|
+
flow_stack = tracker.stack.as_dict() if tracker.stack else None
|
|
188
|
+
slots = cls._extract_non_default_slots(tracker)
|
|
189
|
+
active_flow = tracker.active_flow
|
|
190
|
+
|
|
191
|
+
return CurrentState(
|
|
192
|
+
latest_message=latest_message,
|
|
193
|
+
active_flow=active_flow,
|
|
194
|
+
flow_stack=flow_stack,
|
|
195
|
+
latest_action=latest_action,
|
|
196
|
+
followup_action=followup_action,
|
|
197
|
+
slots=slots,
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
@classmethod
|
|
201
|
+
def _extract_non_default_slots(
|
|
202
|
+
cls, tracker: DialogueStateTracker
|
|
203
|
+
) -> Optional[Dict[str, Any]]:
|
|
204
|
+
"""Extract non-default slot values from the tracker."""
|
|
205
|
+
if not tracker.slots:
|
|
206
|
+
return None
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
k: str(v.value)
|
|
210
|
+
for k, v in tracker.slots.items()
|
|
211
|
+
if v is not None and k not in DEFAULT_SLOT_NAMES
|
|
212
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import sys
|
|
4
4
|
from contextlib import contextmanager
|
|
5
|
-
from typing import Optional
|
|
5
|
+
from typing import Any, Dict, Generator, Optional
|
|
6
6
|
|
|
7
7
|
import structlog
|
|
8
8
|
from structlog.testing import capture_logs
|
|
@@ -16,15 +16,15 @@ structlogger = structlog.get_logger()
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
@contextmanager
|
|
19
|
-
def _mock_sys_exit():
|
|
19
|
+
def _mock_sys_exit() -> Generator[Dict[str, bool], Any, None]:
|
|
20
20
|
"""Context manager to prevent sys.exit from being called during validation."""
|
|
21
21
|
was_sys_exit_called = {"value": False}
|
|
22
22
|
|
|
23
|
-
def sys_exit_mock(code: int = 0):
|
|
23
|
+
def sys_exit_mock(code: int = 0) -> None:
|
|
24
24
|
was_sys_exit_called["value"] = True
|
|
25
25
|
|
|
26
26
|
original_exit = sys.exit
|
|
27
|
-
sys.exit = sys_exit_mock
|
|
27
|
+
sys.exit = sys_exit_mock # type: ignore[assignment]
|
|
28
28
|
|
|
29
29
|
try:
|
|
30
30
|
yield was_sys_exit_called
|
rasa/cli/data.py
CHANGED
|
@@ -205,9 +205,14 @@ def _build_training_data_importer(args: argparse.Namespace) -> "TrainingDataImpo
|
|
|
205
205
|
args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=False
|
|
206
206
|
)
|
|
207
207
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
208
|
+
if config:
|
|
209
|
+
return TrainingDataImporter.load_from_config(
|
|
210
|
+
domain_path=domain, training_data_paths=args.data, config_path=config
|
|
211
|
+
)
|
|
212
|
+
else:
|
|
213
|
+
return TrainingDataImporter.load_from_dict(
|
|
214
|
+
domain_path=domain, training_data_paths=args.data, config_path=config
|
|
215
|
+
)
|
|
211
216
|
|
|
212
217
|
|
|
213
218
|
def _append_story_structure_arguments(parser: argparse.ArgumentParser) -> None:
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
from rasa_sdk import Action, Tracker
|
|
4
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
5
|
+
from rasa_sdk.types import DomainDict
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ActionAPI(Action):
|
|
9
|
+
def name(self) -> Text:
|
|
10
|
+
return "action_api"
|
|
11
|
+
|
|
12
|
+
async def run(
|
|
13
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
14
|
+
) -> List[Dict[Text, Any]]:
|
|
15
|
+
return []
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Text
|
|
2
|
+
|
|
3
|
+
import openai
|
|
4
|
+
from rasa_sdk import Action, Tracker
|
|
5
|
+
from rasa_sdk.events import BotUttered
|
|
6
|
+
from rasa_sdk.executor import CollectingDispatcher
|
|
7
|
+
from rasa_sdk.types import DomainDict
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ActionHumanHandoff(Action):
|
|
11
|
+
def name(self) -> Text:
|
|
12
|
+
return "action_human_handoff"
|
|
13
|
+
|
|
14
|
+
async def run(
|
|
15
|
+
self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: DomainDict
|
|
16
|
+
) -> List[Dict[Text, Any]]:
|
|
17
|
+
# Collect conversation
|
|
18
|
+
convo = []
|
|
19
|
+
for event in tracker.events:
|
|
20
|
+
if event.get("event") == "user":
|
|
21
|
+
user_text = f"user - {event.get('text')}"
|
|
22
|
+
convo.append(user_text)
|
|
23
|
+
if event.get("event") == "bot":
|
|
24
|
+
bot_text = f"bot - {event.get('text')}"
|
|
25
|
+
convo.append(bot_text)
|
|
26
|
+
prompt = (
|
|
27
|
+
f"The following is a conversation between a bot and a human user, "
|
|
28
|
+
f"please summarise so that a human agent can easily understand "
|
|
29
|
+
f"the important context. Conversation: {convo}"
|
|
30
|
+
)
|
|
31
|
+
response = openai.chat.completions.create(
|
|
32
|
+
model="gpt-4", # or "gpt-3.5-turbo"
|
|
33
|
+
messages=[{"role": "user", "content": prompt}],
|
|
34
|
+
)
|
|
35
|
+
summarised_conversation = (
|
|
36
|
+
response.choices[0].message.content or "No summary available"
|
|
37
|
+
)
|
|
38
|
+
return [
|
|
39
|
+
BotUttered(
|
|
40
|
+
f"I will transfer the following summary of our conversation "
|
|
41
|
+
f"to the Callback Manager:\n"
|
|
42
|
+
f"{summarised_conversation}"
|
|
43
|
+
)
|
|
44
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# This file contains the configuration for the bot.
|
|
2
|
+
# https://rasa.com/docs/reference/config/overview
|
|
3
|
+
|
|
4
|
+
recipe: default.v1
|
|
5
|
+
language: en
|
|
6
|
+
assistant_id: placeholder_default
|
|
7
|
+
|
|
8
|
+
pipeline:
|
|
9
|
+
- name: SearchReadyLLMCommandGenerator
|
|
10
|
+
llm:
|
|
11
|
+
model_group: openai-gpt-4o
|
|
12
|
+
flow_retrieval:
|
|
13
|
+
active: false
|
|
14
|
+
|
|
15
|
+
policies:
|
|
16
|
+
- name: FlowPolicy
|
|
17
|
+
- name: EnterpriseSearchPolicy
|
|
18
|
+
vector_store:
|
|
19
|
+
type: "faiss"
|
|
20
|
+
source: "./docs"
|
|
21
|
+
llm:
|
|
22
|
+
model_group: openai-gpt-4o
|
|
23
|
+
check_relevancy: true
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
|
|
1
2
|
# This file contains the credentials for the voice & chat platforms
|
|
2
3
|
# which your bot is using.
|
|
3
4
|
# https://rasa.com/docs/rasa-pro/connectors/messaging-and-voice-channels/
|
|
4
|
-
|
|
5
5
|
rest:
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
socketio:
|
|
7
|
+
bot_message_evt: bot_uttered
|
|
8
|
+
session_persistence: true
|
|
9
|
+
user_message_evt: user_uttered
|
|
8
10
|
|
|
11
|
+
rasa:
|
|
12
|
+
url: "http://localhost:5002/api"
|
|
9
13
|
|
|
10
14
|
#facebook:
|
|
11
15
|
# verify: "<verify>"
|
|
@@ -27,7 +31,4 @@ rest:
|
|
|
27
31
|
# token: "<bot token>"
|
|
28
32
|
# webhook_url: "<callback URL>"
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
# for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers.
|
|
32
|
-
rasa:
|
|
33
|
-
url: "http://localhost:5002/api"
|
|
34
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Simple thumbs up/down feedback flow
|
|
2
|
+
flows:
|
|
3
|
+
leave_feedback:
|
|
4
|
+
description: This flow collects simple thumbs up or thumbs down feedback
|
|
5
|
+
if: False # Flow guard to prevent direct triggering
|
|
6
|
+
steps:
|
|
7
|
+
- collect: feedback_rating
|
|
8
|
+
description: Ask user for thumbs up or thumbs down feedback
|
|
9
|
+
- id: feedback_response
|
|
10
|
+
noop: true
|
|
11
|
+
next:
|
|
12
|
+
- if: slots.feedback_rating == "thumbs_up"
|
|
13
|
+
then: positive_response
|
|
14
|
+
- else: negative_response
|
|
15
|
+
- id: positive_response
|
|
16
|
+
action: utter_thankyou_positive
|
|
17
|
+
next: END
|
|
18
|
+
- id: negative_response
|
|
19
|
+
action: utter_thankyou_negative
|
|
20
|
+
next: END
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
version: "3.1"
|
|
2
|
+
flows:
|
|
3
|
+
human_handoff:
|
|
4
|
+
description: Handles escalation to a live human agent.
|
|
5
|
+
steps:
|
|
6
|
+
- collect: confirm_human_handoff
|
|
7
|
+
ask_before_filling: True
|
|
8
|
+
next:
|
|
9
|
+
- if: slots.confirm_human_handoff is "Yes"
|
|
10
|
+
then:
|
|
11
|
+
- action: utter_transferring_to_human
|
|
12
|
+
- action: action_human_handoff
|
|
13
|
+
next: END
|
|
14
|
+
- else:
|
|
15
|
+
- action: utter_human_handoff_cancelled
|
|
16
|
+
next: END
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
flows:
|
|
2
|
+
welcome:
|
|
3
|
+
if: False
|
|
4
|
+
description: |
|
|
5
|
+
This flow is designed to greet and onboard new users who initiate a welcome intent.
|
|
6
|
+
It begins with an initial greeting message to establish a friendly interaction.
|
|
7
|
+
name: say hello
|
|
8
|
+
steps:
|
|
9
|
+
- action: utter_greeting
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
1. Rasa Assistant Capabilities
|
|
2
|
+
|
|
3
|
+
Q: What is a Rasa assistant?
|
|
4
|
+
A: A Rasa assistant is an AI-powered conversational bot built using the Rasa framework. It can understand natural language, manage complex conversations, execute actions, and integrate with external systems to help users accomplish tasks through text or voice interactions.
|
|
5
|
+
|
|
6
|
+
Q: What types of tasks can Rasa assistants handle?
|
|
7
|
+
A: Rasa assistants can handle a wide variety of tasks including customer support, booking appointments, processing transactions, answering FAQs, collecting information through forms, routing calls to human agents, providing personalized recommendations, and integrating with databases and APIs.
|
|
8
|
+
|
|
9
|
+
Q: How does a Rasa assistant understand what users say?
|
|
10
|
+
A: Rasa assistants use Natural Language Understanding (NLU) to interpret user messages. They can extract intents (what the user wants to do) and entities (important information like names, dates, amounts) from text. Rasa Pro also supports LLM-based understanding for more flexible conversation handling.
|
|
11
|
+
|
|
12
|
+
2. Conversation Management
|
|
13
|
+
|
|
14
|
+
Q: Can Rasa assistants handle complex conversations?
|
|
15
|
+
A: Yes, Rasa assistants excel at managing complex, multi-turn conversations. They use dialogue management to track conversation context, remember previous interactions, and guide users through multi-step processes like filling out forms or completing transactions.
|
|
16
|
+
|
|
17
|
+
Q: What are Rasa flows?
|
|
18
|
+
A: Rasa flows are a powerful feature that allows you to define conversational workflows with branching logic, conditional steps, and data collection. They make it easy to create structured conversations for tasks like onboarding, troubleshooting, or gathering customer information.
|
|
19
|
+
|
|
20
|
+
Q: Can the assistant handle interruptions and context switching?
|
|
21
|
+
A: Absolutely! Rasa assistants can handle conversation repairs, interruptions, clarifications, and context switching. Users can change topics mid-conversation or ask for help, and the assistant will respond appropriately while maintaining conversation state.
|
|
22
|
+
|
|
23
|
+
3. Integration and Actions
|
|
24
|
+
|
|
25
|
+
Q: Can Rasa assistants connect to external systems?
|
|
26
|
+
A: Yes, Rasa assistants can integrate with virtually any external system through custom actions. They can connect to databases, APIs, CRM systems, payment processors, booking systems, and more to perform real-world tasks on behalf of users.
|
|
27
|
+
|
|
28
|
+
Q: What are custom actions in Rasa?
|
|
29
|
+
A: Custom actions are Python functions that allow your assistant to perform specific tasks like querying databases, calling APIs, processing payments, sending emails, or any other business logic. They bridge the gap between conversation and real-world actions.
|
|
30
|
+
|
|
31
|
+
Q: Can Rasa assistants work with existing business systems?
|
|
32
|
+
A: Yes, Rasa assistants are designed to integrate seamlessly with existing business infrastructure. They can connect to your CRM, ERP, databases, microservices, and other enterprise systems through APIs and custom integrations.
|
|
33
|
+
|
|
34
|
+
4. Advanced Features
|
|
35
|
+
|
|
36
|
+
Q: Does Rasa support voice interactions?
|
|
37
|
+
A: Yes, Rasa assistants can handle voice interactions through integration with speech-to-text and text-to-speech services. They can be deployed as voice bots for phone systems or voice-enabled applications.
|
|
38
|
+
|
|
39
|
+
Q: Can Rasa assistants learn and improve over time?
|
|
40
|
+
A: Rasa assistants can be continuously improved through conversation analytics, user feedback, and retraining with new data. Rasa X (now part of Rasa Pro) provides tools for reviewing conversations and improving assistant performance.
|
|
41
|
+
|
|
42
|
+
Q: What is CALM in Rasa?
|
|
43
|
+
A: CALM (Conversational AI with Language Models) is Rasa's architecture that combines traditional rule-based dialogue management with large language models. This provides both reliability and flexibility, allowing for structured workflows while handling unexpected user inputs gracefully.
|
|
44
|
+
|
|
45
|
+
5. Deployment and Scaling
|
|
46
|
+
|
|
47
|
+
Q: Where can Rasa assistants be deployed?
|
|
48
|
+
A: Rasa assistants can be deployed anywhere - on websites as chatbots, in mobile apps, on messaging platforms (WhatsApp, Slack, Facebook Messenger), as voice bots, in call centers, or as standalone applications. They're platform-agnostic and highly flexible.
|
|
49
|
+
|
|
50
|
+
Q: Can Rasa assistants handle multiple languages?
|
|
51
|
+
A: Yes, Rasa supports multilingual assistants. You can train models in different languages and create assistants that can communicate with users in their preferred language.
|
|
52
|
+
|
|
53
|
+
Q: How do Rasa assistants scale for enterprise use?
|
|
54
|
+
A: Rasa assistants are built for enterprise scale with features like clustering, load balancing, conversation analytics, version control for models, A/B testing capabilities, and enterprise-grade security and compliance features.
|
|
55
|
+
|
|
56
|
+
6. Use Cases and Industries
|
|
57
|
+
|
|
58
|
+
Q: What industries use Rasa assistants?
|
|
59
|
+
A: Rasa assistants are used across many industries including banking and finance, healthcare, e-commerce, telecommunications, insurance, travel and hospitality, education, and government services. Any industry that needs to automate customer interactions can benefit.
|
|
60
|
+
|
|
61
|
+
Q: Can Rasa assistants replace human agents?
|
|
62
|
+
A: Rasa assistants are designed to augment human agents, not replace them. They can handle routine inquiries and tasks, freeing up human agents for complex issues that require empathy, creativity, or specialized knowledge. They can also seamlessly hand off conversations to humans when needed.
|
|
63
|
+
|
|
64
|
+
Q: What's the difference between Rasa and simple chatbots?
|
|
65
|
+
A: Unlike simple rule-based chatbots, Rasa assistants can understand context, handle complex multi-turn conversations, learn from interactions, integrate with business systems, and manage sophisticated workflows. They're true conversational AI rather than basic question-answering systems.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
1. General Questions
|
|
2
|
+
|
|
3
|
+
Q: What else can you do?
|
|
4
|
+
A: I can answer questions from docs. Add more txt files to /docs to get started.
|
|
5
|
+
|
|
6
|
+
Q: Can you do RAG?
|
|
7
|
+
A: Yes, you can use Retrieval-Augmented Generation (RAG) with Rasa. Rasa's CALM architecture supports RAG through its Enterprise Search Policy. Right now, I'm just retrieving messages from the /docs folder for demo purposes. Add more txt files to /docs to test it out.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
responses:
|
|
2
|
+
utter_bot_identity:
|
|
3
|
+
- text: "Yes, I'm an AI assistant designed to help you with your questions. I'm here to provide helpful information and support. How can I assist you today?"
|
|
4
|
+
- text: "I am indeed an AI assistant! I'm programmed to be helpful, accurate, and friendly. What can I help you with?"
|
|
5
|
+
- text: "That's right, I'm an AI bot created to assist you. I aim to provide useful responses and help solve your questions. Is there something specific I can help you with?"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
slots:
|
|
2
|
+
feedback_rating:
|
|
3
|
+
type: categorical
|
|
4
|
+
values: [thumbs_up, thumbs_down]
|
|
5
|
+
mappings:
|
|
6
|
+
- type: from_llm
|
|
7
|
+
|
|
8
|
+
responses:
|
|
9
|
+
utter_ask_feedback_rating:
|
|
10
|
+
- text: "Before you go, how was your experience?"
|
|
11
|
+
buttons:
|
|
12
|
+
- title: "👍 Great"
|
|
13
|
+
payload: "/SetSlots(feedback_rating=thumbs_up)"
|
|
14
|
+
- title: "👎 Could be better"
|
|
15
|
+
payload: "/SetSlots(feedback_rating=thumbs_down)"
|
|
16
|
+
|
|
17
|
+
utter_thankyou_positive:
|
|
18
|
+
- text: "That's wonderful to hear! Thank you for your feedback! Have a fantastic day! 🌟"
|
|
19
|
+
- text: "So glad we could help! Thanks for the positive feedback! Take care! 😊"
|
|
20
|
+
- text: "Amazing! We're thrilled you had a great experience. Have a wonderful day! 🎉"
|
|
21
|
+
|
|
22
|
+
utter_thankyou_negative:
|
|
23
|
+
- text: "Thank you for your honest feedback. We're always working to improve our service. Have a good day."
|
|
24
|
+
- text: "We appreciate your feedback and will use it to make our service better. Thank you for your time."
|
|
25
|
+
- text: "Thanks for letting us know. Your feedback helps us improve. Take care!"
|
|
26
|
+
|
|
27
|
+
actions:
|
|
28
|
+
- action_default_fallback
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
responses:
|
|
2
|
+
utter_goodbye:
|
|
3
|
+
- text: "Thanks for stopping by — take care!"
|
|
4
|
+
- text: "Thanks for the chat. Have a great day!"
|
|
5
|
+
- text: "Catch you later! Feel free to reach out anytime."
|
|
6
|
+
- text: "Goodbye for now — we’re here if you need anything."
|
|
7
|
+
- text: "Take care! Let us know if you have any other questions."
|