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,168 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+
6
+ import sys
7
+ import warnings
8
+ from functools import wraps
9
+ from inspect import signature
10
+ from typing import Any, Callable, Optional
11
+
12
+ from ...doc_utils import export_module
13
+ from ...import_utils import optional_import_block, require_optional_import
14
+ from ...tools import Tool
15
+ from ..registry import register_interoperable_class
16
+
17
+ __all__ = ["PydanticAIInteroperability"]
18
+
19
+ with optional_import_block():
20
+ from pydantic_ai import RunContext
21
+ from pydantic_ai.tools import Tool as PydanticAITool
22
+ from pydantic_ai.usage import Usage
23
+
24
+
25
+ @register_interoperable_class("pydanticai")
26
+ @export_module("autogen.interop")
27
+ class PydanticAIInteroperability:
28
+ """A class implementing the `Interoperable` protocol for converting Pydantic AI tools
29
+ into a general `Tool` format.
30
+
31
+ This class takes a `PydanticAITool` and converts it into a standard `Tool` object,
32
+ ensuring compatibility between Pydantic AI tools and other systems that expect
33
+ the `Tool` format. It also provides a mechanism for injecting context parameters
34
+ into the tool's function.
35
+ """
36
+
37
+ @staticmethod
38
+ @require_optional_import("pydantic_ai", "interop-pydantic-ai")
39
+ def inject_params(
40
+ ctx: Any,
41
+ tool: Any,
42
+ ) -> Callable[..., Any]:
43
+ """Wraps the tool's function to inject context parameters and handle retries.
44
+
45
+ This method ensures that context parameters are properly passed to the tool
46
+ when invoked and that retries are managed according to the tool's settings.
47
+
48
+ Args:
49
+ ctx (Optional[RunContext[Any]]): The run context, which may include dependencies and retry information.
50
+ tool (PydanticAITool): The Pydantic AI tool whose function is to be wrapped.
51
+
52
+ Returns:
53
+ Callable[..., Any]: A wrapped function that includes context injection and retry handling.
54
+
55
+ Raises:
56
+ ValueError: If the tool fails after the maximum number of retries.
57
+ """
58
+ ctx_typed: Optional[RunContext[Any]] = ctx # type: ignore[no-any-unimported]
59
+ tool_typed: PydanticAITool[Any] = tool # type: ignore[no-any-unimported]
60
+
61
+ max_retries = tool_typed.max_retries if tool_typed.max_retries is not None else 1
62
+ f = tool_typed.function
63
+
64
+ @wraps(f)
65
+ def wrapper(*args: Any, **kwargs: Any) -> Any:
66
+ if tool_typed.current_retry >= max_retries:
67
+ raise ValueError(f"{tool_typed.name} failed after {max_retries} retries")
68
+
69
+ try:
70
+ if ctx_typed is not None:
71
+ kwargs.pop("ctx", None)
72
+ ctx_typed.retry = tool_typed.current_retry
73
+ result = f(**kwargs, ctx=ctx_typed) # type: ignore[call-arg]
74
+ else:
75
+ result = f(**kwargs) # type: ignore[call-arg]
76
+ tool_typed.current_retry = 0
77
+ except Exception as e:
78
+ tool_typed.current_retry += 1
79
+ raise e
80
+
81
+ return result
82
+
83
+ sig = signature(f)
84
+ if ctx_typed is not None:
85
+ new_params = [param for name, param in sig.parameters.items() if name != "ctx"]
86
+ else:
87
+ new_params = list(sig.parameters.values())
88
+
89
+ wrapper.__signature__ = sig.replace(parameters=new_params) # type: ignore[attr-defined]
90
+
91
+ return wrapper
92
+
93
+ @classmethod
94
+ @require_optional_import("pydantic_ai", "interop-pydantic-ai")
95
+ def convert_tool(cls, tool: Any, deps: Any = None, **kwargs: Any) -> Tool:
96
+ """Converts a given Pydantic AI tool into a general `Tool` format.
97
+
98
+ This method verifies that the provided tool is a valid `PydanticAITool`,
99
+ handles context dependencies if necessary, and returns a standardized `Tool` object.
100
+
101
+ Args:
102
+ tool (Any): The tool to convert, expected to be an instance of `PydanticAITool`.
103
+ deps (Any, optional): The dependencies to inject into the context, required if
104
+ the tool takes a context. Defaults to None.
105
+ **kwargs (Any): Additional arguments that are not used in this method.
106
+
107
+ Returns:
108
+ Tool: A standardized `Tool` object converted from the Pydantic AI tool.
109
+
110
+ Raises:
111
+ ValueError: If the provided tool is not an instance of `PydanticAITool`, or if
112
+ dependencies are missing for tools that require a context.
113
+ UserWarning: If the `deps` argument is provided for a tool that does not take a context.
114
+ """
115
+ if not isinstance(tool, PydanticAITool):
116
+ raise ValueError(f"Expected an instance of `pydantic_ai.tools.Tool`, got {type(tool)}")
117
+
118
+ # needed for type checking
119
+ pydantic_ai_tool: PydanticAITool[Any] = tool # type: ignore[no-any-unimported]
120
+
121
+ if tool.takes_ctx and deps is None:
122
+ raise ValueError("If the tool takes a context, the `deps` argument must be provided")
123
+ if not tool.takes_ctx and deps is not None:
124
+ warnings.warn(
125
+ "The `deps` argument is provided but will be ignored because the tool does not take a context.",
126
+ UserWarning,
127
+ )
128
+
129
+ ctx = (
130
+ RunContext(
131
+ model=None, # type: ignore [arg-type]
132
+ usage=Usage(),
133
+ prompt="",
134
+ deps=deps,
135
+ retry=0,
136
+ # All messages send to or returned by a model.
137
+ # This is mostly used on pydantic_ai Agent level.
138
+ messages=[], # TODO: check in the future if this is needed on Tool level
139
+ tool_name=pydantic_ai_tool.name,
140
+ )
141
+ if tool.takes_ctx
142
+ else None
143
+ )
144
+
145
+ func = PydanticAIInteroperability.inject_params(
146
+ ctx=ctx,
147
+ tool=pydantic_ai_tool,
148
+ )
149
+
150
+ return Tool(
151
+ name=pydantic_ai_tool.name,
152
+ description=pydantic_ai_tool.description,
153
+ func_or_tool=func,
154
+ parameters_json_schema=pydantic_ai_tool._parameters_json_schema,
155
+ )
156
+
157
+ @classmethod
158
+ def get_unsupported_reason(cls) -> Optional[str]:
159
+ if sys.version_info < (3, 9):
160
+ return "This submodule is only supported for Python versions 3.9 and above"
161
+
162
+ with optional_import_block() as result:
163
+ import pydantic_ai.tools # noqa: F401
164
+
165
+ if not result.is_successful:
166
+ return "Please install `interop-pydantic-ai` extra to use this module:\n\n\tpip install ag2[interop-pydantic-ai]"
167
+
168
+ return None
@@ -0,0 +1,69 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from typing import Callable, TypeVar
6
+
7
+ from ..doc_utils import export_module
8
+ from .interoperable import Interoperable
9
+
10
+ __all__ = ["InteroperableRegistry", "register_interoperable_class"]
11
+
12
+ InteroperableClass = TypeVar("InteroperableClass", bound=type[Interoperable])
13
+
14
+
15
+ class InteroperableRegistry:
16
+ def __init__(self) -> None:
17
+ self._registry: dict[str, type[Interoperable]] = {}
18
+
19
+ def register(self, short_name: str, cls: InteroperableClass) -> InteroperableClass:
20
+ if short_name in self._registry:
21
+ raise ValueError(f"Duplicate registration for {short_name}")
22
+
23
+ self._registry[short_name] = cls
24
+
25
+ return cls
26
+
27
+ def get_short_names(self) -> list[str]:
28
+ return sorted(self._registry.keys())
29
+
30
+ def get_supported_types(self) -> list[str]:
31
+ short_names = self.get_short_names()
32
+ supported_types = [name for name in short_names if self._registry[name].get_unsupported_reason() is None]
33
+ return supported_types
34
+
35
+ def get_class(self, short_name: str) -> type[Interoperable]:
36
+ return self._registry[short_name]
37
+
38
+ @classmethod
39
+ def get_instance(cls) -> "InteroperableRegistry":
40
+ return _register
41
+
42
+
43
+ # global registry
44
+ _register = InteroperableRegistry()
45
+
46
+
47
+ # register decorator
48
+ @export_module("autogen.interop")
49
+ def register_interoperable_class(short_name: str) -> Callable[[InteroperableClass], InteroperableClass]:
50
+ """Register an Interoperable class in the global registry.
51
+
52
+ Returns:
53
+ Callable[[InteroperableClass], InteroperableClass]: Decorator function
54
+
55
+ Example:
56
+ ```python
57
+ @register_interoperable_class("myinterop")
58
+ class MyInteroperability(Interoperable):
59
+ def convert_tool(self, tool: Any) -> Tool:
60
+ # implementation
61
+ ...
62
+ ```
63
+ """
64
+
65
+ def inner(cls: InteroperableClass) -> InteroperableClass:
66
+ global _register
67
+ return _register.register(short_name, cls)
68
+
69
+ return inner
autogen/io/__init__.py ADDED
@@ -0,0 +1,15 @@
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
+ from .base import IOStream, InputStream, OutputStream
8
+ from .console import IOConsole
9
+ from .websockets import IOWebsockets
10
+
11
+ # Set the default input/output stream to the console
12
+ IOStream.set_global_default(IOConsole())
13
+ IOStream.set_default(IOConsole())
14
+
15
+ __all__ = ("IOConsole", "IOStream", "IOWebsockets", "InputStream", "OutputStream")
autogen/io/base.py ADDED
@@ -0,0 +1,151 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+ import logging
8
+ from collections.abc import Iterator
9
+ from contextlib import contextmanager
10
+ from contextvars import ContextVar
11
+ from typing import Any, Optional, Protocol, Union, runtime_checkable
12
+
13
+ from ..doc_utils import export_module
14
+ from ..events.base_event import BaseEvent
15
+
16
+ __all__ = ("IOStream", "InputStream", "OutputStream")
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ @runtime_checkable
22
+ @export_module("autogen.io")
23
+ class OutputStream(Protocol):
24
+ def print(self, *objects: Any, sep: str = " ", end: str = "\n", flush: bool = False) -> None:
25
+ """Print data to the output stream.
26
+
27
+ Args:
28
+ objects (any): The data to print.
29
+ sep (str, optional): The separator between objects. Defaults to " ".
30
+ end (str, optional): The end of the output. Defaults to "\n".
31
+ flush (bool, optional): Whether to flush the output. Defaults to False.
32
+ """
33
+ ... # pragma: no cover
34
+
35
+ def send(self, message: BaseEvent) -> None:
36
+ """Send data to the output stream.
37
+
38
+ Args:
39
+ message (BaseEvent): BaseEvent from autogen.messages.base_message
40
+ """
41
+ ...
42
+
43
+
44
+ @runtime_checkable
45
+ @export_module("autogen.io")
46
+ class InputStream(Protocol):
47
+ def input(self, prompt: str = "", *, password: bool = False) -> str:
48
+ """Read a line from the input stream.
49
+
50
+ Args:
51
+ prompt (str, optional): The prompt to display. Defaults to "".
52
+ password (bool, optional): Whether to read a password. Defaults to False.
53
+
54
+ Returns:
55
+ str: The line read from the input stream.
56
+
57
+ """
58
+ ... # pragma: no cover
59
+
60
+
61
+ @runtime_checkable
62
+ @export_module("autogen.io")
63
+ class AsyncInputStream(Protocol):
64
+ async def input(self, prompt: str = "", *, password: bool = False) -> str:
65
+ """Read a line from the input stream.
66
+
67
+ Args:
68
+ prompt (str, optional): The prompt to display. Defaults to "".
69
+ password (bool, optional): Whether to read a password. Defaults to False.
70
+
71
+ Returns:
72
+ str: The line read from the input stream.
73
+
74
+ """
75
+ ... # pragma: no cover
76
+
77
+
78
+ @runtime_checkable
79
+ @export_module("autogen.io")
80
+ class IOStreamProtocol(InputStream, OutputStream, Protocol):
81
+ """A protocol for input/output streams."""
82
+
83
+
84
+ @runtime_checkable
85
+ @export_module("autogen.io")
86
+ class AsyncIOStreamProtocol(AsyncInputStream, OutputStream, Protocol):
87
+ """A protocol for input/output streams."""
88
+
89
+
90
+ iostream_union = Union[IOStreamProtocol, AsyncIOStreamProtocol]
91
+
92
+
93
+ @export_module("autogen.io")
94
+ class IOStream:
95
+ """A protocol for input/output streams."""
96
+
97
+ # ContextVar must be used in multithreaded or async environments
98
+ _default_io_stream: ContextVar[Optional[iostream_union]] = ContextVar("default_iostream", default=None)
99
+ _default_io_stream.set(None)
100
+ _global_default: Optional[iostream_union] = None
101
+
102
+ @staticmethod
103
+ def set_global_default(stream: iostream_union) -> None:
104
+ """Set the default input/output stream.
105
+
106
+ Args:
107
+ stream (IOStream): The input/output stream to set as the default.
108
+ """
109
+ IOStream._global_default = stream
110
+
111
+ @staticmethod
112
+ def get_global_default() -> iostream_union:
113
+ """Get the default input/output stream.
114
+
115
+ Returns:
116
+ IOStream: The default input/output stream.
117
+ """
118
+ if IOStream._global_default is None:
119
+ raise RuntimeError("No global default IOStream has been set")
120
+ return IOStream._global_default
121
+
122
+ @staticmethod
123
+ def get_default() -> iostream_union:
124
+ """Get the default input/output stream.
125
+
126
+ Returns:
127
+ IOStream: The default input/output stream.
128
+ """
129
+ iostream = IOStream._default_io_stream.get()
130
+ if iostream is None:
131
+ iostream = IOStream.get_global_default()
132
+ # Set the default IOStream of the current context (thread/cooroutine)
133
+ IOStream.set_default(iostream)
134
+ return iostream
135
+
136
+ @staticmethod
137
+ @contextmanager
138
+ def set_default(stream: Optional[iostream_union]) -> Iterator[None]:
139
+ """Set the default input/output stream.
140
+
141
+ Args:
142
+ stream (IOStream): The input/output stream to set as the default.
143
+ """
144
+ global _default_io_stream
145
+ try:
146
+ token = IOStream._default_io_stream.set(stream)
147
+ yield
148
+ finally:
149
+ IOStream._default_io_stream.reset(token)
150
+
151
+ return
autogen/io/console.py ADDED
@@ -0,0 +1,56 @@
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
+ import getpass
8
+ from typing import Any
9
+
10
+ from ..doc_utils import export_module
11
+ from ..events.base_event import BaseEvent
12
+ from ..events.print_event import PrintEvent
13
+ from .base import IOStream
14
+
15
+ __all__ = ("IOConsole",)
16
+
17
+
18
+ @export_module("autogen.io")
19
+ class IOConsole(IOStream):
20
+ """A console input/output stream."""
21
+
22
+ def print(self, *objects: Any, sep: str = " ", end: str = "\n", flush: bool = False) -> None:
23
+ """Print data to the output stream.
24
+
25
+ Args:
26
+ objects (any): The data to print.
27
+ sep (str, optional): The separator between objects. Defaults to " ".
28
+ end (str, optional): The end of the output. Defaults to "\n".
29
+ flush (bool, optional): Whether to flush the output. Defaults to False.
30
+ """
31
+ print_message = PrintEvent(*objects, sep=sep, end=end)
32
+ self.send(print_message)
33
+ # print(*objects, sep=sep, end=end, flush=flush)
34
+
35
+ def send(self, message: BaseEvent) -> None:
36
+ """Send a message to the output stream.
37
+
38
+ Args:
39
+ message (Any): The message to send.
40
+ """
41
+ message.print()
42
+
43
+ def input(self, prompt: str = "", *, password: bool = False) -> str:
44
+ """Read a line from the input stream.
45
+
46
+ Args:
47
+ prompt (str, optional): The prompt to display. Defaults to "".
48
+ password (bool, optional): Whether to read a password. Defaults to False.
49
+
50
+ Returns:
51
+ str: The line read from the input stream.
52
+
53
+ """
54
+ if password:
55
+ return getpass.getpass(prompt if prompt != "" else "Password: ")
56
+ return input(prompt)
@@ -0,0 +1,12 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ from .base import AsyncEventProcessorProtocol, EventProcessorProtocol
5
+ from .console_event_processor import AsyncConsoleEventProcessor, ConsoleEventProcessor
6
+
7
+ __all__ = [
8
+ "AsyncConsoleEventProcessor",
9
+ "AsyncEventProcessorProtocol",
10
+ "ConsoleEventProcessor",
11
+ "EventProcessorProtocol",
12
+ ]
@@ -0,0 +1,21 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ from typing import TYPE_CHECKING, Protocol
5
+
6
+ from ...doc_utils import export_module
7
+
8
+ if TYPE_CHECKING:
9
+ from ..run_response import AsyncRunResponseProtocol, RunResponseProtocol
10
+
11
+ __all__ = ["AsyncEventProcessorProtocol", "EventProcessorProtocol"]
12
+
13
+
14
+ @export_module("autogen.io")
15
+ class EventProcessorProtocol(Protocol):
16
+ def process(self, response: "RunResponseProtocol") -> None: ...
17
+
18
+
19
+ @export_module("autogen.io")
20
+ class AsyncEventProcessorProtocol(Protocol):
21
+ async def process(self, response: "AsyncRunResponseProtocol") -> None: ...
@@ -0,0 +1,56 @@
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 getpass
5
+ from typing import TYPE_CHECKING
6
+
7
+ from ...doc_utils import export_module
8
+ from ...events.agent_events import InputRequestEvent
9
+ from ...events.base_event import BaseEvent
10
+
11
+ if TYPE_CHECKING:
12
+ from ..run_response import AsyncRunResponseProtocol, RunResponseProtocol
13
+ from .base import AsyncEventProcessorProtocol, EventProcessorProtocol
14
+
15
+
16
+ @export_module("autogen.io")
17
+ class ConsoleEventProcessor:
18
+ def process(self, response: "RunResponseProtocol") -> None:
19
+ for event in response.events:
20
+ self.process_event(event)
21
+
22
+ def process_event(self, event: BaseEvent) -> None:
23
+ if isinstance(event, InputRequestEvent):
24
+ prompt = event.content.prompt # type: ignore[attr-defined]
25
+ if event.content.password: # type: ignore[attr-defined]
26
+ result = getpass.getpass(prompt if prompt != "" else "Password: ")
27
+ result = input(prompt)
28
+ event.content.respond(result) # type: ignore[attr-defined]
29
+ else:
30
+ event.print()
31
+
32
+
33
+ @export_module("autogen.io")
34
+ class AsyncConsoleEventProcessor:
35
+ async def process(self, response: "AsyncRunResponseProtocol") -> None:
36
+ async for event in response.events:
37
+ await self.process_event(event)
38
+
39
+ async def process_event(self, event: BaseEvent) -> None:
40
+ if isinstance(event, InputRequestEvent):
41
+ prompt = event.content.prompt # type: ignore[attr-defined]
42
+ if event.content.password: # type: ignore[attr-defined]
43
+ result = getpass.getpass(prompt if prompt != "" else "Password: ")
44
+ result = input(prompt)
45
+ await event.content.respond(result) # type: ignore[attr-defined]
46
+ else:
47
+ event.print()
48
+
49
+
50
+ if TYPE_CHECKING:
51
+
52
+ def check_type_1(x: ConsoleEventProcessor) -> EventProcessorProtocol:
53
+ return x
54
+
55
+ def check_type_2(x: AsyncConsoleEventProcessor) -> AsyncEventProcessorProtocol:
56
+ return x