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
rasa/tracing/config.py CHANGED
@@ -6,7 +6,6 @@ import os
6
6
  from typing import Any, Dict, Optional, Text
7
7
 
8
8
  import grpc
9
- from opentelemetry.exporter.jaeger.thrift import JaegerExporter
10
9
  from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
11
10
  from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
12
11
  from opentelemetry.metrics import set_meter_provider
@@ -172,19 +171,35 @@ class TracerConfigurer(abc.ABC):
172
171
 
173
172
 
174
173
  class JaegerTracerConfigurer(TracerConfigurer):
175
- """The `TracerConfigurer` for a Jaeger backend."""
174
+ """The `TracerConfigurer` for a Jaeger backend.
175
+
176
+ This class maintains backward compatibility with the old Jaeger configuration format
177
+ while internally using OTLP to avoid protobuf compatibility issues.
178
+ """
176
179
 
177
180
  @classmethod
178
181
  def configure_from_endpoint_config(cls, cfg: EndpointConfig) -> TracerProvider:
179
- """Configure tracing for Jaeger.
182
+ """Configure tracing for Jaeger using OTLP under the hood.
180
183
 
181
- This will read the Jaeger-specific configuration from the `EndpointConfig` and
182
- create a corresponding `TracerProvider` that exports to the given Jaeger
183
- backend.
184
+ This maintains backward compatibility with the old Jaeger configuration format
185
+ while using OTLP internally to avoid protobuf compatibility issues.
184
186
 
185
187
  :param cfg: The configuration to be read for configuring tracing.
186
188
  :return: The configured `TracerProvider`.
