waldiez 0.4.7__py3-none-any.whl → 0.4.9__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 waldiez might be problematic. Click here for more details.

Files changed (248) hide show
  1. waldiez/__init__.py +5 -5
  2. waldiez/_version.py +1 -1
  3. waldiez/cli.py +97 -102
  4. waldiez/exporter.py +61 -19
  5. waldiez/exporting/__init__.py +25 -6
  6. waldiez/exporting/agent/__init__.py +7 -3
  7. waldiez/exporting/agent/code_execution.py +114 -0
  8. waldiez/exporting/agent/exporter.py +354 -0
  9. waldiez/exporting/agent/extras/__init__.py +15 -0
  10. waldiez/exporting/agent/extras/captain_agent_extras.py +315 -0
  11. waldiez/exporting/agent/extras/group/target.py +178 -0
  12. waldiez/exporting/agent/extras/group_manager_agent_extas.py +500 -0
  13. waldiez/exporting/agent/extras/group_member_extras.py +181 -0
  14. waldiez/exporting/agent/extras/handoffs/__init__.py +19 -0
  15. waldiez/exporting/agent/extras/handoffs/after_work.py +78 -0
  16. waldiez/exporting/agent/extras/handoffs/available.py +74 -0
  17. waldiez/exporting/agent/extras/handoffs/condition.py +158 -0
  18. waldiez/exporting/agent/extras/handoffs/handoff.py +171 -0
  19. waldiez/exporting/agent/extras/handoffs/target.py +189 -0
  20. waldiez/exporting/agent/extras/rag/__init__.py +10 -0
  21. waldiez/exporting/agent/{utils/rag_user/chroma_utils.py → extras/rag/chroma_extras.py} +37 -24
  22. waldiez/exporting/agent/{utils/rag_user/mongo_utils.py → extras/rag/mongo_extras.py} +10 -10
  23. waldiez/exporting/agent/{utils/rag_user/pgvector_utils.py → extras/rag/pgvector_extras.py} +13 -13
  24. waldiez/exporting/agent/{utils/rag_user/qdrant_utils.py → extras/rag/qdrant_extras.py} +13 -13
  25. waldiez/exporting/agent/{utils/rag_user/vector_db.py → extras/rag/vector_db_extras.py} +59 -46
  26. waldiez/exporting/agent/extras/rag_user_proxy_agent_extras.py +245 -0
  27. waldiez/exporting/agent/extras/reasoning_agent_extras.py +88 -0
  28. waldiez/exporting/agent/factory.py +95 -0
  29. waldiez/exporting/agent/processor.py +150 -0
  30. waldiez/exporting/agent/system_message.py +36 -0
  31. waldiez/exporting/agent/termination.py +50 -0
  32. waldiez/exporting/chats/__init__.py +7 -3
  33. waldiez/exporting/chats/exporter.py +97 -0
  34. waldiez/exporting/chats/factory.py +65 -0
  35. waldiez/exporting/chats/processor.py +226 -0
  36. waldiez/exporting/chats/utils/__init__.py +6 -5
  37. waldiez/exporting/chats/utils/common.py +11 -45
  38. waldiez/exporting/chats/utils/group.py +55 -0
  39. waldiez/exporting/chats/utils/nested.py +37 -52
  40. waldiez/exporting/chats/utils/sequential.py +72 -61
  41. waldiez/exporting/chats/utils/{single_chat.py → single.py} +48 -50
  42. waldiez/exporting/core/__init__.py +196 -0
  43. waldiez/exporting/core/constants.py +17 -0
  44. waldiez/exporting/core/content.py +69 -0
  45. waldiez/exporting/core/context.py +244 -0
  46. waldiez/exporting/core/enums.py +89 -0
  47. waldiez/exporting/core/errors.py +19 -0
  48. waldiez/exporting/core/exporter.py +390 -0
  49. waldiez/exporting/core/exporters.py +67 -0
  50. waldiez/exporting/core/extras/__init__.py +39 -0
  51. waldiez/exporting/core/extras/agent_extras/__init__.py +27 -0
  52. waldiez/exporting/core/extras/agent_extras/captain_extras.py +57 -0
  53. waldiez/exporting/core/extras/agent_extras/group_manager_extras.py +102 -0
  54. waldiez/exporting/core/extras/agent_extras/rag_user_extras.py +53 -0
  55. waldiez/exporting/core/extras/agent_extras/reasoning_extras.py +68 -0
  56. waldiez/exporting/core/extras/agent_extras/standard_extras.py +263 -0
  57. waldiez/exporting/core/extras/base.py +241 -0
  58. waldiez/exporting/core/extras/chat_extras.py +118 -0
  59. waldiez/exporting/core/extras/flow_extras.py +70 -0
  60. waldiez/exporting/core/extras/model_extras.py +73 -0
  61. waldiez/exporting/core/extras/path_resolver.py +93 -0
  62. waldiez/exporting/core/extras/serializer.py +138 -0
  63. waldiez/exporting/core/extras/tool_extras.py +82 -0
  64. waldiez/exporting/core/protocols.py +259 -0
  65. waldiez/exporting/core/result.py +705 -0
  66. waldiez/exporting/core/types.py +329 -0
  67. waldiez/exporting/core/utils/__init__.py +11 -0
  68. waldiez/exporting/core/utils/comment.py +33 -0
  69. waldiez/exporting/core/utils/llm_config.py +117 -0
  70. waldiez/exporting/core/validation.py +96 -0
  71. waldiez/exporting/flow/__init__.py +6 -2
  72. waldiez/exporting/flow/execution_generator.py +193 -0
  73. waldiez/exporting/flow/exporter.py +107 -0
  74. waldiez/exporting/flow/factory.py +94 -0
  75. waldiez/exporting/flow/file_generator.py +214 -0
  76. waldiez/exporting/flow/merger.py +387 -0
  77. waldiez/exporting/flow/orchestrator.py +411 -0
  78. waldiez/exporting/flow/utils/__init__.py +9 -36
  79. waldiez/exporting/flow/utils/common.py +206 -0
  80. waldiez/exporting/flow/utils/importing.py +373 -0
  81. waldiez/exporting/flow/utils/linting.py +200 -0
  82. waldiez/exporting/flow/utils/{logging_utils.py → logging.py} +23 -9
  83. waldiez/exporting/models/__init__.py +3 -1
  84. waldiez/exporting/models/exporter.py +233 -0
  85. waldiez/exporting/models/factory.py +66 -0
  86. waldiez/exporting/models/processor.py +139 -0
  87. waldiez/exporting/tools/__init__.py +11 -0
  88. waldiez/exporting/tools/exporter.py +207 -0
  89. waldiez/exporting/tools/factory.py +57 -0
  90. waldiez/exporting/tools/processor.py +248 -0
  91. waldiez/exporting/tools/registration.py +133 -0
  92. waldiez/io/__init__.py +128 -0
  93. waldiez/io/_ws.py +199 -0
  94. waldiez/io/models/__init__.py +60 -0
  95. waldiez/io/models/base.py +66 -0
  96. waldiez/io/models/constants.py +78 -0
  97. waldiez/io/models/content/__init__.py +23 -0
  98. waldiez/io/models/content/audio.py +43 -0
  99. waldiez/io/models/content/base.py +45 -0
  100. waldiez/io/models/content/file.py +43 -0
  101. waldiez/io/models/content/image.py +96 -0
  102. waldiez/io/models/content/text.py +37 -0
  103. waldiez/io/models/content/video.py +43 -0
  104. waldiez/io/models/user_input.py +269 -0
  105. waldiez/io/models/user_response.py +215 -0
  106. waldiez/io/mqtt.py +681 -0
  107. waldiez/io/redis.py +782 -0
  108. waldiez/io/structured.py +439 -0
  109. waldiez/io/utils.py +184 -0
  110. waldiez/io/ws.py +298 -0
  111. waldiez/logger.py +481 -0
  112. waldiez/models/__init__.py +108 -51
  113. waldiez/models/agents/__init__.py +34 -70
  114. waldiez/models/agents/agent/__init__.py +10 -4
  115. waldiez/models/agents/agent/agent.py +466 -65
  116. waldiez/models/agents/agent/agent_data.py +119 -47
  117. waldiez/models/agents/agent/agent_type.py +13 -2
  118. waldiez/models/agents/agent/code_execution.py +12 -12
  119. waldiez/models/agents/agent/human_input_mode.py +8 -0
  120. waldiez/models/agents/agent/{linked_skill.py → linked_tool.py} +7 -7
  121. waldiez/models/agents/agent/nested_chat.py +35 -7
  122. waldiez/models/agents/agent/termination_message.py +30 -22
  123. waldiez/models/agents/{swarm_agent → agent}/update_system_message.py +22 -22
  124. waldiez/models/agents/agents.py +58 -63
  125. waldiez/models/agents/assistant/assistant.py +4 -4
  126. waldiez/models/agents/assistant/assistant_data.py +13 -1
  127. waldiez/models/agents/{captain_agent → captain}/captain_agent.py +5 -5
  128. waldiez/models/agents/{captain_agent → captain}/captain_agent_data.py +5 -5
  129. waldiez/models/agents/extra_requirements.py +11 -16
  130. waldiez/models/agents/group_manager/group_manager.py +103 -13
  131. waldiez/models/agents/group_manager/group_manager_data.py +36 -14
  132. waldiez/models/agents/group_manager/speakers.py +77 -24
  133. waldiez/models/agents/{rag_user → rag_user_proxy}/__init__.py +16 -16
  134. waldiez/models/agents/rag_user_proxy/rag_user_proxy.py +64 -0
  135. waldiez/models/agents/{rag_user/rag_user_data.py → rag_user_proxy/rag_user_proxy_data.py} +6 -5
  136. waldiez/models/agents/{rag_user → rag_user_proxy}/retrieve_config.py +182 -114
  137. waldiez/models/agents/{rag_user → rag_user_proxy}/vector_db_config.py +13 -13
  138. waldiez/models/agents/reasoning/reasoning_agent.py +6 -6
  139. waldiez/models/agents/reasoning/reasoning_agent_data.py +110 -63
  140. waldiez/models/agents/reasoning/reasoning_agent_reason_config.py +38 -10
  141. waldiez/models/agents/user_proxy/user_proxy.py +11 -7
  142. waldiez/models/agents/user_proxy/user_proxy_data.py +2 -2
  143. waldiez/models/chat/__init__.py +2 -1
  144. waldiez/models/chat/chat.py +166 -87
  145. waldiez/models/chat/chat_data.py +99 -136
  146. waldiez/models/chat/chat_message.py +33 -23
  147. waldiez/models/chat/chat_nested.py +31 -30
  148. waldiez/models/chat/chat_summary.py +10 -8
  149. waldiez/models/common/__init__.py +52 -2
  150. waldiez/models/common/ag2_version.py +1 -1
  151. waldiez/models/common/base.py +38 -7
  152. waldiez/models/common/dict_utils.py +42 -17
  153. waldiez/models/common/handoff.py +459 -0
  154. waldiez/models/common/id_generator.py +19 -0
  155. waldiez/models/common/method_utils.py +130 -68
  156. waldiez/{exporting/base/utils → models/common}/naming.py +38 -61
  157. waldiez/models/common/waldiez_version.py +37 -0
  158. waldiez/models/flow/__init__.py +9 -2
  159. waldiez/models/flow/connection.py +18 -0
  160. waldiez/models/flow/flow.py +311 -215
  161. waldiez/models/flow/flow_data.py +207 -40
  162. waldiez/models/flow/info.py +85 -0
  163. waldiez/models/flow/naming.py +131 -0
  164. waldiez/models/model/__init__.py +7 -1
  165. waldiez/models/model/extra_requirements.py +3 -12
  166. waldiez/models/model/model.py +76 -21
  167. waldiez/models/model/model_data.py +108 -20
  168. waldiez/models/tool/__init__.py +16 -0
  169. waldiez/models/tool/extra_requirements.py +36 -0
  170. waldiez/models/{skill/skill.py → tool/tool.py} +88 -88
  171. waldiez/models/tool/tool_data.py +51 -0
  172. waldiez/models/tool/tool_type.py +8 -0
  173. waldiez/models/waldiez.py +97 -80
  174. waldiez/runner.py +115 -61
  175. waldiez/running/__init__.py +13 -7
  176. waldiez/running/environment.py +49 -68
  177. waldiez/running/gen_seq_diagram.py +16 -14
  178. waldiez/running/post_run.py +119 -0
  179. waldiez/running/pre_run.py +149 -0
  180. waldiez/running/util.py +134 -0
  181. waldiez/utils/__init__.py +2 -4
  182. waldiez/utils/cli_extras/jupyter.py +5 -3
  183. waldiez/utils/cli_extras/runner.py +6 -4
  184. waldiez/utils/cli_extras/studio.py +6 -4
  185. waldiez/utils/conflict_checker.py +15 -9
  186. waldiez/utils/flaml_warnings.py +5 -5
  187. waldiez/utils/version.py +47 -0
  188. {waldiez-0.4.7.dist-info → waldiez-0.4.9.dist-info}/METADATA +235 -91
  189. waldiez-0.4.9.dist-info/RECORD +203 -0
  190. waldiez/exporting/agent/agent_exporter.py +0 -297
  191. waldiez/exporting/agent/utils/__init__.py +0 -23
  192. waldiez/exporting/agent/utils/captain_agent.py +0 -263
  193. waldiez/exporting/agent/utils/code_execution.py +0 -65
  194. waldiez/exporting/agent/utils/group_manager.py +0 -220
  195. waldiez/exporting/agent/utils/rag_user/__init__.py +0 -7
  196. waldiez/exporting/agent/utils/rag_user/rag_user.py +0 -209
  197. waldiez/exporting/agent/utils/reasoning.py +0 -36
  198. waldiez/exporting/agent/utils/swarm_agent.py +0 -469
  199. waldiez/exporting/agent/utils/teachability.py +0 -41
  200. waldiez/exporting/agent/utils/termination_message.py +0 -44
  201. waldiez/exporting/base/__init__.py +0 -25
  202. waldiez/exporting/base/agent_position.py +0 -75
  203. waldiez/exporting/base/base_exporter.py +0 -118
  204. waldiez/exporting/base/export_position.py +0 -48
  205. waldiez/exporting/base/import_position.py +0 -23
  206. waldiez/exporting/base/mixin.py +0 -137
  207. waldiez/exporting/base/utils/__init__.py +0 -18
  208. waldiez/exporting/base/utils/comments.py +0 -96
  209. waldiez/exporting/base/utils/path_check.py +0 -68
  210. waldiez/exporting/base/utils/to_string.py +0 -84
  211. waldiez/exporting/chats/chats_exporter.py +0 -240
  212. waldiez/exporting/chats/utils/swarm.py +0 -210
  213. waldiez/exporting/flow/flow_exporter.py +0 -528
  214. waldiez/exporting/flow/utils/agent_utils.py +0 -204
  215. waldiez/exporting/flow/utils/chat_utils.py +0 -71
  216. waldiez/exporting/flow/utils/def_main.py +0 -77
  217. waldiez/exporting/flow/utils/flow_content.py +0 -202
  218. waldiez/exporting/flow/utils/flow_names.py +0 -116
  219. waldiez/exporting/flow/utils/importing_utils.py +0 -227
  220. waldiez/exporting/models/models_exporter.py +0 -199
  221. waldiez/exporting/models/utils.py +0 -174
  222. waldiez/exporting/skills/__init__.py +0 -9
  223. waldiez/exporting/skills/skills_exporter.py +0 -176
  224. waldiez/exporting/skills/utils.py +0 -369
  225. waldiez/models/agents/agent/teachability.py +0 -70
  226. waldiez/models/agents/rag_user/rag_user.py +0 -60
  227. waldiez/models/agents/swarm_agent/__init__.py +0 -50
  228. waldiez/models/agents/swarm_agent/after_work.py +0 -179
  229. waldiez/models/agents/swarm_agent/on_condition.py +0 -105
  230. waldiez/models/agents/swarm_agent/on_condition_available.py +0 -142
  231. waldiez/models/agents/swarm_agent/on_condition_target.py +0 -40
  232. waldiez/models/agents/swarm_agent/swarm_agent.py +0 -107
  233. waldiez/models/agents/swarm_agent/swarm_agent_data.py +0 -124
  234. waldiez/models/flow/utils.py +0 -232
  235. waldiez/models/skill/__init__.py +0 -16
  236. waldiez/models/skill/extra_requirements.py +0 -36
  237. waldiez/models/skill/skill_data.py +0 -53
  238. waldiez/models/skill/skill_type.py +0 -8
  239. waldiez/running/running.py +0 -369
  240. waldiez/utils/pysqlite3_checker.py +0 -308
  241. waldiez/utils/rdps_checker.py +0 -122
  242. waldiez-0.4.7.dist-info/RECORD +0 -149
  243. /waldiez/models/agents/{captain_agent → captain}/__init__.py +0 -0
  244. /waldiez/models/agents/{captain_agent → captain}/captain_agent_lib_entry.py +0 -0
  245. {waldiez-0.4.7.dist-info → waldiez-0.4.9.dist-info}/WHEEL +0 -0
  246. {waldiez-0.4.7.dist-info → waldiez-0.4.9.dist-info}/entry_points.txt +0 -0
  247. {waldiez-0.4.7.dist-info → waldiez-0.4.9.dist-info}/licenses/LICENSE +0 -0
  248. {waldiez-0.4.7.dist-info → waldiez-0.4.9.dist-info}/licenses/NOTICE.md +0 -0
