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,261 @@
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 json
10
+ import logging
11
+ import os
12
+ import threading
13
+ import uuid
14
+ from typing import TYPE_CHECKING, Any, Callable, TypeVar
15
+
16
+ from ..doc_utils import export_module
17
+ from .base_logger import BaseLogger, LLMConfig
18
+ from .logger_utils import get_current_ts, to_dict
19
+
20
+ if TYPE_CHECKING:
21
+ from openai import AzureOpenAI, OpenAI
22
+ from openai.types.chat import ChatCompletion
23
+
24
+ from .. import Agent, ConversableAgent, OpenAIWrapper
25
+ from ..oai.anthropic import AnthropicClient
26
+ from ..oai.bedrock import BedrockClient
27
+ from ..oai.cerebras import CerebrasClient
28
+ from ..oai.cohere import CohereClient
29
+ from ..oai.gemini import GeminiClient
30
+ from ..oai.groq import GroqClient
31
+ from ..oai.mistral import MistralAIClient
32
+ from ..oai.ollama import OllamaClient
33
+ from ..oai.together import TogetherClient
34
+
35
+ logger = logging.getLogger(__name__)
36
+
37
+ F = TypeVar("F", bound=Callable[..., Any])
38
+
39
+ __all__ = ("FileLogger",)
40
+
41
+
42
+ def safe_serialize(obj: Any) -> str:
43
+ def default(o: Any) -> str:
44
+ if hasattr(o, "to_json"):
45
+ return str(o.to_json())
46
+ else:
47
+ return f"<<non-serializable: {type(o).__qualname__}>>"
48
+
49
+ return json.dumps(obj, default=default)
50
+
51
+
52
+ @export_module("autogen.logger")
53
+ class FileLogger(BaseLogger):
54
+ def __init__(self, config: dict[str, Any]):
55
+ self.config = config
56
+ self.session_id = str(uuid.uuid4())
57
+
58
+ curr_dir = os.getcwd()
59
+ self.log_dir = os.path.join(curr_dir, "autogen_logs")
60
+ os.makedirs(self.log_dir, exist_ok=True)
61
+
62
+ self.log_file = os.path.join(self.log_dir, self.config.get("filename", "runtime.log"))
63
+ try:
64
+ with open(self.log_file, "a"):
65
+ pass
66
+ except Exception as e:
67
+ logger.error(f"[file_logger] Failed to create logging file: {e}")
68
+
69
+ self.logger = logging.getLogger(__name__)
70
+ self.logger.setLevel(logging.INFO)
71
+ file_handler = logging.FileHandler(self.log_file)
72
+ self.logger.addHandler(file_handler)
73
+
74
+ def start(self) -> str:
75
+ """Start the logger and return the session_id."""
76
+ try:
77
+ self.logger.info(f"Started new session with Session ID: {self.session_id}")
78
+ except Exception as e:
79
+ logger.error(f"[file_logger] Failed to create logging file: {e}")
80
+ finally:
81
+ return self.session_id
82
+
83
+ def log_chat_completion(
84
+ self,
85
+ invocation_id: uuid.UUID,
86
+ client_id: int,
87
+ wrapper_id: int,
88
+ source: str | Agent,
89
+ request: dict[str, float | str | list[dict[str, str]]],
90
+ response: str | ChatCompletion,
91
+ is_cached: int,
92
+ cost: float,
93
+ start_time: str,
94
+ ) -> None:
95
+ """Log a chat completion."""
96
+ thread_id = threading.get_ident()
97
+ source_name = (
98
+ source
99
+ if isinstance(source, str)
100
+ else source.name
101
+ if hasattr(source, "name") and source.name is not None
102
+ else ""
103
+ )
104
+ try:
105
+ log_data = json.dumps({
106
+ "invocation_id": str(invocation_id),
107
+ "client_id": client_id,
108
+ "wrapper_id": wrapper_id,
109
+ "request": to_dict(request),
110
+ "response": str(response),
111
+ "is_cached": is_cached,
112
+ "cost": cost,
113
+ "start_time": start_time,
114
+ "end_time": get_current_ts(),
115
+ "thread_id": thread_id,
116
+ "source_name": source_name,
117
+ })
118
+
119
+ self.logger.info(log_data)
120
+ except Exception as e:
121
+ self.logger.error(f"[file_logger] Failed to log chat completion: {e}")
122
+
123
+ def log_new_agent(self, agent: ConversableAgent, init_args: dict[str, Any] = {}) -> None:
124
+ """Log a new agent instance."""
125
+ thread_id = threading.get_ident()
126
+
127
+ try:
128
+ log_data = json.dumps({
129
+ "id": id(agent),
130
+ "agent_name": agent.name if hasattr(agent, "name") and agent.name is not None else "",
131
+ "wrapper_id": to_dict(
132
+ agent.client.wrapper_id if hasattr(agent, "client") and agent.client is not None else ""
133
+ ),
134
+ "session_id": self.session_id,
135
+ "current_time": get_current_ts(),
136
+ "agent_type": type(agent).__name__,
137
+ "args": to_dict(init_args),
138
+ "thread_id": thread_id,
139
+ })
140
+ self.logger.info(log_data)
141
+ except Exception as e:
142
+ self.logger.error(f"[file_logger] Failed to log new agent: {e}")
143
+
144
+ def log_event(self, source: str | Agent, name: str, **kwargs: dict[str, Any]) -> None:
145
+ """Log an event from an agent or a string source."""
146
+ from .. import Agent
147
+
148
+ # This takes an object o as input and returns a string. If the object o cannot be serialized, instead of raising an error,
149
+ # it returns a string indicating that the object is non-serializable, along with its type's qualified name obtained using __qualname__.
150
+ json_args = json.dumps(kwargs, default=lambda o: f"<<non-serializable: {type(o).__qualname__}>>")
151
+ thread_id = threading.get_ident()
152
+
153
+ if isinstance(source, Agent):
154
+ try:
155
+ log_data = json.dumps({
156
+ "source_id": id(source),
157
+ "source_name": str(source.name) if hasattr(source, "name") else source,
158
+ "event_name": name,
159
+ "agent_module": source.__module__,
160
+ "agent_class": source.__class__.__name__,
161
+ "json_state": json_args,
162
+ "timestamp": get_current_ts(),
163
+ "thread_id": thread_id,
164
+ })
165
+ self.logger.info(log_data)
166
+ except Exception as e:
167
+ self.logger.error(f"[file_logger] Failed to log event {e}")
168
+ else:
169
+ try:
170
+ log_data = json.dumps({
171
+ "source_id": id(source),
172
+ "source_name": str(source.name) if hasattr(source, "name") else source,
173
+ "event_name": name,
174
+ "json_state": json_args,
175
+ "timestamp": get_current_ts(),
176
+ "thread_id": thread_id,
177
+ })
178
+ self.logger.info(log_data)
179
+ except Exception as e:
180
+ self.logger.error(f"[file_logger] Failed to log event {e}")
181
+
182
+ def log_new_wrapper(self, wrapper: OpenAIWrapper, init_args: dict[str, LLMConfig | list[LLMConfig]] = {}) -> None:
183
+ """Log a new wrapper instance."""
184
+ thread_id = threading.get_ident()
185
+
186
+ try:
187
+ log_data = json.dumps({
188
+ "wrapper_id": id(wrapper),
189
+ "session_id": self.session_id,
190
+ "json_state": json.dumps(init_args),
191
+ "timestamp": get_current_ts(),
192
+ "thread_id": thread_id,
193
+ })
194
+ self.logger.info(log_data)
195
+ except Exception as e:
196
+ self.logger.error(f"[file_logger] Failed to log event {e}")
197
+
198
+ def log_new_client(
199
+ self,
200
+ client: (
201
+ AzureOpenAI
202
+ | OpenAI
203
+ | CerebrasClient
204
+ | GeminiClient
205
+ | AnthropicClient
206
+ | MistralAIClient
207
+ | TogetherClient
208
+ | GroqClient
209
+ | CohereClient
210
+ | OllamaClient
211
+ | BedrockClient
212
+ ),
213
+ wrapper: OpenAIWrapper,
214
+ init_args: dict[str, Any],
215
+ ) -> None:
216
+ """Log a new client instance."""
217
+ thread_id = threading.get_ident()
218
+
219
+ try:
220
+ log_data = json.dumps({
221
+ "client_id": id(client),
222
+ "wrapper_id": id(wrapper),
223
+ "session_id": self.session_id,
224
+ "class": type(client).__name__,
225
+ "json_state": json.dumps(init_args),
226
+ "timestamp": get_current_ts(),
227
+ "thread_id": thread_id,
228
+ })
229
+ self.logger.info(log_data)
230
+ except Exception as e:
231
+ self.logger.error(f"[file_logger] Failed to log event {e}")
232
+
233
+ def log_function_use(self, source: str | Agent, function: F, args: dict[str, Any], returns: Any) -> None:
234
+ """Log a registered function(can be a tool) use from an agent or a string source."""
235
+ thread_id = threading.get_ident()
236
+
237
+ try:
238
+ log_data = json.dumps({
239
+ "source_id": id(source),
240
+ "source_name": str(source.name) if hasattr(source, "name") else source,
241
+ "agent_module": source.__module__,
242
+ "agent_class": source.__class__.__name__,
243
+ "timestamp": get_current_ts(),
244
+ "thread_id": thread_id,
245
+ "input_args": safe_serialize(args),
246
+ "returns": safe_serialize(returns),
247
+ })
248
+ self.logger.info(log_data)
249
+ except Exception as e:
250
+ self.logger.error(f"[file_logger] Failed to log event {e}")
251
+
252
+ def get_connection(self) -> None:
253
+ """Method is intentionally left blank because there is no specific connection needed for the FileLogger."""
254
+ pass
255
+
256
+ def stop(self) -> None:
257
+ """Close the file handler and remove it from the logger."""
258
+ for handler in self.logger.handlers:
259
+ if isinstance(handler, logging.FileHandler):
260
+ handler.close()
261
+ self.logger.removeHandler(handler)
@@ -0,0 +1,42 @@
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 typing import Any, Literal, Optional
8
+
9
+ from ..doc_utils import export_module
10
+ from .base_logger import BaseLogger
11
+ from .file_logger import FileLogger
12
+ from .sqlite_logger import SqliteLogger
13
+
14
+ __all__ = ("LoggerFactory",)
15
+
16
+
17
+ @export_module("autogen.logger")
18
+ class LoggerFactory:
19
+ """Factory class to create logger objects."""
20
+
21
+ @staticmethod
22
+ def get_logger(
23
+ logger_type: Literal["sqlite", "file"] = "sqlite", config: Optional[dict[str, Any]] = None
24
+ ) -> BaseLogger:
25
+ """Factory method to create logger objects.
26
+
27
+ Args:
28
+ logger_type (Literal["sqlite", "file"], optional): Type of logger. Defaults to "sqlite".
29
+ config (Optional[dict[str, Any]], optional): Configuration for logger. Defaults to None.
30
+
31
+ Returns:
32
+ BaseLogger: Logger object
33
+ """
34
+ if config is None:
35
+ config = {}
36
+
37
+ if logger_type == "sqlite":
38
+ return SqliteLogger(config)
39
+ elif logger_type == "file":
40
+ return FileLogger(config)
41
+ else:
42
+ raise ValueError(f"[logger_factory] Unknown logger type: {logger_type}")
@@ -0,0 +1,57 @@
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 inspect
8
+ from datetime import datetime, timezone
9
+ from pathlib import Path, PurePath
10
+ from typing import Any, Union
11
+
12
+ __all__ = ("get_current_ts", "to_dict")
13
+
14
+
15
+ def get_current_ts() -> str:
16
+ """Get current timestamp in UTC timezone.
17
+
18
+ Returns:
19
+ str: Current timestamp in UTC timezone
20
+ """
21
+ return datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S.%f")
22
+
23
+
24
+ def to_dict(
25
+ obj: Union[int, float, str, bool, dict[Any, Any], list[Any], tuple[Any, ...], Any],
26
+ exclude: tuple[str, ...] = (),
27
+ no_recursive: tuple[Any, ...] = (),
28
+ ) -> Any:
29
+ """Convert object to dictionary.
30
+
31
+ Args:
32
+ obj (Union[int, float, str, bool, dict[Any, Any], list[Any], tuple[Any, ...], Any]): Object to convert
33
+ exclude (tuple[str, ...], optional): Keys to exclude. Defaults to ().
34
+ no_recursive (tuple[Any, ...], optional): Types to exclude from recursive conversion. Defaults to ().
35
+ """
36
+ if isinstance(obj, (int, float, str, bool)):
37
+ return obj
38
+ elif isinstance(obj, (Path, PurePath)):
39
+ return str(obj)
40
+ elif callable(obj):
41
+ return inspect.getsource(obj).strip()
42
+ elif isinstance(obj, dict):
43
+ return {
44
+ str(k): to_dict(str(v)) if isinstance(v, no_recursive) else to_dict(v, exclude, no_recursive)
45
+ for k, v in obj.items()
46
+ if k not in exclude
47
+ }
48
+ elif isinstance(obj, (list, tuple)):
49
+ return [to_dict(str(v)) if isinstance(v, no_recursive) else to_dict(v, exclude, no_recursive) for v in obj]
50
+ elif hasattr(obj, "__dict__"):
51
+ return {
52
+ str(k): to_dict(str(v)) if isinstance(v, no_recursive) else to_dict(v, exclude, no_recursive)
53
+ for k, v in vars(obj).items()
54
+ if k not in exclude
55
+ }
56
+ else:
57
+ return obj