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
autogen/math_utils.py ADDED
@@ -0,0 +1,338 @@
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
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+
8
+
9
+ def remove_boxed(string: str) -> str | None:
10
+ """Source: https://github.com/hendrycks/math
11
+ Extract the text within a \\boxed`{...}` environment.
12
+
13
+ Example:
14
+ ```python
15
+ > remove_boxed("\\boxed{\\frac{2}{3}}")
16
+
17
+ \\frac{2}{3}
18
+ ```
19
+ """
20
+ left = "\\boxed{"
21
+ try:
22
+ if not all((string[: len(left)] == left, string[-1] == "}")):
23
+ raise AssertionError
24
+
25
+ return string[len(left) : -1]
26
+ except Exception:
27
+ return None
28
+
29
+
30
+ def last_boxed_only_string(string: str) -> str | None:
31
+ """Source: https://github.com/hendrycks/math
32
+ Extract the last \\boxed`{...}` or \\fbox`{...}` element from a string.
33
+ """
34
+ idx = string.rfind("\\boxed")
35
+ if idx < 0:
36
+ idx = string.rfind("\\fbox")
37
+ if idx < 0:
38
+ return None
39
+
40
+ i = idx
41
+ right_brace_idx = None
42
+ num_left_braces_open = 0
43
+ while i < len(string):
44
+ if string[i] == "{":
45
+ num_left_braces_open += 1
46
+ if string[i] == "}":
47
+ num_left_braces_open -= 1
48
+ if num_left_braces_open == 0:
49
+ right_brace_idx = i
50
+ break
51
+ i += 1
52
+
53
+ retval = None if right_brace_idx is None else string[idx : right_brace_idx + 1]
54
+
55
+ return retval
56
+
57
+
58
+ def _fix_fracs(string: str) -> str:
59
+ """Source: https://github.com/hendrycks/math
60
+ Reformat fractions.
61
+
62
+ Examples:
63
+ ```
64
+ >>> _fix_fracs("\\frac1b")
65
+ \frac{1}{b}
66
+ >>> _fix_fracs("\\frac12")
67
+ \frac{1}{2}
68
+ >>> _fix_fracs("\\frac1{72}")
69
+ \frac{1}{72}
70
+ ```
71
+ """
72
+ substrs = string.split("\\frac")
73
+ new_str = substrs[0]
74
+ if len(substrs) > 1:
75
+ substrs = substrs[1:]
76
+ for substr in substrs:
77
+ new_str += "\\frac"
78
+ if substr[0] == "{":
79
+ new_str += substr
80
+ else:
81
+ try:
82
+ if not len(substr) >= 2:
83
+ raise AssertionError
84
+ except Exception:
85
+ return string
86
+ a = substr[0]
87
+ b = substr[1]
88
+ if b != "{":
89
+ if len(substr) > 2:
90
+ post_substr = substr[2:]
91
+ new_str += "{" + a + "}{" + b + "}" + post_substr
92
+ else:
93
+ new_str += "{" + a + "}{" + b + "}"
94
+ else:
95
+ if len(substr) > 2:
96
+ post_substr = substr[2:]
97
+ new_str += "{" + a + "}" + b + post_substr
98
+ else:
99
+ new_str += "{" + a + "}" + b
100
+ string = new_str
101
+ return string
102
+
103
+
104
+ def _fix_a_slash_b(string: str) -> str:
105
+ """Source: https://github.com/hendrycks/math
106
+ Reformat fractions formatted as a/b to \\`frac{a}{b}`.
107
+
108
+ Example:
109
+ ```
110
+ >>> _fix_a_slash_b("2/3")
111
+ \frac{2}{3}
112
+ ```
113
+ """
114
+ if len(string.split("/")) != 2:
115
+ return string
116
+ a_str = string.split("/")[0]
117
+ b_str = string.split("/")[1]
118
+ try:
119
+ a = int(a_str)
120
+ b = int(b_str)
121
+ if not string == f"{a}/{b}":
122
+ raise AssertionError
123
+ new_string = "\\frac{" + str(a) + "}{" + str(b) + "}"
124
+ return new_string
125
+ except Exception:
126
+ return string
127
+
128
+
129
+ def _remove_right_units(string: str) -> str:
130
+ """Source: https://github.com/hendrycks/math
131
+ Remove units (on the right).
132
+ "\\text{ " only ever occurs (at least in the val set) when describing units.
133
+ """
134
+ if "\\text{ " in string:
135
+ splits = string.split("\\text{ ")
136
+ if not len(splits) == 2:
137
+ raise AssertionError
138
+ return splits[0]
139
+ else:
140
+ return string
141
+
142
+
143
+ def _fix_sqrt(string: str) -> str:
144
+ """Source: https://github.com/hendrycks/math
145
+ Reformat square roots.
146
+
147
+ Example:
148
+ ```
149
+ >>> _fix_sqrt("\\sqrt3")
150
+ \\sqrt{3}
151
+ ```
152
+ """
153
+ if "\\sqrt" not in string:
154
+ return string
155
+ splits = string.split("\\sqrt")
156
+ new_string = splits[0]
157
+ for split in splits[1:]:
158
+ if split[0] != "{":
159
+ a = split[0]
160
+ new_substr = "\\sqrt{" + a + "}" + split[1:]
161
+ else:
162
+ new_substr = "\\sqrt" + split
163
+ new_string += new_substr
164
+ return new_string
165
+
166
+
167
+ def _strip_string(string: str) -> str:
168
+ """Source: https://github.com/hendrycks/math
169
+ Apply the reformatting helper functions above.
170
+ """
171
+ # linebreaks
172
+ string = string.replace("\n", "")
173
+ # print(string)
174
+
175
+ # remove inverse spaces
176
+ string = string.replace("\\!", "")
177
+ # print(string)
178
+
179
+ # replace \\ with \
180
+ string = string.replace("\\\\", "\\")
181
+ # print(string)
182
+
183
+ # replace tfrac and dfrac with frac
184
+ string = string.replace("tfrac", "frac")
185
+ string = string.replace("dfrac", "frac")
186
+ # print(string)
187
+
188
+ # remove \left and \right
189
+ string = string.replace("\\left", "")
190
+ string = string.replace("\\right", "")
191
+ # print(string)
192
+
193
+ # Remove circ (degrees)
194
+ string = string.replace("^{\\circ}", "")
195
+ string = string.replace("^\\circ", "")
196
+
197
+ # remove dollar signs
198
+ string = string.replace("\\$", "")
199
+
200
+ # remove units (on the right)
201
+ string = _remove_right_units(string)
202
+
203
+ # remove percentage
204
+ string = string.replace("\\%", "")
205
+ string = string.replace("%", "")
206
+
207
+ # " 0." equivalent to " ." and "{0." equivalent to "{." Alternatively, add "0" if "." is the start of the string
208
+ string = string.replace(" .", " 0.")
209
+ string = string.replace("{.", "{0.")
210
+ # if empty, return empty string
211
+ if len(string) == 0:
212
+ return string
213
+ if string[0] == ".":
214
+ string = "0" + string
215
+
216
+ # to consider: get rid of e.g. "k = " or "q = " at beginning
217
+ if len(string.split("=")) == 2 and len(string.split("=")[0]) <= 2:
218
+ string = string.split("=")[1]
219
+
220
+ # fix sqrt3 --> sqrt{3}
221
+ string = _fix_sqrt(string)
222
+
223
+ # remove spaces
224
+ string = string.replace(" ", "")
225
+
226
+ # \frac1b or \frac12 --> \frac{1}{b} and \frac{1}{2}, etc.
227
+ # Even works with \frac1{72} (but not \frac{72}1).
228
+ # Also does a/b --> \\frac{a}{b}
229
+ string = _fix_fracs(string)
230
+
231
+ # manually change 0.5 --> \frac{1}{2}
232
+ if string == "0.5":
233
+ string = "\\frac{1}{2}"
234
+
235
+ # NOTE: X/Y changed to \frac{X}{Y} in dataset, but in simple cases fix in case the model output is X/Y
236
+ string = _fix_a_slash_b(string)
237
+
238
+ return string
239
+
240
+
241
+ def get_answer(solution: str | None) -> str | None:
242
+ if solution is None:
243
+ return None
244
+ last_boxed = last_boxed_only_string(solution)
245
+ if last_boxed is None:
246
+ return None
247
+ answer = remove_boxed(last_boxed)
248
+ if answer is None:
249
+ return None
250
+ return answer
251
+
252
+
253
+ def is_equiv(str1: str | None, str2: str | None) -> float:
254
+ """Returns (as a float) whether two strings containing math are equivalent up to differences of formatting in
255
+ - units
256
+ - fractions
257
+ - square roots
258
+ - superfluous LaTeX.
259
+ Source: https://github.com/hendrycks/math
260
+ """
261
+ if str1 is None and str2 is None:
262
+ print("WARNING: Both None")
263
+ return 1.0
264
+ if str1 is None or str2 is None:
265
+ return 0.0
266
+
267
+ try:
268
+ ss1 = _strip_string(str1)
269
+ ss2 = _strip_string(str2)
270
+ return float(ss1 == ss2)
271
+ except Exception:
272
+ return float(str1 == str2)
273
+
274
+
275
+ def is_equiv_chain_of_thought(str1: str, str2: str) -> float:
276
+ """Strips the solution first before calling `is_equiv`."""
277
+ ans1 = get_answer(str1)
278
+ ans2 = get_answer(str2)
279
+
280
+ return is_equiv(ans1, ans2)
281
+
282
+
283
+ def voting_counts(responses):
284
+ answers = {}
285
+ for i in range(len(responses)):
286
+ equiv = i
287
+ if get_answer(responses[i]) is None:
288
+ # ignore None answers
289
+ continue
290
+ for j in answers:
291
+ if is_equiv_chain_of_thought(responses[i], responses[j]):
292
+ equiv = j
293
+ break
294
+ if equiv in answers:
295
+ answers[equiv] += 1
296
+ else:
297
+ answers[equiv] = 1
298
+ return answers
299
+
300
+
301
+ def eval_math_responses(responses, solution=None):
302
+ """Select a response for a math problem using voting, and check if the response is correct if the solution is provided.
303
+
304
+ Args:
305
+ responses: The list of responses.
306
+ solution: The canonical solution.
307
+
308
+ Returns:
309
+ dict: The success metrics.
310
+ """
311
+ n = len(responses)
312
+ if not n:
313
+ return {
314
+ "expected_success": 0,
315
+ "success": False,
316
+ "success_vote": 0,
317
+ "voted_answer": None,
318
+ "votes": 0,
319
+ }
320
+ success_list = []
321
+ if solution is not None:
322
+ for i in range(n):
323
+ response = responses[i]
324
+ succeed = is_equiv_chain_of_thought(response, solution)
325
+ success_list.append(succeed)
326
+ # voting
327
+ answers = voting_counts(responses)
328
+ # find the answer with highest votes in answers
329
+ answer, votes = max(answers.items(), key=lambda x: x[1], default=(0, 0))
330
+ # check if the answer is correct
331
+ success_vote = is_equiv_chain_of_thought(responses[answer], solution)
332
+ return {
333
+ "expected_success": 1 - pow(1 - sum(success_list) / n, n),
334
+ "success": any(s for s in success_list),
335
+ "success_vote": success_vote,
336
+ "voted_answer": responses[answer],
337
+ "votes": votes,
338
+ }
@@ -0,0 +1,7 @@
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 .mcp_client import create_toolkit
6
+
7
+ __all__ = ["create_toolkit"]
@@ -0,0 +1,78 @@
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
+ from typing import Annotated, Literal
6
+
7
+ from .. import __version__
8
+ from ..import_utils import optional_import_block, require_optional_import
9
+ from .mcp_proxy import MCPProxy
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+ with optional_import_block():
14
+ import typer
15
+
16
+
17
+ @require_optional_import(["typer"], "mcp-proxy-gen")
18
+ def create_typer_app() -> "typer.Typer":
19
+ """Create a Typer app for the mcp proxy CLI."""
20
+ app = typer.Typer(rich_markup_mode="rich")
21
+
22
+ def version_callback(value: bool) -> None:
23
+ if value:
24
+ typer.echo(f"{__version__}")
25
+ raise typer.Exit()
26
+
27
+ @app.callback()
28
+ def callback(
29
+ version: Annotated[
30
+ bool | None,
31
+ typer.Option("--version", help="Show the version and exit.", callback=version_callback),
32
+ ] = None,
33
+ ) -> None:
34
+ """AG2 mcp proxy CLI - The [bold]mcp proxy[/bold] command line app. 😎
35
+
36
+ Generate mcp proxy for your [bold]AG2[/bold] projects.
37
+
38
+ Read more in the docs: ...
39
+ """ # noqa: D415
40
+
41
+ @app.command()
42
+ def create(
43
+ openapi_specification: Annotated[
44
+ str | None,
45
+ "Specification of the OpenAPI to use for the proxy generation.",
46
+ ] = None,
47
+ openapi_url: Annotated[
48
+ str | None,
49
+ "URL to the OpenAPI specification to use for the proxy generation.",
50
+ ] = None,
51
+ client_source_path: Annotated[
52
+ str | None,
53
+ "Path to the generated proxy client source code.",
54
+ ] = None,
55
+ server_url: Annotated[
56
+ str | None,
57
+ "Comma-separated list of server URLs to use for the proxy generation.",
58
+ ] = None,
59
+ configuration_type: Annotated[
60
+ Literal["json", "yaml"],
61
+ "Configuration type of the specification. Can be 'json' or 'yaml'.",
62
+ ] = "json",
63
+ ) -> None:
64
+ """Generate mcp proxy for your AG2 projects."""
65
+ MCPProxy.create(
66
+ openapi_specification=openapi_specification,
67
+ openapi_url=openapi_url,
68
+ client_source_path=client_source_path,
69
+ servers=[{"url": server_url}],
70
+ configuration_type=configuration_type,
71
+ )
72
+
73
+ return app
74
+
75
+
76
+ if __name__ == "__main__":
77
+ app = create_typer_app()
78
+ app(prog_name="mcp_proxy")
autogen/mcp/helpers.py ADDED
@@ -0,0 +1,45 @@
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 asyncio
5
+ import os
6
+ import signal
7
+ from asyncio.subprocess import PIPE, Process, create_subprocess_exec
8
+ from collections.abc import AsyncGenerator
9
+ from contextlib import asynccontextmanager
10
+
11
+
12
+ @asynccontextmanager
13
+ async def run_streamable_http_client(
14
+ *, mcp_server_path: str, env_vars: dict[str, str] | None = None, startup_wait_secs: float = 5.0
15
+ ) -> AsyncGenerator[Process, None]:
16
+ """Async context manager to run a Python subprocess for streamable-http with custom env vars.
17
+
18
+ Args:
19
+ mcp_server_path: Path to the Python script to run.
20
+ env_vars: Environment variables to export to the subprocess.
21
+ startup_wait_secs: Time to wait for the server to start (in seconds).
22
+
23
+ Yields:
24
+ An asyncio.subprocess.Process object.
25
+ """
26
+ env = os.environ.copy()
27
+ if env_vars:
28
+ env.update(env_vars)
29
+
30
+ process = await create_subprocess_exec(
31
+ "python", mcp_server_path, "streamable-http", env=env, stdout=PIPE, stderr=PIPE
32
+ )
33
+
34
+ # Optional startup delay to let the server initialize
35
+ await asyncio.sleep(startup_wait_secs)
36
+
37
+ try:
38
+ yield process
39
+ finally:
40
+ if process.returncode is None:
41
+ process.send_signal(signal.SIGINT)
42
+ try:
43
+ await asyncio.wait_for(process.wait(), timeout=5.0)
44
+ except asyncio.TimeoutError:
45
+ process.kill()