rasa-pro 3.14.0.dev20250818__py3-none-any.whl → 3.14.0.dev20250901__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 (361) 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 +270 -0
  35. rasa/builder/llm_service.py +246 -0
  36. rasa/builder/logging_utils.py +265 -0
  37. rasa/builder/main.py +258 -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 +124 -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 +27 -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 +63 -0
  75. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  76. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  77. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  78. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  79. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  80. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  81. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  82. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  83. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  84. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  85. rasa/cli/project_templates/finance/actions/database.py +277 -0
  86. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  87. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  88. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  89. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  90. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  91. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  92. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  93. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  94. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  95. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  96. rasa/cli/project_templates/finance/config.yml +21 -0
  97. rasa/cli/project_templates/finance/credentials.yml +32 -0
  98. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  99. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  100. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  101. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  102. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  103. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  104. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  105. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  106. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  107. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  108. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  109. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  110. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  111. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  112. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  113. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  114. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  115. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  116. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  117. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  118. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  119. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  120. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  121. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  122. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  123. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  124. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  125. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  126. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  127. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  128. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  129. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  130. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  131. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  132. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  133. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  134. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  135. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  136. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  137. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  138. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  139. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  140. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  141. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  142. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  143. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  144. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  145. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  146. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  147. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  148. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  149. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  154. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  155. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  156. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  157. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  158. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  159. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  160. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  161. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  162. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  163. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  164. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  165. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  166. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  167. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  168. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  169. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  214. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  215. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  216. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  217. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
  218. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  219. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  220. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  221. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  222. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  223. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  224. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  225. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  226. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  227. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  228. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  229. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  230. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  231. rasa/cli/project_templates/finance/endpoints.yml +63 -0
  232. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  233. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  234. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  235. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  236. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  237. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  238. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  239. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  240. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  241. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  242. rasa/cli/project_templates/telco/config.yml +27 -0
  243. rasa/cli/project_templates/telco/credentials.yml +33 -0
  244. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  245. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  246. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  247. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  248. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  249. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  250. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  251. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  252. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  253. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  254. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  255. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  256. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  257. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  258. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  259. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  260. rasa/cli/project_templates/telco/domain/billing/domain_undertand_bill.yml +102 -0
  261. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  262. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  263. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  264. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  265. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +29 -0
  266. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  267. rasa/cli/project_templates/telco/domain/network/domain_reboot_router.yml +21 -0
  268. rasa/cli/project_templates/telco/domain/network/domain_reset_router.yml +12 -0
  269. rasa/cli/project_templates/telco/domain/network/domain_run_speed_test.yml +25 -0
  270. rasa/cli/project_templates/telco/domain/network/domain_solve_internet_issue.yml +75 -0
  271. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  272. rasa/cli/project_templates/telco/endpoints.yml +63 -0
  273. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  274. rasa/cli/project_templates/tutorial/config.yml +2 -1
  275. rasa/cli/scaffold.py +46 -2
  276. rasa/core/actions/action.py +0 -1
  277. rasa/core/channels/channel.py +4 -3
  278. rasa/core/channels/constants.py +3 -0
  279. rasa/core/channels/development_inspector.py +1 -1
  280. rasa/core/channels/inspector/dist/assets/{arc-1ddec37b.js → arc-18042c22.js} +1 -1
  281. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-18af387c.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  282. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-250127a3.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  283. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  284. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-c3388b34.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  285. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9c893a82.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  287. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-c111213b.js → createText-2e5e7dd3-31422447.js} +1 -1
  288. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-812a729d.js → edges-e0da2a9e-518a90db.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-fd5051bc.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  290. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-3287ac02.js → flowDb-956e92f1-e048c2be.js} +1 -1
  291. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-692fb0b2.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  293. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-008376f1.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-df330a69.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-e03676fb.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  296. rasa/core/channels/inspector/dist/assets/{graph-46fad2ba.js → graph-14702d8a.js} +1 -1
  297. rasa/core/channels/inspector/dist/assets/{index-3862675e-a484ac55.js → index-3862675e-f18b534b.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{index-a003633f.js → index-4d4bdf3a.js} +231 -231
  299. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-3f9e6ec2.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-79f72383.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{layout-aad098e5.js → layout-5a3b2123.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{line-219ab7ae.js → line-2272a8c7.js} +1 -1
  303. rasa/core/channels/inspector/dist/assets/{linear-2cddbe62.js → linear-35bcf273.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-1d41ed99.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-cc496ee8.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-84d32884.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-c0deb984.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-b9d7fd62.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-7d517565.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-98ef9b27.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-cee70748.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-3f9d1c96.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-67471923.js → styles-9a916d00-980de489.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-bd093fb7.js → styles-c10674c1-3c03abde.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-675794e8.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-0ac67617.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  317. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-c018dc37.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  318. rasa/core/channels/inspector/dist/index.html +2 -2
  319. rasa/core/channels/inspector/index.html +1 -1
  320. rasa/core/channels/inspector/src/App.tsx +10 -11
  321. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  322. rasa/core/channels/socketio.py +212 -51
  323. rasa/core/channels/studio_chat.py +43 -23
  324. rasa/core/channels/voice_stream/voice_channel.py +5 -3
  325. rasa/core/policies/enterprise_search_policy.py +4 -7
  326. rasa/core/policies/flows/flow_executor.py +8 -1
  327. rasa/core/run.py +13 -3
  328. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  329. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  330. rasa/engine/storage/local_model_storage.py +45 -2
  331. rasa/model_manager/model_api.py +4 -5
  332. rasa/model_manager/runner_service.py +1 -1
  333. rasa/model_manager/socket_bridge.py +20 -14
  334. rasa/model_manager/trainer_service.py +12 -9
  335. rasa/model_manager/utils.py +1 -29
  336. rasa/shared/core/domain.py +62 -15
  337. rasa/shared/core/flows/flow_step.py +7 -1
  338. rasa/shared/core/flows/steps/call.py +8 -1
  339. rasa/shared/core/flows/yaml_flows_io.py +16 -8
  340. rasa/shared/core/slots.py +4 -0
  341. rasa/shared/importers/importer.py +6 -0
  342. rasa/shared/importers/utils.py +77 -1
  343. rasa/shared/providers/_utils.py +60 -44
  344. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  345. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  346. rasa/studio/upload.py +12 -46
  347. rasa/telemetry.py +97 -23
  348. rasa/utils/io.py +27 -9
  349. rasa/utils/json_utils.py +6 -1
  350. rasa/utils/log_utils.py +5 -1
  351. rasa/utils/openapi.py +144 -0
  352. rasa/validator.py +7 -3
  353. rasa/version.py +1 -1
  354. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/METADATA +9 -10
  355. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/RECORD +358 -83
  356. rasa/core/channels/inspector/dist/assets/channel-59f6d54b.js +0 -1
  357. rasa/core/channels/inspector/dist/assets/clone-26177ddb.js +0 -1
  358. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-29c03f5a.js +0 -1
  359. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/NOTICE +0 -0
  360. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/WHEEL +0 -0
  361. {rasa_pro-3.14.0.dev20250818.dist-info → rasa_pro-3.14.0.dev20250901.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,376 @@
1
+ import asyncio
2
+ import importlib
3
+ import json
4
+ from contextlib import asynccontextmanager
5
+ from typing import Any, Dict, List, Optional
6
+
7
+ import openai
8
+ import structlog
9
+ from jinja2 import Template
10
+ from typing_extensions import AsyncGenerator
11
+
12
+ from rasa.builder import config
13
+ from rasa.builder.copilot.constants import (
14
+ COPILOT_PROMPTS_DIR,
15
+ COPILOT_PROMPTS_FILE,
16
+ ROLE_COPILOT,
17
+ ROLE_COPILOT_INTERNAL,
18
+ ROLE_SYSTEM,
19
+ ROLE_USER,
20
+ )
21
+ from rasa.builder.copilot.exceptions import CopilotStreamError
22
+ from rasa.builder.copilot.models import (
23
+ CopilotContext,
24
+ ResponseCategory,
25
+ UsageStatistics,
26
+ )
27
+ from rasa.builder.document_retrieval.inkeep_document_retrieval import (
28
+ InKeepDocumentRetrieval,
29
+ )
30
+ from rasa.builder.document_retrieval.models import Document
31
+ from rasa.builder.exceptions import (
32
+ DocumentRetrievalError,
33
+ )
34
+ from rasa.builder.shared.tracker_context import TrackerContext
35
+ from rasa.shared.constants import PACKAGE_NAME
36
+
37
+ structlogger = structlog.get_logger()
38
+
39
+
40
+ class Copilot:
41
+ def __init__(self) -> None:
42
+ self._inkeep_document_retrieval = InKeepDocumentRetrieval()
43
+
44
+ # Load both prompt templates up-front
45
+ self._system_message_prompt_template = Template(
46
+ importlib.resources.read_text(
47
+ f"{PACKAGE_NAME}.{COPILOT_PROMPTS_DIR}",
48
+ COPILOT_PROMPTS_FILE,
49
+ )
50
+ )
51
+
52
+ # The final stream chunk includes usage statistics.
53
+ self.usage_statistics = UsageStatistics()
54
+
55
+ @asynccontextmanager
56
+ async def _get_client(self) -> AsyncGenerator[openai.AsyncOpenAI, None]:
57
+ """Create a fresh OpenAI client, yield it, and always close it."""
58
+ kwargs: Dict[str, Any] = {"timeout": config.OPENAI_TIMEOUT}
59
+ if config.HELLO_LLM_PROXY_BASE_URL:
60
+ structlogger.debug(
61
+ "copilot.using_llm_proxy", base_url=config.HELLO_LLM_PROXY_BASE_URL
62
+ )
63
+ if not config.RASA_PRO_LICENSE:
64
+ structlogger.error(
65
+ "copilot.proxy_missing_license",
66
+ event_info=(
67
+ "HELLO_LLM_PROXY_BASE_URL is set "
68
+ "but RASA_PRO_LICENSE is missing."
69
+ ),
70
+ )
71
+ raise CopilotStreamError(
72
+ "HELLO_LLM_PROXY_BASE_URL is set but RASA_PRO_LICENSE is missing. "
73
+ "Provide a valid license token for proxy authentication."
74
+ )
75
+
76
+ kwargs["base_url"] = config.HELLO_LLM_PROXY_BASE_URL
77
+ kwargs["api_key"] = config.RASA_PRO_LICENSE
78
+
79
+ client = openai.AsyncOpenAI(**kwargs)
80
+
81
+ try:
82
+ yield client
83
+ except Exception as e:
84
+ structlogger.error("copilot.llm_client_error", error=str(e))
85
+ raise
86
+ finally:
87
+ try:
88
+ await client.close()
89
+ except Exception as exc:
90
+ # Closing should not break request processing, but we log it
91
+ structlogger.warning(
92
+ "copilot.llm_client_close_error",
93
+ event_info="Failed to close OpenAI client cleanly.",
94
+ error=str(exc),
95
+ )
96
+
97
+ async def search_rasa_documentation(
98
+ self,
99
+ context: CopilotContext,
100
+ ) -> List[Document]:
101
+ """Search Rasa documentation for relevant information.
102
+
103
+ Args:
104
+ context: The context of the copilot.
105
+
106
+ Returns:
107
+ A list of Document objects. Empty list is returned if the search fails.
108
+ """
109
+ try:
110
+ query = self._create_documentation_search_query(context)
111
+ return await self._inkeep_document_retrieval.retrieve_documents(query)
112
+ except DocumentRetrievalError as e:
113
+ structlogger.error(
114
+ "copilot.search_rasa_documentation.error",
115
+ event_info=(
116
+ f"Copilot: Searching Rasa documentation for query '{query}' "
117
+ f"failed with the following error: {e}. Returning empty list."
118
+ ),
119
+ query=query,
120
+ error=str(e),
121
+ )
122
+ return []
123
+
124
+ async def generate_response(
125
+ self,
126
+ context: CopilotContext,
127
+ ) -> tuple[AsyncGenerator[str, None], list[Document], str]:
128
+ """Generate a response from the copilot.
129
+
130
+ This method performs document retrieval and response generation as a single
131
+ atomic operation. The returned documents are the supporting evidence used
132
+ to generate the response, ensuring consistency between the response content
133
+ and its sources.
134
+
135
+ Args:
136
+ context: The context of the copilot.
137
+
138
+ Returns:
139
+ A tuple containing the async response stream, relevant documents used
140
+ as supporting evidence for the generated response, and the prompt used.
141
+
142
+ Raises:
143
+ CopilotStreamError: If the stream fails.
144
+ Exception: If an unexpected error occurs.
145
+ """
146
+ relevant_documents = await self.search_rasa_documentation(context)
147
+ system_message = await self._create_system_message(context, relevant_documents)
148
+ chat_history = self._create_chat_history_messages(context)
149
+ messages = [system_message, *chat_history]
150
+
151
+ return (
152
+ self._stream_response(messages),
153
+ relevant_documents,
154
+ system_message.get("content", ""),
155
+ )
156
+
157
+ async def _stream_response(
158
+ self, messages: List[Dict[str, Any]]
159
+ ) -> AsyncGenerator[str, None]:
160
+ """Stream markdown chunks one by one."""
161
+ self.usage_statistics.reset()
162
+
163
+ try:
164
+ async with self._get_client() as client:
165
+ stream = await client.chat.completions.create(
166
+ model=config.OPENAI_MODEL,
167
+ messages=messages, # type: ignore
168
+ temperature=config.OPENAI_TEMPERATURE,
169
+ stream=True,
170
+ stream_options={"include_usage": True},
171
+ )
172
+ async for chunk in stream:
173
+ # The final chunk, which contains the usage statistics,
174
+ # arrives with an empty `choices` list.
175
+ if not chunk.choices:
176
+ self.usage_statistics.update_from_stream_chunk(chunk)
177
+ # Nothing to yield – continue to the next chunk.
178
+ continue
179
+
180
+ delta = chunk.choices[0].delta
181
+ if delta and delta.content:
182
+ yield delta.content
183
+ except openai.OpenAIError as e:
184
+ structlogger.exception("copilot.stream_response.api_error", error=str(e))
185
+ raise CopilotStreamError(
186
+ "Failed to stream response from OpenAI API."
187
+ ) from e
188
+ except asyncio.TimeoutError as e:
189
+ structlogger.exception(
190
+ "copilot.stream_response.timeout_error", error=str(e)
191
+ )
192
+ raise CopilotStreamError("Request to OpenAI API timed out.") from e
193
+ except Exception as e:
194
+ structlogger.exception(
195
+ "copilot.stream_response.unexpected_error", error=str(e)
196
+ )
197
+ raise
198
+
199
+ async def _create_system_message(
200
+ self,
201
+ context: CopilotContext,
202
+ relevant_documents: List[Document],
203
+ ) -> Dict[str, Any]:
204
+ """Render the correct Jinja template based on desired output_type."""
205
+ # Format relevant documentation
206
+ documents = [doc.model_dump() for doc in relevant_documents]
207
+
208
+ # Format conversation history
209
+ conversation = self._format_conversation_history(context.tracker_context)
210
+
211
+ # Format current state
212
+ current_state = self._format_current_state(context.tracker_context)
213
+
214
+ # Render template
215
+ rendered_prompt = self._system_message_prompt_template.render(
216
+ current_conversation=conversation,
217
+ current_state=current_state,
218
+ assistant_logs=context.assistant_logs,
219
+ assistant_files=context.assistant_files,
220
+ documentation_results=documents,
221
+ )
222
+ return {"role": ROLE_SYSTEM, "content": rendered_prompt}
223
+
224
+ def _create_chat_history_messages(
225
+ self,
226
+ context: CopilotContext,
227
+ ) -> List[Dict[str, Any]]:
228
+ """Create the chat history messages for the copilot.
229
+
230
+ Filter out messages with response_category of GUARDRAILS_POLICY_VIOLATION.
231
+ This will filter out all the user messages that were flagged by guardrails, but
232
+ also the copilot messages that were produced by guardrails.
233
+ """
234
+ # Filter out messages with response_category of GUARDRAILS_POLICY_VIOLATION.
235
+ # This will filter out all the user messages flagged by guardrails, but also the
236
+ # copilot messages that were produced.
237
+ return [
238
+ message.to_openai_format()
239
+ for message in context.copilot_chat_history
240
+ if message.response_category != ResponseCategory.GUARDRAILS_POLICY_VIOLATION
241
+ ]
242
+
243
+ @staticmethod
244
+ def _create_documentation_search_query(context: CopilotContext) -> str:
245
+ """Format chat messages between user and copilot for documentation search."""
246
+ result = ""
247
+ role_to_prefix = {
248
+ ROLE_USER: "User",
249
+ ROLE_COPILOT: "Assistant",
250
+ ROLE_COPILOT_INTERNAL: "Copilot Internal Request",
251
+ }
252
+ for message in context.copilot_chat_history:
253
+ prefix = role_to_prefix[message.role]
254
+ text = message.get_text_content().strip()
255
+ if text:
256
+ result += f"{prefix}: {text}\n"
257
+ log_content = message.get_log_content().strip()
258
+ if log_content:
259
+ result += f"{prefix}: {log_content}\n"
260
+
261
+ return result
262
+
263
+ @staticmethod
264
+ def _format_documents(results: List[Document]) -> Optional[str]:
265
+ """Format documentation search results as JSON dump to be used in the prompt."""
266
+ if not results:
267
+ return None
268
+
269
+ formatted_results = {
270
+ "sources": [
271
+ {
272
+ # Start the reference from 1, not 0.
273
+ "idx": idx + 1,
274
+ "title": result.title,
275
+ "url": result.url,
276
+ "content": result.content,
277
+ }
278
+ for idx, result in enumerate(results)
279
+ ]
280
+ }
281
+ return json.dumps(formatted_results, ensure_ascii=False, indent=2)
282
+
283
+ @staticmethod
284
+ def _format_conversation_history(tracker_context: Optional[TrackerContext]) -> str:
285
+ """Format conversation history from TrackerContext using nested turn structure.
286
+
287
+ Args:
288
+ tracker_context: The TrackerContext containing conversation data.
289
+
290
+ Returns:
291
+ A JSON string with turns containing user_input, assistant_response,
292
+ and context.
293
+
294
+ Example:
295
+ ```json
296
+ {
297
+ "conversation_history": [
298
+ {
299
+ "turn_id": 1,
300
+ "USER": {
301
+ "text": "I want to transfer money",
302
+ "predicted_commands": ["start flow", "set slot", ...]
303
+ },
304
+ "BOT": [
305
+ {"text": "How much would you like to transfer?"}
306
+ ],
307
+ "other_tracker_events": [
308
+ {
309
+ "event": "action_executed",
310
+ "data": {"action_name": "action_ask_amount"}
311
+ },
312
+ {
313
+ "event": "slot_set",
314
+ "data": {
315
+ "slot_name": "amount_of_money",
316
+ "slot_value": 100,
317
+ },
318
+ }
319
+ ]
320
+ }
321
+ ]
322
+ }
323
+ ```
324
+ """
325
+ conversation_history: Dict[str, Any] = {
326
+ "conversation_history": [],
327
+ }
328
+
329
+ if not tracker_context or not tracker_context.conversation_turns:
330
+ return json.dumps(conversation_history, ensure_ascii=False, indent=2)
331
+
332
+ conversation_turns: List[Dict[str, Any]] = []
333
+ user_prefix = "USER"
334
+ assistant_prefix = "BOT"
335
+
336
+ for turn_idx, turn in enumerate(tracker_context.conversation_turns, 1):
337
+ turn_data: Dict[str, Any] = {"turn_id": turn_idx}
338
+
339
+ # Add user if present
340
+ if turn.user_message:
341
+ turn_data[user_prefix] = {
342
+ "text": turn.user_message.text,
343
+ "predicted_commands": turn.user_message.predicted_commands,
344
+ }
345
+
346
+ # Add assistant messages if present
347
+ if turn.assistant_messages:
348
+ turn_data[assistant_prefix] = [
349
+ {"text": assistant_message.text}
350
+ for assistant_message in turn.assistant_messages
351
+ ]
352
+
353
+ # Add other tracker events
354
+ if turn.context_events:
355
+ other_events = [event.model_dump() for event in turn.context_events]
356
+ turn_data["other_tracker_events"] = other_events
357
+
358
+ conversation_turns.append(turn_data)
359
+
360
+ conversation_history["conversation_history"] = conversation_turns
361
+ return json.dumps(conversation_history, ensure_ascii=False, indent=2)
362
+
363
+ @staticmethod
364
+ def _format_current_state(tracker_context: Optional[TrackerContext]) -> str:
365
+ """Format current state from TrackerContext for LLM consumption.
366
+
367
+ Args:
368
+ tracker_context: The TrackerContext containing current state data.
369
+
370
+ Returns:
371
+ A JSON string containing the current state information.
372
+ """
373
+ if not tracker_context or not tracker_context.current_state:
374
+ return json.dumps({}, ensure_ascii=False, indent=2)
375
+ current_state = tracker_context.current_state.model_dump()
376
+ return json.dumps(current_state, ensure_ascii=False, indent=2)