waldiez/models/waldiez.py CHANGED
@@ -1,23 +1,33 @@
1
1
  # SPDX-License-Identifier: Apache-2.0.
2
2
  # Copyright (c) 2024 - 2025 Waldiez and contributors.
3
+ # pylint: disable=too-many-public-methods
3
4
  """Waldiez data class.
4
5
 
5
- A Waldiez class contains all the information that is needed to generate
6
+ A Waldiez class contains all the information needed to generate
6
7
  and run an autogen workflow. It has the model/LLM configurations, the agent
7
- definitions and their optional additional skills to be used.
8
+ definitions and their optional additional tools to be used.
8
9
  """
9
10
 
10
11
  import json
11
12
  from dataclasses import dataclass
12
13
  from pathlib import Path
13
- from typing import Any, Dict, Iterator, List, Optional, Tuple, Union
14
-
15
- from .agents import WaldiezAgent, get_retrievechat_extra_requirements
16
- from .chat import WaldiezChat
14
+ from typing import Any, Iterator, Optional
15
+
16
+ from .agents import (
17
+ WaldiezAgent,
18
+ WaldiezGroupManager,
19
+ get_captain_agent_extra_requirements,
20
+ get_retrievechat_extra_requirements,
21
+ )
17
22
  from .common import get_autogen_version
