rasa-pro 3.14.0.dev6__py3-none-any.whl → 3.14.0.dev8__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 (491) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/exceptions.py +31 -1
  4. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  5. rasa/agents/protocol/mcp/mcp_base_agent.py +37 -19
  6. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  7. rasa/agents/protocol/mcp/mcp_task_agent.py +33 -10
  8. rasa/agents/schemas/agent_output.py +1 -1
  9. rasa/agents/utils.py +95 -1
  10. rasa/agents/validation.py +484 -0
  11. rasa/api.py +9 -6
  12. rasa/builder/README.md +120 -0
  13. rasa/builder/__init__.py +0 -0
  14. rasa/builder/auth.py +176 -0
  15. rasa/builder/config.py +92 -0
  16. rasa/builder/copilot/__init__.py +0 -0
  17. rasa/builder/copilot/constants.py +31 -0
  18. rasa/builder/copilot/copilot.py +450 -0
  19. rasa/builder/copilot/copilot_response_handler.py +522 -0
  20. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  21. rasa/builder/copilot/exceptions.py +32 -0
  22. rasa/builder/copilot/models.py +500 -0
  23. rasa/builder/copilot/prompts/__init__.py +0 -0
  24. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  25. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  26. rasa/builder/copilot/signing.py +305 -0
  27. rasa/builder/copilot/telemetry.py +210 -0
  28. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  29. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  30. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  31. rasa/builder/document_retrieval/__init__.py +0 -0
  32. rasa/builder/document_retrieval/constants.py +15 -0
  33. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  34. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  35. rasa/builder/document_retrieval/models.py +62 -0
  36. rasa/builder/download.py +140 -0
  37. rasa/builder/exceptions.py +91 -0
  38. rasa/builder/guardrails/__init__.py +1 -0
  39. rasa/builder/guardrails/constants.py +9 -0
  40. rasa/builder/guardrails/exceptions.py +4 -0
  41. rasa/builder/guardrails/lakera.py +206 -0
  42. rasa/builder/guardrails/models.py +231 -0
  43. rasa/builder/guardrails/store.py +238 -0
  44. rasa/builder/guardrails/utils.py +328 -0
  45. rasa/builder/job_manager.py +87 -0
  46. rasa/builder/jobs.py +282 -0
  47. rasa/builder/llm_service.py +246 -0
  48. rasa/builder/logging_utils.py +265 -0
  49. rasa/builder/main.py +243 -0
  50. rasa/builder/models.py +216 -0
  51. rasa/builder/project_generator.py +458 -0
  52. rasa/builder/project_info.py +72 -0
  53. rasa/builder/scrape_rasa_docs.py +97 -0
  54. rasa/builder/service.py +1345 -0
  55. rasa/builder/shared/tracker_context.py +212 -0
  56. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  57. rasa/builder/template_cache.py +244 -0
  58. rasa/builder/training_service.py +194 -0
  59. rasa/builder/validation_service.py +97 -0
  60. rasa/cli/arguments/train.py +2 -0
  61. rasa/cli/interactive.py +2 -0
  62. rasa/cli/project_templates/basic/README.md +23 -0
  63. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  64. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  65. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  66. rasa/cli/project_templates/basic/config.yml +29 -0
  67. rasa/cli/project_templates/basic/credentials.yml +33 -0
  68. rasa/cli/project_templates/basic/data/data.md +9 -0
  69. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  70. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  71. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  72. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  73. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  74. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  75. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  76. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  77. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  78. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  79. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  80. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  81. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  82. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  83. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  84. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  85. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  86. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  87. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  88. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  89. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  90. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  91. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  92. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  93. rasa/cli/project_templates/default/config.yml +4 -0
  94. rasa/cli/project_templates/default/endpoints.yml +4 -0
  95. rasa/cli/project_templates/finance/README.md +25 -0
  96. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  97. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  99. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  100. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  101. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  102. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  104. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  105. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  106. rasa/cli/project_templates/finance/actions/database.py +277 -0
  107. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  112. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  113. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  114. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  115. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  116. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  117. rasa/cli/project_templates/finance/config.yml +23 -0
  118. rasa/cli/project_templates/finance/credentials.yml +32 -0
  119. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  120. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  121. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  122. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  123. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  124. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  125. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  126. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  127. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  128. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  129. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  130. rasa/cli/project_templates/finance/data/data.md +11 -0
  131. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  132. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  133. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  134. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  135. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  136. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  137. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  138. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  139. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  140. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  141. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  142. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  143. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  144. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  145. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  146. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  147. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  148. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  149. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  150. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  151. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  152. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  153. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  154. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  171. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  172. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  173. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  174. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  231. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  232. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  233. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  234. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  235. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  236. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  237. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  238. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  239. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  240. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  241. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  243. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  244. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  245. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  246. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  247. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  248. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  249. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  250. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  251. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  252. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  253. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  254. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  255. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  256. rasa/cli/project_templates/telco/README.md +25 -0
  257. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  258. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  259. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  260. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  261. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  262. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  263. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  264. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  265. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  266. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  267. rasa/cli/project_templates/telco/config.yml +29 -0
  268. rasa/cli/project_templates/telco/credentials.yml +33 -0
  269. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  270. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  271. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  272. rasa/cli/project_templates/telco/data/data.md +11 -0
  273. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  274. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  275. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  276. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  277. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  278. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  279. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  280. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  281. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  282. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  283. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  284. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  285. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  286. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  287. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  288. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  289. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  290. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  291. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  292. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  293. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  294. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  295. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  296. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  297. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  298. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  299. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  300. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  304. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  305. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  306. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  307. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  308. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  309. rasa/cli/project_templates/tutorial/config.yml +2 -1
  310. rasa/cli/scaffold.py +46 -2
  311. rasa/cli/train.py +2 -0
  312. rasa/cli/utils.py +85 -1
  313. rasa/core/actions/action.py +2 -7
  314. rasa/core/available_agents.py +49 -26
  315. rasa/core/available_endpoints.py +17 -2
  316. rasa/core/channels/channel.py +4 -3
  317. rasa/core/channels/constants.py +3 -0
  318. rasa/core/channels/development_inspector.py +2 -22
  319. rasa/core/channels/inspector/README.md +26 -14
  320. rasa/core/channels/inspector/dist/assets/{arc-63212852.js → arc-edef10dd.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-eecf6b13.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-8f798a9a.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  324. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-df71a04c.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-9b275968.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  326. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  327. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-1c669cad.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b1553799.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-112388d6.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-fdebec47.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-6280ede1.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  332. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  333. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-e1dc03e5.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-83f68c51.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-22f8666f.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{graph-ca9e6217.js → graph-790ef78b.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{index-3862675e-c5ceb692.js → index-3862675e-ecdce073.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  339. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-faa9999b.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c4dda8d9.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{layout-d4307784.js → layout-837fd3aa.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{line-0567aaa7.js → line-7e05afcb.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{linear-c11b95cf.js → linear-162eb295.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-0c7d3ca9.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-34b433fa.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-4cab816e.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-8c22fa9e.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-70ce9e8e.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-fbcd7fc9.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-45f05ea6.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  351. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-beab1ea6.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  352. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-2f29dbd5.js → styles-6aaf32cf-b5b53234.js} +1 -1
  353. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-951eac83.js → styles-9a916d00-13d138e5.js} +1 -1
  354. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-897fbfdd.js → styles-c10674c1-94cbde3f.js} +1 -1
  355. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d667fac1.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  356. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e3205144.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  357. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-4abeb0e2.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  358. rasa/core/channels/inspector/dist/index.html +2 -2
  359. rasa/core/channels/inspector/index.html +1 -1
  360. rasa/core/channels/inspector/src/App.tsx +42 -44
  361. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  362. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  363. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +8 -8
  364. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  365. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  366. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  367. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  368. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  369. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  370. rasa/core/channels/inspector/src/types.ts +49 -7
  371. rasa/core/channels/socketio.py +212 -51
  372. rasa/core/channels/studio_chat.py +59 -57
  373. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  374. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  375. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  376. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  377. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  378. rasa/core/channels/voice_stream/genesys.py +2 -1
  379. rasa/core/channels/voice_stream/jambonz.py +9 -1
  380. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  381. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  382. rasa/core/constants.py +6 -0
  383. rasa/core/iam_credentials_providers/__init__.py +0 -0
  384. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  385. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  386. rasa/core/policies/enterprise_search_policy.py +4 -7
  387. rasa/core/policies/flows/flow_executor.py +66 -36
  388. rasa/core/policies/ted_policy.py +7 -5
  389. rasa/core/processor.py +32 -0
  390. rasa/core/redis_connection_factory.py +411 -0
  391. rasa/core/run.py +13 -3
  392. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  393. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  394. rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -81
  395. rasa/dialogue_understanding/commands/start_flow_command.py +18 -113
  396. rasa/dialogue_understanding/commands/utils.py +118 -0
  397. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  398. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  399. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  400. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  401. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  402. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  403. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  404. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  405. rasa/dialogue_understanding/patterns/continue_interrupted.py +185 -114
  406. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +18 -24
  407. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  408. rasa/dialogue_understanding/stack/utils.py +43 -4
  409. rasa/dialogue_understanding/utils.py +24 -4
  410. rasa/engine/graph.py +5 -1
  411. rasa/engine/recipes/default_components.py +78 -10
  412. rasa/engine/recipes/default_recipe.py +41 -1
  413. rasa/engine/storage/local_model_storage.py +83 -3
  414. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  415. rasa/model_manager/model_api.py +4 -5
  416. rasa/model_manager/runner_service.py +1 -1
  417. rasa/model_manager/socket_bridge.py +20 -15
  418. rasa/model_manager/trainer_service.py +12 -9
  419. rasa/model_manager/utils.py +1 -29
  420. rasa/model_manager/warm_rasa_process.py +1 -1
  421. rasa/model_training.py +22 -6
  422. rasa/nlu/classifiers/diet_classifier.py +22 -6
  423. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  424. rasa/nlu/extractors/extractor.py +1 -2
  425. rasa/shared/agents/auth/__init__.py +0 -0
  426. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  427. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  428. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  429. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  430. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  431. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  432. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  433. rasa/shared/agents/auth/constants.py +11 -0
  434. rasa/shared/agents/auth/types.py +11 -0
  435. rasa/shared/constants.py +3 -0
  436. rasa/shared/core/constants.py +6 -6
  437. rasa/shared/core/domain.py +58 -11
  438. rasa/shared/core/events.py +2 -0
  439. rasa/shared/core/flows/constants.py +5 -0
  440. rasa/shared/core/flows/flow_step.py +7 -1
  441. rasa/shared/core/flows/flows_list.py +6 -0
  442. rasa/shared/core/flows/steps/call.py +15 -12
  443. rasa/shared/core/flows/validation.py +238 -44
  444. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  445. rasa/shared/core/slots.py +4 -0
  446. rasa/shared/exceptions.py +12 -0
  447. rasa/shared/importers/importer.py +6 -0
  448. rasa/shared/importers/utils.py +77 -1
  449. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  450. rasa/shared/providers/_utils.py +60 -44
  451. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  452. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  453. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  454. rasa/shared/providers/llm/llm_response.py +4 -4
  455. rasa/shared/utils/common.py +24 -0
  456. rasa/shared/utils/health_check/health_check.py +7 -3
  457. rasa/shared/utils/llm.py +2 -1
  458. rasa/shared/utils/mcp/server_connection.py +108 -27
  459. rasa/shared/utils/mcp/utils.py +20 -0
  460. rasa/studio/upload.py +16 -47
  461. rasa/telemetry.py +97 -23
  462. rasa/tracing/config.py +38 -12
  463. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  464. rasa/tracing/instrumentation/instrumentation.py +85 -8
  465. rasa/utils/common.py +1 -1
  466. rasa/utils/io.py +27 -9
  467. rasa/utils/json_utils.py +6 -1
  468. rasa/utils/log_utils.py +5 -1
  469. rasa/utils/openapi.py +144 -0
  470. rasa/utils/tensorflow/__init__.py +29 -0
  471. rasa/utils/tensorflow/callback.py +1 -1
  472. rasa/utils/tensorflow/crf.py +1 -1
  473. rasa/utils/tensorflow/data_generator.py +21 -8
  474. rasa/utils/tensorflow/layers.py +11 -4
  475. rasa/utils/tensorflow/metrics.py +7 -3
  476. rasa/utils/tensorflow/models.py +41 -6
  477. rasa/utils/tensorflow/rasa_layers.py +6 -4
  478. rasa/utils/tensorflow/transformer.py +2 -3
  479. rasa/utils/train_utils.py +68 -38
  480. rasa/validator.py +18 -16
  481. rasa/version.py +1 -1
  482. rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
  483. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +486 -173
  484. rasa/core/channels/inspector/dist/assets/channel-0cd70adf.js +0 -1
  485. rasa/core/channels/inspector/dist/assets/clone-a0f9c4ed.js +0 -1
  486. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-de9cc4aa.js +0 -1
  487. rasa/core/channels/inspector/dist/assets/index-3e293924.js +0 -1353
  488. rasa_pro-3.14.0.dev6.dist-info/METADATA +0 -190
  489. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
  490. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
  491. {rasa_pro-3.14.0.dev6.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,61 @@
1
+ # Context Available to You
2
+ Treat everything **below** as **current-turn context** to apply under those rules. You
3
+ have access to:
4
+
5
+ {% if current_conversation %}
6
+ ## Current Conversation and Conversation State between the user and the assistant
7
+
8
+ **Conversation History:**
9
+ ```json
10
+ {{ current_conversation }}
11
+ ```
12
+
13
+ **Assistant's State:**
14
+ ```json
15
+ {{ current_state }}
16
+ ```
17
+ {% endif %}
18
+
19
+ {% if assistant_logs %}
20
+ ***
21
+
22
+ ## Assistant Logs
23
+ ```
24
+ {{ assistant_logs }}
25
+ ```
26
+ {% endif %}
27
+
28
+
29
+ ## Assistant Files (Configuration, Domain, Flows)
30
+ {% if assistant_files %}
31
+ {% for file_name, file_content in assistant_files.items() %}
32
+ **{{ file_name }}:**
33
+ ```
34
+ {{ file_content }}
35
+ ```
36
+ {% endfor %}
37
+ {% else %}
38
+ Assistant files are not available.
39
+ {% endif %}
40
+
41
+ ***
42
+
43
+ ## Relevant Documentation
44
+ {% if documentation_results %}
45
+ The following documentation sources are available for reference. Use the source index
46
+ numbers (1, 2, 3, etc.) for inline citations:
47
+ ```
48
+ {{documentation_results}}
49
+ ```
50
+ {% else %}
51
+ No relevant documentation source found.
52
+ {% endif %}
53
+
54
+ # Remember!
55
+ - Focus on accessibility and efficiency. Give guidance users can act on right away.
56
+ - Keep answers concise, cut any fluff.
57
+ - Never impersonate or role-play as the assistant being built. You are the **Rasa assistant development expert**.
58
+ - Cite documentation inline frequently - every factual statement about Rasa features, concepts, or capabilities MUST be cited.
59
+ - Only cite from current turn documentation - never from previous conversation turns
60
+ - NEVER add a separate list of URLs or sources - only use inline citations.
61
+ - NEVER start your response with a ``` or """ or any other quoting characters.
@@ -0,0 +1,305 @@
1
+ import base64
2
+ import hashlib
3
+ import hmac
4
+ import json
5
+ from typing import Any, List, Optional, Tuple
6
+
7
+ import structlog
8
+
9
+ from rasa.builder import config
10
+ from rasa.builder.copilot.constants import ROLE_COPILOT, ROLE_USER, SIGNATURE_VERSION_V1
11
+ from rasa.builder.copilot.copilot_response_handler import CopilotResponseHandler
12
+ from rasa.builder.copilot.exceptions import (
13
+ InvalidCopilotChatHistorySignature,
14
+ MissingCopilotChatHistorySignature,
15
+ )
16
+ from rasa.builder.copilot.models import (
17
+ CopilotChatMessage,
18
+ CopilotRequest,
19
+ GeneratedContent,
20
+ ResponseCategory,
21
+ ResponseCompleteness,
22
+ ServerSentEvent,
23
+ SigningContext,
24
+ TextContent,
25
+ )
26
+
27
+ structlogger = structlog.get_logger()
28
+
29
+
30
+ def _b64url_no_pad(bytes_to_convert: bytes) -> str:
31
+ """Convert bytes to a base64 URL-safe string without padding.
32
+
33
+ Args:
34
+ bytes_to_convert: Bytes to convert.
35
+
36
+ Returns:
37
+ str: Base64 URL-safe encoded string without padding.
38
+ """
39
+ return base64.urlsafe_b64encode(bytes_to_convert).rstrip(b"=").decode("ascii")
40
+
41
+
42
+ def _canonicalize_messages(messages: List[CopilotChatMessage]) -> bytes:
43
+ """Canonicalize messages to a deterministic JSON format suitable for signing.
44
+
45
+ Args:
46
+ messages: List of CopilotChatMessage objects to normalize.
47
+
48
+ Returns:
49
+ bytes: Canonicalized JSON string of messages.
50
+ """
51
+ canonical: List[dict] = []
52
+
53
+ for message in messages:
54
+ # Preserve internal roles exactly as sent by the client (e.g. "user",
55
+ # "copilot", or any future internal roles) and keep structured content blocks.
56
+ message_dict = message.model_dump(
57
+ include={"role", "content"}, exclude_none=True
58
+ )
59
+
60
+ role = message_dict.get("role", "")
61
+ content = message_dict.get("content", [])
62
+
63
+ canonical.append({"role": role, "content": content})
64
+
65
+ # Dump to JSON with consistent formatting
66
+ return json.dumps(
67
+ canonical,
68
+ ensure_ascii=False,
69
+ separators=(",", ":"),
70
+ sort_keys=True,
71
+ ).encode("utf-8")
72
+
73
+
74
+ def compute_history_signature(
75
+ messages: List[CopilotChatMessage],
76
+ session_id: str,
77
+ secret: str,
78
+ version: str = SIGNATURE_VERSION_V1,
79
+ ) -> str:
80
+ """Compute a signature for the chat history messages.
81
+
82
+ Args:
83
+ messages: List of CopilotChatMessage objects representing the chat history.
84
+ session_id: Unique identifier for the session.
85
+ secret: Secret key used for signing.
86
+ version: Version of the signature format (default is SIGNATURE_VERSION_V1).
87
+
88
+ Returns:
89
+ str: Base64 URL-safe encoded signature.
90
+ """
91
+ canonical = _canonicalize_messages(messages)
92
+ mac_input = (
93
+ version.encode("utf-8")
94
+ + b"\x00"
95
+ + session_id.encode("utf-8")
96
+ + b"\x00"
97
+ + canonical
98
+ )
99
+ digest = hmac.new(
100
+ key=secret.encode("utf-8"), msg=mac_input, digestmod=hashlib.sha256
101
+ ).digest()
102
+ signature = _b64url_no_pad(digest)
103
+ return signature
104
+
105
+
106
+ def verify_history_signature(
107
+ history_signature: str,
108
+ messages: List[CopilotChatMessage],
109
+ session_id: str,
110
+ secret: str,
111
+ version: Optional[str],
112
+ ) -> bool:
113
+ """Verify the history signature against the provided messages and session ID.
114
+
115
+ Args:
116
+ history_signature: Base64 URL-safe encoded signature to verify.
117
+ messages: List of CopilotChatMessage objects representing the chat history.
118
+ session_id: Unique identifier for the session.
119
+ secret: Secret key used for signing.
120
+ version: Version of the signature format (default is SIGNATURE_VERSION_V1).
121
+
122
+ Returns:
123
+ bool: True if the signature is valid, False otherwise.
124
+ """
125
+ version = version or SIGNATURE_VERSION_V1
126
+ expected_signature = compute_history_signature(
127
+ messages=messages, session_id=session_id, secret=secret, version=version
128
+ )
129
+ return hmac.compare_digest(expected_signature, history_signature)
130
+
131
+
132
+ def _signing_context() -> Optional[SigningContext]:
133
+ """Get the signing context for history signatures.
134
+
135
+ Returns:
136
+ SigningContext if a secret is present, otherwise None.
137
+ """
138
+ if not (secret := config.COPILOT_HISTORY_SIGNING_SECRET):
139
+ return None
140
+
141
+ return SigningContext(
142
+ secret=secret,
143
+ default_version=SIGNATURE_VERSION_V1,
144
+ )
145
+
146
+
147
+ async def verify_signature(req: CopilotRequest) -> bool:
148
+ """Verify the history signature for a request.
149
+
150
+ Args:
151
+ req: Request object containing copilot chat history and session ID.
152
+
153
+ Returns:
154
+ True if verification passes.
155
+
156
+ Raises:
157
+ InvalidCopilotChatHistorySignature: when the provided signature doesn't match.
158
+ MissingCopilotChatHistorySignature: when a required signature is missing.
159
+ """
160
+ context = _signing_context()
161
+
162
+ # If no server-side secret, signature verification is not enforced
163
+ if context is None:
164
+ return True
165
+
166
+ # If the client didn't opt in by providing the signature version, skip verification
167
+ if not (signature_version := getattr(req, "signature_version", None)):
168
+ return True
169
+
170
+ # Allow missing signature on first user turn
171
+ user_message_count = sum(
172
+ 1 for m in req.copilot_chat_history if getattr(m, "role", None) == ROLE_USER
173
+ )
174
+ allow_missing = user_message_count <= 1
175
+ version = signature_version or context.default_version
176
+
177
+ history_signature = getattr(req, "history_signature", None)
178
+ if history_signature and context.secret:
179
+ # We generate the signature against the conversation history,
180
+ # excluding the user message if it's the last one in the list
181
+ messages = req.copilot_chat_history
182
+ if user_message_count and req.copilot_chat_history[-1].role == ROLE_USER:
183
+ messages = req.copilot_chat_history[:-1]
184
+
185
+ is_valid = verify_history_signature(
186
+ history_signature=history_signature,
187
+ messages=messages,
188
+ session_id=req.session_id,
189
+ secret=context.secret,
190
+ version=version,
191
+ )
192
+ if not is_valid:
193
+ structlogger.error(
194
+ "copilot.signing.invalid_history_signature",
195
+ version=version,
196
+ session_id=req.session_id,
197
+ )
198
+ raise InvalidCopilotChatHistorySignature("invalid_history_signature")
199
+ return True
200
+
201
+ # Client opted in and this is not the first turn → signature is required
202
+ if not allow_missing:
203
+ structlogger.error(
204
+ "copilot.signing.missing_history_signature",
205
+ version=version,
206
+ session_id=req.session_id,
207
+ )
208
+ raise MissingCopilotChatHistorySignature("missing_history_signature")
209
+
210
+ # Soft mode for first turn without signature
211
+ return True
212
+
213
+
214
+ async def create_signature_envelope_for_text(
215
+ req: CopilotRequest,
216
+ text: str,
217
+ category: ResponseCategory,
218
+ ) -> Optional[ServerSentEvent]:
219
+ """Create a signature SSE envelope for the assistant message.
220
+
221
+ Args:
222
+ req: Request object containing copilot chat history and session ID.
223
+ text: Text content of the assistant message.
224
+ category: Response category of the assistant message.
225
+
226
+ Returns:
227
+ Optional[ServerSentEvent]: SSE envelope with signature data or None if
228
+ signing is not applicable.
229
+ """
230
+ context = _signing_context()
231
+
232
+ # If no server-side secret, signature verification is not enforced
233
+ if context is None:
234
+ return None
235
+
236
+ if not getattr(req, "signature_version", None):
237
+ return None
238
+
239
+ assistant_message = CopilotChatMessage(
240
+ role=ROLE_COPILOT,
241
+ content=[TextContent(type="text", text=text)],
242
+ response_category=category,
243
+ )
244
+ next_history = [*req.copilot_chat_history, assistant_message]
245
+ version = getattr(req, "signature_version", None) or context.default_version
246
+ signature = compute_history_signature(
247
+ messages=next_history,
248
+ session_id=req.session_id,
249
+ secret=context.secret,
250
+ version=version,
251
+ )
252
+
253
+ return ServerSentEvent(
254
+ event="copilot_response",
255
+ data={
256
+ "response_category": "signature",
257
+ "completeness": ResponseCompleteness.COMPLETE.value,
258
+ "version": version,
259
+ "signature": signature,
260
+ "assistant_message": assistant_message.model_dump(),
261
+ },
262
+ )
263
+
264
+
265
+ async def create_signature_envelope_for_handler(
266
+ req: CopilotRequest, handler: CopilotResponseHandler
267
+ ) -> Optional[ServerSentEvent]:
268
+ """Create a signature SSE envelope from the accumulated handler output.
269
+
270
+ Args:
271
+ req: Request object containing copilot chat history and session ID.
272
+ handler: The response handler containing generated responses.
273
+
274
+ Returns:
275
+ Optional[ServerSentEvent]: SSE envelope with signature data or None if
276
+ signing is not applicable.
277
+ """
278
+ text, category = extract_full_text_and_category(handler)
279
+ return await create_signature_envelope_for_text(req, text, category)
280
+
281
+
282
+ def extract_full_text_and_category(handler: Any) -> Tuple[str, ResponseCategory]:
283
+ """Extract full text and response category from the handler's generated responses.
284
+
285
+ Args:
286
+ handler: The response handler containing generated responses.
287
+
288
+ Returns:
289
+ Tuple[str, ResponseCategory]: Concatenated text and the last response category.
290
+ """
291
+ text_parts: List[str] = []
292
+ last_category: Optional[ResponseCategory] = None
293
+
294
+ for response in getattr(handler, "generated_responses", []) or []:
295
+ content = getattr(response, "content", None)
296
+ if isinstance(response, GeneratedContent) and content:
297
+ text_parts.append(content)
298
+ category = getattr(response, "response_category", None)
299
+ if category and category not in {
300
+ ResponseCategory.REFERENCE,
301
+ ResponseCategory.REFERENCE_ENTRY,
302
+ }:
303
+ last_category = category
304
+
305
+ return "".join(text_parts), (last_category or ResponseCategory.COPILOT)
@@ -0,0 +1,210 @@
1
+ import datetime as dt
2
+ import os
3
+ import uuid
4
+ from typing import Any, Iterable, Optional, Sequence
5
+
6
+ import structlog
7
+
8
+ from rasa import telemetry
9
+ from rasa.builder.copilot.constants import COPILOT_SEGMENT_WRITE_KEY_ENV_VAR
10
+ from rasa.builder.copilot.copilot_response_handler import CopilotResponseHandler
11
+ from rasa.builder.document_retrieval.models import Document
12
+ from rasa.telemetry import (
13
+ SEGMENT_TRACK_ENDPOINT,
14
+ segment_request_payload,
15
+ send_segment_request,
16
+ with_default_context_fields,
17
+ )
18
+
19
+ structlogger = structlog.get_logger()
20
+
21
+ COPILOT_USER_MESSAGE_EVENT = "copilot_user_message"
22
+ COPILOT_BOT_MESSAGE_EVENT = "copilot_bot_message"
23
+
24
+ COPILOT_SEGMENT_WRITE_KEY = os.getenv(COPILOT_SEGMENT_WRITE_KEY_ENV_VAR)
25
+ if _SEGMENT_ON := bool(COPILOT_SEGMENT_WRITE_KEY):
26
+ structlogger.info("builder.telemetry.enabled")
27
+ else:
28
+ structlogger.warning("builder.telemetry.disabled")
29
+
30
+
31
+ def _track(event: str, user_id: str, properties: dict) -> None:
32
+ """Track an event with Segment.
33
+
34
+ Args:
35
+ event: The name of the event to track.
36
+ user_id: The ID of the user associated with the event.
37
+ properties: Additional properties to include with the event.
38
+
39
+ Raises:
40
+ Exception: If tracking fails, an exception is logged.
41
+ """
42
+ if not _SEGMENT_ON or not telemetry.is_telemetry_enabled():
43
+ structlogger.debug("builder.telemetry._track.disabled")
44
+ return
45
+ structlogger.debug("builder.telemetry._track.enabled")
46
+
47
+ try:
48
+ payload = segment_request_payload(
49
+ user_id, event, properties, context=with_default_context_fields()
50
+ )
51
+ structlogger.debug("builder.telemetry._track.sending", payload=payload)
52
+
53
+ send_segment_request(SEGMENT_TRACK_ENDPOINT, payload, COPILOT_SEGMENT_WRITE_KEY)
54
+ except Exception as e: # skipcq:PYL-W0703
55
+ structlogger.warning("builder.telemetry.track_failed", error=str(e))
56
+
57
+
58
+ class CopilotTelemetry:
59
+ def __init__(
60
+ self,
61
+ *,
62
+ project_id: str,
63
+ user_id: str,
64
+ ) -> None:
65
+ """Initialize Telemetry instance."""
66
+ self._project_id = project_id
67
+ self._user_id = user_id
68
+ # TODO Load prompt version
69
+ self._prompt_version = "1"
70
+
71
+ def log_user_turn(self, text: str) -> None:
72
+ """Track a user message in the conversation.
73
+
74
+ Args:
75
+ text: The text of the user message.
76
+ """
77
+ structlogger.debug("builder.telemetry.log_user_turn", text=text)
78
+ _track(
79
+ COPILOT_USER_MESSAGE_EVENT,
80
+ self._user_id,
81
+ {
82
+ "project_id": self._project_id,
83
+ "message_id": uuid.uuid4().hex,
84
+ "text": text,
85
+ "timestamp": dt.datetime.utcnow().isoformat(),
86
+ },
87
+ )
88
+
89
+ def log_copilot_turn(
90
+ self,
91
+ *,
92
+ text: str,
93
+ source_urls: Sequence[str],
94
+ flags: Iterable[str],
95
+ latency_ms: int,
96
+ model: str,
97
+ input_tokens: Optional[int] = None,
98
+ output_tokens: Optional[int] = None,
99
+ total_tokens: Optional[int] = None,
100
+ system_message: Optional[dict[str, Any]] = None,
101
+ chat_history: Optional[list[dict[str, Any]]] = None,
102
+ last_user_message: Optional[dict[str, Any]] = None,
103
+ ) -> None:
104
+ """Track a copilot message in the conversation.
105
+
106
+ Args:
107
+ text: The text of the copilot message.
108
+ source_urls: URLs of the sources used to generate the response.
109
+ flags: Flags indicating special conditions or features.
110
+ latency_ms: End-to-end Copilot latency to produce this response.
111
+ model: The model used to generate the response.
112
+ input_tokens: Number of input tokens used (optional).
113
+ output_tokens: Number of output tokens generated (optional).
114
+ total_tokens: Total number of tokens used (input + output) (optional).
115
+ """
116
+ structlogger.debug("builder.telemetry.log_copilot_turn", text=text)
117
+ _track(
118
+ COPILOT_BOT_MESSAGE_EVENT,
119
+ self._user_id,
120
+ {
121
+ "project_id": self._project_id,
122
+ "message_id": uuid.uuid4().hex,
123
+ "text": text,
124
+ "prompt_version": self._prompt_version,
125
+ "source_urls": list(source_urls),
126
+ "flags": list(flags),
127
+ "latency_ms": latency_ms,
128
+ "model": model,
129
+ "input_tokens": input_tokens,
130
+ "output_tokens": output_tokens,
131
+ "total_tokens": total_tokens,
132
+ "system_message": system_message,
133
+ "chat_history": chat_history,
134
+ "last_user_message": last_user_message,
135
+ "timestamp": dt.datetime.utcnow().isoformat(),
136
+ },
137
+ )
138
+
139
+ @staticmethod
140
+ def _extract_flags(handler: CopilotResponseHandler) -> list[str]:
141
+ """Extract flags from the response handler.
142
+
143
+ Args:
144
+ handler: The response handler containing generated responses.
145
+
146
+ Returns:
147
+ A list of flags indicating special conditions or features.
148
+ """
149
+ flags = {r.response_category.value for r in handler.generated_responses}
150
+ return sorted(flags)
151
+
152
+ @staticmethod
153
+ def _full_text(handler: CopilotResponseHandler) -> str:
154
+ """Extract full text from the response handler.
155
+
156
+ Args:
157
+ handler: The response handler containing generated responses.
158
+
159
+ Returns:
160
+ The concatenated content of all generated responses.
161
+ """
162
+ return "".join(
163
+ response.content
164
+ for response in handler.generated_responses
165
+ if getattr(response, "content", None)
166
+ )
167
+
168
+ def log_copilot_from_handler(
169
+ self,
170
+ *,
171
+ handler: CopilotResponseHandler,
172
+ used_documents: list[Document],
173
+ latency_ms: int,
174
+ model: str,
175
+ prompt_tokens: int,
176
+ completion_tokens: int,
177
+ total_tokens: int,
178
+ system_message: dict[str, Any],
179
+ chat_history: list[dict[str, Any]],
180
+ last_user_message: dict[str, Any],
181
+ ) -> None:
182
+ """Log a copilot message from the response handler.
183
+
184
+ Args:
185
+ handler: The response handler containing generated responses.
186
+ used_documents: List of documents used as supporting evidence.
187
+ latency_ms: End-to-end Copilot latency to produce this response.
188
+ model: The model used to generate the response.
189
+ prompt_tokens: Number of input tokens used.
190
+ completion_tokens: Number of output tokens generated.
191
+ total_tokens: Total number of tokens used (input + output).
192
+ system_message: The system message used.
193
+ chat_history: The chat history messages used.
194
+ last_user_message: The last user message used.
195
+ """
196
+ structlogger.debug("builder.telemetry.log_copilot_from_handler")
197
+ text = self._full_text(handler)
198
+ self.log_copilot_turn(
199
+ text=text,
200
+ source_urls=[d.url for d in used_documents if d.url],
201
+ flags=self._extract_flags(handler),
202
+ latency_ms=latency_ms,
203
+ model=model,
204
+ input_tokens=prompt_tokens,
205
+ output_tokens=completion_tokens,
206
+ total_tokens=total_tokens,
207
+ system_message=system_message,
208
+ chat_history=chat_history,
209
+ last_user_message=last_user_message,
210
+ )
File without changes
@@ -0,0 +1,16 @@
1
+ # Templates for role ROLE_RASA_INTERNAL
2
+ # Note: Only 'training_error_log_analysis' and 'e2e_testing_error_log_analysis' are
3
+ # valid response categories for rasa internal messages for now.
4
+ # Future contexts can be added here + in ResponseCategory enumeration.
5
+
6
+ templates:
7
+ # Templated utterance when training fails.
8
+ training_error_log_analysis: |
9
+ The assistant training failed. Your task is to analyze provided error logs
10
+ and help me fix the issue.
11
+
12
+ # Templated utterance when e2e testing fails.
13
+ e2e_testing_error_log_analysis: |
14
+ The e2e testing failed. Your task is to analyze provided error from the E2E
15
+ test logs and help me fix the issue. Help me understand if the issue is within
16
+ the the E2E test or the assistant.
@@ -0,0 +1,38 @@
1
+ responses:
2
+ roleplay_response: |
3
+ Looks like we’ve slipped into chatting as if I were your bot. I’m here to help you
4
+ build and improve your Rasa agent, not to roleplay as it. If you'd like to test your
5
+ agent, add your message in the chat preview on the right. If you’re not sure what to
6
+ test, I can help you create a new skill or suggest a few example conversations to
7
+ try.
8
+
9
+ out_of_scope_response: |
10
+ I’m here to help you build and improve your Rasa chatbot. I can explain concepts,
11
+ walk you through changes, or debug things with you.
12
+
13
+ Do you want me to show you what your assistant can do right now, or help you add
14
+ something new?
15
+
16
+ error_fallback_response: |
17
+ Your project ran into an error, but I'm not sure what caused it. Take a look at the
18
+ logs for the full details.
19
+
20
+ guardrail_policy_violation_response: |
21
+ I’m here to help you with Rasa agent development in a safe and respectful
22
+ environment. I cannot assist with harmful content, inappropriate material, or
23
+ attempts to manipulate my responses. Continued attempts to use the system in this
24
+ way may result in project termination and account blocking.
25
+
26
+ copilot_redacted_message: "[Copilot response redacted for guardrails check.]"
27
+
28
+ knowledge_base_access_requested_response: |
29
+ At the moment I can't read your knowledge base directly, but you can browse the
30
+ available entries in the `/docs` folder in your code editor.
31
+
32
+ guardrail_blocked_user_response: |
33
+ Your Copilot access has been temporarily blocked due to repeated policy violations.
34
+ If you believe this is an error or would like to request a review, please reach out to support@rasa.com.
35
+
36
+ guardrail_blocked_project_response: |
37
+ Your Copilot access has been temporarily blocked due to repeated policy violations.
38
+ If you believe this is an error or would like to request a review, please reach out to support@rasa.com.
File without changes
@@ -0,0 +1,15 @@
1
+ import importlib_resources
2
+
3
+ from rasa.constants import PACKAGE_NAME
4
+
5
+ INKEEP_API_KEY_ENV_VAR = "INKEEP_API_KEY"
6
+
7
+ INKEEP_RAG_RESPONSE_SCHEMA_PATH = str(
8
+ importlib_resources.files(PACKAGE_NAME)
9
+ .joinpath("builder")
10
+ .joinpath("document_retrieval")
11
+ .joinpath("inkeep-rag-response-schema.json")
12
+ )
13
+
14
+
15
+ INKEEP_DOCUMENT_RETRIEVAL_MODEL = "inkeep-rag"