ag2 0.10.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.
Files changed (423) hide show
  1. ag2-0.10.2.dist-info/METADATA +819 -0
  2. ag2-0.10.2.dist-info/RECORD +423 -0
  3. ag2-0.10.2.dist-info/WHEEL +4 -0
  4. ag2-0.10.2.dist-info/licenses/LICENSE +201 -0
  5. ag2-0.10.2.dist-info/licenses/NOTICE.md +19 -0
  6. autogen/__init__.py +88 -0
  7. autogen/_website/__init__.py +3 -0
  8. autogen/_website/generate_api_references.py +426 -0
  9. autogen/_website/generate_mkdocs.py +1216 -0
  10. autogen/_website/notebook_processor.py +475 -0
  11. autogen/_website/process_notebooks.py +656 -0
  12. autogen/_website/utils.py +413 -0
  13. autogen/a2a/__init__.py +36 -0
  14. autogen/a2a/agent_executor.py +86 -0
  15. autogen/a2a/client.py +357 -0
  16. autogen/a2a/errors.py +18 -0
  17. autogen/a2a/httpx_client_factory.py +79 -0
  18. autogen/a2a/server.py +221 -0
  19. autogen/a2a/utils.py +207 -0
  20. autogen/agentchat/__init__.py +47 -0
  21. autogen/agentchat/agent.py +180 -0
  22. autogen/agentchat/assistant_agent.py +86 -0
  23. autogen/agentchat/chat.py +325 -0
  24. autogen/agentchat/contrib/__init__.py +5 -0
  25. autogen/agentchat/contrib/agent_eval/README.md +7 -0
  26. autogen/agentchat/contrib/agent_eval/agent_eval.py +108 -0
  27. autogen/agentchat/contrib/agent_eval/criterion.py +43 -0
  28. autogen/agentchat/contrib/agent_eval/critic_agent.py +44 -0
  29. autogen/agentchat/contrib/agent_eval/quantifier_agent.py +39 -0
  30. autogen/agentchat/contrib/agent_eval/subcritic_agent.py +45 -0
  31. autogen/agentchat/contrib/agent_eval/task.py +42 -0
  32. autogen/agentchat/contrib/agent_optimizer.py +432 -0
  33. autogen/agentchat/contrib/capabilities/__init__.py +5 -0
  34. autogen/agentchat/contrib/capabilities/agent_capability.py +20 -0
  35. autogen/agentchat/contrib/capabilities/generate_images.py +301 -0
  36. autogen/agentchat/contrib/capabilities/teachability.py +393 -0
  37. autogen/agentchat/contrib/capabilities/text_compressors.py +66 -0
  38. autogen/agentchat/contrib/capabilities/tools_capability.py +22 -0
  39. autogen/agentchat/contrib/capabilities/transform_messages.py +93 -0
  40. autogen/agentchat/contrib/capabilities/transforms.py +578 -0
  41. autogen/agentchat/contrib/capabilities/transforms_util.py +122 -0
  42. autogen/agentchat/contrib/capabilities/vision_capability.py +215 -0
  43. autogen/agentchat/contrib/captainagent/__init__.py +9 -0
  44. autogen/agentchat/contrib/captainagent/agent_builder.py +790 -0
  45. autogen/agentchat/contrib/captainagent/captainagent.py +514 -0
  46. autogen/agentchat/contrib/captainagent/tool_retriever.py +334 -0
  47. autogen/agentchat/contrib/captainagent/tools/README.md +44 -0
  48. autogen/agentchat/contrib/captainagent/tools/__init__.py +5 -0
  49. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation.py +40 -0
  50. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis.py +28 -0
  51. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr.py +28 -0
  52. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore.py +28 -0
  53. autogen/agentchat/contrib/captainagent/tools/data_analysis/explore_csv.py +21 -0
  54. autogen/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test.py +30 -0
  55. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download.py +27 -0
  56. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search.py +53 -0
  57. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image.py +53 -0
  58. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text.py +38 -0
  59. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text.py +21 -0
  60. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption.py +34 -0
  61. autogen/agentchat/contrib/captainagent/tools/information_retrieval/image_qa.py +60 -0
  62. autogen/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition.py +61 -0
  63. autogen/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search.py +47 -0
  64. autogen/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables.py +33 -0
  65. autogen/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file.py +21 -0
  66. autogen/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download.py +35 -0
  67. autogen/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter.py +21 -0
  68. autogen/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week.py +18 -0
  69. autogen/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum.py +28 -0
  70. autogen/agentchat/contrib/captainagent/tools/math/calculate_matrix_power.py +31 -0
  71. autogen/agentchat/contrib/captainagent/tools/math/calculate_reflected_point.py +16 -0
  72. autogen/agentchat/contrib/captainagent/tools/math/complex_numbers_product.py +25 -0
  73. autogen/agentchat/contrib/captainagent/tools/math/compute_currency_conversion.py +23 -0
  74. autogen/agentchat/contrib/captainagent/tools/math/count_distinct_permutations.py +27 -0
  75. autogen/agentchat/contrib/captainagent/tools/math/evaluate_expression.py +28 -0
  76. autogen/agentchat/contrib/captainagent/tools/math/find_continuity_point.py +34 -0
  77. autogen/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers.py +39 -0
  78. autogen/agentchat/contrib/captainagent/tools/math/modular_inverse_sum.py +23 -0
  79. autogen/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers.py +36 -0
  80. autogen/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials.py +15 -0
  81. autogen/agentchat/contrib/captainagent/tools/math/sum_of_primes_below.py +15 -0
  82. autogen/agentchat/contrib/captainagent/tools/requirements.txt +10 -0
  83. autogen/agentchat/contrib/captainagent/tools/tool_description.tsv +34 -0
  84. autogen/agentchat/contrib/gpt_assistant_agent.py +526 -0
  85. autogen/agentchat/contrib/graph_rag/__init__.py +9 -0
  86. autogen/agentchat/contrib/graph_rag/document.py +29 -0
  87. autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py +167 -0
  88. autogen/agentchat/contrib/graph_rag/falkor_graph_rag_capability.py +103 -0
  89. autogen/agentchat/contrib/graph_rag/graph_query_engine.py +53 -0
  90. autogen/agentchat/contrib/graph_rag/graph_rag_capability.py +63 -0
  91. autogen/agentchat/contrib/graph_rag/neo4j_graph_query_engine.py +263 -0
  92. autogen/agentchat/contrib/graph_rag/neo4j_graph_rag_capability.py +83 -0
  93. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_query_engine.py +210 -0
  94. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_rag_capability.py +93 -0
  95. autogen/agentchat/contrib/img_utils.py +397 -0
  96. autogen/agentchat/contrib/llamaindex_conversable_agent.py +117 -0
  97. autogen/agentchat/contrib/llava_agent.py +189 -0
  98. autogen/agentchat/contrib/math_user_proxy_agent.py +464 -0
  99. autogen/agentchat/contrib/multimodal_conversable_agent.py +125 -0
  100. autogen/agentchat/contrib/qdrant_retrieve_user_proxy_agent.py +325 -0
  101. autogen/agentchat/contrib/rag/__init__.py +10 -0
  102. autogen/agentchat/contrib/rag/chromadb_query_engine.py +268 -0
  103. autogen/agentchat/contrib/rag/llamaindex_query_engine.py +195 -0
  104. autogen/agentchat/contrib/rag/mongodb_query_engine.py +319 -0
  105. autogen/agentchat/contrib/rag/query_engine.py +76 -0
  106. autogen/agentchat/contrib/retrieve_assistant_agent.py +59 -0
  107. autogen/agentchat/contrib/retrieve_user_proxy_agent.py +704 -0
  108. autogen/agentchat/contrib/society_of_mind_agent.py +200 -0
  109. autogen/agentchat/contrib/swarm_agent.py +1404 -0
  110. autogen/agentchat/contrib/text_analyzer_agent.py +79 -0
  111. autogen/agentchat/contrib/vectordb/__init__.py +5 -0
  112. autogen/agentchat/contrib/vectordb/base.py +224 -0
  113. autogen/agentchat/contrib/vectordb/chromadb.py +316 -0
  114. autogen/agentchat/contrib/vectordb/couchbase.py +405 -0
  115. autogen/agentchat/contrib/vectordb/mongodb.py +551 -0
  116. autogen/agentchat/contrib/vectordb/pgvectordb.py +927 -0
  117. autogen/agentchat/contrib/vectordb/qdrant.py +320 -0
  118. autogen/agentchat/contrib/vectordb/utils.py +126 -0
  119. autogen/agentchat/contrib/web_surfer.py +304 -0
  120. autogen/agentchat/conversable_agent.py +4307 -0
  121. autogen/agentchat/group/__init__.py +67 -0
  122. autogen/agentchat/group/available_condition.py +91 -0
  123. autogen/agentchat/group/context_condition.py +77 -0
  124. autogen/agentchat/group/context_expression.py +238 -0
  125. autogen/agentchat/group/context_str.py +39 -0
  126. autogen/agentchat/group/context_variables.py +182 -0
  127. autogen/agentchat/group/events/transition_events.py +111 -0
  128. autogen/agentchat/group/group_tool_executor.py +324 -0
  129. autogen/agentchat/group/group_utils.py +659 -0
  130. autogen/agentchat/group/guardrails.py +179 -0
  131. autogen/agentchat/group/handoffs.py +303 -0
  132. autogen/agentchat/group/llm_condition.py +93 -0
  133. autogen/agentchat/group/multi_agent_chat.py +291 -0
  134. autogen/agentchat/group/on_condition.py +55 -0
  135. autogen/agentchat/group/on_context_condition.py +51 -0
  136. autogen/agentchat/group/patterns/__init__.py +18 -0
  137. autogen/agentchat/group/patterns/auto.py +160 -0
  138. autogen/agentchat/group/patterns/manual.py +177 -0
  139. autogen/agentchat/group/patterns/pattern.py +295 -0
  140. autogen/agentchat/group/patterns/random.py +106 -0
  141. autogen/agentchat/group/patterns/round_robin.py +117 -0
  142. autogen/agentchat/group/reply_result.py +24 -0
  143. autogen/agentchat/group/safeguards/__init__.py +21 -0
  144. autogen/agentchat/group/safeguards/api.py +241 -0
  145. autogen/agentchat/group/safeguards/enforcer.py +1158 -0
  146. autogen/agentchat/group/safeguards/events.py +140 -0
  147. autogen/agentchat/group/safeguards/validator.py +435 -0
  148. autogen/agentchat/group/speaker_selection_result.py +41 -0
  149. autogen/agentchat/group/targets/__init__.py +4 -0
  150. autogen/agentchat/group/targets/function_target.py +245 -0
  151. autogen/agentchat/group/targets/group_chat_target.py +133 -0
  152. autogen/agentchat/group/targets/group_manager_target.py +151 -0
  153. autogen/agentchat/group/targets/transition_target.py +424 -0
  154. autogen/agentchat/group/targets/transition_utils.py +6 -0
  155. autogen/agentchat/groupchat.py +1832 -0
  156. autogen/agentchat/realtime/__init__.py +3 -0
  157. autogen/agentchat/realtime/experimental/__init__.py +20 -0
  158. autogen/agentchat/realtime/experimental/audio_adapters/__init__.py +8 -0
  159. autogen/agentchat/realtime/experimental/audio_adapters/twilio_audio_adapter.py +148 -0
  160. autogen/agentchat/realtime/experimental/audio_adapters/websocket_audio_adapter.py +139 -0
  161. autogen/agentchat/realtime/experimental/audio_observer.py +42 -0
  162. autogen/agentchat/realtime/experimental/clients/__init__.py +15 -0
  163. autogen/agentchat/realtime/experimental/clients/gemini/__init__.py +7 -0
  164. autogen/agentchat/realtime/experimental/clients/gemini/client.py +274 -0
  165. autogen/agentchat/realtime/experimental/clients/oai/__init__.py +8 -0
  166. autogen/agentchat/realtime/experimental/clients/oai/base_client.py +220 -0
  167. autogen/agentchat/realtime/experimental/clients/oai/rtc_client.py +243 -0
  168. autogen/agentchat/realtime/experimental/clients/oai/utils.py +48 -0
  169. autogen/agentchat/realtime/experimental/clients/realtime_client.py +191 -0
  170. autogen/agentchat/realtime/experimental/function_observer.py +84 -0
  171. autogen/agentchat/realtime/experimental/realtime_agent.py +158 -0
  172. autogen/agentchat/realtime/experimental/realtime_events.py +42 -0
  173. autogen/agentchat/realtime/experimental/realtime_observer.py +100 -0
  174. autogen/agentchat/realtime/experimental/realtime_swarm.py +533 -0
  175. autogen/agentchat/realtime/experimental/websockets.py +21 -0
  176. autogen/agentchat/realtime_agent/__init__.py +21 -0
  177. autogen/agentchat/user_proxy_agent.py +114 -0
  178. autogen/agentchat/utils.py +206 -0
  179. autogen/agents/__init__.py +3 -0
  180. autogen/agents/contrib/__init__.py +10 -0
  181. autogen/agents/contrib/time/__init__.py +8 -0
  182. autogen/agents/contrib/time/time_reply_agent.py +74 -0
  183. autogen/agents/contrib/time/time_tool_agent.py +52 -0
  184. autogen/agents/experimental/__init__.py +27 -0
  185. autogen/agents/experimental/deep_research/__init__.py +7 -0
  186. autogen/agents/experimental/deep_research/deep_research.py +52 -0
  187. autogen/agents/experimental/discord/__init__.py +7 -0
  188. autogen/agents/experimental/discord/discord.py +66 -0
  189. autogen/agents/experimental/document_agent/__init__.py +19 -0
  190. autogen/agents/experimental/document_agent/chroma_query_engine.py +301 -0
  191. autogen/agents/experimental/document_agent/docling_doc_ingest_agent.py +113 -0
  192. autogen/agents/experimental/document_agent/document_agent.py +643 -0
  193. autogen/agents/experimental/document_agent/document_conditions.py +50 -0
  194. autogen/agents/experimental/document_agent/document_utils.py +376 -0
  195. autogen/agents/experimental/document_agent/inmemory_query_engine.py +214 -0
  196. autogen/agents/experimental/document_agent/parser_utils.py +134 -0
  197. autogen/agents/experimental/document_agent/url_utils.py +417 -0
  198. autogen/agents/experimental/reasoning/__init__.py +7 -0
  199. autogen/agents/experimental/reasoning/reasoning_agent.py +1178 -0
  200. autogen/agents/experimental/slack/__init__.py +7 -0
  201. autogen/agents/experimental/slack/slack.py +73 -0
  202. autogen/agents/experimental/telegram/__init__.py +7 -0
  203. autogen/agents/experimental/telegram/telegram.py +76 -0
  204. autogen/agents/experimental/websurfer/__init__.py +7 -0
  205. autogen/agents/experimental/websurfer/websurfer.py +70 -0
  206. autogen/agents/experimental/wikipedia/__init__.py +7 -0
  207. autogen/agents/experimental/wikipedia/wikipedia.py +88 -0
  208. autogen/browser_utils.py +309 -0
  209. autogen/cache/__init__.py +10 -0
  210. autogen/cache/abstract_cache_base.py +71 -0
  211. autogen/cache/cache.py +203 -0
  212. autogen/cache/cache_factory.py +88 -0
  213. autogen/cache/cosmos_db_cache.py +144 -0
  214. autogen/cache/disk_cache.py +97 -0
  215. autogen/cache/in_memory_cache.py +54 -0
  216. autogen/cache/redis_cache.py +119 -0
  217. autogen/code_utils.py +598 -0
  218. autogen/coding/__init__.py +30 -0
  219. autogen/coding/base.py +120 -0
  220. autogen/coding/docker_commandline_code_executor.py +283 -0
  221. autogen/coding/factory.py +56 -0
  222. autogen/coding/func_with_reqs.py +203 -0
  223. autogen/coding/jupyter/__init__.py +23 -0
  224. autogen/coding/jupyter/base.py +36 -0
  225. autogen/coding/jupyter/docker_jupyter_server.py +160 -0
  226. autogen/coding/jupyter/embedded_ipython_code_executor.py +182 -0
  227. autogen/coding/jupyter/import_utils.py +82 -0
  228. autogen/coding/jupyter/jupyter_client.py +224 -0
  229. autogen/coding/jupyter/jupyter_code_executor.py +154 -0
  230. autogen/coding/jupyter/local_jupyter_server.py +164 -0
  231. autogen/coding/local_commandline_code_executor.py +341 -0
  232. autogen/coding/markdown_code_extractor.py +44 -0
  233. autogen/coding/utils.py +55 -0
  234. autogen/coding/yepcode_code_executor.py +197 -0
  235. autogen/doc_utils.py +35 -0
  236. autogen/environments/__init__.py +10 -0
  237. autogen/environments/docker_python_environment.py +365 -0
  238. autogen/environments/python_environment.py +125 -0
  239. autogen/environments/system_python_environment.py +85 -0
  240. autogen/environments/venv_python_environment.py +220 -0
  241. autogen/environments/working_directory.py +74 -0
  242. autogen/events/__init__.py +7 -0
  243. autogen/events/agent_events.py +1016 -0
  244. autogen/events/base_event.py +100 -0
  245. autogen/events/client_events.py +168 -0
  246. autogen/events/helpers.py +44 -0
  247. autogen/events/print_event.py +45 -0
  248. autogen/exception_utils.py +73 -0
  249. autogen/extensions/__init__.py +5 -0
  250. autogen/fast_depends/__init__.py +16 -0
  251. autogen/fast_depends/_compat.py +75 -0
  252. autogen/fast_depends/core/__init__.py +14 -0
  253. autogen/fast_depends/core/build.py +206 -0
  254. autogen/fast_depends/core/model.py +527 -0
  255. autogen/fast_depends/dependencies/__init__.py +15 -0
  256. autogen/fast_depends/dependencies/model.py +30 -0
  257. autogen/fast_depends/dependencies/provider.py +40 -0
  258. autogen/fast_depends/library/__init__.py +10 -0
  259. autogen/fast_depends/library/model.py +46 -0
  260. autogen/fast_depends/py.typed +6 -0
  261. autogen/fast_depends/schema.py +66 -0
  262. autogen/fast_depends/use.py +272 -0
  263. autogen/fast_depends/utils.py +177 -0
  264. autogen/formatting_utils.py +83 -0
  265. autogen/function_utils.py +13 -0
  266. autogen/graph_utils.py +173 -0
  267. autogen/import_utils.py +539 -0
  268. autogen/interop/__init__.py +22 -0
  269. autogen/interop/crewai/__init__.py +7 -0
  270. autogen/interop/crewai/crewai.py +88 -0
  271. autogen/interop/interoperability.py +71 -0
  272. autogen/interop/interoperable.py +46 -0
  273. autogen/interop/langchain/__init__.py +8 -0
  274. autogen/interop/langchain/langchain_chat_model_factory.py +156 -0
  275. autogen/interop/langchain/langchain_tool.py +78 -0
  276. autogen/interop/litellm/__init__.py +7 -0
  277. autogen/interop/litellm/litellm_config_factory.py +178 -0
  278. autogen/interop/pydantic_ai/__init__.py +7 -0
  279. autogen/interop/pydantic_ai/pydantic_ai.py +172 -0
  280. autogen/interop/registry.py +70 -0
  281. autogen/io/__init__.py +15 -0
  282. autogen/io/base.py +151 -0
  283. autogen/io/console.py +56 -0
  284. autogen/io/processors/__init__.py +12 -0
  285. autogen/io/processors/base.py +21 -0
  286. autogen/io/processors/console_event_processor.py +61 -0
  287. autogen/io/run_response.py +294 -0
  288. autogen/io/thread_io_stream.py +63 -0
  289. autogen/io/websockets.py +214 -0
  290. autogen/json_utils.py +42 -0
  291. autogen/llm_clients/MIGRATION_TO_V2.md +782 -0
  292. autogen/llm_clients/__init__.py +77 -0
  293. autogen/llm_clients/client_v2.py +122 -0
  294. autogen/llm_clients/models/__init__.py +55 -0
  295. autogen/llm_clients/models/content_blocks.py +389 -0
  296. autogen/llm_clients/models/unified_message.py +145 -0
  297. autogen/llm_clients/models/unified_response.py +83 -0
  298. autogen/llm_clients/openai_completions_client.py +444 -0
  299. autogen/llm_config/__init__.py +11 -0
  300. autogen/llm_config/client.py +59 -0
  301. autogen/llm_config/config.py +461 -0
  302. autogen/llm_config/entry.py +169 -0
  303. autogen/llm_config/types.py +37 -0
  304. autogen/llm_config/utils.py +223 -0
  305. autogen/logger/__init__.py +11 -0
  306. autogen/logger/base_logger.py +129 -0
  307. autogen/logger/file_logger.py +262 -0
  308. autogen/logger/logger_factory.py +42 -0
  309. autogen/logger/logger_utils.py +57 -0
  310. autogen/logger/sqlite_logger.py +524 -0
  311. autogen/math_utils.py +338 -0
  312. autogen/mcp/__init__.py +7 -0
  313. autogen/mcp/__main__.py +78 -0
  314. autogen/mcp/helpers.py +45 -0
  315. autogen/mcp/mcp_client.py +349 -0
  316. autogen/mcp/mcp_proxy/__init__.py +19 -0
  317. autogen/mcp/mcp_proxy/fastapi_code_generator_helpers.py +62 -0
  318. autogen/mcp/mcp_proxy/mcp_proxy.py +577 -0
  319. autogen/mcp/mcp_proxy/operation_grouping.py +166 -0
  320. autogen/mcp/mcp_proxy/operation_renaming.py +110 -0
  321. autogen/mcp/mcp_proxy/patch_fastapi_code_generator.py +98 -0
  322. autogen/mcp/mcp_proxy/security.py +399 -0
  323. autogen/mcp/mcp_proxy/security_schema_visitor.py +37 -0
  324. autogen/messages/__init__.py +7 -0
  325. autogen/messages/agent_messages.py +946 -0
  326. autogen/messages/base_message.py +108 -0
  327. autogen/messages/client_messages.py +172 -0
  328. autogen/messages/print_message.py +48 -0
  329. autogen/oai/__init__.py +61 -0
  330. autogen/oai/anthropic.py +1516 -0
  331. autogen/oai/bedrock.py +800 -0
  332. autogen/oai/cerebras.py +302 -0
  333. autogen/oai/client.py +1658 -0
  334. autogen/oai/client_utils.py +196 -0
  335. autogen/oai/cohere.py +494 -0
  336. autogen/oai/gemini.py +1045 -0
  337. autogen/oai/gemini_types.py +156 -0
  338. autogen/oai/groq.py +319 -0
  339. autogen/oai/mistral.py +311 -0
  340. autogen/oai/oai_models/__init__.py +23 -0
  341. autogen/oai/oai_models/_models.py +16 -0
  342. autogen/oai/oai_models/chat_completion.py +86 -0
  343. autogen/oai/oai_models/chat_completion_audio.py +32 -0
  344. autogen/oai/oai_models/chat_completion_message.py +97 -0
  345. autogen/oai/oai_models/chat_completion_message_tool_call.py +60 -0
  346. autogen/oai/oai_models/chat_completion_token_logprob.py +62 -0
  347. autogen/oai/oai_models/completion_usage.py +59 -0
  348. autogen/oai/ollama.py +657 -0
  349. autogen/oai/openai_responses.py +451 -0
  350. autogen/oai/openai_utils.py +897 -0
  351. autogen/oai/together.py +387 -0
  352. autogen/remote/__init__.py +18 -0
  353. autogen/remote/agent.py +199 -0
  354. autogen/remote/agent_service.py +197 -0
  355. autogen/remote/errors.py +17 -0
  356. autogen/remote/httpx_client_factory.py +131 -0
  357. autogen/remote/protocol.py +37 -0
  358. autogen/remote/retry.py +102 -0
  359. autogen/remote/runtime.py +96 -0
  360. autogen/retrieve_utils.py +490 -0
  361. autogen/runtime_logging.py +161 -0
  362. autogen/testing/__init__.py +12 -0
  363. autogen/testing/messages.py +45 -0
  364. autogen/testing/test_agent.py +111 -0
  365. autogen/token_count_utils.py +280 -0
  366. autogen/tools/__init__.py +20 -0
  367. autogen/tools/contrib/__init__.py +9 -0
  368. autogen/tools/contrib/time/__init__.py +7 -0
  369. autogen/tools/contrib/time/time.py +40 -0
  370. autogen/tools/dependency_injection.py +249 -0
  371. autogen/tools/experimental/__init__.py +54 -0
  372. autogen/tools/experimental/browser_use/__init__.py +7 -0
  373. autogen/tools/experimental/browser_use/browser_use.py +154 -0
  374. autogen/tools/experimental/code_execution/__init__.py +7 -0
  375. autogen/tools/experimental/code_execution/python_code_execution.py +86 -0
  376. autogen/tools/experimental/crawl4ai/__init__.py +7 -0
  377. autogen/tools/experimental/crawl4ai/crawl4ai.py +150 -0
  378. autogen/tools/experimental/deep_research/__init__.py +7 -0
  379. autogen/tools/experimental/deep_research/deep_research.py +329 -0
  380. autogen/tools/experimental/duckduckgo/__init__.py +7 -0
  381. autogen/tools/experimental/duckduckgo/duckduckgo_search.py +103 -0
  382. autogen/tools/experimental/firecrawl/__init__.py +7 -0
  383. autogen/tools/experimental/firecrawl/firecrawl_tool.py +836 -0
  384. autogen/tools/experimental/google/__init__.py +14 -0
  385. autogen/tools/experimental/google/authentication/__init__.py +11 -0
  386. autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
  387. autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
  388. autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
  389. autogen/tools/experimental/google/drive/__init__.py +9 -0
  390. autogen/tools/experimental/google/drive/drive_functions.py +124 -0
  391. autogen/tools/experimental/google/drive/toolkit.py +88 -0
  392. autogen/tools/experimental/google/model.py +17 -0
  393. autogen/tools/experimental/google/toolkit_protocol.py +19 -0
  394. autogen/tools/experimental/google_search/__init__.py +8 -0
  395. autogen/tools/experimental/google_search/google_search.py +93 -0
  396. autogen/tools/experimental/google_search/youtube_search.py +181 -0
  397. autogen/tools/experimental/messageplatform/__init__.py +17 -0
  398. autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
  399. autogen/tools/experimental/messageplatform/discord/discord.py +284 -0
  400. autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
  401. autogen/tools/experimental/messageplatform/slack/slack.py +385 -0
  402. autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
  403. autogen/tools/experimental/messageplatform/telegram/telegram.py +271 -0
  404. autogen/tools/experimental/perplexity/__init__.py +7 -0
  405. autogen/tools/experimental/perplexity/perplexity_search.py +249 -0
  406. autogen/tools/experimental/reliable/__init__.py +10 -0
  407. autogen/tools/experimental/reliable/reliable.py +1311 -0
  408. autogen/tools/experimental/searxng/__init__.py +7 -0
  409. autogen/tools/experimental/searxng/searxng_search.py +142 -0
  410. autogen/tools/experimental/tavily/__init__.py +7 -0
  411. autogen/tools/experimental/tavily/tavily_search.py +176 -0
  412. autogen/tools/experimental/web_search_preview/__init__.py +7 -0
  413. autogen/tools/experimental/web_search_preview/web_search_preview.py +120 -0
  414. autogen/tools/experimental/wikipedia/__init__.py +7 -0
  415. autogen/tools/experimental/wikipedia/wikipedia.py +284 -0
  416. autogen/tools/function_utils.py +412 -0
  417. autogen/tools/tool.py +188 -0
  418. autogen/tools/toolkit.py +86 -0
  419. autogen/types.py +29 -0
  420. autogen/version.py +7 -0
  421. templates/client_template/main.jinja2 +72 -0
  422. templates/config_template/config.jinja2 +7 -0
  423. templates/main.jinja2 +61 -0