18
- from .flow import WaldiezFlow, get_flow_data
23
+ from .flow import (
24
+ WaldiezAgentConnection,
25
+ WaldiezFlow,
26
+ WaldiezFlowInfo,
27
+ get_flow_data,
28
+ )
19
29
  from .model import WaldiezModel, get_models_extra_requirements
20
- from .skill import WaldiezSkill, get_skills_extra_requirements
30
+ from .tool import WaldiezTool, get_tools_extra_requirements
21
31
 
22
32
 
23
33
  @dataclass(frozen=True, slots=True)
@@ -32,18 +42,18 @@ class Waldiez:
32
42
  @classmethod
33
43
  def from_dict(
34
44
  cls,
35
- data: Dict[str, Any],
45
+ data: dict[str, Any],
36
46
  flow_id: Optional[str] = None,
37
47
  name: Optional[str] = None,
38
48
  description: Optional[str] = None,
39
- tags: Optional[List[str]] = None,
40
- requirements: Optional[List[str]] = None,
49
+ tags: Optional[list[str]] = None,
50
+ requirements: Optional[list[str]] = None,
41
51
  ) -> "Waldiez":
42
52
  """Create a Waldiez from dict.
43
53
 
44
54
  Parameters
45
55
  ----------
46
- data : Dict[str, Any]
56
+ data : dict[str, Any]
47
57
  The data.
48
58
  flow_id : Optional[str], optional
49
59
  The flow id, by default None (retrieved from data or generated).
@@ -51,9 +61,9 @@ class Waldiez:
51
61
  The name, by default None (retrieved from data).
52
62
  description : Optional[str], optional
53
63
  The description, by default None (retrieved from data).
54
- tags : Optional[List[str]], optional
64
+ tags : Optional[list[str]], optional
55
65
  The tags, by default None (retrieved from data).
56
- requirements : Optional[List[str]], optional
66
+ requirements : Optional[list[str]], optional
57
67
  The requirements, by default None (retrieved from data).
58
68
 
59
69
  Returns
@@ -69,16 +79,17 @@ class Waldiez:
69
79
  tags=tags,
70
80
  requirements=requirements,
71
81
  )
72
- return cls(flow=WaldiezFlow.model_validate(flow))
82
+ validated = WaldiezFlow.model_validate(flow)
83
+ return cls(flow=validated) # pyright: ignore
73
84
 
74
85
  @classmethod
75
86
  def load(
76
87
  cls,
77
- waldiez_file: Union[str, Path],
88
+ waldiez_file: str | Path,
78
89
  name: Optional[str] = None,
79
90
  description: Optional[str] = None,
80
- tags: Optional[List[str]] = None,
81
- requirements: Optional[List[str]] = None,
91
+ tags: Optional[list[str]] = None,
92
+ requirements: Optional[list[str]] = None,
82
93
  ) -> "Waldiez":
83
94
  """Load a Waldiez from a file.
