ag2 0.9.1a1__py3-none-any.whl → 0.9.2__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 (371) hide show
  1. {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info}/METADATA +272 -75
  2. ag2-0.9.2.dist-info/RECORD +406 -0
  3. {ag2-0.9.1a1.dist-info → ag2-0.9.2.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 +4023 -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 +1013 -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 +179 -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 +382 -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/__main__.py +78 -0
  277. autogen/mcp/mcp_client.py +208 -0
  278. autogen/mcp/mcp_proxy/__init__.py +19 -0
  279. autogen/mcp/mcp_proxy/fastapi_code_generator_helpers.py +63 -0
  280. autogen/mcp/mcp_proxy/mcp_proxy.py +581 -0
  281. autogen/mcp/mcp_proxy/operation_grouping.py +158 -0
  282. autogen/mcp/mcp_proxy/operation_renaming.py +114 -0
  283. autogen/mcp/mcp_proxy/patch_fastapi_code_generator.py +98 -0
  284. autogen/mcp/mcp_proxy/security.py +400 -0
  285. autogen/mcp/mcp_proxy/security_schema_visitor.py +37 -0
  286. autogen/messages/__init__.py +7 -0
  287. autogen/messages/agent_messages.py +948 -0
  288. autogen/messages/base_message.py +107 -0
  289. autogen/messages/client_messages.py +171 -0
  290. autogen/messages/print_message.py +49 -0
  291. autogen/oai/__init__.py +53 -0
  292. autogen/oai/anthropic.py +714 -0
  293. autogen/oai/bedrock.py +628 -0
  294. autogen/oai/cerebras.py +299 -0
  295. autogen/oai/client.py +1444 -0
  296. autogen/oai/client_utils.py +169 -0
  297. autogen/oai/cohere.py +479 -0
  298. autogen/oai/gemini.py +998 -0
  299. autogen/oai/gemini_types.py +155 -0
  300. autogen/oai/groq.py +305 -0
  301. autogen/oai/mistral.py +303 -0
  302. autogen/oai/oai_models/__init__.py +11 -0
  303. autogen/oai/oai_models/_models.py +16 -0
  304. autogen/oai/oai_models/chat_completion.py +87 -0
  305. autogen/oai/oai_models/chat_completion_audio.py +32 -0
  306. autogen/oai/oai_models/chat_completion_message.py +86 -0
  307. autogen/oai/oai_models/chat_completion_message_tool_call.py +37 -0
  308. autogen/oai/oai_models/chat_completion_token_logprob.py +63 -0
  309. autogen/oai/oai_models/completion_usage.py +60 -0
  310. autogen/oai/ollama.py +643 -0
  311. autogen/oai/openai_utils.py +881 -0
  312. autogen/oai/together.py +370 -0
  313. autogen/retrieve_utils.py +491 -0
  314. autogen/runtime_logging.py +160 -0
  315. autogen/token_count_utils.py +267 -0
  316. autogen/tools/__init__.py +20 -0
  317. autogen/tools/contrib/__init__.py +9 -0
  318. autogen/tools/contrib/time/__init__.py +7 -0
  319. autogen/tools/contrib/time/time.py +41 -0
  320. autogen/tools/dependency_injection.py +254 -0
  321. autogen/tools/experimental/__init__.py +48 -0
  322. autogen/tools/experimental/browser_use/__init__.py +7 -0
  323. autogen/tools/experimental/browser_use/browser_use.py +161 -0
  324. autogen/tools/experimental/crawl4ai/__init__.py +7 -0
  325. autogen/tools/experimental/crawl4ai/crawl4ai.py +153 -0
  326. autogen/tools/experimental/deep_research/__init__.py +7 -0
  327. autogen/tools/experimental/deep_research/deep_research.py +328 -0
  328. autogen/tools/experimental/duckduckgo/__init__.py +7 -0
  329. autogen/tools/experimental/duckduckgo/duckduckgo_search.py +109 -0
  330. autogen/tools/experimental/google/__init__.py +14 -0
  331. autogen/tools/experimental/google/authentication/__init__.py +11 -0
  332. autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
  333. autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
  334. autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
  335. autogen/tools/experimental/google/drive/__init__.py +9 -0
  336. autogen/tools/experimental/google/drive/drive_functions.py +124 -0
  337. autogen/tools/experimental/google/drive/toolkit.py +88 -0
  338. autogen/tools/experimental/google/model.py +17 -0
  339. autogen/tools/experimental/google/toolkit_protocol.py +19 -0
  340. autogen/tools/experimental/google_search/__init__.py +8 -0
  341. autogen/tools/experimental/google_search/google_search.py +93 -0
  342. autogen/tools/experimental/google_search/youtube_search.py +181 -0
  343. autogen/tools/experimental/messageplatform/__init__.py +17 -0
  344. autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
  345. autogen/tools/experimental/messageplatform/discord/discord.py +288 -0
  346. autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
  347. autogen/tools/experimental/messageplatform/slack/slack.py +391 -0
  348. autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
  349. autogen/tools/experimental/messageplatform/telegram/telegram.py +275 -0
  350. autogen/tools/experimental/perplexity/__init__.py +7 -0
  351. autogen/tools/experimental/perplexity/perplexity_search.py +260 -0
  352. autogen/tools/experimental/reliable/__init__.py +10 -0
  353. autogen/tools/experimental/reliable/reliable.py +1316 -0
  354. autogen/tools/experimental/tavily/__init__.py +7 -0
  355. autogen/tools/experimental/tavily/tavily_search.py +183 -0
  356. autogen/tools/experimental/web_search_preview/__init__.py +7 -0
  357. autogen/tools/experimental/web_search_preview/web_search_preview.py +114 -0
  358. autogen/tools/experimental/wikipedia/__init__.py +7 -0
  359. autogen/tools/experimental/wikipedia/wikipedia.py +287 -0
  360. autogen/tools/function_utils.py +411 -0
  361. autogen/tools/tool.py +187 -0
  362. autogen/tools/toolkit.py +86 -0
  363. autogen/types.py +29 -0
  364. autogen/version.py +7 -0
  365. templates/client_template/main.jinja2 +69 -0
  366. templates/config_template/config.jinja2 +7 -0
  367. templates/main.jinja2 +61 -0
  368. ag2-0.9.1a1.dist-info/RECORD +0 -6
  369. ag2-0.9.1a1.dist-info/top_level.txt +0 -1
  370. {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info/licenses}/LICENSE +0 -0
  371. {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info/licenses}/NOTICE.md +0 -0
@@ -0,0 +1,106 @@
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, Optional, Tuple, Union
6
+
7
+ from ..context_variables import ContextVariables
8
+ from ..targets.transition_target import RandomAgentTarget, TransitionTarget
9
+ from .pattern import Pattern
10
+
11
+ if TYPE_CHECKING:
12
+ from ...conversable_agent import ConversableAgent
13
+ from ...groupchat import GroupChat, GroupChatManager
14
+ from ..group_tool_executor import GroupToolExecutor
15
+
16
+
17
+ class RandomPattern(Pattern):
18
+ """RandomPattern implements a random agent selection process."""
19
+
20
+ def _generate_handoffs(
21
+ self,
22
+ initial_agent: "ConversableAgent",
23
+ agents: list["ConversableAgent"],
24
+ user_agent: Optional["ConversableAgent"],
25
+ ) -> None:
26
+ """Generate handoffs between agents in a random fashion."""
27
+ agent_list = agents + ([user_agent] if user_agent is not None else [])
28
+
29
+ for agent in agent_list:
30
+ # Get the list of agents except itself
31
+ other_agents = [a for a in agent_list if a != agent]
32
+
33
+ # Create a random after work
34
+ agent.handoffs.set_after_work(target=RandomAgentTarget(agents=other_agents))
35
+
36
+ def prepare_group_chat(
37
+ self,
38
+ max_rounds: int,
39
+ messages: Union[list[dict[str, Any]], str],
40
+ ) -> Tuple[
41
+ list["ConversableAgent"],
42
+ list["ConversableAgent"],
43
+ Optional["ConversableAgent"],
44
+ ContextVariables,
45
+ "ConversableAgent",
46
+ TransitionTarget,
47
+ "GroupToolExecutor",
48
+ "GroupChat",
49
+ "GroupChatManager",
50
+ list[dict[str, Any]],
51
+ Any,
52
+ list[str],
53
+ list[Any],
54
+ ]:
55
+ """Prepare the group chat for organic agent selection.
56
+
57
+ Ensures that:
58
+ 1. The group manager has a valid LLM config
59
+ 2. All agents have appropriate descriptions for the group manager to use
60
+
61
+ Args:
62
+ max_rounds: Maximum number of conversation rounds.
63
+ messages: Initial message(s) to start the conversation.
64
+
65
+ Returns:
66
+ Tuple containing all necessary components for the group chat.
67
+ """
68
+ # Use the parent class's implementation to prepare the agents and group chat
69
+ (
70
+ agents,
71
+ wrapped_agents,
72
+ user_agent,
73
+ context_variables,
74
+ initial_agent,
75
+ group_after_work,
76
+ tool_executor,
77
+ groupchat,
78
+ manager,
79
+ processed_messages,
80
+ last_agent,
81
+ group_agent_names,
82
+ temp_user_list,
83
+ ) = super().prepare_group_chat(
84
+ max_rounds=max_rounds,
85
+ messages=messages,
86
+ )
87
+
88
+ # Create the random handoffs between agents
89
+ self._generate_handoffs(initial_agent=initial_agent, agents=agents, user_agent=user_agent)
90
+
91
+ # Return all components with our group_after_work
92
+ return (
93
+ agents,
94
+ wrapped_agents,
95
+ user_agent,
96
+ context_variables,
97
+ initial_agent,
98
+ group_after_work,
99
+ tool_executor,
100
+ groupchat,
101
+ manager,
102
+ processed_messages,
103
+ last_agent,
104
+ group_agent_names,
105
+ temp_user_list,
106
+ )
@@ -0,0 +1,117 @@
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, Optional, Tuple, Union
6
+
7
+ from ..context_variables import ContextVariables
8
+ from ..targets.transition_target import AgentTarget, TransitionTarget
9
+ from .pattern import Pattern
10
+
11
+ if TYPE_CHECKING:
12
+ from ...conversable_agent import ConversableAgent
13
+ from ...groupchat import GroupChat, GroupChatManager
14
+ from ..group_tool_executor import GroupToolExecutor
15
+
16
+
17
+ class RoundRobinPattern(Pattern):
18
+ """RoundRobinPattern implements a round robin with handoffs between agents."""
19
+
20
+ def _generate_handoffs(
21
+ self,
22
+ initial_agent: "ConversableAgent",
23
+ agents: list["ConversableAgent"],
24
+ user_agent: Optional["ConversableAgent"],
25
+ ) -> None:
26
+ """Generate handoffs between agents in a round-robin fashion."""
27
+ # Create a list of the agents and the user_agent but put the initial_agent first
28
+ agent_list = [initial_agent]
29
+
30
+ # Add the rest of the agents, excluding the initial_agent and user_agent
31
+ for agent in agents:
32
+ if agent != initial_agent and (user_agent is None or agent != user_agent):
33
+ agent_list.append(agent)
34
+
35
+ # Add the user_agent last if it exists
36
+ if user_agent is not None:
37
+ agent_list.append(user_agent)
38
+
39
+ # Create handoffs in a round-robin fashion
40
+ for i, agent in enumerate(agent_list):
41
+ # Last agent hands off to the first agent
42
+ # Otherwise agent hands off to the next one
43
+ handoff_target = agent_list[0] if i == len(agent_list) - 1 else agent_list[i + 1]
44
+
45
+ agent.handoffs.set_after_work(target=AgentTarget(agent=handoff_target))
46
+
47
+ def prepare_group_chat(
48
+ self,
49
+ max_rounds: int,
50
+ messages: Union[list[dict[str, Any]], str],
51
+ ) -> Tuple[
52
+ list["ConversableAgent"],
53
+ list["ConversableAgent"],
54
+ Optional["ConversableAgent"],
55
+ ContextVariables,
56
+ "ConversableAgent",
57
+ TransitionTarget,
58
+ "GroupToolExecutor",
59
+ "GroupChat",
60
+ "GroupChatManager",
61
+ list[dict[str, Any]],
62
+ Any,
63
+ list[str],
64
+ list[Any],
65
+ ]:
66
+ """Prepare the group chat for organic agent selection.
67
+
68
+ Ensures that:
69
+ 1. The group manager has a valid LLM config
70
+ 2. All agents have appropriate descriptions for the group manager to use
71
+
72
+ Args:
73
+ max_rounds: Maximum number of conversation rounds.
74
+ messages: Initial message(s) to start the conversation.
75
+
76
+ Returns:
77
+ Tuple containing all necessary components for the group chat.
78
+ """
79
+ # Use the parent class's implementation to prepare the agents and group chat
80
+ (
81
+ agents,
82
+ wrapped_agents,
83
+ user_agent,
84
+ context_variables,
85
+ initial_agent,
86
+ group_after_work,
87
+ tool_executor,
88
+ groupchat,
89
+ manager,
90
+ processed_messages,
91
+ last_agent,
92
+ group_agent_names,
93
+ temp_user_list,
94
+ ) = super().prepare_group_chat(
95
+ max_rounds=max_rounds,
96
+ messages=messages,
97
+ )
98
+
99
+ # Create the handoffs between agents
100
+ self._generate_handoffs(initial_agent=initial_agent, agents=agents, user_agent=user_agent)
101
+
102
+ # Return all components with our group_after_work
103
+ return (
104
+ agents,
105
+ wrapped_agents,
106
+ user_agent,
107
+ context_variables,
108
+ initial_agent,
109
+ group_after_work,
110
+ tool_executor,
111
+ groupchat,
112
+ manager,
113
+ processed_messages,
114
+ last_agent,
115
+ group_agent_names,
116
+ temp_user_list,
117
+ )
@@ -0,0 +1,26 @@
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
+ __all__ = ["ReplyResult"]
7
+
8
+
9
+ from typing import Optional
10
+
11
+ from pydantic import BaseModel
12
+
13
+ from .context_variables import ContextVariables
14
+ from .targets.transition_target import TransitionTarget
15
+
16
+
17
+ class ReplyResult(BaseModel):
18
+ """Result of a tool call that is used to provide the return message and the target to transition to."""
19
+
20
+ message: str
21
+ target: Optional[TransitionTarget] = None
22
+ context_variables: Optional[ContextVariables] = None
23
+
24
+ def __str__(self) -> str:
25
+ """The string representation for ReplyResult will be just the message."""
26
+ return self.message
@@ -0,0 +1,41 @@
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, Optional, Union
6
+
7
+ from pydantic import BaseModel
8
+
9
+ from ..agent import Agent
10
+
11
+ if TYPE_CHECKING:
12
+ # Avoid circular import
13
+ from ..groupchat import GroupChat
14
+
15
+
16
+ class SpeakerSelectionResult(BaseModel):
17
+ """Represents a speaker selection result that will be returned to GroupChat._prepare_and_select_agents to determine the next speaker.
18
+
19
+ This class can return an Agent, a None to end the conversation, or a string for a speaker selection method.
20
+ """
21
+
22
+ terminate: Optional[bool] = None
23
+ agent_name: Optional[str] = None
24
+ speaker_selection_method: Optional[str] = None
25
+
26
+ def get_speaker_selection_result(self, groupchat: "GroupChat") -> Optional[Union[Agent, str]]:
27
+ """Get the speaker selection result. If None, the conversation will end."""
28
+ if self.agent_name is not None:
29
+ # Find the agent by name in the groupchat
30
+ for agent in groupchat.agents:
31
+ if agent.name == self.agent_name:
32
+ return agent
33
+ raise ValueError(f"Agent '{self.agent_name}' not found in groupchat.")
34
+ elif self.speaker_selection_method is not None:
35
+ return self.speaker_selection_method
36
+ elif self.terminate is not None and self.terminate:
37
+ return None
38
+ else:
39
+ raise ValueError(
40
+ "Unable to establish speaker selection result. No terminate, agent, or speaker selection method provided."
41
+ )
@@ -0,0 +1,4 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
@@ -0,0 +1,132 @@
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, Optional, Union
6
+
7
+ from pydantic import BaseModel
8
+
9
+ from ....doc_utils import export_module
10
+ from ...agent import Agent
11
+ from ..speaker_selection_result import SpeakerSelectionResult
12
+ from .transition_target import AgentTarget, TransitionTarget
13
+ from .transition_utils import __AGENT_WRAPPER_PREFIX__
14
+
15
+ if TYPE_CHECKING:
16
+ from ...conversable_agent import ConversableAgent
17
+ from ...groupchat import GroupChat
18
+ from ..patterns.pattern import Pattern
19
+
20
+
21
+ __all__ = ["GroupChatConfig", "GroupChatTarget"]
22
+
23
+
24
+ @export_module("autogen.agentchat.group")
25
+ class GroupChatConfig(BaseModel):
26
+ """Configuration for a group chat transition target.
27
+
28
+ Note: If context_variables are not passed in, the outer context variables will be passed in"""
29
+
30
+ pattern: "Pattern"
31
+ messages: Union[list[dict[str, Any]], str]
32
+ max_rounds: int = 20
33
+
34
+
35
+ @export_module("autogen.agentchat.group")
36
+ class GroupChatTarget(TransitionTarget):
37
+ """Target that represents a group chat."""
38
+
39
+ group_chat_config: GroupChatConfig
40
+
41
+ def can_resolve_for_speaker_selection(self) -> bool:
42
+ """Check if the target can resolve for speaker selection. For GroupChatTarget the chat must be encapsulated into an agent."""
43
+ return False
44
+
45
+ def resolve(
46
+ self,
47
+ groupchat: "GroupChat",
48
+ current_agent: "ConversableAgent",
49
+ user_agent: Optional["ConversableAgent"],
50
+ ) -> SpeakerSelectionResult:
51
+ """Resolve to the nested chat configuration."""
52
+ raise NotImplementedError(
53
+ "GroupChatTarget does not support the resolve method. An agent should be used to encapsulate this nested chat and then the target changed to an AgentTarget."
54
+ )
55
+
56
+ def display_name(self) -> str:
57
+ """Get the display name for the target."""
58
+ return "a group chat"
59
+
60
+ def normalized_name(self) -> str:
61
+ """Get a normalized name for the target that has no spaces, used for function calling."""
62
+ return "group_chat"
63
+
64
+ def __str__(self) -> str:
65
+ """String representation for AgentTarget, can be shown as a function call message."""
66
+ return "Transfer to group chat"
67
+
68
+ def needs_agent_wrapper(self) -> bool:
69
+ """Check if the target needs to be wrapped in an agent. GroupChatTarget must be wrapped in an agent."""
70
+ return True
71
+
72
+ def create_wrapper_agent(self, parent_agent: "ConversableAgent", index: int) -> "ConversableAgent":
73
+ """Create a wrapper agent for the group chat."""
74
+ from autogen.agentchat import initiate_group_chat
75
+
76
+ from ...conversable_agent import ConversableAgent # to avoid circular import
77
+
78
+ # Create the wrapper agent with a name that identifies it as a wrapped group chat
79
+ group_chat_agent = ConversableAgent(
80
+ name=f"{__AGENT_WRAPPER_PREFIX__}group_{parent_agent.name}_{index + 1}",
81
+ # Copy LLM config from parent agent to ensure it can generate replies if needed
82
+ llm_config=parent_agent.llm_config,
83
+ )
84
+
85
+ # Store the config directly on the agent
86
+ group_chat_agent._group_chat_config = self.group_chat_config # type: ignore[attr-defined]
87
+
88
+ # Define the reply function that will run the group chat
89
+ def group_chat_reply(
90
+ agent: "ConversableAgent",
91
+ messages: Optional[list[dict[str, Any]]] = None,
92
+ sender: Optional["Agent"] = None,
93
+ config: Optional[Any] = None,
94
+ ) -> tuple[bool, Optional[dict[str, Any]]]:
95
+ """Run the inner group chat and return its results as a reply."""
96
+ # Get the configuration stored directly on the agent
97
+ group_config = agent._group_chat_config # type: ignore[attr-defined]
98
+
99
+ # Pull through the second last message from the outer chat (the last message will be the handoff message)
100
+ # This may need work to make sure we get the right message(s) from the outer chat
101
+ message = (
102
+ messages[-2]["content"]
103
+ if messages and len(messages) >= 2 and "content" in messages[-2]
104
+ else "No message to pass through."
105
+ )
106
+
107
+ try:
108
+ # Run the group chat with direct agent references from the config
109
+ result, _, _ = initiate_group_chat(
110
+ pattern=group_config.pattern,
111
+ messages=message,
112
+ max_rounds=group_config.max_rounds,
113
+ )
114
+
115
+ # Return the summary from the chat result summary
116
+ return True, {"content": result.summary}
117
+
118
+ except Exception as e:
119
+ # Handle any errors during execution
120
+ return True, {"content": f"Error running group chat: {str(e)}"}
121
+
122
+ # Register the reply function with the wrapper agent
123
+ group_chat_agent.register_reply(
124
+ trigger=[ConversableAgent, None],
125
+ reply_func=group_chat_reply,
126
+ remove_other_reply_funcs=True, # Use only this reply function
127
+ )
128
+
129
+ # After the group chat completes, transition back to the parent agent
130
+ group_chat_agent.handoffs.set_after_work(AgentTarget(parent_agent))
131
+
132
+ return group_chat_agent
@@ -0,0 +1,151 @@
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, Optional, Type, Union
6
+
7
+ from pydantic import BaseModel, field_validator
8
+
9
+ from ....doc_utils import export_module
10
+ from ..context_str import ContextStr
11
+ from ..group_tool_executor import GroupToolExecutor
12
+ from ..speaker_selection_result import SpeakerSelectionResult
13
+ from .transition_target import TransitionTarget
14
+ from .transition_utils import __AGENT_WRAPPER_PREFIX__
15
+
16
+ if TYPE_CHECKING:
17
+ # Avoid circular import
18
+ from ...conversable_agent import ConversableAgent
19
+ from ...groupchat import GroupChat
20
+
21
+ __all__ = ["GroupManagerTarget"]
22
+
23
+
24
+ def prepare_groupchat_auto_speaker(
25
+ groupchat: "GroupChat",
26
+ last_group_agent: "ConversableAgent",
27
+ group_chat_manager_selection_msg: Optional[Any],
28
+ ) -> None:
29
+ """Prepare the group chat for auto speaker selection, includes updating or restore the groupchat speaker selection message.
30
+
31
+ Tool Executor and wrapped agents will be removed from the available agents list.
32
+
33
+ Args:
34
+ groupchat (GroupChat): GroupChat instance.
35
+ last_group_agent ("ConversableAgent"): The last group agent for which the LLM config is used
36
+ group_chat_manager_selection_msg (GroupManagerSelectionMessage): Optional message to use for the agent selection (in internal group chat).
37
+ """
38
+ from ...groupchat import SELECT_SPEAKER_PROMPT_TEMPLATE
39
+
40
+ def substitute_agentlist(template: str) -> str:
41
+ # Run through group chat's string substitution first for {agentlist}
42
+ # We need to do this so that the next substitution doesn't fail with agentlist
43
+ # and we can remove the tool executor and wrapped chats from the available agents list
44
+ agent_list = [
45
+ agent
46
+ for agent in groupchat.agents
47
+ if not isinstance(agent, GroupToolExecutor) and not agent.name.startswith(__AGENT_WRAPPER_PREFIX__)
48
+ ]
49
+
50
+ groupchat.select_speaker_prompt_template = template
51
+ return groupchat.select_speaker_prompt(agent_list)
52
+
53
+ # Use the default speaker selection prompt if one is not specified, otherwise use the specified one
54
+ groupchat.select_speaker_prompt_template = substitute_agentlist(
55
+ SELECT_SPEAKER_PROMPT_TEMPLATE
56
+ if group_chat_manager_selection_msg is None
57
+ else group_chat_manager_selection_msg.get_message(last_group_agent)
58
+ )
59
+
60
+
61
+ # GroupManagerSelectionMessage protocol and implementations
62
+ @export_module("autogen.agentchat.group")
63
+ class GroupManagerSelectionMessage(BaseModel):
64
+ """Base class for all GroupManager selection message types."""
65
+
66
+ def get_message(self, agent: "ConversableAgent") -> str:
67
+ """Get the formatted message."""
68
+ raise NotImplementedError("Requires subclasses to implement.")
69
+
70
+
71
+ @export_module("autogen.agentchat.group")
72
+ class GroupManagerSelectionMessageString(GroupManagerSelectionMessage):
73
+ """Selection message that uses a plain string template."""
74
+
75
+ message: str
76
+
77
+ def get_message(self, agent: "ConversableAgent") -> str:
78
+ """Get the message string."""
79
+ return self.message
80
+
81
+
82
+ @export_module("autogen.agentchat.group")
83
+ class GroupManagerSelectionMessageContextStr(GroupManagerSelectionMessage):
84
+ """Selection message that uses a ContextStr template."""
85
+
86
+ context_str_template: str
87
+
88
+ # We will replace {agentlist} with another term and return it later for use with the internal group chat auto speaker selection
89
+ # Otherwise our format will fail
90
+ @field_validator("context_str_template", mode="before")
91
+ def _replace_agentlist_placeholder(cls: Type["GroupManagerSelectionMessageContextStr"], v: Any) -> Union[str, Any]: # noqa: N805
92
+ """Replace {agentlist} placeholder before validation/assignment."""
93
+ if isinstance(v, str):
94
+ if "{agentlist}" in v:
95
+ return v.replace("{agentlist}", "<<agent_list>>") # Perform the replacement
96
+ else:
97
+ return v # If no replacement is needed, return the original value
98
+ return ""
99
+
100
+ def get_message(self, agent: "ConversableAgent") -> str:
101
+ """Get the formatted message with context variables substituted."""
102
+ context_str = ContextStr(template=self.context_str_template)
103
+ format_result = context_str.format(agent.context_variables)
104
+ if format_result is None:
105
+ return ""
106
+
107
+ return format_result.replace(
108
+ "<<agent_list>>", "{agentlist}"
109
+ ) # Restore agentlist so it can be substituted by the internal group chat auto speaker selection
110
+
111
+
112
+ class GroupManagerTarget(TransitionTarget):
113
+ """Target that represents an agent by name."""
114
+
115
+ selection_message: Optional[GroupManagerSelectionMessage] = None
116
+
117
+ def can_resolve_for_speaker_selection(self) -> bool:
118
+ """Check if the target can resolve for speaker selection."""
119
+ return True
120
+
121
+ def resolve(
122
+ self,
123
+ groupchat: "GroupChat",
124
+ current_agent: "ConversableAgent",
125
+ user_agent: Optional["ConversableAgent"],
126
+ ) -> SpeakerSelectionResult:
127
+ """Resolve to the speaker selection for the group."""
128
+ if self.selection_message is not None:
129
+ prepare_groupchat_auto_speaker(groupchat, current_agent, self.selection_message)
130
+
131
+ return SpeakerSelectionResult(speaker_selection_method="auto")
132
+
133
+ def display_name(self) -> str:
134
+ """Get the display name for the target."""
135
+ return "the group manager"
136
+
137
+ def normalized_name(self) -> str:
138
+ """Get a normalized name for the target that has no spaces, used for function calling"""
139
+ return self.display_name()
140
+
141
+ def __str__(self) -> str:
142
+ """String representation for AgentTarget, can be shown as a function call message."""
143
+ return "Transfer to the group manager"
144
+
145
+ def needs_agent_wrapper(self) -> bool:
146
+ """Check if the target needs to be wrapped in an agent."""
147
+ return False
148
+
149
+ def create_wrapper_agent(self, parent_agent: "ConversableAgent", index: int) -> "ConversableAgent":
150
+ """Create a wrapper agent for the target if needed."""
151
+ raise NotImplementedError("GroupManagerTarget does not require wrapping in an agent.")