rasa-pro 3.13.7__py3-none-any.whl → 3.14.0a1__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.

Files changed (387) hide show
  1. rasa/builder/README.md +120 -0
  2. rasa/builder/__init__.py +0 -0
  3. rasa/builder/auth.py +176 -0
  4. rasa/builder/config.py +91 -0
  5. rasa/builder/copilot/__init__.py +0 -0
  6. rasa/builder/copilot/constants.py +28 -0
  7. rasa/builder/copilot/copilot.py +376 -0
  8. rasa/builder/copilot/copilot_response_handler.py +522 -0
  9. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  10. rasa/builder/copilot/exceptions.py +32 -0
  11. rasa/builder/copilot/models.py +464 -0
  12. rasa/builder/copilot/prompts/__init__.py +0 -0
  13. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +771 -0
  14. rasa/builder/copilot/signing.py +305 -0
  15. rasa/builder/copilot/telemetry.py +200 -0
  16. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  17. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  18. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  19. rasa/builder/document_retrieval/__init__.py +0 -0
  20. rasa/builder/document_retrieval/constants.py +15 -0
  21. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  22. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  23. rasa/builder/document_retrieval/models.py +62 -0
  24. rasa/builder/download.py +147 -0
  25. rasa/builder/exceptions.py +91 -0
  26. rasa/builder/guardrails/__init__.py +1 -0
  27. rasa/builder/guardrails/constants.py +9 -0
  28. rasa/builder/guardrails/exceptions.py +4 -0
  29. rasa/builder/guardrails/lakera.py +206 -0
  30. rasa/builder/guardrails/models.py +231 -0
  31. rasa/builder/guardrails/store.py +238 -0
  32. rasa/builder/guardrails/utils.py +328 -0
  33. rasa/builder/job_manager.py +87 -0
  34. rasa/builder/jobs.py +276 -0
  35. rasa/builder/llm_service.py +246 -0
  36. rasa/builder/logging_utils.py +265 -0
  37. rasa/builder/main.py +199 -0
  38. rasa/builder/models.py +216 -0
  39. rasa/builder/project_generator.py +462 -0
  40. rasa/builder/project_info.py +72 -0
  41. rasa/builder/scrape_rasa_docs.py +97 -0
  42. rasa/builder/service.py +1335 -0
  43. rasa/builder/shared/tracker_context.py +212 -0
  44. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  45. rasa/builder/training_service.py +183 -0
  46. rasa/builder/validation_service.py +97 -0
  47. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  48. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  49. rasa/cli/project_templates/basic/config.yml +30 -0
  50. rasa/cli/project_templates/basic/credentials.yml +33 -0
  51. rasa/cli/project_templates/basic/data/data.md +9 -0
  52. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  53. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  54. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  55. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  56. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  57. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  58. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  59. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  60. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  61. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  62. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  63. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  64. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  65. rasa/cli/project_templates/basic/domain/domain.md +9 -0
  66. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  67. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  68. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  69. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  70. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  71. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  72. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  73. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  74. rasa/cli/project_templates/basic/endpoints.yml +77 -0
  75. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  76. rasa/cli/project_templates/default/config.yml +5 -1
  77. rasa/cli/project_templates/default/endpoints.yml +15 -0
  78. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  79. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  80. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  81. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  82. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  83. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  84. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  85. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  86. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  87. rasa/cli/project_templates/finance/actions/database.py +277 -0
  88. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  89. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  90. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  91. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  92. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  93. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  94. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  95. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  96. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  97. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  98. rasa/cli/project_templates/finance/config.yml +23 -0
  99. rasa/cli/project_templates/finance/credentials.yml +32 -0
  100. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  101. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  102. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  103. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  104. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  105. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  106. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  107. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  108. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  109. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  110. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  111. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  112. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  113. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  114. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  115. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  116. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  117. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  118. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  119. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  120. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  121. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  122. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  123. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  124. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  125. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  126. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  127. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  128. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  129. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  130. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  131. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  132. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  133. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  134. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  135. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  136. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  137. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  138. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  139. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  140. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  141. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  142. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  143. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  144. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  145. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  146. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  147. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  148. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  149. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  154. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  155. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  156. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  157. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  158. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  159. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  160. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  161. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  162. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  163. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  164. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  165. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  166. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  167. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  168. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  169. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  216. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  217. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  218. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  219. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
  220. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  221. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  222. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  223. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  224. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  225. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  226. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  227. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  228. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  229. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  230. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  231. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  232. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  233. rasa/cli/project_templates/finance/endpoints.yml +76 -0
  234. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  235. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  236. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  238. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  240. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  242. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  243. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  244. rasa/cli/project_templates/telco/config.yml +29 -0
  245. rasa/cli/project_templates/telco/credentials.yml +33 -0
  246. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  247. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  248. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  249. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  250. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  251. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  252. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  253. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  254. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  255. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  256. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  257. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  258. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  259. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  260. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  261. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  262. rasa/cli/project_templates/telco/domain/billing/domain_undertand_bill.yml +102 -0
  263. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  264. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  265. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  266. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  267. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +29 -0
  268. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  269. rasa/cli/project_templates/telco/domain/network/domain_reboot_router.yml +21 -0
  270. rasa/cli/project_templates/telco/domain/network/domain_reset_router.yml +12 -0
  271. rasa/cli/project_templates/telco/domain/network/domain_run_speed_test.yml +25 -0
  272. rasa/cli/project_templates/telco/domain/network/domain_solve_internet_issue.yml +75 -0
  273. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  274. rasa/cli/project_templates/telco/endpoints.yml +77 -0
  275. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  276. rasa/cli/project_templates/tutorial/config.yml +2 -1
  277. rasa/cli/scaffold.py +46 -2
  278. rasa/cli/train.py +2 -2
  279. rasa/core/actions/action.py +27 -38
  280. rasa/core/actions/action_run_slot_rejections.py +1 -1
  281. rasa/core/channels/channel.py +4 -3
  282. rasa/core/channels/constants.py +3 -0
  283. rasa/core/channels/development_inspector.py +48 -15
  284. rasa/core/channels/inspector/dist/assets/{arc-0b11fe30.js → arc-18042c22.js} +1 -1
  285. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-9eef30a7.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-03e94f28.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  287. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  288. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-95c09eba.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-38e8446c.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  290. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  291. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-57dc3038.js → createText-2e5e7dd3-31422447.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-4bac0545.js → edges-e0da2a9e-518a90db.js} +1 -1
  293. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-81795c90.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-89489ae6.js → flowDb-956e92f1-e048c2be.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-cd152627.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  296. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  297. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-3da369bc.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-85ec16f8.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  299. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-495bc140.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{graph-1ec4d266.js → graph-14702d8a.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{index-3862675e-0a0e97c9.js → index-3862675e-f18b534b.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{index-c804b295.js → index-4d4bdf3a.js} +254 -254
  303. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-4d54bcde.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-dc097114.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{layout-1a08981e.js → layout-5a3b2123.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{line-95f7f1d3.js → line-2272a8c7.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{linear-97e69543.js → linear-35bcf273.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-8c71ff03.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-f14c71c7.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-f1d3c9ff.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-bfa2412f.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-53f2c97b.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-319d7c0e.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-76a09418.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-a67f15d4.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0654e7c3.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-1394bb9d.js → styles-9a916d00-980de489.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-e4c5bdae.js → styles-c10674c1-3c03abde.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-50957104.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  320. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-b0885a6a.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-79e6541a.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  322. rasa/core/channels/inspector/dist/index.html +1 -1
  323. rasa/core/channels/inspector/src/App.tsx +60 -15
  324. rasa/core/channels/inspector/src/components/Chat.tsx +3 -2
  325. rasa/core/channels/inspector/src/components/DiagramFlow.tsx +1 -1
  326. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  327. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +268 -0
  328. rasa/core/channels/inspector/src/components/LoadingSpinner.tsx +6 -2
  329. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +8 -3
  330. rasa/core/channels/inspector/src/types.ts +8 -0
  331. rasa/core/channels/socketio.py +212 -51
  332. rasa/core/channels/studio_chat.py +161 -50
  333. rasa/core/channels/voice_ready/twilio_voice.py +1 -1
  334. rasa/core/channels/voice_stream/audiocodes.py +9 -6
  335. rasa/core/channels/voice_stream/browser_audio.py +39 -4
  336. rasa/core/channels/voice_stream/call_state.py +13 -2
  337. rasa/core/channels/voice_stream/genesys.py +16 -13
  338. rasa/core/channels/voice_stream/jambonz.py +13 -11
  339. rasa/core/channels/voice_stream/twilio_media_streams.py +14 -13
  340. rasa/core/channels/voice_stream/util.py +11 -1
  341. rasa/core/channels/voice_stream/voice_channel.py +106 -32
  342. rasa/core/nlg/contextual_response_rephraser.py +11 -7
  343. rasa/core/nlg/generator.py +21 -5
  344. rasa/core/nlg/response.py +43 -6
  345. rasa/core/nlg/translate.py +8 -0
  346. rasa/core/policies/enterprise_search_policy.py +4 -7
  347. rasa/core/policies/flows/flow_executor.py +8 -1
  348. rasa/core/run.py +13 -3
  349. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  350. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  351. rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
  352. rasa/e2e_test/e2e_test_schema.yml +3 -3
  353. rasa/engine/storage/local_model_storage.py +45 -2
  354. rasa/model_manager/model_api.py +4 -5
  355. rasa/model_manager/runner_service.py +1 -1
  356. rasa/model_manager/socket_bridge.py +27 -15
  357. rasa/model_manager/trainer_service.py +12 -9
  358. rasa/model_manager/utils.py +1 -29
  359. rasa/shared/core/domain.py +62 -15
  360. rasa/shared/core/flows/flow_step.py +7 -1
  361. rasa/shared/core/flows/steps/call.py +8 -1
  362. rasa/shared/core/flows/yaml_flows_io.py +16 -8
  363. rasa/shared/core/slots.py +4 -0
  364. rasa/shared/importers/importer.py +6 -0
  365. rasa/shared/importers/utils.py +77 -1
  366. rasa/shared/providers/_utils.py +60 -44
  367. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  368. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  369. rasa/shared/utils/common.py +2 -1
  370. rasa/studio/upload.py +12 -46
  371. rasa/telemetry.py +97 -23
  372. rasa/utils/io.py +27 -9
  373. rasa/utils/json_utils.py +6 -1
  374. rasa/utils/licensing.py +21 -10
  375. rasa/utils/log_utils.py +5 -1
  376. rasa/utils/openapi.py +144 -0
  377. rasa/utils/plotting.py +1 -1
  378. rasa/validator.py +7 -3
  379. rasa/version.py +1 -1
  380. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/METADATA +22 -23
  381. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/RECORD +384 -108
  382. rasa/core/channels/inspector/dist/assets/channel-51d02e9e.js +0 -1
  383. rasa/core/channels/inspector/dist/assets/clone-cc738fa6.js +0 -1
  384. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-0c716443.js +0 -1
  385. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/NOTICE +0 -0
  386. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/WHEEL +0 -0
  387. {rasa_pro-3.13.7.dist-info → rasa_pro-3.14.0a1.dist-info}/entry_points.txt +0 -0
@@ -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 { useOurTheme } from './theme'
11
- import { Welcome } from './components/Welcome'
12
- import { DialogueStack } from './components/DialogueStack'
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 queryString from 'query-string'
25
- import { Chat } from './components/Chat'
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(
@@ -175,6 +183,21 @@ export function App() {
175
183
  : 'max-content minmax(10rem, 17.5rem) minmax(10rem, auto)',
176
184
  gridRowGap: rasaSpace[1],
177
185
  }
186
+ const rightColumnSx = {
187
+ height: '100%',
188
+ overflow: 'hidden',
189
+ gridTemplateColumns: '1fr',
190
+ gridTemplateRows: 'max-content 1fr',
191
+ gridRowGap: rasaSpace[1],
192
+ }
193
+
194
+ const chatContainerSx = {
195
+ ...borderRadiusSx,
196
+ padding: rasaSpace[1],
197
+ bg: useColorModeValue('neutral.50', 'neutral.50'),
198
+ overflow: 'auto', // Allow scrolling for chat
199
+ height: '100%',
200
+ }
178
201
 
179
202
  const onFrameSelected = (stack: Stack) => {
180
203
  setFrame({
@@ -188,8 +211,25 @@ export function App() {
188
211
  setShowRecruitmentPanel(false)
189
212
  }
190
213
 
214
+ const onLatencyUpdate = useCallback((newLatency: any) => {
215
+ setLatency((prevLatency: any) => ({
216
+ ...prevLatency,
217
+ ...newLatency,
218
+ }))
219
+ }, [])
220
+
221
+ // Make latency update function available globally for audio stream
222
+ useEffect(() => {
223
+ if (window.location.href.includes('browser_audio')) {
224
+ ;(window as any).updateLatency = onLatencyUpdate
225
+ }
226
+ return () => {
227
+ delete (window as any).updateLatency
228
+ }
229
+ }, [onLatencyUpdate])
230
+
191
231
  if (!rasaChatSessionId && !window.location.href.includes('socketio'))
192
- return <LoadingSpinner />
232
+ return <LoadingSpinner onLatencyUpdate={onLatencyUpdate} />
193
233
 
194
234
  return (
195
235
  <Grid sx={gridSx}>
@@ -211,6 +251,7 @@ export function App() {
211
251
  slots={slots}
212
252
  events={events}
213
253
  story={story}
254
+ latency={latency}
214
255
  />
215
256
  </Grid>
216
257
  </GridItem>
@@ -222,11 +263,15 @@ export function App() {
222
263
  slots={slots}
223
264
  />
224
265
  </GridItem>
225
- {shouldShowTranscript && (
226
- <GridItem>
227
- <Chat events={events || []} />
228
- </GridItem>
229
- )}
266
+ <GridItem overflow="hidden">
267
+ <Grid sx={rightColumnSx}>
268
+ {shouldShowTranscript && (
269
+ <GridItem sx={chatContainerSx}>
270
+ <Chat events={events || []} />
271
+ </GridItem>
272
+ )}
273
+ </Grid>
274
+ </GridItem>
230
275
  </Grid>
231
276
  )
232
277
  }
@@ -5,6 +5,7 @@ import { Command, Event } from '../types'
5
5
 
6
6
  interface Props extends FlexProps {
7
7
  events: Event[]
8
+ hasLatencyDisplay?: boolean
8
9
  }
9
10
 
10
11
  export const Chat = ({ sx, events, ...props }: Props) => {
@@ -12,9 +13,9 @@ export const Chat = ({ sx, events, ...props }: Props) => {
12
13
  ...sx,
13
14
  p: 0,
14
15
  flexDirection: 'column',
16
+ height: '100%',
15
17
  }
16
18
 
17
- const maxHeight = document.documentElement.scrollHeight - 64
18
19
  // 21 and 25 are the rem number we're using for the columns. We add 0.75rem for the padding
19
20
  // A potential improvement would be to add a onresize event for both width and height
20
21
  let remReference = 21.75
@@ -110,7 +111,7 @@ export const Chat = ({ sx, events, ...props }: Props) => {
110
111
  borderRadius: '10px',
111
112
  border: 'none',
112
113
  width: columnWidth,
113
- height: maxHeight,
114
+ height: '100%',
114
115
  }}
115
116
  history={messages}
116
117
  demo={true}
@@ -22,7 +22,7 @@ export const DiagramFlow = ({ stackFrame, stepTrail, flows, slots }: Props) => {
22
22
 
23
23
  const config = {
24
24
  startOnLoad: true,
25
- logLevel: 'info',
25
+ logLevel: 'warning',
26
26
  flowchart: {
27
27
  useMaxWidth: false,
28
28
  },
@@ -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
- export const LoadingSpinner = () => {
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 {