84
95
 
@@ -90,9 +101,9 @@ class Waldiez:
90
101
  The name, by default None.
91
102
  description : Optional[str], optional
92
103
  The description, by default None.
93
- tags : Optional[List[str]], optional
104
+ tags : Optional[list[str]], optional
94
105
  The tags, by default None.
95
- requirements : Optional[List[str]], optional
106
+ requirements : Optional[list[str]], optional
96
107
  The requirements, by default None.
97
108
 
98
109
  Returns
@@ -105,7 +116,7 @@ class Waldiez:
105
116
  ValueError
106
117
  If the file is not found or invalid JSON.
107
118
  """
108
- data: Dict[str, Any] = {}
119
+ data: dict[str, Any] = {}
109
120
  if not Path(waldiez_file).exists():
110
121
  raise ValueError(f"File not found: {waldiez_file}")
111
122
  with open(waldiez_file, "r", encoding="utf-8") as file:
@@ -142,23 +153,33 @@ class Waldiez:
142
153
  """
143
154
  return self.flow.model_dump_json(by_alias=by_alias, indent=indent)
144
155
 
156
+ @property
157
+ def id(self) -> str:
158
+ """Get the flow id."""
159
+ return self.flow.id
160
+
145
161
  @property
146
162
  def has_rag_agents(self) -> bool:
