rasa-pro 3.14.0.dev5__py3-none-any.whl → 3.14.0.dev7__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 (477) hide show
  1. rasa/agents/agent_factory.py +122 -0
  2. rasa/agents/agent_manager.py +163 -0
  3. rasa/agents/constants.py +40 -0
  4. rasa/agents/core/agent_protocol.py +107 -0
  5. rasa/agents/core/types.py +70 -0
  6. rasa/agents/exceptions.py +38 -0
  7. rasa/agents/protocol/__init__.py +5 -0
  8. rasa/agents/protocol/a2a/a2a_agent.py +662 -0
  9. rasa/agents/protocol/mcp/mcp_base_agent.py +685 -0
  10. rasa/agents/protocol/mcp/mcp_open_agent.py +290 -0
  11. rasa/agents/protocol/mcp/mcp_task_agent.py +484 -0
  12. rasa/agents/schemas/__init__.py +12 -0
  13. rasa/agents/schemas/agent_input.py +38 -0
  14. rasa/agents/schemas/agent_output.py +26 -0
  15. rasa/agents/schemas/agent_tool_result.py +67 -0
  16. rasa/agents/schemas/agent_tool_schema.py +134 -0
  17. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +15 -0
  18. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +17 -0
  19. rasa/agents/utils.py +77 -0
  20. rasa/agents/validation.py +484 -0
  21. rasa/api.py +14 -6
  22. rasa/cli/arguments/default_arguments.py +12 -0
  23. rasa/cli/arguments/run.py +2 -0
  24. rasa/cli/arguments/train.py +2 -0
  25. rasa/cli/dialogue_understanding_test.py +4 -0
  26. rasa/cli/e2e_test.py +4 -0
  27. rasa/cli/inspect.py +3 -0
  28. rasa/cli/interactive.py +2 -0
  29. rasa/cli/llm_fine_tuning.py +5 -0
  30. rasa/cli/project_templates/tutorial/config.yml +1 -2
  31. rasa/cli/run.py +4 -0
  32. rasa/cli/scaffold.py +2 -46
  33. rasa/cli/shell.py +3 -0
  34. rasa/cli/train.py +2 -0
  35. rasa/cli/utils.py +85 -1
  36. rasa/constants.py +6 -0
  37. rasa/core/actions/action.py +52 -10
  38. rasa/core/agent.py +19 -1
  39. rasa/core/available_agents.py +220 -0
  40. rasa/core/available_endpoints.py +30 -0
  41. rasa/core/channels/channel.py +3 -4
  42. rasa/core/channels/development_inspector.py +4 -4
  43. rasa/core/channels/hangouts.py +2 -2
  44. rasa/core/channels/inspector/dist/assets/{arc-18042c22.js → arc-cce7e0a8.js} +1 -1
  45. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-fdd6bcfa.js → blockDiagram-38ab4fdb-e2a49be7.js} +1 -1
  46. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-f5ae6786.js → c4Diagram-3d4e48cf-3def7895.js} +1 -1
  47. rasa/core/channels/inspector/dist/assets/channel-858c2c20.js +1 -0
  48. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-81efba3e.js → classDiagram-70f12bd4-e66fe4df.js} +1 -1
  49. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-3b6b6a92.js → classDiagram-v2-f2320105-eb874aaa.js} +1 -1
  50. rasa/core/channels/inspector/dist/assets/clone-4b80996c.js +1 -0
  51. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-31422447.js → createText-2e5e7dd3-cf934643.js} +1 -1
  52. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-518a90db.js → edges-e0da2a9e-8fdf9155.js} +1 -1
  53. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-a6d3c25a.js → erDiagram-9861fffd-6106fb96.js} +1 -1
  54. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-e048c2be.js → flowDb-956e92f1-4c2bb040.js} +1 -1
  55. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-c7474c91.js → flowDiagram-66a62f08-f0ff96af.js} +1 -1
  56. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-16f09b7a.js +1 -0
  57. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-cb4d8723.js → flowchart-elk-definition-4a651766-a21707ec.js} +1 -1
  58. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-346636a2.js → ganttDiagram-c361ad54-c165acb1.js} +1 -1
  59. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-7c508874.js → gitGraphDiagram-72cf32ee-b0564cf1.js} +1 -1
  60. rasa/core/channels/inspector/dist/assets/{graph-14702d8a.js → graph-e557e67a.js} +1 -1
  61. rasa/core/channels/inspector/dist/assets/{index-3862675e-f18b534b.js → index-3862675e-1ce60e9e.js} +1 -1
  62. rasa/core/channels/inspector/dist/assets/index-996fe816.js +1353 -0
  63. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-64154b83.js → infoDiagram-f8f76790-893569e2.js} +1 -1
  64. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-833a5f95.js → journeyDiagram-49397b02-c29c864f.js} +1 -1
  65. rasa/core/channels/inspector/dist/assets/{layout-5a3b2123.js → layout-649a5eae.js} +1 -1
  66. rasa/core/channels/inspector/dist/assets/{line-2272a8c7.js → line-0e5685ed.js} +1 -1
  67. rasa/core/channels/inspector/dist/assets/{linear-35bcf273.js → linear-eaa320bd.js} +1 -1
  68. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-92dcb0e9.js → mindmap-definition-fc14e90a-f35df9e6.js} +1 -1
  69. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-94dbc900.js → pieDiagram-8a3498a8-78339e96.js} +1 -1
  70. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-8b7a9c33.js → quadrantDiagram-120e2f19-9b5f2f14.js} +1 -1
  71. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-6f7eab81.js → requirementDiagram-deff3bca-d05ddb3a.js} +1 -1
  72. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-f43e581d.js → sankeyDiagram-04a897e0-d9be5dfd.js} +1 -1
  73. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-0bcbefc3.js → sequenceDiagram-704730f1-0f1c4348.js} +1 -1
  74. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-b8a74083.js → stateDiagram-587899a1-9ddf63b3.js} +1 -1
  75. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-2070218f.js → stateDiagram-v2-d93cdb3a-bc2b81ed.js} +1 -1
  76. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-f1d54e34.js → styles-6aaf32cf-0a287936.js} +1 -1
  77. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-980de489.js → styles-9a916d00-e3941990.js} +1 -1
  78. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-3c03abde.js → styles-c10674c1-ce4eca24.js} +1 -1
  79. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-46ba068f.js → svgDrawCommon-08f97a94-d822b1a8.js} +1 -1
  80. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-901f5e3d.js → timeline-definition-85554ec2-e144c7a7.js} +1 -1
  81. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-acbc628a.js → xychartDiagram-e933f94c-ab7f4e14.js} +1 -1
  82. rasa/core/channels/inspector/dist/index.html +2 -2
  83. rasa/core/channels/inspector/index.html +1 -1
  84. rasa/core/channels/inspector/src/App.tsx +37 -12
  85. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  86. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +3 -2
  87. rasa/core/channels/inspector/src/components/DialogueInformation.tsx +3 -12
  88. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  89. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  90. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  91. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  92. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  93. rasa/core/channels/inspector/src/types.ts +21 -0
  94. rasa/core/channels/socketio.py +51 -212
  95. rasa/core/channels/studio_chat.py +29 -49
  96. rasa/core/channels/voice_stream/genesys.py +1 -1
  97. rasa/core/channels/voice_stream/voice_channel.py +3 -5
  98. rasa/core/constants.py +4 -0
  99. rasa/core/policies/enterprise_search_policy.py +11 -6
  100. rasa/core/policies/flow_policy.py +4 -4
  101. rasa/core/policies/flows/flow_executor.py +519 -73
  102. rasa/core/policies/flows/mcp_tool_executor.py +277 -0
  103. rasa/core/policies/intentless_policy.py +1 -1
  104. rasa/core/policies/unexpected_intent_policy.py +1 -0
  105. rasa/core/processor.py +18 -15
  106. rasa/core/run.py +11 -14
  107. rasa/core/tracker_stores/tracker_store.py +3 -7
  108. rasa/core/train.py +1 -1
  109. rasa/core/training/interactive.py +16 -16
  110. rasa/core/training/story_conflict.py +5 -5
  111. rasa/core/utils.py +21 -1
  112. rasa/dialogue_understanding/commands/__init__.py +8 -0
  113. rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
  114. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +11 -0
  115. rasa/dialogue_understanding/commands/clarify_command.py +10 -0
  116. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  117. rasa/dialogue_understanding/commands/knowledge_answer_command.py +11 -0
  118. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  119. rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
  120. rasa/dialogue_understanding/commands/utils.py +124 -2
  121. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  122. rasa/dialogue_understanding/generator/flow_retrieval.py +9 -10
  123. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  124. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  125. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  126. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +61 -0
  127. rasa/{cli/project_templates/telco/prompts/command-generator.jinja2 → dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2} +7 -3
  128. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +81 -0
  129. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +81 -0
  130. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +7 -6
  131. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +7 -6
  132. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +41 -2
  133. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  134. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  135. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
  136. rasa/dialogue_understanding/processor/command_processor.py +31 -15
  137. rasa/dialogue_understanding/stack/dialogue_stack.py +123 -2
  138. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  139. rasa/dialogue_understanding/stack/utils.py +57 -3
  140. rasa/dialogue_understanding/utils.py +24 -4
  141. rasa/dialogue_understanding_test/du_test_runner.py +7 -2
  142. rasa/e2e_test/e2e_test_runner.py +12 -2
  143. rasa/engine/caching.py +2 -2
  144. rasa/engine/recipes/default_components.py +10 -18
  145. rasa/engine/storage/local_model_storage.py +2 -45
  146. rasa/graph_components/validators/default_recipe_validator.py +134 -134
  147. rasa/hooks.py +5 -5
  148. rasa/llm_fine_tuning/utils.py +2 -2
  149. rasa/model_manager/model_api.py +5 -4
  150. rasa/model_manager/runner_service.py +1 -1
  151. rasa/model_manager/socket_bridge.py +14 -20
  152. rasa/model_manager/trainer_service.py +9 -12
  153. rasa/model_manager/utils.py +29 -1
  154. rasa/model_manager/warm_rasa_process.py +1 -1
  155. rasa/model_training.py +8 -6
  156. rasa/nlu/extractors/extractor.py +2 -1
  157. rasa/plugin.py +8 -8
  158. rasa/privacy/privacy_manager.py +11 -2
  159. rasa/server.py +14 -2
  160. rasa/shared/agents/utils.py +35 -0
  161. rasa/shared/constants.py +8 -0
  162. rasa/shared/core/constants.py +11 -1
  163. rasa/shared/core/domain.py +11 -58
  164. rasa/shared/core/events.py +327 -0
  165. rasa/shared/core/flows/flow_step.py +1 -7
  166. rasa/shared/core/flows/flows_list.py +15 -5
  167. rasa/shared/core/flows/flows_yaml_schema.json +112 -186
  168. rasa/shared/core/flows/steps/call.py +53 -5
  169. rasa/shared/core/flows/validation.py +177 -7
  170. rasa/shared/core/flows/yaml_flows_io.py +9 -17
  171. rasa/shared/core/slots.py +2 -6
  172. rasa/shared/core/trackers.py +5 -2
  173. rasa/shared/exceptions.py +4 -0
  174. rasa/shared/importers/importer.py +0 -6
  175. rasa/shared/importers/rasa.py +1 -1
  176. rasa/shared/importers/utils.py +10 -80
  177. rasa/shared/providers/_utils.py +44 -60
  178. rasa/shared/providers/embedding/default_litellm_embedding_client.py +0 -2
  179. rasa/shared/providers/llm/_base_litellm_client.py +39 -7
  180. rasa/shared/providers/llm/default_litellm_llm_client.py +0 -2
  181. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  182. rasa/shared/providers/llm/llm_client.py +7 -3
  183. rasa/shared/providers/llm/llm_response.py +66 -0
  184. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  185. rasa/shared/utils/health_check/health_check.py +7 -3
  186. rasa/shared/utils/llm.py +28 -5
  187. rasa/shared/utils/mcp/server_connection.py +186 -0
  188. rasa/shared/utils/schemas/events.py +42 -0
  189. rasa/shared/utils/yaml.py +3 -1
  190. rasa/studio/upload.py +47 -16
  191. rasa/telemetry.py +23 -97
  192. rasa/tracing/instrumentation/instrumentation.py +14 -10
  193. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  194. rasa/utils/common.py +79 -0
  195. rasa/utils/io.py +9 -27
  196. rasa/utils/json_utils.py +1 -6
  197. rasa/utils/log_utils.py +2 -6
  198. rasa/utils/ml_utils.py +1 -1
  199. rasa/utils/tensorflow/rasa_layers.py +1 -1
  200. rasa/utils/train_utils.py +15 -15
  201. rasa/validator.py +19 -21
  202. rasa/version.py +1 -1
  203. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/METADATA +14 -17
  204. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/RECORD +214 -442
  205. rasa/builder/README.md +0 -120
  206. rasa/builder/auth.py +0 -176
  207. rasa/builder/config.py +0 -115
  208. rasa/builder/copilot/constants.py +0 -25
  209. rasa/builder/copilot/copilot.py +0 -372
  210. rasa/builder/copilot/copilot_response_handler.py +0 -487
  211. rasa/builder/copilot/copilot_templated_message_provider.py +0 -58
  212. rasa/builder/copilot/exceptions.py +0 -20
  213. rasa/builder/copilot/models.py +0 -431
  214. rasa/builder/copilot/prompts/copilot_system_prompt.jinja2 +0 -726
  215. rasa/builder/copilot/telemetry.py +0 -195
  216. rasa/builder/copilot/templated_messages/copilot_internal_messages_templates.yml +0 -16
  217. rasa/builder/copilot/templated_messages/copilot_templated_responses.yml +0 -26
  218. rasa/builder/document_retrieval/constants.py +0 -15
  219. rasa/builder/document_retrieval/inkeep-rag-response-schema.json +0 -64
  220. rasa/builder/document_retrieval/inkeep_document_retrieval.py +0 -238
  221. rasa/builder/document_retrieval/models.py +0 -62
  222. rasa/builder/download.py +0 -140
  223. rasa/builder/exceptions.py +0 -55
  224. rasa/builder/guardrails/__init__.py +0 -1
  225. rasa/builder/guardrails/constants.py +0 -3
  226. rasa/builder/guardrails/exceptions.py +0 -4
  227. rasa/builder/guardrails/lakera.py +0 -206
  228. rasa/builder/guardrails/models.py +0 -199
  229. rasa/builder/guardrails/utils.py +0 -305
  230. rasa/builder/job_manager.py +0 -87
  231. rasa/builder/jobs.py +0 -234
  232. rasa/builder/llm_service.py +0 -246
  233. rasa/builder/logging_utils.py +0 -209
  234. rasa/builder/main.py +0 -174
  235. rasa/builder/models.py +0 -197
  236. rasa/builder/project_generator.py +0 -450
  237. rasa/builder/project_info.py +0 -72
  238. rasa/builder/scrape_rasa_docs.py +0 -97
  239. rasa/builder/service.py +0 -1142
  240. rasa/builder/shared/tracker_context.py +0 -212
  241. rasa/builder/skill_to_bot_prompt.jinja2 +0 -164
  242. rasa/builder/training_service.py +0 -132
  243. rasa/builder/validation_service.py +0 -93
  244. rasa/cli/project_templates/basic/actions/action_api.py +0 -15
  245. rasa/cli/project_templates/basic/actions/action_human_handoff.py +0 -44
  246. rasa/cli/project_templates/basic/config.yml +0 -23
  247. rasa/cli/project_templates/basic/credentials.yml +0 -34
  248. rasa/cli/project_templates/basic/data/general/feedback.yml +0 -20
  249. rasa/cli/project_templates/basic/data/general/goodbye.yml +0 -6
  250. rasa/cli/project_templates/basic/data/general/hello.yml +0 -7
  251. rasa/cli/project_templates/basic/data/general/help.yml +0 -6
  252. rasa/cli/project_templates/basic/data/general/human_handoff.yml +0 -16
  253. rasa/cli/project_templates/basic/data/general/welcome.yml +0 -9
  254. rasa/cli/project_templates/basic/data/system/pattern_completed.yml +0 -7
  255. rasa/cli/project_templates/basic/data/system/pattern_correction.yml +0 -7
  256. rasa/cli/project_templates/basic/data/system/pattern_search.yml +0 -8
  257. rasa/cli/project_templates/basic/data/system/pattern_session_start.yml +0 -8
  258. rasa/cli/project_templates/basic/docs/rasa_assistant_qa.txt +0 -65
  259. rasa/cli/project_templates/basic/docs/template.txt +0 -7
  260. rasa/cli/project_templates/basic/domain/general/assistant_details.yml +0 -12
  261. rasa/cli/project_templates/basic/domain/general/bot_identity.yml +0 -5
  262. rasa/cli/project_templates/basic/domain/general/cannot_handle.yml +0 -5
  263. rasa/cli/project_templates/basic/domain/general/feedback.yml +0 -28
  264. rasa/cli/project_templates/basic/domain/general/goodbye.yml +0 -7
  265. rasa/cli/project_templates/basic/domain/general/help.yml +0 -5
  266. rasa/cli/project_templates/basic/domain/general/human_handoff_domain.yml +0 -35
  267. rasa/cli/project_templates/basic/domain/general/utils.yml +0 -13
  268. rasa/cli/project_templates/basic/domain/general/welcome.yml +0 -7
  269. rasa/cli/project_templates/basic/endpoints.yml +0 -73
  270. rasa/cli/project_templates/basic/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
  271. rasa/cli/project_templates/finance/actions/__init__.py +0 -46
  272. rasa/cli/project_templates/finance/actions/accounts/action_ask_account.py +0 -47
  273. rasa/cli/project_templates/finance/actions/accounts/action_check_balance.py +0 -40
  274. rasa/cli/project_templates/finance/actions/action_session_start.py +0 -74
  275. rasa/cli/project_templates/finance/actions/cards/action_ask_card.py +0 -48
  276. rasa/cli/project_templates/finance/actions/cards/action_check_card_existence.py +0 -36
  277. rasa/cli/project_templates/finance/actions/cards/action_update_card_status.py +0 -54
  278. rasa/cli/project_templates/finance/actions/database.py +0 -277
  279. rasa/cli/project_templates/finance/actions/transfers/__init__.py +0 -0
  280. rasa/cli/project_templates/finance/actions/transfers/action_add_payee.py +0 -52
  281. rasa/cli/project_templates/finance/actions/transfers/action_ask_account_from.py +0 -51
  282. rasa/cli/project_templates/finance/actions/transfers/action_check_payee_existence.py +0 -40
  283. rasa/cli/project_templates/finance/actions/transfers/action_check_sufficient_funds.py +0 -40
  284. rasa/cli/project_templates/finance/actions/transfers/action_list_payees.py +0 -46
  285. rasa/cli/project_templates/finance/actions/transfers/action_process_immediate_payment.py +0 -18
  286. rasa/cli/project_templates/finance/actions/transfers/action_remove_payee.py +0 -49
  287. rasa/cli/project_templates/finance/actions/transfers/action_schedule_payment.py +0 -19
  288. rasa/cli/project_templates/finance/actions/transfers/action_validate_payment_date.py +0 -36
  289. rasa/cli/project_templates/finance/config.yml +0 -21
  290. rasa/cli/project_templates/finance/credentials.yml +0 -32
  291. rasa/cli/project_templates/finance/csvs/accounts.csv +0 -8
  292. rasa/cli/project_templates/finance/csvs/advisors.csv +0 -7
  293. rasa/cli/project_templates/finance/csvs/appointments.csv +0 -211
  294. rasa/cli/project_templates/finance/csvs/branches.csv +0 -10
  295. rasa/cli/project_templates/finance/csvs/cards.csv +0 -11
  296. rasa/cli/project_templates/finance/csvs/payees.csv +0 -11
  297. rasa/cli/project_templates/finance/csvs/transactions.csv +0 -71
  298. rasa/cli/project_templates/finance/csvs/users.csv +0 -4
  299. rasa/cli/project_templates/finance/data/accounts/check_balance.yml +0 -10
  300. rasa/cli/project_templates/finance/data/cards/block_card.yml +0 -66
  301. rasa/cli/project_templates/finance/data/cards/select_card.yml +0 -12
  302. rasa/cli/project_templates/finance/data/general/bot_identity.yml +0 -6
  303. rasa/cli/project_templates/finance/data/general/feedback.yml +0 -20
  304. rasa/cli/project_templates/finance/data/general/goodbye.yml +0 -6
  305. rasa/cli/project_templates/finance/data/general/hello.yml +0 -7
  306. rasa/cli/project_templates/finance/data/general/help.yml +0 -9
  307. rasa/cli/project_templates/finance/data/general/human_handoff.yml +0 -16
  308. rasa/cli/project_templates/finance/data/general/welcome.yml +0 -9
  309. rasa/cli/project_templates/finance/data/system/patterns/pattern_chitchat.yml +0 -5
  310. rasa/cli/project_templates/finance/data/system/patterns/pattern_completed.yml +0 -7
  311. rasa/cli/project_templates/finance/data/system/patterns/pattern_correction.yml +0 -7
  312. rasa/cli/project_templates/finance/data/system/patterns/pattern_search.yml +0 -8
  313. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +0 -8
  314. rasa/cli/project_templates/finance/data/system/source/accounts.json +0 -51
  315. rasa/cli/project_templates/finance/data/system/source/advisors.json +0 -44
  316. rasa/cli/project_templates/finance/data/system/source/appointments.json +0 -1474
  317. rasa/cli/project_templates/finance/data/system/source/branches.json +0 -47
  318. rasa/cli/project_templates/finance/data/system/source/cards.json +0 -72
  319. rasa/cli/project_templates/finance/data/system/source/payees.json +0 -74
  320. rasa/cli/project_templates/finance/data/system/source/transactions.json +0 -492
  321. rasa/cli/project_templates/finance/data/system/source/users.json +0 -29
  322. rasa/cli/project_templates/finance/data/transfers/add_payee.yml +0 -29
  323. rasa/cli/project_templates/finance/data/transfers/list_payees.yml +0 -5
  324. rasa/cli/project_templates/finance/data/transfers/remove_payee.yml +0 -21
  325. rasa/cli/project_templates/finance/data/transfers/transfer_money.yml +0 -67
  326. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/consequences_of_blocking_card.txt +0 -8
  327. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/reasons_to_block_card.txt +0 -8
  328. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/recovering_from_card_fraud.txt +0 -8
  329. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/tips_for_card_security.txt +0 -8
  330. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/block_card/what_to_do_if_card_is_lost.txt +0 -8
  331. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/account_balance_security.txt +0 -7
  332. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/common_balance_inquiries.txt +0 -8
  333. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/methods_to_check_balance.txt +0 -8
  334. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/understanding_balance_updates.txt +0 -8
  335. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/check_balance/what_to_do_if_balance_is_incorrect.txt +0 -8
  336. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/benefits_of_authorised_payees.txt +0 -8
  337. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/common_issues_with_payees.txt +0 -8
  338. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/general_payee_information.txt +0 -8
  339. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/payee_management_tips.txt +0 -8
  340. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/manage_payees/understanding_payee_types.txt +0 -8
  341. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/common_transfer_errors.txt +0 -8
  342. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/fees_for_transfers.txt +0 -8
  343. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/general_transfer_information.txt +0 -8
  344. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/security_tips_for_transfers.txt +0 -8
  345. rasa/cli/project_templates/finance/docs/bank_of_rasa_faq/transfer_money/transfer_processing_times.txt +0 -8
  346. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part1.txt +0 -50
  347. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part10.txt +0 -50
  348. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part11.txt +0 -48
  349. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part12.txt +0 -50
  350. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part13.txt +0 -50
  351. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part14.txt +0 -47
  352. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part15.txt +0 -50
  353. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part16.txt +0 -50
  354. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part17.txt +0 -47
  355. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part18.txt +0 -50
  356. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part19.txt +0 -50
  357. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part2.txt +0 -50
  358. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part20.txt +0 -47
  359. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part21.txt +0 -50
  360. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part22.txt +0 -50
  361. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part23.txt +0 -47
  362. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part24.txt +0 -50
  363. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part25.txt +0 -50
  364. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part26.txt +0 -47
  365. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part27.txt +0 -50
  366. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part28.txt +0 -50
  367. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part29.txt +0 -47
  368. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part3.txt +0 -47
  369. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part30.txt +0 -50
  370. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part31.txt +0 -50
  371. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part32.txt +0 -47
  372. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part33.txt +0 -50
  373. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part34.txt +0 -50
  374. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part35.txt +0 -47
  375. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part36.txt +0 -50
  376. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part37.txt +0 -50
  377. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part38.txt +0 -47
  378. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part39.txt +0 -50
  379. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part4.txt +0 -50
  380. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part40.txt +0 -50
  381. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part41.txt +0 -47
  382. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part42.txt +0 -50
  383. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part43.txt +0 -50
  384. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part44.txt +0 -47
  385. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part45.txt +0 -50
  386. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part46.txt +0 -50
  387. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part47.txt +0 -47
  388. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part48.txt +0 -50
  389. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part49.txt +0 -50
  390. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part5.txt +0 -50
  391. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part50.txt +0 -47
  392. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part51.txt +0 -50
  393. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part52.txt +0 -50
  394. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part53.txt +0 -47
  395. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part54.txt +0 -50
  396. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part55.txt +0 -50
  397. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part56.txt +0 -47
  398. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part57.txt +0 -50
  399. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part58.txt +0 -50
  400. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part59.txt +0 -47
  401. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part6.txt +0 -47
  402. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part60.txt +0 -50
  403. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part61.txt +0 -50
  404. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part7.txt +0 -50
  405. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part8.txt +0 -50
  406. rasa/cli/project_templates/finance/docs/huggingface_alpaca_dataset/questions_part9.txt +0 -47
  407. rasa/cli/project_templates/finance/domain/accounts/check_balance.yml +0 -11
  408. rasa/cli/project_templates/finance/domain/cards/block_card.yml +0 -101
  409. rasa/cli/project_templates/finance/domain/cards/select_card.yml +0 -12
  410. rasa/cli/project_templates/finance/domain/general/assistant_details.yml +0 -12
  411. rasa/cli/project_templates/finance/domain/general/bot_identity.yml +0 -5
  412. rasa/cli/project_templates/finance/domain/general/cannot_handle.yml +0 -5
  413. rasa/cli/project_templates/finance/domain/general/defaults.yml +0 -24
  414. rasa/cli/project_templates/finance/domain/general/feedback.yml +0 -28
  415. rasa/cli/project_templates/finance/domain/general/goodbye.yml +0 -7
  416. rasa/cli/project_templates/finance/domain/general/help.yml +0 -5
  417. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +0 -30
  418. rasa/cli/project_templates/finance/domain/general/utils.yml +0 -13
  419. rasa/cli/project_templates/finance/domain/general/welcome.yml +0 -8
  420. rasa/cli/project_templates/finance/domain/transfers/add_payee.yml +0 -47
  421. rasa/cli/project_templates/finance/domain/transfers/list_payees.yml +0 -4
  422. rasa/cli/project_templates/finance/domain/transfers/remove_payee.yml +0 -16
  423. rasa/cli/project_templates/finance/domain/transfers/transfer_money.yml +0 -79
  424. rasa/cli/project_templates/finance/endpoints.yml +0 -63
  425. rasa/cli/project_templates/finance/prompts/rephraser_demo_personality_prompt.jinja2 +0 -19
  426. rasa/cli/project_templates/telco/actions/__init__.py +0 -0
  427. rasa/cli/project_templates/telco/actions/actions_billing.py +0 -204
  428. rasa/cli/project_templates/telco/actions/actions_get_data_from_db.py +0 -48
  429. rasa/cli/project_templates/telco/actions/actions_run_diagnostics.py +0 -28
  430. rasa/cli/project_templates/telco/actions/actions_session_start.py +0 -18
  431. rasa/cli/project_templates/telco/config.yml +0 -25
  432. rasa/cli/project_templates/telco/credentials.yml +0 -33
  433. rasa/cli/project_templates/telco/csvs/billing.csv +0 -10
  434. rasa/cli/project_templates/telco/csvs/customers.csv +0 -5
  435. rasa/cli/project_templates/telco/data/flows/flow_global.yml +0 -5
  436. rasa/cli/project_templates/telco/data/flows/flow_reboot_router.yml +0 -8
  437. rasa/cli/project_templates/telco/data/flows/flow_reset_router.yml +0 -7
  438. rasa/cli/project_templates/telco/data/flows/flow_solve_internet_issue.yml +0 -73
  439. rasa/cli/project_templates/telco/data/flows/flow_undertand_bill.yml +0 -45
  440. rasa/cli/project_templates/telco/data/patterns/pattern_completed.yml +0 -7
  441. rasa/cli/project_templates/telco/data/patterns/pattern_human_handoff.yml +0 -6
  442. rasa/cli/project_templates/telco/data/patterns/pattern_search.yml +0 -7
  443. rasa/cli/project_templates/telco/data/patterns/pattern_session_start.yml +0 -9
  444. rasa/cli/project_templates/telco/docs/reset_vs_rboot_router.txt +0 -1
  445. rasa/cli/project_templates/telco/docs/restart_router.txt +0 -6
  446. rasa/cli/project_templates/telco/docs/run_speed_test.txt +0 -6
  447. rasa/cli/project_templates/telco/domain/domain_global.yml +0 -29
  448. rasa/cli/project_templates/telco/domain/domain_patterns.yml +0 -17
  449. rasa/cli/project_templates/telco/domain/domain_reboot_router.yml +0 -20
  450. rasa/cli/project_templates/telco/domain/domain_reset_router.yml +0 -11
  451. rasa/cli/project_templates/telco/domain/domain_run_speed_test.yml +0 -24
  452. rasa/cli/project_templates/telco/domain/domain_solve_internet_issue.yml +0 -74
  453. rasa/cli/project_templates/telco/domain/domain_undertand_bill.yml +0 -102
  454. rasa/cli/project_templates/telco/endpoints.yml +0 -60
  455. rasa/cli/project_templates/telco/tests/e2e_results_failed.yml +0 -62
  456. rasa/cli/project_templates/telco/tests/e2e_results_passed.yml +0 -130
  457. rasa/cli/project_templates/telco/tests/e2e_test_cases/billing_test_cases.yml +0 -68
  458. rasa/cli/project_templates/telco/tests/e2e_test_cases/global_test_cases.yml +0 -13
  459. rasa/cli/project_templates/telco/tests/e2e_test_cases/internet_slow_test_case.yml +0 -47
  460. rasa/cli/project_templates/telco/tests/e2e_test_cases/out_of_scope_test_case.yml +0 -21
  461. rasa/cli/project_templates/telco/tests/e2e_test_cases/patterns_test_cases.yml +0 -15
  462. rasa/core/channels/constants.py +0 -3
  463. rasa/core/channels/inspector/dist/assets/channel-b9b536fc.js +0 -1
  464. rasa/core/channels/inspector/dist/assets/clone-78d2ddcf.js +0 -1
  465. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-8b09c060.js +0 -1
  466. rasa/core/channels/inspector/dist/assets/index-4d4bdf3a.js +0 -1335
  467. rasa/utils/openapi.py +0 -144
  468. /rasa/{builder → agents}/__init__.py +0 -0
  469. /rasa/{builder/copilot → agents/core}/__init__.py +0 -0
  470. /rasa/{builder/copilot/prompts → agents/protocol/a2a}/__init__.py +0 -0
  471. /rasa/{builder/copilot/templated_messages → agents/protocol/mcp}/__init__.py +0 -0
  472. /rasa/{builder/document_retrieval → agents/templates}/__init__.py +0 -0
  473. /rasa/{cli/project_templates/finance/actions/accounts → shared/agents}/__init__.py +0 -0
  474. /rasa/{cli/project_templates/finance/actions/cards → shared/utils/mcp}/__init__.py +0 -0
  475. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/NOTICE +0 -0
  476. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/WHEEL +0 -0
  477. {rasa_pro-3.14.0.dev5.dist-info → rasa_pro-3.14.0.dev7.dist-info}/entry_points.txt +0 -0
