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,83 @@
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, Optional, Union
6
+
7
+ from .... import Agent, ConversableAgent, UserProxyAgent
8
+ from .graph_query_engine import GraphStoreQueryResult
9
+ from .graph_rag_capability import GraphRagCapability
10
+ from .neo4j_graph_query_engine import Neo4jGraphQueryEngine
11
+
12
+
13
+ class Neo4jGraphCapability(GraphRagCapability):
14
+ """The Neo4j graph capability integrates Neo4j Property graph into a graph rag agent.
15
+ Ref: https://neo4j.com/labs/genai-ecosystem/llamaindex/#_property_graph_constructing_modules
16
+
17
+
18
+ For usage, please refer to example notebook/agentchat_graph_rag_neo4j.ipynb
19
+ """
20
+
21
+ def __init__(self, query_engine: Neo4jGraphQueryEngine):
22
+ """Initialize GraphRAG capability with a graph query engine"""
23
+ self.query_engine = query_engine
24
+
25
+ def add_to_agent(self, agent: ConversableAgent) -> None:
26
+ """Add Neo4j GraphRAG capability to a UserProxyAgent.
27
+ The restriction to a UserProxyAgent to make sure the returned message only contains information retrieved from the graph DB instead of any LLMs.
28
+ """
29
+ if not isinstance(agent, UserProxyAgent):
30
+ raise Exception("Neo4j GraphRAG capability can only be added to a UserProxyAgent.")
31
+
32
+ self.graph_rag_agent = agent
33
+
34
+ # Validate the agent config
35
+ if agent.llm_config not in (None, False):
36
+ raise Exception(
37
+ "Agents with GraphRAG capabilities do not use an LLM configuration. Please set your llm_config to None or False."
38
+ )
39
+
40
+ # Register method to generate the reply using a Neo4j query
41
+ # All other reply methods will be removed
42
+ agent.register_reply(
43
+ [ConversableAgent, None], self._reply_using_neo4j_query, position=0, remove_other_reply_funcs=True
44
+ )
45
+
46
+ def _reply_using_neo4j_query(
47
+ self,
48
+ recipient: ConversableAgent,
49
+ messages: Optional[list[dict[str, Any]]] = None,
50
+ sender: Optional[Agent] = None,
51
+ config: Optional[Any] = None,
52
+ ) -> tuple[bool, Optional[Union[str, dict[str, Any]]]]:
53
+ """Query neo4j and return the message. Internally, it queries the Property graph
54
+ and returns the answer from the graph query engine.
55
+ TODO: reply with a dictionary including both the answer and semantic source triplets.
56
+
57
+ Args:
58
+ recipient: The agent instance that will receive the message.
59
+ messages: A list of messages in the conversation history with the sender.
60
+ sender: The agent instance that sent the message.
61
+ config: Optional configuration for message processing.
62
+
63
+ Returns:
64
+ A tuple containing a boolean indicating success and the assistant's reply.
65
+ """
66
+ if not messages:
67
+ return False, None
68
+
69
+ question = self._get_last_question(messages[-1])
70
+ if not question:
71
+ return False, None
72
+
73
+ result: GraphStoreQueryResult = self.query_engine.query(question) # type: ignore[arg-type]
74
+
75
+ return True, result.answer
76
+
77
+ def _get_last_question(self, message: Union[dict[str, Any], str]) -> Optional[Union[str, dict[str, Any]]]:
78
+ """Retrieves the last message from the conversation history."""
79
+ if isinstance(message, str):
80
+ return message
81
+ if isinstance(message, dict) and "content" in message:
82
+ return message["content"] # type: ignore[no-any-return]
83
+ return None
@@ -0,0 +1,210 @@
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 asyncio
6
+ import logging
7
+ from typing import List, Optional, Union
8
+
9
+ from ....import_utils import optional_import_block, require_optional_import
10
+ from .document import Document, DocumentType
11
+ from .graph_query_engine import GraphStoreQueryResult
12
+
13
+ with optional_import_block():
14
+ from neo4j import GraphDatabase
15
+ from neo4j_graphrag.embeddings import Embedder, OpenAIEmbeddings
16
+ from neo4j_graphrag.experimental.pipeline.kg_builder import SimpleKGPipeline
17
+ from neo4j_graphrag.generation import GraphRAG
18
+ from neo4j_graphrag.indexes import create_vector_index
19
+ from neo4j_graphrag.llm.openai_llm import LLMInterface, OpenAILLM
20
+ from neo4j_graphrag.retrievers import VectorRetriever
21
+
22
+ # Set up logging
23
+ logging.basicConfig(level=logging.INFO)
24
+ logging.getLogger("httpx").setLevel(logging.WARNING)
25
+ logger = logging.getLogger(__name__)
26
+
27
+
28
+ @require_optional_import(["neo4j", "neo4j_graphrag"], "neo4j")
29
+ class Neo4jNativeGraphQueryEngine:
30
+ """A graph query engine implemented using the Neo4j GraphRAG SDK.
31
+ Provides functionality to initialize a knowledge graph,
32
+ create a vector index, and query the graph using Neo4j and LLM.
33
+ """
34
+
35
+ def __init__( # type: ignore[no-any-unimported]
36
+ self,
37
+ host: str = "neo4j://localhost",
38
+ port: int = 7687,
39
+ username: str = "neo4j",
40
+ password: str = "password",
41
+ embeddings: Optional["Embedder"] = None,
42
+ embedding_dimension: Optional[int] = 3072,
43
+ llm: Optional["LLMInterface"] = None,
44
+ query_llm: Optional["LLMInterface"] = None,
45
+ entities: Optional[List[str]] = None,
46
+ relations: Optional[List[str]] = None,
47
+ potential_schema: Optional[List[tuple[str, str, str]]] = None,
48
+ ):
49
+ """Initialize a Neo4j graph query engine.
50
+
51
+ Args:
52
+ host (str): Neo4j host URL.
53
+ port (int): Neo4j port.
54
+ username (str): Neo4j username.
55
+ password (str): Neo4j password.
56
+ embeddings (Embedder): Embedding model to embed chunk data and retrieve answers.
57
+ embedding_dimension (int): Dimension of the embeddings for the model.
58
+ llm (LLMInterface): Language model for creating the knowledge graph (returns JSON responses).
59
+ query_llm (LLMInterface): Language model for querying the knowledge graph.
60
+ entities (List[str], optional): Custom entities for guiding graph construction.
61
+ relations (List[str], optional): Custom relations for guiding graph construction.
62
+ potential_schema (List[tuple[str, str, str]], optional): Schema (triplets, i.e., [entity] -> [relationship] -> [entity]) to guide graph construction.
63
+ """
64
+ self.uri = f"{host}:{port}"
65
+ self.driver = GraphDatabase.driver(self.uri, auth=(username, password))
66
+ self.embeddings = embeddings or OpenAIEmbeddings(model="text-embedding-3-large")
67
+ self.embedding_dimension = embedding_dimension
68
+ self.llm = llm or OpenAILLM(
69
+ model_name="gpt-4o",
70
+ model_params={"response_format": {"type": "json_object"}, "temperature": 0},
71
+ )
72
+ self.query_llm = query_llm or OpenAILLM(model_name="gpt-4o", model_params={"temperature": 0})
73
+ self.entities = entities
74
+ self.relations = relations
75
+ self.potential_schema = potential_schema
76
+
77
+ def init_db(self, input_doc: Optional[Union[list[Document]]] = None) -> None:
78
+ """Initialize the Neo4j graph database using the provided input doc.
79
+ Currently this method only supports single document input (only reads the first doc).
80
+
81
+ This method supports both text and PDF documents. It performs the following steps:
82
+ 1. Clears the existing database.
83
+ 2. Extracts graph nodes and relationships from the input data to build a knowledge graph.
84
+ 3. Creates a vector index for efficient retrieval.
85
+
86
+ Args:
87
+ input_doc (list[Document]): Input documents for building the graph.
88
+
89
+ Raises:
90
+ ValueError: If the input document is not provided or its type is unsupported.
91
+ """
92
+ if input_doc is None or len(input_doc) == 0:
93
+ raise ValueError("Input document is required to initialize the database.")
94
+ elif len(input_doc) > 1:
95
+ raise ValueError("Only the first document will be used to initialize the database.")
96
+
97
+ logger.info("Clearing the database...")
98
+ self._clear_db()
99
+
100
+ self._initialize_kg_builders()
101
+
102
+ self._build_graph(input_doc)
103
+
104
+ self.index_name = "vector-index-name"
105
+ logger.info(f"Creating vector index '{self.index_name}'...")
106
+ self._create_index(self.index_name)
107
+
108
+ def add_records(self, new_records: list[Document]) -> bool:
109
+ """Add new records to the Neo4j database.
110
+
111
+ Args:
112
+ new_records (list[Document]): List of new Documents to be added
113
+
114
+ Returns:
115
+ bool: True if records were added successfully, False otherwise.
116
+ """
117
+ for record in new_records:
118
+ if not isinstance(record, Document):
119
+ raise ValueError("Invalid record type. Expected Document.")
120
+
121
+ self._build_graph(new_records)
122
+
123
+ return True
124
+
125
+ def query(self, question: str) -> GraphStoreQueryResult:
126
+ """Query the Neo4j database using a natural language question.
127
+
128
+ Args:
129
+ question (str): The question to be answered by querying the graph.
130
+
131
+ Returns:
132
+ GraphStoreQueryResult: The result of the query.
133
+ """
134
+ self.retriever = VectorRetriever(
135
+ driver=self.driver,
136
+ index_name=self.index_name,
137
+ embedder=self.embeddings,
138
+ )
139
+ rag = GraphRAG(retriever=self.retriever, llm=self.query_llm)
140
+ result = rag.search(query_text=question, retriever_config={"top_k": 5})
141
+
142
+ return GraphStoreQueryResult(answer=result.answer)
143
+
144
+ def _create_index(self, name: str) -> None:
145
+ """Create a vector index for the Neo4j knowledge graph.
146
+
147
+ Args:
148
+ name (str): Name of the vector index to create.
149
+ """
150
+ logger.info(f"Creating vector index '{name}'...")
151
+ create_vector_index(
152
+ self.driver,
153
+ name=name,
154
+ label="Chunk",
155
+ embedding_property="embedding",
156
+ dimensions=self.embedding_dimension,
157
+ similarity_fn="euclidean",
158
+ )
159
+ logger.info(f"Vector index '{name}' created successfully.")
160
+
161
+ def _clear_db(self) -> None:
162
+ """Clear all nodes and relationships from the Neo4j database."""
163
+ logger.info("Clearing all nodes and relationships in the database...")
164
+ self.driver.execute_query("MATCH (n) DETACH DELETE n;")
165
+ logger.info("Database cleared successfully.")
166
+
167
+ def _initialize_kg_builders(self) -> None:
168
+ """Initialize the knowledge graph builders"""
169
+ logger.info("Initializing the knowledge graph builders...")
170
+ self.text_kg_builder = SimpleKGPipeline(
171
+ driver=self.driver,
172
+ embedder=self.embeddings,
173
+ llm=self.llm,
174
+ entities=self.entities,
175
+ relations=self.relations,
176
+ potential_schema=self.potential_schema,
177
+ on_error="IGNORE",
178
+ from_pdf=False,
179
+ )
180
+
181
+ self.pdf_kg_builder = SimpleKGPipeline(
182
+ driver=self.driver,
183
+ embedder=self.embeddings,
184
+ llm=self.llm,
185
+ entities=self.entities,
186
+ relations=self.relations,
187
+ potential_schema=self.potential_schema,
188
+ on_error="IGNORE",
189
+ from_pdf=True,
190
+ )
191
+
192
+ def _build_graph(self, input_doc: List[Document]) -> None:
193
+ """Build the knowledge graph using the provided input documents.
194
+
195
+ Args:
196
+ input_doc (List[Document]): List of input documents for building the graph.
197
+ """
198
+ logger.info("Building the knowledge graph...")
199
+ for doc in input_doc:
200
+ if doc.doctype == DocumentType.TEXT:
201
+ # todo: we assume this is a path, and not URL
202
+ with open(doc.path_or_url) as file: # type: ignore[arg-type]
203
+ text = file.read()
204
+ asyncio.run(self.text_kg_builder.run_async(text=text))
205
+ elif doc.doctype == DocumentType.PDF:
206
+ asyncio.run(self.pdf_kg_builder.run_async(file_path=doc.path_or_url))
207
+ else:
208
+ raise ValueError(f"Unsupported document type: {doc.doctype}")
209
+
210
+ logger.info("Knowledge graph built successfully.")
@@ -0,0 +1,93 @@
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, Optional, Union
6
+
7
+ from .... import Agent, ConversableAgent
8
+ from .graph_query_engine import GraphStoreQueryResult
9
+ from .graph_rag_capability import GraphRagCapability
10
+ from .neo4j_native_graph_query_engine import Neo4jNativeGraphQueryEngine
11
+
12
+
13
+ class Neo4jNativeGraphCapability(GraphRagCapability):
14
+ """The Neo4j native graph capability integrates Neo4j native query engine into a graph rag agent.
15
+
16
+ For usage, please refer to example notebook/agentchat_graph_rag_neo4j_native.ipynb
17
+ """
18
+
19
+ def __init__(self, query_engine: Neo4jNativeGraphQueryEngine):
20
+ """Initialize GraphRAG capability with a neo4j native graph query engine"""
21
+ self.query_engine = query_engine
22
+
23
+ def add_to_agent(self, agent: ConversableAgent) -> None:
24
+ """Add native Neo4j GraphRAG capability to a ConversableAgent.
25
+ llm_config of the agent must be None/False (default) to make sure the returned message only contains information retrieved from the graph DB instead of any LLMs.
26
+ """
27
+ self.graph_rag_agent = agent
28
+
29
+ # Validate the agent config
30
+ if agent.llm_config not in (None, False):
31
+ raise Exception(
32
+ "Agents with GraphRAG capabilities do not use an LLM configuration. Please set your llm_config to None or False."
33
+ )
34
+
35
+ # Register method to generate the reply using a Neo4j query
36
+ # All other reply methods will be removed
37
+ agent.register_reply(
38
+ [ConversableAgent, None], self._reply_using_native_neo4j_query, position=0, remove_other_reply_funcs=True
39
+ )
40
+
41
+ def _reply_using_native_neo4j_query(
42
+ self,
43
+ recipient: ConversableAgent,
44
+ messages: Optional[list[dict[str, Any]]] = None,
45
+ sender: Optional[Agent] = None,
46
+ config: Optional[Any] = None,
47
+ ) -> tuple[bool, Optional[Union[str, dict[str, Any]]]]:
48
+ """Query Neo4j and return the message. Internally, it uses the Neo4jNativeGraphQueryEngine to query the graph.
49
+
50
+ The agent's system message will be incorporated into the query, if it's not blank.
51
+
52
+ If no results are found, a default message is returned: "I'm sorry, I don't have an answer for that."
53
+
54
+ Args:
55
+ recipient: The agent instance that will receive the message.
56
+ messages: A list of messages in the conversation history with the sender.
57
+ sender: The agent instance that sent the message.
58
+ config: Optional configuration for message processing.
59
+
60
+ Returns:
61
+ A tuple containing a boolean indicating success and the assistant's reply.
62
+ """
63
+ # todo: fix typing, this is not correct
64
+ question = self._messages_summary(messages, recipient.system_message) # type: ignore[arg-type]
65
+ result: GraphStoreQueryResult = self.query_engine.query(question)
66
+
67
+ return True, result.answer if result.answer else "I'm sorry, I don't have an answer for that."
68
+
69
+ def _messages_summary(self, messages: Union[dict[str, Any], str], system_message: str) -> str:
70
+ """Summarize the messages in the conversation history. Excluding any message with 'tool_calls' and 'tool_responses'
71
+ Includes the 'name' (if it exists) and the 'content', with a new line between each one, like:
72
+ customer:
73
+ <content>
74
+
75
+ agent:
76
+ <content>
77
+ """
78
+ if isinstance(messages, str):
79
+ return (f"IMPORTANT: {system_message}\n" if system_message else "") + f"Context:\n\n{messages}"
80
+
81
+ elif isinstance(messages, list):
82
+ summary = ""
83
+ for message in messages:
84
+ if "content" in message and "tool_calls" not in message and "tool_responses" not in message:
85
+ summary += f"{message.get('name', '')}: {message.get('content', '')}\n\n"
86
+
87
+ if system_message:
88
+ summary = f"IMPORTANT: {system_message}\nContext:\n\n{summary}"
89
+
90
+ return summary
91
+
92
+ else:
93
+ raise ValueError("Invalid messages format. Must be a list of messages or a string.")