147
163
  """Check if the flow has RAG agents."""
148
- return any(agent.agent_type == "rag_user" for agent in self.agents)
164
+ return any(agent.is_rag_user for agent in self.agents)
149
165
 
150
166
  @property
151
167
  def has_multimodal_agents(self) -> bool:
152
168
  """Check if the flow has multimodal agents."""
153
- return any(agent.data.is_multimodal for agent in self.agents)
169
+ return any(
170
+ agent.data.is_multimodal
171
+ for agent in self.flow.data.agents.assistantAgents
172
+ )
154
173
 
155
174
  @property
156
175
  def has_captain_agents(self) -> bool:
157
176
  """Check if the flow has captain agents."""
158
- return any(agent.agent_type == "captain" for agent in self.agents)
177
+ return any(agent.is_captain for agent in self.agents)
159
178
 
160
179
  @property
161
- def chats(self) -> List[Tuple[WaldiezChat, WaldiezAgent, WaldiezAgent]]:
180
+ def initial_chats(
181
+ self,
182
+ ) -> list[WaldiezAgentConnection]:
162
183
  """Get the chats."""
163
184
  return self.flow.ordered_flow
164
185
 
@@ -174,15 +195,15 @@ class Waldiez:
174
195
  yield from self.flow.data.agents.members
