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,158 @@
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
+ import json
6
+ import logging
7
+ from pathlib import Path
8
+ from typing import Dict, List
9
+
10
+ from autogen.import_utils import optional_import_block
11
+
12
+ with optional_import_block() as result:
13
+ from fastapi_code_generator.parser import OpenAPIParser, Operation
14
+ from fastapi_code_generator.visitor import Visitor
15
+
16
+ from pydantic import BaseModel
17
+
18
+ from autogen.agentchat.conversable_agent import ConversableAgent
19
+ from autogen.llm_config import LLMConfig
20
+
21
+
22
+ class Group(BaseModel):
23
+ name: str
24
+ description: str
25
+
26
+
27
+ class GroupSuggestions(BaseModel):
28
+ groups: list[Group]
29
+
30
+
31
+ class GroupNames(BaseModel):
32
+ groups: list[str]
33
+
34
+
35
+ logger = logging.getLogger(__name__)
36
+
37
+ GROUP_DISCOVERY_MESSAGE = (
38
+ "You are a senior Python engineer. You will be shown a batch of API functions. "
39
+ "These functions are not guaranteed to be related — your task is to analyze them individually and find meaningful groups *within the batch*.\n\n"
40
+ "You should propose a list of group names, and for each group, provide a short description of the kind of functions it contains.\n\n"
41
+ "How to group:\n"
42
+ "- Focus on what the function operates on — e.g., functions that manipulate a board go in 'board_operations', functions related to users in 'user_management', etc.\n"
43
+ "- Do NOT assume the entire batch forms a single group.\n"
44
+ "- Do NOT use generic categories like 'misc', 'utils', or 'general'.\n"
45
+ "- Favor *granular but meaningful* groups. For instance, 'user_profile_handling' and 'user_authentication' could be separate if their purposes are distinct.\n\n"
46
+ "Formatting:\n"
47
+ "- Group names must be short, descriptive, and in snake_case.\n"
48
+ "- Return a list of group names and a 1-2 sentence description of what each group includes.\n"
49
+ )
50
+
51
+
52
+ GROUP_ASSIGNMENT_MESSAGE = (
53
+ "You are a senior Python engineer. You will be given a function description "
54
+ "and a list of possible groups. Choose the most suitable groups for the function.\n"
55
+ "- A function can belong to multiple groups.\n"
56
+ "- The groups should be relevant to the function's purpose and functionality.\n"
57
+ "- You MUST choose a group from the possible groups, you cannot respond with empty grouping any equivalent.\n"
58
+ )
59
+
60
+
61
+ def chunk_list(items: List, size: int) -> List[List]:
62
+ return [items[i : i + size] for i in range(0, len(items), size)]
63
+
64
+
65
+ def discover_groups(operations: List["Operation"], chunk_size: int = 30) -> Dict[str, str]:
66
+ llm_config = LLMConfig.get_current_llm_config().copy()
67
+
68
+ for config in llm_config.config_list:
69
+ config.response_format = GroupSuggestions
70
+
71
+ with llm_config:
72
+ agent = ConversableAgent(name="group_discovery_agent", system_message=GROUP_DISCOVERY_MESSAGE)
73
+ groups = {}
74
+
75
+ for i, chunk in enumerate(chunk_list(operations, chunk_size)):
76
+ func_descriptions = [f"- {op.function_name}: {op.summary} (args: {op.arguments})" for op in chunk]
77
+ message = "Here are some functions:\n" + "\n".join(func_descriptions)
78
+
79
+ response = agent.run(message=message, max_turns=1, user_input=False)
80
+
81
+ for event in response.events:
82
+ if event.type == "text" and event.content.sender == "group_discovery_agent":
83
+ # Naively parse "group_name: description" from text block
84
+ new_groups = GroupSuggestions.model_validate_json(event.content.content).groups
85
+ groups.update(new_groups)
86
+
87
+ logger.warning("Discovered groups: %s", groups)
88
+
89
+ # Remove duplicates
90
+ with llm_config:
91
+ agent = ConversableAgent(name="group_refining_agent", system_message=GROUP_DISCOVERY_MESSAGE)
92
+
93
+ message = (
94
+ "You need to refine the group names and descriptions to ensure they are unique.\n"
95
+ "Here are the groups:\n" + "\n".join([f"- {name}: {desc}" for name, desc in groups.items()])
96
+ )
97
+ response = agent.run(message=message, max_turns=1, user_input=False)
98
+ for event in response.events:
99
+ if event.type == "text" and event.content.sender == "group_refining_agent":
100
+ # Naively parse "group_name: description" from text block
101
+ refined_groups = json.loads(event.content.content)
102
+
103
+ return refined_groups
104
+
105
+
106
+ def assign_operation_to_group(operation: "Operation", groups: dict[str, str]) -> str:
107
+ llm_config = LLMConfig.get_current_llm_config().copy()
108
+
109
+ for config in llm_config.config_list:
110
+ config.response_format = GroupNames
111
+
112
+ with llm_config:
113
+ agent = ConversableAgent(name="group_assignment_agent", system_message=GROUP_ASSIGNMENT_MESSAGE)
114
+
115
+ message = (
116
+ "Function summary:\n"
117
+ f"{operation.summary}\n\n"
118
+ f"Arguments: {operation.arguments}\n\n"
119
+ f"Available groups: {json.dumps(groups)}\n\n"
120
+ "What group should this function go in?"
121
+ )
122
+
123
+ response = agent.run(message=message, max_turns=1, user_input=True)
124
+
125
+ groups = []
126
+ for event in response.events:
127
+ if event.type == "text" and event.content.sender == "group_assignment_agent":
128
+ groups = GroupNames.model_validate_json(event.content.content).groups
129
+
130
+ return groups
131
+
132
+
133
+ def refine_group_names(groups: Dict[str, str]) -> Dict[str, str]:
134
+ # Optional: normalize names, merge similar ones (e.g., using embeddings or string similarity)
135
+ # Placeholder for now:
136
+ return groups
137
+
138
+
139
+ def custom_visitor(parser: "OpenAPIParser", model_path: Path) -> Dict[str, object]:
140
+ operations = sorted(parser.operations.values(), key=lambda op: op.path)
141
+
142
+ # ---- PASS 1: DISCOVER GROUPS ----
143
+ logger.warning("Discovering groups...")
144
+ discovered_groups = discover_groups(operations)
145
+ logger.warning("Discovered groups: %s", discovered_groups)
146
+
147
+ # ---- PASS 2: ASSIGN OPERATIONS TO GROUPS ----
148
+ logger.warning("Assigning operations to groups...")
149
+ for op in operations:
150
+ logger.warning("Assigning operation %s to groups...", op.function_name)
151
+ groups = assign_operation_to_group(op, discovered_groups)
152
+ op.tags = groups
153
+ logger.warning("Assigned groups: %s", groups)
154
+
155
+ return {"operations": operations}
156
+
157
+
158
+ visit: "Visitor" = custom_visitor
@@ -0,0 +1,114 @@
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
+ import logging
6
+ from pathlib import Path
7
+ from typing import Dict, List
8
+
9
+ from autogen.import_utils import optional_import_block
10
+
11
+ with optional_import_block() as result:
12
+ from fastapi_code_generator.parser import OpenAPIParser, Operation
13
+ from fastapi_code_generator.visitor import Visitor
14
+
15
+ from autogen.agentchat.conversable_agent import ConversableAgent
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+ # System prompt to guide the AI agent in naming functions
20
+ SYSTEM_MESSAGE = (
21
+ "You are a helpful expert Python programmer. Your task is to generate a clear, concise, "
22
+ "and descriptive name for a Python function based on a user-provided summary.\n"
23
+ "- Only return the new function name.\n"
24
+ "- The name must be fewer than 64 characters.\n"
25
+ "- It should reflect the purpose of the function as described.\n"
26
+ "- You will be provided with a list of already-taken names, which must not be reused.\n"
27
+ "- The function name should be in snake_case.\n"
28
+ )
29
+
30
+
31
+ def validate_function_name(name: str, taken_names: List[str]) -> str:
32
+ """
33
+ Validate the generated function name against length, format, and uniqueness constraints.
34
+
35
+ Returns:
36
+ 'exit' if the name is valid, or an error message string otherwise.
37
+ """
38
+ if len(name) > 64:
39
+ return "Function name is too long. Please provide a shorter name."
40
+ if not name.islower() or " " in name:
41
+ return "Function name must be in snake_case."
42
+ if name in taken_names:
43
+ return f"Function name is already taken. Please provide a different name. Taken names: {', '.join(taken_names)}"
44
+ return "exit"
45
+
46
+
47
+ def get_new_function_name(operation: "Operation", taken_names: List[str]) -> str:
48
+ """
49
+ Ask an AI agent to generate a new function name for a given OpenAPI operation.
50
+
51
+ Args:
52
+ operation: The OpenAPI operation that needs renaming.
53
+ taken_names: A list of names already used, to avoid collisions.
54
+
55
+ Returns:
56
+ A new, validated function name.
57
+ """
58
+ agent = ConversableAgent(
59
+ name="helpful_agent",
60
+ system_message=SYSTEM_MESSAGE,
61
+ )
62
+
63
+ response = agent.run(
64
+ message=(
65
+ "How would you name this function? \n"
66
+ f"Info:\n"
67
+ f"- old function name: {operation.function_name}\n"
68
+ f"- function summary: {operation.summary}\n"
69
+ f"- function arguments: {operation.arguments}\n"
70
+ ),
71
+ user_input=True,
72
+ )
73
+
74
+ proposed_name = None
75
+
76
+ for event in response.events:
77
+ if event.type == "text" and event.content.sender == "helpful_agent":
78
+ proposed_name = event.content.content.strip()
79
+ elif event.type == "input_request":
80
+ reply = (
81
+ validate_function_name(proposed_name, taken_names)
82
+ if proposed_name
83
+ else "Please provide a function name."
84
+ )
85
+ event.content.respond(reply)
86
+
87
+ logger.warning(f"Renamed operation '{operation.function_name}' to '{response.summary}'.")
88
+ return response.summary
89
+
90
+
91
+ def custom_visitor(parser: "OpenAPIParser", model_path: Path) -> Dict[str, object]:
92
+ """
93
+ Visits and optionally renames operations in the OpenAPI parser.
94
+
95
+ Args:
96
+ parser: An OpenAPIParser instance containing API operations.
97
+ model_path: Path to the model (not used in this implementation).
98
+
99
+ Returns:
100
+ A dictionary containing the updated list of operations.
101
+ """
102
+ operations = sorted(parser.operations.values(), key=lambda op: op.path)
103
+ taken_names = []
104
+
105
+ for op in operations:
106
+ if len(op.function_name) > 64:
107
+ new_name = get_new_function_name(op, taken_names)
108
+ op.function_name = new_name
109
+ taken_names.append(op.function_name)
110
+
111
+ return {"operations": operations}
112
+
113
+
114
+ visit: "Visitor" = custom_visitor
@@ -0,0 +1,98 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ import logging
5
+ import re
6
+ from functools import cached_property, wraps
7
+ from typing import Any
8
+
9
+ from ...import_utils import optional_import_block, require_optional_import
10
+
11
+ with optional_import_block():
12
+ import yaml
13
+
14
+ from autogen.import_utils import optional_import_block
15
+
16
+ with optional_import_block() as result:
17
+ from fastapi_code_generator import __main__ as fastapi_code_generator_main
18
+ from fastapi_code_generator.parser import OpenAPIParser, Operation
19
+
20
+ SUCCESFUL_IMPORT = result.is_successful
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ def patch_parse_schema() -> None:
26
+ org_parse_schema = OpenAPIParser.parse_schema
27
+
28
+ @wraps(org_parse_schema)
29
+ def my_parse_schema(*args: Any, **kwargs: Any) -> Any:
30
+ data_type = org_parse_schema(*args, **kwargs)
31
+ if data_type.reference and data_type.reference.duplicate_name:
32
+ data_type.reference.name = data_type.reference.duplicate_name
33
+ return data_type
34
+
35
+ OpenAPIParser.parse_schema = my_parse_schema
36
+ logger.info("Patched OpenAPIParser.parse_schema")
37
+
38
+
39
+ def snakecase(string: str) -> str:
40
+ string = re.sub(r"[\-\.\s]", "_", str(string))
41
+ if not string:
42
+ return string
43
+ return string[0].lower() + re.sub(r"[A-Z]", lambda matched: "_" + (matched.group(0)), string[1:]).lower()
44
+
45
+
46
+ def patch_function_name_parsing() -> None:
47
+ def function_name(self: Operation) -> str:
48
+ if self.operationId:
49
+ name: str = re.sub(r"[/{=}]", "_", self.operationId)
50
+ else:
51
+ path = re.sub(r"[/{=]", "_", self.snake_case_path).replace("}", "")
52
+ name = f"{self.type}{path}"
53
+
54
+ return snakecase(name) # type: ignore[no-any-return]
55
+
56
+ Operation.function_name = cached_property(function_name)
57
+ Operation.function_name.__set_name__(Operation, "function_name")
58
+
59
+ logger.info("Patched Operation.function_name")
60
+
61
+
62
+ @require_optional_import(["yaml"], "mcp-proxy-gen")
63
+ def patch_generate_code() -> None:
64
+ # Save reference to the original generate_code function
65
+ org_generate_code = fastapi_code_generator_main.generate_code
66
+
67
+ @wraps(org_generate_code)
68
+ def patched_generate_code(*args: Any, **kwargs: Any) -> Any:
69
+ try:
70
+ input_text: str = kwargs["input_text"]
71
+
72
+ json_spec = yaml.safe_load(input_text)
73
+
74
+ schemas_with_dots = sorted(
75
+ [name for name in json_spec.get("components", {}).get("schemas", {}) if "." in name],
76
+ key=len,
77
+ reverse=True, # Sort by length in descending order
78
+ )
79
+
80
+ for schema_name in schemas_with_dots:
81
+ new_schema_name = schema_name.replace(".", "_")
82
+ input_text = input_text.replace(schema_name, new_schema_name)
83
+
84
+ kwargs["input_text"] = input_text
85
+
86
+ except Exception as e:
87
+ print(
88
+ f"Patched fastapi_code_generator.__main__.generate_code raised: {e}, passing untouched arguments to original generate_code"
89
+ )
90
+ logger.info(
91
+ f"Patched fastapi_code_generator.__main__.generate_code raised: {e}, passing untouched arguments to original generate_code"
92
+ )
93
+
94
+ return org_generate_code(*args, **kwargs)
95
+
96
+ fastapi_code_generator_main.generate_code = patched_generate_code
97
+
98
+ logger.info("Patched fastapi_code_generator.__main__.generate_code")