rasa-pro 3.14.0.dev20250922__py3-none-any.whl → 3.14.0rc2__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 (304) hide show
  1. rasa/__main__.py +15 -3
  2. rasa/agents/__init__.py +0 -0
  3. rasa/agents/agent_factory.py +122 -0
  4. rasa/agents/agent_manager.py +211 -0
  5. rasa/agents/constants.py +43 -0
  6. rasa/agents/core/__init__.py +0 -0
  7. rasa/agents/core/agent_protocol.py +107 -0
  8. rasa/agents/core/types.py +81 -0
  9. rasa/agents/exceptions.py +38 -0
  10. rasa/agents/protocol/__init__.py +5 -0
  11. rasa/agents/protocol/a2a/__init__.py +0 -0
  12. rasa/agents/protocol/a2a/a2a_agent.py +879 -0
  13. rasa/agents/protocol/mcp/__init__.py +0 -0
  14. rasa/agents/protocol/mcp/mcp_base_agent.py +726 -0
  15. rasa/agents/protocol/mcp/mcp_open_agent.py +327 -0
  16. rasa/agents/protocol/mcp/mcp_task_agent.py +522 -0
  17. rasa/agents/schemas/__init__.py +13 -0
  18. rasa/agents/schemas/agent_input.py +38 -0
  19. rasa/agents/schemas/agent_output.py +26 -0
  20. rasa/agents/schemas/agent_tool_result.py +65 -0
  21. rasa/agents/schemas/agent_tool_schema.py +186 -0
  22. rasa/agents/templates/__init__.py +0 -0
  23. rasa/agents/templates/mcp_open_agent_prompt_template.jinja2 +20 -0
  24. rasa/agents/templates/mcp_task_agent_prompt_template.jinja2 +22 -0
  25. rasa/agents/utils.py +206 -0
  26. rasa/agents/validation.py +485 -0
  27. rasa/api.py +24 -9
  28. rasa/builder/config.py +6 -2
  29. rasa/builder/copilot/constants.py +4 -1
  30. rasa/builder/copilot/copilot.py +155 -79
  31. rasa/builder/copilot/models.py +304 -108
  32. rasa/builder/copilot/prompts/copilot_training_error_handler_prompt.jinja2 +53 -0
  33. rasa/builder/guardrails/{lakera.py → clients.py} +55 -5
  34. rasa/builder/guardrails/constants.py +3 -0
  35. rasa/builder/guardrails/models.py +45 -10
  36. rasa/builder/guardrails/policy_checker.py +324 -0
  37. rasa/builder/guardrails/utils.py +42 -276
  38. rasa/builder/jobs.py +182 -12
  39. rasa/builder/llm_service.py +32 -5
  40. rasa/builder/models.py +13 -3
  41. rasa/builder/project_generator.py +6 -1
  42. rasa/builder/service.py +31 -15
  43. rasa/builder/training_service.py +18 -24
  44. rasa/builder/validation_service.py +1 -1
  45. rasa/cli/arguments/default_arguments.py +12 -0
  46. rasa/cli/arguments/run.py +2 -0
  47. rasa/cli/arguments/train.py +2 -0
  48. rasa/cli/data.py +10 -8
  49. rasa/cli/dialogue_understanding_test.py +10 -7
  50. rasa/cli/e2e_test.py +9 -6
  51. rasa/cli/evaluate.py +4 -2
  52. rasa/cli/export.py +5 -2
  53. rasa/cli/inspect.py +8 -4
  54. rasa/cli/interactive.py +5 -4
  55. rasa/cli/llm_fine_tuning.py +11 -6
  56. rasa/cli/project_templates/finance/domain/general/help.yml +0 -0
  57. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  58. rasa/cli/run.py +12 -10
  59. rasa/cli/scaffold.py +4 -4
  60. rasa/cli/shell.py +9 -5
  61. rasa/cli/studio/studio.py +1 -1
  62. rasa/cli/test.py +34 -14
  63. rasa/cli/train.py +41 -28
  64. rasa/cli/utils.py +1 -393
  65. rasa/cli/validation/__init__.py +0 -0
  66. rasa/cli/validation/bot_config.py +223 -0
  67. rasa/cli/validation/config_path_validation.py +257 -0
  68. rasa/cli/x.py +8 -4
  69. rasa/constants.py +7 -1
  70. rasa/core/actions/action.py +51 -10
  71. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  72. rasa/core/agent.py +19 -2
  73. rasa/core/available_agents.py +229 -0
  74. rasa/core/brokers/kafka.py +5 -1
  75. rasa/core/channels/__init__.py +82 -35
  76. rasa/core/channels/development_inspector.py +3 -3
  77. rasa/core/channels/inspector/README.md +25 -13
  78. rasa/core/channels/inspector/dist/assets/{arc-35222594.js → arc-6177260a.js} +1 -1
  79. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-a0efbfd3.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  80. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0584c0f2.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  81. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  82. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-39f40dbe.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  83. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-1ad755f3.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  84. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  85. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-b0f4f0fe.js → createText-2e5e7dd3-088372e2.js} +1 -1
  86. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-9039bff9.js → edges-e0da2a9e-58676240.js} +1 -1
  87. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-65c9b127.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  88. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4f08b38e.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  89. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-e95c362a.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  90. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  91. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-703c3015.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  92. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-699328ea.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  93. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-04cf4b05.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  94. rasa/core/channels/inspector/dist/assets/{graph-ee94449e.js → graph-0a6f8466.js} +1 -1
  95. rasa/core/channels/inspector/dist/assets/{index-3862675e-940162b4.js → index-3862675e-7610671a.js} +1 -1
  96. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  97. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-c79c2866.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  98. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-84489d30.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  99. rasa/core/channels/inspector/dist/assets/{layout-a9aa9858.js → layout-e7fbc2bf.js} +1 -1
  100. rasa/core/channels/inspector/dist/assets/{line-eb73cf26.js → line-a8aa457c.js} +1 -1
  101. rasa/core/channels/inspector/dist/assets/{linear-b3399f9a.js → linear-3351e0d2.js} +1 -1
  102. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-b095bf1a.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  103. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-07644b66.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  104. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-573a3f9c.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  105. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d457e1e1.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  106. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-9d26e1a2.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  107. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3a9cde10.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  108. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-4f3e8cec.js → stateDiagram-587899a1-0e770395.js} +1 -1
  109. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e617e5bf.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  110. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-eab30d2f.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  111. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-09994be2.js → styles-9a916d00-884a8b5b.js} +1 -1
  112. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-b7110364.js → styles-c10674c1-dc097813.js} +1 -1
  113. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-3ebc92ad.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  114. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-7d13d2f2.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  115. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-488385e1.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  116. rasa/core/channels/inspector/dist/index.html +1 -1
  117. rasa/core/channels/inspector/package.json +18 -18
  118. rasa/core/channels/inspector/src/App.tsx +29 -4
  119. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  120. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  121. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +7 -4
  122. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  123. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  124. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  125. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  126. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  127. rasa/core/channels/inspector/src/types.ts +21 -0
  128. rasa/core/channels/inspector/yarn.lock +336 -189
  129. rasa/core/channels/studio_chat.py +6 -6
  130. rasa/core/channels/telegram.py +4 -9
  131. rasa/core/channels/voice_stream/genesys.py +1 -1
  132. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  133. rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
  134. rasa/core/channels/voice_stream/voice_channel.py +3 -0
  135. rasa/core/concurrent_lock_store.py +38 -21
  136. rasa/core/config/__init__.py +0 -0
  137. rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
  138. rasa/core/config/configuration.py +260 -0
  139. rasa/core/config/credentials.py +19 -0
  140. rasa/core/config/message_procesing_config.py +34 -0
  141. rasa/core/constants.py +10 -0
  142. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +69 -4
  143. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +2 -1
  144. rasa/core/lock_store.py +4 -0
  145. rasa/core/policies/enterprise_search_policy.py +5 -3
  146. rasa/core/policies/flow_policy.py +4 -4
  147. rasa/core/policies/flows/agent_executor.py +632 -0
  148. rasa/core/policies/flows/flow_executor.py +136 -75
  149. rasa/core/policies/flows/mcp_tool_executor.py +298 -0
  150. rasa/core/policies/intentless_policy.py +1 -1
  151. rasa/core/policies/ted_policy.py +20 -12
  152. rasa/core/policies/unexpected_intent_policy.py +6 -0
  153. rasa/core/processor.py +68 -44
  154. rasa/core/redis_connection_factory.py +7 -2
  155. rasa/core/run.py +37 -8
  156. rasa/core/test.py +4 -0
  157. rasa/core/tracker_stores/redis_tracker_store.py +4 -0
  158. rasa/core/tracker_stores/sql_tracker_store.py +3 -1
  159. rasa/core/tracker_stores/tracker_store.py +3 -7
  160. rasa/core/train.py +1 -1
  161. rasa/core/training/interactive.py +20 -18
  162. rasa/core/training/story_conflict.py +5 -5
  163. rasa/core/utils.py +22 -23
  164. rasa/dialogue_understanding/commands/__init__.py +8 -0
  165. rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
  166. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  167. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  168. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  169. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  170. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  171. rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
  172. rasa/dialogue_understanding/commands/utils.py +124 -2
  173. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  174. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  175. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  176. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  177. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  178. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  179. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  180. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  181. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  182. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  183. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  184. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  185. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  186. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  187. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
  188. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  189. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  190. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  191. rasa/dialogue_understanding/stack/utils.py +57 -3
  192. rasa/dialogue_understanding/utils.py +24 -4
  193. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  194. rasa/e2e_test/e2e_test_runner.py +13 -3
  195. rasa/engine/caching.py +2 -2
  196. rasa/engine/constants.py +1 -1
  197. rasa/engine/recipes/default_components.py +138 -49
  198. rasa/engine/recipes/default_recipe.py +108 -11
  199. rasa/engine/runner/dask.py +8 -5
  200. rasa/engine/validation.py +19 -6
  201. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  202. rasa/hooks.py +5 -5
  203. rasa/llm_fine_tuning/utils.py +2 -2
  204. rasa/model_training.py +60 -47
  205. rasa/nlu/classifiers/diet_classifier.py +198 -98
  206. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  207. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  208. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  209. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  210. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  211. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  212. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  213. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  214. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  215. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  216. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  217. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  218. rasa/nlu/selectors/response_selector.py +10 -2
  219. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  220. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  221. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  222. rasa/nlu/utils/mitie_utils.py +3 -0
  223. rasa/nlu/utils/spacy_utils.py +3 -2
  224. rasa/plugin.py +8 -8
  225. rasa/privacy/privacy_manager.py +12 -3
  226. rasa/server.py +15 -3
  227. rasa/shared/agents/__init__.py +0 -0
  228. rasa/shared/agents/auth/__init__.py +0 -0
  229. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  230. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  231. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  232. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  233. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  234. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  235. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
  236. rasa/shared/agents/auth/constants.py +12 -0
  237. rasa/shared/agents/auth/types.py +12 -0
  238. rasa/shared/agents/utils.py +35 -0
  239. rasa/shared/constants.py +8 -0
  240. rasa/shared/core/constants.py +16 -1
  241. rasa/shared/core/domain.py +0 -7
  242. rasa/shared/core/events.py +327 -0
  243. rasa/shared/core/flows/constants.py +5 -0
  244. rasa/shared/core/flows/flows_list.py +21 -5
  245. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  246. rasa/shared/core/flows/steps/call.py +49 -5
  247. rasa/shared/core/flows/steps/collect.py +98 -13
  248. rasa/shared/core/flows/validation.py +372 -8
  249. rasa/shared/core/flows/yaml_flows_io.py +3 -2
  250. rasa/shared/core/slots.py +2 -2
  251. rasa/shared/core/trackers.py +5 -2
  252. rasa/shared/exceptions.py +16 -0
  253. rasa/shared/importers/rasa.py +1 -1
  254. rasa/shared/importers/utils.py +9 -3
  255. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  256. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  257. rasa/shared/providers/llm/llm_client.py +7 -3
  258. rasa/shared/providers/llm/llm_response.py +66 -0
  259. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  260. rasa/shared/utils/common.py +24 -0
  261. rasa/shared/utils/health_check/health_check.py +7 -3
  262. rasa/shared/utils/llm.py +39 -16
  263. rasa/shared/utils/mcp/__init__.py +0 -0
  264. rasa/shared/utils/mcp/server_connection.py +247 -0
  265. rasa/shared/utils/mcp/utils.py +20 -0
  266. rasa/shared/utils/schemas/events.py +42 -0
  267. rasa/shared/utils/yaml.py +3 -1
  268. rasa/studio/pull/pull.py +3 -2
  269. rasa/studio/train.py +8 -7
  270. rasa/studio/upload.py +3 -6
  271. rasa/telemetry.py +69 -5
  272. rasa/tracing/config.py +45 -12
  273. rasa/tracing/constants.py +14 -0
  274. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  275. rasa/tracing/instrumentation/instrumentation.py +626 -21
  276. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  277. rasa/tracing/instrumentation/metrics.py +32 -0
  278. rasa/tracing/metric_instrument_provider.py +68 -0
  279. rasa/utils/common.py +92 -1
  280. rasa/utils/endpoints.py +11 -2
  281. rasa/utils/log_utils.py +96 -5
  282. rasa/utils/ml_utils.py +1 -1
  283. rasa/utils/tensorflow/__init__.py +7 -0
  284. rasa/utils/tensorflow/callback.py +136 -101
  285. rasa/utils/tensorflow/crf.py +1 -1
  286. rasa/utils/tensorflow/data_generator.py +21 -8
  287. rasa/utils/tensorflow/layers.py +21 -11
  288. rasa/utils/tensorflow/metrics.py +7 -3
  289. rasa/utils/tensorflow/models.py +56 -8
  290. rasa/utils/tensorflow/rasa_layers.py +8 -6
  291. rasa/utils/tensorflow/transformer.py +2 -3
  292. rasa/utils/train_utils.py +54 -24
  293. rasa/validator.py +5 -5
  294. rasa/version.py +1 -1
  295. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/METADATA +47 -41
  296. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/RECORD +299 -238
  297. rasa/builder/scrape_rasa_docs.py +0 -97
  298. rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +0 -1
  299. rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +0 -1
  300. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +0 -1
  301. rasa/core/channels/inspector/dist/assets/index-c941dcb3.js +0 -1336
  302. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/NOTICE +0 -0
  303. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/WHEEL +0 -0
  304. {rasa_pro-3.14.0.dev20250922.dist-info → rasa_pro-3.14.0rc2.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,7 @@
1
1
  import argparse
2
2
  import asyncio
3
3
  import sys
4
+ from pathlib import Path
4
5
  from typing import Any, Dict, List, Type, cast
5
6
 
6
7
  import structlog
@@ -14,13 +15,15 @@ from rasa.cli.arguments.default_arguments import (
14
15
  add_endpoint_param,
15
16
  add_model_param,
16
17
  add_remote_storage_param,
18
+ add_sub_agents_param,
17
19
  )
18
20
  from rasa.cli.e2e_test import (
19
21
  RASA_PRO_BETA_FINE_TUNING_RECIPE_ENV_VAR_NAME,
20
22
  read_test_cases,
21
23
  validate_model_path,
22
24
  )
23
- from rasa.core.available_endpoints import AvailableEndpoints
25
+ from rasa.core.config.available_endpoints import AvailableEndpoints
26
+ from rasa.core.config.configuration import Configuration
24
27
  from rasa.core.exceptions import AgentNotReady
25
28
  from rasa.dialogue_understanding.generator.llm_based_command_generator import (
26
29
  LLMBasedCommandGenerator,
@@ -46,7 +49,6 @@ from rasa.llm_fine_tuning.train_test_split_module import (
46
49
  split_llm_fine_tuning_data,
47
50
  )
48
51
  from rasa.shared.constants import (
49
- DEFAULT_ENDPOINTS_PATH,
50
52
  DEFAULT_MODELS_PATH,
51
53
  LLM_CONFIG_KEY,
52
54
  )
@@ -137,6 +139,8 @@ def add_data_preparation_arguments(parser: argparse.ArgumentParser) -> None:
137
139
  default=DEFAULT_INPUT_E2E_TEST_PATH,
138
140
  )
139
141
 
142
+ add_sub_agents_param(parser)
143
+
140
144
  add_remote_storage_param(parser)
141
145
 
142
146
  rephrasing_arguments = parser.add_argument_group("Rephrasing Module")
@@ -376,6 +380,7 @@ def write_params(
376
380
  "rephrase_config": rephrase_config,
377
381
  "model": args.model,
378
382
  "endpoints": args.endpoints,
383
+ "sub-agents": args.sub_agents,
379
384
  "remote-storage": args.remote_storage,
380
385
  "train_frac": args.train_frac,
381
386
  "output_format": args.output_format,
@@ -393,10 +398,9 @@ def write_statistics(statistics: Dict[str, Any], output_path: str) -> None:
393
398
 
394
399
 
395
400
  def get_valid_endpoints(endpoints_file: str) -> AvailableEndpoints:
396
- validated_endpoints_file = rasa.cli.utils.get_validated_path(
397
- endpoints_file, "endpoints", DEFAULT_ENDPOINTS_PATH, True
398
- )
399
- endpoints = AvailableEndpoints.get_instance(validated_endpoints_file)
401
+ endpoints = Configuration.initialise_endpoints(
402
+ endpoints_path=Path(endpoints_file)
403
+ ).endpoints
400
404
 
401
405
  # Ignore all endpoints apart from action server, model, nlu and nlg
402
406
  # to ensure InMemoryTrackerStore is being used instead of production
@@ -420,6 +424,7 @@ def set_up_e2e_test_runner(args: argparse.Namespace) -> E2ETestRunner:
420
424
  model_path=args.model,
421
425
  model_server=endpoints.model,
422
426
  endpoints=endpoints,
427
+ sub_agents_path=args.sub_agents,
423
428
  )
424
429
  except AgentNotReady as error:
425
430
  structlogger.error(
@@ -31,3 +31,13 @@ rest:
31
31
  # for the Rasa Enterprise "channel", i.e. Talk to your bot and Share with guest testers.
32
32
  rasa:
33
33
  url: "http://localhost:5002/api"
34
+
35
+ # The Browser Audio channel enables voice interactions with your assistant directly in the browser.
36
+ # Used by the Rasa Voice Inspector, it provides speech-to-text and text-to-speech capabilities
37
+ # through services like Deepgram.
38
+ browser_audio:
39
+ server_url: localhost
40
+ asr:
41
+ name: deepgram
42
+ tts:
43
+ name: deepgram
rasa/cli/run.py CHANGED
@@ -7,12 +7,12 @@ from rasa.api import run as rasa_run
7
7
  from rasa.cli import SubParsersAction
8
8
  from rasa.cli.arguments import run as arguments
9
9
  from rasa.cli.arguments.default_arguments import SkipYamlValidation
10
- from rasa.cli.utils import get_validated_path
10
+ from rasa.core.config.configuration import (
11
+ Configuration,
12
+ )
11
13
  from rasa.exceptions import ModelNotFound
12
14
  from rasa.shared.constants import (
13
15
  DEFAULT_ACTIONS_PATH,
14
- DEFAULT_CREDENTIALS_PATH,
15
- DEFAULT_ENDPOINTS_PATH,
16
16
  DEFAULT_MODELS_PATH,
17
17
  DOCS_BASE_URL,
18
18
  )
@@ -86,11 +86,10 @@ def run(args: argparse.Namespace) -> None:
86
86
  Args:
87
87
  args: The CLI arguments.
88
88
  """
89
- args.endpoints = get_validated_path(
90
- args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
91
- )
92
- args.credentials = get_validated_path(
93
- args.credentials, "credentials", DEFAULT_CREDENTIALS_PATH, True
89
+ Configuration.initialise_endpoints(
90
+ args.endpoints,
91
+ ).initialise_credentials(
92
+ args.credentials,
94
93
  )
95
94
 
96
95
  if SkipYamlValidation.DOMAIN.value in args.skip_yaml_validation:
@@ -109,7 +108,7 @@ def run(args: argparse.Namespace) -> None:
109
108
  # configured
110
109
 
111
110
  import rasa.model
112
- from rasa.core.available_endpoints import AvailableEndpoints
111
+ from rasa.core.available_agents import AvailableAgents
113
112
 
114
113
  # start server if remote storage is configured
115
114
  if args.remote_storage is not None:
@@ -117,12 +116,15 @@ def run(args: argparse.Namespace) -> None:
117
116
  return
118
117
 
119
118
  # start server if model server is configured
120
- endpoints = AvailableEndpoints.get_instance(args.endpoints)
119
+ endpoints = Configuration.get_instance().endpoints
121
120
  model_server = endpoints.model if endpoints and endpoints.model else None
122
121
  if model_server is not None:
123
122
  rasa_run(**vars(args))
124
123
  return
125
124
 
125
+ # load sub-agents
126
+ AvailableAgents.get_instance(args.sub_agents)
127
+
126
128
  # start server if local model found
127
129
  args.model = _validate_model_path(args.model, "model", DEFAULT_MODELS_PATH)
128
130
  local_model_set = True
rasa/cli/scaffold.py CHANGED
@@ -104,10 +104,10 @@ def print_train_or_instructions(args: argparse.Namespace) -> None:
104
104
  if should_train:
105
105
  print_success("Training an initial model...")
106
106
  training_result = train(
107
- template_domain_path[args.template],
108
- DEFAULT_CONFIG_PATH,
109
- DEFAULT_DATA_PATH,
110
- DEFAULT_MODELS_PATH,
107
+ domain=template_domain_path[args.template],
108
+ config=DEFAULT_CONFIG_PATH,
109
+ training_files=DEFAULT_DATA_PATH,
110
+ output=DEFAULT_MODELS_PATH,
111
111
  )
112
112
  args.model = training_result.model
113
113
 
rasa/cli/shell.py CHANGED
@@ -1,12 +1,14 @@
1
1
  import argparse
2
2
  import logging
3
3
  import uuid
4
+ from pathlib import Path
4
5
  from typing import List
5
6
 
6
7
  from rasa import telemetry
7
8
  from rasa.cli import SubParsersAction
8
9
  from rasa.cli.arguments import shell as arguments
9
- from rasa.core.available_endpoints import AvailableEndpoints
10
+ from rasa.cli.arguments.default_arguments import add_sub_agents_param
11
+ from rasa.core.config.configuration import Configuration
10
12
  from rasa.engine.storage.local_model_storage import LocalModelStorage
11
13
  from rasa.exceptions import ModelNotFound
12
14
  from rasa.model import get_local_model
@@ -45,6 +47,8 @@ def add_subparser(
45
47
  help="Set the conversation ID.",
46
48
  )
47
49
 
50
+ add_sub_agents_param(shell_parser)
51
+
48
52
  run_subparsers = shell_parser.add_subparsers()
49
53
 
50
54
  shell_nlu_subparser = run_subparsers.add_parser(
@@ -64,7 +68,7 @@ def add_subparser(
64
68
  def shell_nlu(args: argparse.Namespace) -> None:
65
69
  """Talk with an NLU only bot though the command line."""
66
70
  import rasa.nlu.run
67
- from rasa.cli.utils import get_validated_path
71
+ from rasa.cli.validation.config_path_validation import get_validated_path
68
72
  from rasa.shared.constants import DEFAULT_MODELS_PATH
69
73
 
70
74
  args.connector = "cmdline"
@@ -102,15 +106,15 @@ def shell_nlu(args: argparse.Namespace) -> None:
102
106
 
103
107
  def shell(args: argparse.Namespace) -> None:
104
108
  """Talk with a bot though the command line."""
105
- from rasa.cli.utils import get_validated_path
109
+ from rasa.cli.validation.config_path_validation import get_validated_path
106
110
  from rasa.shared.constants import DEFAULT_MODELS_PATH
107
111
 
108
112
  args.connector = "cmdline"
109
113
  # Load endpoints with proper endpoint file location
110
114
  # This will initialise the endpoints singleton properly so that
111
115
  # it can be used safely throughout the codebase with
112
- # `AvailableEndpoints.get_instance()`
113
- AvailableEndpoints.get_instance(args.endpoints)
116
+ # `Configuration.get_instance().endpoints`
117
+ Configuration.initialise_endpoints(endpoints_path=Path(args.endpoints))
114
118
  model = get_validated_path(args.model, "model", DEFAULT_MODELS_PATH)
115
119
 
116
120
  try:
rasa/cli/studio/studio.py CHANGED
@@ -12,7 +12,7 @@ import rasa.cli.studio.train
12
12
  import rasa.cli.studio.upload
13
13
  import rasa.shared.utils.cli
14
14
  from rasa.cli import SubParsersAction
15
- from rasa.cli.utils import get_validated_path
15
+ from rasa.cli.validation.config_path_validation import get_validated_path
16
16
  from rasa.shared.constants import DEFAULT_DOMAIN_PATH, DEFAULT_DOMAIN_PATHS
17
17
  from rasa.studio.auth import StudioAuth
18
18
  from rasa.studio.config import StudioConfig
rasa/cli/test.py CHANGED
@@ -11,6 +11,13 @@ import rasa.shared.utils.io
11
11
  import rasa.utils.common
12
12
  from rasa.cli import SubParsersAction
13
13
  from rasa.cli.arguments import test as arguments
14
+ from rasa.cli.validation.config_path_validation import get_validated_path
15
+ from rasa.core.config.configuration import (
16
+ Configuration,
17
+ CredentialsConfigPath,
18
+ EndpointsConfigPath,
19
+ MessageProcessingConfigPath,
20
+ )
14
21
  from rasa.core.constants import (
15
22
  FAILED_STORIES_FILE,
16
23
  STORIES_WITH_WARNINGS_FILE,
@@ -100,10 +107,16 @@ async def run_core_test_async(args: argparse.Namespace) -> None:
100
107
  test_core_models_in_directory,
101
108
  )
102
109
 
103
- stories = rasa.cli.utils.get_validated_path(
104
- args.stories, "stories", DEFAULT_DATA_PATH
110
+ Configuration.initialise_endpoints(
111
+ endpoints_path=EndpointsConfigPath.validate(),
112
+ ).initialise_credentials(
113
+ credentials_path=CredentialsConfigPath.validate()
114
+ ).initialise_message_processing(
115
+ message_processing_config_path=MessageProcessingConfigPath.validate()
105
116
  )
106
117
 
118
+ stories = get_validated_path(args.stories, "stories", DEFAULT_DATA_PATH)
119
+
107
120
  output = args.out or DEFAULT_RESULTS_PATH
108
121
  args.errors = not args.no_errors
109
122
  args.warnings = not args.no_warnings
@@ -121,9 +134,7 @@ async def run_core_test_async(args: argparse.Namespace) -> None:
121
134
  return
122
135
 
123
136
  if isinstance(args.model, str):
124
- model_path = rasa.cli.utils.get_validated_path(
125
- args.model, "model", DEFAULT_MODELS_PATH
126
- )
137
+ model_path = get_validated_path(args.model, "model", DEFAULT_MODELS_PATH)
127
138
 
128
139
  if args.evaluate_model_directory:
129
140
  await test_core_models_in_directory(
@@ -182,9 +193,7 @@ async def run_nlu_test_async(
182
193
  test_nlu,
183
194
  )
184
195
 
185
- data_path = str(
186
- rasa.cli.utils.get_validated_path(data_path, "nlu", DEFAULT_DATA_PATH)
187
- )
196
+ data_path = str(get_validated_path(data_path, "nlu", DEFAULT_DATA_PATH))
188
197
  test_data_importer = TrainingDataImporter.load_from_dict(
189
198
  training_data_paths=[data_path], domain_path=domain_path
190
199
  )
@@ -225,18 +234,29 @@ async def run_nlu_test_async(
225
234
  )
226
235
  elif cross_validation:
227
236
  logger.info("Test model using cross validation.")
228
- # FIXME: supporting Union[Path, Text] down the chain
229
- # is the proper fix and needs more work
230
- config = str(
231
- rasa.cli.utils.get_validated_path(config, "config", DEFAULT_CONFIG_PATH)
237
+
238
+ Configuration.initialise_endpoints(
239
+ endpoints_path=EndpointsConfigPath.validate(),
240
+ ).initialise_credentials(
241
+ credentials_path=CredentialsConfigPath.validate()
242
+ ).initialise_message_processing(
243
+ message_processing_config_path=MessageProcessingConfigPath.validate(config),
232
244
  )
245
+
246
+ config = str(get_validated_path(config, "config", DEFAULT_CONFIG_PATH))
233
247
  config_importer = TrainingDataImporter.load_from_dict(config_path=config)
234
248
 
235
249
  config_dict = config_importer.get_config()
236
250
  await perform_nlu_cross_validation(config_dict, nlu_data, output, all_args)
237
251
  else:
238
- model_path = rasa.cli.utils.get_validated_path(
239
- models_path, "model", DEFAULT_MODELS_PATH
252
+ model_path = get_validated_path(models_path, "model", DEFAULT_MODELS_PATH)
253
+
254
+ Configuration.initialise_endpoints(
255
+ endpoints_path=EndpointsConfigPath.validate(),
256
+ ).initialise_credentials(
257
+ credentials_path=CredentialsConfigPath.validate()
258
+ ).initialise_message_processing(
259
+ message_processing_config_path=MessageProcessingConfigPath.validate(config),
240
260
  )
241
261
 
242
262
  await test_nlu(model_path, data_path, output, all_args, domain_path=domain_path)
rasa/cli/train.py CHANGED
@@ -7,10 +7,13 @@ from typing import Dict, List, Optional, Text, Union
7
7
  import structlog
8
8
 
9
9
  import rasa.cli.arguments.train as train_arguments
10
- import rasa.cli.utils
11
- import rasa.core.utils
12
- import rasa.utils.common
13
10
  from rasa.cli import SubParsersAction
11
+ from rasa.cli.validation.bot_config import validate_files
12
+ from rasa.cli.validation.config_path_validation import (
13
+ get_validated_config,
14
+ get_validated_path,
15
+ )
16
+ from rasa.core.config.configuration import Configuration
14
17
  from rasa.core.nlg.contextual_response_rephraser import ContextualResponseRephraser
15
18
  from rasa.core.nlg.generator import NaturalLanguageGenerator
16
19
  from rasa.core.train import do_compare_training
@@ -74,7 +77,9 @@ def add_subparser(
74
77
 
75
78
  def _check_nlg_endpoint_validity(endpoint: Union[Path, str]) -> None:
76
79
  try:
77
- endpoints = rasa.core.utils.read_endpoints_from_path(endpoint)
80
+ endpoints = Configuration.initialise_endpoints(
81
+ endpoints_path=endpoint
82
+ ).endpoints
78
83
  if endpoints.nlg is not None:
79
84
  validate_api_type_config_key_usage(
80
85
  endpoints.nlg.kwargs,
@@ -115,21 +120,17 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
115
120
  """
116
121
  from rasa.api import train as train_all
117
122
 
118
- domain = rasa.cli.utils.get_validated_path(
123
+ domain = get_validated_path(
119
124
  args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
120
125
  )
121
- config = rasa.cli.utils.get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
126
+ config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
122
127
 
123
128
  # Validates and loads endpoints with proper endpoint file location
124
- # This will initialise the endpoints singleton properly so that
125
- # it can be used safely throughout the codebase with
126
- # `AvailableEndpoints.get_instance()`
129
+ # TODO(Radovan): this should be probably be done in Configuration
127
130
  _check_nlg_endpoint_validity(args.endpoints)
128
131
 
129
132
  training_files = [
130
- rasa.cli.utils.get_validated_path(
131
- f, "data", DEFAULT_DATA_PATH, none_is_valid=True
132
- )
133
+ get_validated_path(f, "data", DEFAULT_DATA_PATH, none_is_valid=True)
133
134
  for f in args.data
134
135
  ]
135
136
 
@@ -143,15 +144,17 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
143
144
  event_info="Started validating domain and training data...",
144
145
  )
145
146
 
146
- rasa.cli.utils.validate_files(
147
+ validate_files(
147
148
  args.fail_on_validation_warnings,
148
149
  args.validation_max_history,
149
150
  training_data_importer,
151
+ sub_agents=args.sub_agents,
150
152
  )
151
153
 
152
154
  training_result = train_all(
153
155
  domain=domain,
154
156
  config=config,
157
+ endpoints=args.endpoints,
155
158
  training_files=training_files,
156
159
  output=args.out,
157
160
  dry_run=args.dry_run,
@@ -168,6 +171,7 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
168
171
  file_importer=training_data_importer,
169
172
  keep_local_model_copy=args.keep_local_model_copy,
170
173
  remote_root_only=args.remote_root_only,
174
+ sub_agents=args.sub_agents,
171
175
  )
172
176
  if training_result.code != 0 and can_exit:
173
177
  display_research_study_prompt()
@@ -177,13 +181,19 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
177
181
 
178
182
 
179
183
  def _model_for_finetuning(args: argparse.Namespace) -> Optional[Text]:
180
- if args.finetune == train_arguments.USE_LATEST_MODEL_FOR_FINE_TUNING:
181
- # We use this constant to signal that the user specified `--finetune` but
182
- # didn't provide a path to a model. In this case we try to load the latest
183
- # model from the output directory (that's usually models/).
184
- return args.out
185
- else:
186
- return args.finetune
184
+ if args.finetune is not None:
185
+ structlogger.error(
186
+ "cli.train.incremental_training_not_supported",
187
+ event_info=(
188
+ "Incremental training (--finetune) is "
189
+ "not supported in Rasa 3.14.0 onwards. "
190
+ "Please retrain your model from scratch "
191
+ "if you have updated your configuration. "
192
+ ),
193
+ )
194
+ display_research_study_prompt()
195
+ sys.exit(1)
196
+ return None
187
197
 
188
198
 
189
199
  def run_core_training(args: argparse.Namespace) -> Optional[Text]:
@@ -197,10 +207,10 @@ def run_core_training(args: argparse.Namespace) -> Optional[Text]:
197
207
  """
198
208
  from rasa.model_training import train_core
199
209
 
200
- args.domain = rasa.cli.utils.get_validated_path(
210
+ args.domain = get_validated_path(
201
211
  args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
202
212
  )
203
- story_file = rasa.cli.utils.get_validated_path(
213
+ story_file = get_validated_path(
204
214
  args.stories, "stories", DEFAULT_DATA_PATH, none_is_valid=True
205
215
  )
206
216
  additional_arguments = {
@@ -213,9 +223,11 @@ def run_core_training(args: argparse.Namespace) -> Optional[Text]:
213
223
  if isinstance(args.config, list):
214
224
  args.config = args.config[0]
215
225
 
216
- config = rasa.cli.utils.get_validated_config(
217
- args.config, CONFIG_MANDATORY_KEYS_CORE
218
- )
226
+ config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS_CORE)
227
+
228
+ Configuration.initialise_message_processing(
229
+ message_processing_config_path=Path(config)
230
+ ).initialise_empty_endpoints()
219
231
 
220
232
  return asyncio.run(
221
233
  train_core(
@@ -231,6 +243,7 @@ def run_core_training(args: argparse.Namespace) -> Optional[Text]:
231
243
  )
232
244
  )
233
245
  else:
246
+ Configuration.initialise_empty()
234
247
  asyncio.run(do_compare_training(args, story_file, additional_arguments))
235
248
  return None
236
249
 
@@ -246,13 +259,13 @@ def run_nlu_training(args: argparse.Namespace) -> Optional[Text]:
246
259
  """
247
260
  from rasa.model_training import train_nlu
248
261
 
249
- config = rasa.cli.utils.get_validated_config(args.config, CONFIG_MANDATORY_KEYS_NLU)
250
- nlu_data = rasa.cli.utils.get_validated_path(
262
+ config = get_validated_config(args.config, CONFIG_MANDATORY_KEYS_NLU)
263
+ nlu_data = get_validated_path(
251
264
  args.nlu, "nlu", DEFAULT_DATA_PATH, none_is_valid=True
252
265
  )
253
266
 
254
267
  if args.domain:
255
- args.domain = rasa.cli.utils.get_validated_path(
268
+ args.domain = get_validated_path(
256
269
  args.domain, "domain", DEFAULT_DOMAIN_PATHS, none_is_valid=True
257
270
  )
258
271