ag2 0.9.1a1__py3-none-any.whl → 0.9.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ag2 might be problematic. Click here for more details.

Files changed (371) hide show
  1. {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info}/METADATA +272 -75
  2. ag2-0.9.2.dist-info/RECORD +406 -0
  3. {ag2-0.9.1a1.dist-info → ag2-0.9.2.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 +4023 -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 +1013 -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 +179 -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 +382 -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/__main__.py +78 -0
  277. autogen/mcp/mcp_client.py +208 -0
  278. autogen/mcp/mcp_proxy/__init__.py +19 -0
  279. autogen/mcp/mcp_proxy/fastapi_code_generator_helpers.py +63 -0
  280. autogen/mcp/mcp_proxy/mcp_proxy.py +581 -0
  281. autogen/mcp/mcp_proxy/operation_grouping.py +158 -0
  282. autogen/mcp/mcp_proxy/operation_renaming.py +114 -0
  283. autogen/mcp/mcp_proxy/patch_fastapi_code_generator.py +98 -0
  284. autogen/mcp/mcp_proxy/security.py +400 -0
  285. autogen/mcp/mcp_proxy/security_schema_visitor.py +37 -0
  286. autogen/messages/__init__.py +7 -0
  287. autogen/messages/agent_messages.py +948 -0
  288. autogen/messages/base_message.py +107 -0
  289. autogen/messages/client_messages.py +171 -0
  290. autogen/messages/print_message.py +49 -0
  291. autogen/oai/__init__.py +53 -0
  292. autogen/oai/anthropic.py +714 -0
  293. autogen/oai/bedrock.py +628 -0
  294. autogen/oai/cerebras.py +299 -0
  295. autogen/oai/client.py +1444 -0
  296. autogen/oai/client_utils.py +169 -0
  297. autogen/oai/cohere.py +479 -0
  298. autogen/oai/gemini.py +998 -0
  299. autogen/oai/gemini_types.py +155 -0
  300. autogen/oai/groq.py +305 -0
  301. autogen/oai/mistral.py +303 -0
  302. autogen/oai/oai_models/__init__.py +11 -0
  303. autogen/oai/oai_models/_models.py +16 -0
  304. autogen/oai/oai_models/chat_completion.py +87 -0
  305. autogen/oai/oai_models/chat_completion_audio.py +32 -0
  306. autogen/oai/oai_models/chat_completion_message.py +86 -0
  307. autogen/oai/oai_models/chat_completion_message_tool_call.py +37 -0
  308. autogen/oai/oai_models/chat_completion_token_logprob.py +63 -0
  309. autogen/oai/oai_models/completion_usage.py +60 -0
  310. autogen/oai/ollama.py +643 -0
  311. autogen/oai/openai_utils.py +881 -0
  312. autogen/oai/together.py +370 -0
  313. autogen/retrieve_utils.py +491 -0
  314. autogen/runtime_logging.py +160 -0
  315. autogen/token_count_utils.py +267 -0
  316. autogen/tools/__init__.py +20 -0
  317. autogen/tools/contrib/__init__.py +9 -0
  318. autogen/tools/contrib/time/__init__.py +7 -0
  319. autogen/tools/contrib/time/time.py +41 -0
  320. autogen/tools/dependency_injection.py +254 -0
  321. autogen/tools/experimental/__init__.py +48 -0
  322. autogen/tools/experimental/browser_use/__init__.py +7 -0
  323. autogen/tools/experimental/browser_use/browser_use.py +161 -0
  324. autogen/tools/experimental/crawl4ai/__init__.py +7 -0
  325. autogen/tools/experimental/crawl4ai/crawl4ai.py +153 -0
  326. autogen/tools/experimental/deep_research/__init__.py +7 -0
  327. autogen/tools/experimental/deep_research/deep_research.py +328 -0
  328. autogen/tools/experimental/duckduckgo/__init__.py +7 -0
  329. autogen/tools/experimental/duckduckgo/duckduckgo_search.py +109 -0
  330. autogen/tools/experimental/google/__init__.py +14 -0
  331. autogen/tools/experimental/google/authentication/__init__.py +11 -0
  332. autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
  333. autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
  334. autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
  335. autogen/tools/experimental/google/drive/__init__.py +9 -0
  336. autogen/tools/experimental/google/drive/drive_functions.py +124 -0
  337. autogen/tools/experimental/google/drive/toolkit.py +88 -0
  338. autogen/tools/experimental/google/model.py +17 -0
  339. autogen/tools/experimental/google/toolkit_protocol.py +19 -0
  340. autogen/tools/experimental/google_search/__init__.py +8 -0
  341. autogen/tools/experimental/google_search/google_search.py +93 -0
  342. autogen/tools/experimental/google_search/youtube_search.py +181 -0
  343. autogen/tools/experimental/messageplatform/__init__.py +17 -0
  344. autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
  345. autogen/tools/experimental/messageplatform/discord/discord.py +288 -0
  346. autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
  347. autogen/tools/experimental/messageplatform/slack/slack.py +391 -0
  348. autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
  349. autogen/tools/experimental/messageplatform/telegram/telegram.py +275 -0
  350. autogen/tools/experimental/perplexity/__init__.py +7 -0
  351. autogen/tools/experimental/perplexity/perplexity_search.py +260 -0
  352. autogen/tools/experimental/reliable/__init__.py +10 -0
  353. autogen/tools/experimental/reliable/reliable.py +1316 -0
  354. autogen/tools/experimental/tavily/__init__.py +7 -0
  355. autogen/tools/experimental/tavily/tavily_search.py +183 -0
  356. autogen/tools/experimental/web_search_preview/__init__.py +7 -0
  357. autogen/tools/experimental/web_search_preview/web_search_preview.py +114 -0
  358. autogen/tools/experimental/wikipedia/__init__.py +7 -0
  359. autogen/tools/experimental/wikipedia/wikipedia.py +287 -0
  360. autogen/tools/function_utils.py +411 -0
  361. autogen/tools/tool.py +187 -0
  362. autogen/tools/toolkit.py +86 -0
  363. autogen/types.py +29 -0
  364. autogen/version.py +7 -0
  365. templates/client_template/main.jinja2 +69 -0
  366. templates/config_template/config.jinja2 +7 -0
  367. templates/main.jinja2 +61 -0
  368. ag2-0.9.1a1.dist-info/RECORD +0 -6
  369. ag2-0.9.1a1.dist-info/top_level.txt +0 -1
  370. {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info/licenses}/LICENSE +0 -0
  371. {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info/licenses}/NOTICE.md +0 -0
@@ -0,0 +1,329 @@
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 logging
6
+ import os
7
+ from pathlib import Path
8
+ from typing import TYPE_CHECKING, Any, Callable, Optional, Sequence, Union
9
+
10
+ from autogen.agentchat.contrib.vectordb.base import VectorDBFactory
11
+ from autogen.agentchat.contrib.vectordb.mongodb import MongoDBAtlasVectorDB
12
+ from autogen.doc_utils import export_module
13
+ from autogen.import_utils import optional_import_block, require_optional_import
14
+
15
+ with optional_import_block():
16
+ from llama_index.core import SimpleDirectoryReader, StorageContext, VectorStoreIndex
17
+ from llama_index.core.embeddings import BaseEmbedding
18
+ from llama_index.core.schema import Document as LlamaDocument
19
+ from llama_index.llms.langchain.base import LLM
20
+ from llama_index.llms.openai import OpenAI
21
+ from llama_index.vector_stores.mongodb import MongoDBAtlasVectorSearch
22
+ from pymongo import MongoClient
23
+ from sentence_transformers import SentenceTransformer
24
+
25
+ __all__ = ["MongoDBQueryEngine"]
26
+
27
+ DEFAULT_COLLECTION_NAME = "docling-parsed-docs"
28
+ EMPTY_RESPONSE_TEXT = "Empty Response" # Indicates that the query did not return any results
29
+ EMPTY_RESPONSE_REPLY = "Sorry, I couldn't find any information on that. If you haven't ingested any documents, please try that." # Default response for queries without results
30
+
31
+ # Set up logging
32
+ logging.basicConfig(level=logging.INFO)
33
+ logging.getLogger("httpx").setLevel(logging.WARNING)
34
+ logger = logging.getLogger(__name__)
35
+
36
+
37
+ @require_optional_import(["pymongo", "llama_index", "sentence_transformers"], "rag")
38
+ @export_module("autogen.agentchat.contrib.rag")
39
+ class MongoDBQueryEngine:
40
+ """
41
+ A query engine backed by MongoDB Atlas that supports document insertion and querying.
42
+
43
+ This engine initializes a vector database, builds an index from input documents,
44
+ and allows querying using the chat engine interface.
45
+
46
+ Attributes:
47
+ vector_db (MongoDBAtlasVectorDB): The MongoDB vector database instance.
48
+ vector_search_engine (MongoDBAtlasVectorSearch): The vector search engine.
49
+ storage_context (StorageContext): The storage context for the vector store.
50
+ index (Optional[VectorStoreIndex]): The index built from the documents.
51
+ """
52
+
53
+ def __init__( # type: ignore[no-any-unimported]
54
+ self,
55
+ connection_string: str,
56
+ llm: Optional["LLM"] = None,
57
+ database_name: Optional[str] = None,
58
+ embedding_function: Optional[Union["BaseEmbedding", Callable[..., Any]]] = None, # type: ignore[type-arg]
59
+ embedding_model: Optional[Union["BaseEmbedding", str]] = None,
60
+ collection_name: Optional[str] = None,
61
+ ):
62
+ """
63
+ Initializes a MongoDBQueryEngine instance.
64
+
65
+ Args:
66
+ connection_string (str): Connection string used to connect to MongoDB.
67
+ llm (Optional[LLM]): Language model for querying. Defaults to an OpenAI model if not provided.
68
+ database_name (Optional[str]): Name of the MongoDB database.
69
+ embedding_function (Optional[Union["BaseEmbedding", Callable[..., Any]]]): Custom embedding function. If None (default),
70
+ defaults to SentenceTransformer encoding.
71
+ embedding_model (Optional[Union["BaseEmbedding", str]]): Embedding model identifier or instance. If None (default),
72
+ "local:all-MiniLM-L6-v2" will be used.
73
+ collection_name (Optional[str]): Name of the MongoDB collection. If None (default), `DEFAULT_COLLECTION_NAME` will be used.
74
+
75
+ Raises:
76
+ ValueError: If no connection string is provided.
77
+ """
78
+ if not connection_string:
79
+ raise ValueError("Connection string is required to connect to MongoDB.")
80
+
81
+ self.connection_string = connection_string
82
+ # ToDo: Is it okay if database_name is None?
83
+ self.database_name = database_name
84
+ self.collection_name = collection_name or DEFAULT_COLLECTION_NAME
85
+ self.llm: LLM = llm or OpenAI(model="gpt-4o", temperature=0.0) # type: ignore[no-any-unimported]
86
+ self.embedding_model = embedding_model or "local:all-MiniLM-L6-v2" # type: ignore[no-any-unimported]
87
+
88
+ # encode is a method of SentenceTransformer, so we need to use a type ignore here.
89
+ self.embedding_function = embedding_function or SentenceTransformer("all-MiniLM-L6-v2").encode # type: ignore[call-overload]
90
+
91
+ # These will be initialized later.
92
+ self.vector_db: Optional[MongoDBAtlasVectorDB] = None
93
+ self.vector_search_engine: Optional["MongoDBAtlasVectorSearch"] = None # type: ignore[no-any-unimported]
94
+ self.storage_context: Optional["StorageContext"] = None # type: ignore[no-any-unimported]
95
+ self.index: Optional[VectorStoreIndex] = None # type: ignore[no-any-unimported]
96
+
97
+ def _set_up(self, overwrite: bool) -> None:
98
+ """
99
+ Sets up the MongoDB vector database, search engine, and storage context.
100
+
101
+ This method initializes the vector database using the provided connection details,
102
+ creates a vector search engine instance, and sets the storage context for indexing.
103
+
104
+ Args:
105
+ overwrite (bool): Flag indicating whether to overwrite the existing collection.
106
+ """
107
+ logger.info("Setting up the database.")
108
+ self.vector_db: MongoDBAtlasVectorDB = VectorDBFactory.create_vector_db( # type: ignore[assignment, no-redef]
109
+ db_type="mongodb",
110
+ connection_string=self.connection_string,
111
+ database_name=self.database_name,
112
+ embedding_function=self.embedding_function,
113
+ collection_name=self.collection_name,
114
+ overwrite=overwrite, # new parameter to control creation behavior
115
+ )
116
+ logger.info("Vector database created.")
117
+ self.vector_search_engine = MongoDBAtlasVectorSearch(
118
+ mongodb_client=self.vector_db.client, # type: ignore[union-attr]
119
+ db_name=self.database_name,
120
+ collection_name=self.collection_name,
121
+ )
122
+ logger.info("Vector search engine created.")
123
+ self.storage_context = StorageContext.from_defaults(vector_store=self.vector_search_engine)
124
+
125
+ def _check_existing_collection(self) -> bool:
126
+ """
127
+ Checks if the specified collection exists in the MongoDB database.
128
+
129
+ Returns:
130
+ bool: True if the collection exists; False otherwise.
131
+ """
132
+ client: "MongoClient[Any]" = MongoClient(self.connection_string) # type: ignore[no-any-unimported]
133
+ db = client[self.database_name] # type: ignore[index]
134
+ return self.collection_name in db.list_collection_names()
135
+
136
+ def connect_db(self, *args: Any, **kwargs: Any) -> bool:
137
+ """
138
+ Connects to the MongoDB database and initializes the query index from the existing collection.
139
+
140
+ This method verifies the existence of the collection, sets up the database connection,
141
+ builds the vector store index, and pings the MongoDB server.
142
+
143
+ Returns:
144
+ bool: True if connection is successful; False otherwise.
145
+ """
146
+ try:
147
+ # Check if the target collection exists.
148
+ if not self._check_existing_collection():
149
+ raise ValueError(
150
+ f"Collection '{self.collection_name}' not found in database '{self.database_name}'. "
151
+ "Please run init_db to create a new collection."
152
+ )
153
+ # Reinitialize without overwriting the existing collection.
154
+ self._set_up(overwrite=False)
155
+
156
+ self.index = VectorStoreIndex.from_vector_store(
157
+ vector_store=self.vector_search_engine, # type: ignore[arg-type]
158
+ storage_context=self.storage_context,
159
+ embed_model=self.embedding_model,
160
+ )
161
+
162
+ self.vector_db.client.admin.command("ping") # type: ignore[union-attr]
163
+ logger.info("Connected to MongoDB successfully.")
164
+ return True
165
+ except Exception as error:
166
+ logger.error("Failed to connect to MongoDB: %s", error)
167
+ return False
168
+
169
+ def init_db(
170
+ self,
171
+ new_doc_dir: Optional[Union[Path, str]] = None,
172
+ new_doc_paths_or_urls: Optional[Sequence[Union[Path, str]]] = None,
173
+ *args: Any,
174
+ **kwargs: Any,
175
+ ) -> bool:
176
+ """
177
+ Initializes the MongoDB database by creating or overwriting the collection and indexing documents.
178
+
179
+ This method loads documents from a directory or provided file paths, sets up the database (optionally
180
+ overwriting any existing collection), builds the vector store index, and inserts the documents.
181
+
182
+ Args:
183
+ new_doc_dir (Optional[Union[Path, str]]): Directory containing documents to be indexed.
184
+ new_doc_paths_or_urls (Optional[Sequence[Union[Path, str]]]): List of file paths or URLs for documents.
185
+ *args (Any): Additional positional arguments.
186
+ **kwargs (Any): Additional keyword arguments.
187
+
188
+ Returns:
189
+ bool: True if the database is successfully initialized; False otherwise.
190
+ """
191
+ try:
192
+ # Check if the collection already exists.
193
+ if self._check_existing_collection():
194
+ logger.warning(
195
+ f"Collection '{self.collection_name}' already exists in database '{self.database_name}'. "
196
+ "Please use connect_db to connect to the existing collection or use init_db to overwrite it."
197
+ )
198
+ # Set up the database with overwriting.
199
+ self._set_up(overwrite=True)
200
+ self.vector_db.client.admin.command("ping") # type: ignore[union-attr]
201
+ # Gather document paths.
202
+ logger.info("Setting up the database with existing collection.")
203
+ documents = self._load_doc(input_dir=new_doc_dir, input_docs=new_doc_paths_or_urls)
204
+ self.index = VectorStoreIndex.from_vector_store(
205
+ vector_store=self.vector_search_engine, # type: ignore[arg-type]
206
+ storage_context=self.storage_context,
207
+ embed_model=self.embedding_model,
208
+ )
209
+ for doc in documents:
210
+ self.index.insert(doc)
211
+ logger.info("Database initialized with %d documents.", len(documents))
212
+ return True
213
+ except Exception as e:
214
+ logger.error("Failed to initialize the database: %s", e)
215
+ return False
216
+
217
+ def _validate_query_index(self) -> None:
218
+ """
219
+ Validates that the query index is initialized.
220
+
221
+ Raises:
222
+ Exception: If the query index is not initialized.
223
+ """
224
+ if not hasattr(self, "index"):
225
+ raise Exception("Query index is not initialized. Please call init_db or connect_db first.")
226
+
227
+ def _load_doc( # type: ignore[no-any-unimported]
228
+ self, input_dir: Optional[Union[Path, str]], input_docs: Optional[Sequence[Union[Path, str]]]
229
+ ) -> Sequence["LlamaDocument"]:
230
+ """
231
+ Loads documents from a directory or a list of file paths.
232
+
233
+ Args:
234
+ input_dir (Optional[Union[Path, str]]): Directory from which to load documents.
235
+ input_docs (Optional[Sequence[Union[Path, str]]]): List of document file paths or URLs.
236
+
237
+ Returns:
238
+ Sequence[LlamaDocument]: A sequence of loaded LlamaDocument objects.
239
+
240
+ Raises:
241
+ ValueError: If the input directory or any specified document file does not exist.
242
+ """
243
+ loaded_documents = []
244
+ if input_dir:
245
+ logger.info("Loading docs from directory: %s", input_dir)
246
+ if not os.path.exists(input_dir):
247
+ raise ValueError(f"Input directory not found: {input_dir}")
248
+ loaded_documents.extend(SimpleDirectoryReader(input_dir=input_dir).load_data())
249
+
250
+ if input_docs:
251
+ for doc in input_docs:
252
+ logger.info("Loading input doc: %s", doc)
253
+ if not os.path.exists(doc):
254
+ raise ValueError(f"Document file not found: {doc}")
255
+ loaded_documents.extend(SimpleDirectoryReader(input_files=input_docs).load_data()) # type: ignore[arg-type]
256
+ if not input_dir and not input_docs:
257
+ raise ValueError("No input directory or docs provided!")
258
+
259
+ return loaded_documents
260
+
261
+ def add_docs(
262
+ self,
263
+ new_doc_dir: Optional[Union[Path, str]] = None,
264
+ new_doc_paths_or_urls: Optional[Sequence[Union[Path, str]]] = None,
265
+ *args: Any,
266
+ **kwargs: Any,
267
+ ) -> None:
268
+ """
269
+ Adds new documents to the existing vector store index.
270
+
271
+ This method validates that the index exists, loads documents from the specified directory or file paths,
272
+ and inserts them into the vector store index.
273
+
274
+ Args:
275
+ new_doc_dir (Optional[Union[Path, str]]): Directory containing new documents.
276
+ new_doc_paths_or_urls (Optional[Sequence[Union[Path, str]]]): List of file paths or URLs for new documents.
277
+ *args (Any): Additional positional arguments.
278
+ **kwargs (Any): Additional keyword arguments.
279
+ """
280
+ self._validate_query_index()
281
+ documents = self._load_doc(input_dir=new_doc_dir, input_docs=new_doc_paths_or_urls)
282
+ for doc in documents:
283
+ self.index.insert(doc) # type: ignore[union-attr]
284
+
285
+ def query(self, question: str, *args: Any, **kwargs: Any) -> Any: # type: ignore[no-any-unimported, type-arg]
286
+ """
287
+ Queries the indexed documents using the provided question.
288
+
289
+ This method validates that the query index is initialized, creates a query engine from the vector store index,
290
+ and executes the query. If the response is empty, a default reply is returned.
291
+
292
+ Args:
293
+ question (str): The query question.
294
+ args (Any): Additional positional arguments.
295
+ kwargs (Any): Additional keyword arguments.
296
+
297
+ Returns:
298
+ Any: The query response as a string, or a default reply if no results are found.
299
+ """
300
+ self._validate_query_index()
301
+ self.query_engine = self.index.as_query_engine(llm=self.llm) # type: ignore[union-attr]
302
+ response = self.query_engine.query(question)
303
+
304
+ if str(response) == EMPTY_RESPONSE_TEXT:
305
+ return EMPTY_RESPONSE_REPLY
306
+
307
+ return str(response)
308
+
309
+ def get_collection_name(self) -> str:
310
+ """
311
+ Retrieves the name of the MongoDB collection.
312
+
313
+ Returns:
314
+ str: The collection name.
315
+
316
+ Raises:
317
+ ValueError: If the collection name is not set.
318
+ """
319
+ if self.collection_name:
320
+ return self.collection_name
321
+ else:
322
+ raise ValueError("Collection name not set.")
323
+
324
+
325
+ if TYPE_CHECKING:
326
+ from .query_engine import RAGQueryEngine
327
+
328
+ def _check_implement_protocol(o: MongoDBQueryEngine) -> RAGQueryEngine:
329
+ return o
@@ -0,0 +1,74 @@
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 pathlib import Path
6
+ from typing import Any, Optional, Protocol, Sequence, Union, runtime_checkable
7
+
8
+ from ....doc_utils import export_module
9
+
10
+ __all__ = ["RAGQueryEngine"]
11
+
12
+
13
+ @export_module("autogen.agentchat.contrib.rag")
14
+ @runtime_checkable
15
+ class RAGQueryEngine(Protocol):
16
+ """A protocol class that represents a document ingestation and query engine on top of an underlying database.
17
+
18
+ This interface defines the basic methods for RAG.
19
+ """
20
+
21
+ def init_db(
22
+ self,
23
+ new_doc_dir: Optional[Union[Path, str]] = None,
24
+ new_doc_paths_or_urls: Optional[Sequence[Union[Path, str]]] = None,
25
+ *args: Any,
26
+ **kwargs: Any,
27
+ ) -> bool:
28
+ """Initialize the database with the input documents or records.
29
+
30
+ This method initializes database with the input documents or records.
31
+ Usually, it takes the following steps:
32
+ 1. connecting to a database.
33
+ 2. insert records
34
+ 3. build indexes etc.
35
+
36
+ Args:
37
+ new_doc_dir (Optional[Union[Path, str]]): A directory containing documents to be ingested.
38
+ new_doc_paths_or_urls (Optional[Sequence[Union[Path, str]]]): A list of paths or URLs to documents to be ingested.
39
+ *args: Any additional arguments
40
+ **kwargs: Any additional keyword arguments
41
+ Returns:
42
+ bool: True if initialization is successful, False otherwise
43
+ """
44
+ ...
45
+
46
+ def add_docs(
47
+ self,
48
+ new_doc_dir: Optional[Union[Path, str]] = None,
49
+ new_doc_paths_or_urls: Optional[Sequence[Union[Path, str]]] = None,
50
+ *args: Any,
51
+ **kwargs: Any,
52
+ ) -> None:
53
+ """Add new documents to the underlying data store."""
54
+ ...
55
+
56
+ def connect_db(self, *args: Any, **kwargs: Any) -> bool:
57
+ """Connect to the database.
58
+ Args:
59
+ *args: Any additional arguments
60
+ **kwargs: Any additional keyword arguments
61
+ Returns:
62
+ bool: True if connection is successful, False otherwise
63
+ """
64
+ ...
65
+
66
+ def query(self, question: str, *args: Any, **kwargs: Any) -> str:
67
+ """Transform a string format question into database query and return the result.
68
+
69
+ Args:
70
+ question: a string format question
71
+ *args: Any additional arguments
72
+ **kwargs: Any additional keyword arguments
73
+ """
74
+ ...
@@ -0,0 +1,56 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+ import warnings
8
+ from typing import Any, Optional, Union
9
+
10
+ from ..agent import Agent
11
+ from ..assistant_agent import AssistantAgent
12
+
13
+
14
+ class RetrieveAssistantAgent(AssistantAgent):
15
+ """(Experimental) Retrieve Assistant agent, designed to solve a task with LLM.
16
+
17
+ RetrieveAssistantAgent is a subclass of AssistantAgent configured with a default system message.
18
+ The default system message is designed to solve a task with LLM,
19
+ including suggesting python code blocks and debugging.
20
+ `human_input_mode` is default to "NEVER"
21
+ and `code_execution_config` is default to False.
22
+ This agent doesn't execute code by default, and expects the user to execute the code.
23
+ """
24
+
25
+ def __init__(self, *args, **kwargs):
26
+ warnings.warn(
27
+ "The RetrieveAssistantAgent is deprecated. Please use the AssistantAgent instead.",
28
+ DeprecationWarning,
29
+ stacklevel=2,
30
+ )
31
+ super().__init__(*args, **kwargs)
32
+ self.register_reply(Agent, RetrieveAssistantAgent._generate_retrieve_assistant_reply)
33
+
34
+ def _generate_retrieve_assistant_reply(
35
+ self,
36
+ messages: Optional[list[dict[str, Any]]] = None,
37
+ sender: Optional[Agent] = None,
38
+ config: Optional[Any] = None,
39
+ ) -> tuple[bool, Optional[Union[str, dict[str, Any]]]]:
40
+ if config is None:
41
+ config = self
42
+ if messages is None:
43
+ messages = self._oai_messages[sender]
44
+ message = messages[-1]
45
+ if "exitcode: 0 (execution succeeded)" in message.get("content", ""):
46
+ # Terminate the conversation when the code execution succeeds. Although sometimes even when the
47
+ # code execution succeeds, the task is not solved, but it's hard to tell. If the human_input_mode
48
+ # of RetrieveUserProxyAgent is "TERMINATE" or "ALWAYS", user can still continue the conversation.
49
+ return True, "TERMINATE"
50
+ elif (
51
+ "UPDATE CONTEXT" in message.get("content", "")[-20:].upper()
52
+ or "UPDATE CONTEXT" in message.get("content", "")[:20].upper()
53
+ ):
54
+ return True, "UPDATE CONTEXT"
55
+ else:
56
+ return False, None