ag2 0.9.1__py3-none-any.whl → 0.9.1.post0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ag2 might be problematic. Click here for more details.

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