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,260 @@
1
+ """
2
+ Module: perplexity_search_tool
3
+ Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
4
+ SPDX-License-Identifier: Apache-2.0
5
+
6
+ This module provides classes for interacting with the Perplexity AI search API.
7
+ It defines data models for responses and a tool for executing web and conversational searches.
8
+ """
9
+
10
+ import json
11
+ import os
12
+ from typing import Any, Optional, Union
13
+
14
+ import requests
15
+ from pydantic import BaseModel, ValidationError
16
+
17
+ from autogen.tools import Tool
18
+
19
+
20
+ class Message(BaseModel):
21
+ """
22
+ Represents a message in the chat conversation.
23
+
24
+ Attributes:
25
+ role (str): The role of the message sender (e.g., "system", "user").
26
+ content (str): The text content of the message.
27
+ """
28
+
29
+ role: str
30
+ content: str
31
+
32
+
33
+ class Usage(BaseModel):
34
+ """
35
+ Model representing token usage details.
36
+
37
+ Attributes:
38
+ prompt_tokens (int): The number of tokens used for the prompt.
39
+ completion_tokens (int): The number of tokens generated in the completion.
40
+ total_tokens (int): The total number of tokens (prompt + completion).
41
+ search_context_size (str): The size context used in the search (e.g., "high").
42
+ """
43
+
44
+ prompt_tokens: int
45
+ completion_tokens: int
46
+ total_tokens: int
47
+ search_context_size: str
48
+
49
+
50
+ class Choice(BaseModel):
51
+ """
52
+ Represents one choice in the response from the Perplexity API.
53
+
54
+ Attributes:
55
+ index (int): The index of this choice.
56
+ finish_reason (str): The reason why the API finished generating this choice.
57
+ message (Message): The message object containing the response text.
58
+ """
59
+
60
+ index: int
61
+ finish_reason: str
62
+ message: Message
63
+
64
+
65
+ class PerplexityChatCompletionResponse(BaseModel):
66
+ """
67
+ Represents the full chat completion response from the Perplexity API.
68
+
69
+ Attributes:
70
+ id (str): Unique identifier for the response.
71
+ model (str): The model name used for generating the response.
72
+ created (int): Timestamp when the response was created.
73
+ usage (Usage): Token usage details.
74
+ citations (list[str]): list of citation strings included in the response.
75
+ object (str): Type of the response object.
76
+ choices (list[Choice]): list of choices returned by the API.
77
+ """
78
+
79
+ id: str
80
+ model: str
81
+ created: int
82
+ usage: Usage
83
+ citations: list[str]
84
+ object: str
85
+ choices: list[Choice]
86
+
87
+
88
+ class SearchResponse(BaseModel):
89
+ """
90
+ Represents the response from a search query.
91
+
92
+ Attributes:
93
+ content (Optional[str]): The textual content returned from the search.
94
+ citations (Optional[list[str]]): A list of citation URLs relevant to the search result.
95
+ error (Optional[str]): An error message if the search failed.
96
+ """
97
+
98
+ content: Union[str, None]
99
+ citations: Union[list[str], None]
100
+ error: Union[str, None]
101
+
102
+
103
+ class PerplexitySearchTool(Tool):
104
+ """
105
+ Tool for interacting with the Perplexity AI search API.
106
+
107
+ This tool uses the Perplexity API to perform web search, news search,
108
+ and conversational search, returning concise and precise responses.
109
+
110
+ Attributes:
111
+ url (str): API endpoint URL.
112
+ model (str): Name of the model to be used.
113
+ api_key (str): API key for authenticating with the Perplexity API.
114
+ max_tokens (int): Maximum tokens allowed for the API response.
115
+ search_domain_filters (Optional[list[str]]): Optional list of domain filters for the search.
116
+ """
117
+
118
+ def __init__(
119
+ self,
120
+ model: str = "sonar",
121
+ api_key: Optional[str] = None,
122
+ max_tokens: int = 1000,
123
+ search_domain_filter: Optional[list[str]] = None,
124
+ ):
125
+ """
126
+ Initializes a new instance of the PerplexitySearchTool.
127
+
128
+ Args:
129
+ model (str, optional): The model to use. Defaults to "sonar".
130
+ api_key (Optional[str], optional): API key for authentication.
131
+ max_tokens (int, optional): Maximum number of tokens for the response. Defaults to 1000.
132
+ search_domain_filter (Optional[list[str]], optional): list of domain filters to restrict search.
133
+
134
+ Raises:
135
+ ValueError: If the API key is missing, the model is empty, max_tokens is not positive,
136
+ or if search_domain_filter is not a list when provided.
137
+ """
138
+ self.api_key = api_key or os.getenv("PERPLEXITY_API_KEY")
139
+ self._validate_tool_config(model, self.api_key, max_tokens, search_domain_filter)
140
+ self.url = "https://api.perplexity.ai/chat/completions"
141
+ self.model = model
142
+ self.max_tokens = max_tokens
143
+ self.search_domain_filters = search_domain_filter
144
+ super().__init__(
145
+ name="perplexity-search",
146
+ description="Perplexity AI search tool for web search, news search, and conversational search "
147
+ "for finding answers to everyday questions, conducting in-depth research and analysis.",
148
+ func_or_tool=self.search,
149
+ )
150
+
151
+ @staticmethod
152
+ def _validate_tool_config(
153
+ model: str, api_key: Union[str, None], max_tokens: int, search_domain_filter: Union[list[str], None]
154
+ ) -> None:
155
+ """
156
+ Validates the configuration parameters for the search tool.
157
+
158
+ Args:
159
+ model (str): The model to use.
160
+ api_key (Union[str, None]): The API key for authentication.
161
+ max_tokens (int): Maximum tokens allowed.
162
+ search_domain_filter (Union[list[str], None]): Domain filters for search.
163
+
164
+ Raises:
165
+ ValueError: If the API key is missing, model is empty, max_tokens is not positive,
166
+ or search_domain_filter is not a list.
167
+ """
168
+ if not api_key:
169
+ raise ValueError("Perplexity API key is missing")
170
+ if not model:
171
+ raise ValueError("model cannot be empty")
172
+ if max_tokens <= 0:
173
+ raise ValueError("max_tokens must be positive")
174
+ if search_domain_filter is not None and not isinstance(search_domain_filter, list):
175
+ raise ValueError("search_domain_filter must be a list")
176
+
177
+ def _execute_query(self, payload: dict[str, Any]) -> "PerplexityChatCompletionResponse":
178
+ """
179
+ Executes a query by sending a POST request to the Perplexity API.
180
+
181
+ Args:
182
+ payload (dict[str, Any]): The payload to send in the API request.
183
+
184
+ Returns:
185
+ PerplexityChatCompletionResponse: Parsed response from the Perplexity API.
186
+
187
+ Raises:
188
+ RuntimeError: If there is a network error, HTTP error, JSON parsing error, or if the response
189
+ cannot be parsed into a PerplexityChatCompletionResponse.
190
+ """
191
+ headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}
192
+ response = requests.request("POST", self.url, json=payload, headers=headers, timeout=10)
193
+ try:
194
+ response.raise_for_status()
195
+ except requests.exceptions.Timeout as e:
196
+ raise RuntimeError(
197
+ f"Perplexity API => Request timed out: {response.text}. Status code: {response.status_code}"
198
+ ) from e
199
+ except requests.exceptions.HTTPError as e:
200
+ raise RuntimeError(
201
+ f"Perplexity API => HTTP error occurred: {response.text}. Status code: {response.status_code}"
202
+ ) from e
203
+ except requests.exceptions.RequestException as e:
204
+ raise RuntimeError(
205
+ f"Perplexity API => Error during request: {response.text}. Status code: {response.status_code}"
206
+ ) from e
207
+
208
+ try:
209
+ response_json = response.json()
210
+ except json.JSONDecodeError as e:
211
+ raise RuntimeError(f"Perplexity API => Invalid JSON response received. Error: {e}") from e
212
+
213
+ try:
214
+ # This may raise a pydantic.ValidationError if the response structure is not as expected.
215
+ perp_resp = PerplexityChatCompletionResponse(**response_json)
216
+ except ValidationError as e:
217
+ raise RuntimeError("Perplexity API => Validation error when parsing API response: " + str(e)) from e
218
+ except Exception as e:
219
+ raise RuntimeError(
220
+ "Perplexity API => Failed to parse API response into PerplexityChatCompletionResponse: " + str(e)
221
+ ) from e
222
+
223
+ return perp_resp
224
+
225
+ def search(self, query: str) -> "SearchResponse":
226
+ """
227
+ Perform a search query using the Perplexity AI API.
228
+
229
+ Constructs the payload, executes the query, and parses the response to return
230
+ a concise search result along with any provided citations.
231
+
232
+ Args:
233
+ query (str): The search query.
234
+
235
+ Returns:
236
+ SearchResponse: A model containing the search result content and citations.
237
+
238
+ Raises:
239
+ ValueError: If the search query is invalid.
240
+ RuntimeError: If there is an error during the search process.
241
+ """
242
+ if not query or not isinstance(query, str):
243
+ raise ValueError("A valid non-empty query string must be provided.")
244
+
245
+ payload = {
246
+ "model": self.model,
247
+ "messages": [{"role": "system", "content": "Be precise and concise."}, {"role": "user", "content": query}],
248
+ "max_tokens": self.max_tokens,
249
+ "search_domain_filter": self.search_domain_filters,
250
+ "web_search_options": {"search_context_size": "high"},
251
+ }
252
+
253
+ try:
254
+ perplexity_response = self._execute_query(payload)
255
+ content = perplexity_response.choices[0].message.content
256
+ citations = perplexity_response.citations
257
+ return SearchResponse(content=content, citations=citations, error=None)
258
+ except Exception as e:
259
+ # Return a SearchResponse with an error message if something goes wrong.
260
+ return SearchResponse(content=None, citations=None, error=f"{e}")
@@ -0,0 +1,7 @@
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 .tavily_search import TavilySearchTool
6
+
7
+ __all__ = ["TavilySearchTool"]
@@ -0,0 +1,183 @@
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 os
5
+ from typing import Annotated, Any, Optional, Union
6
+
7
+ from ....doc_utils import export_module
8
+ from ....import_utils import optional_import_block, require_optional_import
9
+ from ....llm_config import LLMConfig
10
+ from ... import Depends, Tool
11
+ from ...dependency_injection import on
12
+
13
+ with optional_import_block():
14
+ from tavily import TavilyClient
15
+
16
+
17
+ @require_optional_import(
18
+ [
19
+ "tavily",
20
+ ],
21
+ "tavily",
22
+ )
23
+ def _execute_tavily_query(
24
+ query: str,
25
+ tavily_api_key: str,
26
+ search_depth: str = "basic",
27
+ topic: str = "general",
28
+ include_answer: str = "basic",
29
+ include_raw_content: bool = False,
30
+ include_domains: list[str] = [],
31
+ num_results: int = 5,
32
+ ) -> Any:
33
+ """
34
+ Execute a search query using the Tavily API.
35
+
36
+ Args:
37
+ query (str): The search query string.
38
+ tavily_api_key (str): The API key for Tavily.
39
+ search_depth (str, optional): The depth of the search ('basic' or 'advanced'). Defaults to "basic".
40
+ topic (str, optional): The topic of the search. Defaults to "general".
41
+ include_answer (str, optional): Whether to include an AI-generated answer ('basic' or 'advanced'). Defaults to "basic".
42
+ include_raw_content (bool, optional): Whether to include raw content in the results. Defaults to False.
43
+ include_domains (list[str], optional): A list of domains to include in the search. Defaults to [].
44
+ num_results (int, optional): The maximum number of results to return. Defaults to 5.
45
+
46
+ Returns:
47
+ Any: The raw response object from the Tavily API client.
48
+ """
49
+ tavily_client = TavilyClient(api_key=tavily_api_key)
50
+ return tavily_client.search(
51
+ query=query,
52
+ search_depth=search_depth,
53
+ topic=topic,
54
+ include_answer=include_answer,
55
+ include_raw_content=include_raw_content,
56
+ include_domains=include_domains,
57
+ max_results=num_results,
58
+ )
59
+
60
+
61
+ def _tavily_search(
62
+ query: str,
63
+ tavily_api_key: str,
64
+ search_depth: str = "basic",
65
+ topic: str = "general",
66
+ include_answer: str = "basic",
67
+ include_raw_content: bool = False,
68
+ include_domains: list[str] = [],
69
+ num_results: int = 5,
70
+ ) -> list[dict[str, Any]]:
71
+ """
72
+ Perform a Tavily search and format the results.
73
+
74
+ This function takes search parameters, executes the query using `_execute_tavily_query`,
75
+ and formats the results into a list of dictionaries containing title, link, and snippet.
76
+
77
+ Args:
78
+ query (str): The search query string.
79
+ tavily_api_key (str): The API key for Tavily.
80
+ search_depth (str, optional): The depth of the search ('basic' or 'advanced'). Defaults to "basic".
81
+ topic (str, optional): The topic of the search. Defaults to "general".
82
+ include_answer (str, optional): Whether to include an AI-generated answer ('basic' or 'advanced'). Defaults to "basic".
83
+ include_raw_content (bool, optional): Whether to include raw content in the results. Defaults to False.
84
+ include_domains (list[str], optional): A list of domains to include in the search. Defaults to [].
85
+ num_results (int, optional): The maximum number of results to return. Defaults to 5.
86
+
87
+ Returns:
88
+ list[dict[str, Any]]: A list of dictionaries, where each dictionary represents a search result
89
+ with keys 'title', 'link', and 'snippet'. Returns an empty list if no results are found.
90
+ """
91
+ res = _execute_tavily_query(
92
+ query=query,
93
+ tavily_api_key=tavily_api_key,
94
+ search_depth=search_depth,
95
+ topic=topic,
96
+ include_answer=include_answer,
97
+ include_raw_content=include_raw_content,
98
+ include_domains=include_domains,
99
+ num_results=num_results,
100
+ )
101
+
102
+ return [
103
+ {"title": item.get("title", ""), "link": item.get("url", ""), "snippet": item.get("content", "")}
104
+ for item in res.get("results", [])
105
+ ]
106
+
107
+
108
+ @export_module("autogen.tools.experimental")
109
+ class TavilySearchTool(Tool):
110
+ """
111
+ TavilySearchTool is a tool that uses the Tavily Search API to perform a search.
112
+
113
+ This tool allows agents to leverage the Tavily search engine for information retrieval.
114
+ It requires a Tavily API key, which can be provided during initialization or set as
115
+ an environment variable `TAVILY_API_KEY`.
116
+
117
+ Attributes:
118
+ tavily_api_key (str): The API key used for authenticating with the Tavily API.
119
+ """
120
+
121
+ def __init__(
122
+ self, *, llm_config: Optional[Union[LLMConfig, dict[str, Any]]] = None, tavily_api_key: Optional[str] = None
123
+ ):
124
+ """
125
+ Initializes the TavilySearchTool.
126
+
127
+ Args:
128
+ llm_config (Optional[Union[LLMConfig, dict[str, Any]]]): LLM configuration. (Currently unused but kept for potential future integration).
129
+ tavily_api_key (Optional[str]): The API key for the Tavily Search API. If not provided,
130
+ it attempts to read from the `TAVILY_API_KEY` environment variable.
131
+
132
+ Raises:
133
+ ValueError: If `tavily_api_key` is not provided either directly or via the environment variable.
134
+ """
135
+ self.tavily_api_key = tavily_api_key or os.getenv("TAVILY_API_KEY")
136
+
137
+ if self.tavily_api_key is None:
138
+ raise ValueError("tavily_api_key must be provided either as an argument or via TAVILY_API_KEY env var")
139
+
140
+ def tavily_search(
141
+ query: Annotated[str, "The search query."],
142
+ tavily_api_key: Annotated[Optional[str], Depends(on(self.tavily_api_key))],
143
+ search_depth: Annotated[Optional[str], "Either 'advanced' or 'basic'"] = "basic",
144
+ include_answer: Annotated[Optional[str], "Either 'advanced' or 'basic'"] = "basic",
145
+ include_raw_content: Annotated[Optional[bool], "Include the raw contents"] = False,
146
+ include_domains: Annotated[Optional[list[str]], "Specific web domains to search"] = [],
147
+ num_results: Annotated[int, "The number of results to return."] = 5,
148
+ ) -> list[dict[str, Any]]:
149
+ """
150
+ Performs a search using the Tavily API and returns formatted results.
151
+
152
+ Args:
153
+ query: The search query string.
154
+ tavily_api_key: The API key for Tavily (injected dependency).
155
+ search_depth: The depth of the search ('basic' or 'advanced'). Defaults to "basic".
156
+ include_answer: Whether to include an AI-generated answer ('basic' or 'advanced'). Defaults to "basic".
157
+ include_raw_content: Whether to include raw content in the results. Defaults to False.
158
+ include_domains: A list of domains to include in the search. Defaults to [].
159
+ num_results: The maximum number of results to return. Defaults to 5.
160
+
161
+ Returns:
162
+ A list of dictionaries, each containing 'title', 'link', and 'snippet' of a search result.
163
+
164
+ Raises:
165
+ ValueError: If the Tavily API key is not available.
166
+ """
167
+ if tavily_api_key is None:
168
+ raise ValueError("Tavily API key is missing.")
169
+ return _tavily_search(
170
+ query=query,
171
+ tavily_api_key=tavily_api_key,
172
+ search_depth=search_depth or "basic",
173
+ include_answer=include_answer or "basic",
174
+ include_raw_content=include_raw_content or False,
175
+ include_domains=include_domains or [],
176
+ num_results=num_results,
177
+ )
178
+
179
+ super().__init__(
180
+ name="tavily_search",
181
+ description="Use the Tavily Search API to perform a search.",
182
+ func_or_tool=tavily_search,
183
+ )
@@ -0,0 +1,7 @@
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 .web_search_preview import WebSearchPreviewTool
6
+
7
+ __all__ = ["WebSearchPreviewTool"]
@@ -0,0 +1,114 @@
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 copy
7
+ import logging
8
+ import os
9
+ from typing import Annotated, Any, Literal, Optional, Type, Union
10
+
11
+ from pydantic import BaseModel
12
+
13
+ from ....doc_utils import export_module
14
+ from ....import_utils import optional_import_block, require_optional_import
15
+ from ....llm_config import LLMConfig
16
+ from ... import Tool
17
+
18
+ with optional_import_block():
19
+ from openai import OpenAI
20
+ from openai.types.responses import WebSearchToolParam
21
+ from openai.types.responses.web_search_tool import UserLocation
22
+
23
+
24
+ @require_optional_import("openai>=1.66.2", "openai")
25
+ @export_module("autogen.tools.experimental")
26
+ class WebSearchPreviewTool(Tool):
27
+ """WebSearchPreviewTool is a tool that uses OpenAI's web_search_preview tool to perform a search."""
28
+
29
+ def __init__(
30
+ self,
31
+ *,
32
+ llm_config: Union[LLMConfig, dict[str, Any]],
33
+ search_context_size: Literal["low", "medium", "high"] = "medium",
34
+ user_location: Optional[dict[str, str]] = None,
35
+ instructions: Optional[str] = None,
36
+ text_format: Optional[Type[BaseModel]] = None,
37
+ ):
38
+ """Initialize the WebSearchPreviewTool.
39
+
40
+ Args:
41
+ llm_config: The LLM configuration to use. This should be a dictionary
42
+ containing the model name and other parameters.
43
+ search_context_size: The size of the search context. One of `low`, `medium`, or `high`.
44
+ `medium` is the default.
45
+ user_location: The location of the user. This should be a dictionary containing
46
+ the city, country, region, and timezone.
47
+ instructions: Inserts a system (or developer) message as the first item in the model's context.
48
+ text_format: The format of the text to be returned. This should be a subclass of `BaseModel`.
49
+ The default is `None`, which means the text will be returned as a string.
50
+ """
51
+ self.web_search_tool_param = WebSearchToolParam(
52
+ type="web_search_preview",
53
+ search_context_size=search_context_size,
54
+ user_location=UserLocation(**user_location) if user_location else None, # type: ignore[typeddict-item]
55
+ )
56
+ self.instructions = instructions
57
+ self.text_format = text_format
58
+
59
+ if isinstance(llm_config, LLMConfig):
60
+ llm_config = llm_config.model_dump()
61
+
62
+ llm_config = copy.deepcopy(llm_config)
63
+
64
+ if "config_list" not in llm_config:
65
+ raise ValueError("llm_config must contain 'config_list' key")
66
+
67
+ # Find first OpenAI model which starts with "gpt-4"
68
+ self.model = None
69
+ self.api_key = None
70
+ for model in llm_config["config_list"]:
71
+ if model["model"].startswith("gpt-4") and model.get("api_type", "openai") == "openai":
72
+ self.model = model["model"]
73
+ self.api_key = model.get("api_key", os.getenv("OPENAI_API_KEY"))
74
+ break
75
+ if self.model is None:
76
+ raise ValueError(
77
+ "No OpenAI model starting with 'gpt-4' found in llm_config, other models do not support web_search_preview"
78
+ )
79
+
80
+ if not self.model.startswith("gpt-4.1") and not self.model.startswith("gpt-4o-search-preview"):
81
+ logging.warning(
82
+ f"We recommend using a model starting with 'gpt-4.1' or 'gpt-4o-search-preview' for web_search_preview, but found {self.model}. "
83
+ "This may result in suboptimal performance."
84
+ )
85
+
86
+ def web_search_preview(
87
+ query: Annotated[str, "The search query. Add all relevant context to the query."],
88
+ ) -> Union[str, Optional[BaseModel]]:
89
+ client = OpenAI()
90
+
91
+ if not self.text_format:
92
+ response = client.responses.create(
93
+ model=self.model, # type: ignore[arg-type]
94
+ tools=[self.web_search_tool_param],
95
+ input=query,
96
+ instructions=self.instructions,
97
+ )
98
+ return response.output_text
99
+
100
+ else:
101
+ response = client.responses.parse(
102
+ model=self.model, # type: ignore[arg-type]
103
+ tools=[self.web_search_tool_param],
104
+ input=query,
105
+ instructions=self.instructions,
106
+ text_format=self.text_format,
107
+ )
108
+ return response.output_parsed
109
+
110
+ super().__init__(
111
+ name="web_search_preview",
112
+ description="Tool used to perform a web search. It can be used as google search or directly searching a specific website.",
113
+ func_or_tool=web_search_preview,
114
+ )
@@ -0,0 +1,7 @@
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 .wikipedia import WikipediaPageLoadTool, WikipediaQueryRunTool
6
+
7
+ __all__ = ["WikipediaPageLoadTool", "WikipediaQueryRunTool"]