ag2 0.9.1__py3-none-any.whl → 0.9.1.post0__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (357) hide show
  1. {ag2-0.9.1.dist-info → ag2-0.9.1.post0.dist-info}/METADATA +264 -73
  2. ag2-0.9.1.post0.dist-info/RECORD +392 -0
  3. {ag2-0.9.1.dist-info → ag2-0.9.1.post0.dist-info}/WHEEL +1 -2
  4. autogen/__init__.py +89 -0
  5. autogen/_website/__init__.py +3 -0
  6. autogen/_website/generate_api_references.py +427 -0
  7. autogen/_website/generate_mkdocs.py +1174 -0
  8. autogen/_website/notebook_processor.py +476 -0
  9. autogen/_website/process_notebooks.py +656 -0
  10. autogen/_website/utils.py +412 -0
  11. autogen/agentchat/__init__.py +44 -0
  12. autogen/agentchat/agent.py +182 -0
  13. autogen/agentchat/assistant_agent.py +85 -0
  14. autogen/agentchat/chat.py +309 -0
  15. autogen/agentchat/contrib/__init__.py +5 -0
  16. autogen/agentchat/contrib/agent_eval/README.md +7 -0
  17. autogen/agentchat/contrib/agent_eval/agent_eval.py +108 -0
  18. autogen/agentchat/contrib/agent_eval/criterion.py +43 -0
  19. autogen/agentchat/contrib/agent_eval/critic_agent.py +44 -0
  20. autogen/agentchat/contrib/agent_eval/quantifier_agent.py +39 -0
  21. autogen/agentchat/contrib/agent_eval/subcritic_agent.py +45 -0
  22. autogen/agentchat/contrib/agent_eval/task.py +42 -0
  23. autogen/agentchat/contrib/agent_optimizer.py +429 -0
  24. autogen/agentchat/contrib/capabilities/__init__.py +5 -0
  25. autogen/agentchat/contrib/capabilities/agent_capability.py +20 -0
  26. autogen/agentchat/contrib/capabilities/generate_images.py +301 -0
  27. autogen/agentchat/contrib/capabilities/teachability.py +393 -0
  28. autogen/agentchat/contrib/capabilities/text_compressors.py +66 -0
  29. autogen/agentchat/contrib/capabilities/tools_capability.py +22 -0
  30. autogen/agentchat/contrib/capabilities/transform_messages.py +93 -0
  31. autogen/agentchat/contrib/capabilities/transforms.py +566 -0
  32. autogen/agentchat/contrib/capabilities/transforms_util.py +122 -0
  33. autogen/agentchat/contrib/capabilities/vision_capability.py +214 -0
  34. autogen/agentchat/contrib/captainagent/__init__.py +9 -0
  35. autogen/agentchat/contrib/captainagent/agent_builder.py +790 -0
  36. autogen/agentchat/contrib/captainagent/captainagent.py +512 -0
  37. autogen/agentchat/contrib/captainagent/tool_retriever.py +335 -0
  38. autogen/agentchat/contrib/captainagent/tools/README.md +44 -0
  39. autogen/agentchat/contrib/captainagent/tools/__init__.py +5 -0
  40. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation.py +40 -0
  41. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis.py +28 -0
  42. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr.py +28 -0
  43. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore.py +28 -0
  44. autogen/agentchat/contrib/captainagent/tools/data_analysis/explore_csv.py +21 -0
  45. autogen/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test.py +30 -0
  46. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download.py +27 -0
  47. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search.py +53 -0
  48. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image.py +53 -0
  49. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text.py +38 -0
  50. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text.py +21 -0
  51. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption.py +34 -0
  52. autogen/agentchat/contrib/captainagent/tools/information_retrieval/image_qa.py +60 -0
  53. autogen/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition.py +61 -0
  54. autogen/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search.py +47 -0
  55. autogen/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables.py +33 -0
  56. autogen/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file.py +21 -0
  57. autogen/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download.py +35 -0
  58. autogen/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter.py +21 -0
  59. autogen/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week.py +18 -0
  60. autogen/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum.py +28 -0
  61. autogen/agentchat/contrib/captainagent/tools/math/calculate_matrix_power.py +31 -0
  62. autogen/agentchat/contrib/captainagent/tools/math/calculate_reflected_point.py +16 -0
  63. autogen/agentchat/contrib/captainagent/tools/math/complex_numbers_product.py +25 -0
  64. autogen/agentchat/contrib/captainagent/tools/math/compute_currency_conversion.py +23 -0
  65. autogen/agentchat/contrib/captainagent/tools/math/count_distinct_permutations.py +27 -0
  66. autogen/agentchat/contrib/captainagent/tools/math/evaluate_expression.py +28 -0
  67. autogen/agentchat/contrib/captainagent/tools/math/find_continuity_point.py +34 -0
  68. autogen/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers.py +39 -0
  69. autogen/agentchat/contrib/captainagent/tools/math/modular_inverse_sum.py +23 -0
  70. autogen/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers.py +36 -0
  71. autogen/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials.py +15 -0
  72. autogen/agentchat/contrib/captainagent/tools/math/sum_of_primes_below.py +15 -0
  73. autogen/agentchat/contrib/captainagent/tools/requirements.txt +10 -0
  74. autogen/agentchat/contrib/captainagent/tools/tool_description.tsv +34 -0
  75. autogen/agentchat/contrib/gpt_assistant_agent.py +526 -0
  76. autogen/agentchat/contrib/graph_rag/__init__.py +9 -0
  77. autogen/agentchat/contrib/graph_rag/document.py +29 -0
  78. autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py +170 -0
  79. autogen/agentchat/contrib/graph_rag/falkor_graph_rag_capability.py +103 -0
  80. autogen/agentchat/contrib/graph_rag/graph_query_engine.py +53 -0
  81. autogen/agentchat/contrib/graph_rag/graph_rag_capability.py +63 -0
  82. autogen/agentchat/contrib/graph_rag/neo4j_graph_query_engine.py +268 -0
  83. autogen/agentchat/contrib/graph_rag/neo4j_graph_rag_capability.py +83 -0
  84. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_query_engine.py +210 -0
  85. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_rag_capability.py +93 -0
  86. autogen/agentchat/contrib/img_utils.py +397 -0
  87. autogen/agentchat/contrib/llamaindex_conversable_agent.py +117 -0
  88. autogen/agentchat/contrib/llava_agent.py +187 -0
  89. autogen/agentchat/contrib/math_user_proxy_agent.py +464 -0
  90. autogen/agentchat/contrib/multimodal_conversable_agent.py +125 -0
  91. autogen/agentchat/contrib/qdrant_retrieve_user_proxy_agent.py +324 -0
  92. autogen/agentchat/contrib/rag/__init__.py +10 -0
  93. autogen/agentchat/contrib/rag/chromadb_query_engine.py +272 -0
  94. autogen/agentchat/contrib/rag/llamaindex_query_engine.py +198 -0
  95. autogen/agentchat/contrib/rag/mongodb_query_engine.py +329 -0
  96. autogen/agentchat/contrib/rag/query_engine.py +74 -0
  97. autogen/agentchat/contrib/retrieve_assistant_agent.py +56 -0
  98. autogen/agentchat/contrib/retrieve_user_proxy_agent.py +703 -0
  99. autogen/agentchat/contrib/society_of_mind_agent.py +199 -0
  100. autogen/agentchat/contrib/swarm_agent.py +1425 -0
  101. autogen/agentchat/contrib/text_analyzer_agent.py +79 -0
  102. autogen/agentchat/contrib/vectordb/__init__.py +5 -0
  103. autogen/agentchat/contrib/vectordb/base.py +232 -0
  104. autogen/agentchat/contrib/vectordb/chromadb.py +315 -0
  105. autogen/agentchat/contrib/vectordb/couchbase.py +407 -0
  106. autogen/agentchat/contrib/vectordb/mongodb.py +550 -0
  107. autogen/agentchat/contrib/vectordb/pgvectordb.py +928 -0
  108. autogen/agentchat/contrib/vectordb/qdrant.py +320 -0
  109. autogen/agentchat/contrib/vectordb/utils.py +126 -0
  110. autogen/agentchat/contrib/web_surfer.py +303 -0
  111. autogen/agentchat/conversable_agent.py +4020 -0
  112. autogen/agentchat/group/__init__.py +64 -0
  113. autogen/agentchat/group/available_condition.py +91 -0
  114. autogen/agentchat/group/context_condition.py +77 -0
  115. autogen/agentchat/group/context_expression.py +238 -0
  116. autogen/agentchat/group/context_str.py +41 -0
  117. autogen/agentchat/group/context_variables.py +192 -0
  118. autogen/agentchat/group/group_tool_executor.py +202 -0
  119. autogen/agentchat/group/group_utils.py +591 -0
  120. autogen/agentchat/group/handoffs.py +244 -0
  121. autogen/agentchat/group/llm_condition.py +93 -0
  122. autogen/agentchat/group/multi_agent_chat.py +237 -0
  123. autogen/agentchat/group/on_condition.py +58 -0
  124. autogen/agentchat/group/on_context_condition.py +54 -0
  125. autogen/agentchat/group/patterns/__init__.py +18 -0
  126. autogen/agentchat/group/patterns/auto.py +159 -0
  127. autogen/agentchat/group/patterns/manual.py +176 -0
  128. autogen/agentchat/group/patterns/pattern.py +288 -0
  129. autogen/agentchat/group/patterns/random.py +106 -0
  130. autogen/agentchat/group/patterns/round_robin.py +117 -0
  131. autogen/agentchat/group/reply_result.py +26 -0
  132. autogen/agentchat/group/speaker_selection_result.py +41 -0
  133. autogen/agentchat/group/targets/__init__.py +4 -0
  134. autogen/agentchat/group/targets/group_chat_target.py +132 -0
  135. autogen/agentchat/group/targets/group_manager_target.py +151 -0
  136. autogen/agentchat/group/targets/transition_target.py +413 -0
  137. autogen/agentchat/group/targets/transition_utils.py +6 -0
  138. autogen/agentchat/groupchat.py +1694 -0
  139. autogen/agentchat/realtime/__init__.py +3 -0
  140. autogen/agentchat/realtime/experimental/__init__.py +20 -0
  141. autogen/agentchat/realtime/experimental/audio_adapters/__init__.py +8 -0
  142. autogen/agentchat/realtime/experimental/audio_adapters/twilio_audio_adapter.py +148 -0
  143. autogen/agentchat/realtime/experimental/audio_adapters/websocket_audio_adapter.py +139 -0
  144. autogen/agentchat/realtime/experimental/audio_observer.py +42 -0
  145. autogen/agentchat/realtime/experimental/clients/__init__.py +15 -0
  146. autogen/agentchat/realtime/experimental/clients/gemini/__init__.py +7 -0
  147. autogen/agentchat/realtime/experimental/clients/gemini/client.py +274 -0
  148. autogen/agentchat/realtime/experimental/clients/oai/__init__.py +8 -0
  149. autogen/agentchat/realtime/experimental/clients/oai/base_client.py +220 -0
  150. autogen/agentchat/realtime/experimental/clients/oai/rtc_client.py +243 -0
  151. autogen/agentchat/realtime/experimental/clients/oai/utils.py +48 -0
  152. autogen/agentchat/realtime/experimental/clients/realtime_client.py +190 -0
  153. autogen/agentchat/realtime/experimental/function_observer.py +85 -0
  154. autogen/agentchat/realtime/experimental/realtime_agent.py +158 -0
  155. autogen/agentchat/realtime/experimental/realtime_events.py +42 -0
  156. autogen/agentchat/realtime/experimental/realtime_observer.py +100 -0
  157. autogen/agentchat/realtime/experimental/realtime_swarm.py +475 -0
  158. autogen/agentchat/realtime/experimental/websockets.py +21 -0
  159. autogen/agentchat/realtime_agent/__init__.py +21 -0
  160. autogen/agentchat/user_proxy_agent.py +111 -0
  161. autogen/agentchat/utils.py +206 -0
  162. autogen/agents/__init__.py +3 -0
  163. autogen/agents/contrib/__init__.py +10 -0
  164. autogen/agents/contrib/time/__init__.py +8 -0
  165. autogen/agents/contrib/time/time_reply_agent.py +73 -0
  166. autogen/agents/contrib/time/time_tool_agent.py +51 -0
  167. autogen/agents/experimental/__init__.py +27 -0
  168. autogen/agents/experimental/deep_research/__init__.py +7 -0
  169. autogen/agents/experimental/deep_research/deep_research.py +52 -0
  170. autogen/agents/experimental/discord/__init__.py +7 -0
  171. autogen/agents/experimental/discord/discord.py +66 -0
  172. autogen/agents/experimental/document_agent/__init__.py +19 -0
  173. autogen/agents/experimental/document_agent/chroma_query_engine.py +316 -0
  174. autogen/agents/experimental/document_agent/docling_doc_ingest_agent.py +118 -0
  175. autogen/agents/experimental/document_agent/document_agent.py +461 -0
  176. autogen/agents/experimental/document_agent/document_conditions.py +50 -0
  177. autogen/agents/experimental/document_agent/document_utils.py +380 -0
  178. autogen/agents/experimental/document_agent/inmemory_query_engine.py +220 -0
  179. autogen/agents/experimental/document_agent/parser_utils.py +130 -0
  180. autogen/agents/experimental/document_agent/url_utils.py +426 -0
  181. autogen/agents/experimental/reasoning/__init__.py +7 -0
  182. autogen/agents/experimental/reasoning/reasoning_agent.py +1178 -0
  183. autogen/agents/experimental/slack/__init__.py +7 -0
  184. autogen/agents/experimental/slack/slack.py +73 -0
  185. autogen/agents/experimental/telegram/__init__.py +7 -0
  186. autogen/agents/experimental/telegram/telegram.py +77 -0
  187. autogen/agents/experimental/websurfer/__init__.py +7 -0
  188. autogen/agents/experimental/websurfer/websurfer.py +62 -0
  189. autogen/agents/experimental/wikipedia/__init__.py +7 -0
  190. autogen/agents/experimental/wikipedia/wikipedia.py +90 -0
  191. autogen/browser_utils.py +309 -0
  192. autogen/cache/__init__.py +10 -0
  193. autogen/cache/abstract_cache_base.py +75 -0
  194. autogen/cache/cache.py +203 -0
  195. autogen/cache/cache_factory.py +88 -0
  196. autogen/cache/cosmos_db_cache.py +144 -0
  197. autogen/cache/disk_cache.py +102 -0
  198. autogen/cache/in_memory_cache.py +58 -0
  199. autogen/cache/redis_cache.py +123 -0
  200. autogen/code_utils.py +596 -0
  201. autogen/coding/__init__.py +22 -0
  202. autogen/coding/base.py +119 -0
  203. autogen/coding/docker_commandline_code_executor.py +268 -0
  204. autogen/coding/factory.py +47 -0
  205. autogen/coding/func_with_reqs.py +202 -0
  206. autogen/coding/jupyter/__init__.py +23 -0
  207. autogen/coding/jupyter/base.py +36 -0
  208. autogen/coding/jupyter/docker_jupyter_server.py +167 -0
  209. autogen/coding/jupyter/embedded_ipython_code_executor.py +182 -0
  210. autogen/coding/jupyter/import_utils.py +82 -0
  211. autogen/coding/jupyter/jupyter_client.py +231 -0
  212. autogen/coding/jupyter/jupyter_code_executor.py +160 -0
  213. autogen/coding/jupyter/local_jupyter_server.py +172 -0
  214. autogen/coding/local_commandline_code_executor.py +405 -0
  215. autogen/coding/markdown_code_extractor.py +45 -0
  216. autogen/coding/utils.py +56 -0
  217. autogen/doc_utils.py +34 -0
  218. autogen/events/__init__.py +7 -0
  219. autogen/events/agent_events.py +1010 -0
  220. autogen/events/base_event.py +99 -0
  221. autogen/events/client_events.py +167 -0
  222. autogen/events/helpers.py +36 -0
  223. autogen/events/print_event.py +46 -0
  224. autogen/exception_utils.py +73 -0
  225. autogen/extensions/__init__.py +5 -0
  226. autogen/fast_depends/__init__.py +16 -0
  227. autogen/fast_depends/_compat.py +80 -0
  228. autogen/fast_depends/core/__init__.py +14 -0
  229. autogen/fast_depends/core/build.py +225 -0
  230. autogen/fast_depends/core/model.py +576 -0
  231. autogen/fast_depends/dependencies/__init__.py +15 -0
  232. autogen/fast_depends/dependencies/model.py +29 -0
  233. autogen/fast_depends/dependencies/provider.py +39 -0
  234. autogen/fast_depends/library/__init__.py +10 -0
  235. autogen/fast_depends/library/model.py +46 -0
  236. autogen/fast_depends/py.typed +6 -0
  237. autogen/fast_depends/schema.py +66 -0
  238. autogen/fast_depends/use.py +280 -0
  239. autogen/fast_depends/utils.py +187 -0
  240. autogen/formatting_utils.py +83 -0
  241. autogen/function_utils.py +13 -0
  242. autogen/graph_utils.py +178 -0
  243. autogen/import_utils.py +526 -0
  244. autogen/interop/__init__.py +22 -0
  245. autogen/interop/crewai/__init__.py +7 -0
  246. autogen/interop/crewai/crewai.py +88 -0
  247. autogen/interop/interoperability.py +71 -0
  248. autogen/interop/interoperable.py +46 -0
  249. autogen/interop/langchain/__init__.py +8 -0
  250. autogen/interop/langchain/langchain_chat_model_factory.py +155 -0
  251. autogen/interop/langchain/langchain_tool.py +82 -0
  252. autogen/interop/litellm/__init__.py +7 -0
  253. autogen/interop/litellm/litellm_config_factory.py +113 -0
  254. autogen/interop/pydantic_ai/__init__.py +7 -0
  255. autogen/interop/pydantic_ai/pydantic_ai.py +168 -0
  256. autogen/interop/registry.py +69 -0
  257. autogen/io/__init__.py +15 -0
  258. autogen/io/base.py +151 -0
  259. autogen/io/console.py +56 -0
  260. autogen/io/processors/__init__.py +12 -0
  261. autogen/io/processors/base.py +21 -0
  262. autogen/io/processors/console_event_processor.py +56 -0
  263. autogen/io/run_response.py +293 -0
  264. autogen/io/thread_io_stream.py +63 -0
  265. autogen/io/websockets.py +213 -0
  266. autogen/json_utils.py +43 -0
  267. autogen/llm_config.py +379 -0
  268. autogen/logger/__init__.py +11 -0
  269. autogen/logger/base_logger.py +128 -0
  270. autogen/logger/file_logger.py +261 -0
  271. autogen/logger/logger_factory.py +42 -0
  272. autogen/logger/logger_utils.py +57 -0
  273. autogen/logger/sqlite_logger.py +523 -0
  274. autogen/math_utils.py +339 -0
  275. autogen/mcp/__init__.py +7 -0
  276. autogen/mcp/mcp_client.py +208 -0
  277. autogen/messages/__init__.py +7 -0
  278. autogen/messages/agent_messages.py +948 -0
  279. autogen/messages/base_message.py +107 -0
  280. autogen/messages/client_messages.py +171 -0
  281. autogen/messages/print_message.py +49 -0
  282. autogen/oai/__init__.py +53 -0
  283. autogen/oai/anthropic.py +714 -0
  284. autogen/oai/bedrock.py +628 -0
  285. autogen/oai/cerebras.py +299 -0
  286. autogen/oai/client.py +1435 -0
  287. autogen/oai/client_utils.py +169 -0
  288. autogen/oai/cohere.py +479 -0
  289. autogen/oai/gemini.py +990 -0
  290. autogen/oai/gemini_types.py +129 -0
  291. autogen/oai/groq.py +305 -0
  292. autogen/oai/mistral.py +303 -0
  293. autogen/oai/oai_models/__init__.py +11 -0
  294. autogen/oai/oai_models/_models.py +16 -0
  295. autogen/oai/oai_models/chat_completion.py +87 -0
  296. autogen/oai/oai_models/chat_completion_audio.py +32 -0
  297. autogen/oai/oai_models/chat_completion_message.py +86 -0
  298. autogen/oai/oai_models/chat_completion_message_tool_call.py +37 -0
  299. autogen/oai/oai_models/chat_completion_token_logprob.py +63 -0
  300. autogen/oai/oai_models/completion_usage.py +60 -0
  301. autogen/oai/ollama.py +643 -0
  302. autogen/oai/openai_utils.py +881 -0
  303. autogen/oai/together.py +370 -0
  304. autogen/retrieve_utils.py +491 -0
  305. autogen/runtime_logging.py +160 -0
  306. autogen/token_count_utils.py +267 -0
  307. autogen/tools/__init__.py +20 -0
  308. autogen/tools/contrib/__init__.py +9 -0
  309. autogen/tools/contrib/time/__init__.py +7 -0
  310. autogen/tools/contrib/time/time.py +41 -0
  311. autogen/tools/dependency_injection.py +254 -0
  312. autogen/tools/experimental/__init__.py +43 -0
  313. autogen/tools/experimental/browser_use/__init__.py +7 -0
  314. autogen/tools/experimental/browser_use/browser_use.py +161 -0
  315. autogen/tools/experimental/crawl4ai/__init__.py +7 -0
  316. autogen/tools/experimental/crawl4ai/crawl4ai.py +153 -0
  317. autogen/tools/experimental/deep_research/__init__.py +7 -0
  318. autogen/tools/experimental/deep_research/deep_research.py +328 -0
  319. autogen/tools/experimental/duckduckgo/__init__.py +7 -0
  320. autogen/tools/experimental/duckduckgo/duckduckgo_search.py +109 -0
  321. autogen/tools/experimental/google/__init__.py +14 -0
  322. autogen/tools/experimental/google/authentication/__init__.py +11 -0
  323. autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
  324. autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
  325. autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
  326. autogen/tools/experimental/google/drive/__init__.py +9 -0
  327. autogen/tools/experimental/google/drive/drive_functions.py +124 -0
  328. autogen/tools/experimental/google/drive/toolkit.py +88 -0
  329. autogen/tools/experimental/google/model.py +17 -0
  330. autogen/tools/experimental/google/toolkit_protocol.py +19 -0
  331. autogen/tools/experimental/google_search/__init__.py +8 -0
  332. autogen/tools/experimental/google_search/google_search.py +93 -0
  333. autogen/tools/experimental/google_search/youtube_search.py +181 -0
  334. autogen/tools/experimental/messageplatform/__init__.py +17 -0
  335. autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
  336. autogen/tools/experimental/messageplatform/discord/discord.py +288 -0
  337. autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
  338. autogen/tools/experimental/messageplatform/slack/slack.py +391 -0
  339. autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
  340. autogen/tools/experimental/messageplatform/telegram/telegram.py +275 -0
  341. autogen/tools/experimental/perplexity/__init__.py +7 -0
  342. autogen/tools/experimental/perplexity/perplexity_search.py +260 -0
  343. autogen/tools/experimental/tavily/__init__.py +7 -0
  344. autogen/tools/experimental/tavily/tavily_search.py +183 -0
  345. autogen/tools/experimental/web_search_preview/__init__.py +7 -0
  346. autogen/tools/experimental/web_search_preview/web_search_preview.py +114 -0
  347. autogen/tools/experimental/wikipedia/__init__.py +7 -0
  348. autogen/tools/experimental/wikipedia/wikipedia.py +287 -0
  349. autogen/tools/function_utils.py +411 -0
  350. autogen/tools/tool.py +187 -0
  351. autogen/tools/toolkit.py +86 -0
  352. autogen/types.py +29 -0
  353. autogen/version.py +7 -0
  354. ag2-0.9.1.dist-info/RECORD +0 -6
  355. ag2-0.9.1.dist-info/top_level.txt +0 -1
  356. {ag2-0.9.1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/LICENSE +0 -0
  357. {ag2-0.9.1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/NOTICE.md +0 -0
@@ -0,0 +1,192 @@
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, Generator, Iterable, Optional
6
+
7
+ from pydantic import BaseModel, Field
8
+
9
+ __all__ = ["ContextVariables"]
10
+
11
+ # Parameter name for context variables
12
+ # Use the value in functions and they will be substituted with the context variables:
13
+ # e.g. def my_function(context_variables: ContextVariables, my_other_parameters: Any) -> Any:
14
+ __CONTEXT_VARIABLES_PARAM_NAME__ = "context_variables"
15
+
16
+
17
+ class ContextVariables(BaseModel):
18
+ """
19
+ Stores and manages context variables for agentic workflows.
20
+
21
+ Utilises a dictionary-like interface for setting, getting, and removing variables.
22
+ """
23
+
24
+ # Internal storage for context variables
25
+ data: dict[str, Any] = Field(default_factory=dict)
26
+
27
+ def __init__(self, data: Optional[dict[str, Any]] = None, **kwargs: Any) -> None:
28
+ """Initialize with data dictionary as an optional positional parameter.
29
+
30
+ Args:
31
+ data: Initial dictionary of context variables (optional)
32
+ kwargs: Additional keyword arguments for the parent class
33
+ """
34
+ init_data = data or {}
35
+ super().__init__(data=init_data, **kwargs)
36
+
37
+ def get(self, key: str, default: Optional[Any] = None) -> Optional[Any]:
38
+ """
39
+ Get a value from the context by key.
40
+
41
+ Args:
42
+ key: The key to retrieve
43
+ default: The default value to return if key is not found
44
+
45
+ Returns:
46
+ The value associated with the key or default if not found
47
+ """
48
+ return self.data.get(key, default)
49
+
50
+ def set(self, key: str, value: Any) -> None:
51
+ """
52
+ Set a value in the context by key.
53
+
54
+ Args:
55
+ key: The key to set
56
+ value: The value to store
57
+ """
58
+ self.data[key] = value
59
+
60
+ def remove(self, key: str) -> bool:
61
+ """
62
+ Remove a key from the context.
63
+
64
+ Args:
65
+ key: The key to remove
66
+
67
+ Returns:
68
+ True if the key was removed, False if it didn't exist
69
+ """
70
+ if key in self.data:
71
+ del self.data[key]
72
+ return True
73
+ return False
74
+
75
+ def keys(self) -> Iterable[str]:
76
+ """
77
+ Get all keys in the context.
78
+
79
+ Returns:
80
+ An iterable of all keys
81
+ """
82
+ return self.data.keys()
83
+
84
+ def values(self) -> Iterable[Any]:
85
+ """
86
+ Get all values in the context.
87
+
88
+ Returns:
89
+ An iterable of all values
90
+ """
91
+ return self.data.values()
92
+
93
+ def items(self) -> Iterable[tuple[str, Any]]:
94
+ """
95
+ Get all key-value pairs in the context.
96
+
97
+ Returns:
98
+ An iterable of all key-value pairs
99
+ """
100
+ return self.data.items()
101
+
102
+ def clear(self) -> None:
103
+ """Clear all keys and values from the context."""
104
+ self.data.clear()
105
+
106
+ def contains(self, key: str) -> bool:
107
+ """
108
+ Check if a key exists in the context.
109
+
110
+ Args:
111
+ key: The key to check
112
+
113
+ Returns:
114
+ True if the key exists, False otherwise
115
+ """
116
+ return key in self.data
117
+
118
+ def update(self, other: dict[str, Any]) -> None:
119
+ """
120
+ Update context with key-value pairs from another dictionary.
121
+
122
+ Args:
123
+ other: Dictionary containing key-value pairs to add
124
+ """
125
+ self.data.update(other)
126
+
127
+ def to_dict(self) -> dict[str, Any]:
128
+ """
129
+ Convert context variables to a dictionary.
130
+
131
+ Returns:
132
+ Dictionary representation of all context variables
133
+ """
134
+ return self.data.copy()
135
+
136
+ # Dictionary-compatible interface
137
+ def __getitem__(self, key: str) -> Any:
138
+ """Get a value using dictionary syntax: context[key]"""
139
+ try:
140
+ return self.data[key]
141
+ except KeyError:
142
+ raise KeyError(f"Context variable '{key}' not found")
143
+
144
+ def __setitem__(self, key: str, value: Any) -> None:
145
+ """Set a value using dictionary syntax: context[key] = value"""
146
+ self.data[key] = value
147
+
148
+ def __delitem__(self, key: str) -> None:
149
+ """Delete a key using dictionary syntax: del context[key]"""
150
+ try:
151
+ del self.data[key]
152
+ except KeyError:
153
+ raise KeyError(f"Cannot delete non-existent context variable '{key}'")
154
+
155
+ def __contains__(self, key: str) -> bool:
156
+ """Check if key exists using 'in' operator: key in context"""
157
+ return key in self.data
158
+
159
+ def __len__(self) -> int:
160
+ """Get the number of items: len(context)"""
161
+ return len(self.data)
162
+
163
+ def __iter__(self) -> Generator[tuple[str, Any], None, None]:
164
+ """Iterate over keys: for key in context"""
165
+ for key in self.data:
166
+ yield (key, self.data[key])
167
+
168
+ def __str__(self) -> str:
169
+ """String representation of context variables."""
170
+ return f"ContextVariables({self.data})"
171
+
172
+ def __repr__(self) -> str:
173
+ """Detailed representation of context variables."""
174
+ return f"ContextVariables(data={self.data!r})"
175
+
176
+ # Utility methods
177
+ @classmethod
178
+ def from_dict(cls, data: dict[str, Any]) -> "ContextVariables":
179
+ """
180
+ Create a new ContextVariables instance from a dictionary.
181
+
182
+ E.g.:
183
+ my_context = {"user_id": "12345", "settings": {"theme": "dark"}}
184
+ context = ContextVariables.from_dict(my_context)
185
+
186
+ Args:
187
+ data: Dictionary of key-value pairs
188
+
189
+ Returns:
190
+ New ContextVariables instance
191
+ """
192
+ return cls(data=data)
@@ -0,0 +1,202 @@
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 inspect
6
+ from copy import deepcopy
7
+ from typing import Annotated, Any, Callable, Optional
8
+
9
+ from ...oai import OpenAIWrapper
10
+ from ...tools import Depends, Tool
11
+ from ...tools.dependency_injection import inject_params, on
12
+ from ..agent import Agent
13
+ from ..conversable_agent import ConversableAgent
14
+ from .context_variables import __CONTEXT_VARIABLES_PARAM_NAME__, ContextVariables
15
+ from .reply_result import ReplyResult
16
+ from .targets.transition_target import TransitionTarget
17
+
18
+ __TOOL_EXECUTOR_NAME__ = "_Group_Tool_Executor"
19
+
20
+
21
+ class GroupToolExecutor(ConversableAgent):
22
+ """Tool executor for the group chat initiated with initiate_group_chat"""
23
+
24
+ def __init__(self) -> None:
25
+ super().__init__(
26
+ name=__TOOL_EXECUTOR_NAME__,
27
+ system_message="Tool Execution, do not use this agent directly.",
28
+ human_input_mode="NEVER",
29
+ code_execution_config=False,
30
+ )
31
+
32
+ # Store the next target from a tool call
33
+ self._group_next_target: Optional[TransitionTarget] = None
34
+
35
+ # Primary tool reply function for handling the tool reply and the ReplyResult and TransitionTarget returns
36
+ self.register_reply([Agent, None], self._generate_group_tool_reply, remove_other_reply_funcs=True)
37
+
38
+ def set_next_target(self, next_target: TransitionTarget) -> None:
39
+ """Sets the next target to transition to, used in the determine_next_agent function."""
40
+ self._group_next_target = next_target
41
+
42
+ def get_next_target(self) -> TransitionTarget:
43
+ """Gets the next target to transition to."""
44
+ """Returns the next target to transition to, if it exists."""
45
+ if self._group_next_target is None:
46
+ raise ValueError(
47
+ "No next target set. Please set a next target before calling this method. Use has_next_target() to check if a next target exists."
48
+ )
49
+ return self._group_next_target
50
+
51
+ def has_next_target(self) -> bool:
52
+ """Checks if there is a next target to transition to."""
53
+ return self._group_next_target is not None
54
+
55
+ def clear_next_target(self) -> None:
56
+ """Clears the next target to transition to."""
57
+ self._group_next_target = None
58
+
59
+ def _modify_context_variables_param(
60
+ self, f: Callable[..., Any], context_variables: ContextVariables
61
+ ) -> Callable[..., Any]:
62
+ """Modifies the context_variables parameter to use dependency injection and link it to the group context variables.
63
+
64
+ This essentially changes:
65
+ def some_function(some_variable: int, context_variables: ContextVariables) -> str:
66
+
67
+ to:
68
+
69
+ def some_function(some_variable: int, context_variables: Annotated[ContextVariables, Depends(on(self.context_variables))]) -> str:
70
+ """
71
+ sig = inspect.signature(f)
72
+
73
+ # Check if context_variables parameter exists and update it if so
74
+ if __CONTEXT_VARIABLES_PARAM_NAME__ in sig.parameters:
75
+ new_params = []
76
+ for name, param in sig.parameters.items():
77
+ if name == __CONTEXT_VARIABLES_PARAM_NAME__:
78
+ # Replace with new annotation using Depends
79
+ new_param = param.replace(annotation=Annotated[ContextVariables, Depends(on(context_variables))])
80
+ new_params.append(new_param)
81
+ else:
82
+ new_params.append(param)
83
+
84
+ # Update signature
85
+ new_sig = sig.replace(parameters=new_params)
86
+ f.__signature__ = new_sig # type: ignore[attr-defined]
87
+
88
+ return f
89
+
90
+ def _change_tool_context_variables_to_depends(
91
+ self, agent: ConversableAgent, current_tool: Tool, context_variables: ContextVariables
92
+ ) -> None:
93
+ """Checks for the context_variables parameter in the tool and updates it to use dependency injection."""
94
+
95
+ # If the tool has a context_variables parameter, remove the tool and reregister it without the parameter
96
+ if __CONTEXT_VARIABLES_PARAM_NAME__ in current_tool.tool_schema["function"]["parameters"]["properties"]:
97
+ # We'll replace the tool, so start with getting the underlying function
98
+ tool_func = current_tool._func
99
+
100
+ # Remove the Tool from the agent
101
+ name = current_tool._name
102
+ description = current_tool._description
103
+ agent.remove_tool_for_llm(current_tool)
104
+
105
+ # Recreate the tool without the context_variables parameter
106
+ tool_func = self._modify_context_variables_param(current_tool._func, context_variables)
107
+ tool_func = inject_params(tool_func)
108
+ new_tool = ConversableAgent._create_tool_if_needed(
109
+ func_or_tool=tool_func, name=name, description=description
110
+ )
111
+
112
+ # Re-register with the agent
113
+ agent.register_for_llm()(new_tool)
114
+
115
+ def register_agents_functions(self, agents: list[ConversableAgent], context_variables: ContextVariables) -> None:
116
+ """Adds the functions of the agents to the group tool executor."""
117
+ for agent in agents:
118
+ # As we're moving towards tools and away from function maps, this may not be used
119
+ self._function_map.update(agent._function_map)
120
+
121
+ # Update any agent tools that have context_variables parameters to use Dependency Injection
122
+ for tool in agent.tools:
123
+ self._change_tool_context_variables_to_depends(agent, tool, context_variables)
124
+
125
+ # Add all tools to the Tool Executor agent
126
+ for tool in agent.tools:
127
+ self.register_for_execution(serialize=False, silent_override=True)(tool)
128
+
129
+ def _generate_group_tool_reply(
130
+ self,
131
+ agent: ConversableAgent,
132
+ messages: Optional[list[dict[str, Any]]] = None,
133
+ sender: Optional[Agent] = None,
134
+ config: Optional[OpenAIWrapper] = None,
135
+ ) -> tuple[bool, Optional[dict[str, Any]]]:
136
+ """Pre-processes and generates tool call replies.
137
+
138
+ This function:
139
+ 1. Adds context_variables back to the tool call for the function, if necessary.
140
+ 2. Generates the tool calls reply.
141
+ 3. Updates context_variables and next_agent based on the tool call response."""
142
+
143
+ if config is None:
144
+ config = agent # type: ignore[assignment]
145
+ if messages is None:
146
+ messages = agent._oai_messages[sender]
147
+
148
+ message = messages[-1]
149
+ if "tool_calls" in message:
150
+ tool_call_count = len(message["tool_calls"])
151
+
152
+ # Loop through tool calls individually (so context can be updated after each function call)
153
+ next_target: Optional[TransitionTarget] = None
154
+ tool_responses_inner = []
155
+ contents = []
156
+ for index in range(tool_call_count):
157
+ message_copy = deepcopy(message)
158
+
159
+ # 1. add context_variables to the tool call arguments
160
+ tool_call = message_copy["tool_calls"][index]
161
+
162
+ # Ensure we are only executing the one tool at a time
163
+ message_copy["tool_calls"] = [tool_call]
164
+
165
+ # 2. generate tool calls reply
166
+ _, tool_message = agent.generate_tool_calls_reply([message_copy])
167
+
168
+ if tool_message is None:
169
+ raise ValueError("Tool call did not return a message")
170
+
171
+ # 3. update context_variables and next_agent, convert content to string
172
+ for tool_response in tool_message["tool_responses"]:
173
+ content = tool_response.get("content")
174
+
175
+ # Tool Call returns that are a target are either a ReplyResult or a TransitionTarget are the next agent
176
+ if isinstance(content, ReplyResult):
177
+ if content.context_variables and content.context_variables.to_dict() != {}:
178
+ agent.context_variables.update(content.context_variables.to_dict())
179
+ if content.target is not None:
180
+ next_target = content.target
181
+ elif isinstance(content, TransitionTarget):
182
+ next_target = content
183
+
184
+ # Serialize the content to a string
185
+ if content is not None:
186
+ tool_response["content"] = str(content)
187
+
188
+ tool_responses_inner.append(tool_response)
189
+ contents.append(str(tool_response["content"]))
190
+
191
+ self._group_next_target = next_target # type: ignore[attr-defined]
192
+
193
+ # Put the tool responses and content strings back into the response message
194
+ # Caters for multiple tool calls
195
+ if tool_message is None:
196
+ raise ValueError("Tool call did not return a message")
197
+
198
+ tool_message["tool_responses"] = tool_responses_inner
199
+ tool_message["content"] = "\n".join(contents)
200
+
201
+ return True, tool_message
202
+ return False, None