ag2 0.9.1a1__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.1a1.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.1a1.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.1a1.dist-info/RECORD +0 -6
  355. ag2-0.9.1a1.dist-info/top_level.txt +0 -1
  356. {ag2-0.9.1a1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/LICENSE +0 -0
  357. {ag2-0.9.1a1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/NOTICE.md +0 -0
autogen/llm_config.py ADDED
@@ -0,0 +1,379 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import functools
6
+ import json
7
+ import re
8
+ from abc import ABC, abstractmethod
9
+ from collections.abc import Iterable
10
+ from contextvars import ContextVar
11
+ from pathlib import Path
12
+ from typing import TYPE_CHECKING, Annotated, Any, Mapping, Optional, Type, TypeVar, Union
13
+
14
+ from httpx import Client as httpxClient
15
+ from pydantic import BaseModel, ConfigDict, Field, HttpUrl, SecretStr, ValidationInfo, field_serializer, field_validator
16
+
17
+ if TYPE_CHECKING:
18
+ from .oai.client import ModelClient
19
+
20
+ _KT = TypeVar("_KT")
21
+ _VT = TypeVar("_VT")
22
+
23
+ __all__ = [
24
+ "LLMConfig",
25
+ "LLMConfigEntry",
26
+ "register_llm_config",
27
+ ]
28
+
29
+
30
+ def _add_default_api_type(d: dict[str, Any]) -> dict[str, Any]:
31
+ if "api_type" not in d:
32
+ d["api_type"] = "openai"
33
+ return d
34
+
35
+
36
+ # Meta class to allow LLMConfig.current and LLMConfig.default to be used as class properties
37
+ class MetaLLMConfig(type):
38
+ def __init__(cls, *args: Any, **kwargs: Any) -> None:
39
+ pass
40
+
41
+ @property
42
+ def current(cls) -> "LLMConfig":
43
+ current_llm_config = LLMConfig.get_current_llm_config(llm_config=None)
44
+ if current_llm_config is None:
45
+ raise ValueError("No current LLMConfig set. Are you inside a context block?")
46
+ return current_llm_config # type: ignore[return-value]
47
+
48
+ @property
49
+ def default(cls) -> "LLMConfig":
50
+ return cls.current
51
+
52
+
53
+ class LLMConfig(metaclass=MetaLLMConfig):
54
+ _current_llm_config: ContextVar["LLMConfig"] = ContextVar("current_llm_config")
55
+
56
+ def __init__(self, **kwargs: Any) -> None:
57
+ outside_properties = list((self._get_base_model_class()).model_json_schema()["properties"].keys())
58
+ outside_properties.remove("config_list")
59
+
60
+ if "config_list" in kwargs and isinstance(kwargs["config_list"], dict):
61
+ kwargs["config_list"] = [kwargs["config_list"]]
62
+
63
+ modified_kwargs = (
64
+ kwargs
65
+ if "config_list" in kwargs
66
+ else {
67
+ **{
68
+ "config_list": [
69
+ {k: v for k, v in kwargs.items() if k not in outside_properties},
70
+ ]
71
+ },
72
+ **{k: v for k, v in kwargs.items() if k in outside_properties},
73
+ }
74
+ )
75
+
76
+ modified_kwargs["config_list"] = [
77
+ _add_default_api_type(v) if isinstance(v, dict) else v for v in modified_kwargs["config_list"]
78
+ ]
79
+ for x in ["max_tokens", "top_p"]:
80
+ if x in modified_kwargs:
81
+ modified_kwargs["config_list"] = [{**v, x: modified_kwargs[x]} for v in modified_kwargs["config_list"]]
82
+ modified_kwargs.pop(x)
83
+
84
+ self._model = self._get_base_model_class()(**modified_kwargs)
85
+
86
+ # used by BaseModel to create instance variables
87
+ def __enter__(self) -> "LLMConfig":
88
+ # Store previous context and set self as current
89
+ self._token = LLMConfig._current_llm_config.set(self)
90
+ return self
91
+
92
+ def __exit__(self, exc_type: Type[Exception], exc_val: Exception, exc_tb: Any) -> None:
93
+ LLMConfig._current_llm_config.reset(self._token)
94
+
95
+ @classmethod
96
+ def get_current_llm_config(cls, llm_config: "Optional[LLMConfig]" = None) -> "Optional[LLMConfig]":
97
+ if llm_config is not None:
98
+ return llm_config
99
+ try:
100
+ return (LLMConfig._current_llm_config.get()).copy()
101
+ except LookupError:
102
+ return None
103
+
104
+ def _satisfies_criteria(self, value: Any, criteria_values: Any) -> bool:
105
+ if value is None:
106
+ return False
107
+
108
+ if isinstance(value, list):
109
+ return bool(set(value) & set(criteria_values)) # Non-empty intersection
110
+ else:
111
+ return value in criteria_values
112
+
113
+ @classmethod
114
+ def from_json(
115
+ cls,
116
+ *,
117
+ env: Optional[str] = None,
118
+ path: Optional[Union[str, Path]] = None,
119
+ file_location: Optional[str] = None,
120
+ **kwargs: Any,
121
+ ) -> "LLMConfig":
122
+ from .oai.openai_utils import config_list_from_json
123
+
124
+ if env is None and path is None:
125
+ raise ValueError("Either 'env' or 'path' must be provided")
126
+ if env is not None and path is not None:
127
+ raise ValueError("Only one of 'env' or 'path' can be provided")
128
+
129
+ config_list = config_list_from_json(
130
+ env_or_file=env if env is not None else str(path), file_location=file_location
131
+ )
132
+ return LLMConfig(config_list=config_list, **kwargs)
133
+
134
+ def where(self, *, exclude: bool = False, **kwargs: Any) -> "LLMConfig":
135
+ from .oai.openai_utils import filter_config
136
+
137
+ filtered_config_list = filter_config(config_list=self.config_list, filter_dict=kwargs, exclude=exclude)
138
+ if len(filtered_config_list) == 0:
139
+ raise ValueError(f"No config found that satisfies the filter criteria: {kwargs}")
140
+
141
+ return LLMConfig(config_list=filtered_config_list)
142
+
143
+ # @functools.wraps(BaseModel.model_dump)
144
+ def model_dump(self, *args: Any, exclude_none: bool = True, **kwargs: Any) -> dict[str, Any]:
145
+ d = self._model.model_dump(*args, exclude_none=exclude_none, **kwargs)
146
+ return {k: v for k, v in d.items() if not (isinstance(v, list) and len(v) == 0)}
147
+
148
+ # @functools.wraps(BaseModel.model_dump_json)
149
+ def model_dump_json(self, *args: Any, exclude_none: bool = True, **kwargs: Any) -> str:
150
+ # return self._model.model_dump_json(*args, exclude_none=exclude_none, **kwargs)
151
+ d = self.model_dump(*args, exclude_none=exclude_none, **kwargs)
152
+ return json.dumps(d)
153
+
154
+ # @functools.wraps(BaseModel.model_validate)
155
+ def model_validate(self, *args: Any, **kwargs: Any) -> Any:
156
+ return self._model.model_validate(*args, **kwargs)
157
+
158
+ @functools.wraps(BaseModel.model_validate_json)
159
+ def model_validate_json(self, *args: Any, **kwargs: Any) -> Any:
160
+ return self._model.model_validate_json(*args, **kwargs)
161
+
162
+ @functools.wraps(BaseModel.model_validate_strings)
163
+ def model_validate_strings(self, *args: Any, **kwargs: Any) -> Any:
164
+ return self._model.model_validate_strings(*args, **kwargs)
165
+
166
+ def __eq__(self, value: Any) -> bool:
167
+ return hasattr(value, "_model") and self._model == value._model
168
+
169
+ def _getattr(self, o: object, name: str) -> Any:
170
+ val = getattr(o, name)
171
+ return val
172
+
173
+ def get(self, key: str, default: Optional[Any] = None) -> Any:
174
+ val = getattr(self._model, key, default)
175
+ return val
176
+
177
+ def __getitem__(self, key: str) -> Any:
178
+ try:
179
+ return self._getattr(self._model, key)
180
+ except AttributeError:
181
+ raise KeyError(f"Key '{key}' not found in {self.__class__.__name__}")
182
+
183
+ def __setitem__(self, key: str, value: Any) -> None:
184
+ try:
185
+ setattr(self._model, key, value)
186
+ except ValueError:
187
+ raise ValueError(f"'{self.__class__.__name__}' object has no field '{key}'")
188
+
189
+ def __getattr__(self, name: Any) -> Any:
190
+ try:
191
+ return self._getattr(self._model, name)
192
+ except AttributeError:
193
+ raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")
194
+
195
+ def __setattr__(self, name: str, value: Any) -> None:
196
+ if name == "_model":
197
+ object.__setattr__(self, name, value)
198
+ else:
199
+ setattr(self._model, name, value)
200
+
201
+ def __contains__(self, key: str) -> bool:
202
+ return hasattr(self._model, key)
203
+
204
+ def __repr__(self) -> str:
205
+ d = self.model_dump()
206
+ r = [f"{k}={repr(v)}" for k, v in d.items()]
207
+
208
+ s = f"LLMConfig({', '.join(r)})"
209
+ # Replace any keys ending with 'key' or 'token' values with stars for security
210
+ s = re.sub(
211
+ r"(['\"])(\w*(key|token))\1:\s*(['\"])([^'\"]*)(?:\4)", r"\1\2\1: \4**********\4", s, flags=re.IGNORECASE
212
+ )
213
+ return s
214
+
215
+ def __copy__(self) -> "LLMConfig":
216
+ return LLMConfig(**self.model_dump())
217
+
218
+ def __deepcopy__(self, memo: Optional[dict[int, Any]] = None) -> "LLMConfig":
219
+ return self.__copy__()
220
+
221
+ def copy(self) -> "LLMConfig":
222
+ return self.__copy__()
223
+
224
+ def deepcopy(self, memo: Optional[dict[int, Any]] = None) -> "LLMConfig":
225
+ return self.__deepcopy__(memo)
226
+
227
+ def __str__(self) -> str:
228
+ return repr(self)
229
+
230
+ def items(self) -> Iterable[tuple[str, Any]]:
231
+ d = self.model_dump()
232
+ return d.items()
233
+
234
+ def keys(self) -> Iterable[str]:
235
+ d = self.model_dump()
236
+ return d.keys()
237
+
238
+ def values(self) -> Iterable[Any]:
239
+ d = self.model_dump()
240
+ return d.values()
241
+
242
+ _base_model_classes: dict[tuple[Type["LLMConfigEntry"], ...], Type[BaseModel]] = {}
243
+
244
+ @classmethod
245
+ def _get_base_model_class(cls) -> Type["BaseModel"]:
246
+ def _get_cls(llm_config_classes: tuple[Type[LLMConfigEntry], ...]) -> Type[BaseModel]:
247
+ if llm_config_classes in LLMConfig._base_model_classes:
248
+ return LLMConfig._base_model_classes[llm_config_classes]
249
+
250
+ class _LLMConfig(BaseModel):
251
+ temperature: Optional[float] = None
252
+ check_every_ms: Optional[int] = None
253
+ max_new_tokens: Optional[int] = None
254
+ seed: Optional[int] = None
255
+ allow_format_str_template: Optional[bool] = None
256
+ response_format: Optional[Union[str, dict[str, Any], BaseModel, Type[BaseModel]]] = None
257
+ timeout: Optional[int] = None
258
+ cache_seed: Optional[int] = None
259
+
260
+ tools: list[Any] = Field(default_factory=list)
261
+ functions: list[Any] = Field(default_factory=list)
262
+ parallel_tool_calls: Optional[bool] = None
263
+
264
+ config_list: Annotated[ # type: ignore[valid-type]
265
+ list[Annotated[Union[llm_config_classes], Field(discriminator="api_type")]],
266
+ Field(default_factory=list, min_length=1),
267
+ ]
268
+
269
+ # Following field is configuration for pydantic to disallow extra fields
270
+ model_config = ConfigDict(extra="forbid")
271
+
272
+ LLMConfig._base_model_classes[llm_config_classes] = _LLMConfig
273
+
274
+ return _LLMConfig
275
+
276
+ return _get_cls(tuple(_llm_config_classes))
277
+
278
+
279
+ class LLMConfigEntry(BaseModel, ABC):
280
+ api_type: str
281
+ model: str = Field(..., min_length=1)
282
+ api_key: Optional[SecretStr] = None
283
+ api_version: Optional[str] = None
284
+ max_tokens: Optional[int] = None
285
+ base_url: Optional[HttpUrl] = None
286
+ voice: Optional[str] = None
287
+ model_client_cls: Optional[str] = None
288
+ http_client: Optional[httpxClient] = None
289
+ response_format: Optional[Union[str, dict[str, Any], BaseModel, Type[BaseModel]]] = None
290
+ default_headers: Optional[Mapping[str, Any]] = None
291
+ tags: list[str] = Field(default_factory=list)
292
+
293
+ # Following field is configuration for pydantic to disallow extra fields
294
+ model_config = ConfigDict(extra="forbid", arbitrary_types_allowed=True)
295
+
296
+ @abstractmethod
297
+ def create_client(self) -> "ModelClient": ...
298
+
299
+ @field_validator("base_url", mode="before")
300
+ @classmethod
301
+ def check_base_url(cls, v: Any, info: ValidationInfo) -> Any:
302
+ if not str(v).startswith("https://") and not str(v).startswith("http://"):
303
+ v = f"http://{str(v)}"
304
+ return v
305
+
306
+ @field_serializer("base_url")
307
+ def serialize_base_url(self, v: Any) -> Any:
308
+ return str(v)
309
+
310
+ @field_serializer("api_key", when_used="unless-none")
311
+ def serialize_api_key(self, v: SecretStr) -> Any:
312
+ return v.get_secret_value()
313
+
314
+ def model_dump(self, *args: Any, exclude_none: bool = True, **kwargs: Any) -> dict[str, Any]:
315
+ return BaseModel.model_dump(self, exclude_none=exclude_none, *args, **kwargs)
316
+
317
+ def model_dump_json(self, *args: Any, exclude_none: bool = True, **kwargs: Any) -> str:
318
+ return BaseModel.model_dump_json(self, exclude_none=exclude_none, *args, **kwargs)
319
+
320
+ def get(self, key: str, default: Optional[Any] = None) -> Any:
321
+ val = getattr(self, key, default)
322
+ if isinstance(val, SecretStr):
323
+ return val.get_secret_value()
324
+ return val
325
+
326
+ def __getitem__(self, key: str) -> Any:
327
+ try:
328
+ val = getattr(self, key)
329
+ if isinstance(val, SecretStr):
330
+ return val.get_secret_value()
331
+ return val
332
+ except AttributeError:
333
+ raise KeyError(f"Key '{key}' not found in {self.__class__.__name__}")
334
+
335
+ def __setitem__(self, key: str, value: Any) -> None:
336
+ setattr(self, key, value)
337
+
338
+ def __contains__(self, key: str) -> bool:
339
+ return hasattr(self, key)
340
+
341
+ def items(self) -> Iterable[tuple[str, Any]]:
342
+ d = self.model_dump()
343
+ return d.items()
344
+
345
+ def keys(self) -> Iterable[str]:
346
+ d = self.model_dump()
347
+ return d.keys()
348
+
349
+ def values(self) -> Iterable[Any]:
350
+ d = self.model_dump()
351
+ return d.values()
352
+
353
+ def __repr__(self) -> str:
354
+ # Override to eliminate none values from the repr
355
+ d = self.model_dump()
356
+ r = [f"{k}={repr(v)}" for k, v in d.items()]
357
+
358
+ s = f"{self.__class__.__name__}({', '.join(r)})"
359
+
360
+ # Replace any keys ending with '_key' or '_token' values with stars for security
361
+ # This regex will match any key ending with '_key' or '_token' and its value, and replace the value with stars
362
+ # It also captures the type of quote used (single or double) and reuses it in the replacement
363
+ s = re.sub(r'(\w+_(key|token)\s*=\s*)([\'"]).*?\3', r"\1\3**********\3", s, flags=re.IGNORECASE)
364
+
365
+ return s
366
+
367
+ def __str__(self) -> str:
368
+ return repr(self)
369
+
370
+
371
+ _llm_config_classes: list[Type[LLMConfigEntry]] = []
372
+
373
+
374
+ def register_llm_config(cls: Type[LLMConfigEntry]) -> Type[LLMConfigEntry]:
375
+ if isinstance(cls, type) and issubclass(cls, LLMConfigEntry):
376
+ _llm_config_classes.append(cls)
377
+ else:
378
+ raise TypeError(f"Expected a subclass of LLMConfigEntry, got {cls}")
379
+ return cls
@@ -0,0 +1,11 @@
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 .file_logger import FileLogger
8
+ from .logger_factory import LoggerFactory
9
+ from .sqlite_logger import SqliteLogger
10
+
11
+ __all__ = ("FileLogger", "LoggerFactory", "SqliteLogger")
@@ -0,0 +1,128 @@
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 __future__ import annotations
8
+
9
+ import sqlite3
10
+ import uuid
11
+ from abc import ABC, abstractmethod
12
+ from typing import TYPE_CHECKING, Any, Callable, TypeVar, Union
13
+
14
+ if TYPE_CHECKING:
15
+ from openai import AzureOpenAI, OpenAI
16
+ from openai.types.chat import ChatCompletion
17
+
18
+ from .. import Agent, ConversableAgent, OpenAIWrapper
19
+
20
+ F = TypeVar("F", bound=Callable[..., Any])
21
+ ConfigItem = dict[str, Union[str, list[str]]]
22
+ LLMConfig = dict[str, Union[None, float, int, ConfigItem, list[ConfigItem]]]
23
+
24
+
25
+ class BaseLogger(ABC):
26
+ @abstractmethod
27
+ def start(self) -> str:
28
+ """Open a connection to the logging database, and start recording.
29
+
30
+ Returns:
31
+ session_id (str): a unique id for the logging session
32
+ """
33
+ ...
34
+
35
+ @abstractmethod
36
+ def log_chat_completion(
37
+ self,
38
+ invocation_id: uuid.UUID,
39
+ client_id: int,
40
+ wrapper_id: int,
41
+ source: str | Agent,
42
+ request: dict[str, float | str | list[dict[str, str]]],
43
+ response: str | ChatCompletion,
44
+ is_cached: int,
45
+ cost: float,
46
+ start_time: str,
47
+ ) -> None:
48
+ """Log a chat completion to database.
49
+
50
+ In AG2, chat completions are somewhat complicated because they are handled by the `autogen.oai.OpenAIWrapper` class.
51
+ One invocation to `create` can lead to multiple underlying OpenAI calls, depending on the llm_config list used, and
52
+ any errors or retries.
53
+
54
+ Args:
55
+ invocation_id (uuid): A unique identifier for the invocation to the OpenAIWrapper.create method call
56
+ client_id (int): A unique identifier for the underlying OpenAI client instance
57
+ wrapper_id (int): A unique identifier for the OpenAIWrapper instance
58
+ source (str or Agent): The source/creator of the event as a string name or an Agent instance
59
+ request (dict): A dictionary representing the request or call to the OpenAI client endpoint
60
+ response (str or ChatCompletion): The response from OpenAI
61
+ is_cached (int): 1 if the response was a cache hit, 0 otherwise
62
+ cost(float): The cost for OpenAI response
63
+ start_time (str): A string representing the moment the request was initiated
64
+ """
65
+ ...
66
+
67
+ @abstractmethod
68
+ def log_new_agent(self, agent: ConversableAgent, init_args: dict[str, Any]) -> None:
69
+ """Log the birth of a new agent.
70
+
71
+ Args:
72
+ agent (ConversableAgent): The agent to log.
73
+ init_args (dict): The arguments passed to the construct the conversable agent
74
+ """
75
+ ...
76
+
77
+ @abstractmethod
78
+ def log_event(self, source: str | Agent, name: str, **kwargs: dict[str, Any]) -> None:
79
+ """Log an event for an agent.
80
+
81
+ Args:
82
+ source (str or Agent): The source/creator of the event as a string name or an Agent instance
83
+ name (str): The name of the event
84
+ kwargs (dict): The event information to log
85
+ """
86
+ ...
87
+
88
+ @abstractmethod
89
+ def log_new_wrapper(self, wrapper: OpenAIWrapper, init_args: dict[str, LLMConfig | list[LLMConfig]]) -> None:
90
+ """Log the birth of a new OpenAIWrapper.
91
+
92
+ Args:
93
+ wrapper (OpenAIWrapper): The wrapper to log.
94
+ init_args (dict): The arguments passed to the construct the wrapper
95
+ """
96
+ ...
97
+
98
+ @abstractmethod
99
+ def log_new_client(self, client: AzureOpenAI | OpenAI, wrapper: OpenAIWrapper, init_args: dict[str, Any]) -> None:
100
+ """Log the birth of a new OpenAIWrapper.
101
+
102
+ Args:
103
+ client: The client to log.
104
+ wrapper: The wrapper that created the client.
105
+ init_args: The arguments passed to the construct the client.
106
+ """
107
+ ...
108
+
109
+ @abstractmethod
110
+ def log_function_use(self, source: str | Agent, function: F, args: dict[str, Any], returns: Any) -> None:
111
+ """Log the use of a registered function (could be a tool)
112
+
113
+ Args:
114
+ source (str or Agent): The source/creator of the event as a string name or an Agent instance
115
+ function (F): The function information
116
+ args (dict): The function args to log
117
+ returns (any): The return
118
+ """
119
+
120
+ @abstractmethod
121
+ def stop(self) -> None:
122
+ """Close the connection to the logging database, and stop logging."""
123
+ ...
124
+
125
+ @abstractmethod
126
+ def get_connection(self) -> None | sqlite3.Connection:
127
+ """Return a connection to the logging database."""
128
+ ...