rasa-pro 3.13.8__py3-none-any.whl → 3.14.0a2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rasa-pro might be problematic. Click here for more details.
- rasa/builder/README.md +120 -0
- rasa/builder/__init__.py +0 -0
- rasa/builder/auth.py +176 -0
- rasa/builder/config.py +91 -0
- rasa/builder/copilot/__init__.py +0 -0
- rasa/builder/copilot/constants.py +28 -0
- rasa/builder/copilot/copilot.py +354 -0
- rasa/builder/copilot/copilot_response_handler.py +522 -0
- rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
- rasa/builder/copilot/exceptions.py +32 -0
- rasa/builder/copilot/models.py +464 -0
- rasa/builder/copilot/prompts/__init__.py +0 -0
- rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +771 -0
- rasa/builder/copilot/signing.py +305 -0
- rasa/builder/copilot/telemetry.py +200 -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 +38 -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 +142 -0
- rasa/builder/exceptions.py +91 -0
- rasa/builder/guardrails/__init__.py +1 -0
- rasa/builder/guardrails/constants.py +9 -0
- rasa/builder/guardrails/exceptions.py +4 -0
- rasa/builder/guardrails/lakera.py +206 -0
- rasa/builder/guardrails/models.py +231 -0
- rasa/builder/guardrails/store.py +238 -0
- rasa/builder/guardrails/utils.py +328 -0
- rasa/builder/job_manager.py +87 -0
- rasa/builder/jobs.py +276 -0
- rasa/builder/llm_service.py +246 -0
- rasa/builder/logging_utils.py +265 -0
- rasa/builder/main.py +242 -0
- rasa/builder/models.py +216 -0
- rasa/builder/project_generator.py +351 -0
- rasa/builder/project_info.py +72 -0
- rasa/builder/scrape_rasa_docs.py +97 -0
- rasa/builder/service.py +1335 -0
- rasa/builder/shared/tracker_context.py +212 -0
- rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
- rasa/builder/template_cache.py +244 -0
- rasa/builder/training_service.py +183 -0
- rasa/builder/validation_service.py +97 -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/config.yml +29 -0
- rasa/cli/project_templates/basic/credentials.yml +33 -0
- rasa/cli/project_templates/basic/data/data.md +9 -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 +9 -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/default/config.yml +4 -0
- rasa/cli/project_templates/default/endpoints.yml +4 -0
- 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/accounts/action_ask_account.py +47 -0
- rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
- rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
- rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
- rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
- rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
- rasa/cli/project_templates/finance/actions/database.py +277 -0
- rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
- rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
- rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
- rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
- rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
- rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
- rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
- rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
- rasa/cli/project_templates/finance/config.yml +23 -0
- rasa/cli/project_templates/finance/credentials.yml +32 -0
- rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
- rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
- rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
- rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
- rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
- rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
- rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
- rasa/cli/project_templates/finance/csvs/users.csv +4 -0
- rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
- rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
- rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
- 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/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_chitchat.yml +5 -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/system/source/accounts.json +51 -0
- rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
- rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
- rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
- rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
- rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
- rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
- rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
- rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
- rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
- rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
- rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
- rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
- rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
- rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
- rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
- rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -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/domain/transfers/add_payee.yml +47 -0
- rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
- rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
- rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
- rasa/cli/project_templates/finance/endpoints.yml +66 -0
- rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
- rasa/cli/project_templates/telco/actions/__init__.py +0 -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/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 +5 -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/domain_undertand_bill.yml +102 -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 +29 -0
- rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
- rasa/cli/project_templates/telco/domain/network/domain_reboot_router.yml +21 -0
- rasa/cli/project_templates/telco/domain/network/domain_reset_router.yml +12 -0
- rasa/cli/project_templates/telco/domain/network/domain_run_speed_test.yml +25 -0
- rasa/cli/project_templates/telco/domain/network/domain_solve_internet_issue.yml +75 -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/tutorial/config.yml +2 -1
- rasa/cli/scaffold.py +46 -2
- rasa/cli/train.py +2 -2
- rasa/core/actions/action.py +27 -38
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/channels/channel.py +4 -3
- rasa/core/channels/constants.py +3 -0
- rasa/core/channels/development_inspector.py +48 -15
- rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-c24d8d79.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-1b6b9f26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-da91d0f9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/channel-d2444dfd.js +1 -0
- rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-6067f302.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-705d024a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/clone-281a0990.js +1 -0
- rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-3751dffe.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-7b25b4af.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-eb7deea8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-67235ff6.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-34c3a16a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-aa4cca3b.js +1 -0
- rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-f1a93631.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-a68cbad1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-0b1e4a1d.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-f3c1d212.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{index-c804b295.js → index-051c5a6e.js} +255 -255
- rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-34cbca30.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-e69960a1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-8dd3296a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-e93126bc.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-15eb1e26.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-fec95d33.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-2557813e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-40d756b1.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-a48cbdcd.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-dc778150.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-10026b94.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-3b2ed10a.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-c5f3b3fb.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-e503656b.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-a683ce56.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-02bcdcee.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-8e90dbb9.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-7c23fc1e.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-c42faec8.js} +1 -1
- rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-5e3bb0ea.js} +1 -1
- rasa/core/channels/inspector/dist/index.html +1 -1
- rasa/core/channels/inspector/src/App.tsx +36 -10
- rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
- rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
- 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/socketio.py +212 -51
- rasa/core/channels/studio_chat.py +161 -50
- rasa/core/channels/voice_ready/twilio_voice.py +1 -1
- rasa/core/channels/voice_stream/audiocodes.py +9 -6
- 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 +13 -11
- 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 +106 -32
- rasa/core/nlg/contextual_response_rephraser.py +11 -7
- 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 +4 -7
- rasa/core/policies/flows/flow_executor.py +8 -1
- rasa/core/run.py +13 -3
- rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
- rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
- rasa/e2e_test/e2e_test_schema.yml +3 -3
- rasa/engine/graph.py +5 -1
- rasa/engine/storage/local_model_storage.py +41 -4
- rasa/model_manager/model_api.py +4 -5
- rasa/model_manager/runner_service.py +1 -1
- rasa/model_manager/socket_bridge.py +27 -15
- rasa/model_manager/trainer_service.py +12 -9
- rasa/model_manager/utils.py +1 -29
- rasa/shared/core/domain.py +62 -15
- rasa/shared/core/flows/flow_step.py +7 -1
- rasa/shared/core/flows/steps/call.py +8 -1
- rasa/shared/core/flows/yaml_flows_io.py +16 -8
- rasa/shared/core/slots.py +4 -0
- rasa/shared/importers/importer.py +6 -0
- rasa/shared/importers/utils.py +77 -1
- rasa/shared/utils/common.py +2 -1
- rasa/studio/upload.py +12 -46
- rasa/telemetry.py +97 -23
- rasa/utils/io.py +27 -9
- rasa/utils/json_utils.py +6 -1
- rasa/utils/licensing.py +21 -10
- rasa/utils/log_utils.py +5 -1
- rasa/utils/openapi.py +144 -0
- rasa/utils/plotting.py +1 -1
- rasa/validator.py +7 -3
- rasa/version.py +1 -1
- {rasa_pro-3.13.8.dist-info → rasa_pro-3.14.0a2.dist-info}/METADATA +23 -24
- {rasa_pro-3.13.8.dist-info → rasa_pro-3.14.0a2.dist-info}/RECORD +382 -105
- 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_pro-3.13.8.dist-info → rasa_pro-3.14.0a2.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.8.dist-info → rasa_pro-3.14.0a2.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.8.dist-info → rasa_pro-3.14.0a2.dist-info}/entry_points.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Z as zt,_ as ot,X as wt,W as Ft,s as Nt,g as Xt,C as Yt,D as St,a as Ht,b as $t,E as Ut,l as Ct,U as qt,i as jt,d as Gt}from"./index-
|
|
1
|
+
import{Z as zt,_ as ot,X as wt,W as Ft,s as Nt,g as Xt,C as Yt,D as St,a as Ht,b as $t,E as Ut,l as Ct,U as qt,i as jt,d as Gt}from"./index-051c5a6e.js";import{c as Qt}from"./createText-2e5e7dd3-3751dffe.js";import{i as Kt}from"./init-77b53fdd.js";import{o as Zt}from"./ordinal-ba9b4969.js";import{l as ft}from"./linear-fec95d33.js";import{l as pt}from"./line-15eb1e26.js";import"./array-9f3ba611.js";import"./path-53f90ab3.js";function Jt(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s<n;)o[s]=e+s*i;return o}function st(){var e=Zt().unknown(void 0),t=e.domain,i=e.range,s=0,n=1,o,c,f=!1,d=0,R=0,_=.5;delete e.unknown;function A(){var m=t().length,T=n<s,S=T?n:s,P=T?s:n;o=(P-S)/Math.max(1,m-d+R*2),f&&(o=Math.floor(o)),S+=(P-S-o*(m-d))*_,c=o*(1-d),f&&(S=Math.round(S),c=Math.round(c));var p=Jt(m).map(function(C){return S+o*C});return i(T?p.reverse():p)}return e.domain=function(m){return arguments.length?(t(m),A()):t()},e.range=function(m){return arguments.length?([s,n]=m,s=+s,n=+n,A()):[s,n]},e.rangeRound=function(m){return[s,n]=m,s=+s,n=+n,f=!0,A()},e.bandwidth=function(){return c},e.step=function(){return o},e.round=function(m){return arguments.length?(f=!!m,A()):f},e.padding=function(m){return arguments.length?(d=Math.min(1,R=+m),A()):d},e.paddingInner=function(m){return arguments.length?(d=Math.min(1,m),A()):d},e.paddingOuter=function(m){return arguments.length?(R=+m,A()):R},e.align=function(m){return arguments.length?(_=Math.max(0,Math.min(1,m)),A()):_},e.copy=function(){return st(t(),[s,n]).round(f).paddingInner(d).paddingOuter(R).align(_)},Kt.apply(A(),arguments)}var nt=function(){var e=function(V,r,l,u){for(l=l||{},u=V.length;u--;l[V[u]]=r);return l},t=[1,10,12,14,16,18,19,21,23],i=[2,6],s=[1,3],n=[1,5],o=[1,6],c=[1,7],f=[1,5,10,12,14,16,18,19,21,23,34,35,36],d=[1,25],R=[1,26],_=[1,28],A=[1,29],m=[1,30],T=[1,31],S=[1,32],P=[1,33],p=[1,34],C=[1,35],h=[1,36],L=[1,37],z=[1,43],lt=[1,42],ct=[1,47],$=[1,50],w=[1,10,12,14,16,18,19,21,23,34,35,36],Q=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],E=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],ut=[1,64],K={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:function(r,l,u,g,b,a,F){var x=a.length-1;switch(b){case 5:g.setOrientation(a[x]);break;case 9:g.setDiagramTitle(a[x].text.trim());break;case 12:g.setLineData({text:"",type:"text"},a[x]);break;case 13:g.setLineData(a[x-1],a[x]);break;case 14:g.setBarData({text:"",type:"text"},a[x]);break;case 15:g.setBarData(a[x-1],a[x]);break;case 16:this.$=a[x].trim(),g.setAccTitle(this.$);break;case 17:case 18:this.$=a[x].trim(),g.setAccDescription(this.$);break;case 19:this.$=a[x-1];break;case 20:this.$=[Number(a[x-2]),...a[x]];break;case 21:this.$=[Number(a[x])];break;case 22:g.setXAxisTitle(a[x]);break;case 23:g.setXAxisTitle(a[x-1]);break;case 24:g.setXAxisTitle({type:"text",text:""});break;case 25:g.setXAxisBand(a[x]);break;case 26:g.setXAxisRangeData(Number(a[x-2]),Number(a[x]));break;case 27:this.$=a[x-1];break;case 28:this.$=[a[x-2],...a[x]];break;case 29:this.$=[a[x]];break;case 30:g.setYAxisTitle(a[x]);break;case 31:g.setYAxisTitle(a[x-1]);break;case 32:g.setYAxisTitle({type:"text",text:""});break;case 33:g.setYAxisRangeData(Number(a[x-2]),Number(a[x]));break;case 37:this.$={text:a[x],type:"text"};break;case 38:this.$={text:a[x],type:"text"};break;case 39:this.$={text:a[x],type:"markdown"};break;case 40:this.$=a[x];break;case 41:this.$=a[x-1]+""+a[x];break}},table:[e(t,i,{3:1,4:2,7:4,5:s,34:n,35:o,36:c}),{1:[3]},e(t,i,{4:2,7:4,3:8,5:s,34:n,35:o,36:c}),e(t,i,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:o,36:c}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(f,[2,34]),e(f,[2,35]),e(f,[2,36]),{1:[2,1]},e(t,i,{4:2,7:4,3:21,5:s,34:n,35:o,36:c}),{1:[2,3]},e(f,[2,5]),e(t,[2,7],{4:22,34:n,35:o,36:c}),{11:23,37:24,38:d,39:R,40:27,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L},{11:39,13:38,24:z,27:lt,29:40,30:41,37:24,38:d,39:R,40:27,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L},{11:45,15:44,27:ct,33:46,37:24,38:d,39:R,40:27,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L},{11:49,17:48,24:$,37:24,38:d,39:R,40:27,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L},{11:52,17:51,24:$,37:24,38:d,39:R,40:27,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L},{20:[1,53]},{22:[1,54]},e(w,[2,18]),{1:[2,2]},e(w,[2,8]),e(w,[2,9]),e(Q,[2,37],{40:55,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L}),e(Q,[2,38]),e(Q,[2,39]),e(E,[2,40]),e(E,[2,42]),e(E,[2,43]),e(E,[2,44]),e(E,[2,45]),e(E,[2,46]),e(E,[2,47]),e(E,[2,48]),e(E,[2,49]),e(E,[2,50]),e(E,[2,51]),e(w,[2,10]),e(w,[2,22],{30:41,29:56,24:z,27:lt}),e(w,[2,24]),e(w,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:d,39:R,40:27,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L},e(w,[2,11]),e(w,[2,30],{33:60,27:ct}),e(w,[2,32]),{31:[1,61]},e(w,[2,12]),{17:62,24:$},{25:63,27:ut},e(w,[2,14]),{17:65,24:$},e(w,[2,16]),e(w,[2,17]),e(E,[2,41]),e(w,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(w,[2,31]),{27:[1,69]},e(w,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(w,[2,15]),e(w,[2,26]),e(w,[2,27]),{11:59,32:72,37:24,38:d,39:R,40:27,41:_,42:A,43:m,44:T,45:S,46:P,47:p,48:C,49:h,50:L},e(w,[2,33]),e(w,[2,19]),{25:73,27:ut},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:function(r,l){if(l.recoverable)this.trace(r);else{var u=new Error(r);throw u.hash=l,u}},parse:function(r){var l=this,u=[0],g=[],b=[null],a=[],F=this.table,x="",U=0,gt=0,Vt=2,xt=1,Wt=a.slice.call(arguments,1),k=Object.create(this.lexer),W={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(W.yy[J]=this.yy[J]);k.setInput(r,W.yy),W.yy.lexer=k,W.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var tt=k.yylloc;a.push(tt);var Bt=k.options&&k.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var I;return I=g.pop()||k.lex()||xt,typeof I!="number"&&(I instanceof Array&&(g=I,I=g.pop()),I=l.symbols_[I]||I),I}for(var D,B,v,it,O={},q,M,dt,j;;){if(B=u[u.length-1],this.defaultActions[B]?v=this.defaultActions[B]:((D===null||typeof D>"u")&&(D=Ot()),v=F[B]&&F[B][D]),typeof v>"u"||!v.length||!v[0]){var et="";j=[];for(q in F[B])this.terminals_[q]&&q>Vt&&j.push("'"+this.terminals_[q]+"'");k.showPosition?et="Parse error on line "+(U+1)+`:
|
|
2
2
|
`+k.showPosition()+`
|
|
3
3
|
Expecting `+j.join(", ")+", got '"+(this.terminals_[D]||D)+"'":et="Parse error on line "+(U+1)+": Unexpected "+(D==xt?"end of input":"'"+(this.terminals_[D]||D)+"'"),this.parseError(et,{text:k.match,token:this.terminals_[D]||D,line:k.yylineno,loc:tt,expected:j})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+B+", token: "+D);switch(v[0]){case 1:u.push(D),b.push(k.yytext),a.push(k.yylloc),u.push(v[1]),D=null,gt=k.yyleng,x=k.yytext,U=k.yylineno,tt=k.yylloc;break;case 2:if(M=this.productions_[v[1]][1],O.$=b[b.length-M],O._$={first_line:a[a.length-(M||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(M||1)].first_column,last_column:a[a.length-1].last_column},Bt&&(O._$.range=[a[a.length-(M||1)].range[0],a[a.length-1].range[1]]),it=this.performAction.apply(O,[x,gt,U,W.yy,v[1],b,a].concat(Wt)),typeof it<"u")return it;M&&(u=u.slice(0,-1*M*2),b=b.slice(0,-1*M),a=a.slice(0,-1*M)),u.push(this.productions_[v[1]][0]),b.push(O.$),a.push(O._$),dt=F[u[u.length-2]][u[u.length-1]],u.push(dt);break;case 3:return!0}}return!0}},It=function(){var V={EOF:1,parseError:function(l,u){if(this.yy.parser)this.yy.parser.parseError(l,u);else throw new Error(l)},setInput:function(r,l){return this.yy=l||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var l=r.match(/(?:\r\n?|\n).*/g);return l?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},unput:function(r){var l=r.length,u=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-l),this.offset-=l;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var b=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===g.length?this.yylloc.first_column:0)+g[g.length-u.length].length-u[0].length:this.yylloc.first_column-l},this.options.ranges&&(this.yylloc.range=[b[0],b[0]+this.yyleng-l]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(r){this.unput(this.match.slice(r))},pastInput:function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var r=this.pastInput(),l=new Array(r.length+1).join("-");return r+this.upcomingInput()+`
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<link rel="icon" href="data:image/x-icon;base64,AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAOwAAADsAAAAEAAAABAAAABxaUwAwoyZAMOJmADBi5kAwoyZAMKMmQDCjJkAwoyZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAACV3AAAAAAAAAAAAAAAAAAYXdwAAAAAAAAAAAAAAAANHd3cAAAAAAAEREREREREXd3d3ERAAAAAHd3d3d3d3d3FXd3dwAAAAB3d3d3d3d3dDB3d3cAAAAAd3IiIiIiIiAAIid3AAAAAHdwAAAAAAAAAAAHdwAAAAB3cAAAAAAAAAAAB3cAAAAAd3AAd3AABnd0AAd3AAAAAHdwAHdwADF3QgAHdwAAAAB3cAB3dTMXcSAAB3cAAAAAd3AAd3dxdxMAAAd3AAAAAHdwAHd3d3dGAAAHdwAAAAB3cAB3dHd3dxUAB3cAAAAAd3AAd3A1F3d3AAd3AAAAAHdwAHdwAANXdwAHdwAAAAB3cAB3cAAAAXcAB3cAAAAAd3AAd3d3d3d3AAd3AAAAAHdwAHd3d3d3dwAHdwAAAAB3cAB3d3d3d3cAB3cAAAAAd3AAAAAAAAAAAAd3AAAAAHdwAAAAAAAAAAAHdwAAAAB3cAAAAAAAAAAAB3cAAAAAd3d3d3d3d3d3d3d3AAAAAHd3d3d3d3d3d3d3dwAAAAB3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///5////4f///8H///8B/8AAAD/AAAA/wAAQP8AAcD/H//4/x//+P8ceDj/HHA4/xwAeP8cAPj/HAD4/xwAOP8cQDj/HHg4/xx+OP8cADj/HAA4/xwAOP8f//j/H//4/x//+P8AAAD/AAAA/wAAAP/////////////////////w==" sizes="32x32">
|
|
8
8
|
<title>Rasa inspector</title>
|
|
9
|
-
<script type="module" crossorigin src="./assets/index-
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-051c5a6e.js"></script>
|
|
10
10
|
<link rel="stylesheet" href="./assets/index-3ee28881.css">
|
|
11
11
|
</head>
|
|
12
12
|
|
|
@@ -5,25 +5,25 @@ import {
|
|
|
5
5
|
useColorModeValue,
|
|
6
6
|
useToast,
|
|
7
7
|
} from '@chakra-ui/react'
|
|
8
|
-
import { useEffect, useState } from 'react'
|
|
9
8
|
import axios from 'axios'
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
9
|
+
import queryString from 'query-string'
|
|
10
|
+
import { useCallback, useEffect, useState } from 'react'
|
|
11
|
+
import useWebSocket, { ReadyState } from 'react-use-websocket'
|
|
12
|
+
import { Chat } from './components/Chat'
|
|
13
|
+
import { DiagramFlow } from './components/DiagramFlow'
|
|
13
14
|
import { DialougeInformation } from './components/DialogueInformation'
|
|
15
|
+
import { DialogueStack } from './components/DialogueStack'
|
|
14
16
|
import { LoadingSpinner } from './components/LoadingSpinner'
|
|
15
|
-
import { DiagramFlow } from './components/DiagramFlow'
|
|
16
17
|
import { RecruitmentPanel } from './components/RecruitmentPanel'
|
|
18
|
+
import { Welcome } from './components/Welcome'
|
|
17
19
|
import { formatSlots } from './helpers/formatters'
|
|
18
|
-
import { Slot, Stack, Event, Flow, SelectedStack, Tracker } from './types'
|
|
19
20
|
import {
|
|
20
21
|
createHistoricalStack,
|
|
21
22
|
flowStepTrail,
|
|
22
23
|
updatedActiveFrame,
|
|
23
24
|
} from './helpers/utils'
|
|
24
|
-
import
|
|
25
|
-
import {
|
|
26
|
-
import useWebSocket, { ReadyState } from 'react-use-websocket'
|
|
25
|
+
import { useOurTheme } from './theme'
|
|
26
|
+
import { Event, Flow, SelectedStack, Slot, Stack, Tracker } from './types'
|
|
27
27
|
|
|
28
28
|
export function App() {
|
|
29
29
|
const toast = useToast()
|
|
@@ -35,6 +35,7 @@ export function App() {
|
|
|
35
35
|
const [story, setStory] = useState<string>('')
|
|
36
36
|
const [stack, setStack] = useState<Stack[]>([])
|
|
37
37
|
const [frame, setFrame] = useState<SelectedStack | undefined>(undefined)
|
|
38
|
+
const [latency, setLatency] = useState<any>(null)
|
|
38
39
|
|
|
39
40
|
// State to control the visibility of the RecruitmentPanel
|
|
40
41
|
const [showRecruitmentPanel, setShowRecruitmentPanel] = useState(true)
|
|
@@ -127,6 +128,13 @@ export function App() {
|
|
|
127
128
|
!rasaChatSessionId ||
|
|
128
129
|
lastJsonMessage?.sender_id === rasaChatSessionId
|
|
129
130
|
) {
|
|
131
|
+
if (lastJsonMessage.latency) {
|
|
132
|
+
console.log('Latency update:', lastJsonMessage.latency)
|
|
133
|
+
setLatency((prevLatency: any) => ({
|
|
134
|
+
...prevLatency,
|
|
135
|
+
...lastJsonMessage.latency,
|
|
136
|
+
}))
|
|
137
|
+
}
|
|
130
138
|
setSlots(formatSlots(lastJsonMessage.slots))
|
|
131
139
|
setEvents(lastJsonMessage.events)
|
|
132
140
|
const updatedStack = createHistoricalStack(
|
|
@@ -188,8 +196,25 @@ export function App() {
|
|
|
188
196
|
setShowRecruitmentPanel(false)
|
|
189
197
|
}
|
|
190
198
|
|
|
199
|
+
const onLatencyUpdate = useCallback((newLatency: any) => {
|
|
200
|
+
setLatency((prevLatency: any) => ({
|
|
201
|
+
...prevLatency,
|
|
202
|
+
...newLatency,
|
|
203
|
+
}))
|
|
204
|
+
}, [])
|
|
205
|
+
|
|
206
|
+
// Make latency update function available globally for audio stream
|
|
207
|
+
useEffect(() => {
|
|
208
|
+
if (window.location.href.includes('browser_audio')) {
|
|
209
|
+
;(window as any).updateLatency = onLatencyUpdate
|
|
210
|
+
}
|
|
211
|
+
return () => {
|
|
212
|
+
delete (window as any).updateLatency
|
|
213
|
+
}
|
|
214
|
+
}, [onLatencyUpdate])
|
|
215
|
+
|
|
191
216
|
if (!rasaChatSessionId && !window.location.href.includes('socketio'))
|
|
192
|
-
return <LoadingSpinner />
|
|
217
|
+
return <LoadingSpinner onLatencyUpdate={onLatencyUpdate} />
|
|
193
218
|
|
|
194
219
|
return (
|
|
195
220
|
<Grid sx={gridSx}>
|
|
@@ -211,6 +236,7 @@ export function App() {
|
|
|
211
236
|
slots={slots}
|
|
212
237
|
events={events}
|
|
213
238
|
story={story}
|
|
239
|
+
latency={latency}
|
|
214
240
|
/>
|
|
215
241
|
</Grid>
|
|
216
242
|
</GridItem>
|
|
@@ -13,13 +13,14 @@ import {
|
|
|
13
13
|
useTab,
|
|
14
14
|
useToast,
|
|
15
15
|
} from '@chakra-ui/react'
|
|
16
|
+
import { useEffect } from 'react'
|
|
16
17
|
import { Light as SyntaxHighlighter } from 'react-syntax-highlighter'
|
|
18
|
+
import { useCopyToClipboard } from 'usehooks-ts'
|
|
19
|
+
import { formatTestCases } from '../helpers/formatters'
|
|
17
20
|
import { useOurTheme } from '../theme'
|
|
18
21
|
import { Event, Slot } from '../types'
|
|
19
|
-
import { formatTestCases } from '../helpers/formatters'
|
|
20
|
-
import { useCopyToClipboard } from 'usehooks-ts'
|
|
21
|
-
import { useEffect } from 'react'
|
|
22
22
|
import { FullscreenButton } from './FullscreenButton'
|
|
23
|
+
import { LatencyDisplay } from './LatencyDisplay'
|
|
23
24
|
import { SlotTable, Slots } from './Slots'
|
|
24
25
|
|
|
25
26
|
interface Props extends FlexProps {
|
|
@@ -27,6 +28,7 @@ interface Props extends FlexProps {
|
|
|
27
28
|
events: Event[]
|
|
28
29
|
story: string
|
|
29
30
|
slots: Slot[]
|
|
31
|
+
latency: any
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
export const DialougeInformation = ({
|
|
@@ -35,6 +37,7 @@ export const DialougeInformation = ({
|
|
|
35
37
|
events,
|
|
36
38
|
story,
|
|
37
39
|
slots,
|
|
40
|
+
latency,
|
|
38
41
|
...props
|
|
39
42
|
}: Props) => {
|
|
40
43
|
const toast = useToast()
|
|
@@ -105,6 +108,7 @@ export const DialougeInformation = ({
|
|
|
105
108
|
<CustomTab>Slots</CustomTab>
|
|
106
109
|
<CustomTab>End-2-end test</CustomTab>
|
|
107
110
|
<CustomTab>Tracker state</CustomTab>
|
|
111
|
+
<CustomTab>Latency</CustomTab>
|
|
108
112
|
</TabList>
|
|
109
113
|
<TabPanels height="100%" overflow="hidden">
|
|
110
114
|
<TabPanel sx={tabPanelSx}>
|
|
@@ -160,6 +164,11 @@ export const DialougeInformation = ({
|
|
|
160
164
|
</FullscreenButton>
|
|
161
165
|
</HStack>
|
|
162
166
|
</TabPanel>
|
|
167
|
+
<TabPanel sx={tabPanelSx}>
|
|
168
|
+
<Box sx={overflowBox}>
|
|
169
|
+
<LatencyDisplay latency={latency} />
|
|
170
|
+
</Box>
|
|
171
|
+
</TabPanel>
|
|
163
172
|
</TabPanels>
|
|
164
173
|
</Tabs>
|
|
165
174
|
</Flex>
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Box,
|
|
3
|
+
Flex,
|
|
4
|
+
FlexProps,
|
|
5
|
+
Text,
|
|
6
|
+
useColorModeValue,
|
|
7
|
+
Tooltip,
|
|
8
|
+
Table,
|
|
9
|
+
Tbody,
|
|
10
|
+
Tr,
|
|
11
|
+
Td,
|
|
12
|
+
} from '@chakra-ui/react'
|
|
13
|
+
import { useOurTheme } from '../theme'
|
|
14
|
+
import { LatencyData } from '../types'
|
|
15
|
+
|
|
16
|
+
interface Props extends FlexProps {
|
|
17
|
+
latency: LatencyData
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Simple latency display for text-only conversations.
|
|
22
|
+
* Shows a single response time value.
|
|
23
|
+
*/
|
|
24
|
+
const MinimalDisplay = ({ latency, sx, ...props }: Props) => {
|
|
25
|
+
const containerSx = {
|
|
26
|
+
...sx,
|
|
27
|
+
display: 'flex',
|
|
28
|
+
alignItems: 'center',
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const getLatencyColor = (latency: number) => {
|
|
32
|
+
if (latency < 1500) return 'green.500'
|
|
33
|
+
if (latency < 2500) return 'orange.500'
|
|
34
|
+
return 'red.500'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const value = Math.round(latency.rasa_processing_latency_ms || 0);
|
|
38
|
+
const color = getLatencyColor(value);
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<Flex sx={containerSx} {...props}>
|
|
42
|
+
<Text fontSize="md" color={useColorModeValue('gray.700', 'gray.300')}>
|
|
43
|
+
Response latency:
|
|
44
|
+
<Text as="span" ml={2} fontWeight="bold" color={color}>
|
|
45
|
+
{value}ms
|
|
46
|
+
</Text>
|
|
47
|
+
</Text>
|
|
48
|
+
</Flex>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Detailed latency waterfall chart for voice conversations.
|
|
54
|
+
* Displays processing times for ASR, Rasa, and TTS components.
|
|
55
|
+
*/
|
|
56
|
+
const WaterfallDisplay = ({ latency, sx, ...props }: Props) => {
|
|
57
|
+
const { rasaSpace } = useOurTheme()
|
|
58
|
+
|
|
59
|
+
const containerSx = {
|
|
60
|
+
...sx,
|
|
61
|
+
flexDirection: 'column',
|
|
62
|
+
gap: rasaSpace[1],
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const headerSx = {
|
|
66
|
+
fontSize: 'sm',
|
|
67
|
+
fontWeight: 'bold',
|
|
68
|
+
color: useColorModeValue('gray.700', 'gray.300'),
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const waterfallBarSx = {
|
|
72
|
+
height: '24px',
|
|
73
|
+
borderRadius: '4px',
|
|
74
|
+
overflow: 'hidden',
|
|
75
|
+
border: '1px solid',
|
|
76
|
+
borderColor: useColorModeValue('gray.200', 'gray.600'),
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const legendTableSx = {
|
|
80
|
+
size: 'sm',
|
|
81
|
+
mt: rasaSpace[0.5]
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const getLatencyColor = (type: string) => {
|
|
85
|
+
const colors: { [key: string]: string } = {
|
|
86
|
+
asr: 'blue.500',
|
|
87
|
+
rasa: 'purple.500',
|
|
88
|
+
tts_first: 'orange.500',
|
|
89
|
+
tts_complete: 'green.500',
|
|
90
|
+
}
|
|
91
|
+
return colors[type] || 'gray.500'
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const getLatencyDescription = (type: string) => {
|
|
95
|
+
const descriptions: { [key: string]: string } = {
|
|
96
|
+
asr: 'Time from the first Partial Transcript event to the Final Transcript event from Speech Recognition. It also includes the time taken by the user to speak.',
|
|
97
|
+
rasa: 'Time taken by Rasa to process the text from the Final Transcript event from Speech Recognition until a text response is generated.',
|
|
98
|
+
tts_first: 'Time between the request sent to Text-to-Speech processing and the first byte of audio received by Rasa.',
|
|
99
|
+
tts_complete: 'Time taken by Text-to-Speech to complete audio generation. It depends on the length of the text and could overlap with the Bot speaking time.'
|
|
100
|
+
}
|
|
101
|
+
return descriptions[type] || ''
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Metrics for proportional display (only actual processing latencies)
|
|
105
|
+
const chartMetrics = [
|
|
106
|
+
latency.asr_latency_ms && {
|
|
107
|
+
type: 'asr',
|
|
108
|
+
label: 'ASR',
|
|
109
|
+
value: latency.asr_latency_ms,
|
|
110
|
+
},
|
|
111
|
+
latency.rasa_processing_latency_ms && {
|
|
112
|
+
type: 'rasa',
|
|
113
|
+
label: 'Rasa',
|
|
114
|
+
value: latency.rasa_processing_latency_ms,
|
|
115
|
+
},
|
|
116
|
+
latency.tts_complete_latency_ms && {
|
|
117
|
+
type: 'tts_complete',
|
|
118
|
+
label: 'TTS',
|
|
119
|
+
value: latency.tts_complete_latency_ms,
|
|
120
|
+
},
|
|
121
|
+
].filter(Boolean)
|
|
122
|
+
|
|
123
|
+
// All metrics for legend display
|
|
124
|
+
const allMetrics = [
|
|
125
|
+
latency.asr_latency_ms && {
|
|
126
|
+
type: 'asr',
|
|
127
|
+
label: 'ASR',
|
|
128
|
+
value: latency.asr_latency_ms,
|
|
129
|
+
},
|
|
130
|
+
latency.rasa_processing_latency_ms && {
|
|
131
|
+
type: 'rasa',
|
|
132
|
+
label: 'Rasa',
|
|
133
|
+
value: latency.rasa_processing_latency_ms,
|
|
134
|
+
},
|
|
135
|
+
latency.tts_first_byte_latency_ms && {
|
|
136
|
+
type: 'tts_first',
|
|
137
|
+
label: 'TTS First Byte',
|
|
138
|
+
value: latency.tts_first_byte_latency_ms,
|
|
139
|
+
},
|
|
140
|
+
latency.tts_complete_latency_ms && {
|
|
141
|
+
type: 'tts_complete',
|
|
142
|
+
label: 'TTS Complete',
|
|
143
|
+
value: latency.tts_complete_latency_ms,
|
|
144
|
+
},
|
|
145
|
+
].filter(Boolean)
|
|
146
|
+
|
|
147
|
+
// Calculate total for proportional sizing (only processing latencies)
|
|
148
|
+
const totalLatency = chartMetrics.reduce(
|
|
149
|
+
(sum: number, metric: any) => sum + metric.value,
|
|
150
|
+
0,
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
// Calculate total latency for title (Rasa + TTS First Byte)
|
|
154
|
+
const totalDisplayLatency =
|
|
155
|
+
(latency.rasa_processing_latency_ms || 0) +
|
|
156
|
+
(latency.tts_first_byte_latency_ms || 0);
|
|
157
|
+
|
|
158
|
+
return (
|
|
159
|
+
<Flex sx={containerSx} {...props}>
|
|
160
|
+
<Text sx={headerSx}>
|
|
161
|
+
Response latency: ~{Math.round(totalDisplayLatency)}ms
|
|
162
|
+
</Text>
|
|
163
|
+
|
|
164
|
+
{/* Waterfall Bar */}
|
|
165
|
+
<Box>
|
|
166
|
+
<Flex sx={waterfallBarSx}>
|
|
167
|
+
{chartMetrics.map((metric: any) => {
|
|
168
|
+
const widthPercentage =
|
|
169
|
+
totalLatency > 0 ? (metric.value / totalLatency) * 100 : 0
|
|
170
|
+
return (
|
|
171
|
+
<Tooltip
|
|
172
|
+
key={metric.type}
|
|
173
|
+
label={
|
|
174
|
+
<Box>
|
|
175
|
+
<Text fontWeight="bold">
|
|
176
|
+
{metric.label}: {Math.round(metric.value)}ms
|
|
177
|
+
</Text>
|
|
178
|
+
<Text fontSize="xs" mt={1}>
|
|
179
|
+
{getLatencyDescription(metric.type)}
|
|
180
|
+
</Text>
|
|
181
|
+
</Box>
|
|
182
|
+
}
|
|
183
|
+
hasArrow
|
|
184
|
+
placement="top"
|
|
185
|
+
>
|
|
186
|
+
<Box
|
|
187
|
+
bg={getLatencyColor(metric.type)}
|
|
188
|
+
width={`${widthPercentage}%`}
|
|
189
|
+
height="100%"
|
|
190
|
+
minWidth="40px" // Increased minimum width for better visibility
|
|
191
|
+
cursor="pointer"
|
|
192
|
+
_hover={{ opacity: 0.8 }}
|
|
193
|
+
/>
|
|
194
|
+
</Tooltip>
|
|
195
|
+
)
|
|
196
|
+
})}
|
|
197
|
+
</Flex>
|
|
198
|
+
|
|
199
|
+
{/* Legend */}
|
|
200
|
+
<Table sx={legendTableSx}>
|
|
201
|
+
<Tbody>
|
|
202
|
+
{/* Split metrics into pairs for 2x2 table */}
|
|
203
|
+
{Array.from(
|
|
204
|
+
{ length: Math.ceil(allMetrics.length / 2) },
|
|
205
|
+
(_, rowIndex) => (
|
|
206
|
+
<Tr key={rowIndex}>
|
|
207
|
+
{allMetrics
|
|
208
|
+
.slice(rowIndex * 2, rowIndex * 2 + 2)
|
|
209
|
+
.map((metric: any) => (
|
|
210
|
+
<Td key={metric.type} p={rasaSpace[0.25]} border="none">
|
|
211
|
+
<Flex align="center" gap={rasaSpace[0.25]}>
|
|
212
|
+
<Box
|
|
213
|
+
width="8px"
|
|
214
|
+
height="8px"
|
|
215
|
+
bg={getLatencyColor(metric.type)}
|
|
216
|
+
borderRadius="2px"
|
|
217
|
+
flexShrink={0}
|
|
218
|
+
/>
|
|
219
|
+
<Text
|
|
220
|
+
fontSize="xs"
|
|
221
|
+
color={useColorModeValue('gray.600', 'gray.400')}
|
|
222
|
+
noOfLines={1}
|
|
223
|
+
>
|
|
224
|
+
{metric.label}: {Math.round(metric.value)}ms
|
|
225
|
+
</Text>
|
|
226
|
+
</Flex>
|
|
227
|
+
</Td>
|
|
228
|
+
))}
|
|
229
|
+
{/* Fill empty cell if odd number of metrics */}
|
|
230
|
+
{allMetrics.length % 2 !== 0 &&
|
|
231
|
+
rowIndex === Math.ceil(allMetrics.length / 2) - 1 && (
|
|
232
|
+
<Td p={rasaSpace[0.25]} border="none" />
|
|
233
|
+
)}
|
|
234
|
+
</Tr>
|
|
235
|
+
),
|
|
236
|
+
)}
|
|
237
|
+
</Tbody>
|
|
238
|
+
</Table>
|
|
239
|
+
</Box>
|
|
240
|
+
</Flex>
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Displays processing latency information for the conversation.
|
|
246
|
+
* Shows either a detailed waterfall chart for voice conversations or
|
|
247
|
+
* a simpler display for text-only conversations.
|
|
248
|
+
*/
|
|
249
|
+
export const LatencyDisplay = ({
|
|
250
|
+
sx,
|
|
251
|
+
latency,
|
|
252
|
+
...props
|
|
253
|
+
}: Props) => {
|
|
254
|
+
if (!latency) {
|
|
255
|
+
console.warn('Latency data is not available')
|
|
256
|
+
return null
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Show waterfall if voice metrics are available, otherwise show minimal display
|
|
260
|
+
const isVoiceMetricsAvailable =
|
|
261
|
+
latency.asr_latency_ms && latency.tts_complete_latency_ms
|
|
262
|
+
|
|
263
|
+
if (isVoiceMetricsAvailable) {
|
|
264
|
+
return <WaterfallDisplay latency={latency} sx={sx} {...props} />
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return <MinimalDisplay latency={latency} sx={sx} {...props} />
|
|
268
|
+
}
|
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
import { useOurTheme } from '../theme'
|
|
9
9
|
import { createAudioConnection } from '../helpers/audio/audiostream.ts'
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
interface LoadingSpinnerProps {
|
|
12
|
+
onLatencyUpdate?: (latency: any) => void
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const LoadingSpinner = ({ onLatencyUpdate }: LoadingSpinnerProps) => {
|
|
12
16
|
const { rasaSpace } = useOurTheme()
|
|
13
17
|
const isVoice = window.location.href.includes('browser_audio')
|
|
14
18
|
const text = isVoice
|
|
@@ -27,7 +31,7 @@ export const LoadingSpinner = () => {
|
|
|
27
31
|
{isVoice ? (
|
|
28
32
|
<Button
|
|
29
33
|
onClick={async () =>
|
|
30
|
-
await createAudioConnection(window.location.href)
|
|
34
|
+
await createAudioConnection(window.location.href, onLatencyUpdate)
|
|
31
35
|
}
|
|
32
36
|
>
|
|
33
37
|
Go
|
|
@@ -187,7 +187,7 @@ const setupAudioPlayback = async (socket: WebSocket): Promise<AudioQueue> => {
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
const addDataToAudioQueue =
|
|
190
|
-
(audioQueue: AudioQueue) => (message: MessageEvent<any>) => {
|
|
190
|
+
(audioQueue: AudioQueue, onLatencyUpdate?: (latency: any) => void) => (message: MessageEvent<any>) => {
|
|
191
191
|
try {
|
|
192
192
|
const data = JSON.parse(message.data.toString())
|
|
193
193
|
if (data['error']) {
|
|
@@ -199,6 +199,10 @@ const addDataToAudioQueue =
|
|
|
199
199
|
const audioData = intToFloatArray(int32Data)
|
|
200
200
|
audioQueue.write(audioData)
|
|
201
201
|
} else if (data['marker']) {
|
|
202
|
+
if (data['latency'] && onLatencyUpdate) {
|
|
203
|
+
onLatencyUpdate(data['latency'])
|
|
204
|
+
}
|
|
205
|
+
console.log('Voice Latency Metrics:', data['latency'])
|
|
202
206
|
audioQueue.addMarker(data['marker'])
|
|
203
207
|
}
|
|
204
208
|
} catch (error) {
|
|
@@ -231,8 +235,9 @@ function getWebSocketUrl(baseUrl: string) {
|
|
|
231
235
|
* Creates a WebSocket connection for browser audio and streams microphone input to the server
|
|
232
236
|
*
|
|
233
237
|
* @param baseUrl - The base URL (e.g., "https://example.com" or "http://localhost:5005")
|
|
238
|
+
* @param onLatencyUpdate - Optional callback function to receive latency updates
|
|
234
239
|
*/
|
|
235
|
-
export async function createAudioConnection(baseUrl: string) {
|
|
240
|
+
export async function createAudioConnection(baseUrl: string, onLatencyUpdate?: (latency: any) => void) {
|
|
236
241
|
const websocketURL = getWebSocketUrl(baseUrl)
|
|
237
242
|
const socket = new WebSocket(websocketURL)
|
|
238
243
|
|
|
@@ -241,5 +246,5 @@ export async function createAudioConnection(baseUrl: string) {
|
|
|
241
246
|
}
|
|
242
247
|
|
|
243
248
|
const audioQueue = await setupAudioPlayback(socket)
|
|
244
|
-
socket.onmessage = addDataToAudioQueue(audioQueue)
|
|
249
|
+
socket.onmessage = addDataToAudioQueue(audioQueue, onLatencyUpdate)
|
|
245
250
|
}
|
|
@@ -42,11 +42,19 @@ export interface Stack {
|
|
|
42
42
|
ended: boolean
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
export interface LatencyData {
|
|
46
|
+
rasa_processing_latency_ms?: number
|
|
47
|
+
asr_latency_ms?: number
|
|
48
|
+
tts_first_byte_latency_ms?: number
|
|
49
|
+
tts_complete_latency_ms?: number
|
|
50
|
+
}
|
|
51
|
+
|
|
45
52
|
export interface Tracker {
|
|
46
53
|
sender_id: string
|
|
47
54
|
slots: { [key: string]: unknown }
|
|
48
55
|
events: Event[]
|
|
49
56
|
stack: Stack[]
|
|
57
|
+
latency?: LatencyData
|
|
50
58
|
}
|
|
51
59
|
|
|
52
60
|
export interface Flow {
|