187
189
  """
190
+ # Extract Jaeger-specific configuration
191
+ jaeger_config = cls._extract_config(cfg)
192
+
193
+ # Map Jaeger configuration to OTLP endpoint
194
+ otlp_endpoint = f"http://{jaeger_config['agent_host_name']}:{jaeger_config.get('agent_port', 4317)}" # noqa: E501
195
+
196
+ # Create OTLP exporter with Jaeger-compatible configuration
197
+ otlp_exporter = OTLPSpanExporter(
198
+ endpoint=otlp_endpoint,
199
+ insecure=True, # Jaeger typically runs without TLS in development
200
+ headers=cls._build_headers(jaeger_config),
201
+ )
202
+
188
203
  provider = TracerProvider(
189
204
  resource=Resource.create(
190
205
  {
@@ -195,19 +210,17 @@ class JaegerTracerConfigurer(TracerConfigurer):
195
210
  )
196
211
  )
197
212
 
198
- jaeger_exporter = JaegerExporter(
199
- **cls._extract_config(cfg), udp_split_oversized_batches=True
200
- )
201
213
  logger.info(
202
- f"Registered {cfg.type} endpoint for tracing. Traces will be exported to"
203
- f" {jaeger_exporter.agent_host_name}:{jaeger_exporter.agent_port}"
214
+ f"Registered {cfg.type} endpoint for tracing using OTLP. "
215
+ f"Traces will be exported to {otlp_endpoint}."
204
216
  )
205
- provider.add_span_processor(BatchSpanProcessor(jaeger_exporter))
217
+ provider.add_span_processor(BatchSpanProcessor(otlp_exporter))
206
218
 
207
219
  return provider
208
220
 
209
221
  @classmethod
210
222
  def _extract_config(cls, cfg: EndpointConfig) -> Dict[str, Any]:
223
+ """Extract Jaeger configuration parameters."""
211
224
  return {
212
225
  "agent_host_name": (cfg.kwargs.get("host", "localhost")),
213
226
  "agent_port": (cfg.kwargs.get("port", 6831)),
@@ -215,6 +228,19 @@ class JaegerTracerConfigurer(TracerConfigurer):
215
228
  "password": cfg.kwargs.get("password"),
216
229
  }
217
230
 
231
+ @classmethod
232
+ def _build_headers(cls, jaeger_config: Dict[str, Any]) -> Optional[Dict[str, str]]:
233
+ """Build OTLP headers from Jaeger authentication config."""
234
+ headers = {}
235
+ if jaeger_config.get("username") and jaeger_config.get("password"):
236
+ import base64
237
+
238
+ credentials = base64.b64encode(
239
+ f"{jaeger_config['username']}:{jaeger_config['password']}".encode()
240
+ ).decode()
241
+ headers["Authorization"] = f"Basic {credentials}"
242
+ return headers if headers else None
243
+
218
244
 
219
245
  class OTLPCollectorConfigurer(TracerConfigurer):
220
246
  """The `TracerConfigurer` for an OTLP collector backend."""
@@ -60,6 +60,7 @@ from rasa.shared.core.constants import REQUESTED_SLOT
60
60
  from rasa.shared.core.domain import Domain
61
61
  from rasa.shared.core.events import DialogueStackUpdated, Event
62
62
  from rasa.shared.core.flows import Flow, FlowsList, FlowStep
63
+ from rasa.shared.core.slots import Slot
63
64
  from rasa.shared.core.trackers import DialogueStateTracker
64
65
  from rasa.shared.core.training_data.structures import StoryGraph
65
66
  from rasa.shared.importers.importer import TrainingDataImporter
@@ -585,7 +586,10 @@ def extract_attrs_for_check_commands_against_startable_flows(
585
586
 
586
587
 
587
588
  def extract_attrs_for_advance_flows(
588
- tracker: DialogueStateTracker, available_actions: List[str], flows: FlowsList
589
+ tracker: DialogueStateTracker,
590
+ available_actions: List[str],
591
+ flows: FlowsList,
592
+ slots: List[Slot],
589
593
  ) -> Dict[str, Any]:
590
594
  from rasa.tracing.instrumentation.instrumentation import FLOW_EXECUTOR_MODULE_NAME
591
595
 
@@ -245,6 +245,67 @@ def traceable_async(
245
245
  return async_wrapper
246
246
 
247
247
 
248
+ def traceable_module_async(
249
+ fn: Callable[..., Awaitable[S]],
250
+ tracer: Tracer,
251
+ attr_extractor: Optional[Callable[..., Dict[str, Any]]],
252
+ header_extractor: Optional[Callable[..., Dict[str, Any]]],
253
+ metrics_recorder: Optional[Callable],
254
+ ) -> Callable[..., Awaitable[S]]:
255
+ """Wrap a module-level async function with tracing functionality.
256
+
257
+ :param fn: The async function to be wrapped.
258
+ :param tracer: The `Tracer` that shall be used for tracing this function.
259
+ :param attr_extractor: A function that is applied to the function's arguments.
260
+ :param header_extractor: A function that is applied to the function's arguments.
261
+ :param metrics_recorder: A function that records metric measurements.
262
+ :return: The wrapped function.
263
+ """
264
+ should_extract_args = _check_extractor_argument_list(fn, attr_extractor)
265
+
266
+ @functools.wraps(fn)
267
+ async def async_wrapper(*args: Any, **kwargs: Any) -> S:
268
+ attrs = (
269
+ attr_extractor(*args, **kwargs)
270
+ if attr_extractor and should_extract_args
271
+ else {}
272
+ )
273
+ headers = header_extractor(*args, **kwargs) if header_extractor else {}
274
+ context = extract_tracing_context_from_headers(headers)
275
+
276
+ # Use module name from attrs or fallback to function module
277
+ module_name = attrs.pop("module_name", "")
278
+ if module_name in [
279
+ "command_processor",
280
+ FLOW_EXECUTOR_MODULE_NAME,
281
+ DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
282
+ ]:
283
+ span_name = f"{module_name}.{fn.__name__}"
284
+ else:
285
+ span_name = f"{fn.__module__}.{fn.__name__}"
286
+
287
+ with tracer.start_as_current_span(
288
+ span_name,
289
+ attributes=attrs,
290
+ context=context,
291
+ ) as span:
292
+ TraceContextTextMapPropagator().inject(headers)
293
+
294
+ ctx = span.get_span_context()
295
+ logger.debug(
296
+ f"The trace id for the current span '{span_name}' is '{ctx.trace_id}'."
297
+ )
298
+
299
+ result = await fn(*args, **kwargs)
300
+
301
+ if metrics_recorder:
302
+ metrics_recorder(attrs)
303
+
304
+ return result
305
+
306
+ return async_wrapper
307
+
308
+
248
309
  def traceable_async_generator(
249
310
  fn: Callable[[T, Any, Any], AsyncIterator[S]],
250
311
  tracer: Tracer,
@@ -1160,7 +1221,11 @@ def _instrument_function(
1160
1221
  module = importlib.import_module(module_name)
1161
1222
  function_to_trace = getattr(module, function_name)
1162
1223
  traced_function = _wrap_with_tracing_decorator(
1163
- function_to_trace, tracer, attr_extractor, header_extractor
1224
+ function_to_trace,
1225
+ tracer,
1226
+ attr_extractor,
1227
+ header_extractor,
1228
+ is_module_function=True,
1164
1229
  )
1165
1230
 
1166
1231
  setattr(module, function_name, traced_function)
@@ -1176,15 +1241,27 @@ def _wrap_with_tracing_decorator(
1176
1241
  attr_extractor: Optional[Callable],
1177
1242
  header_extractor: Optional[Callable] = None,
1178
1243
  metrics_recorder: Optional[Callable] = None,
1244
+ is_module_function: bool = False,
1179
1245
  ) -> Callable:
1180
1246
  if inspect.iscoroutinefunction(callable_to_trace):
1181
- traced_callable = traceable_async(
1182
- callable_to_trace,
1183
- tracer,
1184
- attr_extractor,
1185
- header_extractor,
1186
- metrics_recorder,
1187
- )
1247
+ if is_module_function:
1248
+ # This is a module-level async function
1249
+ traced_callable = traceable_module_async(
1250
+ callable_to_trace,
1251
+ tracer,
1252
+ attr_extractor,
1253
+ header_extractor,
1254
+ metrics_recorder,
1255
+ )
1256
+ else:
1257
+ # This is a class method
1258
+ traced_callable = traceable_async(
1259
+ callable_to_trace,
1260
+ tracer,
1261
+ attr_extractor,
1262
+ header_extractor,
1263
+ metrics_recorder,
1264
+ )
1188
1265
  else:
1189
1266
  traced_callable = traceable(
1190
1267
  callable_to_trace, tracer, attr_extractor, metrics_recorder
rasa/utils/common.py CHANGED
@@ -52,7 +52,7 @@ EXPECTED_WARNINGS: List[Tuple[Type[Warning], str]] = [
52
52
  # TODO (issue #9932)
53
53
  # DM1 warnings
54
54
  (
55
- np.VisibleDeprecationWarning,
55
+ np.exceptions.VisibleDeprecationWarning,
56
56
  "Creating an ndarray from ragged nested sequences.*",
57
57
  ),
58
58
  # raised by magic_filter, google rpc
rasa/utils/io.py CHANGED
@@ -26,6 +26,7 @@ from typing_extensions import Protocol
26
26
 
27
27
  import rasa.shared.constants
28
28
  import rasa.shared.utils.io
29
+ from rasa.shared.exceptions import RasaException
29
30
 
30
31
  if TYPE_CHECKING:
31
32
  from prompt_toolkit.validation import Validator
@@ -124,9 +125,7 @@ def create_path(file_path: Text) -> None:
124
125
  def file_type_validator(
125
126
  valid_file_types: List[Text], error_message: Text
126
127
  ) -> Type["Validator"]:
127
- """Creates a `Validator` class which can be used with `questionary` to validate
128
- file paths.
129
- """
128
+ """Creates a file type validator class for the questionary package."""
130
129
 
131
130
  def is_valid(path: Text) -> bool:
132
131
  return path is not None and any(
@@ -137,9 +136,7 @@ def file_type_validator(
137
136
 
138
137
 
139
138
  def not_empty_validator(error_message: Text) -> Type["Validator"]:
140
- """Creates a `Validator` class which can be used with `questionary` to validate
141
- that the user entered something other than whitespace.
142
- """
139
+ """Creates a not empty validator class for the questionary package."""
143
140
 
144
141
  def is_valid(input: Text) -> bool:
145
142
  return input is not None and input.strip() != ""
@@ -150,9 +147,7 @@ def not_empty_validator(error_message: Text) -> Type["Validator"]:
150
147
  def create_validator(
151
148
  function: Callable[[Text], bool], error_message: Text
152
149
  ) -> Type["Validator"]:
153
- """Helper method to create `Validator` classes from callable functions. Should be
154
- removed when questionary supports `Validator` objects.
155
- """
150
+ """Helper method to create a validator class from a callable function."""
156
151
  from prompt_toolkit.document import Document
157
152
  from prompt_toolkit.validation import ValidationError, Validator
158
153
 
@@ -250,3 +245,26 @@ def write_yaml(
250
245
 
251
246
  with Path(target).open("w", encoding="utf-8") as outfile:
252
247
  dumper.dump(data, outfile, transform=transform)
248
+
249
+
250
+ class InvalidPathException(RasaException):
251
+ """Raised if a path is invalid - e.g. path traversal is detected."""
252
+
253
+
254
+ def subpath(parent: str, child: str) -> str:
255
+ """Return the path to the child directory of the parent directory.
256
+
257
+ Ensures, that child doesn't navigate to parent directories. Prevents
258
+ path traversal. Raises an InvalidPathException if the path is invalid.
259
+
260
+ Based on Snyk's directory traversal mitigation:
261
+ https://learn.snyk.io/lesson/directory-traversal/
262
+ """
263
+ safe_path = os.path.abspath(os.path.join(parent, child))
264
+ parent = os.path.abspath(parent)
265
+
266
+ common_base = os.path.commonpath([parent, safe_path])
267
+ if common_base != parent:
268
+ raise InvalidPathException(f"Invalid path: {safe_path}")
269
+
270
+ return safe_path
rasa/utils/json_utils.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from decimal import Decimal
3
- from typing import Any, Text
3
+ from typing import Any, Dict, List, Text
4
4
 
5
5
 
6
6
  class DecimalEncoder(json.JSONEncoder):
@@ -58,3 +58,8 @@ def replace_decimals_with_floats(obj: Any) -> Any:
58
58
  Input `obj` with all `Decimal` types replaced by `float`s.
59
59
  """
