rasa-pro 3.14.0a20__py3-none-any.whl → 3.14.0a23__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 (331) 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/guardrails/{lakera.py → clients.py} +55 -5
  30. rasa/builder/guardrails/constants.py +3 -0
  31. rasa/builder/guardrails/models.py +45 -10
  32. rasa/builder/guardrails/policy_checker.py +324 -0
  33. rasa/builder/guardrails/utils.py +42 -276
  34. rasa/builder/llm_service.py +32 -5
  35. rasa/builder/models.py +1 -0
  36. rasa/builder/project_generator.py +6 -1
  37. rasa/builder/service.py +16 -13
  38. rasa/builder/training_service.py +18 -24
  39. rasa/builder/validation_service.py +1 -1
  40. rasa/cli/arguments/default_arguments.py +12 -0
  41. rasa/cli/arguments/run.py +2 -0
  42. rasa/cli/arguments/train.py +2 -0
  43. rasa/cli/data.py +10 -8
  44. rasa/cli/dialogue_understanding_test.py +10 -7
  45. rasa/cli/e2e_test.py +9 -6
  46. rasa/cli/evaluate.py +4 -2
  47. rasa/cli/export.py +5 -2
  48. rasa/cli/inspect.py +8 -4
  49. rasa/cli/interactive.py +5 -4
  50. rasa/cli/llm_fine_tuning.py +11 -6
  51. rasa/cli/project_templates/finance/actions/general/__init__.py +0 -0
  52. rasa/cli/project_templates/finance/actions/general/action_human_handoff.py +49 -0
  53. rasa/cli/project_templates/finance/data/general/bot_challenge.yml +6 -0
  54. rasa/cli/project_templates/finance/data/general/goodbye.yml +1 -1
  55. rasa/cli/project_templates/finance/data/general/human_handoff.yml +1 -1
  56. rasa/cli/project_templates/finance/data/system/patterns/pattern_session_start.yml +1 -1
  57. rasa/cli/project_templates/finance/domain/general/_shared.yml +0 -14
  58. rasa/cli/project_templates/finance/domain/general/bot_challenge.yml +4 -0
  59. rasa/cli/project_templates/finance/domain/general/goodbye.yml +7 -0
  60. rasa/cli/project_templates/finance/domain/general/human_handoff.yml +3 -6
  61. rasa/cli/project_templates/finance/domain/general/welcome.yml +29 -1
  62. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/check_balance.yml +9 -0
  63. rasa/cli/project_templates/finance/tests/e2e_test_cases/accounts/download_statements.yml +43 -0
  64. rasa/cli/project_templates/finance/tests/e2e_test_cases/cards/block_card.yml +55 -0
  65. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/bot_challenge.yml +8 -0
  66. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/feedback.yml +46 -0
  67. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/goodbye.yml +9 -0
  68. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/hello.yml +8 -0
  69. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/human_handoff.yml +35 -0
  70. rasa/cli/project_templates/finance/tests/e2e_test_cases/general/patterns.yml +22 -0
  71. rasa/cli/project_templates/finance/tests/e2e_test_cases/transfers/transfer_money.yml +56 -0
  72. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/feedback.yml +1 -1
  73. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/hello.yml +1 -1
  74. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/human_handoff.yml +1 -1
  75. rasa/cli/project_templates/telco/tests/e2e_test_cases/general/patterns.yml +1 -1
  76. rasa/cli/project_templates/tutorial/credentials.yml +10 -0
  77. rasa/cli/run.py +12 -10
  78. rasa/cli/scaffold.py +4 -4
  79. rasa/cli/shell.py +9 -5
  80. rasa/cli/studio/studio.py +1 -1
  81. rasa/cli/test.py +34 -14
  82. rasa/cli/train.py +41 -28
  83. rasa/cli/utils.py +1 -393
  84. rasa/cli/validation/__init__.py +0 -0
  85. rasa/cli/validation/bot_config.py +223 -0
  86. rasa/cli/validation/config_path_validation.py +257 -0
  87. rasa/cli/x.py +8 -4
  88. rasa/constants.py +7 -1
  89. rasa/core/actions/action.py +51 -10
  90. rasa/core/actions/action_run_slot_rejections.py +1 -1
  91. rasa/core/actions/direct_custom_actions_executor.py +9 -2
  92. rasa/core/actions/grpc_custom_action_executor.py +1 -1
  93. rasa/core/agent.py +19 -2
  94. rasa/core/available_agents.py +229 -0
  95. rasa/core/brokers/kafka.py +1 -1
  96. rasa/core/channels/__init__.py +82 -35
  97. rasa/core/channels/development_inspector.py +3 -3
  98. rasa/core/channels/inspector/README.md +25 -13
  99. rasa/core/channels/inspector/dist/assets/{arc-35222594.js → arc-6177260a.js} +1 -1
  100. rasa/core/channels/inspector/dist/assets/{blockDiagram-38ab4fdb-a0efbfd3.js → blockDiagram-38ab4fdb-b054f038.js} +1 -1
  101. rasa/core/channels/inspector/dist/assets/{c4Diagram-3d4e48cf-0584c0f2.js → c4Diagram-3d4e48cf-f25427d5.js} +1 -1
  102. rasa/core/channels/inspector/dist/assets/channel-bf9cbb34.js +1 -0
  103. rasa/core/channels/inspector/dist/assets/{classDiagram-70f12bd4-39f40dbe.js → classDiagram-70f12bd4-c7a2af53.js} +1 -1
  104. rasa/core/channels/inspector/dist/assets/{classDiagram-v2-f2320105-1ad755f3.js → classDiagram-v2-f2320105-58db65c0.js} +1 -1
  105. rasa/core/channels/inspector/dist/assets/clone-8f9083bb.js +1 -0
  106. rasa/core/channels/inspector/dist/assets/{createText-2e5e7dd3-b0f4f0fe.js → createText-2e5e7dd3-088372e2.js} +1 -1
  107. rasa/core/channels/inspector/dist/assets/{edges-e0da2a9e-9039bff9.js → edges-e0da2a9e-58676240.js} +1 -1
  108. rasa/core/channels/inspector/dist/assets/{erDiagram-9861fffd-65c9b127.js → erDiagram-9861fffd-0c14d7c6.js} +1 -1
  109. rasa/core/channels/inspector/dist/assets/{flowDb-956e92f1-4f08b38e.js → flowDb-956e92f1-ea63f85c.js} +1 -1
  110. rasa/core/channels/inspector/dist/assets/{flowDiagram-66a62f08-e95c362a.js → flowDiagram-66a62f08-a2af48cd.js} +1 -1
  111. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-9ecd5b59.js +1 -0
  112. rasa/core/channels/inspector/dist/assets/{flowchart-elk-definition-4a651766-703c3015.js → flowchart-elk-definition-4a651766-6937abe7.js} +1 -1
  113. rasa/core/channels/inspector/dist/assets/{ganttDiagram-c361ad54-699328ea.js → ganttDiagram-c361ad54-7473f357.js} +1 -1
  114. rasa/core/channels/inspector/dist/assets/{gitGraphDiagram-72cf32ee-04cf4b05.js → gitGraphDiagram-72cf32ee-d0c9405e.js} +1 -1
  115. rasa/core/channels/inspector/dist/assets/{graph-ee94449e.js → graph-0a6f8466.js} +1 -1
  116. rasa/core/channels/inspector/dist/assets/{index-3862675e-940162b4.js → index-3862675e-7610671a.js} +1 -1
  117. rasa/core/channels/inspector/dist/assets/index-74e01d94.js +1354 -0
  118. rasa/core/channels/inspector/dist/assets/{infoDiagram-f8f76790-c79c2866.js → infoDiagram-f8f76790-be397dc7.js} +1 -1
  119. rasa/core/channels/inspector/dist/assets/{journeyDiagram-49397b02-84489d30.js → journeyDiagram-49397b02-4cefbf62.js} +1 -1
  120. rasa/core/channels/inspector/dist/assets/{layout-a9aa9858.js → layout-e7fbc2bf.js} +1 -1
  121. rasa/core/channels/inspector/dist/assets/{line-eb73cf26.js → line-a8aa457c.js} +1 -1
  122. rasa/core/channels/inspector/dist/assets/{linear-b3399f9a.js → linear-3351e0d2.js} +1 -1
  123. rasa/core/channels/inspector/dist/assets/{mindmap-definition-fc14e90a-b095bf1a.js → mindmap-definition-fc14e90a-b8cbf605.js} +1 -1
  124. rasa/core/channels/inspector/dist/assets/{pieDiagram-8a3498a8-07644b66.js → pieDiagram-8a3498a8-f327f774.js} +1 -1
  125. rasa/core/channels/inspector/dist/assets/{quadrantDiagram-120e2f19-573a3f9c.js → quadrantDiagram-120e2f19-2854c591.js} +1 -1
  126. rasa/core/channels/inspector/dist/assets/{requirementDiagram-deff3bca-d457e1e1.js → requirementDiagram-deff3bca-964985d5.js} +1 -1
  127. rasa/core/channels/inspector/dist/assets/{sankeyDiagram-04a897e0-9d26e1a2.js → sankeyDiagram-04a897e0-edeb4f33.js} +1 -1
  128. rasa/core/channels/inspector/dist/assets/{sequenceDiagram-704730f1-3a9cde10.js → sequenceDiagram-704730f1-fcf70125.js} +1 -1
  129. rasa/core/channels/inspector/dist/assets/{stateDiagram-587899a1-4f3e8cec.js → stateDiagram-587899a1-0e770395.js} +1 -1
  130. rasa/core/channels/inspector/dist/assets/{stateDiagram-v2-d93cdb3a-e617e5bf.js → stateDiagram-v2-d93cdb3a-af8dcd22.js} +1 -1
  131. rasa/core/channels/inspector/dist/assets/{styles-6aaf32cf-eab30d2f.js → styles-6aaf32cf-36a9e70d.js} +1 -1
  132. rasa/core/channels/inspector/dist/assets/{styles-9a916d00-09994be2.js → styles-9a916d00-884a8b5b.js} +1 -1
  133. rasa/core/channels/inspector/dist/assets/{styles-c10674c1-b7110364.js → styles-c10674c1-dc097813.js} +1 -1
  134. rasa/core/channels/inspector/dist/assets/{svgDrawCommon-08f97a94-3ebc92ad.js → svgDrawCommon-08f97a94-5a2c7eed.js} +1 -1
  135. rasa/core/channels/inspector/dist/assets/{timeline-definition-85554ec2-7d13d2f2.js → timeline-definition-85554ec2-e89c4f6e.js} +1 -1
  136. rasa/core/channels/inspector/dist/assets/{xychartDiagram-e933f94c-488385e1.js → xychartDiagram-e933f94c-afb6fe56.js} +1 -1
  137. rasa/core/channels/inspector/dist/index.html +1 -1
  138. rasa/core/channels/inspector/package.json +18 -18
  139. rasa/core/channels/inspector/src/App.tsx +29 -4
  140. rasa/core/channels/inspector/src/components/DialogueAgentStack.tsx +108 -0
  141. rasa/core/channels/inspector/src/components/{DialogueStack.tsx → DialogueHistoryStack.tsx} +4 -2
  142. rasa/core/channels/inspector/src/helpers/audio/audiostream.ts +7 -4
  143. rasa/core/channels/inspector/src/helpers/formatters.test.ts +4 -0
  144. rasa/core/channels/inspector/src/helpers/formatters.ts +24 -3
  145. rasa/core/channels/inspector/src/helpers/utils.test.ts +127 -0
  146. rasa/core/channels/inspector/src/helpers/utils.ts +66 -1
  147. rasa/core/channels/inspector/src/theme/base/styles.ts +19 -1
  148. rasa/core/channels/inspector/src/types.ts +21 -0
  149. rasa/core/channels/inspector/yarn.lock +336 -189
  150. rasa/core/channels/studio_chat.py +6 -6
  151. rasa/core/channels/telegram.py +4 -9
  152. rasa/core/channels/voice_stream/browser_audio.py +2 -0
  153. rasa/core/channels/voice_stream/genesys.py +1 -1
  154. rasa/core/channels/voice_stream/tts/deepgram.py +140 -0
  155. rasa/core/channels/voice_stream/twilio_media_streams.py +5 -1
  156. rasa/core/channels/voice_stream/voice_channel.py +3 -0
  157. rasa/core/config/__init__.py +0 -0
  158. rasa/core/{available_endpoints.py → config/available_endpoints.py} +51 -16
  159. rasa/core/config/configuration.py +260 -0
  160. rasa/core/config/credentials.py +19 -0
  161. rasa/core/config/message_procesing_config.py +34 -0
  162. rasa/core/constants.py +5 -0
  163. rasa/core/iam_credentials_providers/aws_iam_credentials_providers.py +88 -3
  164. rasa/core/iam_credentials_providers/credentials_provider_protocol.py +2 -1
  165. rasa/core/lock_store.py +6 -4
  166. rasa/core/nlg/generator.py +1 -1
  167. rasa/core/policies/enterprise_search_policy.py +5 -3
  168. rasa/core/policies/flow_policy.py +4 -4
  169. rasa/core/policies/flows/agent_executor.py +632 -0
  170. rasa/core/policies/flows/flow_executor.py +137 -76
  171. rasa/core/policies/flows/mcp_tool_executor.py +298 -0
  172. rasa/core/policies/intentless_policy.py +1 -1
  173. rasa/core/policies/ted_policy.py +20 -12
  174. rasa/core/policies/unexpected_intent_policy.py +6 -0
  175. rasa/core/processor.py +68 -44
  176. rasa/core/redis_connection_factory.py +78 -20
  177. rasa/core/run.py +37 -8
  178. rasa/core/test.py +4 -0
  179. rasa/core/tracker_stores/sql_tracker_store.py +1 -1
  180. rasa/core/tracker_stores/tracker_store.py +3 -7
  181. rasa/core/train.py +1 -1
  182. rasa/core/training/interactive.py +20 -18
  183. rasa/core/training/story_conflict.py +5 -5
  184. rasa/core/utils.py +22 -23
  185. rasa/dialogue_understanding/commands/__init__.py +8 -0
  186. rasa/dialogue_understanding/commands/cancel_flow_command.py +19 -5
  187. rasa/dialogue_understanding/commands/chit_chat_answer_command.py +21 -2
  188. rasa/dialogue_understanding/commands/clarify_command.py +20 -2
  189. rasa/dialogue_understanding/commands/continue_agent_command.py +91 -0
  190. rasa/dialogue_understanding/commands/knowledge_answer_command.py +21 -2
  191. rasa/dialogue_understanding/commands/restart_agent_command.py +162 -0
  192. rasa/dialogue_understanding/commands/start_flow_command.py +68 -7
  193. rasa/dialogue_understanding/commands/utils.py +124 -2
  194. rasa/dialogue_understanding/generator/command_parser.py +4 -0
  195. rasa/dialogue_understanding/generator/llm_based_command_generator.py +50 -12
  196. rasa/dialogue_understanding/generator/llm_command_generator.py +1 -1
  197. rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py +1 -1
  198. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_claude_3_5_sonnet_20240620_template.jinja2 +66 -0
  199. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v2_gpt_4o_2024_11_20_template.jinja2 +66 -0
  200. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_claude_3_5_sonnet_20240620_template.jinja2 +89 -0
  201. rasa/dialogue_understanding/generator/prompt_templates/agent_command_prompt_v3_gpt_4o_2024_11_20_template.jinja2 +88 -0
  202. rasa/dialogue_understanding/generator/single_step/compact_llm_command_generator.py +42 -7
  203. rasa/dialogue_understanding/generator/single_step/search_ready_llm_command_generator.py +40 -3
  204. rasa/dialogue_understanding/generator/single_step/single_step_based_llm_command_generator.py +20 -3
  205. rasa/dialogue_understanding/patterns/cancel.py +27 -6
  206. rasa/dialogue_understanding/patterns/clarify.py +3 -14
  207. rasa/dialogue_understanding/patterns/continue_interrupted.py +239 -6
  208. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +46 -8
  209. rasa/dialogue_understanding/processor/command_processor.py +136 -15
  210. rasa/dialogue_understanding/stack/dialogue_stack.py +98 -2
  211. rasa/dialogue_understanding/stack/frames/flow_stack_frame.py +57 -0
  212. rasa/dialogue_understanding/stack/utils.py +57 -3
  213. rasa/dialogue_understanding/utils.py +24 -4
  214. rasa/dialogue_understanding_test/du_test_runner.py +8 -3
  215. rasa/e2e_test/e2e_test_runner.py +13 -3
  216. rasa/engine/caching.py +2 -2
  217. rasa/engine/constants.py +1 -1
  218. rasa/engine/loader.py +12 -0
  219. rasa/engine/recipes/default_components.py +138 -49
  220. rasa/engine/recipes/default_recipe.py +108 -11
  221. rasa/engine/runner/dask.py +8 -5
  222. rasa/engine/validation.py +19 -6
  223. rasa/graph_components/validators/default_recipe_validator.py +86 -28
  224. rasa/hooks.py +5 -5
  225. rasa/llm_fine_tuning/utils.py +2 -2
  226. rasa/model_training.py +60 -47
  227. rasa/nlu/classifiers/diet_classifier.py +198 -98
  228. rasa/nlu/classifiers/logistic_regression_classifier.py +1 -4
  229. rasa/nlu/classifiers/mitie_intent_classifier.py +3 -0
  230. rasa/nlu/classifiers/sklearn_intent_classifier.py +1 -3
  231. rasa/nlu/extractors/crf_entity_extractor.py +9 -10
  232. rasa/nlu/extractors/mitie_entity_extractor.py +3 -0
  233. rasa/nlu/extractors/spacy_entity_extractor.py +3 -0
  234. rasa/nlu/featurizers/dense_featurizer/convert_featurizer.py +4 -0
  235. rasa/nlu/featurizers/dense_featurizer/lm_featurizer.py +5 -0
  236. rasa/nlu/featurizers/dense_featurizer/mitie_featurizer.py +2 -0
  237. rasa/nlu/featurizers/dense_featurizer/spacy_featurizer.py +3 -0
  238. rasa/nlu/featurizers/sparse_featurizer/count_vectors_featurizer.py +4 -2
  239. rasa/nlu/featurizers/sparse_featurizer/lexical_syntactic_featurizer.py +4 -0
  240. rasa/nlu/selectors/response_selector.py +10 -2
  241. rasa/nlu/tokenizers/jieba_tokenizer.py +3 -4
  242. rasa/nlu/tokenizers/mitie_tokenizer.py +3 -2
  243. rasa/nlu/tokenizers/spacy_tokenizer.py +3 -2
  244. rasa/nlu/utils/mitie_utils.py +3 -0
  245. rasa/nlu/utils/spacy_utils.py +3 -2
  246. rasa/plugin.py +8 -8
  247. rasa/privacy/privacy_manager.py +12 -3
  248. rasa/server.py +15 -3
  249. rasa/shared/agents/__init__.py +0 -0
  250. rasa/shared/agents/auth/__init__.py +0 -0
  251. rasa/shared/agents/auth/agent_auth_factory.py +105 -0
  252. rasa/shared/agents/auth/agent_auth_manager.py +92 -0
  253. rasa/shared/agents/auth/auth_strategy/__init__.py +19 -0
  254. rasa/shared/agents/auth/auth_strategy/agent_auth_strategy.py +52 -0
  255. rasa/shared/agents/auth/auth_strategy/api_key_auth_strategy.py +42 -0
  256. rasa/shared/agents/auth/auth_strategy/bearer_token_auth_strategy.py +28 -0
  257. rasa/shared/agents/auth/auth_strategy/oauth2_auth_strategy.py +167 -0
  258. rasa/shared/agents/auth/constants.py +12 -0
  259. rasa/shared/agents/auth/types.py +12 -0
  260. rasa/shared/agents/utils.py +35 -0
  261. rasa/shared/constants.py +8 -0
  262. rasa/shared/core/constants.py +16 -1
  263. rasa/shared/core/domain.py +0 -7
  264. rasa/shared/core/events.py +327 -0
  265. rasa/shared/core/flows/constants.py +5 -0
  266. rasa/shared/core/flows/flow.py +1 -1
  267. rasa/shared/core/flows/flows_list.py +21 -5
  268. rasa/shared/core/flows/flows_yaml_schema.json +119 -184
  269. rasa/shared/core/flows/steps/call.py +49 -5
  270. rasa/shared/core/flows/steps/collect.py +98 -13
  271. rasa/shared/core/flows/validation.py +372 -8
  272. rasa/shared/core/flows/yaml_flows_io.py +3 -2
  273. rasa/shared/core/slots.py +2 -2
  274. rasa/shared/core/trackers.py +5 -2
  275. rasa/shared/exceptions.py +16 -0
  276. rasa/shared/importers/rasa.py +1 -1
  277. rasa/shared/importers/utils.py +9 -3
  278. rasa/shared/providers/llm/_base_litellm_client.py +41 -9
  279. rasa/shared/providers/llm/litellm_router_llm_client.py +8 -4
  280. rasa/shared/providers/llm/llm_client.py +7 -3
  281. rasa/shared/providers/llm/llm_response.py +66 -0
  282. rasa/shared/providers/llm/self_hosted_llm_client.py +8 -4
  283. rasa/shared/utils/common.py +24 -0
  284. rasa/shared/utils/health_check/health_check.py +7 -3
  285. rasa/shared/utils/llm.py +39 -16
  286. rasa/shared/utils/mcp/__init__.py +0 -0
  287. rasa/shared/utils/mcp/server_connection.py +247 -0
  288. rasa/shared/utils/mcp/utils.py +20 -0
  289. rasa/shared/utils/schemas/events.py +42 -0
  290. rasa/shared/utils/yaml.py +3 -1
  291. rasa/studio/pull/pull.py +3 -2
  292. rasa/studio/train.py +8 -7
  293. rasa/studio/upload.py +3 -6
  294. rasa/telemetry.py +69 -5
  295. rasa/tracing/config.py +45 -12
  296. rasa/tracing/constants.py +14 -0
  297. rasa/tracing/instrumentation/attribute_extractors.py +142 -9
  298. rasa/tracing/instrumentation/instrumentation.py +626 -21
  299. rasa/tracing/instrumentation/intentless_policy_instrumentation.py +4 -4
  300. rasa/tracing/instrumentation/metrics.py +32 -0
  301. rasa/tracing/metric_instrument_provider.py +68 -0
  302. rasa/utils/common.py +92 -1
  303. rasa/utils/endpoints.py +11 -2
  304. rasa/utils/log_utils.py +96 -5
  305. rasa/utils/ml_utils.py +1 -1
  306. rasa/utils/pypred.py +38 -0
  307. rasa/utils/tensorflow/__init__.py +7 -0
  308. rasa/utils/tensorflow/callback.py +136 -101
  309. rasa/utils/tensorflow/crf.py +1 -1
  310. rasa/utils/tensorflow/data_generator.py +21 -8
  311. rasa/utils/tensorflow/layers.py +21 -11
  312. rasa/utils/tensorflow/metrics.py +7 -3
  313. rasa/utils/tensorflow/models.py +56 -8
  314. rasa/utils/tensorflow/rasa_layers.py +8 -6
  315. rasa/utils/tensorflow/transformer.py +2 -3
  316. rasa/utils/train_utils.py +54 -24
  317. rasa/validator.py +17 -13
  318. rasa/version.py +1 -1
  319. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/METADATA +48 -42
  320. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/RECORD +323 -251
  321. rasa/builder/scrape_rasa_docs.py +0 -97
  322. rasa/cli/project_templates/finance/data/general/agent_details.yml +0 -6
  323. rasa/cli/project_templates/finance/domain/_system/patterns/pattern_session_start.yml +0 -11
  324. rasa/cli/project_templates/finance/domain/general/agent_details.yml +0 -31
  325. rasa/core/channels/inspector/dist/assets/channel-8e08bed9.js +0 -1
  326. rasa/core/channels/inspector/dist/assets/clone-78c82dea.js +0 -1
  327. rasa/core/channels/inspector/dist/assets/flowDiagram-v2-96b9c2cf-2b08f601.js +0 -1
  328. rasa/core/channels/inspector/dist/assets/index-c941dcb3.js +0 -1336
  329. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/NOTICE +0 -0
  330. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/WHEEL +0 -0
  331. {rasa_pro-3.14.0a20.dist-info → rasa_pro-3.14.0a23.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import Any, Dict
5
+
6
+ from rasa.shared.utils.yaml import read_config_file
7
+
8
+
9
+ class CredentialsConfig:
10
+ def __init__(
11
+ self, channels: Dict[str, Dict[str, Any]], config_file_path: Path
12
+ ) -> None:
13
+ self.channels = channels
14
+ self.config_file_path = config_file_path
15
+
16
+ @classmethod
17
+ def load_from_file(cls, file_path: Path) -> CredentialsConfig:
18
+ credentials_dict = read_config_file(file_path)
19
+ return cls(credentials_dict, file_path)
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import Any, Dict, List
5
+
6
+ from rasa.shared.utils.yaml import read_config_file
7
+
8
+
9
+ class MessageProcessingConfig:
10
+ def __init__(
11
+ self,
12
+ recipe: str,
13
+ language: str,
14
+ assistant_id: str,
15
+ pipeline: List[Dict[str, Any]],
16
+ policies: List[Dict[str, Any]],
17
+ ):
18
+ self.recipe = recipe
19
+ self.language = language
20
+ self.assistant_id = assistant_id
21
+ self.pipeline = pipeline
22
+ self.policies = policies
23
+
24
+ @classmethod
25
+ def load_from_file(cls, filepath: Path) -> MessageProcessingConfig:
26
+ credentials_dict = read_config_file(filepath)
27
+
28
+ recipe = credentials_dict.get("recipe", "")
29
+ language = credentials_dict.get("language", "")
30
+ assistant_id = credentials_dict.get("assistant_id", "")
31
+ pipeline = credentials_dict.get("pipeline", [])
32
+ policies = credentials_dict.get("policies", [])
33
+
34
+ return cls(recipe, language, assistant_id, pipeline, policies)
rasa/core/constants.py CHANGED
@@ -31,6 +31,10 @@ BEARER_TOKEN_PREFIX = "Bearer "
31
31
  # The lowest priority is intended to be used by machine learning policies.
32
32
  DEFAULT_POLICY_PRIORITY = 1
33
33
 
34
+ DEFAULT_SUB_AGENTS = "sub_agents"
35
+
36
+ MCP_SERVERS_KEY = "mcp_servers"
37
+
34
38
  # The priority of intent-prediction policies.
35
39
  # This should be below all rule based policies but higher than ML
36
40
  # based policies. This enables a loop inside ensemble where if none
@@ -118,3 +122,4 @@ SQL_TRACKER_STORE_SSL_MODE_ENV_VAR_NAME = "SQL_TRACKER_STORE_SSL_MODE"
118
122
  SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE_ENV_VAR_NAME = (
119
123
  "SQL_TRACKER_STORE_SSL_ROOT_CERTIFICATE"
120
124
  )
125
+ AWS_ELASTICACHE_CLUSTER_NAME_ENV_VAR_NAME = "AWS_ELASTICACHE_CLUSTER_NAME"
@@ -1,12 +1,18 @@
1
1
  import os
2
2
  import threading
3
3
  import time
4
- from typing import Optional
4
+ from typing import Optional, Tuple
5
+ from urllib.parse import ParseResult, urlencode, urlunparse
5
6
 
6
7
  import boto3
8
+ import redis
7
9
  import structlog
8
10
  from aws_msk_iam_sasl_signer import MSKAuthTokenProvider
9
11
  from botocore.exceptions import BotoCoreError
12
+ from botocore.model import ServiceId
13
+ from botocore.session import get_session
14
+ from botocore.signers import RequestSigner
15
+ from cachetools import TTLCache, cached
10
16
 
11
17
  from rasa.core.iam_credentials_providers.credentials_provider_protocol import (
12
18
  IAMCredentialsProvider,
@@ -28,7 +34,7 @@ class AWSRDSIAMCredentialsProvider(IAMCredentialsProvider):
28
34
  self.host = host
29
35
  self.port = port
30
36
 
31
- def get_credentials(self) -> TemporaryCredentials:
37
+ def get_temporary_credentials(self) -> TemporaryCredentials:
32
38
  """Generates temporary credentials for AWS RDS."""
33
39
  structlogger.debug(
34
40
  "rasa.core.aws_rds_iam_credentials_provider.get_credentials",
@@ -85,7 +91,7 @@ class AWSMSKafkaIAMCredentialsProvider(IAMCredentialsProvider):
85
91
  def expires_at(self, value: float) -> None:
86
92
  self._expires_at = value
87
93
 
88
- def get_credentials(self) -> TemporaryCredentials:
94
+ def get_temporary_credentials(self) -> TemporaryCredentials:
89
95
  """Generates temporary credentials for AWS MSK."""
90
96
  with self.lock:
91
97
  current_time = time.time() # Current time in seconds
@@ -124,6 +130,79 @@ class AWSMSKafkaIAMCredentialsProvider(IAMCredentialsProvider):
124
130
  )
125
131
 
126
132
 
133
+ class AWSElasticacheRedisIAMCredentialsProvider(redis.CredentialProvider):
134
+ """Generates temporary credentials for AWS ElastiCache Redis using IAM roles."""
135
+
136
+ def __init__(self, username: str, cluster_name: Optional[str] = None) -> None:
137
+ """Initializes the provider."""
138
+ self.username = username
139
+ self.cluster_name = cluster_name
140
+ self.region = os.getenv("AWS_DEFAULT_REGION", os.getenv("AWS_REGION"))
141
+ self.session = get_session()
142
+ self.request_signer = RequestSigner(
143
+ ServiceId("elasticache"),
144
+ self.region,
145
+ "elasticache",
146
+ "v4",
147
+ self.session.get_credentials(),
148
+ self.session.get_component("event_emitter"),
149
+ )
150
+
151
+ # Generated IAM tokens are valid for 15 minutes
152
+ @cached(cache=TTLCache(maxsize=128, ttl=900))
153
+ def get_credentials(self) -> Tuple[str, str]:
154
+ """Generates temporary credentials for AWS ElastiCache Redis.
155
+
156
+ Required method implementation by redis-py CredentialProvider parent class.
157
+ Used internally by redis-py when connecting to Redis.
158
+ """
159
+ query_params = {"Action": "connect", "User": self.username}
160
+ url = urlunparse(
161
+ ParseResult(
162
+ scheme="https",
163
+ netloc=self.cluster_name,
164
+ path="/",
165
+ query=urlencode(query_params),
166
+ params="",
167
+ fragment="",
168
+ )
169
+ )
170
+ signed_url = self.request_signer.generate_presigned_url(
171
+ {"method": "GET", "url": url, "body": {}, "headers": {}, "context": {}},
172
+ operation_name="connect",
173
+ expires_in=900,
174
+ region_name=self.region,
175
+ )
176
+
177
+ # RequestSigner only seems to work if the URL has a protocol, but
178
+ # Elasticache only accepts the URL without a protocol
179
+ # So strip it off the signed URL before returning
180
+ return self.username, signed_url.removeprefix("https://")
181
+
182
+ def get_temporary_credentials(self) -> TemporaryCredentials:
183
+ """Generates temporary credentials for AWS ElastiCache Redis.
184
+
185
+ Implemented to comply with the IAMCredentialsProvider rasa-pro interface.
186
+ Calls the get_credentials method which is used internally by redis-py.
187
+ """
188
+ try:
189
+ username, signed_url = self.get_credentials()
190
+ structlogger.info(
191
+ "rasa.core.aws_elasticache_redis_iam_credentials_provider.generated_credentials",
192
+ event_info="Successfully generated temporary credentials for "
193
+ "AWS ElastiCache Redis.",
194
+ )
195
+ return TemporaryCredentials(username=username, presigned_url=signed_url)
196
+ except Exception as exc:
197
+ structlogger.error(
198
+ "rasa.core.aws_elasticache_redis_iam_credentials_provider.error_generating_credentials",
199
+ event_info="Failed to generate temporary credentials for "
200
+ "AWS ElastiCache Redis.",
201
+ error=str(exc),
202
+ )
203
+ return TemporaryCredentials()
204
+
205
+
127
206
  def create_aws_iam_credentials_provider(
128
207
  provider_input: "IAMCredentialsProviderInput",
129
208
  ) -> Optional["IAMCredentialsProvider"]:
@@ -138,4 +217,10 @@ def create_aws_iam_credentials_provider(
138
217
  if provider_input.service_name == SupportedServiceType.EVENT_BROKER:
139
218
  return AWSMSKafkaIAMCredentialsProvider()
140
219
 
220
+ if provider_input.service_name == SupportedServiceType.LOCK_STORE:
221
+ return AWSElasticacheRedisIAMCredentialsProvider(
222
+ username=provider_input.username,
223
+ cluster_name=provider_input.cluster_name,
224
+ )
225
+
141
226
  return None
@@ -25,7 +25,7 @@ class TemporaryCredentials(BaseModel):
25
25
  class IAMCredentialsProvider(Protocol):
26
26
  """Interface for generating temporary credentials using IAM roles."""
27
27
 
28
- def get_credentials(self) -> TemporaryCredentials:
28
+ def get_temporary_credentials(self) -> TemporaryCredentials:
29
29
  """Generates temporary credentials using IAM roles."""
30
30
  ...
31
31
 
@@ -51,6 +51,7 @@ class IAMCredentialsProviderInput(BaseModel):
51
51
  username: Optional[str] = None
52
52
  host: Optional[str] = None
53
53
  port: Optional[int] = None
54
+ cluster_name: Optional[str] = None
54
55
 
55
56
 
56
57
  def create_iam_credentials_provider(
rasa/core/lock_store.py CHANGED
@@ -17,7 +17,7 @@ from pydantic import (
17
17
  )
18
18
 
19
19
  import rasa.shared.utils.common
20
- from rasa.core.constants import DEFAULT_LOCK_LIFETIME
20
+ from rasa.core.constants import DEFAULT_LOCK_LIFETIME, IAM_CLOUD_PROVIDER_ENV_VAR_NAME
21
21
  from rasa.core.lock import TicketLock
22
22
  from rasa.core.redis_connection_factory import (
23
23
  DeploymentMode,
@@ -227,7 +227,7 @@ class LockStore:
227
227
 
228
228
 
229
229
  class RedisLockStoreConfig(BaseModel):
230
- host: Union[AnyUrl, Literal["localhost"]] = Field(
230
+ host: Union[AnyUrl, Literal["localhost"], str] = Field(
231
231
  default="localhost", description="The host of the redis server."
232
232
  )
233
233
  port: NonNegativeInt = Field(
@@ -308,7 +308,9 @@ class RedisLockStoreConfig(BaseModel):
308
308
 
309
309
  @model_validator(mode="after")
310
310
  def verify_username_password(self) -> RedisLockStoreConfig:
311
- if bool(self.username) ^ bool(self.password):
311
+ if os.getenv(IAM_CLOUD_PROVIDER_ENV_VAR_NAME) is None and (
312
+ bool(self.username) ^ bool(self.password)
313
+ ):
312
314
  raise ValueError(
313
315
  f"Expected username and password. "
314
316
  f"Found: username: {'<has value>' if self.username else '<N/A>'}, "
@@ -341,7 +343,7 @@ class RedisLockStore(LockStore):
341
343
  ssl_keyfile=self.config.ssl_keyfile,
342
344
  ssl_certfile=self.config.ssl_certfile,
343
345
  ssl_ca_certs=self.config.ssl_ca_certs,
344
- deployment_mode=self.config.deployment_mode,
346
+ deployment_mode=self.config.deployment_mode.value,
345
347
  endpoints=self.config.endpoints,
346
348
  sentinel_service=self.config.sentinel_service,
347
349
  socket_timeout=self.config.socket_timeout,
@@ -2,7 +2,6 @@ from typing import Any, Dict, List, Optional, Text, Union
2
2
 
3
3
  import structlog
4
4
  from jinja2 import Template
5
- from pypred import Predicate
6
5
 
7
6
  import rasa.shared.utils.common
8
7
  import rasa.shared.utils.io
@@ -12,6 +11,7 @@ from rasa.shared.constants import CHANNEL, RESPONSE_CONDITION
12
11
  from rasa.shared.core.domain import Domain
13
12
  from rasa.shared.core.trackers import DialogueStateTracker
14
13
  from rasa.utils.endpoints import EndpointConfig
14
+ from rasa.utils.pypred import Predicate
15
15
 
16
16
  structlogger = structlog.get_logger()
17
17
 
@@ -12,7 +12,7 @@ from jinja2 import Template
12
12
  from pydantic import ValidationError
13
13
 
14
14
  import rasa.shared.utils.io
15
- from rasa.core.available_endpoints import AvailableEndpoints
15
+ from rasa.core.config.available_endpoints import AvailableEndpoints
16
16
  from rasa.core.constants import (
17
17
  UTTER_SOURCE_METADATA_KEY,
18
18
  )
@@ -63,6 +63,8 @@ from rasa.shared.constants import (
63
63
  )
64
64
  from rasa.shared.core.constants import (
65
65
  ACTION_CANCEL_FLOW,
66
+ ACTION_METADATA_MESSAGE_KEY,
67
+ ACTION_METADATA_TEXT_KEY,
66
68
  ACTION_SEND_TEXT_NAME,
67
69
  DEFAULT_SLOT_NAMES,
68
70
  )
@@ -585,8 +587,8 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
585
587
  return self._create_prediction_internal_error(domain, tracker)
586
588
 
587
589
  action_metadata = {
588
- "message": {
589
- "text": response,
590
+ ACTION_METADATA_MESSAGE_KEY: {
591
+ ACTION_METADATA_TEXT_KEY: response,
590
592
  SEARCH_RESULTS_METADATA_KEY: [
591
593
  result.text for result in documents.results
592
594
  ],
@@ -137,8 +137,8 @@ class FlowPolicy(Policy):
137
137
 
138
138
  # create executor and predict next action
139
139
  try:
140
- prediction = flow_executor.advance_flows(
141
- tracker, domain.action_names_or_texts, flows
140
+ prediction = await flow_executor.advance_flows(
141
+ tracker, domain.action_names_or_texts, flows, domain.slots
142
142
  )
143
143
  return self._create_prediction_result(
144
144
  prediction.action_name,
@@ -164,8 +164,8 @@ class FlowPolicy(Policy):
164
164
  # we retry, with the internal error frame on the stack
165
165
  events = tracker.create_stack_updated_events(updated_stack)
166
166
  tracker.update_with_events(events)
167
- prediction = flow_executor.advance_flows(
168
- tracker, domain.action_names_or_texts, flows
167
+ prediction = await flow_executor.advance_flows(
168
+ tracker, domain.action_names_or_texts, flows, domain.slots
169
169
  )
170
170
  collected_events = events + (prediction.events or [])
171
171
  return self._create_prediction_result(