175
196
 
176
197
  @property
177
- def skills(self) -> Iterator[WaldiezSkill]:
178
- """Get the flow skills.
198
+ def tools(self) -> Iterator[WaldiezTool]:
199
+ """Get the flow tools.
179
200
 
180
201
  Yields
181
202
  ------
182
- WaldiezSkill
183
- The skills.
203
+ WaldiezTool
204
+ The tools.
184
205
  """
185
- yield from self.flow.data.skills
206
+ yield from self.flow.data.tools
186
207
 
187
208
  @property
188
209
  def models(self) -> Iterator[WaldiezModel]:
@@ -195,6 +216,14 @@ class Waldiez:
195
216
  """
196
217
  yield from self.flow.data.models
197
218
 
219
+ @property
220
+ def info(self) -> WaldiezFlowInfo:
221
+ """Get the flow info."""
222
+ return WaldiezFlowInfo.create(
223
+ agents=self.agents,
224
+ agent_names=self.flow.unique_names["agent_names"],
225
+ )
226
+
198
227
  @property
199
228
  def name(self) -> str:
200
229
  """Get the flow name."""
@@ -206,7 +235,7 @@ class Waldiez:
206
235
  return self.flow.description or "Waldiez Flow description"
207
236
 
208
237
  @property
209
- def tags(self) -> List[str]:
238
+ def tags(self) -> list[str]:
210
239
  """Get the flow tags."""