rasa/builder/download.py DELETED
@@ -1,140 +0,0 @@
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 = []
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()
@@ -1,55 +0,0 @@
1
- """Custom exceptions for the prompt-to-bot service."""
2
-
3
- from typing import Any, 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__(self, message: str, validation_logs: Optional[Any] = None):
16
- super().__init__(message)
17
- self.validation_logs = validation_logs
18
-
19
-
20
- class TrainingError(PromptToBotError):
21
- """Raised when model training fails."""
22
-
23
- pass
24
-
25
-
26
- class LLMGenerationError(PromptToBotError):
27
- """Raised when LLM generation fails."""
28
-
29
- pass
30
-
31
-
32
- class DocumentRetrievalError(PromptToBotError):
33
- """Raised when document retrieval fails."""
34
-
35
- pass
36
-
37
-
38
- class SchemaValidationError(PromptToBotError):
39
- """Raised when schema validation fails."""
40
-
41
- pass
42
-
43
-
44
- class AgentLoadError(PromptToBotError):
45
- """Raised when agent loading fails."""
46
-
47
- pass
48
-
49
-
50
- class ProjectGenerationError(PromptToBotError):
51
- """Raised when project generation fails after retries."""
52
-
53
- def __init__(self, message: str, attempts: int):
54
- super().__init__(f"{message} (failed after {attempts} attempts)")
55
- self.attempts = attempts
@@ -1 +0,0 @@
1
-
@@ -1,3 +0,0 @@
1
- LAKERA_API_KEY_ENV_VAR = "LAKERA_API_KEY"
2
- LAKERA_GUARD_ENDPOINT = "guard"
3
- LAKERA_GUARD_RESULTS_ENDPOINT = "guard/results"
@@ -1,4 +0,0 @@
1
- class GuardrailsError(Exception):
2
- """Raised when a guardrails error occurs."""
3
-
4
- pass
@@ -1,206 +0,0 @@
1
- """Lakera AI guardrails provider implementation."""
2
-
3
- import asyncio
4
- import os
5
- import time
6
- from contextlib import asynccontextmanager
7
- from typing import Any, AsyncGenerator, Dict, Optional
8
-
9
- import aiohttp
10
- import structlog
11
-
12
- from rasa.builder import config
13
- from rasa.builder.guardrails.constants import (
14
- LAKERA_API_KEY_ENV_VAR,
15
- LAKERA_GUARD_ENDPOINT,
16
- LAKERA_GUARD_RESULTS_ENDPOINT,
17
- )
18
- from rasa.builder.guardrails.exceptions import GuardrailsError
19
- from rasa.builder.guardrails.models import (
20
- GuardrailResponse,
21
- LakeraGuardrailRequest,
22
- LakeraGuardrailResponse,
23
- )
24
-
25
- structlogger = structlog.get_logger()
26
-
27
-
28
- class LakeraAIGuardrails:
29
- """Guardrails provider using Lakera AI."""
30
-
31
- def __init__(
32
- self,
33
- api_key: Optional[str] = None,
34
- base_url: Optional[str] = None,
35
- ):
36
- """Initialize Lakera guardrails provider.
37
-
38
- Args:
39
- severity_threshold: The minimum severity level for the guardrail to flag
40
- the user request as unsafe.
41
- api_key: Lakera AI API key.
42
- base_url: Optional base URL for the API. If not provided, the default
43
- Lakera API URL (https://api.lakera.ai/v2) will be used.
44
- """
45
- self.base_url: str = base_url or config.LAKERA_BASE_URL
46
- self._api_key: Optional[str] = api_key or os.getenv(LAKERA_API_KEY_ENV_VAR)
47
- self._session: Optional[aiohttp.ClientSession] = None
48
-
49
- @property
50
- def guard_endpoint(self) -> str:
51
- """Get the guard endpoint for the Lakera API."""
52
- return f"{self.base_url}/{LAKERA_GUARD_ENDPOINT}"
53
-
54
- @property
55
- def guard_results_endpoint(self) -> str:
56
- """Get the guard results endpoint for the Lakera API."""
57
- return f"{self.base_url}/{LAKERA_GUARD_RESULTS_ENDPOINT}"
58
-
59
- @asynccontextmanager
60
- async def _get_session(self) -> AsyncGenerator[aiohttp.ClientSession, None]:
61
- """Create a fresh ClientSession, yield it, and always close it."""
62
- session = aiohttp.ClientSession(headers=self._get_headers())
63
- structlogger.debug("lakera_guardrails._get_session", base_url=self.base_url)
64
-
65
- try:
66
- yield session
67
- except Exception as e:
68
- structlogger.error("lakera_guardrails.session_error", error=str(e))
69
- raise
70
- finally:
71
- try:
72
- await session.close()
73
- except Exception as exc:
74
- structlogger.warning(
75
- "lakera_guardrails.session_close_error",
76
- event_info="Failed to close aiohttp client session cleanly.",
77
- error=str(exc),
78
- )
79
-
80
- def _get_headers(self) -> Dict[str, str]:
81
- """Get the headers for the Lakera API request.
82
-
83
- Returns:
84
- A dictionary containing the Authorization header with the API key.
85
- """
86
- using_proxy = bool(config.HELLO_LLM_PROXY_BASE_URL)
87
-
88
- if using_proxy:
89
- if not config.RASA_PRO_LICENSE:
90
- raise GuardrailsError(
91
- "HELLO_LLM_PROXY_BASE_URL is set but RASA_PRO_LICENSE is missing. "
92
- "Proxy requires a Rasa Pro license token for authentication."
93
- )
94
- return {"Authorization": f"Bearer {config.RASA_PRO_LICENSE}"}
95
-
96
- if not self._api_key:
97
- raise GuardrailsError(
98
- "LAKERA_API_KEY is missing. Provide it via env LAKERA_API_KEY or "
99
- "pass api_key= to LakeraAIGuardrails."
100
- )
101
- return {"Authorization": f"Bearer {self._api_key}"}
102
-
103
- async def send_request(self, request: LakeraGuardrailRequest) -> GuardrailResponse:
104
- """Send a request to the Lakera API.
105
-
106
- Args:
107
- request: The guardrail request to send to the Lakera API.
108
-
109
- Returns:
110
- GuardrailResponse with the results of the check.
111
-
112
- Raises:
113
- GuardrailsError: If the request times out or returns a non-200 status code.
114
- Exception: If the request fails for any other reason.
115
- """
116
- start_time = time.time()
117
- try:
118
- async with self._get_session() as session:
119
- raw_response = await self._send_http_request(session, request)
120
- response = LakeraGuardrailResponse.from_raw_response(
121
- raw_response,
122
- hello_rasa_user_id=request.hello_rasa_user_id,
123
- hello_rasa_project_id=request.hello_rasa_project_id,
124
- )
125
- processing_time_ms = (time.time() - start_time) * 1000
126
- response.processing_time_ms = processing_time_ms
127
- return response
128
-
129
- # Propagate the GuardrailsError if it occurs.
130
- except GuardrailsError as e:
131
- raise e
132
-
133
- except asyncio.TimeoutError:
134
- message = "Lakera API request timed out."
135
- structlogger.error(
136
- "lakera_guardrails.send_request.timeout_error",
137
- event_info=message,
138
- processing_time_ms=(time.time() - start_time) * 1000,
139
- )
140
- raise GuardrailsError(message)
141
-
142
- # Propagate the unexpected exceptions.
143
- except Exception as e:
144
- message = "Lakera API request failed."
145
- structlogger.error(
146
- "lakera_guardrails.send_request.unexpected_error",
147
- event_info="Lakera API request failed.",
148
- request=request,
149
- error=e,
150
- processing_time_ms=(time.time() - start_time) * 1000,
151
- )
152
- raise e
153
-
154
- async def _send_http_request(
155
- self, session: aiohttp.ClientSession, request: LakeraGuardrailRequest
156
- ) -> Dict[str, Any]:
157
- """Make an HTTP request to the Lakera API.
158
-
159
- Args:
160
- session: The aiohttp session to use for the request.
161
- request: The guardrail request to send.
162
-
163
- Returns:
164
- The raw JSON response from the API.
165
-
166
- Raises:
167
- GuardrailsError: If the request fails or response parsing fails.
168
- """
169
- # Log the request details for debugging
170
- json_payload = request.to_json_payload()
171
- structlogger.debug(
172
- "lakera_guardrails.send_request.request",
173
- url=self.guard_endpoint,
174
- method="POST",
175
- request_body=json_payload,
176
- )
177
-
178
- async with session.post(
179
- self.guard_endpoint,
180
- json=json_payload,
181
- ) as client_response:
182
- # Check if the response is successful. If not, raise an error.
183
- if client_response.status >= 400:
184
- error_text = await client_response.text()
185
- message = (
186
- f"Lakera API request failed with status "
187
- f"`{client_response.status}`. Error: "
188
- f"`{error_text}`."
189
- )
190
- structlogger.error(
191
- "lakera_guardrails.send_request.http_error",
192
- event_info=message,
193
- url=self.guard_endpoint,
194
- status=client_response.status,
195
- error=error_text,
196
- request_body=json_payload,
197
- )
198
- raise GuardrailsError(message)
199
-
200
- # Parse the response as a dictionary.
201
- raw_response = await client_response.json()
202
- structlogger.debug(
203
- "lakera_guardrails.send_request.response",
204
- response_body=raw_response,
205
- )
206
- return raw_response
@@ -1,199 +0,0 @@
1
- """Models for guardrails system."""
2
-
3
- import copy
4
- from abc import ABC, abstractmethod
5
- from enum import Enum
6
- from typing import Any, Dict, List, Optional
7
-
8
- from pydantic import BaseModel, ConfigDict, Field
9
-
10
-
11
- class GuardrailType(Enum):
12
- """Types of guardrails that can be applied with Lakera AI."""
13
-
14
- PROMPT_ATTACK = "prompt_attack"
15
- CONTENT_VIOLATION = "content_violation"
16
- DATA_LEAKAGE = "data_leakage"
17
- MALICIOUS_LINKS = "malicious_content"
18
- CUSTOM = "custom"
19
- OTHER = "other"
20
-
21
-
22
- class GuardrailRequest(BaseModel, ABC):
23
- """Request for guardrails check."""
24
-
25
- hello_rasa_user_id: Optional[str] = Field(
26
- default=None,
27
- description="Required. User identifier for the Hello Rasa project. ",
28
- )
29
- hello_rasa_project_id: Optional[str] = Field(
30
- default=None,
31
- description="Required. Project identifier for the Hello Rasa project. ",
32
- )
33
- metadata: Optional[Dict[str, Any]] = Field(
34
- default=None, description="Additional metadata for the guardrails endpoint."
35
- )
36
-
37
- @abstractmethod
38
- def to_json_payload(self) -> Dict[str, Any]:
39
- """Convert the request to a JSON payload."""
40
- ...
41
-
42
-
43
- class LakeraGuardrailRequest(GuardrailRequest):
44
- """Request for Lakera guardrails check."""
45
-
46
- lakera_project_id: str = Field(
47
- description="Required. Project identifier for the Lakera AI project."
48
- )
49
- payload: bool = Field(
50
- default=True,
51
- description=(
52
- "From Lakera AI: When true the response will return a payload object "
53
- "containing any PII, profanity or custom detector regex matches detected, "
54
- "along with their location within the contents."
55
- ),
56
- )
57
- breakdown: bool = Field(
58
- default=True,
59
- description=(
60
- "From Lakera AI: When true the response will return a breakdown list of "
61
- "the detectors that were run, as defined in the policy, and whether each "
62
- "of them detected something or not."
63
- ),
64
- )
65
-
66
- messages: List[Dict[str, Any]] = Field(
67
- description=(
68
- "Required. From Lakera AI: List of messages comprising the interaction "
69
- "history with the LLM in OpenAI API Chat Completions format. Can be "
70
- "multiple messages of any role: user, assistant, system, tool, or "
71
- "developer."
72
- ),
73
- )
74
-
75
- def to_json_payload(self) -> Dict[str, Any]:
76
- """Convert the request to a JSON payload to be sent to the Lakera endpoint."""
77
- metadata = self.metadata or {}
78
- metadata["hello_rasa_project_id"] = self.hello_rasa_project_id
79
- metadata["hello_rasa_user_id"] = self.hello_rasa_user_id
80
-
81
- json_payload: Dict[str, Any] = {
82
- "messages": self.messages,
83
- "project_id": self.lakera_project_id,
84
- "metadata": metadata,
85
- }
86
-
87
- if self.payload:
88
- json_payload["payload"] = self.payload
89
- if self.breakdown:
90
- json_payload["breakdown"] = self.breakdown
91
-
92
- return json_payload
93
-
94
-
95
- class GuardrailDetection(BaseModel):
96
- """Represents a single guardrail detection."""
97
-
98
- type: GuardrailType = Field(description="Type of guardrail detection.")
99
- original_type: str = Field(description="Original detection from the provider.")
100
- metadata: Optional[Dict[str, Any]] = Field(
101
- default=None, description="Additional metadata about the detection itself."
102
- )
103
-
104
-
105
- class GuardrailResponse(BaseModel):
106
- """Response from guardrails system."""
107
-
108
- hello_rasa_user_id: Optional[str] = Field(
109
- default=None,
110
- description="Required. User identifier for the Hello Rasa project. ",
111
- )
112
- hello_rasa_project_id: Optional[str] = Field(
113
- default=None,
114
- description="Required. Project identifier for the Hello Rasa project. ",
115
- )
116
- flagged: bool = Field(description="Whether any policy violations were detected.")
117
- detections: List[GuardrailDetection] = Field(
118
- default_factory=list, description="List of detected policy violations."
119
- )
120
- processing_time_ms: Optional[float] = Field(
121
- default=None, description="Processing time in milliseconds."
122
- )
123
- metadata: Optional[Dict[str, Any]] = Field(
124
- default=None, description="Additional metadata from the provider."
125
- )
126
-
127
-
128
- class LakeraGuardrailResponse(GuardrailResponse):
129
- """Response from Lakera AI `/guard` endpoint."""
130
-
131
- @classmethod
132
- def from_raw_response(
133
- cls,
134
- raw_response: Dict[str, Any],
135
- hello_rasa_user_id: str,
136
- hello_rasa_project_id: str,
137
- ) -> "LakeraGuardrailResponse":
138
- """Create a LakeraGuardrailResponse from a response."""
139
- from rasa.builder.guardrails.utils import (
140
- map_lakera_detector_type_to_guardrail_type,
141
- )
142
-
143
- # Get the basic information from the response and create the response object.
144
- flagged = raw_response.get("flagged", False)
145
- metadata = raw_response.get("metadata")
146
- response = cls(
147
- flagged=flagged,
148
- metadata=metadata,
149
- hello_rasa_user_id=hello_rasa_user_id,
150
- hello_rasa_project_id=hello_rasa_project_id,
151
- )
152
-
153
- # If the response is not flagged, return the response object.
154
- if not flagged:
155
- return response
156
-
157
- # If the response is flagged, parse the breakdown section.
158
- breakdown = raw_response.get("breakdown", [])
159
-
160
- # Parse the breakdown.
161
- detections: List[GuardrailDetection] = []
162
- for detector in breakdown:
163
- if detector.get("detected", True):
164
- detector_type = detector.get("detector_type")
165
- rasa_detection_type = map_lakera_detector_type_to_guardrail_type(
166
- detector_type,
167
- )
168
- if not rasa_detection_type:
169
- continue
170
- # Remove the detector type and the detected flag from the detector.
171
- # And keep the rest as part of the metadata. In case of a Lakera this
172
- # will include the message_id, project_id, policy_id, detector_id, etc.
173
- metadata = copy.deepcopy(detector)
174
- metadata.pop("detected")
175
- metadata.pop("detector_type")
176
-
177
- detections.append(
178
- GuardrailDetection(
179
- type=rasa_detection_type,
180
- original_type=detector_type,
181
- metadata=metadata,
182
- )
183
- )
184
-
185
- # If there are detections, add them to the response.
186
- if detections:
187
- response.detections = detections
188
-
189
- return response
190
-
191
-
192
- class GuardrailRequestKey(BaseModel):
193
- user_text: str
194
- hello_rasa_user_id: str = ""
195
- hello_rasa_project_id: str = ""
196
- lakera_project_id: str
197
-
198
- # hashable by value
199
- model_config = ConfigDict(frozen=True)