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
@@ -0,0 +1,99 @@
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
+ from abc import ABC
7
+ from typing import Annotated, Any, Callable, Literal, Optional, Union
8
+ from uuid import UUID, uuid4
9
+
10
+ from pydantic import BaseModel, Field, create_model
11
+
12
+ from ..doc_utils import export_module
13
+
14
+ __all__ = ["BaseEvent", "get_annotated_type_for_event_classes", "get_event_classes", "wrap_event"]
15
+
16
+
17
+ @export_module("autogen.events")
18
+ class BaseEvent(BaseModel, ABC):
19
+ uuid: UUID
20
+
21
+ def __init__(self, uuid: Optional[UUID] = None, **kwargs: Any) -> None:
22
+ uuid = uuid or uuid4()
23
+ super().__init__(uuid=uuid, **kwargs)
24
+
25
+ def print(self, f: Optional[Callable[..., Any]] = None) -> None:
26
+ """Print event
27
+
28
+ Args:
29
+ f (Optional[Callable[..., Any]], optional): Print function. If none, python's default print will be used.
30
+ """
31
+ ...
32
+
33
+
34
+ def camel2snake(name: str) -> str:
35
+ return "".join(["_" + i.lower() if i.isupper() else i for i in name]).lstrip("_")
36
+
37
+
38
+ _event_classes: dict[str, type[BaseModel]] = {}
39
+
40
+
41
+ @export_module("autogen.events")
42
+ def wrap_event(event_cls: type[BaseEvent]) -> type[BaseModel]:
43
+ """Wrap a event class with a type field to be used in a union type
44
+
45
+ This is needed for proper serialization and deserialization of events in a union type.
46
+
47
+ Args:
48
+ event_cls (type[BaseEvent]): Event class to wrap
49
+ """
50
+ global _event_classes
51
+
52
+ if not event_cls.__name__.endswith("Event"):
53
+ raise ValueError("Event class name must end with 'Event'")
54
+
55
+ type_name = camel2snake(event_cls.__name__)
56
+ type_name = type_name[: -len("_event")]
57
+
58
+ class WrapperBase(BaseModel):
59
+ # these types are generated dynamically so we need to disable the type checker
60
+ type: Literal[type_name] = type_name # type: ignore[valid-type]
61
+ content: event_cls # type: ignore[valid-type]
62
+
63
+ def __init__(self, *args: Any, **data: Any):
64
+ if set(data.keys()) == {"type", "content"} and "content" in data:
65
+ super().__init__(*args, **data)
66
+ else:
67
+ if "content" in data:
68
+ content = data.pop("content")
69
+ super().__init__(*args, content=event_cls(*args, **data, content=content), **data)
70
+ else:
71
+ super().__init__(content=event_cls(*args, **data), **data)
72
+
73
+ def print(self, f: Optional[Callable[..., Any]] = None) -> None:
74
+ self.content.print(f) # type: ignore[attr-defined]
75
+
76
+ wrapper_cls = create_model(event_cls.__name__, __base__=WrapperBase)
77
+
78
+ # Preserve the original class's docstring and other attributes
79
+ wrapper_cls.__doc__ = event_cls.__doc__
80
+ wrapper_cls.__module__ = event_cls.__module__
81
+
82
+ # Copy any other relevant attributes/metadata from the original class
83
+ if hasattr(event_cls, "__annotations__"):
84
+ wrapper_cls.__annotations__ = event_cls.__annotations__
85
+
86
+ _event_classes[type_name] = wrapper_cls
87
+
88
+ return wrapper_cls
89
+
90
+
91
+ @export_module("autogen.events")
92
+ def get_annotated_type_for_event_classes() -> type[Any]:
93
+ # this is a dynamic type so we need to disable the type checker
94
+ union_type = Union[tuple(_event_classes.values())] # type: ignore[valid-type]
95
+ return Annotated[union_type, Field(discriminator="type")] # type: ignore[return-value]
96
+
97
+
98
+ def get_event_classes() -> dict[str, type[BaseModel]]:
99
+ return _event_classes
@@ -0,0 +1,167 @@
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 Any, Callable, Literal, Optional, Union
6
+ from uuid import UUID
7
+
8
+ from pydantic import BaseModel
9
+
10
+ from .base_event import BaseEvent, wrap_event
11
+
12
+ __all__ = ["UsageSummaryEvent"]
13
+
14
+
15
+ class ModelUsageSummary(BaseModel):
16
+ """Model usage summary."""
17
+
18
+ model: str
19
+ """Model name."""
20
+ completion_tokens: int
21
+ """Number of tokens used for completion."""
22
+ cost: float
23
+ """Cost of the completion."""
24
+ prompt_tokens: int
25
+ """Number of tokens used for prompt."""
26
+ total_tokens: int
27
+ """Total number of tokens used."""
28
+
29
+
30
+ class ActualUsageSummary(BaseModel):
31
+ """Actual usage summary."""
32
+
33
+ usages: Optional[list[ModelUsageSummary]] = None
34
+ """List of model usage summaries."""
35
+ total_cost: Optional[float] = None
36
+ """Total cost."""
37
+
38
+
39
+ class TotalUsageSummary(BaseModel):
40
+ """Total usage summary."""
41
+
42
+ usages: Optional[list[ModelUsageSummary]] = None
43
+ """List of model usage summaries."""
44
+ total_cost: Optional[float] = None
45
+ """Total cost."""
46
+
47
+
48
+ Mode = Literal["both", "total", "actual"]
49
+
50
+
51
+ def _change_usage_summary_format(
52
+ actual_usage_summary: Optional[dict[str, Any]] = None, total_usage_summary: Optional[dict[str, Any]] = None
53
+ ) -> dict[str, dict[str, Any]]:
54
+ summary: dict[str, Any] = {}
55
+
56
+ for usage_type, usage_summary in {"actual": actual_usage_summary, "total": total_usage_summary}.items():
57
+ if usage_summary is None:
58
+ summary[usage_type] = {"usages": None, "total_cost": None}
59
+ continue
60
+
61
+ usage_summary_altered_format: dict[str, list[dict[str, Any]]] = {"usages": []}
62
+ for k, v in usage_summary.items():
63
+ if isinstance(k, str) and isinstance(v, dict):
64
+ current_usage = {key: value for key, value in v.items()}
65
+ current_usage["model"] = k
66
+ usage_summary_altered_format["usages"].append(current_usage)
67
+ else:
68
+ usage_summary_altered_format[k] = v
69
+ summary[usage_type] = usage_summary_altered_format
70
+
71
+ return summary
72
+
73
+
74
+ @wrap_event
75
+ class UsageSummaryEvent(BaseEvent):
76
+ """Usage summary message."""
77
+
78
+ actual: ActualUsageSummary
79
+ """Actual usage summary."""
80
+ total: TotalUsageSummary
81
+ """Total usage summary."""
82
+ mode: Mode
83
+ """Mode to display the usage summary."""
84
+
85
+ def __init__(
86
+ self,
87
+ *,
88
+ uuid: Optional[UUID] = None,
89
+ actual_usage_summary: Optional[dict[str, Any]] = None,
90
+ total_usage_summary: Optional[dict[str, Any]] = None,
91
+ mode: Mode = "both",
92
+ ):
93
+ # print(f"{actual_usage_summary=}")
94
+ # print(f"{total_usage_summary=}")
95
+
96
+ summary_dict = _change_usage_summary_format(actual_usage_summary, total_usage_summary)
97
+
98
+ super().__init__(uuid=uuid, **summary_dict, mode=mode)
99
+
100
+ def _print_usage(
101
+ self,
102
+ usage_summary: Union[ActualUsageSummary, TotalUsageSummary],
103
+ usage_type: str = "total",
104
+ f: Optional[Callable[..., Any]] = None,
105
+ ) -> None:
106
+ f = f or print
107
+ word_from_type = "including" if usage_type == "total" else "excluding"
108
+ if usage_summary.usages is None or len(usage_summary.usages) == 0:
109
+ f("No actual cost incurred (all completions are using cache).", flush=True)
110
+ return
111
+
112
+ f(f"Usage summary {word_from_type} cached usage: ", flush=True)
113
+ f(f"Total cost: {round(usage_summary.total_cost, 5)}", flush=True) # type: ignore [arg-type]
114
+
115
+ for usage in usage_summary.usages:
116
+ f(
117
+ f"* Model '{usage.model}': cost: {round(usage.cost, 5)}, prompt_tokens: {usage.prompt_tokens}, completion_tokens: {usage.completion_tokens}, total_tokens: {usage.total_tokens}",
118
+ flush=True,
119
+ )
120
+
121
+ def print(self, f: Optional[Callable[..., Any]] = None) -> None:
122
+ f = f or print
123
+
124
+ if self.total.usages is None:
125
+ f('No usage summary. Please call "create" first.', flush=True)
126
+ return
127
+
128
+ f("-" * 100, flush=True)
129
+ if self.mode == "both":
130
+ self._print_usage(self.actual, "actual", f)
131
+ f()
132
+ if self.total.model_dump_json() != self.actual.model_dump_json():
133
+ self._print_usage(self.total, "total", f)
134
+ else:
135
+ f(
136
+ "All completions are non-cached: the total cost with cached completions is the same as actual cost.",
137
+ flush=True,
138
+ )
139
+ elif self.mode == "total":
140
+ self._print_usage(self.total, "total", f)
141
+ elif self.mode == "actual":
142
+ self._print_usage(self.actual, "actual", f)
143
+ else:
144
+ raise ValueError(f'Invalid mode: {self.mode}, choose from "actual", "total", ["actual", "total"]')
145
+ f("-" * 100, flush=True)
146
+
147
+
148
+ @wrap_event
149
+ class StreamEvent(BaseEvent):
150
+ """Stream event."""
151
+
152
+ content: str
153
+ """Content of the event."""
154
+
155
+ def __init__(self, *, uuid: Optional[UUID] = None, content: str) -> None:
156
+ super().__init__(uuid=uuid, content=content)
157
+
158
+ def print(self, f: Optional[Callable[..., Any]] = None) -> None:
159
+ f = f or print
160
+
161
+ # Set the terminal text color to green
162
+ f("\033[32m", end="")
163
+
164
+ f(self.content, end="", flush=True)
165
+
166
+ # Reset the terminal text color
167
+ f("\033[0m\n")
@@ -0,0 +1,36 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ import logging
5
+ from functools import wraps
6
+ from typing import Callable
7
+
8
+ from pydantic import BaseModel
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ def deprecated_by(
14
+ new_class: type[BaseModel],
15
+ param_mapping: dict[str, str] = None,
16
+ ) -> Callable[[type[BaseModel]], Callable[..., BaseModel]]:
17
+ param_mapping = param_mapping or {}
18
+
19
+ def decorator(
20
+ old_class: type[BaseModel],
21
+ param_mapping: dict[str, str] = param_mapping,
22
+ ) -> Callable[..., BaseModel]:
23
+ @wraps(old_class)
24
+ def wrapper(*args, **kwargs) -> BaseModel:
25
+ logger.warning(
26
+ f"{old_class.__name__} is deprecated by {new_class.__name__}. Please import it from {new_class.__module__} and use it instead."
27
+ )
28
+ # Translate old parameters to new parameters
29
+ new_kwargs = {param_mapping.get(k, k): v for k, v in kwargs.items()}
30
+
31
+ # Pass the translated parameters to the new class
32
+ return new_class(*args, **new_kwargs)
33
+
34
+ return wrapper
35
+
36
+ return decorator
@@ -0,0 +1,46 @@
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 json
7
+ from typing import Any, Callable, Optional
8
+ from uuid import UUID
9
+
10
+ from .base_event import BaseEvent, wrap_event
11
+
12
+
13
+ @wrap_event
14
+ class PrintEvent(BaseEvent):
15
+ """Print message"""
16
+
17
+ objects: list[str]
18
+ """List of objects to print"""
19
+ sep: str
20
+ """Separator between objects"""
21
+ end: str
22
+ """End of the print"""
23
+
24
+ def __init__(
25
+ self, *objects: Any, sep: str = " ", end: str = "\n", flush: bool = False, uuid: Optional[UUID] = None
26
+ ):
27
+ objects_as_string = [self._to_json(x) for x in objects]
28
+
29
+ super().__init__(uuid=uuid, objects=objects_as_string, sep=sep, end=end)
30
+
31
+ def _to_json(self, obj: Any) -> str:
32
+ if isinstance(obj, str):
33
+ return obj
34
+
35
+ if hasattr(obj, "model_dump_json"):
36
+ return obj.model_dump_json() # type: ignore [no-any-return]
37
+ try:
38
+ return json.dumps(obj)
39
+ except Exception:
40
+ return str(obj)
41
+ # return repr(obj)
42
+
43
+ def print(self, f: Optional[Callable[..., Any]] = None) -> None:
44
+ f = f or print
45
+
46
+ f(*self.objects, sep=self.sep, end=self.end, flush=True)
@@ -0,0 +1,73 @@
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
8
+
9
+ from .doc_utils import export_module
10
+
11
+ __all__ = [
12
+ "AgentNameConflictError",
13
+ "InvalidCarryOverTypeError",
14
+ "ModelToolNotSupportedError",
15
+ "NoEligibleSpeakerError",
16
+ "SenderRequiredError",
17
+ "UndefinedNextAgentError",
18
+ ]
19
+
20
+
21
+ @export_module("autogen")
22
+ class AgentNameConflictError(Exception): # noqa: N818
23
+ def __init__(self, msg: str = "Found multiple agents with the same name.", *args: Any, **kwargs: Any):
24
+ super().__init__(msg, *args, **kwargs)
25
+
26
+
27
+ @export_module("autogen")
28
+ class NoEligibleSpeakerError(Exception): # noqa: N818
29
+ """Exception raised for early termination of a GroupChat."""
30
+
31
+ def __init__(self, message: str = "No eligible speakers."):
32
+ self.message = message
33
+ super().__init__(self.message)
34
+
35
+
36
+ @export_module("autogen")
37
+ class SenderRequiredError(Exception): # noqa: N818
38
+ """Exception raised when the sender is required but not provided."""
39
+
40
+ def __init__(self, message: str = "Sender is required but not provided."):
41
+ self.message = message
42
+ super().__init__(self.message)
43
+
44
+
45
+ @export_module("autogen")
46
+ class InvalidCarryOverTypeError(Exception): # noqa: N818
47
+ """Exception raised when the carryover type is invalid."""
48
+
49
+ def __init__(
50
+ self, message: str = "Carryover should be a string or a list of strings. Not adding carryover to the message."
51
+ ):
52
+ self.message = message
53
+ super().__init__(self.message)
54
+
55
+
56
+ @export_module("autogen")
57
+ class UndefinedNextAgentError(Exception): # noqa: N818
58
+ """Exception raised when the provided next agents list does not overlap with agents in the group."""
59
+
60
+ def __init__(self, message: str = "The provided agents list does not overlap with agents in the group."):
61
+ self.message = message
62
+ super().__init__(self.message)
63
+
64
+
65
+ class ModelToolNotSupportedError(Exception):
66
+ """Exception raised when attempting to use tools with models that do not support them."""
67
+
68
+ def __init__(
69
+ self,
70
+ model: str,
71
+ ):
72
+ self.message = f"Tools are not supported with {model} models. Refer to the documentation at https://platform.openai.com/docs/guides/reasoning#limitations"
73
+ super().__init__(self.message)
@@ -0,0 +1,5 @@
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
+ __all__: list[str] = []
@@ -0,0 +1,16 @@
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/https://github.com/Lancetnik/FastDepends are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+
8
+ from .dependencies import Provider, dependency_provider
9
+ from .use import Depends, inject
10
+
11
+ __all__ = (
12
+ "Depends",
13
+ "Provider",
14
+ "dependency_provider",
15
+ "inject",
16
+ )
@@ -0,0 +1,80 @@
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/https://github.com/Lancetnik/FastDepends are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+
8
+ import sys
9
+ from importlib.metadata import version as get_version
10
+ from typing import Any, Dict, Optional, Tuple, Type
11
+
12
+ from pydantic import BaseModel, create_model
13
+ from pydantic.version import VERSION as PYDANTIC_VERSION
14
+
15
+ __all__ = (
16
+ "PYDANTIC_V2",
17
+ "BaseModel",
18
+ "ConfigDict",
19
+ "ExceptionGroup",
20
+ "create_model",
21
+ "evaluate_forwardref",
22
+ "get_config_base",
23
+ )
24
+
25
+
26
+ PYDANTIC_V2 = PYDANTIC_VERSION.startswith("2.")
27
+
28
+ default_pydantic_config = {"arbitrary_types_allowed": True}
29
+
30
+ evaluate_forwardref: Any
31
+ # isort: off
32
+ if PYDANTIC_V2:
33
+ from pydantic import ConfigDict
34
+ from pydantic._internal._typing_extra import ( # type: ignore[no-redef]
35
+ eval_type_lenient as evaluate_forwardref,
36
+ )
37
+
38
+ def model_schema(model: Type[BaseModel]) -> Dict[str, Any]:
39
+ return model.model_json_schema()
40
+
41
+ def get_config_base(config_data: Optional[ConfigDict] = None) -> ConfigDict:
42
+ return config_data or ConfigDict(**default_pydantic_config) # type: ignore[typeddict-item]
43
+
44
+ def get_aliases(model: Type[BaseModel]) -> Tuple[str, ...]:
45
+ return tuple(f.alias or name for name, f in model.model_fields.items())
46
+
47
+ class CreateBaseModel(BaseModel):
48
+ """Just to support FastStream < 0.3.7."""
49
+
50
+ model_config = ConfigDict(arbitrary_types_allowed=True)
51
+
52
+ else:
53
+ from pydantic.typing import evaluate_forwardref as evaluate_forwardref # type: ignore[no-redef]
54
+ from pydantic.config import get_config, ConfigDict, BaseConfig
55
+
56
+ def get_config_base(config_data: Optional[ConfigDict] = None) -> Type[BaseConfig]: # type: ignore[misc,no-any-unimported]
57
+ return get_config(config_data or ConfigDict(**default_pydantic_config)) # type: ignore[typeddict-item,no-any-unimported,no-any-return]
58
+
59
+ def model_schema(model: Type[BaseModel]) -> Dict[str, Any]:
60
+ return model.schema()
61
+
62
+ def get_aliases(model: Type[BaseModel]) -> Tuple[str, ...]:
63
+ return tuple(f.alias or name for name, f in model.__fields__.items()) # type: ignore[attr-defined]
64
+
65
+ class CreateBaseModel(BaseModel): # type: ignore[no-redef]
66
+ """Just to support FastStream < 0.3.7."""
67
+
68
+ class Config:
69
+ arbitrary_types_allowed = True
70
+
71
+
72
+ ANYIO_V3 = get_version("anyio").startswith("3.")
73
+
74
+ if ANYIO_V3:
75
+ from anyio import ExceptionGroup as ExceptionGroup # type: ignore[attr-defined]
76
+ else:
77
+ if sys.version_info < (3, 11):
78
+ from exceptiongroup import ExceptionGroup as ExceptionGroup
79
+ else:
80
+ ExceptionGroup = ExceptionGroup
@@ -0,0 +1,14 @@
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/https://github.com/Lancetnik/FastDepends are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+
8
+ from .build import build_call_model
9
+ from .model import CallModel
10
+
11
+ __all__ = (
12
+ "CallModel",
13
+ "build_call_model",
14
+ )