60
60
  return json.loads(json.dumps(obj, cls=DecimalEncoder))
61
+
62
+
63
+ def extract_values(data: Dict, keys: List[Text]) -> Dict:
64
+ """Extracts values for given keys from a dictionary."""
65
+ return {key: data.get(key) for key in keys if data.get(key)}
rasa/utils/log_utils.py CHANGED
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  import os
5
5
  import sys
6
- from typing import Any, Optional
6
+ from typing import Any, List, Optional
7
7
 
8
8
  import structlog
9
9
  from structlog.dev import ConsoleRenderer
@@ -37,6 +37,7 @@ class HumanConsoleRenderer(ConsoleRenderer):
37
37
  def configure_structlog(
38
38
  log_level: Optional[int] = None,
39
39
  include_time: bool = False,
40
+ additional_processors: Optional[List[structlog.typing.Processor]] = None,
40
41
  ) -> None:
41
42
  """Configure logging of the server."""
42
43
  if log_level is None: # Log level NOTSET is 0 so we use `is None` here
@@ -75,6 +76,9 @@ def configure_structlog(
75
76
  if include_time:
76
77
  shared_processors.append(structlog.processors.TimeStamper(fmt="iso"))
77
78
 
79
+ if additional_processors:
80
+ shared_processors.extend(additional_processors)
81
+
78
82
  if not FORCE_JSON_LOGGING and sys.stderr.isatty():
79
83
  # Pretty printing when we run in a terminal session.
80
84
  # Automatically prints pretty tracebacks when "rich" is installed
rasa/utils/openapi.py ADDED
@@ -0,0 +1,144 @@
1
+ from typing import Any, Dict, List, Type
2
+
3
+ from pydantic.main import BaseModel
4
+ from sanic_openapi import openapi
5
+ from sanic_openapi.openapi3.types import Schema
6
+
7
+ _SUPPORTED_ATTRIBUTES = frozenset(["format", "enum", "required", "example"])
8
+
9
+
10
+ def _to_schema(
11
+ definition_stack: List[str], schema_def: Dict[str, Any], definitions: Dict[str, Any]
12
+ ) -> Schema:
13
+ type = schema_def.get("type")
14
+
15
+ if type == "object":
16
+ properties_spec = schema_def.get("properties", {})
17
+ properties = {}
18
+ for key in properties_spec:
19
+ properties[key] = _to_schema(
20
+ definition_stack=definition_stack,
21
+ schema_def=properties_spec[key],
22
+ definitions=definitions,
23
+ )
24
+ schema = openapi.Object(
25
+ title=schema_def.get("title"),
26
+ description=schema_def.get("description"),
27
+ required=schema_def.get("required"),
28
+ properties=properties,
29
+ )
30
+ elif type == "array":
31
+ schema = openapi.Array(
32
+ description=schema_def.get("description"),
33
+ required=schema_def.get("required"),
34
+ items=_to_schema(
35
+ definition_stack=definition_stack,
36
+ schema_def=schema_def.get("items"),
37
+ definitions=definitions,
38
+ ),
39
+ )
40
+ elif type is None:
41
+ if allof_spec := schema_def.get("allOf"): # Model, Enum
42
+ definition = allof_spec[0]["$ref"].split("/")[-1]
43
+ definition_data = definitions.get(definition)
44
+ if definition_data is None:
45
+ schema = openapi.Object(
46
+ title=definition, description=schema_def.get("description")
47
+ )
48
+ else:
49
+ schema = (
50
+ _to_schema(
51
+ definition_stack=definition_stack + [definition],
52
+ schema_def={**definition_data},
53
+ definitions=definitions,
54
+ )
55
+ if definition not in definition_stack
56
+ else openapi.Object(
57
+ title=definition, description=schema_def.get("description")
58
+ )
59
+ )
60
+
61
+ elif anyof_spec := schema_def.get("anyOf"): # Union
62
+ anyof = []
63
+ for any in anyof_spec:
64
+ if any.get("type"):
65
+ schema_type_obj = Schema(
66
+ **{
67
+ "type": any.get("type"),
68
+ "description": any.get("description"),
69
+ }
70
+ )
71
+ anyof.append(schema_type_obj)
72
+ else:
73
+ definition = any["$ref"].split("/")[-1]
74
+ if definition not in definition_stack:
75
+ definition_data = definitions.get(definition)
76
+ if definition_data is not None:
77
+ anyof.append(
78
+ _to_schema(
79
+ definition_stack=definition_stack + [definition],
80
+ schema_def=definition_data,
81
+ definitions=definitions,
82
+ )
83
+ )
84
+ else:
85
+ anyof.append(
86
+ openapi.Object(
87
+ title=definition,
88
+ description=schema_def.get(
89
+ "description", definition
90
+ ),
91
+ properties={},
92
+ )
93
+ )
94
+ else:
95
+ anyof.append(
96
+ openapi.Object(
97
+ title=definition,
98
+ description=schema_def.get("description", definition),
99
+ properties={},
100
+ )
101
+ )
102
+ schema = Schema(anyOf=anyof)
103
+ elif ref := schema_def.get("$ref"): # $ref
104
+ definition = ref.split("/")[-1]
105
+ definition_data = definitions.get(definition)
106
+ if definition_data is not None:
107
+ schema = _to_schema(
108
+ definition_stack=definition_stack,
109
+ schema_def=definition_data,
110
+ definitions=definitions,
111
+ )
112
+ else:
113
+ schema = openapi.Object(
114
+ title=definition, description=schema_def.get("description")
115
+ )
116
+ else: # Any type
117
+ schema = Schema(
118
+ **{"type": "object", "description": schema_def.get("description")}
119
+ )
120
+
121
+ else:
122
+ schema_spec = {
123
+ "type": schema_def.get("type"),
124
+ "description": schema_def.get("description"),
125
+ }
126
+ for spec in _SUPPORTED_ATTRIBUTES:
127
+ if schema_def.get(spec):
128
+ schema_spec[spec] = schema_def.get(spec)
129
+ schema = Schema(**schema_spec)
130
+
131
+ return schema
132
+
133
+
134
+ def model_to_schema(model: Type[BaseModel]) -> Schema:
135
+ schema = model.model_json_schema()
136
+ # Handle both $defs (newer JSON Schema) and definitions (older JSON Schema)
137
+ definitions = schema.get("$defs") or schema.get("definitions") or {}
138
+ return _to_schema(
139
+ definition_stack=[],
140
+ schema_def=dict(
141
+ filter(lambda key: key[0] not in ("definitions", "$defs"), schema.items())
142
+ ),
143
+ definitions=definitions,
144
+ )
@@ -0,0 +1,29 @@
1
+ """TensorFlow utilities for Rasa components.
2
+
3
+ This module provides TensorFlow-related utilities and components.
4
+ TensorFlow is an optional dependency and should be installed separately
5
+ if you want to use components that require it. These are:
6
+ - DIETClassifier
7
+ - TEDPolicy
8
+ - UnexpecTEDIntentPolicy
9
+ - ResponseSelector
10
+ - ConveRTFeaturizer
11
+ - LanguageModelFeaturizer
12
+
13
+ To install Rasa with TensorFlow support:
14
+ `pip install "rasa[tensorflow]"`
15
+
16
+ To install it with poetry:
17
+ `poetry install --extras tensorflow`
18
+
19
+ For macOS with Apple Silicon (M1/M2) (platform-specific TensorFlow installation):
20
+ `pip install "rasa[tensorflow,metal]"`
21
+ """
22
+
23
+ import importlib.util
24
+ import logging
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+ # check if TensorFlow is available
29
+ TENSORFLOW_AVAILABLE = importlib.util.find_spec("tensorflow") is not None
@@ -55,7 +55,7 @@ class RasaModelCheckpoint(tf.keras.callbacks.Callback):
55
55
  """
56
56
  super().__init__()
57
57
 
58
- self.checkpoint_file = checkpoint_dir / "checkpoint.tf_model"
58
+ self.checkpoint_file = checkpoint_dir / "checkpoint.weights.h5"
59
59
  self.best_metrics_so_far: Dict[Text, Any] = {}
60
60
 
61
61
  def on_epoch_end(self, epoch: int, logs: Optional[Dict[Text, Any]] = None) -> None:
@@ -9,7 +9,7 @@ from tensorflow.types.experimental import TensorLike
9
9
  # (modified to our neeeds)
10
10
 
11
11
 
12
- class CrfDecodeForwardRnnCell(tf.keras.layers.AbstractRNNCell):
12
+ class CrfDecodeForwardRnnCell(tf.keras.layers.Layer):
13
13
  """Computes the forward decoding in a linear-chain CRF."""
14
14
 
15
15
  def __init__(self, transition_params: TensorLike, **kwargs: Any) -> None:
@@ -71,13 +71,22 @@ class RasaDataGenerator(Sequence):
71
71
  # balancing on the next epoch
72
72
  return data
73
73
 
74
+ @staticmethod
75
+ def _create_default_array() -> np.ndarray:
76
+ """Create a default empty array for missing features.
77
+
78
+ Returns:
79
+ A default empty array with shape (0, 1) and dtype float32.
80
+ """
81
+ return np.zeros((0, 1), dtype=np.float32)
82
+
74
83
  @staticmethod
75
84
  def prepare_batch(
76
85
  data: Data,
77
86
  start: Optional[int] = None,
78
87
  end: Optional[int] = None,
79
88
  tuple_sizes: Optional[Dict[Text, int]] = None,
80
- ) -> Tuple[Optional[np.ndarray], ...]:
89
+ ) -> Tuple[np.ndarray, ...]:
81
90
  """Slices model data into batch using given start and end value.
82
91
 
83
92
  Args:
@@ -85,8 +94,8 @@ class RasaDataGenerator(Sequence):
85
94
  start: The start index of the batch
86
95
  end: The end index of the batch
87
96
  tuple_sizes: In case the feature is not present we propagate the batch with
88
- None. Tuple sizes contains the number of how many None values to add for
89
- what kind of feature.
97
+ default arrays. Tuple sizes contains the number of how many default values
98
+ to add for what kind of feature.
90
99
 
91
100
  Returns:
92
101
  The features of the batch.
@@ -95,12 +104,14 @@ class RasaDataGenerator(Sequence):
95
104
 
96
105
  for key, attribute_data in data.items():
97
106
  for sub_key, f_data in attribute_data.items():
98
- # add None for not present values during processing
107
+ # add default arrays for not present values during processing
99
108
  if not f_data:
100
109
  if tuple_sizes:
101
- batch_data += [None] * tuple_sizes[key]
110
+ batch_data += [
111
+ RasaDataGenerator._create_default_array()
112
+ ] * tuple_sizes[key]
102
113
  else:
103
- batch_data.append(None)
114
+ batch_data.append(RasaDataGenerator._create_default_array())
104
115
  continue
105
116
 
106
117
  for v in f_data:
@@ -409,8 +420,10 @@ class RasaBatchDataGenerator(RasaDataGenerator):
409
420
  end = start + self._current_batch_size
410
421
 
411
422
  # return input and target data, as our target data is inside the input
412
- # data return None for the target data
413
- return self.prepare_batch(self._data, start, end), None
423
+ # data return default array for the target data
424
+ return self.prepare_batch(
425
+ self._data, start, end
426
+ ), RasaDataGenerator._create_default_array()
414
427
 
415
428
  def on_epoch_end(self) -> None:
416
429
  """Update the data after every epoch."""
@@ -3,9 +3,7 @@ from typing import Any, Callable, List, Optional, Text, Tuple, Union
3
3
 
4
4
  import tensorflow as tf
5
5
  import tensorflow.keras.backend as K
6
-
7
- # TODO: The following is not (yet) available via tf.keras
8
- from keras.src.utils.control_flow_util import smart_cond
6
+ from tensorflow.python.keras.utils.control_flow_util import smart_cond
9
7
 
10
8
  import rasa.utils.tensorflow.crf
11
9
  import rasa.utils.tensorflow.layers_utils as layers_utils
@@ -278,6 +276,7 @@ class RandomlyConnectedDense(tf.keras.layers.Dense):
278
276
  kernel_constraint: Constraint function applied to
279
277
  the `kernel` weights matrix.
280
278
  bias_constraint: Constraint function applied to the bias vector.
279
+ **kwargs: Additional keyword arguments passed to the parent class.
281
280
  """
282
281
  super().__init__(**kwargs)
283
282
 
@@ -367,7 +366,12 @@ class RandomlyConnectedDense(tf.keras.layers.Dense):
367
366
  Returns:
368
367
  The processed inputs.
369
368
  """
370
- if self.density < 1.0:
369
+ # Apply kernel masking if needed (Keras 3.x compatibility check)
370
+ if (
371
+ self.density < 1.0
372
+ and hasattr(self, "kernel_mask")
373
+ and self.kernel_mask is not None
374
+ ):
371
375
  # Set fraction of the `kernel` weights to zero according to precomputed mask
372
376
  self.kernel.assign(self.kernel * self.kernel_mask)
373
377
  return super().call(inputs)
@@ -724,6 +728,7 @@ class DotProductLoss(tf.keras.layers.Layer):
724
728
  Currently, the only possible value is `SOFTMAX`.
725
729
  similarity_type: Similarity measure to use, either `cosine` or `inner`.
726
730
  name: Optional name of the layer.
731
+ **kwargs: Additional keyword arguments passed to the parent class.
727
732
 
728
733
  Raises:
729
734
  TFLayerConfigException: When `similarity_type` is not one of `COSINE` or
@@ -883,6 +888,7 @@ class SingleLabelDotProductLoss(DotProductLoss):
883
888
  values are approximately bounded.
884
889
  model_confidence: Normalization of confidence values during inference.
885
890
  Currently, the only possible value is `SOFTMAX`.
891
+ **kwargs: Additional keyword arguments passed to the parent class.
886
892
  """
887
893
  super().__init__(
888
894
  num_candidates,
@@ -1244,6 +1250,7 @@ class MultiLabelDotProductLoss(DotProductLoss):
1244
1250
  Used inside _loss_cross_entropy() only.
1245
1251
  model_confidence: Normalization of confidence values during inference.
1246
1252
  Currently, the only possible value is `SOFTMAX`.
1253
+ **kwargs: Additional keyword arguments passed to the parent class.
1247
1254
  """
1248
1255
  super().__init__(
1249
1256
  num_candidates,