rasa-pro 3.14.0.dev3__py3-none-any.whl → 3.14.0.dev5__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 (437) hide show
  1. rasa/api.py +0 -5
  2. rasa/builder/README.md +120 -0
  3. rasa/builder/auth.py +176 -0
  4. rasa/builder/config.py +115 -0
  5. rasa/builder/copilot/constants.py +25 -0
  6. rasa/builder/copilot/copilot.py +372 -0
  7. rasa/builder/copilot/copilot_response_handler.py +487 -0
  8. rasa/builder/copilot/copilot_templated_message_provider.py +58 -0
  9. rasa/builder/copilot/exceptions.py +20 -0
  10. rasa/builder/copilot/models.py +431 -0
  11. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +726 -0
  12. rasa/builder/copilot/telemetry.py +195 -0
  13. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +16 -0
  14. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +26 -0
  15. rasa/builder/document_retrieval/constants.py +15 -0
  16. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +64 -0
  17. rasa/builder/document_retrieval/inkeep_document_retrieval.py +238 -0
  18. rasa/builder/document_retrieval/models.py +62 -0
  19. rasa/builder/download.py +140 -0
  20. rasa/builder/exceptions.py +55 -0
  21. rasa/builder/guardrails/__init__.py +1 -0
  22. rasa/builder/guardrails/constants.py +3 -0
  23. rasa/builder/guardrails/exceptions.py +4 -0
  24. rasa/builder/guardrails/lakera.py +206 -0
  25. rasa/builder/guardrails/models.py +199 -0
  26. rasa/builder/guardrails/utils.py +305 -0
  27. rasa/builder/job_manager.py +87 -0
  28. rasa/builder/jobs.py +234 -0
  29. rasa/builder/llm_service.py +246 -0
  30. rasa/builder/logging_utils.py +209 -0
  31. rasa/builder/main.py +174 -0
  32. rasa/builder/models.py +197 -0
  33. rasa/builder/project_generator.py +450 -0
  34. rasa/builder/project_info.py +72 -0
  35. rasa/builder/scrape_rasa_docs.py +97 -0
  36. rasa/builder/service.py +1142 -0
  37. rasa/builder/shared/tracker_context.py +212 -0
  38. rasa/builder/skill_to_bot_prompt.jinja2 +164 -0
  39. rasa/builder/training_service.py +132 -0
  40. rasa/builder/validation_service.py +93 -0
  41. rasa/cli/arguments/default_arguments.py +0 -12
  42. rasa/cli/arguments/run.py +0 -2
  43. rasa/cli/dialogue_understanding_test.py +0 -4
  44. rasa/cli/e2e_test.py +0 -4
  45. rasa/cli/inspect.py +0 -3
  46. rasa/cli/llm_fine_tuning.py +0 -5
  47. rasa/cli/project_templates/basic/actions/action_api.py +15 -0
  48. rasa/cli/project_templates/basic/actions/action_human_handoff.py +44 -0
  49. rasa/cli/project_templates/basic/config.yml +23 -0
  50. rasa/cli/project_templates/basic/credentials.yml +34 -0
  51. rasa/cli/project_templates/basic/data/general/feedback.yml +20 -0
  52. rasa/cli/project_templates/basic/data/general/goodbye.yml +6 -0
  53. rasa/cli/project_templates/basic/data/general/hello.yml +7 -0
  54. rasa/cli/project_templates/basic/data/general/help.yml +6 -0
  55. rasa/cli/project_templates/basic/data/general/human_handoff.yml +16 -0
  56. rasa/cli/project_templates/basic/data/general/welcome.yml +9 -0
  57. rasa/cli/project_templates/basic/data/system/pattern_completed.yml +7 -0
  58. rasa/cli/project_templates/basic/data/system/pattern_correction.yml +7 -0
  59. rasa/cli/project_templates/basic/data/system/pattern_search.yml +8 -0
  60. rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +8 -0
  61. rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +65 -0
  62. rasa/cli/project_templates/basic/docs/template.txt +7 -0
  63. rasa/cli/project_templates/basic/domain/general/assistant_details.yml +12 -0
  64. rasa/cli/project_templates/basic/domain/general/bot_identity.yml +5 -0
  65. rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +5 -0
  66. rasa/cli/project_templates/basic/domain/general/feedback.yml +28 -0
  67. rasa/cli/project_templates/basic/domain/general/goodbye.yml +7 -0
  68. rasa/cli/project_templates/basic/domain/general/help.yml +5 -0
  69. rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +35 -0
  70. rasa/cli/project_templates/basic/domain/general/utils.yml +13 -0
  71. rasa/cli/project_templates/basic/domain/general/welcome.yml +7 -0
  72. rasa/cli/project_templates/basic/endpoints.yml +73 -0
  73. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  74. rasa/cli/project_templates/finance/actions/__init__.py +46 -0
  75. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +47 -0
  76. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +40 -0
  77. rasa/cli/project_templates/finance/actions/action_session_start.py +74 -0
  78. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +48 -0
  79. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +36 -0
  80. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +54 -0
  81. rasa/cli/project_templates/finance/actions/database.py +277 -0
  82. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  83. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +52 -0
  84. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +51 -0
  85. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +40 -0
  86. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +40 -0
  87. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +46 -0
  88. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +18 -0
  89. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +49 -0
  90. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +19 -0
  91. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +36 -0
  92. rasa/cli/project_templates/finance/config.yml +21 -0
  93. rasa/cli/project_templates/finance/credentials.yml +32 -0
  94. rasa/cli/project_templates/finance/csvs/accounts.csv +8 -0
  95. rasa/cli/project_templates/finance/csvs/advisors.csv +7 -0
  96. rasa/cli/project_templates/finance/csvs/appointments.csv +211 -0
  97. rasa/cli/project_templates/finance/csvs/branches.csv +10 -0
  98. rasa/cli/project_templates/finance/csvs/cards.csv +11 -0
  99. rasa/cli/project_templates/finance/csvs/payees.csv +11 -0
  100. rasa/cli/project_templates/finance/csvs/transactions.csv +71 -0
  101. rasa/cli/project_templates/finance/csvs/users.csv +4 -0
  102. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +10 -0
  103. rasa/cli/project_templates/finance/data/cards/block_card.yml +66 -0
  104. rasa/cli/project_templates/finance/data/cards/select_card.yml +12 -0
  105. rasa/cli/project_templates/finance/data/general/bot_identity.yml +6 -0
  106. rasa/cli/project_templates/finance/data/general/feedback.yml +20 -0
  107. rasa/cli/project_templates/finance/data/general/goodbye.yml +6 -0
  108. rasa/cli/project_templates/finance/data/general/hello.yml +7 -0
  109. rasa/cli/project_templates/finance/data/general/help.yml +9 -0
  110. rasa/cli/project_templates/finance/data/general/human_handoff.yml +16 -0
  111. rasa/cli/project_templates/finance/data/general/welcome.yml +9 -0
  112. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +5 -0
  113. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +7 -0
  114. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +7 -0
  115. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +8 -0
  116. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +8 -0
  117. rasa/cli/project_templates/finance/data/system/source/accounts.json +51 -0
  118. rasa/cli/project_templates/finance/data/system/source/advisors.json +44 -0
  119. rasa/cli/project_templates/finance/data/system/source/appointments.json +1474 -0
  120. rasa/cli/project_templates/finance/data/system/source/branches.json +47 -0
  121. rasa/cli/project_templates/finance/data/system/source/cards.json +72 -0
  122. rasa/cli/project_templates/finance/data/system/source/payees.json +74 -0
  123. rasa/cli/project_templates/finance/data/system/source/transactions.json +492 -0
  124. rasa/cli/project_templates/finance/data/system/source/users.json +29 -0
  125. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +29 -0
  126. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +5 -0
  127. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +21 -0
  128. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +67 -0
  129. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +8 -0
  130. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +8 -0
  131. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +8 -0
  132. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +8 -0
  133. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +8 -0
  134. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +7 -0
  135. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +8 -0
  136. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +8 -0
  137. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +8 -0
  138. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +8 -0
  139. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +8 -0
  140. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +8 -0
  141. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +8 -0
  142. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +8 -0
  143. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +8 -0
  144. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +8 -0
  145. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +8 -0
  146. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +8 -0
  147. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +8 -0
  148. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +8 -0
  149. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +50 -0
  150. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +50 -0
  151. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +48 -0
  152. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +50 -0
  153. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +50 -0
  154. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +47 -0
  155. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +50 -0
  156. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +50 -0
  157. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +47 -0
  158. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +50 -0
  159. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +50 -0
  160. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +50 -0
  161. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +47 -0
  162. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +50 -0
  163. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +50 -0
  164. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +47 -0
  165. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +50 -0
  166. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +50 -0
  167. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +47 -0
  168. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +50 -0
  169. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +50 -0
  170. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +47 -0
  171. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +47 -0
  172. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +50 -0
  173. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +50 -0
  174. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +47 -0
  175. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +50 -0
  176. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +50 -0
  177. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +47 -0
  178. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +50 -0
  179. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +50 -0
  180. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +47 -0
  181. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +50 -0
  182. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +50 -0
  183. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +50 -0
  184. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +47 -0
  185. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +50 -0
  186. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +50 -0
  187. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +47 -0
  188. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +50 -0
  189. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +50 -0
  190. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +47 -0
  191. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +50 -0
  192. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +50 -0
  193. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +50 -0
  194. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +47 -0
  195. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +50 -0
  196. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +50 -0
  197. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +47 -0
  198. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +50 -0
  199. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +50 -0
  200. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +47 -0
  201. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +50 -0
  202. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +50 -0
  203. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +47 -0
  204. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +47 -0
  205. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +50 -0
  206. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +50 -0
  207. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +50 -0
  208. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +50 -0
  209. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +47 -0
  210. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +11 -0
  211. rasa/cli/project_templates/finance/domain/cards/block_card.yml +101 -0
  212. rasa/cli/project_templates/finance/domain/cards/select_card.yml +12 -0
  213. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +12 -0
  214. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +5 -0
  215. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +5 -0
  216. rasa/cli/project_templates/finance/domain/general/defaults.yml +24 -0
  217. rasa/cli/project_templates/finance/domain/general/feedback.yml +28 -0
  218. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  219. rasa/cli/project_templates/finance/domain/general/help.yml +5 -0
  220. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +30 -0
  221. rasa/cli/project_templates/finance/domain/general/utils.yml +13 -0
  222. rasa/cli/project_templates/finance/domain/general/welcome.yml +8 -0
  223. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +47 -0
  224. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +4 -0
  225. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +16 -0
  226. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +79 -0
  227. rasa/cli/project_templates/finance/endpoints.yml +63 -0
  228. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +19 -0
  229. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  230. rasa/cli/project_templates/telco/actions/actions_billing.py +204 -0
  231. rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +48 -0
  232. rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +28 -0
  233. rasa/cli/project_templates/telco/actions/actions_session_start.py +18 -0
  234. rasa/cli/project_templates/telco/config.yml +25 -0
  235. rasa/cli/project_templates/telco/credentials.yml +33 -0
  236. rasa/cli/project_templates/telco/csvs/billing.csv +10 -0
  237. rasa/cli/project_templates/telco/csvs/customers.csv +5 -0
  238. rasa/cli/project_templates/telco/data/flows/flow_global.yml +5 -0
  239. rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +8 -0
  240. rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +7 -0
  241. rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +73 -0
  242. rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +45 -0
  243. rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +7 -0
  244. rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +6 -0
  245. rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +7 -0
  246. rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +9 -0
  247. rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +1 -0
  248. rasa/cli/project_templates/telco/docs/restart_router.txt +6 -0
  249. rasa/cli/project_templates/telco/docs/run_speed_test.txt +6 -0
  250. rasa/cli/project_templates/telco/domain/domain_global.yml +29 -0
  251. rasa/cli/project_templates/telco/domain/domain_patterns.yml +17 -0
  252. rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +20 -0
  253. rasa/cli/project_templates/telco/domain/domain_reset_router.yml +11 -0
  254. rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +24 -0
  255. rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +74 -0
  256. rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +102 -0
  257. rasa/cli/project_templates/telco/endpoints.yml +60 -0
  258. rasa/{dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 → cli/project_templates/telco/prompts/command-generator.jinja2} +3 -7
  259. rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +62 -0
  260. rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +130 -0
  261. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +68 -0
  262. rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +13 -0
  263. rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +47 -0
  264. rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +21 -0
  265. rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +15 -0
  266. rasa/cli/project_templates/tutorial/config.yml +2 -1
  267. rasa/cli/run.py +0 -4
  268. rasa/cli/scaffold.py +46 -2
  269. rasa/cli/shell.py +0 -3
  270. rasa/constants.py +0 -6
  271. rasa/core/actions/action.py +2 -43
  272. rasa/core/agent.py +0 -16
  273. rasa/core/available_endpoints.py +0 -30
  274. rasa/core/channels/channel.py +4 -3
  275. rasa/core/channels/constants.py +3 -0
  276. rasa/core/channels/development_inspector.py +1 -1
  277. rasa/core/channels/inspector/dist/assets/{arc-2e78c586.js → arc-18042c22.js} +1 -1
  278. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-806b712e.js → blockDiagram-38ab4fdb-fdd6bcfa.js} +1 -1
  279. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0745efa9.js → c4Diagram-3d4e48cf-f5ae6786.js} +1 -1
  280. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +1 -0
  281. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-7bd1082b.js → classDiagram-70f12bd4-81efba3e.js} +1 -1
  282. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-d937ba49.js → classDiagram-v2-f2320105-3b6b6a92.js} +1 -1
  283. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +1 -0
  284. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-a2a564ca.js → createText-2e5e7dd3-31422447.js} +1 -1
  285. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-b5256940.js → edges-e0da2a9e-518a90db.js} +1 -1
  286. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-e6883ad2.js → erDiagram-9861fffd-a6d3c25a.js} +1 -1
  287. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e576fc02.js → flowDb-956e92f1-e048c2be.js} +1 -1
  288. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-2e298d01.js → flowDiagram-66a62f08-c7474c91.js} +1 -1
  289. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +1 -0
  290. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-dd7b150a.js → flowchart-elk-definition-4a651766-cb4d8723.js} +1 -1
  291. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-5b79575c.js → ganttDiagram-c361ad54-346636a2.js} +1 -1
  292. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-3016f40a.js → gitGraphDiagram-72cf32ee-7c508874.js} +1 -1
  293. rasa/core/channels/inspector/dist/assets/{graph-3e19170f.js → graph-14702d8a.js} +1 -1
  294. rasa/core/channels/inspector/dist/assets/{index-3862675e-eb9c86de.js → index-3862675e-f18b534b.js} +1 -1
  295. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +1335 -0
  296. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-b4280e4d.js → infoDiagram-f8f76790-64154b83.js} +1 -1
  297. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-556091f8.js → journeyDiagram-49397b02-833a5f95.js} +1 -1
  298. rasa/core/channels/inspector/dist/assets/{layout-08436411.js → layout-5a3b2123.js} +1 -1
  299. rasa/core/channels/inspector/dist/assets/{line-683c4f3b.js → line-2272a8c7.js} +1 -1
  300. rasa/core/channels/inspector/dist/assets/{linear-cee6d791.js → linear-35bcf273.js} +1 -1
  301. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-a0bf0b1a.js → mindmap-definition-fc14e90a-92dcb0e9.js} +1 -1
  302. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-3730d5c4.js → pieDiagram-8a3498a8-94dbc900.js} +1 -1
  303. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-12a20fed.js → quadrantDiagram-120e2f19-8b7a9c33.js} +1 -1
  304. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-b9732102.js → requirementDiagram-deff3bca-6f7eab81.js} +1 -1
  305. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-a2e72776.js → sankeyDiagram-04a897e0-f43e581d.js} +1 -1
  306. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-8b7a76bb.js → sequenceDiagram-704730f1-0bcbefc3.js} +1 -1
  307. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-e65853ac.js → stateDiagram-587899a1-b8a74083.js} +1 -1
  308. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-6f58a44b.js → stateDiagram-v2-d93cdb3a-2070218f.js} +1 -1
  309. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-df25b934.js → styles-6aaf32cf-f1d54e34.js} +1 -1
  310. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-88357141.js → styles-9a916d00-980de489.js} +1 -1
  311. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-d600174d.js → styles-c10674c1-3c03abde.js} +1 -1
  312. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-4adc3e0b.js → svgDrawCommon-08f97a94-46ba068f.js} +1 -1
  313. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-42816fa1.js → timeline-definition-85554ec2-901f5e3d.js} +1 -1
  314. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-621eb66a.js → xychartDiagram-e933f94c-acbc628a.js} +1 -1
  315. rasa/core/channels/inspector/dist/index.html +2 -2
  316. rasa/core/channels/inspector/index.html +1 -1
  317. rasa/core/channels/inspector/src/App.tsx +10 -11
  318. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +12 -3
  319. rasa/core/channels/inspector/src/components/DialogueStack.tsx +5 -7
  320. rasa/core/channels/inspector/src/helpers/formatters.ts +3 -24
  321. rasa/core/channels/inspector/src/theme/base/styles.ts +1 -19
  322. rasa/core/channels/inspector/src/types.ts +0 -4
  323. rasa/core/channels/socketio.py +212 -51
  324. rasa/core/channels/studio_chat.py +43 -23
  325. rasa/core/channels/voice_stream/voice_channel.py +5 -3
  326. rasa/core/constants.py +0 -4
  327. rasa/core/policies/enterprise_search_policy.py +6 -11
  328. rasa/core/policies/flow_policy.py +4 -4
  329. rasa/core/policies/flows/flow_executor.py +45 -415
  330. rasa/core/processor.py +1 -6
  331. rasa/core/run.py +14 -11
  332. rasa/core/utils.py +1 -21
  333. rasa/dialogue_understanding/commands/__init__.py +0 -8
  334. rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -97
  335. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +0 -11
  336. rasa/dialogue_understanding/commands/clarify_command.py +0 -10
  337. rasa/dialogue_understanding/commands/knowledge_answer_command.py +0 -11
  338. rasa/dialogue_understanding/commands/start_flow_command.py +8 -164
  339. rasa/dialogue_understanding/commands/utils.py +2 -6
  340. rasa/dialogue_understanding/generator/command_parser.py +0 -4
  341. rasa/dialogue_understanding/generator/flow_retrieval.py +10 -9
  342. rasa/dialogue_understanding/generator/llm_based_command_generator.py +12 -50
  343. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +6 -7
  344. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +6 -7
  345. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +2 -41
  346. rasa/dialogue_understanding/patterns/continue_interrupted.py +1 -163
  347. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +8 -52
  348. rasa/dialogue_understanding/processor/command_processor.py +15 -31
  349. rasa/dialogue_understanding/stack/dialogue_stack.py +2 -123
  350. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +0 -57
  351. rasa/dialogue_understanding/stack/utils.py +2 -17
  352. rasa/dialogue_understanding_test/du_test_runner.py +2 -7
  353. rasa/e2e_test/e2e_test_runner.py +0 -5
  354. rasa/engine/storage/local_model_storage.py +45 -2
  355. rasa/model_manager/model_api.py +4 -5
  356. rasa/model_manager/runner_service.py +1 -1
  357. rasa/model_manager/socket_bridge.py +20 -14
  358. rasa/model_manager/trainer_service.py +12 -9
  359. rasa/model_manager/utils.py +1 -29
  360. rasa/server.py +0 -10
  361. rasa/shared/constants.py +0 -5
  362. rasa/shared/core/constants.py +1 -12
  363. rasa/shared/core/domain.py +58 -11
  364. rasa/shared/core/events.py +0 -319
  365. rasa/shared/core/flows/flow_step.py +7 -1
  366. rasa/shared/core/flows/flows_list.py +2 -2
  367. rasa/shared/core/flows/flows_yaml_schema.json +186 -112
  368. rasa/shared/core/flows/steps/call.py +5 -53
  369. rasa/shared/core/flows/validation.py +7 -46
  370. rasa/shared/core/flows/yaml_flows_io.py +16 -8
  371. rasa/shared/core/slots.py +4 -0
  372. rasa/shared/importers/importer.py +6 -0
  373. rasa/shared/importers/utils.py +77 -1
  374. rasa/shared/providers/_utils.py +60 -44
  375. rasa/shared/providers/embedding/default_litellm_embedding_client.py +2 -0
  376. rasa/shared/providers/llm/_base_litellm_client.py +7 -39
  377. rasa/shared/providers/llm/default_litellm_llm_client.py +2 -0
  378. rasa/shared/providers/llm/litellm_router_llm_client.py +4 -8
  379. rasa/shared/providers/llm/llm_client.py +3 -7
  380. rasa/shared/providers/llm/llm_response.py +0 -49
  381. rasa/shared/providers/llm/self_hosted_llm_client.py +4 -8
  382. rasa/shared/utils/llm.py +5 -28
  383. rasa/shared/utils/schemas/events.py +0 -42
  384. rasa/studio/upload.py +16 -47
  385. rasa/telemetry.py +97 -23
  386. rasa/tracing/instrumentation/instrumentation.py +2 -4
  387. rasa/utils/common.py +0 -79
  388. rasa/utils/io.py +27 -9
  389. rasa/utils/json_utils.py +6 -1
  390. rasa/utils/log_utils.py +5 -1
  391. rasa/utils/openapi.py +144 -0
  392. rasa/validator.py +7 -3
  393. rasa/version.py +1 -1
  394. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/METADATA +3 -3
  395. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/RECORD +405 -174
  396. rasa/agents/agent_factory.py +0 -122
  397. rasa/agents/agent_manager.py +0 -162
  398. rasa/agents/constants.py +0 -32
  399. rasa/agents/core/agent_protocol.py +0 -108
  400. rasa/agents/core/types.py +0 -70
  401. rasa/agents/exceptions.py +0 -8
  402. rasa/agents/protocol/__init__.py +0 -5
  403. rasa/agents/protocol/a2a/a2a_agent.py +0 -51
  404. rasa/agents/protocol/mcp/mcp_base_agent.py +0 -674
  405. rasa/agents/protocol/mcp/mcp_open_agent.py +0 -276
  406. rasa/agents/protocol/mcp/mcp_task_agent.py +0 -469
  407. rasa/agents/schemas/__init__.py +0 -12
  408. rasa/agents/schemas/agent_input.py +0 -38
  409. rasa/agents/schemas/agent_output.py +0 -26
  410. rasa/agents/schemas/agent_tool_result.py +0 -51
  411. rasa/agents/schemas/agent_tool_schema.py +0 -134
  412. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +0 -15
  413. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +0 -17
  414. rasa/agents/utils.py +0 -72
  415. rasa/core/available_agents.py +0 -196
  416. rasa/core/channels/inspector/dist/assets/channel-c436ca7c.js +0 -1
  417. rasa/core/channels/inspector/dist/assets/clone-50dd656b.js +0 -1
  418. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b2aeaf8.js +0 -1
  419. rasa/core/channels/inspector/dist/assets/index-1bd9135e.js +0 -1353
  420. rasa/core/policies/flows/mcp_tool_executor.py +0 -277
  421. rasa/dialogue_understanding/commands/continue_agent_command.py +0 -91
  422. rasa/dialogue_understanding/commands/restart_agent_command.py +0 -162
  423. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +0 -61
  424. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +0 -81
  425. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +0 -81
  426. rasa/shared/agents/utils.py +0 -35
  427. rasa/shared/utils/mcp/server_connection.py +0 -157
  428. /rasa/{agents → builder}/__init__.py +0 -0
  429. /rasa/{agents/core → builder/copilot}/__init__.py +0 -0
  430. /rasa/{agents/protocol/a2a → builder/copilot/prompts}/__init__.py +0 -0
  431. /rasa/{agents/protocol/mcp → builder/copilot/templated_messages}/__init__.py +0 -0
  432. /rasa/{agents/templates → builder/document_retrieval}/__init__.py +0 -0
  433. /rasa/{shared/agents → cli/project_templates/finance/actions/accounts}/__init__.py +0 -0
  434. /rasa/{shared/utils/mcp → cli/project_templates/finance/actions/cards}/__init__.py +0 -0
  435. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/NOTICE +0 -0
  436. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/WHEEL +0 -0
  437. {rasa_pro-3.14.0.dev3.dist-info → rasa_pro-3.14.0.dev5.dist-info}/entry_points.txt +0 -0