@@ -0,0 +1,426 @@
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 __future__ import annotations
6
+
7
+ import argparse
8
+ import importlib
9
+ import json
10
+ import os
11
+ import pkgutil
12
+ import re
13
+ import shutil
14
+ import sys
15
+ from collections.abc import Iterable, Iterator
16
+ from pathlib import Path
17
+ from types import ModuleType
18
+ from typing import Any
19
+
20
+ from ..doc_utils import get_target_module
21
+ from ..import_utils import optional_import_block, require_optional_import
22
+ from .utils import copy_only_git_tracked_and_untracked_files
23
+
24
+ with optional_import_block():
25
+ import pdoc
26
+ from jinja2 import Template
27
+
28
+
29
+ def import_submodules(module_name: str, *, include_root: bool = True) -> list[str]:
30
+ """List all submodules of a given module.
31
+
32
+ Args:
33
+ module_name (str): The name of the module to list submodules for.
34
+ include_root (bool, optional): Whether to include the root module in the list. Defaults to True.
35
+
36
+ Returns:
37
+ list: A list of submodule names.
38
+ """
39
+ try:
40
+ module = importlib.import_module(module_name) # nosemgrep
41
+ except Exception:
42
+ return []
43
+
44
+ # Get the path of the module. This is necessary to find its submodules.
45
+ module_path = module.__path__
46
+
47
+ # Initialize an empty list to store the names of submodules
48
+ submodules = [module_name] if include_root else []
49
+
50
+ # Iterate over the submodules in the module's path
51
+ for _, name, ispkg in pkgutil.iter_modules(module_path, prefix=f"{module_name}."):
52
+ # Add the name of each submodule to the list
53
+ submodules.append(name)
54
+
55
+ if ispkg:
56
+ submodules.extend(import_submodules(name, include_root=False))
57
+
58
+ # Return the list of submodule names
59
+ return submodules
60
+
61
+
62
+ @require_optional_import("pdoc", "docs")
63
+ def build_pdoc_dict(module: ModuleType, module_name: str) -> None:
64
+ if not hasattr(module, "__pdoc__"):
65
+ setattr(module, "__pdoc__", {})
66
+
67
+ all = module.__all__ if hasattr(module, "__all__") else None
68
+
69
+ for name, obj in module.__dict__.items():
70
+ if all and name not in all:
71
+ continue
72
+
73
+ if not hasattr(obj, "__name__") or name.startswith("_"):
74
+ continue
75
+
76
+ target_module = get_target_module(obj)
77
+ if target_module and target_module != module_name:
78
+ module.__pdoc__[name] = False
79
+
80
+
81
+ @require_optional_import("pdoc", "docs")
82
+ def process_modules(submodules: list[str]) -> None:
83
+ cached_modules: dict[str, ModuleType] = {}
84
+
85
+ # Pass 1: Build pdoc dictionary for all submodules
86
+ for submodule in submodules:
87
+ module = importlib.import_module(submodule) # nosemgrep
88
+ cached_modules[submodule] = module
89
+ build_pdoc_dict(module, submodule)
90
+
91
+
92
+ @require_optional_import("pdoc", "docs")
93
+ def generate_markdown(path: Path) -> None:
94
+ modules = ["autogen"] # Public submodules are auto-imported
95
+ context = pdoc.Context()
96
+
97
+ modules = [pdoc.Module(mod, context=context) for mod in modules]
98
+ pdoc.link_inheritance(context)
99
+
100
+ def recursive_markdown(mod: pdoc.Module) -> Iterable[tuple[str, str]]: # type: ignore[no-any-unimported]
101
+ # Pass our custom template here
102
+ yield mod.name, mod.text()
103
+ for submod in mod.submodules():
104
+ yield from recursive_markdown(submod)
105
+
106
+ for mod in modules:
107
+ for module_name, text in recursive_markdown(mod):
108
+ file_path = path / module_name.replace(".", "/") / "index.md"
109
+ # print(f"Writing {file_path}...")
110
+ file_path.parent.mkdir(parents=True, exist_ok=True)
111
+ with file_path.open("w") as f:
112
+ f.write(text)
113
+
114
+
115
+ @require_optional_import("pdoc", "docs")
116
+ def generate(target_dir: Path, template_dir: Path) -> None:
117
+ # Pass the custom template directory for rendering the markdown
118
+ pdoc.tpl_lookup.directories.insert(0, str(template_dir))
119
+
120
+ submodules = import_submodules("autogen")
121
+ # print(f"{submodules=}")
122
+
123
+ process_modules(submodules)
124
+
125
+ generate_markdown(target_dir)
126
+
127
+
128
+ def fix_api_reference_links(content: str) -> str:
129
+ """Fix the API reference links in the content."""
130
+ # Define a pattern that matches API reference links
131
+ pattern = r"(/docs/api-reference/[^#\)]+#)autogen\.([^\)]+)"
132
+
133
+ # Replace with the URL part and everything after the last dot
134
+ def replacement_func(match: re.Match[str]) -> str:
135
+ url_part = match.group(1)
136
+ full_name = match.group(2)
137
+
138
+ # Get the function name (everything after the last dot if there is one, or the whole thing)
139
+ func_name = full_name.split(".")[-1] if "." in full_name else full_name
140
+ return f"{url_part}{func_name}"
141
+
142
+ # Use re.sub with a replacement function
143
+ return re.sub(pattern, replacement_func, content)
144
+
145
+
146
+ def convert_md_to_mdx(input_dir: Path) -> None:
147
+ """Convert all .md files in directory to .mdx while preserving structure.
148
+
149
+ Args:
150
+ input_dir (Path): Directory containing .md files to convert
151
+ """
152
+ if not input_dir.exists():
153
+ print(f"Directory not found: {input_dir}")
154
+ sys.exit(1)
155
+
156
+ for md_file in input_dir.rglob("*.md"):
157
+ mdx_file = md_file.with_suffix(".mdx")
158
+
159
+ # Read content from .md file
160
+ content = md_file.read_text(encoding="utf-8")
161
+
162
+ # Fix internal API references
163
+ content = fix_api_reference_links(content)
164
+
165
+ # Write content to .mdx file
166
+ mdx_file.write_text(content, encoding="utf-8")
167
+
168
+ # Remove original .md file
169
+ md_file.unlink()
170
+ # print(f"Converted: {md_file} -> {mdx_file}")
171
+
172
+
173
+ def get_mdx_files(directory: Path) -> list[str]:
174
+ """Get all MDX files in directory and subdirectories."""
175
+ return [f"{p.relative_to(directory).with_suffix('')!s}".replace("\\", "/") for p in directory.rglob("*.mdx")]
176
+
177
+
178
+ def add_prefix(path: str, parent_groups: list[str] | None = None) -> str:
179
+ """Create full path with prefix and parent groups."""
180
+ groups = parent_groups or []
181
+ return f"docs/api-reference/{'/'.join(groups + [path])}"
182
+
183
+
184
+ def create_nav_structure(paths: list[str], parent_groups: list[str] | None = None) -> list[Any]:
185
+ """Convert list of file paths into nested navigation structure."""
186
+ groups: dict[str, list[str]] = {}
187
+ pages = []
188
+ parent_groups = parent_groups or []
189
+
190
+ for path in paths:
191
+ parts = path.split("/")
192
+ if len(parts) == 1:
193
+ pages.append(add_prefix(path, parent_groups))
194
+ else:
195
+ group = parts[0]
196
+ subpath = "/".join(parts[1:])
197
+ groups.setdefault(group, []).append(subpath)
198
+
199
+ # Sort directories and create their structures
200
+ sorted_groups = [
201
+ {
202
+ "group": group,
203
+ "pages": create_nav_structure(subpaths, parent_groups + [group]),
204
+ }
205
+ for group, subpaths in sorted(groups.items())
206
+ ]
207
+
208
+ # Sort pages
209
+ overview_page = [page for page in pages if page.endswith("overview")]
210
+ if overview_page:
211
+ pages.remove(overview_page[0])
212
+
213
+ sorted_pages = sorted(pages)
214
+ if overview_page:
215
+ sorted_pages.insert(0, overview_page[0])
216
+
217
+ # Return directories first, then files
218
+ return sorted_pages + sorted_groups
219
+
220
+
221
+ def update_nav(mint_json_path: Path, new_nav_pages: list[Any]) -> None:
222
+ """Update the 'API Reference' section in mint.json navigation with new pages.
223
+
224
+ Args:
225
+ mint_json_path: Path to mint.json file
226
+ new_nav_pages: New navigation structure to replace in API Reference pages
227
+ """
228
+ try:
229
+ # Read the current mint.json
230
+ with open(mint_json_path) as f:
231
+ mint_config = json.load(f)
232
+
233
+ reference_section = {"group": "API Reference", "pages": new_nav_pages}
234
+ mint_config["navigation"].append(reference_section)
235
+
236
+ # Write back to mint.json with proper formatting
237
+ with open(mint_json_path, "w") as f:
238
+ json.dump(mint_config, f, indent=2)
239
+ f.write("\n")
240
+
241
+ except json.JSONDecodeError:
242
+ print(f"Error: {mint_json_path} is not valid JSON")
243
+ except Exception as e:
244
+ print(f"Error updating mint.json: {e}")
245
+
246
+
247
+ def update_mint_json_with_api_nav(website_build_dir: Path, api_dir: Path) -> None:
248
+ """Update mint.json with MDX files in the API directory."""
249
+ mint_json_path = website_build_dir / "mint.json"
250
+ if not mint_json_path.exists():
251
+ print(f"File not found: {mint_json_path}")
252
+ sys.exit(1)
253
+
254
+ # Get all MDX files in the API directory
255
+ mdx_files = get_mdx_files(api_dir)
256
+
257
+ # Create navigation structure
258
+ nav_structure = create_nav_structure(mdx_files)
259
+
260
+ # Update mint.json with new navigation
261
+ update_nav(mint_json_path, nav_structure)
262
+
263
+
264
+ @require_optional_import("jinja2", "docs")
265
+ def generate_mint_json_from_template(mint_json_template_path: Path, mint_json_path: Path) -> None:
266
+ # if mint.json already exists, delete it
267
+ if mint_json_path.exists():
268
+ os.remove(mint_json_path)
269
+
270
+ # Copy the template file to mint.json
271
+ contents = mint_json_template_path.read_text(encoding="utf-8")
272
+ mint_json_template_content = Template(contents).render()
273
+
274
+ # Parse the rendered template content as JSON
275
+ mint_json_data = json.loads(mint_json_template_content)
276
+
277
+ # Write content to mint.json
278
+ with open(mint_json_path, "w") as f:
279
+ json.dump(mint_json_data, f, indent=2)
280
+
281
+
282
+ class SplitReferenceFilesBySymbols:
283
+ def __init__(self, api_dir: Path) -> None:
284
+ self.api_dir = api_dir
285
+ self.tmp_dir = Path("tmp")
286
+
287
+ def _generate_overview(self, classes: list[str], functions: list[str], output_dir: Path) -> str:
288
+ overview = """---
289
+ sidebarTitle: Overview
290
+ title: Overview
291
+ ---
292
+ """
293
+ if classes:
294
+ overview += "\n\n## Classes\n"
295
+ for symbol in sorted(classes):
296
+ href = output_dir / symbol
297
+ overview += f"""<p class="overview-symbol"><a href="/{str(href).replace("tmp/", "docs/api-reference/")}"><code>class {symbol}</code></a></p>"""
298
+ overview += "\n"
299
+
300
+ if functions:
301
+ overview += "\n\n## Functions\n"
302
+ for symbol in sorted(functions):
303
+ href = output_dir / symbol
304
+ overview += f"""<p class="overview-symbol"><a href="/{str(href).replace("tmp/", "docs/api-reference/")}"><code>{symbol}</code></a></p>"""
305
+ overview += "\n"
306
+
307
+ return overview
308
+
309
+ def _extract_symbol_content(self, content: str, output_dir: Path) -> dict[str, str]:
310
+ sections = {}
311
+ class_symbols = []
312
+ function_symbols = []
313
+
314
+ for part in content.split("**** SYMBOL_START ****")[1:]:
315
+ symbol = part.split("```python\n")[1].split("(")[0].strip()
316
+ content = part.split("**** SYMBOL_END ****")[0].strip()
317
+ sections[symbol] = content
318
+
319
+ if "doc-symbol-class" in content:
320
+ class_symbols.append(symbol)
321
+
322
+ if "doc-symbol-function" in content:
323
+ function_symbols.append(symbol)
324
+
325
+ sections["overview"] = self._generate_overview(class_symbols, function_symbols, output_dir)
326
+ return sections
327
+
328
+ def _split_content_by_symbols(self, content: str, output_dir: Path) -> dict[str, str]:
329
+ symbols = {}
330
+ if "**** SYMBOL_START ****" in content:
331
+ symbols.update(self._extract_symbol_content(content, output_dir))
332
+ return symbols
333
+
334
+ def _process_files(self) -> Iterator[tuple[Path, dict[str, str]]]:
335
+ for md_file in self.api_dir.rglob("*.md"):
336
+ output_dir = self.tmp_dir / md_file.relative_to(self.api_dir).parent
337
+ output_dir.mkdir(parents=True, exist_ok=True)
338
+
339
+ yield output_dir, self._split_content_by_symbols(md_file.read_text(), output_dir)
340
+
341
+ def _clean_directory(self, directory: Path) -> None:
342
+ for item in directory.iterdir():
343
+ if item.is_dir():
344
+ shutil.rmtree(item)
345
+ else:
346
+ item.unlink()
347
+
348
+ def _move_generated_files_to_api_dir(self) -> None:
349
+ self._clean_directory(self.api_dir)
350
+ for item in self.tmp_dir.iterdir():
351
+ dest = self.api_dir / item.relative_to(self.tmp_dir)
352
+ dest.parent.mkdir(parents=True, exist_ok=True)
353
+ copy_func = shutil.copytree if item.is_dir() else shutil.copy2
354
+ print(f"Copying {'directory' if item.is_dir() else 'file'} {item} to {dest}")
355
+ copy_func(item, dest)
356
+
357
+ def generate(self) -> None:
358
+ try:
359
+ self.tmp_dir.mkdir(exist_ok=True)
360
+ for output_dir, symbols in self._process_files():
361
+ if symbols:
362
+ for name, content in symbols.items():
363
+ (output_dir / f"{name}.md").write_text(content, encoding="utf-8")
364
+
365
+ self._move_generated_files_to_api_dir()
366
+ finally:
367
+ shutil.rmtree(self.tmp_dir)
368
+
369
+
370
+ def main() -> None:
371
+ root_dir = Path(__file__).resolve().parents[2]
372
+ website_dir = root_dir / "website"
373
+ website_build_dir = website_dir / "build"
374
+
375
+ parser = argparse.ArgumentParser(description="Process API reference documentation")
376
+ parser.add_argument(
377
+ "--api-dir",
378
+ type=Path,
379
+ help="Directory containing API documentation to process",
380
+ default=website_build_dir / "docs" / "api-reference",
381
+ )
382
+
383
+ parser.add_argument("--force", action="store_true", help="Force generation")
384
+
385
+ args = parser.parse_args()
386
+
387
+ if args.force:
388
+ shutil.rmtree(website_build_dir, ignore_errors=True)
389
+
390
+ if not website_build_dir.exists():
391
+ website_build_dir.mkdir()
392
+
393
+ ignore_dir = "mkdocs"
394
+ copy_only_git_tracked_and_untracked_files(website_dir, website_build_dir, ignore_dir)
395
+
396
+ if args.api_dir.exists():
397
+ # Force delete the directory and its contents
398
+ shutil.rmtree(args.api_dir, ignore_errors=True)
399
+
400
+ target_dir = args.api_dir
401
+
402
+ template_dir = website_build_dir / "mako_templates"
403
+
404
+ # Generate API reference documentation
405
+ print("Generating API reference documentation...")
406
+ generate(target_dir, template_dir)
407
+
408
+ # Split the API reference from submodules into separate files for each symbols
409
+ symbol_files_generator = SplitReferenceFilesBySymbols(target_dir)
410
+ symbol_files_generator.generate()
411
+
412
+ # Convert MD to MDX
413
+ print("Converting MD files to MDX...")
414
+ convert_md_to_mdx(args.api_dir)
415
+
416
+ # Create mint.json from the template file
417
+ mint_json_template_path = website_build_dir / "mint-json-template.json.jinja"
418
+ mint_json_path = website_build_dir / "mint.json"
419
+
420
+ print("Generating mint.json from template...")
421
+ generate_mint_json_from_template(mint_json_template_path, mint_json_path)
422
+
423
+ # Update mint.json
424
+ update_mint_json_with_api_nav(website_build_dir, args.api_dir)
425
+
426
+ print("API reference processing complete!")