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
@@ -0,0 +1,122 @@
1
+ from typing import Any, ClassVar, Dict, List, Type
2
+
3
+ import structlog
4
+
5
+ from rasa.agents.core.agent_protocol import AgentProtocol
6
+ from rasa.agents.core.types import ProtocolType
7
+ from rasa.agents.protocol import A2AAgent, MCPOpenAgent, MCPTaskAgent
8
+ from rasa.core.available_agents import AgentConfig
9
+ from rasa.shared.utils.common import class_from_module_path
10
+
11
+ structlogger = structlog.get_logger()
12
+
13
+
14
+ class AgentFactory:
15
+ """Factory for creating agent instances based on the protocol type."""
16
+
17
+ _protocols: ClassVar[Dict[ProtocolType, Type[AgentProtocol]]] = {
18
+ ProtocolType.A2A: A2AAgent,
19
+ ProtocolType.MCP_OPEN: MCPOpenAgent,
20
+ ProtocolType.MCP_TASK: MCPTaskAgent,
21
+ }
22
+
23
+ @classmethod
24
+ def create_client(
25
+ cls, protocol_type: ProtocolType, config: AgentConfig
26
+ ) -> AgentProtocol:
27
+ """Create an agent instance based on the protocol type.
28
+
29
+ Args:
30
+ protocol_type: The protocol type of the agent.
31
+ config: The configuration for the agent as an AgentConfig object.
32
+
33
+ Returns:
34
+ An instance of the agent.
35
+ """
36
+ # If the agent is a custom agent, we need to create it from the module
37
+ if config.configuration and config.configuration.module:
38
+ agent_class: Type[AgentProtocol] = class_from_module_path(
39
+ config.configuration.module
40
+ )
41
+ if not cls._is_valid_custom_agent(agent_class, protocol_type):
42
+ raise ValueError(
43
+ f"Agent class {agent_class} does not subclass the "
44
+ f"{cls._get_agent_class_from_protocol(protocol_type).__name__} "
45
+ f"agent class."
46
+ )
47
+ structlogger.debug(
48
+ "agent_factory.create_client.custom_agent",
49
+ event_info=(
50
+ f"Initializing `{agent_class.__name__}` for agent "
51
+ f"`{config.agent.name}` with protocol `{protocol_type.value}`"
52
+ ),
53
+ agent_name=config.agent.name,
54
+ protocol_type=protocol_type.value,
55
+ agent_class=agent_class.__name__,
56
+ )
57
+ return agent_class.from_config(config)
58
+
59
+ # If the agent is a built-in agent, we need to create it from the protocol class
60
+ protocol_class = cls._get_agent_class_from_protocol(protocol_type)
61
+ if protocol_class is None:
62
+ raise ValueError(
63
+ f"Unsupported protocol: {protocol_type}. "
64
+ f"Supported protocols: {cls.get_supported_protocols()}"
65
+ )
66
+
67
+ structlogger.debug(
68
+ "agent_factory.create_client",
69
+ event_info=(
70
+ f"Initializing `{protocol_class.__name__}` for agent "
71
+ f"`{config.agent.name}` with protocol `{protocol_type.value}`"
72
+ ),
73
+ agent_name=config.agent.name,
74
+ protocol_type=protocol_type.value,
75
+ agent_class=protocol_class.__name__,
76
+ )
77
+ return protocol_class.from_config(config)
78
+
79
+ @classmethod
80
+ def register_protocol(
81
+ cls, protocol_type: ProtocolType, protocol_class: Type[AgentProtocol]
82
+ ) -> None:
83
+ """Register new protocol implementation.
84
+
85
+ Args:
86
+ protocol_type: The protocol type of the agent.
87
+ protocol_class: The class that implements the protocol.
88
+ """
89
+ if cls.is_protocol_supported(protocol_type):
90
+ raise ValueError(f"Protocol {protocol_type} already registered.")
91
+ cls._protocols[protocol_type] = protocol_class
92
+
93
+ @classmethod
94
+ def get_supported_protocols(cls) -> List[ProtocolType]:
95
+ """Get all supported protocol types."""
96
+ return list(cls._protocols.keys())
97
+
98
+ @classmethod
99
+ def _get_agent_class_from_protocol(
100
+ cls, protocol_type: ProtocolType
101
+ ) -> Type[AgentProtocol]:
102
+ """Get the class that implements the protocol."""
103
+ if not cls.is_protocol_supported(protocol_type):
104
+ raise ValueError(
105
+ f"Unsupported protocol: {protocol_type}. "
106
+ f"Supported protocols: {cls.get_supported_protocols()}"
107
+ )
108
+ return cls._protocols[protocol_type]
109
+
110
+ @classmethod
111
+ def is_protocol_supported(cls, protocol_type: ProtocolType) -> bool:
112
+ """Check if the protocol is supported."""
113
+ return protocol_type in cls._protocols
114
+
115
+ @classmethod
116
+ def _is_valid_custom_agent(
117
+ cls, agent_class: Any, protocol_type: ProtocolType
118
+ ) -> bool:
119
+ """Check if the agent class is valid."""
120
+ return issubclass(
121
+ agent_class, cls._get_agent_class_from_protocol(protocol_type)
122
+ )
@@ -0,0 +1,163 @@
1
+ from typing import ClassVar, Dict
2
+
3
+ import structlog
4
+
5
+ from rasa.agents.agent_factory import AgentFactory
6
+ from rasa.agents.core.agent_protocol import AgentProtocol
7
+ from rasa.agents.core.types import AgentIdentifier, ProtocolType
8
+ from rasa.agents.schemas import AgentInput, AgentOutput
9
+ from rasa.core.available_agents import AgentConfig
10
+ from rasa.shared.agents.utils import make_agent_identifier
11
+ from rasa.shared.exceptions import AgentInitializationException
12
+ from rasa.utils.singleton import Singleton
13
+
14
+ structlogger = structlog.get_logger()
15
+
16
+
17
+ class AgentManager(metaclass=Singleton):
18
+ """High-level agent management with protocol abstraction"""
19
+
20
+ agents: ClassVar[Dict[AgentIdentifier, AgentProtocol]] = {}
21
+
22
+ def _add_agent(
23
+ self, agent_identifier: AgentIdentifier, agent: AgentProtocol
24
+ ) -> None:
25
+ """Add an agent to the manager.
26
+
27
+ Args:
28
+ agent_identifier: The identifier of the agent.
29
+ agent: The agent to add.
30
+ """
31
+ if agent_identifier in self.agents:
32
+ raise ValueError(f"Agent {agent_identifier} already exists")
33
+ self.agents[agent_identifier] = agent
34
+
35
+ def _remove_agent(self, agent_identifier: AgentIdentifier) -> None:
36
+ """Remove an agent from the manager.
37
+
38
+ Args:
39
+ agent_identifier: The identifier of the agent.
40
+
41
+ Raises:
42
+ ValueError: If the agent is not connected.
43
+ """
44
+ if agent_identifier not in self.agents:
45
+ raise ValueError(f"Agent {agent_identifier} is not available")
46
+ del self.agents[agent_identifier]
47
+
48
+ def get_agent(self, agent_name: str, protocol_type: ProtocolType) -> AgentProtocol:
49
+ """Retrieve connected agent instance.
50
+
51
+ Args:
52
+ agent_name: The name of the agent.
53
+ protocol_type: The protocol type of the agent.
54
+
55
+ Returns:
56
+ The agent.
57
+
58
+ Raises:
59
+ ValueError: If the agent is not connected.
60
+ """
61
+ agent_identifier = make_agent_identifier(agent_name, protocol_type)
62
+ if agent_identifier not in self.agents:
63
+ raise ValueError(f"Agent {agent_identifier} is not available")
64
+ return self.agents[agent_identifier]
65
+
66
+ async def connect_agent(
67
+ self, agent_name: str, protocol_type: ProtocolType, config: AgentConfig
68
+ ) -> None:
69
+ """Connect to agent using specified protocol, load the default resources
70
+ and persist the agent to the manager in a ready-to-use state so that
71
+ it can be used immediately to send messages to the agent.
72
+
73
+ Args:
74
+ agent_name: The name of the agent.
75
+ protocol_type: The protocol type of the agent.
76
+ config: The configuration for the agent as an AgentConfig object.
77
+
78
+ Raises:
79
+ ConnectionError: If the agent connection fails.
80
+ """
81
+ # Add the agent to the manager
82
+ agent_identifier = make_agent_identifier(agent_name, protocol_type)
83
+ try:
84
+ # Create the agent client
85
+ client = AgentFactory.create_client(protocol_type, config)
86
+
87
+ # Connect the agent client
88
+ await client.connect()
89
+
90
+ self._add_agent(agent_identifier, client)
91
+ structlogger.info(
92
+ "agent_manager.connect_agent.success",
93
+ agent_id=str(agent_identifier),
94
+ agent_name=agent_name,
95
+ event_info=f"Connected to agent - `{agent_identifier}` successfully",
96
+ )
97
+ except Exception as e:
98
+ event_info = f"Failed to connect agent {agent_identifier}"
99
+ structlogger.error(
100
+ "agent_manager.connect_agent.failed_to_connect",
101
+ agent_id=str(agent_identifier),
102
+ event_info=event_info,
103
+ )
104
+ raise AgentInitializationException(e)
105
+
106
+ async def run_agent(
107
+ self, agent_name: str, protocol_type: ProtocolType, context: AgentInput
108
+ ) -> AgentOutput:
109
+ """Run an agent, send the input to the agent and return the agent response.
110
+
111
+ Args:
112
+ agent_name: The name of the agent.
113
+ protocol_type: The protocol type of the agent.
114
+ context: The input to the agent as an AgentInput object.
115
+
116
+ Returns:
117
+ The response from the agent.
118
+ """
119
+ agent = self.get_agent(agent_name, protocol_type)
120
+
121
+ # Process input before sending
122
+ processed_input = await agent.process_input(context)
123
+
124
+ # Send message to agent
125
+ output = await agent.run(processed_input)
126
+
127
+ # Process output before returning
128
+ processed_output = await agent.process_output(output)
129
+
130
+ return processed_output
131
+
132
+ async def disconnect_agent(
133
+ self, agent_name: str, protocol_type: ProtocolType
134
+ ) -> None:
135
+ """Disconnect agent and remove from agent manager.
136
+
137
+ Args:
138
+ agent_name: The name of the agent.
139
+ protocol_type: The protocol type of the agent.
140
+
141
+ Raises:
142
+ ValueError: If the agent is not available.
143
+ ConnectionError: If the agent disconnection fails.
144
+ """
145
+ agent_identifier = make_agent_identifier(agent_name, protocol_type)
146
+ if agent_identifier not in self.agents:
147
+ raise ValueError(f"Agent {agent_identifier} is not available")
148
+ try:
149
+ await self.get_agent(agent_name, protocol_type).disconnect()
150
+ self._remove_agent(agent_identifier)
151
+ structlogger.info(
152
+ "agent_manager.disconnect_agent.success",
153
+ agent_id=str(agent_identifier),
154
+ event_info=f"Disconnected from agent - {agent_identifier} successfully",
155
+ )
156
+ except Exception as e:
157
+ event_info = f"Failed to disconnect agent {agent_identifier}"
158
+ structlogger.error(
159
+ "agent_manager.disconnect_agent.failed_to_disconnect",
160
+ agent_id=str(agent_identifier),
161
+ event_info=event_info,
162
+ )
163
+ raise ConnectionError(e)
@@ -0,0 +1,40 @@
1
+ # Agent configuration constants
2
+ AGENT_DEFAULT_MAX_RETRIES = 3
3
+ AGENT_DEFAULT_TIMEOUT_SECONDS = 30
4
+ MAX_AGENT_RETRY_DELAY_SECONDS = 5
5
+
6
+ # MCP Tool related constants (primary)
7
+ TOOL_TYPE_KEY = "type"
8
+ TOOL_NAME_KEY = "name"
9
+ TOOL_DESCRIPTION_KEY = "description"
10
+ TOOL_PARAMETERS_KEY = "parameters"
11
+ TOOL_STRICT_KEY = "strict"
12
+ TOOL_TYPE_FUNCTION_KEY = "function"
13
+ TOOL_EXECUTOR_KEY = "tool_executor"
14
+
15
+ # MCP Tool related constants (secondary)
16
+ TOOL_ADDITIONAL_PROPERTIES_KEY = "additionalProperties"
17
+ TOOL_PROPERTIES_KEY = "properties"
18
+ TOOL_REQUIRED_KEY = "required"
19
+ TOOL_PROPERTY_TYPE_KEY = "type"
20
+
21
+ # MCP Message related constants
22
+ KEY_ROLE = "role"
23
+ KEY_CONTENT = "content"
24
+
25
+ # MCP Tool call related constants
26
+ KEY_TOOL_CALL_ID = "tool_call_id"
27
+ KEY_FUNCTION = "function"
28
+ KEY_NAME = "name"
29
+ KEY_ARGUMENTS = "arguments"
30
+ KEY_ID = "id"
31
+ KEY_TYPE = "type"
32
+ KEY_TOOL_CALLS = "tool_calls"
33
+
34
+ # Agent output metadata related constants
35
+ AGENT_METADATA_AGENT_RESPONSE_KEY = "agent_response"
36
+ AGENT_METADATA_TOOL_RESULTS_KEY = "tool_results"
37
+ AGENT_METADATA_EXIT_IF_KEY = "exit_if"
38
+ # A2A-specific constants
39
+ A2A_AGENT_CONTEXT_ID_KEY = "context_id"
40
+ A2A_AGENT_TASK_ID_KEY = "task_id"
@@ -0,0 +1,107 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, Protocol, runtime_checkable
4
+
5
+ if TYPE_CHECKING:
6
+ from rasa.agents.core.types import ProtocolType
7
+ from rasa.agents.schemas.agent_input import AgentInput
8
+ from rasa.agents.schemas.agent_output import AgentOutput
9
+ from rasa.core.available_agents import AgentConfig
10
+
11
+
12
+ @runtime_checkable
13
+ class AgentProtocol(Protocol):
14
+ """
15
+ Python protocol for interfacing with agent clients that implement the
16
+ agent communication protocols like MCP, A2A, ACP, etc.
17
+ """
18
+
19
+ @classmethod
20
+ def from_config(cls, config: AgentConfig) -> AgentProtocol:
21
+ """Initialize the Agent with the given configuration.
22
+
23
+ This class method should be implemented to parse the given
24
+ configuration and create an instance of an agent.
25
+
26
+ Args:
27
+ config: The configuration for the agent as an AgentConfig object.
28
+
29
+ Returns:
30
+ An instance of the agent.
31
+ """
32
+ ...
33
+
34
+ @property
35
+ def protocol_type(self) -> "ProtocolType":
36
+ """
37
+ Returns the protocol type of the agent.
38
+
39
+ This property should be implemented to return the protocol type of the agent.
40
+ This is used to determine the type of agent to create in the AgentFactory.
41
+ """
42
+ ...
43
+
44
+ async def connect(self) -> None:
45
+ """
46
+ Establish connection to agent/server.
47
+
48
+ This method should be implemented to establish a connection to the agent/server
49
+ and load any necessary resources.
50
+ """
51
+ ...
52
+
53
+ async def disconnect(self) -> None:
54
+ """
55
+ Close connection to agent/server.
56
+
57
+ This method should be implemented to close the connection to the agent/server
58
+ and release any necessary resources.
59
+ """
60
+ ...
61
+
62
+ async def process_input(self, input: "AgentInput") -> "AgentInput":
63
+ """
64
+ Pre-process the input before sending it to the agent.
65
+
66
+ This method should be implemented to pre-process the input before sending it
67
+ to the agent. This can be used to add any necessary metadata or context to the
68
+ input, or to filter the input.
69
+
70
+ Args:
71
+ input: The input to the agent as an AgentInput object.
72
+
73
+ Returns:
74
+ The processed input to the agent as an AgentInput object.
75
+ """
76
+ ...
77
+
78
+ async def run(self, input: "AgentInput") -> "AgentOutput":
79
+ """
80
+ Send a message to Agent/server and return response.
81
+
82
+ This method should be implemented to send a message to the agent/server and
83
+ return the response in an AgentOutput object.
84
+
85
+ Args:
86
+ input: The input to the agent as an AgentInput object.
87
+
88
+ Returns:
89
+ The output from the agent as an AgentOutput object.
90
+ """
91
+ ...
92
+
93
+ async def process_output(self, output: "AgentOutput") -> "AgentOutput":
94
+ """
95
+ Post-process the output before returning it to Rasa.
96
+
97
+ This method should be implemented to post-process the output before returning
98
+ it to Rasa. This can be used to add any necessary metadata or context to the
99
+ output, or to filter the output.
100
+
101
+ Args:
102
+ output: The output from the agent as an AgentOutput object.
103
+
104
+ Returns:
105
+ The processed output from the agent as an AgentOutput object.
106
+ """
107
+ ...
@@ -0,0 +1,70 @@
1
+ """Fundamental types for the agent protocol."""
2
+
3
+ from enum import Enum
4
+
5
+
6
+ class ProtocolType(Enum):
7
+ """An Enum class that represents the supported protocol types."""
8
+
9
+ MCP_OPEN = "mcp_open"
10
+ MCP_TASK = "mcp_task"
11
+ A2A = "a2a"
12
+
13
+
14
+ class AgentIdentifier:
15
+ """Represents a unique agent identifier combining agent_id and protocol_type."""
16
+
17
+ SEPARATOR = "::"
18
+
19
+ def __init__(self, agent_name: str, protocol_type: ProtocolType):
20
+ self.agent_name = agent_name
21
+ self.protocol_type = protocol_type
22
+
23
+ def __str__(self) -> str:
24
+ return f"{self.agent_name}{self.SEPARATOR}{self.protocol_type.value}"
25
+
26
+ def __repr__(self) -> str:
27
+ return (
28
+ f"AgentIdentifier(agent_name='{self.agent_name}', "
29
+ f"protocol_type='{self.protocol_type.value}')"
30
+ )
31
+
32
+ def __eq__(self, other: object) -> bool:
33
+ if isinstance(other, AgentIdentifier):
34
+ return (
35
+ self.agent_name == other.agent_name
36
+ and self.protocol_type == other.protocol_type
37
+ )
38
+ elif isinstance(other, str):
39
+ return str(self) == other
40
+ return False
41
+
42
+ def __hash__(self) -> int:
43
+ return hash((self.agent_name, self.protocol_type))
44
+
45
+ @classmethod
46
+ def from_string(cls, identifier: str) -> "AgentIdentifier":
47
+ """Create an AgentIdentifier from a string representation."""
48
+ if cls.SEPARATOR not in identifier:
49
+ raise ValueError(f"Invalid agent identifier format: {identifier}")
50
+
51
+ parts = identifier.split(cls.SEPARATOR, 1)
52
+ if len(parts) != 2:
53
+ raise ValueError(f"Invalid agent identifier format: {identifier}")
54
+
55
+ agent_name, protocol_str = parts
56
+ try:
57
+ protocol_type = ProtocolType(protocol_str)
58
+ except ValueError:
59
+ raise ValueError(f"Invalid protocol type: {protocol_str}")
60
+
61
+ return cls(agent_name, protocol_type)
62
+
63
+
64
+ class AgentStatus(Enum):
65
+ """A Enum class that represents the status of the agent."""
66
+
67
+ COMPLETED = "completed"
68
+ INPUT_REQUIRED = "input_required"
69
+ FATAL_ERROR = "fatal_error"
70
+ RECOVERABLE_ERROR = "recoverable_error"
@@ -0,0 +1,38 @@
1
+ from rasa.exceptions import RasaException, ValidationError
2
+
3
+
4
+ class AgentNotFoundException(RasaException):
5
+ """Raised when an agent is not found."""
6
+
7
+ def __init__(self, agent_name: str):
8
+ super().__init__(f"The agent {agent_name} is not defined.")
9
+
10
+
11
+ class DuplicatedAgentNameException(ValidationError):
12
+ """Raised when agent names are duplicated."""
13
+
14
+ def __init__(self, duplicated_names: list[str]) -> None:
15
+ """Initialize the exception."""
16
+ event_info = f"Agent names are duplicated: {', '.join(duplicated_names)}"
17
+
18
+ super().__init__(
19
+ code="agent.duplicated_name",
20
+ event_info=event_info,
21
+ duplicated_names=duplicated_names,
22
+ )
23
+
24
+
25
+ class AgentNameFlowConflictException(ValidationError):
26
+ """Raised when agent names conflict with flow names."""
27
+
28
+ def __init__(self, conflicting_names: list[str]) -> None:
29
+ """Initialize the exception."""
30
+ event_info = (
31
+ f"Agent names conflict with flow names: {', '.join(conflicting_names)}"
32
+ )
33
+
34
+ super().__init__(
35
+ code="agent.flow_name_conflict",
36
+ event_info=event_info,
37
+ conflicting_names=conflicting_names,
38
+ )
@@ -0,0 +1,5 @@
1
+ from rasa.agents.protocol.a2a.a2a_agent import A2AAgent
2
+ from rasa.agents.protocol.mcp.mcp_open_agent import MCPOpenAgent
3
+ from rasa.agents.protocol.mcp.mcp_task_agent import MCPTaskAgent
4
+
5
+ __all__ = ["A2AAgent", "MCPOpenAgent", "MCPTaskAgent"]