211
240
  return self.flow.tags
212
241
 
@@ -226,14 +255,13 @@ class Waldiez:
226
255
  return self.flow.is_single_agent_mode
227
256
 
228
257
  @property
229
- def requirements(self) -> List[str]:
258
+ def requirements(self) -> list[str]:
230
259
  """Get the flow requirements."""
231
260
  autogen_version = get_autogen_version()
232
261
  requirements_list = filter(
233
262
  # we use the fixed "ag2=={autogen_version}" below
234
263
  lambda requirement: not (
235
- # cspell:disable-next-line
236
- requirement.startswith("pyautogen")
264
+ requirement.startswith("ag2")
237
265
  or requirement.startswith("ag2")
238
266
  or requirement.startswith("autogen")
239
267
  ),
@@ -241,29 +269,13 @@ class Waldiez:
241
269
  )
242
270
  requirements = set(requirements_list)
243
271
  requirements.add(f"ag2[openai]=={autogen_version}")
244
- if self.has_rag_agents:
272
+ if self.has_rag_agents: # pragma: no branch
245
273
  rag_extras = get_retrievechat_extra_requirements(self.agents)
246
274
  requirements.update(rag_extras)
247
- if self.has_multimodal_agents:
275
+ if self.has_multimodal_agents: # pragma: no branch
248
276
  requirements.add(f"ag2[lmm]=={autogen_version}")