rasa/api.py CHANGED
@@ -20,7 +20,6 @@ if TYPE_CHECKING:
20
20
  def run(
21
21
  model: Text,
22
22
  endpoints: Text,
23
- sub_agents: Text,
24
23
  connector: Optional[Text] = None,
25
24
  credentials: Optional[Text] = None,
26
25
  **kwargs: Dict[Text, Any],
@@ -30,7 +29,6 @@ def run(
30
29
  Args:
31
30
  model: Path to model archive.
32
31
  endpoints: Path to endpoints file.
33
- sub_agents: Path to sub-agents directory.
34
32
  connector: Connector which should be use (overwrites `credentials`
35
33
  field).
36
34
  credentials: Path to channel credentials file.
@@ -40,13 +38,11 @@ def run(
40
38
  """
41
39
  import rasa.core.run
42
40
  import rasa.shared.utils.common
43
- from rasa.core.available_agents import AvailableAgents
44
41
  from rasa.core.available_endpoints import AvailableEndpoints
45
42
  from rasa.shared.constants import DOCS_BASE_URL
46
43
  from rasa.shared.utils.cli import print_warning
47
44
 
48
45
  _endpoints = AvailableEndpoints.get_instance(endpoints)
49
- _sub_agents = AvailableAgents.get_instance(sub_agents)
50
46
 
51
47
  if not connector and not credentials:
52
48
  connector = "rest"
@@ -65,7 +61,6 @@ def run(
65
61
  channel=connector,
66
62
  credentials=credentials,
67
63
  endpoints=_endpoints,
68
- sub_agents=_sub_agents,
69
64
  **kwargs,
70
65
  )
71
66
 
rasa/builder/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # Rasa Prompt-to-Bot Service
2
+
3
+ A production-ready service that generates Rasa chatbots from natural language descriptions using LLMs.
4
+
5
+ ## Architecture
6
+
7
+ The service follows functional programming principles with minimal use of classes:
8
+
9
+ ### Core Modules
10
+
11
+ - **`config.py`** - Configuration management using module-level constants
12
+ - **`exceptions.py`** - Custom exception hierarchy for error handling
13
+ - **`models.py`** - Pydantic models for request/response validation
14
+ - **`llm_service.py`** - LLM interactions (minimal class for state management)
15
+ - **`validation_service.py`** - Project validation functions
16
+ - **`training_service.py`** - Model training functions
17
+ - **`project_generator.py`** - Project generation (class for bot files state)
18
+ - **`service.py`** - Main orchestrating service (class for app state)
19
+ - **`logging_utils.py`** - Thread-safe logging utilities
20
+ - **`llm_context.py`** - Conversation context formatting
21
+ - **`main.py`** - Application entry point
22
+
23
+ ### Utility Scripts
24
+
25
+ - **`scrape_rasa_docs.py`** - Documentation scraping
26
+ - **`create_openai_vector_store.py`** - Documentation indexing
27
+
28
+ ## Key Design Principles
29
+
30
+ 1. **Functional First**: Use functions for stateless operations
31
+ 2. **Minimal Classes**: Classes only when state management is needed
32
+ 3. **Configuration**: Environment variables with sensible defaults
33
+ 4. **Error Handling**: Structured exception hierarchy
34
+ 5. **Type Safety**: Full type annotations and Pydantic validation
35
+ 6. **Thread Safety**: Safe concurrent operations
36
+ 7. **Resource Management**: Proper cleanup and lifecycle handling
37
+
38
+ ## Usage
39
+
40
+ ### Running the Service
41
+
42
+ ```bash
43
+ python rasa/builder/main.py
44
+ ```
45
+
46
+ ### Environment Configuration
47
+
48
+ ```bash
49
+ # OpenAI Settings
50
+ export OPENAI_MODEL="gpt-4.1-2025-04-14"
51
+ export OPENAI_TEMPERATURE="0.7"
52
+ export OPENAI_VECTOR_STORE_ID="vs_xxxxx"
53
+ export OPENAI_TIMEOUT="30"
54
+
55
+ # Server Settings
56
+ export SERVER_HOST="0.0.0.0"
57
+ export SERVER_PORT="5005"
58
+ export MAX_RETRIES="5"
59
+ export CORS_ORIGINS="http://localhost:3000,https://example.com"
60
+
61
+ # Validation Settings
62
+ export VALIDATION_FAIL_ON_WARNINGS="false"
63
+ ```
64
+
65
+ ### API Endpoints
66
+
67
+ - `POST /api/prompt-to-bot` - Generate bot from description
68
+ - `GET /api/bot-data` - Get current bot configuration
69
+ - `PUT /api/bot-data` - Update bot configuration (SSE)
70
+ - `POST /api/llm-builder` - LLM helper for bot development
71
+ - `GET /` - Health check
72
+
73
+ ### Documentation Setup
74
+
75
+ ```bash
76
+ # 1. Scrape Rasa documentation
77
+ python rasa/builder/scrape_rasa_docs.py
78
+
79
+ # 2. Create OpenAI vector store
80
+ python rasa/builder/create_openai_vector_store.py
81
+ ```
82
+
83
+ ## Benefits of Functional Approach
84
+
85
+ - **Simpler**: Easy to understand and reason about
86
+ - **Testable**: Functions are easier to unit test
87
+ - **Reusable**: Pure functions can be composed
88
+ - **Maintainable**: Clear separation of concerns
89
+ - **Performant**: No unnecessary object overhead
90
+ - **Debuggable**: Clear call stacks and data flow
91
+
92
+ ## Error Handling
93
+
94
+ The service uses a structured exception hierarchy:
95
+
96
+ - `PromptToBotError` - Base exception
97
+ - `ValidationError` - Project validation failures
98
+ - `TrainingError` - Model training issues
99
+ - `LLMGenerationError` - LLM API problems
100
+ - `ProjectGenerationError` - Generation retry exhaustion
101
+ - `AgentLoadError` - Agent loading failures
102
+
103
+ ## Logging
104
+
105
+ Structured logging with context using `structlog`:
106
+
107
+ ```python
108
+ structlogger.info("operation.success", key="value")
109
+ structlogger.error("operation.failed", error=str(e))
110
+ ```
111
+
112
+ ## State Management
113
+
114
+ Only classes that truly need state:
115
+
116
+ 1. **`LLMService`** - Caches schemas and manages OpenAI client
117
+ 2. **`ProjectGenerator`** - Maintains current bot files
118
+ 3. **`BotBuilderService`** - Manages Sanic app and agent state
119
+
120
+ Everything else uses pure functions for maximum simplicity and testability.
rasa/builder/auth.py ADDED
@@ -0,0 +1,176 @@
1
+ """Authentication utilities for bot builder service."""
2
+
3
+ from datetime import datetime, timedelta, timezone
4
+ from functools import wraps
5
+ from typing import Any, Awaitable, Callable, Dict, Optional, Tuple
6
+
7
+ import jwt
8
+ import structlog
9
+ from jwt import PyJWKClient
10
+ from pydantic import BaseModel
11
+ from sanic import response
12
+ from sanic.request import Request
13
+ from sanic.response import HTTPResponse
14
+
15
+ from rasa.builder.config import (
16
+ AUTH0_CLIENT_ID,
17
+ AUTH0_ISSUER,
18
+ AUTH_REQUIRED_AFTER_MINUTES,
19
+ JWKS_URL,
20
+ )
21
+ from rasa.builder.models import ApiErrorResponse
22
+ from rasa.builder.project_info import ProjectInfo
23
+
24
+ HEADER_USER_ID = "X-User-Id"
25
+
26
+ structlogger = structlog.get_logger()
27
+
28
+ RouteHandler = Callable[..., Awaitable[HTTPResponse]]
29
+ ProtectedDecorator = Callable[[RouteHandler], RouteHandler]
30
+
31
+
32
+ def verify_auth0_token(token: str) -> Dict[str, Any]:
33
+ """Verify JWT token from Auth0.
34
+
35
+ Args:
36
+ token: JWT token string
37
+
38
+ Returns:
39
+ Dict containing the token payload
40
+
41
+ Raises:
42
+ Exception: If token verification fails
43
+ """
44
+ jwk_client = PyJWKClient(JWKS_URL)
45
+ signing_key = jwk_client.get_signing_key_from_jwt(token)
46
+
47
+ payload = jwt.decode(
48
+ token,
49
+ signing_key.key,
50
+ algorithms=["RS256"],
51
+ audience=AUTH0_CLIENT_ID,
52
+ issuer=AUTH0_ISSUER,
53
+ )
54
+ return payload
55
+
56
+
57
+ class Auth0TokenVerificationResult(BaseModel):
58
+ payload: Optional[Dict[str, Any]]
59
+ error_message: Optional[str]
60
+
61
+
62
+ def extract_and_verify_auth0_token(
63
+ auth_header: str,
64
+ ) -> Auth0TokenVerificationResult:
65
+ """Extract and verify JWT token from Authorization header.
66
+
67
+ Args:
68
+ auth_header: Authorization header value
69
+
70
+ Returns:
71
+ Auth0TokenVerificationResult: Contains payload and error_message.
72
+ """
73
+ # Check Authorization header format
74
+ if not auth_header.startswith("Bearer "):
75
+ return Auth0TokenVerificationResult(
76
+ payload=None, error_message="Missing or invalid Authorization header"
77
+ )
78
+
79
+ # Extract token
80
+ token = auth_header.split(" ")[1]
81
+
82
+ # Verify token
83
+ try:
84
+ payload = verify_auth0_token(token)
85
+ return Auth0TokenVerificationResult(payload=payload, error_message=None)
86
+ except Exception as e:
87
+ return Auth0TokenVerificationResult(
88
+ payload=None, error_message=f"Invalid token: {e!s}"
89
+ )
90
+
91
+
92
+ def is_auth_required_now(
93
+ *, always_required: bool = False, project_info: Optional[ProjectInfo] = None
94
+ ) -> bool:
95
+ """Return whether authentication is required right now based on config.
96
+
97
+ - If always_required is True, returns True
98
+ - Else, returns True iff current UTC time >= first_used + configured delta
99
+ """
100
+ if always_required:
101
+ return True
102
+ now = datetime.now(timezone.utc)
103
+
104
+ if project_info is None:
105
+ return False
106
+
107
+ first_used = project_info.first_used_dt()
108
+ if first_used is None:
109
+ return False
110
+
111
+ delta = timedelta(minutes=AUTH_REQUIRED_AFTER_MINUTES)
112
+ auth_required_start = (first_used + delta).astimezone(timezone.utc)
113
+ return now >= auth_required_start
114
+
115
+
116
+ def _check_and_attach_auth(request: Any) -> Tuple[bool, Optional[str]]:
117
+ """Validate Authorization header. On success, store payload on request.ctx."""
118
+ auth_header = request.headers.get("Authorization", "")
119
+ verification_result = extract_and_verify_auth0_token(auth_header)
120
+ if verification_result.error_message is not None:
121
+ return False, verification_result.error_message
122
+
123
+ # Attach payload for downstream consumers
124
+ try:
125
+ request.ctx.auth_payload = verification_result.payload
126
+ except Exception:
127
+ # If ctx is not available for some reason, ignore silently
128
+ pass
129
+ return True, None
130
+
131
+
132
+ def protected(*, always_required: bool = False) -> ProtectedDecorator:
133
+ """Decorator to protect routes with conditional authentication.
134
+
135
+ Authentication rules:
136
+ - If always_required=True: token is always required
137
+ - Else: token is required only after RASA_AUTH_AFTER timestamp
138
+
139
+ On failure returns a 401 with a JSON error body.
140
+ """
141
+
142
+ def decorator(f: RouteHandler) -> RouteHandler:
143
+ @wraps(f)
144
+ async def decorated_function(
145
+ request: Request, *args: Any, **kwargs: Any
146
+ ) -> HTTPResponse:
147
+ # Global bypass: allow turning off auth entirely
148
+ if not getattr(request.app.config, "USE_AUTHENTICATION", True):
149
+ return await f(request, *args, **kwargs)
150
+
151
+ project_info: Optional[ProjectInfo] = None
152
+ try:
153
+ project_info = request.app.ctx.project_generator.project_info
154
+ except Exception:
155
+ project_info = None
156
+
157
+ if is_auth_required_now(
158
+ always_required=always_required, project_info=project_info
159
+ ):
160
+ ok, err = _check_and_attach_auth(request)
161
+ if not ok:
162
+ structlogger.error(
163
+ "builder.auth.token_verification_failed", error=err
164
+ )
165
+ return response.json(
166
+ ApiErrorResponse(
167
+ error=err,
168
+ details={"expected": "Bearer <valid_token>"},
169
+ ).model_dump(),
170
+ status=401,
171
+ )
172
+ return await f(request, *args, **kwargs)
173
+
174
+ return decorated_function
175
+
176
+ return decorator
rasa/builder/config.py ADDED
@@ -0,0 +1,115 @@
1
+ """Configuration module for the prompt-to-bot service."""
2
+
3
+ import os
4
+ from typing import Any, Dict
5
+
6
+ import importlib_resources
7
+
8
+ from rasa.constants import PACKAGE_NAME
9
+ from rasa.shared.utils.yaml import read_yaml, read_yaml_file
10
+
11
+ # OpenAI Configuration
12
+ OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4.1-2025-04-14")
13
+ OPENAI_TEMPERATURE = float(os.getenv("OPENAI_TEMPERATURE", "0.7"))
14
+ OPENAI_VECTOR_STORE_ID = os.getenv(
15
+ "OPENAI_VECTOR_STORE_ID", "vs_685123376e288191a005b6b144d3026f"
16
+ )
17
+ OPENAI_MAX_VECTOR_RESULTS = int(os.getenv("OPENAI_MAX_VECTOR_RESULTS", "10"))
18
+ OPENAI_TIMEOUT = int(os.getenv("OPENAI_TIMEOUT", "30"))
19
+
20
+ # Server Configuration
21
+ BUILDER_SERVER_HOST = os.getenv("SERVER_HOST", "0.0.0.0")
22
+ BUILDER_SERVER_PORT = int(os.getenv("SERVER_PORT", "5050"))
23
+ MAX_RETRIES = int(os.getenv("MAX_RETRIES", "5"))
24
+ MAX_LOG_ENTRIES = int(os.getenv("MAX_LOG_ENTRIES", "30"))
25
+ HELLO_RASA_PROJECT_ID = os.getenv("HELLO_RASA_PROJECT_ID")
26
+
27
+ # CORS Configuration
28
+ _cors_origins_env = os.getenv("CORS_ORIGINS", "*")
29
+ CORS_ORIGINS = _cors_origins_env.split(",") if _cors_origins_env != "*" else ["*"]
30
+
31
+ # Validation Configuration
32
+ VALIDATION_FAIL_ON_WARNINGS = (
33
+ os.getenv("VALIDATION_FAIL_ON_WARNINGS", "false").lower() == "true"
34
+ )
35
+ VALIDATION_MAX_HISTORY = None # Could be configured if needed
36
+
37
+ # Copilot Response Handler Configuration
38
+ COPILOT_CONTROLLED_RESPONSE_MAX_TOKENS = 20
39
+ COPILOT_HANDLER_ROLLING_BUFFER_SIZE = 20
40
+ COPILOT_ASSISTANT_TRACKER_MAX_TURNS = 10
41
+
42
+ # Guardrail Configuration
43
+ LAKERA_BASE_URL = os.getenv("LAKERA_BASE_URL", "https://api.lakera.ai/v2").rstrip("/")
44
+ ASSISTANT_HISTORY_GUARDRAIL_PROJECT_ID = "project-5442154580"
45
+ COPILOT_HISTORY_GUARDRAIL_PROJECT_ID = "project-4637497223"
46
+
47
+ # Auth0 Configuration
48
+ AUTH0_DOMAIN = "login.hello.rasa.ai"
49
+ AUTH0_CLIENT_ID = "Gq5RdRwp174OFIfTz6Re9TZUseYDXUYE"
50
+ AUTH0_ISSUER = f"https://{AUTH0_DOMAIN}/"
51
+ JWKS_URL = f"{AUTH0_ISSUER}.well-known/jwks.json"
52
+
53
+ # Inkeep Configuration
54
+ INKEEP_BASE_URL = os.getenv("INKEEP_BASE_URL", "https://api.inkeep.com/v1").rstrip("/")
55
+
56
+ # LLM Proxy Configuration
57
+ HELLO_LLM_PROXY_BASE_URL = os.getenv("HELLO_LLM_PROXY_BASE_URL")
58
+ RASA_PRO_LICENSE = os.getenv("RASA_PRO_LICENSE")
59
+
60
+ # Compute proxy-aware base URLs
61
+ if HELLO_LLM_PROXY_BASE_URL:
62
+ _proxy = HELLO_LLM_PROXY_BASE_URL.rstrip("/")
63
+ INKEEP_BASE_URL = f"{_proxy}/documentation"
64
+ LAKERA_BASE_URL = f"{_proxy}/guardrails"
65
+
66
+
67
+ # Number of minutes after FIRST_USED when authentication becomes required
68
+ # across routes (except when auth is globally disabled on the server).
69
+ # Default kept small for development; adjust as needed.
70
+ AUTH_REQUIRED_AFTER_MINUTES = int(os.getenv("AUTH_REQUIRED_AFTER_MINUTES", "480"))
71
+
72
+
73
+ def get_default_config(assistant_id: str) -> Dict[str, Any]:
74
+ """Get default Rasa configuration."""
75
+ base_config = read_yaml_file(
76
+ str(
77
+ importlib_resources.files(PACKAGE_NAME).joinpath(
78
+ "cli/project_templates/default/config.yml"
79
+ )
80
+ )
81
+ )
82
+
83
+ if not isinstance(base_config, dict):
84
+ raise ValueError("Base config is not a dictionary")
85
+
86
+ base_config["assistant_id"] = assistant_id
87
+
88
+ return base_config
89
+
90
+
91
+ def get_default_endpoints() -> Dict[str, Any]:
92
+ """Get default endpoints configuration."""
93
+ endpoints_config = read_yaml_file(
94
+ str(
95
+ importlib_resources.files(PACKAGE_NAME).joinpath(
96
+ "cli/project_templates/default/endpoints.yml"
97
+ )
98
+ )
99
+ )
100
+
101
+ if not isinstance(endpoints_config, dict):
102
+ raise ValueError("Endpoints config is not a dictionary")
103
+
104
+ return endpoints_config
105
+
106
+
107
+ def get_default_credentials() -> Dict[str, Any]:
108
+ """Get default credentials configuration."""
109
+ default_credentials_yaml = """
110
+ studio_chat:
111
+ user_message_evt: "user_message"
112
+ bot_message_evt: "bot_message"
113
+ session_persistence: true
114
+ """
115
+ return read_yaml(default_credentials_yaml)
@@ -0,0 +1,25 @@
1
+ from typing import Literal
2
+
3
+ # A dot-path for importlib to the copilot prompt
4
+ COPILOT_PROMPTS_DIR = "builder.copilot.prompts"
5
+ COPILOT_PROMPTS_FILE = "copilot_system_prompt.jinja2"
6
+
7
+ # A dot-path for importlib to the rasa internal messages templates
8
+ COPILOT_MESSAGE_TEMPLATES_DIR = "builder.copilot.templated_messages"
9
+ RASA_INTERNAL_MESSAGES_TEMPLATES_FILE = "copilot_internal_messages_templates.yml"
10
+ COPILOT_HANDLER_RESPONSES_FILE = "copilot_templated_responses.yml"
11
+
12
+ # OpenAI roles copilot utilizes - Use literal types to avoid type errors with OpenAI
13
+ ROLE_USER: Literal["user"] = "user"
14
+ ROLE_SYSTEM: Literal["system"] = "system"
15
+ ROLE_ASSISTANT: Literal["assistant"] = "assistant"
16
+
17
+ # Rasa Copilot role - Added to avoid confusion with the assistant role on the frontend.
18
+ ROLE_COPILOT: Literal["copilot"] = "copilot"
19
+
20
+ # Rasa internal role - Used to indicate that the message is from the Rasa internal
21
+ # system components.
22
+ ROLE_COPILOT_INTERNAL: Literal["copilot_internal"] = "copilot_internal"
23
+
24
+ # Copilot Telemetry
25
+ COPILOT_SEGMENT_WRITE_KEY_ENV_VAR = "COPILOT_SEGMENT_WRITE_KEY"