ag2 0.9.1a1__py3-none-any.whl → 0.9.1.post0__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 ag2 might be problematic. Click here for more details.

Files changed (357) hide show
  1. {ag2-0.9.1a1.dist-info → ag2-0.9.1.post0.dist-info}/METADATA +264 -73
  2. ag2-0.9.1.post0.dist-info/RECORD +392 -0
  3. {ag2-0.9.1a1.dist-info → ag2-0.9.1.post0.dist-info}/WHEEL +1 -2
  4. autogen/__init__.py +89 -0
  5. autogen/_website/__init__.py +3 -0
  6. autogen/_website/generate_api_references.py +427 -0
  7. autogen/_website/generate_mkdocs.py +1174 -0
  8. autogen/_website/notebook_processor.py +476 -0
  9. autogen/_website/process_notebooks.py +656 -0
  10. autogen/_website/utils.py +412 -0
  11. autogen/agentchat/__init__.py +44 -0
  12. autogen/agentchat/agent.py +182 -0
  13. autogen/agentchat/assistant_agent.py +85 -0
  14. autogen/agentchat/chat.py +309 -0
  15. autogen/agentchat/contrib/__init__.py +5 -0
  16. autogen/agentchat/contrib/agent_eval/README.md +7 -0
  17. autogen/agentchat/contrib/agent_eval/agent_eval.py +108 -0
  18. autogen/agentchat/contrib/agent_eval/criterion.py +43 -0
  19. autogen/agentchat/contrib/agent_eval/critic_agent.py +44 -0
  20. autogen/agentchat/contrib/agent_eval/quantifier_agent.py +39 -0
  21. autogen/agentchat/contrib/agent_eval/subcritic_agent.py +45 -0
  22. autogen/agentchat/contrib/agent_eval/task.py +42 -0
  23. autogen/agentchat/contrib/agent_optimizer.py +429 -0
  24. autogen/agentchat/contrib/capabilities/__init__.py +5 -0
  25. autogen/agentchat/contrib/capabilities/agent_capability.py +20 -0
  26. autogen/agentchat/contrib/capabilities/generate_images.py +301 -0
  27. autogen/agentchat/contrib/capabilities/teachability.py +393 -0
  28. autogen/agentchat/contrib/capabilities/text_compressors.py +66 -0
  29. autogen/agentchat/contrib/capabilities/tools_capability.py +22 -0
  30. autogen/agentchat/contrib/capabilities/transform_messages.py +93 -0
  31. autogen/agentchat/contrib/capabilities/transforms.py +566 -0
  32. autogen/agentchat/contrib/capabilities/transforms_util.py +122 -0
  33. autogen/agentchat/contrib/capabilities/vision_capability.py +214 -0
  34. autogen/agentchat/contrib/captainagent/__init__.py +9 -0
  35. autogen/agentchat/contrib/captainagent/agent_builder.py +790 -0
  36. autogen/agentchat/contrib/captainagent/captainagent.py +512 -0
  37. autogen/agentchat/contrib/captainagent/tool_retriever.py +335 -0
  38. autogen/agentchat/contrib/captainagent/tools/README.md +44 -0
  39. autogen/agentchat/contrib/captainagent/tools/__init__.py +5 -0
  40. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation.py +40 -0
  41. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis.py +28 -0
  42. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr.py +28 -0
  43. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore.py +28 -0
  44. autogen/agentchat/contrib/captainagent/tools/data_analysis/explore_csv.py +21 -0
  45. autogen/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test.py +30 -0
  46. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download.py +27 -0
  47. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search.py +53 -0
  48. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image.py +53 -0
  49. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text.py +38 -0
  50. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text.py +21 -0
  51. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption.py +34 -0
  52. autogen/agentchat/contrib/captainagent/tools/information_retrieval/image_qa.py +60 -0
  53. autogen/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition.py +61 -0
  54. autogen/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search.py +47 -0
  55. autogen/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables.py +33 -0
  56. autogen/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file.py +21 -0
  57. autogen/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download.py +35 -0
  58. autogen/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter.py +21 -0
  59. autogen/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week.py +18 -0
  60. autogen/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum.py +28 -0
  61. autogen/agentchat/contrib/captainagent/tools/math/calculate_matrix_power.py +31 -0
  62. autogen/agentchat/contrib/captainagent/tools/math/calculate_reflected_point.py +16 -0
  63. autogen/agentchat/contrib/captainagent/tools/math/complex_numbers_product.py +25 -0
  64. autogen/agentchat/contrib/captainagent/tools/math/compute_currency_conversion.py +23 -0
  65. autogen/agentchat/contrib/captainagent/tools/math/count_distinct_permutations.py +27 -0
  66. autogen/agentchat/contrib/captainagent/tools/math/evaluate_expression.py +28 -0
  67. autogen/agentchat/contrib/captainagent/tools/math/find_continuity_point.py +34 -0
  68. autogen/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers.py +39 -0
  69. autogen/agentchat/contrib/captainagent/tools/math/modular_inverse_sum.py +23 -0
  70. autogen/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers.py +36 -0
  71. autogen/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials.py +15 -0
  72. autogen/agentchat/contrib/captainagent/tools/math/sum_of_primes_below.py +15 -0
  73. autogen/agentchat/contrib/captainagent/tools/requirements.txt +10 -0
  74. autogen/agentchat/contrib/captainagent/tools/tool_description.tsv +34 -0
  75. autogen/agentchat/contrib/gpt_assistant_agent.py +526 -0
  76. autogen/agentchat/contrib/graph_rag/__init__.py +9 -0
  77. autogen/agentchat/contrib/graph_rag/document.py +29 -0
  78. autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py +170 -0
  79. autogen/agentchat/contrib/graph_rag/falkor_graph_rag_capability.py +103 -0
  80. autogen/agentchat/contrib/graph_rag/graph_query_engine.py +53 -0
  81. autogen/agentchat/contrib/graph_rag/graph_rag_capability.py +63 -0
  82. autogen/agentchat/contrib/graph_rag/neo4j_graph_query_engine.py +268 -0
  83. autogen/agentchat/contrib/graph_rag/neo4j_graph_rag_capability.py +83 -0
  84. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_query_engine.py +210 -0
  85. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_rag_capability.py +93 -0
  86. autogen/agentchat/contrib/img_utils.py +397 -0
  87. autogen/agentchat/contrib/llamaindex_conversable_agent.py +117 -0
  88. autogen/agentchat/contrib/llava_agent.py +187 -0
  89. autogen/agentchat/contrib/math_user_proxy_agent.py +464 -0
  90. autogen/agentchat/contrib/multimodal_conversable_agent.py +125 -0
  91. autogen/agentchat/contrib/qdrant_retrieve_user_proxy_agent.py +324 -0
  92. autogen/agentchat/contrib/rag/__init__.py +10 -0
  93. autogen/agentchat/contrib/rag/chromadb_query_engine.py +272 -0
  94. autogen/agentchat/contrib/rag/llamaindex_query_engine.py +198 -0
  95. autogen/agentchat/contrib/rag/mongodb_query_engine.py +329 -0
  96. autogen/agentchat/contrib/rag/query_engine.py +74 -0
  97. autogen/agentchat/contrib/retrieve_assistant_agent.py +56 -0
  98. autogen/agentchat/contrib/retrieve_user_proxy_agent.py +703 -0
  99. autogen/agentchat/contrib/society_of_mind_agent.py +199 -0
  100. autogen/agentchat/contrib/swarm_agent.py +1425 -0
  101. autogen/agentchat/contrib/text_analyzer_agent.py +79 -0
  102. autogen/agentchat/contrib/vectordb/__init__.py +5 -0
  103. autogen/agentchat/contrib/vectordb/base.py +232 -0
  104. autogen/agentchat/contrib/vectordb/chromadb.py +315 -0
  105. autogen/agentchat/contrib/vectordb/couchbase.py +407 -0
  106. autogen/agentchat/contrib/vectordb/mongodb.py +550 -0
  107. autogen/agentchat/contrib/vectordb/pgvectordb.py +928 -0
  108. autogen/agentchat/contrib/vectordb/qdrant.py +320 -0
  109. autogen/agentchat/contrib/vectordb/utils.py +126 -0
  110. autogen/agentchat/contrib/web_surfer.py +303 -0
  111. autogen/agentchat/conversable_agent.py +4020 -0
  112. autogen/agentchat/group/__init__.py +64 -0
  113. autogen/agentchat/group/available_condition.py +91 -0
  114. autogen/agentchat/group/context_condition.py +77 -0
  115. autogen/agentchat/group/context_expression.py +238 -0
  116. autogen/agentchat/group/context_str.py +41 -0
  117. autogen/agentchat/group/context_variables.py +192 -0
  118. autogen/agentchat/group/group_tool_executor.py +202 -0
  119. autogen/agentchat/group/group_utils.py +591 -0
  120. autogen/agentchat/group/handoffs.py +244 -0
  121. autogen/agentchat/group/llm_condition.py +93 -0
  122. autogen/agentchat/group/multi_agent_chat.py +237 -0
  123. autogen/agentchat/group/on_condition.py +58 -0
  124. autogen/agentchat/group/on_context_condition.py +54 -0
  125. autogen/agentchat/group/patterns/__init__.py +18 -0
  126. autogen/agentchat/group/patterns/auto.py +159 -0
  127. autogen/agentchat/group/patterns/manual.py +176 -0
  128. autogen/agentchat/group/patterns/pattern.py +288 -0
  129. autogen/agentchat/group/patterns/random.py +106 -0
  130. autogen/agentchat/group/patterns/round_robin.py +117 -0
  131. autogen/agentchat/group/reply_result.py +26 -0
  132. autogen/agentchat/group/speaker_selection_result.py +41 -0
  133. autogen/agentchat/group/targets/__init__.py +4 -0
  134. autogen/agentchat/group/targets/group_chat_target.py +132 -0
  135. autogen/agentchat/group/targets/group_manager_target.py +151 -0
  136. autogen/agentchat/group/targets/transition_target.py +413 -0
  137. autogen/agentchat/group/targets/transition_utils.py +6 -0
  138. autogen/agentchat/groupchat.py +1694 -0
  139. autogen/agentchat/realtime/__init__.py +3 -0
  140. autogen/agentchat/realtime/experimental/__init__.py +20 -0
  141. autogen/agentchat/realtime/experimental/audio_adapters/__init__.py +8 -0
  142. autogen/agentchat/realtime/experimental/audio_adapters/twilio_audio_adapter.py +148 -0
  143. autogen/agentchat/realtime/experimental/audio_adapters/websocket_audio_adapter.py +139 -0
  144. autogen/agentchat/realtime/experimental/audio_observer.py +42 -0
  145. autogen/agentchat/realtime/experimental/clients/__init__.py +15 -0
  146. autogen/agentchat/realtime/experimental/clients/gemini/__init__.py +7 -0
  147. autogen/agentchat/realtime/experimental/clients/gemini/client.py +274 -0
  148. autogen/agentchat/realtime/experimental/clients/oai/__init__.py +8 -0
  149. autogen/agentchat/realtime/experimental/clients/oai/base_client.py +220 -0
  150. autogen/agentchat/realtime/experimental/clients/oai/rtc_client.py +243 -0
  151. autogen/agentchat/realtime/experimental/clients/oai/utils.py +48 -0
  152. autogen/agentchat/realtime/experimental/clients/realtime_client.py +190 -0
  153. autogen/agentchat/realtime/experimental/function_observer.py +85 -0
  154. autogen/agentchat/realtime/experimental/realtime_agent.py +158 -0
  155. autogen/agentchat/realtime/experimental/realtime_events.py +42 -0
  156. autogen/agentchat/realtime/experimental/realtime_observer.py +100 -0
  157. autogen/agentchat/realtime/experimental/realtime_swarm.py +475 -0
  158. autogen/agentchat/realtime/experimental/websockets.py +21 -0
  159. autogen/agentchat/realtime_agent/__init__.py +21 -0
  160. autogen/agentchat/user_proxy_agent.py +111 -0
  161. autogen/agentchat/utils.py +206 -0
  162. autogen/agents/__init__.py +3 -0
  163. autogen/agents/contrib/__init__.py +10 -0
  164. autogen/agents/contrib/time/__init__.py +8 -0
  165. autogen/agents/contrib/time/time_reply_agent.py +73 -0
  166. autogen/agents/contrib/time/time_tool_agent.py +51 -0
  167. autogen/agents/experimental/__init__.py +27 -0
  168. autogen/agents/experimental/deep_research/__init__.py +7 -0
  169. autogen/agents/experimental/deep_research/deep_research.py +52 -0
  170. autogen/agents/experimental/discord/__init__.py +7 -0
  171. autogen/agents/experimental/discord/discord.py +66 -0
  172. autogen/agents/experimental/document_agent/__init__.py +19 -0
  173. autogen/agents/experimental/document_agent/chroma_query_engine.py +316 -0
  174. autogen/agents/experimental/document_agent/docling_doc_ingest_agent.py +118 -0
  175. autogen/agents/experimental/document_agent/document_agent.py +461 -0
  176. autogen/agents/experimental/document_agent/document_conditions.py +50 -0
  177. autogen/agents/experimental/document_agent/document_utils.py +380 -0
  178. autogen/agents/experimental/document_agent/inmemory_query_engine.py +220 -0
  179. autogen/agents/experimental/document_agent/parser_utils.py +130 -0
  180. autogen/agents/experimental/document_agent/url_utils.py +426 -0
  181. autogen/agents/experimental/reasoning/__init__.py +7 -0
  182. autogen/agents/experimental/reasoning/reasoning_agent.py +1178 -0
  183. autogen/agents/experimental/slack/__init__.py +7 -0
  184. autogen/agents/experimental/slack/slack.py +73 -0
  185. autogen/agents/experimental/telegram/__init__.py +7 -0
  186. autogen/agents/experimental/telegram/telegram.py +77 -0
  187. autogen/agents/experimental/websurfer/__init__.py +7 -0
  188. autogen/agents/experimental/websurfer/websurfer.py +62 -0
  189. autogen/agents/experimental/wikipedia/__init__.py +7 -0
  190. autogen/agents/experimental/wikipedia/wikipedia.py +90 -0
  191. autogen/browser_utils.py +309 -0
  192. autogen/cache/__init__.py +10 -0
  193. autogen/cache/abstract_cache_base.py +75 -0
  194. autogen/cache/cache.py +203 -0
  195. autogen/cache/cache_factory.py +88 -0
  196. autogen/cache/cosmos_db_cache.py +144 -0
  197. autogen/cache/disk_cache.py +102 -0
  198. autogen/cache/in_memory_cache.py +58 -0
  199. autogen/cache/redis_cache.py +123 -0
  200. autogen/code_utils.py +596 -0
  201. autogen/coding/__init__.py +22 -0
  202. autogen/coding/base.py +119 -0
  203. autogen/coding/docker_commandline_code_executor.py +268 -0
  204. autogen/coding/factory.py +47 -0
  205. autogen/coding/func_with_reqs.py +202 -0
  206. autogen/coding/jupyter/__init__.py +23 -0
  207. autogen/coding/jupyter/base.py +36 -0
  208. autogen/coding/jupyter/docker_jupyter_server.py +167 -0
  209. autogen/coding/jupyter/embedded_ipython_code_executor.py +182 -0
  210. autogen/coding/jupyter/import_utils.py +82 -0
  211. autogen/coding/jupyter/jupyter_client.py +231 -0
  212. autogen/coding/jupyter/jupyter_code_executor.py +160 -0
  213. autogen/coding/jupyter/local_jupyter_server.py +172 -0
  214. autogen/coding/local_commandline_code_executor.py +405 -0
  215. autogen/coding/markdown_code_extractor.py +45 -0
  216. autogen/coding/utils.py +56 -0
  217. autogen/doc_utils.py +34 -0
  218. autogen/events/__init__.py +7 -0
  219. autogen/events/agent_events.py +1010 -0
  220. autogen/events/base_event.py +99 -0
  221. autogen/events/client_events.py +167 -0
  222. autogen/events/helpers.py +36 -0
  223. autogen/events/print_event.py +46 -0
  224. autogen/exception_utils.py +73 -0
  225. autogen/extensions/__init__.py +5 -0
  226. autogen/fast_depends/__init__.py +16 -0
  227. autogen/fast_depends/_compat.py +80 -0
  228. autogen/fast_depends/core/__init__.py +14 -0
  229. autogen/fast_depends/core/build.py +225 -0
  230. autogen/fast_depends/core/model.py +576 -0
  231. autogen/fast_depends/dependencies/__init__.py +15 -0
  232. autogen/fast_depends/dependencies/model.py +29 -0
  233. autogen/fast_depends/dependencies/provider.py +39 -0
  234. autogen/fast_depends/library/__init__.py +10 -0
  235. autogen/fast_depends/library/model.py +46 -0
  236. autogen/fast_depends/py.typed +6 -0
  237. autogen/fast_depends/schema.py +66 -0
  238. autogen/fast_depends/use.py +280 -0
  239. autogen/fast_depends/utils.py +187 -0
  240. autogen/formatting_utils.py +83 -0
  241. autogen/function_utils.py +13 -0
  242. autogen/graph_utils.py +178 -0
  243. autogen/import_utils.py +526 -0
  244. autogen/interop/__init__.py +22 -0
  245. autogen/interop/crewai/__init__.py +7 -0
  246. autogen/interop/crewai/crewai.py +88 -0
  247. autogen/interop/interoperability.py +71 -0
  248. autogen/interop/interoperable.py +46 -0
  249. autogen/interop/langchain/__init__.py +8 -0
  250. autogen/interop/langchain/langchain_chat_model_factory.py +155 -0
  251. autogen/interop/langchain/langchain_tool.py +82 -0
  252. autogen/interop/litellm/__init__.py +7 -0
  253. autogen/interop/litellm/litellm_config_factory.py +113 -0
  254. autogen/interop/pydantic_ai/__init__.py +7 -0
  255. autogen/interop/pydantic_ai/pydantic_ai.py +168 -0
  256. autogen/interop/registry.py +69 -0
  257. autogen/io/__init__.py +15 -0
  258. autogen/io/base.py +151 -0
  259. autogen/io/console.py +56 -0
  260. autogen/io/processors/__init__.py +12 -0
  261. autogen/io/processors/base.py +21 -0
  262. autogen/io/processors/console_event_processor.py +56 -0
  263. autogen/io/run_response.py +293 -0
  264. autogen/io/thread_io_stream.py +63 -0
  265. autogen/io/websockets.py +213 -0
  266. autogen/json_utils.py +43 -0
  267. autogen/llm_config.py +379 -0
  268. autogen/logger/__init__.py +11 -0
  269. autogen/logger/base_logger.py +128 -0
  270. autogen/logger/file_logger.py +261 -0
  271. autogen/logger/logger_factory.py +42 -0
  272. autogen/logger/logger_utils.py +57 -0
  273. autogen/logger/sqlite_logger.py +523 -0
  274. autogen/math_utils.py +339 -0
  275. autogen/mcp/__init__.py +7 -0
  276. autogen/mcp/mcp_client.py +208 -0
  277. autogen/messages/__init__.py +7 -0
  278. autogen/messages/agent_messages.py +948 -0
  279. autogen/messages/base_message.py +107 -0
  280. autogen/messages/client_messages.py +171 -0
  281. autogen/messages/print_message.py +49 -0
  282. autogen/oai/__init__.py +53 -0
  283. autogen/oai/anthropic.py +714 -0
  284. autogen/oai/bedrock.py +628 -0
  285. autogen/oai/cerebras.py +299 -0
  286. autogen/oai/client.py +1435 -0
  287. autogen/oai/client_utils.py +169 -0
  288. autogen/oai/cohere.py +479 -0
  289. autogen/oai/gemini.py +990 -0
  290. autogen/oai/gemini_types.py +129 -0
  291. autogen/oai/groq.py +305 -0
  292. autogen/oai/mistral.py +303 -0
  293. autogen/oai/oai_models/__init__.py +11 -0
  294. autogen/oai/oai_models/_models.py +16 -0
  295. autogen/oai/oai_models/chat_completion.py +87 -0
  296. autogen/oai/oai_models/chat_completion_audio.py +32 -0
  297. autogen/oai/oai_models/chat_completion_message.py +86 -0
  298. autogen/oai/oai_models/chat_completion_message_tool_call.py +37 -0
  299. autogen/oai/oai_models/chat_completion_token_logprob.py +63 -0
  300. autogen/oai/oai_models/completion_usage.py +60 -0
  301. autogen/oai/ollama.py +643 -0
  302. autogen/oai/openai_utils.py +881 -0
  303. autogen/oai/together.py +370 -0
  304. autogen/retrieve_utils.py +491 -0
  305. autogen/runtime_logging.py +160 -0
  306. autogen/token_count_utils.py +267 -0
  307. autogen/tools/__init__.py +20 -0
  308. autogen/tools/contrib/__init__.py +9 -0
  309. autogen/tools/contrib/time/__init__.py +7 -0
  310. autogen/tools/contrib/time/time.py +41 -0
  311. autogen/tools/dependency_injection.py +254 -0
  312. autogen/tools/experimental/__init__.py +43 -0
  313. autogen/tools/experimental/browser_use/__init__.py +7 -0
  314. autogen/tools/experimental/browser_use/browser_use.py +161 -0
  315. autogen/tools/experimental/crawl4ai/__init__.py +7 -0
  316. autogen/tools/experimental/crawl4ai/crawl4ai.py +153 -0
  317. autogen/tools/experimental/deep_research/__init__.py +7 -0
  318. autogen/tools/experimental/deep_research/deep_research.py +328 -0
  319. autogen/tools/experimental/duckduckgo/__init__.py +7 -0
  320. autogen/tools/experimental/duckduckgo/duckduckgo_search.py +109 -0
  321. autogen/tools/experimental/google/__init__.py +14 -0
  322. autogen/tools/experimental/google/authentication/__init__.py +11 -0
  323. autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
  324. autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
  325. autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
  326. autogen/tools/experimental/google/drive/__init__.py +9 -0
  327. autogen/tools/experimental/google/drive/drive_functions.py +124 -0
  328. autogen/tools/experimental/google/drive/toolkit.py +88 -0
  329. autogen/tools/experimental/google/model.py +17 -0
  330. autogen/tools/experimental/google/toolkit_protocol.py +19 -0
  331. autogen/tools/experimental/google_search/__init__.py +8 -0
  332. autogen/tools/experimental/google_search/google_search.py +93 -0
  333. autogen/tools/experimental/google_search/youtube_search.py +181 -0
  334. autogen/tools/experimental/messageplatform/__init__.py +17 -0
  335. autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
  336. autogen/tools/experimental/messageplatform/discord/discord.py +288 -0
  337. autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
  338. autogen/tools/experimental/messageplatform/slack/slack.py +391 -0
  339. autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
  340. autogen/tools/experimental/messageplatform/telegram/telegram.py +275 -0
  341. autogen/tools/experimental/perplexity/__init__.py +7 -0
  342. autogen/tools/experimental/perplexity/perplexity_search.py +260 -0
  343. autogen/tools/experimental/tavily/__init__.py +7 -0
  344. autogen/tools/experimental/tavily/tavily_search.py +183 -0
  345. autogen/tools/experimental/web_search_preview/__init__.py +7 -0
  346. autogen/tools/experimental/web_search_preview/web_search_preview.py +114 -0
  347. autogen/tools/experimental/wikipedia/__init__.py +7 -0
  348. autogen/tools/experimental/wikipedia/wikipedia.py +287 -0
  349. autogen/tools/function_utils.py +411 -0
  350. autogen/tools/tool.py +187 -0
  351. autogen/tools/toolkit.py +86 -0
  352. autogen/types.py +29 -0
  353. autogen/version.py +7 -0
  354. ag2-0.9.1a1.dist-info/RECORD +0 -6
  355. ag2-0.9.1a1.dist-info/top_level.txt +0 -1
  356. {ag2-0.9.1a1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/LICENSE +0 -0
  357. {ag2-0.9.1a1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/NOTICE.md +0 -0
@@ -0,0 +1,18 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+
6
+ from .auto import AutoPattern
7
+ from .manual import ManualPattern
8
+ from .pattern import DefaultPattern
9
+ from .random import RandomPattern
10
+ from .round_robin import RoundRobinPattern
11
+
12
+ __all__ = [
13
+ "AutoPattern",
14
+ "DefaultPattern",
15
+ "ManualPattern",
16
+ "RandomPattern",
17
+ "RoundRobinPattern",
18
+ ]
@@ -0,0 +1,159 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from typing import TYPE_CHECKING, Any, Callable, Optional, Tuple, Union
6
+
7
+ from ..context_variables import ContextVariables
8
+ from ..targets.group_manager_target import GroupManagerSelectionMessage, GroupManagerTarget
9
+ from ..targets.transition_target import TransitionTarget
10
+ from .pattern import Pattern
11
+
12
+ if TYPE_CHECKING:
13
+ from ...conversable_agent import ConversableAgent
14
+ from ...groupchat import GroupChat, GroupChatManager
15
+ from ..group_tool_executor import GroupToolExecutor
16
+
17
+
18
+ class AutoPattern(Pattern):
19
+ """AutoPattern implements a flexible pattern where agents are selected based on their expertise.
20
+
21
+ In this pattern, a group manager automatically selects the next agent to speak based on the context
22
+ of the conversation and agent descriptions. The after_work is always set to "group_manager" as
23
+ this is the defining characteristic of this pattern.
24
+ """
25
+
26
+ def __init__(
27
+ self,
28
+ initial_agent: "ConversableAgent",
29
+ agents: list["ConversableAgent"],
30
+ user_agent: Optional["ConversableAgent"] = None,
31
+ group_manager_args: Optional[dict[str, Any]] = None,
32
+ context_variables: Optional[ContextVariables] = None,
33
+ selection_message: Optional[GroupManagerSelectionMessage] = None,
34
+ exclude_transit_message: bool = True,
35
+ summary_method: Optional[Union[str, Callable[..., Any]]] = "last_msg",
36
+ ):
37
+ """Initialize the AutoPattern.
38
+
39
+ The after_work is always set to group_manager selection, which is the defining
40
+ characteristic of this pattern. You can customize the selection message used
41
+ by the group manager when selecting the next agent.
42
+
43
+ Args:
44
+ initial_agent: The first agent to speak in the group chat.
45
+ agents: List of all agents participating in the chat.
46
+ user_agent: Optional user proxy agent.
47
+ group_manager_args: Optional arguments for the GroupChatManager.
48
+ context_variables: Initial context variables for the chat.
49
+ selection_message: Custom message to use when the group manager is selecting agents.
50
+ exclude_transit_message: Whether to exclude transit messages from the conversation.
51
+ summary_method: Method for summarizing the conversation.
52
+ """
53
+ # Create the group_manager after_work with the provided selection message
54
+ group_manager_after_work = GroupManagerTarget(selection_message=selection_message)
55
+
56
+ super().__init__(
57
+ initial_agent=initial_agent,
58
+ agents=agents,
59
+ user_agent=user_agent,
60
+ group_manager_args=group_manager_args,
61
+ context_variables=context_variables,
62
+ group_after_work=group_manager_after_work,
63
+ exclude_transit_message=exclude_transit_message,
64
+ summary_method=summary_method,
65
+ )
66
+
67
+ # Store the selection message for potential use
68
+ self.selection_message = selection_message
69
+
70
+ def prepare_group_chat(
71
+ self,
72
+ max_rounds: int,
73
+ messages: Union[list[dict[str, Any]], str],
74
+ ) -> Tuple[
75
+ list["ConversableAgent"],
76
+ list["ConversableAgent"],
77
+ Optional["ConversableAgent"],
78
+ ContextVariables,
79
+ "ConversableAgent",
80
+ TransitionTarget,
81
+ "GroupToolExecutor",
82
+ "GroupChat",
83
+ "GroupChatManager",
84
+ list[dict[str, Any]],
85
+ Any,
86
+ list[str],
87
+ list[Any],
88
+ ]:
89
+ """Prepare the group chat for organic agent selection.
90
+
91
+ Ensures that:
92
+ 1. The group manager has a valid LLM config
93
+ 2. All agents have appropriate descriptions for the group manager to use
94
+
95
+ Args:
96
+ max_rounds: Maximum number of conversation rounds.
97
+ messages: Initial message(s) to start the conversation.
98
+
99
+ Returns:
100
+ Tuple containing all necessary components for the group chat.
101
+ """
102
+ # Validate that group_manager_args has an LLM config which is required for this pattern
103
+ if not self.group_manager_args.get("llm_config", False):
104
+ # Check if any agent has an LLM config we can use
105
+ has_llm_config = any(getattr(agent, "llm_config", False) for agent in self.agents)
106
+
107
+ if not has_llm_config:
108
+ raise ValueError(
109
+ "AutoPattern requires the group_manager_args to include an llm_config, "
110
+ "or at least one agent to have an llm_config"
111
+ )
112
+
113
+ # Check that all agents have descriptions for effective group manager selection
114
+ for agent in self.agents:
115
+ if not hasattr(agent, "description") or not agent.description:
116
+ agent.description = f"Agent {agent.name}"
117
+
118
+ # Use the parent class's implementation to prepare the agents and group chat
119
+ components = super().prepare_group_chat(
120
+ max_rounds=max_rounds,
121
+ messages=messages,
122
+ )
123
+
124
+ # Extract the group_after_work and the rest of the components
125
+ (
126
+ agents,
127
+ wrapped_agents,
128
+ user_agent,
129
+ context_variables,
130
+ initial_agent,
131
+ _,
132
+ tool_executor,
133
+ groupchat,
134
+ manager,
135
+ processed_messages,
136
+ last_agent,
137
+ group_agent_names,
138
+ temp_user_list,
139
+ ) = components
140
+
141
+ # Ensure we're using the group_manager after_work
142
+ group_after_work = self.group_after_work
143
+
144
+ # Return all components with our group_after_work
145
+ return (
146
+ agents,
147
+ wrapped_agents,
148
+ user_agent,
149
+ context_variables,
150
+ initial_agent,
151
+ group_after_work,
152
+ tool_executor,
153
+ groupchat,
154
+ manager,
155
+ processed_messages,
156
+ last_agent,
157
+ group_agent_names,
158
+ temp_user_list,
159
+ )
@@ -0,0 +1,176 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from typing import TYPE_CHECKING, Any, Callable, Optional, Tuple, Union
6
+
7
+ from ..context_variables import ContextVariables
8
+ from ..group_tool_executor import GroupToolExecutor
9
+ from ..targets.transition_target import AskUserTarget, TransitionTarget
10
+ from .pattern import Pattern
11
+
12
+ if TYPE_CHECKING:
13
+ from ...conversable_agent import ConversableAgent
14
+ from ...groupchat import GroupChat, GroupChatManager
15
+
16
+
17
+ class ManualPattern(Pattern):
18
+ """ManualPattern will ask the user to nominate the next agent to speak at each turn."""
19
+
20
+ def __init__(
21
+ self,
22
+ initial_agent: "ConversableAgent",
23
+ agents: list["ConversableAgent"],
24
+ user_agent: Optional["ConversableAgent"] = None,
25
+ group_manager_args: Optional[dict[str, Any]] = None,
26
+ context_variables: Optional[ContextVariables] = None,
27
+ exclude_transit_message: bool = True,
28
+ summary_method: Optional[Union[str, Callable[..., Any]]] = "last_msg",
29
+ ):
30
+ """Initialize the ManualPattern.
31
+
32
+ The after_work is always set to ask_user, which will prompt the user for the next agent
33
+
34
+ Args:
35
+ initial_agent: The first agent to speak in the group chat.
36
+ agents: List of all agents participating in the chat.
37
+ user_agent: Optional user proxy agent.
38
+ group_manager_args: Optional arguments for the GroupChatManager.
39
+ context_variables: Initial context variables for the chat.
40
+ exclude_transit_message: Whether to exclude transit messages from the conversation.
41
+ summary_method: Method for summarizing the conversation.
42
+ """
43
+ # The group after work will be to ask the user
44
+ group_after_work = AskUserTarget()
45
+
46
+ super().__init__(
47
+ initial_agent=initial_agent,
48
+ agents=agents,
49
+ user_agent=user_agent,
50
+ group_manager_args=group_manager_args,
51
+ context_variables=context_variables,
52
+ group_after_work=group_after_work,
53
+ exclude_transit_message=exclude_transit_message,
54
+ summary_method=summary_method,
55
+ )
56
+
57
+ def prepare_group_chat(
58
+ self,
59
+ max_rounds: int,
60
+ messages: Union[list[dict[str, Any]], str],
61
+ ) -> Tuple[
62
+ list["ConversableAgent"],
63
+ list["ConversableAgent"],
64
+ Optional["ConversableAgent"],
65
+ ContextVariables,
66
+ "ConversableAgent",
67
+ TransitionTarget,
68
+ "GroupToolExecutor",
69
+ "GroupChat",
70
+ "GroupChatManager",
71
+ list[dict[str, Any]],
72
+ Any,
73
+ list[str],
74
+ list[Any],
75
+ ]:
76
+ """Prepare the group chat for organic agent selection.
77
+
78
+ Ensures that:
79
+ 1. The group manager has a valid LLM config
80
+ 2. All agents have appropriate descriptions for the group manager to use
81
+
82
+ Args:
83
+ max_rounds: Maximum number of conversation rounds.
84
+ messages: Initial message(s) to start the conversation.
85
+
86
+ Returns:
87
+ Tuple containing all necessary components for the group chat.
88
+ """
89
+ # Use the parent class's implementation to prepare the agents and group chat
90
+ components = super().prepare_group_chat(
91
+ max_rounds=max_rounds,
92
+ messages=messages,
93
+ )
94
+
95
+ # Extract the group_after_work and the rest of the components
96
+ (
97
+ agents,
98
+ wrapped_agents,
99
+ user_agent,
100
+ context_variables,
101
+ initial_agent,
102
+ _,
103
+ tool_executor,
104
+ groupchat,
105
+ manager,
106
+ processed_messages,
107
+ last_agent,
108
+ group_agent_names,
109
+ temp_user_list,
110
+ ) = components
111
+
112
+ # Ensure we're using the group_manager after_work
113
+ group_after_work = self.group_after_work
114
+
115
+ # Set up the allowed speaker transitions to exclude user_agent and GroupToolExecutor
116
+ self._setup_allowed_transitions(groupchat, user_agent, tool_executor)
117
+
118
+ # Return all components with our group_after_work
119
+ return (
120
+ agents,
121
+ wrapped_agents,
122
+ user_agent,
123
+ context_variables,
124
+ initial_agent,
125
+ group_after_work,
126
+ tool_executor,
127
+ groupchat,
128
+ manager,
129
+ processed_messages,
130
+ last_agent,
131
+ group_agent_names,
132
+ temp_user_list,
133
+ )
134
+
135
+ def _setup_allowed_transitions(
136
+ self, groupchat: "GroupChat", user_agent: Optional["ConversableAgent"], tool_executor: "GroupToolExecutor"
137
+ ) -> None:
138
+ """Set up the allowed speaker transitions for the group chat so that when a user selects the next agent the tool executor and user agent don't appear as options.
139
+
140
+ Creates transitions where:
141
+ 1. Any agent can speak after any other agent, including themselves
142
+ 2. The user_agent and GroupToolExecutor are excluded from transitions
143
+
144
+ Args:
145
+ groupchat: The GroupChat instance to configure
146
+ user_agent: The user agent to exclude from transitions
147
+ tool_executor: The GroupToolExecutor to exclude from transitions
148
+ """
149
+ # NOTE: THIS IS NOT WORKING - THE TRANSITIONS ARE NOT BEING KEPT?!
150
+ """
151
+ # Get all agents in the group chat
152
+ all_agents = groupchat.agents
153
+
154
+ # Filter out user_agent and group tool executor
155
+ eligible_agents = []
156
+ for agent in all_agents:
157
+ # Skip user_agent
158
+ if agent == user_agent:
159
+ continue
160
+
161
+ # Skip GroupToolExecutor
162
+ if isinstance(agent, GroupToolExecutor):
163
+ continue
164
+
165
+ eligible_agents.append(agent)
166
+
167
+ # Create a fully connected graph among eligible agents
168
+ # Each agent can be followed by any other eligible agent
169
+ allowed_transitions = {}
170
+ for agent in eligible_agents:
171
+ # For each agent, every other eligible agent can follow
172
+ allowed_transitions[agent] = eligible_agents
173
+
174
+ # Set the transitions in the group chat
175
+ groupchat.allowed_speaker_transitions_dict = allowed_transitions
176
+ """
@@ -0,0 +1,288 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ # Patterns of agent orchestrations
6
+ # Uses the group chat or the agents' handoffs to create a pattern
7
+
8
+ from abc import ABC, abstractmethod
9
+ from typing import TYPE_CHECKING, Any, Callable, Optional, Tuple, Union
10
+
11
+ from ..context_variables import ContextVariables
12
+ from ..group_utils import (
13
+ create_group_manager,
14
+ create_group_transition,
15
+ link_agents_to_group_manager,
16
+ prepare_group_agents,
17
+ process_initial_messages,
18
+ setup_context_variables,
19
+ )
20
+ from ..targets.transition_target import TerminateTarget, TransitionTarget
21
+
22
+ if TYPE_CHECKING:
23
+ from ...agent import Agent
24
+ from ...conversable_agent import ConversableAgent
25
+ from ...groupchat import GroupChat, GroupChatManager
26
+ from ..group_tool_executor import GroupToolExecutor
27
+
28
+
29
+ class Pattern(ABC):
30
+ """Base abstract class for all orchestration patterns.
31
+
32
+ Patterns provide a reusable way to define how agents interact within a group chat.
33
+ Each pattern encapsulates the logic for setting up agents, configuring handoffs,
34
+ and determining the flow of conversation.
35
+
36
+ This is an abstract base class and should not be instantiated directly.
37
+ Use one of the concrete pattern implementations like AutoPattern,
38
+ RoundRobinPattern, RandomPattern, or ManualPattern.
39
+ """
40
+
41
+ def __init__(
42
+ self,
43
+ initial_agent: "ConversableAgent",
44
+ agents: list["ConversableAgent"],
45
+ user_agent: Optional["ConversableAgent"] = None,
46
+ group_manager_args: Optional[dict[str, Any]] = None,
47
+ context_variables: Optional[ContextVariables] = None,
48
+ group_after_work: Optional[TransitionTarget] = None,
49
+ exclude_transit_message: bool = True,
50
+ summary_method: Optional[Union[str, Callable[..., Any]]] = "last_msg",
51
+ ):
52
+ """Initialize the pattern with the required components.
53
+
54
+ Args:
55
+ initial_agent: The first agent to speak in the group chat.
56
+ agents: List of all agents participating in the chat.
57
+ user_agent: Optional user proxy agent.
58
+ group_manager_args: Optional arguments for the GroupChatManager.
59
+ context_variables: Initial context variables for the chat.
60
+ group_after_work: Default after work transition behavior when no specific next agent is determined.
61
+ exclude_transit_message: Whether to exclude transit messages from the conversation.
62
+ summary_method: Method for summarizing the conversation.
63
+ """
64
+ self.initial_agent = initial_agent
65
+ self.agents = agents
66
+ self.user_agent = user_agent
67
+ self.group_manager_args = group_manager_args or {}
68
+ self.context_variables = context_variables or ContextVariables()
69
+ self.group_after_work = group_after_work if group_after_work is not None else TerminateTarget()
70
+ self.exclude_transit_message = exclude_transit_message
71
+ self.summary_method = summary_method
72
+
73
+ @abstractmethod
74
+ def prepare_group_chat(
75
+ self,
76
+ max_rounds: int,
77
+ messages: Union[list[dict[str, Any]], str],
78
+ ) -> Tuple[
79
+ list["ConversableAgent"],
80
+ list["ConversableAgent"],
81
+ Optional["ConversableAgent"],
82
+ ContextVariables,
83
+ "ConversableAgent",
84
+ TransitionTarget,
85
+ "GroupToolExecutor",
86
+ "GroupChat",
87
+ "GroupChatManager",
88
+ list[dict[str, Any]],
89
+ "ConversableAgent",
90
+ list[str],
91
+ list["Agent"],
92
+ ]:
93
+ """Prepare the group chat for orchestration.
94
+
95
+ This is the main method called by initiate_group_chat to set up the pattern.
96
+ Subclasses must implement or extend this method to define pattern-specific behavior.
97
+
98
+ Args:
99
+ max_rounds: Maximum number of conversation rounds.
100
+ messages: Initial message(s) to start the conversation.
101
+
102
+ Returns:
103
+ Tuple containing:
104
+ - List of agents involved in the group chat
105
+ - List of wrapped agents
106
+ - User agent, if applicable
107
+ - Context variables for the group chat
108
+ - Initial agent for the group chat
109
+ - Group-level after work transition for the group chat
110
+ - Tool executor for the group chat
111
+ - GroupChat instance
112
+ - GroupChatManager instance
113
+ - Processed messages
114
+ - Last agent to speak
115
+ - List of group agent names
116
+ - List of temporary user agents
117
+ """
118
+ from ...groupchat import GroupChat
119
+
120
+ # Prepare the agents using the existing helper function
121
+ tool_executor, wrapped_agents = prepare_group_agents(
122
+ self.agents, self.context_variables, self.exclude_transit_message
123
+ )
124
+
125
+ # Process the initial messages BEFORE creating the GroupChat
126
+ # This will create a temporary user agent if needed
127
+ processed_messages, last_agent, group_agent_names, temp_user_list = process_initial_messages(
128
+ messages, self.user_agent, self.agents, wrapped_agents
129
+ )
130
+
131
+ # Create transition function (has enclosed state for initial agent)
132
+ group_transition = create_group_transition(
133
+ initial_agent=self.initial_agent,
134
+ tool_execution=tool_executor,
135
+ group_agent_names=group_agent_names,
136
+ user_agent=self.user_agent,
137
+ group_after_work=self.group_after_work,
138
+ )
139
+
140
+ # Create the group chat - now we use temp_user_list if no user_agent
141
+ groupchat = GroupChat(
142
+ agents=[tool_executor]
143
+ + self.agents
144
+ + wrapped_agents
145
+ + ([self.user_agent] if self.user_agent else temp_user_list),
146
+ messages=[],
147
+ max_round=max_rounds,
148
+ speaker_selection_method=group_transition,
149
+ )
150
+
151
+ # Create the group manager
152
+ manager = create_group_manager(groupchat, self.group_manager_args, self.agents, self.group_after_work)
153
+
154
+ # Point all agent's context variables to this function's context_variables
155
+ setup_context_variables(tool_executor, self.agents, manager, self.context_variables)
156
+
157
+ # Link all agents with the GroupChatManager to allow access to the group chat
158
+ link_agents_to_group_manager(groupchat.agents, manager)
159
+
160
+ return (
161
+ self.agents,
162
+ wrapped_agents,
163
+ self.user_agent,
164
+ self.context_variables,
165
+ self.initial_agent,
166
+ self.group_after_work,
167
+ tool_executor,
168
+ groupchat,
169
+ manager,
170
+ processed_messages,
171
+ last_agent,
172
+ group_agent_names,
173
+ temp_user_list,
174
+ ) # type: ignore[return-value]
175
+
176
+ @classmethod
177
+ def create_default(
178
+ cls,
179
+ initial_agent: "ConversableAgent",
180
+ agents: list["ConversableAgent"],
181
+ user_agent: Optional["ConversableAgent"] = None,
182
+ group_manager_args: Optional[dict[str, Any]] = None,
183
+ context_variables: Optional[ContextVariables] = None,
184
+ exclude_transit_message: bool = True,
185
+ summary_method: Optional[Union[str, Callable[..., Any]]] = "last_msg",
186
+ ) -> "DefaultPattern":
187
+ """Create a default pattern with minimal configuration.
188
+
189
+ This replaces the need for a separate BasePattern class by providing
190
+ a factory method that creates a simple DefaultPattern instance.
191
+
192
+ Args:
193
+ initial_agent: The first agent to speak in the group chat.
194
+ agents: List of all agents participating in the chat.
195
+ user_agent: Optional user proxy agent.
196
+ group_manager_args: Optional arguments for the GroupChatManager.
197
+ context_variables: Initial context variables for the chat.
198
+ exclude_transit_message: Whether to exclude transit messages from the conversation.
199
+ summary_method: Method for summarizing the conversation.
200
+
201
+ Returns:
202
+ A DefaultPattern instance with basic configuration.
203
+ """
204
+ return DefaultPattern(
205
+ initial_agent=initial_agent,
206
+ agents=agents,
207
+ user_agent=user_agent,
208
+ group_manager_args=group_manager_args,
209
+ context_variables=context_variables,
210
+ exclude_transit_message=exclude_transit_message,
211
+ summary_method=summary_method,
212
+ )
213
+
214
+
215
+ class DefaultPattern(Pattern):
216
+ """DefaultPattern implements a minimal pattern for simple agent interactions.
217
+
218
+ This replaces the previous BasePattern and provides a concrete implementation
219
+ of the Pattern abstract base class.
220
+ """
221
+
222
+ def prepare_group_chat(
223
+ self,
224
+ max_rounds: int,
225
+ messages: Union[list[dict[str, Any]], str],
226
+ ) -> Tuple[
227
+ list["ConversableAgent"],
228
+ list["ConversableAgent"],
229
+ Optional["ConversableAgent"],
230
+ ContextVariables,
231
+ "ConversableAgent",
232
+ TransitionTarget,
233
+ "GroupToolExecutor",
234
+ "GroupChat",
235
+ "GroupChatManager",
236
+ list[dict[str, Any]],
237
+ Any,
238
+ list[str],
239
+ list[Any],
240
+ ]:
241
+ """Prepare the group chat with default configuration.
242
+
243
+ This implementation calls the parent class method but ensures that
244
+ the group_after_work in the returned tuple is the pattern's own.
245
+
246
+ Args:
247
+ max_rounds: Maximum number of conversation rounds.
248
+ messages: Initial message(s) to start the conversation.
249
+
250
+ Returns:
251
+ Tuple containing all necessary components for the group chat.
252
+ """
253
+ # Use the parent class's implementation to prepare the agents and group chat
254
+ (
255
+ agents,
256
+ wrapped_agents,
257
+ user_agent,
258
+ context_variables,
259
+ initial_agent,
260
+ _, # Ignore the group_after_work from parent
261
+ tool_executor,
262
+ groupchat,
263
+ manager,
264
+ processed_messages,
265
+ last_agent,
266
+ group_agent_names,
267
+ temp_user_list,
268
+ ) = super().prepare_group_chat(
269
+ max_rounds=max_rounds,
270
+ messages=messages,
271
+ )
272
+
273
+ # Return all components with our group_after_work
274
+ return (
275
+ agents,
276
+ wrapped_agents,
277
+ user_agent,
278
+ context_variables,
279
+ initial_agent,
280
+ self.group_after_work, # Use our own group_after_work
281
+ tool_executor,
282
+ groupchat,
283
+ manager,
284
+ processed_messages,
285
+ last_agent,
286
+ group_agent_names,
287
+ temp_user_list,
288
+ )