249
- if self.has_captain_agents:
250
- # pysqlite3-binary might not get installed on windows
251
- captain_extras = [
252
- "chromadb",
253
- "sentence-transformers",
254
- "huggingface-hub",
255
- # tools:
256
- "pillow",
257
- "markdownify",
258
- "arxiv",
259
- "pymupdf",
260
- "wikipedia-api",
261
- "easyocr",
262
- "python-pptx",
263
- "openai-whisper",
264
- "pandas",
265
- "scipy",
266
- ]
277
+ if self.has_captain_agents: # pragma: no branch
278
+ captain_extras = get_captain_agent_extra_requirements()
267
279
  requirements.update(captain_extras)
268
280
  requirements.update(
269
281
  get_models_extra_requirements(
@@ -272,28 +284,50 @@ class Waldiez:
272
284
  )
273
285
  )
274
286
  requirements.update(
275
- get_skills_extra_requirements(
276
- self.skills,
287
+ get_tools_extra_requirements(
288
+ self.tools,
277
289
  autogen_version=autogen_version,
278
290
  )
279
291
  )
280
292
  return sorted(requirements)
281
293
 
282
- def get_flow_env_vars(self) -> List[Tuple[str, str]]:
294
+ # def get_flow_chat_info(self) ->
295
+
296
+ def get_flow_env_vars(self) -> list[tuple[str, str]]:
283
297
  """Get the flow environment variables.
284
298
 
285
299
  Returns
286
300
  -------
287
- List[Tuple[str, str]]
301
+ list[tuple[str, str]]
288
302
  The environment variables for the flow.
289
303
  """
290
- env_vars: List[Tuple[str, str]] = []
291
- for skill in self.skills:
292
- for secret_key, secret_value in skill.secrets.items():
304
+ env_vars: list[tuple[str, str]] = []
305
+ for tool in self.tools:
306
+ for secret_key, secret_value in tool.secrets.items():
293
307
  env_vars.append((secret_key, secret_value))
308
+ for model in self.models:
309
+ api_env_key = model.api_key_env_key
310
+ api_key = model.api_key
311
+ if api_env_key and api_key: # pragma: no branch
312
+ env_vars.append((api_env_key, api_key))
294
313
  return env_vars
295
314
 
296
- def get_group_chat_members(self, agent: WaldiezAgent) -> List[WaldiezAgent]:
315
+ def get_root_group_manager(self) -> WaldiezGroupManager:
316
+ """Get the root group manager agent.
317
+
318
+ Returns
319
+ -------
320
+ WaldiezGroupManager
321
+ The root group manager agent.
322
+
323
+ Raises
324
+ ------
325
+ ValueError
326
+ If the root group manager agent is not found.
327
+ """
328
+ return self.flow.get_root_group_manager()
329
+
330
+ def get_group_chat_members(self, agent: WaldiezAgent) -> list[WaldiezAgent]:
297
331
  """Get the chat members that connect to a group chat manager agent.
298
332
 
299
333
  Parameters
@@ -306,23 +340,6 @@ class Waldiez:
306
340
  List[WaldiezAgent]
307
341
  The group chat members.
308
342
  """
309
- if agent.agent_type != "manager":
343
+ if not agent.is_group_manager:
310
344
  return []
311
345
  return self.flow.get_group_chat_members(agent.id)
312
-
313
- def get_swarm_members(
314
- self, initial_agent: WaldiezAgent
315
- ) -> Tuple[List[WaldiezAgent], Optional[WaldiezAgent]]:
316
- """Get the chat members that connect to a swarm agent.
317
-
318
- Parameters
319
- ----------
320
- initial_agent : WaldiezAgent
321
- The initial agent.
322
-
323
- Returns
324
- -------
325
- Tuple[List[WaldiezAgent], Optional[WaldiezAgent]]
326
- The swarm agents and the user agent.
327
- """
328
- return self.flow.get_swarm_chat_members(initial_agent)