rasa-pro 3.14.0.dev7__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 (471) hide show
  1. rasa/agents/agent_manager.py +1 -1
  2. rasa/agents/constants.py +2 -2
  3. rasa/agents/protocol/a2a/a2a_agent.py +385 -227
  4. rasa/agents/protocol/mcp/mcp_base_agent.py +30 -13
  5. rasa/agents/protocol/mcp/mcp_open_agent.py +31 -8
  6. rasa/agents/protocol/mcp/mcp_task_agent.py +32 -9
  7. rasa/agents/schemas/agent_output.py +1 -1
  8. rasa/agents/utils.py +90 -1
  9. rasa/builder/README.md +120 -0
  10. rasa/builder/__init__.py +0 -0
  11. rasa/builder/auth.py +176 -0
  12. rasa/builder/config.py +92 -0
  13. rasa/builder/copilot/__init__.py +0 -0
  14. rasa/builder/copilot/constants.py +31 -0
  15. rasa/builder/copilot/copilot.py +450 -0
  16. rasa/builder/copilot/copilot_response_handler.py +522 -0
  17. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  18. rasa/builder/copilot/exceptions.py +32 -0
  19. rasa/builder/copilot/models.py +500 -0
  20. rasa/builder/copilot/prompts/__init__.py +0 -0
  21. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +766 -0
  22. rasa/builder/copilot/prompts/latest_user_message_context_prompt.jinja2 +61 -0
  23. rasa/builder/copilot/signing.py +305 -0
  24. rasa/builder/copilot/telemetry.py +210 -0
  25. rasa/builder/copilot/templated_messages/__init__.py +0 -0
  26. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  27. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +38 -0
  28. rasa/builder/document_retrieval/__init__.py +0 -0
  29. rasa/builder/document_retrieval/constants.py +15 -0
  30. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  31. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  32. rasa/builder/document_retrieval/models.py +62 -0
  33. rasa/builder/download.py +140 -0
  34. rasa/builder/exceptions.py +91 -0
  35. rasa/builder/guardrails/__init__.py +1 -0
  36. rasa/builder/guardrails/constants.py +9 -0
  37. rasa/builder/guardrails/exceptions.py +4 -0
  38. rasa/builder/guardrails/lakera.py +206 -0
  39. rasa/builder/guardrails/models.py +231 -0
  40. rasa/builder/guardrails/store.py +238 -0
  41. rasa/builder/guardrails/utils.py +328 -0
  42. rasa/builder/job_manager.py +87 -0
  43. rasa/builder/jobs.py +282 -0
  44. rasa/builder/llm_service.py +246 -0
  45. rasa/builder/logging_utils.py +265 -0
  46. rasa/builder/main.py +243 -0
  47. rasa/builder/models.py +216 -0
  48. rasa/builder/project_generator.py +458 -0
  49. rasa/builder/project_info.py +72 -0
  50. rasa/builder/scrape_rasa_docs.py +97 -0
  51. rasa/builder/service.py +1345 -0
  52. rasa/builder/shared/tracker_context.py +212 -0
  53. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  54. rasa/builder/template_cache.py +244 -0
  55. rasa/builder/training_service.py +194 -0
  56. rasa/builder/validation_service.py +97 -0
  57. rasa/cli/project_templates/basic/README.md +23 -0
  58. rasa/cli/project_templates/basic/actions/__init__ +0 -0
  59. rasa/cli/project_templates/basic/actions/action_human_handoff.py +40 -0
  60. rasa/cli/project_templates/basic/actions/actions.md +10 -0
  61. rasa/cli/project_templates/basic/config.yml +29 -0
  62. rasa/cli/project_templates/basic/credentials.yml +33 -0
  63. rasa/cli/project_templates/basic/data/data.md +9 -0
  64. rasa/cli/project_templates/basic/data/general/feedback.yml +21 -0
  65. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  66. rasa/cli/project_templates/basic/data/general/hello.yml +6 -0
  67. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  68. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  69. rasa/cli/project_templates/basic/data/general/show_faqs.yml +6 -0
  70. rasa/cli/project_templates/basic/data/system/patterns/pattern_cannot_handle.yml +7 -0
  71. rasa/cli/project_templates/basic/data/system/patterns/pattern_completed.yml +7 -0
  72. rasa/cli/project_templates/basic/data/system/patterns/pattern_correction.yml +7 -0
  73. rasa/cli/project_templates/basic/data/system/patterns/pattern_search.yml +8 -0
  74. rasa/cli/project_templates/basic/data/system/patterns/pattern_session_start.yml +8 -0
  75. rasa/cli/project_templates/basic/docs/docs.md +5 -0
  76. rasa/cli/project_templates/basic/docs/template.txt +28 -0
  77. rasa/cli/project_templates/basic/domain/domain.md +8 -0
  78. rasa/cli/project_templates/basic/domain/general/feedback.yml +25 -0
  79. rasa/cli/project_templates/basic/domain/general/goodbye.yml +9 -0
  80. rasa/cli/project_templates/basic/domain/general/hello.yml +7 -0
  81. rasa/cli/project_templates/basic/domain/general/help.yml +21 -0
  82. rasa/cli/project_templates/basic/domain/general/human_handoff.yml +32 -0
  83. rasa/cli/project_templates/basic/domain/general/show_faqs.yml +14 -0
  84. rasa/cli/project_templates/basic/domain/system/patterns/pattern_cannot_handle.yml +5 -0
  85. rasa/cli/project_templates/basic/domain/system/patterns/pattern_session_start.yml +19 -0
  86. rasa/cli/project_templates/basic/endpoints.yml +67 -0
  87. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +38 -0
  88. rasa/cli/project_templates/default/config.yml +4 -0
  89. rasa/cli/project_templates/default/endpoints.yml +4 -0
  90. rasa/cli/project_templates/finance/README.md +25 -0
  91. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  92. rasa/cli/project_templates/finance/actions/accounts/__init__.py +0 -0
  93. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  94. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  95. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  96. rasa/cli/project_templates/finance/actions/actions.md +15 -0
  97. rasa/cli/project_templates/finance/actions/cards/__init__.py +0 -0
  98. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  99. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  100. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  101. rasa/cli/project_templates/finance/actions/database.py +277 -0
  102. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  103. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  104. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  105. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  106. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  107. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  108. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  109. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  110. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  111. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  112. rasa/cli/project_templates/finance/config.yml +23 -0
  113. rasa/cli/project_templates/finance/credentials.yml +32 -0
  114. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  115. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  116. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  117. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  118. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  119. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  120. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  121. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  122. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  123. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  124. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  125. rasa/cli/project_templates/finance/data/data.md +11 -0
  126. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  127. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  128. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  129. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  130. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  131. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  132. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  133. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  134. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  135. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  136. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  137. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  138. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  139. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  140. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  141. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  142. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  143. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  144. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  145. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  146. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  147. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  148. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  149. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  150. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  151. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  152. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  153. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  154. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  155. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  156. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  157. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  158. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  159. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  160. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  161. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  162. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  163. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  164. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  165. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  166. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  167. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  168. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  169. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  210. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  211. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  212. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  213. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  214. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  215. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  216. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  217. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  218. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  219. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  220. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  221. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  222. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  223. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  224. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  225. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  226. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  227. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  228. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  229. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  230. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  231. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  232. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  233. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  234. rasa/cli/project_templates/finance/domain/domain.md +10 -0
  235. rasa/cli/project_templates/finance/domain/general/agent_details.yml +12 -0
  236. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  237. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  238. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  239. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  240. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  241. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  242. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  243. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  244. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  245. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  246. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  247. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  248. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  249. rasa/cli/project_templates/finance/endpoints.yml +66 -0
  250. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  251. rasa/cli/project_templates/telco/README.md +25 -0
  252. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  253. rasa/cli/project_templates/telco/actions/actions.md +12 -0
  254. rasa/cli/project_templates/telco/actions/billing/__init__.py +0 -0
  255. rasa/cli/project_templates/telco/actions/billing/actions_billing.py +204 -0
  256. rasa/cli/project_templates/telco/actions/general/__init__.py +0 -0
  257. rasa/cli/project_templates/telco/actions/general/action_human_handoff.py +49 -0
  258. rasa/cli/project_templates/telco/actions/network/__init__.py +0 -0
  259. rasa/cli/project_templates/telco/actions/network/actions_get_data_from_db.py +48 -0
  260. rasa/cli/project_templates/telco/actions/network/actions_run_diagnostics.py +28 -0
  261. rasa/cli/project_templates/telco/actions/network/actions_session_start.py +18 -0
  262. rasa/cli/project_templates/telco/config.yml +29 -0
  263. rasa/cli/project_templates/telco/credentials.yml +33 -0
  264. rasa/cli/project_templates/telco/csvs/billing.csv +19 -0
  265. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  266. rasa/cli/project_templates/telco/data/billing/flow_understand_bill.yml +45 -0
  267. rasa/cli/project_templates/telco/data/data.md +11 -0
  268. rasa/cli/project_templates/telco/data/general/bot_challenge.yml +6 -0
  269. rasa/cli/project_templates/telco/data/general/feedback.yml +20 -0
  270. rasa/cli/project_templates/telco/data/general/goodbye.yml +6 -0
  271. rasa/cli/project_templates/telco/data/general/hello.yml +6 -0
  272. rasa/cli/project_templates/telco/data/general/human_handoff.yml +16 -0
  273. rasa/cli/project_templates/telco/data/general/patterns.yml +30 -0
  274. rasa/cli/project_templates/telco/data/network/flow_reboot_router.yml +8 -0
  275. rasa/cli/project_templates/telco/data/network/flow_reset_router.yml +7 -0
  276. rasa/cli/project_templates/telco/data/network/flow_solve_internet_issue.yml +73 -0
  277. rasa/cli/project_templates/telco/docs/docs.md +5 -0
  278. rasa/cli/project_templates/telco/docs/network/reset_vs_rboot_router.txt +1 -0
  279. rasa/cli/project_templates/telco/docs/network/restart_router.txt +6 -0
  280. rasa/cli/project_templates/telco/docs/network/run_speed_test.txt +6 -0
  281. rasa/cli/project_templates/telco/domain/billing/understand_bill.yml +102 -0
  282. rasa/cli/project_templates/telco/domain/domain.md +14 -0
  283. rasa/cli/project_templates/telco/domain/general/bot_challenge.yml +4 -0
  284. rasa/cli/project_templates/telco/domain/general/feedback.yml +25 -0
  285. rasa/cli/project_templates/telco/domain/general/goodbye.yml +7 -0
  286. rasa/cli/project_templates/telco/domain/general/hello.yml +5 -0
  287. rasa/cli/project_templates/telco/domain/general/human_handoff.yml +26 -0
  288. rasa/cli/project_templates/telco/domain/general/patterns.yml +33 -0
  289. rasa/cli/project_templates/telco/domain/network/reboot_router.yml +21 -0
  290. rasa/cli/project_templates/telco/domain/network/reset_router.yml +12 -0
  291. rasa/cli/project_templates/telco/domain/network/run_speed_test.yml +25 -0
  292. rasa/cli/project_templates/telco/domain/network/solve_internet_issue.yml +75 -0
  293. rasa/cli/project_templates/telco/domain/shared.yml +129 -0
  294. rasa/cli/project_templates/telco/endpoints.yml +67 -0
  295. rasa/cli/project_templates/telco/prompts/rephraser_demo_personality_prompt.jinja2 +40 -0
  296. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing/understand_bill.yml +67 -0
  297. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  298. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +46 -0
  299. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/goodbye.yml +9 -0
  300. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +8 -0
  301. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  302. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +23 -0
  303. rasa/cli/project_templates/telco/tests/e2e_test_cases/network/solve_internet_issue.yml +57 -0
  304. rasa/cli/project_templates/tutorial/config.yml +2 -1
  305. rasa/cli/scaffold.py +46 -2
  306. rasa/core/actions/action.py +0 -1
  307. rasa/core/available_agents.py +2 -0
  308. rasa/core/available_endpoints.py +17 -2
  309. rasa/core/channels/channel.py +4 -3
  310. rasa/core/channels/constants.py +3 -0
  311. rasa/core/channels/development_inspector.py +2 -22
  312. rasa/core/channels/inspector/README.md +26 -14
  313. rasa/core/channels/inspector/dist/assets/{arc-cce7e0a8.js → arc-edef10dd.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-e2a49be7.js → blockDiagram-38ab4fdb-49f6762b.js} +1 -1
  315. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-3def7895.js → c4Diagram-3d4e48cf-313c08e6.js} +1 -1
  316. rasa/core/channels/inspector/dist/assets/channel-63aa27d1.js +1 -0
  317. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-e66fe4df.js → classDiagram-70f12bd4-35e41ce9.js} +1 -1
  318. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-eb874aaa.js → classDiagram-v2-f2320105-f346068d.js} +1 -1
  319. rasa/core/channels/inspector/dist/assets/clone-5566bae8.js +1 -0
  320. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-cf934643.js → createText-2e5e7dd3-7a44bce8.js} +1 -1
  321. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-8fdf9155.js → edges-e0da2a9e-d7cf78c7.js} +1 -1
  322. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-6106fb96.js → erDiagram-9861fffd-9813e81c.js} +1 -1
  323. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4c2bb040.js → flowDb-956e92f1-d8ba0870.js} +1 -1
  324. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-f0ff96af.js → flowDiagram-66a62f08-51f0db4d.js} +1 -1
  325. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-32936074.js +1 -0
  326. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-a21707ec.js → flowchart-elk-definition-4a651766-ff9ea384.js} +1 -1
  327. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-c165acb1.js → ganttDiagram-c361ad54-a8e13b6b.js} +1 -1
  328. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-b0564cf1.js → gitGraphDiagram-72cf32ee-3b171c6d.js} +1 -1
  329. rasa/core/channels/inspector/dist/assets/{graph-e557e67a.js → graph-790ef78b.js} +1 -1
  330. rasa/core/channels/inspector/dist/assets/{index-3862675e-1ce60e9e.js → index-3862675e-ecdce073.js} +1 -1
  331. rasa/core/channels/inspector/dist/assets/index-d705da80.js +1352 -0
  332. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-893569e2.js → infoDiagram-f8f76790-f5a422fe.js} +1 -1
  333. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-c29c864f.js → journeyDiagram-49397b02-3185b7ac.js} +1 -1
  334. rasa/core/channels/inspector/dist/assets/{layout-649a5eae.js → layout-837fd3aa.js} +1 -1
  335. rasa/core/channels/inspector/dist/assets/{line-0e5685ed.js → line-7e05afcb.js} +1 -1
  336. rasa/core/channels/inspector/dist/assets/{linear-eaa320bd.js → linear-162eb295.js} +1 -1
  337. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-f35df9e6.js → mindmap-definition-fc14e90a-f4978aee.js} +1 -1
  338. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-78339e96.js → pieDiagram-8a3498a8-b25d0a52.js} +1 -1
  339. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-9b5f2f14.js → quadrantDiagram-120e2f19-63db1afa.js} +1 -1
  340. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d05ddb3a.js → requirementDiagram-deff3bca-1b486cc9.js} +1 -1
  341. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-d9be5dfd.js → sankeyDiagram-04a897e0-7e795291.js} +1 -1
  342. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0f1c4348.js → sequenceDiagram-704730f1-b8aba159.js} +1 -1
  343. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-9ddf63b3.js → stateDiagram-587899a1-41529fd5.js} +1 -1
  344. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-bc2b81ed.js → stateDiagram-v2-d93cdb3a-b241043c.js} +1 -1
  345. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-0a287936.js → styles-6aaf32cf-b5b53234.js} +1 -1
  346. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-e3941990.js → styles-9a916d00-13d138e5.js} +1 -1
  347. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-ce4eca24.js → styles-c10674c1-94cbde3f.js} +1 -1
  348. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-d822b1a8.js → svgDrawCommon-08f97a94-453ae764.js} +1 -1
  349. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-e144c7a7.js → timeline-definition-85554ec2-8dcb88a4.js} +1 -1
  350. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-ab7f4e14.js → xychartDiagram-e933f94c-376af5f0.js} +1 -1
  351. rasa/core/channels/inspector/dist/index.html +2 -2
  352. rasa/core/channels/inspector/index.html +1 -1
  353. rasa/core/channels/inspector/src/App.tsx +16 -42
  354. rasa/core/channels/inspector/src/components/Chat.tsx +2 -3
  355. rasa/core/channels/inspector/src/components/DialogueHistoryStack.tsx +1 -0
  356. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +20 -3
  357. rasa/core/channels/inspector/src/components/LatencyDisplay.tsx +63 -35
  358. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +14 -0
  359. rasa/core/channels/inspector/src/types.ts +32 -7
  360. rasa/core/channels/socketio.py +212 -51
  361. rasa/core/channels/studio_chat.py +59 -57
  362. rasa/core/channels/voice_stream/asr/asr_event.py +1 -1
  363. rasa/core/channels/voice_stream/asr/azure.py +6 -3
  364. rasa/core/channels/voice_stream/asr/deepgram.py +1 -1
  365. rasa/core/channels/voice_stream/audiocodes.py +3 -0
  366. rasa/core/channels/voice_stream/browser_audio.py +53 -3
  367. rasa/core/channels/voice_stream/genesys.py +2 -1
  368. rasa/core/channels/voice_stream/jambonz.py +9 -1
  369. rasa/core/channels/voice_stream/twilio_media_streams.py +16 -0
  370. rasa/core/channels/voice_stream/voice_channel.py +66 -3
  371. rasa/core/constants.py +6 -0
  372. rasa/core/iam_credentials_providers/__init__.py +0 -0
  373. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +66 -0
  374. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +89 -0
  375. rasa/core/policies/enterprise_search_policy.py +4 -7
  376. rasa/core/policies/flows/flow_executor.py +14 -5
  377. rasa/core/policies/ted_policy.py +7 -5
  378. rasa/core/processor.py +32 -0
  379. rasa/core/redis_connection_factory.py +411 -0
  380. rasa/core/run.py +13 -3
  381. rasa/core/tracker_stores/redis_tracker_store.py +32 -14
  382. rasa/core/tracker_stores/sql_tracker_store.py +57 -1
  383. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  384. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +10 -5
  385. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +10 -5
  386. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +20 -12
  387. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +19 -12
  388. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +6 -35
  389. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  390. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
  391. rasa/dialogue_understanding/processor/command_processor.py +35 -0
  392. rasa/engine/graph.py +5 -1
  393. rasa/engine/recipes/default_components.py +78 -10
  394. rasa/engine/recipes/default_recipe.py +41 -1
  395. rasa/engine/storage/local_model_storage.py +83 -3
  396. rasa/graph_components/validators/default_recipe_validator.py +153 -135
  397. rasa/model_manager/model_api.py +4 -5
  398. rasa/model_manager/runner_service.py +1 -1
  399. rasa/model_manager/socket_bridge.py +20 -15
  400. rasa/model_manager/trainer_service.py +12 -9
  401. rasa/model_manager/utils.py +1 -29
  402. rasa/model_manager/warm_rasa_process.py +1 -1
  403. rasa/model_training.py +14 -0
  404. rasa/nlu/classifiers/diet_classifier.py +22 -6
  405. rasa/nlu/classifiers/logistic_regression_classifier.py +18 -0
  406. rasa/nlu/extractors/extractor.py +1 -2
  407. rasa/shared/agents/auth/__init__.py +0 -0
  408. rasa/shared/agents/auth/agent_auth_factory.py +74 -0
  409. rasa/shared/agents/auth/agent_auth_manager.py +86 -0
  410. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  411. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  412. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  413. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  414. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +159 -0
  415. rasa/shared/agents/auth/constants.py +11 -0
  416. rasa/shared/agents/auth/types.py +11 -0
  417. rasa/shared/core/constants.py +1 -0
  418. rasa/shared/core/domain.py +58 -11
  419. rasa/shared/core/events.py +2 -0
  420. rasa/shared/core/flows/constants.py +5 -0
  421. rasa/shared/core/flows/flow_step.py +7 -1
  422. rasa/shared/core/flows/flows_list.py +6 -0
  423. rasa/shared/core/flows/steps/call.py +15 -12
  424. rasa/shared/core/flows/validation.py +238 -44
  425. rasa/shared/core/flows/yaml_flows_io.py +15 -6
  426. rasa/shared/core/slots.py +4 -0
  427. rasa/shared/exceptions.py +12 -0
  428. rasa/shared/importers/importer.py +6 -0
  429. rasa/shared/importers/utils.py +77 -1
  430. rasa/shared/nlu/training_data/schemas/responses.yml +3 -0
  431. rasa/shared/providers/_utils.py +60 -44
  432. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  433. rasa/shared/providers/llm/_base_litellm_client.py +2 -2
  434. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  435. rasa/shared/providers/llm/llm_response.py +4 -4
  436. rasa/shared/utils/common.py +24 -0
  437. rasa/shared/utils/llm.py +2 -1
  438. rasa/shared/utils/mcp/server_connection.py +84 -23
  439. rasa/shared/utils/mcp/utils.py +20 -0
  440. rasa/studio/upload.py +16 -47
  441. rasa/telemetry.py +97 -23
  442. rasa/tracing/config.py +38 -12
  443. rasa/tracing/instrumentation/attribute_extractors.py +5 -1
  444. rasa/tracing/instrumentation/instrumentation.py +85 -8
  445. rasa/utils/common.py +1 -1
  446. rasa/utils/io.py +27 -9
  447. rasa/utils/json_utils.py +6 -1
  448. rasa/utils/log_utils.py +5 -1
  449. rasa/utils/openapi.py +144 -0
  450. rasa/utils/tensorflow/__init__.py +29 -0
  451. rasa/utils/tensorflow/callback.py +1 -1
  452. rasa/utils/tensorflow/crf.py +1 -1
  453. rasa/utils/tensorflow/data_generator.py +21 -8
  454. rasa/utils/tensorflow/layers.py +11 -4
  455. rasa/utils/tensorflow/metrics.py +7 -3
  456. rasa/utils/tensorflow/models.py +41 -6
  457. rasa/utils/tensorflow/rasa_layers.py +6 -4
  458. rasa/utils/tensorflow/transformer.py +2 -3
  459. rasa/utils/train_utils.py +68 -38
  460. rasa/validator.py +18 -16
  461. rasa/version.py +1 -1
  462. rasa_pro-3.14.0.dev8.dist-info/METADATA +199 -0
  463. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/RECORD +466 -156
  464. rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +0 -1
  465. rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +0 -1
  466. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +0 -1
  467. rasa/core/channels/inspector/dist/assets/index-996fe816.js +0 -1353
  468. rasa_pro-3.14.0.dev7.dist-info/METADATA +0 -190
  469. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/NOTICE +0 -0
  470. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/WHEEL +0 -0
  471. {rasa_pro-3.14.0.dev7.dist-info → rasa_pro-3.14.0.dev8.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,64 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "content": {
6
+ "type": "array",
7
+ "items": {
8
+ "type": "object",
9
+ "properties": {
10
+ "type": {
11
+ "type": "string"
12
+ },
13
+ "source": {
14
+ "type": "object",
15
+ "properties": {
16
+ "content": {
17
+ "type": "array",
18
+ "items": {
19
+ "type": "object",
20
+ "properties": {
21
+ "type": {
22
+ "type": "string"
23
+ },
24
+ "media_type": {
25
+ "type": "string"
26
+ },
27
+ "text": {
28
+ "type": "string"
29
+ },
30
+ "data": {
31
+ "type": "string"
32
+ }
33
+ }
34
+ }
35
+ },
36
+ "type": {
37
+ "type": "string"
38
+ },
39
+ "media_type": {
40
+ "type": "string"
41
+ },
42
+ "data": {
43
+ "type": "string"
44
+ }
45
+ }
46
+ },
47
+ "title": {
48
+ "type": "string"
49
+ },
50
+ "context": {
51
+ "type": "string"
52
+ },
53
+ "record_type": {
54
+ "type": "string"
55
+ },
56
+ "url": {
57
+ "type": "string"
58
+ }
59
+ }
60
+ }
61
+ }
62
+ },
63
+ "required": ["content"]
64
+ }
@@ -0,0 +1,238 @@
1
+ import asyncio
2
+ import json
3
+ import os
4
+ from contextlib import asynccontextmanager
5
+ from typing import AsyncGenerator, List, Optional
6
+
7
+ import openai
8
+ import structlog
9
+ from openai.types.chat import ChatCompletion
10
+
11
+ from rasa.builder import config
12
+ from rasa.builder.copilot.constants import ROLE_USER
13
+ from rasa.builder.document_retrieval.constants import (
14
+ INKEEP_API_KEY_ENV_VAR,
15
+ INKEEP_DOCUMENT_RETRIEVAL_MODEL,
16
+ INKEEP_RAG_RESPONSE_SCHEMA_PATH,
17
+ )
18
+ from rasa.builder.document_retrieval.models import Document
19
+ from rasa.builder.exceptions import DocumentRetrievalError
20
+ from rasa.shared.utils.io import read_json_file
21
+
22
+ structlogger = structlog.get_logger()
23
+
24
+
25
+ class InKeepDocumentRetrieval:
26
+ """Handles the document retrieval from InKeep AI."""
27
+
28
+ def __init__(
29
+ self,
30
+ api_key: Optional[str] = None,
31
+ ):
32
+ self._rag_schema = read_json_file(INKEEP_RAG_RESPONSE_SCHEMA_PATH)
33
+ self._api_key = api_key or os.getenv(INKEEP_API_KEY_ENV_VAR)
34
+
35
+ @property
36
+ def api_key(self) -> str:
37
+ """Resolve the correct API key/token based on proxy usage."""
38
+ using_proxy = bool(config.HELLO_LLM_PROXY_BASE_URL)
39
+ if using_proxy:
40
+ if not config.RASA_PRO_LICENSE:
41
+ raise DocumentRetrievalError(
42
+ "HELLO_LLM_PROXY_BASE_URL is set but RASA_PRO_LICENSE is missing. "
43
+ "Proxy requires a Rasa Pro license token for authentication."
44
+ )
45
+ return config.RASA_PRO_LICENSE
46
+
47
+ if not self._api_key:
48
+ raise DocumentRetrievalError(
49
+ "INKEEP_API_KEY is missing. Provide it via env INKEEP_API_KEY "
50
+ "or pass api_key= to InKeepDocumentRetrieval."
51
+ )
52
+ return self._api_key
53
+
54
+ async def retrieve_documents(
55
+ self, query: str, temperature: float = 0.0, timeout: float = 30.0
56
+ ) -> List[Document]:
57
+ """Retrieve relevant documents using InKeep AI based on the given query.
58
+
59
+ Args:
60
+ query: The search query
61
+ temperature: Controls randomness in generation (0.0 for deterministic)
62
+ timeout: Timeout for the API call
63
+
64
+ Returns:
65
+ List of Document objects containing retrieved content
66
+
67
+ Raises:
68
+ DocumentRetrievalError: When document retrieval fails due to:
69
+ - Empty response from InKeep AI API
70
+ - OpenAI API errors (authentication, rate limiting, etc.)
71
+ - Request timeout
72
+ - Unexpected errors during API communication
73
+ """
74
+ try:
75
+ response = await self._call_inkeep_rag_api(
76
+ query=query,
77
+ temperature=temperature,
78
+ timeout=timeout,
79
+ )
80
+ documents = self._parse_documents_from_response(response)
81
+ return documents
82
+ except DocumentRetrievalError as e:
83
+ structlogger.error(
84
+ "inkeep_document_retrieval.retrieve_documents.error",
85
+ event_info="InKeep Document Retrieval: Error",
86
+ query=query,
87
+ error=str(e),
88
+ )
89
+ raise e
90
+
91
+ async def _call_inkeep_rag_api(
92
+ self, query: str, temperature: float, timeout: float
93
+ ) -> ChatCompletion:
94
+ """Call InKeep AI RAG's API endpoint and return the response content.
95
+
96
+ Args:
97
+ query: The search query to send to InKeep
98
+ temperature: Controls randomness in generation (0.0 for deterministic)
99
+ timeout: Timeout for the API call
100
+
101
+ Returns:
102
+ The response content from InKeep AI. The response is made of the retrieved
103
+ documents.
104
+
105
+ Raises:
106
+ LLMGenerationError: If the API call fails or returns invalid response
107
+ """
108
+ try:
109
+ async with self._get_client() as client:
110
+ response = await client.chat.completions.create(
111
+ model=INKEEP_DOCUMENT_RETRIEVAL_MODEL,
112
+ messages=[{"role": ROLE_USER, "content": query}],
113
+ temperature=temperature,
114
+ timeout=timeout,
115
+ response_format={
116
+ "type": "json_schema",
117
+ "json_schema": self._rag_schema,
118
+ },
119
+ )
120
+
121
+ if not response.choices[0].message.content:
122
+ structlogger.warning(
123
+ "inkeep_document_retrieval.empty_response",
124
+ event_info="InKeep AI returned an empty response. ",
125
+ query=query,
126
+ response_content=response.choices[0].message.content,
127
+ )
128
+ raise DocumentRetrievalError(
129
+ "InKeep Document Retrieval: Empty response"
130
+ )
131
+
132
+ return response
133
+
134
+ except openai.OpenAIError as e:
135
+ structlogger.error(
136
+ "inkeep_document_retrieval.call_inkeep_rag_api.api_error",
137
+ event_info="InKeep Document Retrieval: API error",
138
+ query=query,
139
+ error=e,
140
+ )
141
+ raise DocumentRetrievalError(f"InKeep Document Retrieval: API error: {e}")
142
+ except asyncio.TimeoutError as e:
143
+ structlogger.error(
144
+ "inkeep_document_retrieval.call_inkeep_rag_api.timeout_error",
145
+ event_info="InKeep Document Retrieval: Timeout error",
146
+ query=query,
147
+ error=e,
148
+ )
149
+ raise DocumentRetrievalError(f"InKeep AI request timed out: {e}")
150
+ except Exception as e:
151
+ structlogger.error(
152
+ "inkeep_document_retrieval.call_inkeep_rag_api.error",
153
+ event_info="InKeep Document Retrieval: Error",
154
+ query=query,
155
+ error=e,
156
+ )
157
+ raise DocumentRetrievalError(
158
+ f"InKeep Document Retrieval: Unexpected error: {e}"
159
+ )
160
+
161
+ @asynccontextmanager
162
+ async def _get_client(self) -> AsyncGenerator[openai.AsyncOpenAI, None]:
163
+ """Get or create client that handles the API calls to InKeep AI."""
164
+ # Ensure trailing slash to match client expectations/tests
165
+ base_url = f"{config.INKEEP_BASE_URL.rstrip('/')}/"
166
+ client = openai.AsyncOpenAI(base_url=base_url, api_key=self.api_key)
167
+ structlogger.debug("inkeep_document_retrieval._get_client", base_url=base_url)
168
+
169
+ try:
170
+ yield client
171
+ except Exception as e:
172
+ structlogger.error(
173
+ "inkeep_document_retrieval.client_error",
174
+ event_info="InKeep Document Retrieval: Client error",
175
+ error=str(e),
176
+ )
177
+ raise
178
+
179
+ def _parse_documents_from_response(
180
+ self, response: ChatCompletion
181
+ ) -> List[Document]:
182
+ """Parse the InKeep AI response into Document objects.
183
+
184
+ Args:
185
+ response: ChatCompletion response from InKeep AI's RAG model.
186
+
187
+ Returns:
188
+ List of Document objects. Empty list is returned if the response is empty
189
+ or if the response is invalid.
190
+ """
191
+ try:
192
+ content = response.choices[0].message.content
193
+ if not content:
194
+ return []
195
+
196
+ response_data = json.loads(content)
197
+ documents = []
198
+
199
+ for item in response_data.get("content", []):
200
+ try:
201
+ document = Document.from_inkeep_rag_response(item)
202
+ documents.append(document)
203
+ except Exception as e:
204
+ structlogger.warning(
205
+ "inkeep_document_retrieval.invalid_document_skipped",
206
+ event_info=(
207
+ "InKeep Document Retrieval: Invalid document structure "
208
+ "skipped. Returning empty list for this item."
209
+ ),
210
+ error=str(e),
211
+ item=item,
212
+ )
213
+ # Continue processing other items, skip this invalid one
214
+ continue
215
+
216
+ return documents
217
+
218
+ except json.JSONDecodeError as e:
219
+ structlogger.warning(
220
+ "inkeep_document_retrieval.parse_documents_from_response"
221
+ ".parse_response_failed",
222
+ event_info=(
223
+ "InKeep Document Retrieval: Parse response failed. "
224
+ "Returning empty list.",
225
+ ),
226
+ error=str(e),
227
+ )
228
+ return []
229
+ except Exception as e:
230
+ structlogger.error(
231
+ "inkeep_document_retrieval.parse_documents_from_response.error",
232
+ event_info=(
233
+ "InKeep Document Retrieval: Parse response error. "
234
+ "Returning empty list.",
235
+ ),
236
+ error=str(e),
237
+ )
238
+ return []
@@ -0,0 +1,62 @@
1
+ from typing import Any, Dict, Optional
2
+
3
+ import structlog
4
+ from pydantic import BaseModel, Field
5
+
6
+ structlogger = structlog.get_logger()
7
+
8
+
9
+ class Document(BaseModel):
10
+ """Model for document retrieval results."""
11
+
12
+ content: str = Field(...)
13
+ url: Optional[str] = Field(default=None)
14
+ title: Optional[str] = Field(default=None)
15
+ metadata: Optional[Dict[str, Any]] = Field(default=None)
16
+
17
+ @classmethod
18
+ def from_inkeep_rag_response(cls, rag_item: Dict[str, Any]) -> "Document":
19
+ """Create a Document object from a single InKeep RAG response item.
20
+
21
+ Args:
22
+ rag_item: Single item from InKeep RAG response
23
+
24
+ Returns:
25
+ Document object with extracted content and metadata
26
+ """
27
+ source = rag_item.get("source", {})
28
+ text_content = cls._extract_text_from_source(source)
29
+
30
+ return cls(
31
+ content=text_content.strip() if text_content else "",
32
+ url=rag_item.get("url"),
33
+ title=rag_item.get("title"),
34
+ metadata={
35
+ "type": rag_item.get("type"),
36
+ "record_type": rag_item.get("record_type"),
37
+ "context": rag_item.get("context"),
38
+ "media_type": source.get("media_type"),
39
+ },
40
+ )
41
+
42
+ @staticmethod
43
+ def _extract_text_from_source(source: Dict[str, Any]) -> str:
44
+ """Extract text content from InKeep source object.
45
+
46
+ Args:
47
+ source: Source object from InKeep RAG response
48
+
49
+ Returns:
50
+ Extracted text content
51
+ """
52
+ # Try to extract from content array first
53
+ if "content" in source:
54
+ text_parts = []
55
+ for content_item in source["content"]:
56
+ if content_item.get("type") == "text" and content_item.get("text"):
57
+ text_parts.append(content_item["text"])
58
+ if text_parts:
59
+ return "\n".join(text_parts)
60
+
61
+ # Fallback to source data
62
+ return source.get("data", "")
@@ -0,0 +1,140 @@
1
+ """Download utilities for bot projects."""
2
+
3
+ import io
4
+ import os
5
+ import sys
6
+ import tarfile
7
+ from textwrap import dedent
8
+ from typing import Dict, Optional
9
+
10
+
11
+ def _get_env_content() -> str:
12
+ """Generate .env file content."""
13
+ return f"RASA_PRO_LICENSE={os.getenv('RASA_PRO_LICENSE')}\n"
14
+
15
+
16
+ def _get_python_version_content() -> str:
17
+ """Generate .python-version file content with current Python version."""
18
+ return f"{sys.version_info.major}.{sys.version_info.minor}\n"
19
+
20
+
21
+ def _get_pyproject_toml_content(project_id: str) -> str:
22
+ """Generate pyproject.toml file content."""
23
+ return dedent(
24
+ f"""
25
+ [project]
26
+ name = "{project_id}"
27
+ version = "0.1.0"
28
+ description = "Add your description for your Rasa bot here"
29
+ readme = "README.md"
30
+ dependencies = ["rasa-pro>=3.13"]
31
+ requires-python = ">={sys.version_info.major}.{sys.version_info.minor}"
32
+ """
33
+ )
34
+
35
+
36
+ def _get_readme_content() -> str:
37
+ """Generate README.md file content with basic instructions."""
38
+ return dedent(
39
+ """
40
+ # Rasa Assistant
41
+
42
+ This is your Rasa assistant project. Below are the basic commands to
43
+ get started.
44
+
45
+ ## Prerequisites
46
+ Make sure you have [uv](https://docs.astral.sh/uv/) installed.
47
+
48
+ ## Training the Assistant
49
+
50
+ To train your assistant with the current configuration and training data:
51
+
52
+ ```bash
53
+ uv run rasa train
54
+ ```
55
+
56
+ This will create a model in the `models/` directory.
57
+
58
+ ## Testing the Assistant
59
+
60
+ To test your assistant interactively in the command line:
61
+
62
+ ```bash
63
+ uv run rasa inspect
64
+ ```
65
+
66
+ ## Running the Assistant
67
+
68
+ To start the Rasa server:
69
+
70
+ ```bash
71
+ uv run rasa run
72
+ ```
73
+
74
+ The server will be available at `http://localhost:5005`.
75
+
76
+ ## Project Structure
77
+
78
+ - `config.yml` - Configuration for your NLU pipeline and policies
79
+ - `domain.yml` - Defines intents, entities, slots, responses, and actions
80
+ - `data/` - Flows of your bot
81
+ - `actions/` - Custom action code (if any)
82
+
83
+ ## Next Steps
84
+
85
+ 1. Customize your domain and flows
86
+ 2. Train your model with `rasa train`
87
+ 3. Test your assistant with `rasa inspect`
88
+ 4. Deploy your assistant with `rasa run`
89
+
90
+ For more information, visit the [Rasa documentation](https://rasa.com/docs/).
91
+ """
92
+ )
93
+
94
+
95
+ def _add_file_to_tar(tar: tarfile.TarFile, filename: str, content: str) -> None:
96
+ """Add a file with the given content to the tar archive.
97
+
98
+ Args:
99
+ tar: The tar file object to add to
100
+ filename: Name of the file in the archive
101
+ content: Content of the file as a string
102
+ """
103
+ file_data = content.encode("utf-8")
104
+ tarinfo = tarfile.TarInfo(name=filename)
105
+ tarinfo.size = len(file_data)
106
+ tar.addfile(tarinfo, io.BytesIO(file_data))
107
+
108
+
109
+ def create_bot_project_archive(
110
+ bot_files: Dict[str, Optional[str]], project_id: str
111
+ ) -> bytes:
112
+ """Create a tar.gz archive containing bot files and additional project files.
113
+
114
+ Args:
115
+ bot_files: Dictionary mapping file names to their content
116
+ project_id: Name of the project for the archive filename and pyproject.toml
117
+
118
+ Returns:
119
+ bytes: The tar.gz archive data
120
+ """
121
+ tar_buffer = io.BytesIO()
122
+
123
+ with tarfile.open(fileobj=tar_buffer, mode="w:gz") as tar:
124
+ # Add bot files to archive
125
+ for filename, content in bot_files.items():
126
+ if content is not None:
127
+ _add_file_to_tar(tar, filename, content)
128
+
129
+ # Add additional project files
130
+ _add_file_to_tar(tar, ".env", _get_env_content())
131
+ _add_file_to_tar(tar, ".python-version", _get_python_version_content())
132
+ _add_file_to_tar(
133
+ tar,
134
+ "pyproject.toml",
135
+ _get_pyproject_toml_content(project_id),
136
+ )
137
+ _add_file_to_tar(tar, "README.md", _get_readme_content())
138
+
139
+ tar_buffer.seek(0)
140
+ return tar_buffer.getvalue()
@@ -0,0 +1,91 @@
1
+ """Custom exceptions for the prompt-to-bot service."""
2
+
3
+ from typing import Any, Dict, List, Optional
4
+
5
+
6
+ class PromptToBotError(Exception):
7
+ """Base exception for prompt-to-bot service."""
8
+
9
+ pass
10
+
11
+
12
+ class ValidationError(PromptToBotError):
13
+ """Raised when Rasa project validation fails."""
14
+
15
+ def __init__(
16
+ self, message: str, validation_logs: Optional[List[Dict[str, Any]]] = None
17
+ ):
18
+ super().__init__(message)
19
+ self.validation_logs = validation_logs or []
20
+
21
+ def get_logs(self, log_levels: Optional[List[str]]) -> List[Dict[str, Any]]:
22
+ """Get logs filtered by given log levels."""
23
+ if len(self.validation_logs) == 0:
24
+ return []
25
+
26
+ error_log_entries: List[Dict[str, Any]] = []
27
+ for log_entry in self.validation_logs:
28
+ if log_levels is not None and log_entry.get("log_level") in log_levels:
29
+ error_log_entries.append(log_entry)
30
+
31
+ return error_log_entries
32
+
33
+ def get_error_message_with_logs(
34
+ self, log_levels: Optional[List[str]] = None
35
+ ) -> str:
36
+ """Get the error message with validation logs for specified log levels.
37
+
38
+ Args:
39
+ log_levels: List of log levels to include. If None, includes all logs.
40
+
41
+ Returns:
42
+ Error message with validation logs appended.
43
+ """
44
+ error_message = str(self)
45
+
46
+ # Include all logs when no specific levels are specified
47
+ logs = self.validation_logs if log_levels is None else self.get_logs(log_levels)
48
+
49
+ if logs:
50
+ logs_text = "\n".join([str(log) for log in logs])
51
+ error_message += f"\n\nValidation Logs:\n{logs_text}\n"
52
+
53
+ return error_message
54
+
55
+
56
+ class TrainingError(PromptToBotError):
57
+ """Raised when model training fails."""
58
+
59
+ pass
60
+
61
+
62
+ class LLMGenerationError(PromptToBotError):
63
+ """Raised when LLM generation fails."""
64
+
65
+ pass
66
+
67
+
68
+ class DocumentRetrievalError(PromptToBotError):
69
+ """Raised when document retrieval fails."""
70
+
71
+ pass
72
+
73
+
74
+ class SchemaValidationError(PromptToBotError):
75
+ """Raised when schema validation fails."""
76
+
77
+ pass
78
+
79
+
80
+ class AgentLoadError(PromptToBotError):
81
+ """Raised when agent loading fails."""
82
+
83
+ pass
84
+
85
+
86
+ class ProjectGenerationError(PromptToBotError):
87
+ """Raised when project generation fails after retries."""
88
+
89
+ def __init__(self, message: str, attempts: int):
90
+ super().__init__(f"{message} (failed after {attempts} attempts)")
91
+ self.attempts = attempts
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,9 @@
1
+ from typing import Literal
2
+
3
+ LAKERA_API_KEY_ENV_VAR = "LAKERA_API_KEY"
4
+ LAKERA_GUARD_ENDPOINT = "guard"
5
+ LAKERA_GUARD_RESULTS_ENDPOINT = "guard/results"
6
+
7
+ BLOCK_SCOPE_USER: Literal["user"] = "user"
8
+ BLOCK_SCOPE_PROJECT: Literal["project"] = "project"
9
+ BlockScope = Literal["user", "project"]
@@ -0,0 +1,4 @@
1
+ class GuardrailsError(Exception):
2
+ """Raised when a guardrails error occurs."""
3
+
4
+ pass