ag2 0.10.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. ag2-0.10.2.dist-info/METADATA +819 -0
  2. ag2-0.10.2.dist-info/RECORD +423 -0
  3. ag2-0.10.2.dist-info/WHEEL +4 -0
  4. ag2-0.10.2.dist-info/licenses/LICENSE +201 -0
  5. ag2-0.10.2.dist-info/licenses/NOTICE.md +19 -0
  6. autogen/__init__.py +88 -0
  7. autogen/_website/__init__.py +3 -0
  8. autogen/_website/generate_api_references.py +426 -0
  9. autogen/_website/generate_mkdocs.py +1216 -0
  10. autogen/_website/notebook_processor.py +475 -0
  11. autogen/_website/process_notebooks.py +656 -0
  12. autogen/_website/utils.py +413 -0
  13. autogen/a2a/__init__.py +36 -0
  14. autogen/a2a/agent_executor.py +86 -0
  15. autogen/a2a/client.py +357 -0
  16. autogen/a2a/errors.py +18 -0
  17. autogen/a2a/httpx_client_factory.py +79 -0
  18. autogen/a2a/server.py +221 -0
  19. autogen/a2a/utils.py +207 -0
  20. autogen/agentchat/__init__.py +47 -0
  21. autogen/agentchat/agent.py +180 -0
  22. autogen/agentchat/assistant_agent.py +86 -0
  23. autogen/agentchat/chat.py +325 -0
  24. autogen/agentchat/contrib/__init__.py +5 -0
  25. autogen/agentchat/contrib/agent_eval/README.md +7 -0
  26. autogen/agentchat/contrib/agent_eval/agent_eval.py +108 -0
  27. autogen/agentchat/contrib/agent_eval/criterion.py +43 -0
  28. autogen/agentchat/contrib/agent_eval/critic_agent.py +44 -0
  29. autogen/agentchat/contrib/agent_eval/quantifier_agent.py +39 -0
  30. autogen/agentchat/contrib/agent_eval/subcritic_agent.py +45 -0
  31. autogen/agentchat/contrib/agent_eval/task.py +42 -0
  32. autogen/agentchat/contrib/agent_optimizer.py +432 -0
  33. autogen/agentchat/contrib/capabilities/__init__.py +5 -0
  34. autogen/agentchat/contrib/capabilities/agent_capability.py +20 -0
  35. autogen/agentchat/contrib/capabilities/generate_images.py +301 -0
  36. autogen/agentchat/contrib/capabilities/teachability.py +393 -0
  37. autogen/agentchat/contrib/capabilities/text_compressors.py +66 -0
  38. autogen/agentchat/contrib/capabilities/tools_capability.py +22 -0
  39. autogen/agentchat/contrib/capabilities/transform_messages.py +93 -0
  40. autogen/agentchat/contrib/capabilities/transforms.py +578 -0
  41. autogen/agentchat/contrib/capabilities/transforms_util.py +122 -0
  42. autogen/agentchat/contrib/capabilities/vision_capability.py +215 -0
  43. autogen/agentchat/contrib/captainagent/__init__.py +9 -0
  44. autogen/agentchat/contrib/captainagent/agent_builder.py +790 -0
  45. autogen/agentchat/contrib/captainagent/captainagent.py +514 -0
  46. autogen/agentchat/contrib/captainagent/tool_retriever.py +334 -0
  47. autogen/agentchat/contrib/captainagent/tools/README.md +44 -0
  48. autogen/agentchat/contrib/captainagent/tools/__init__.py +5 -0
  49. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation.py +40 -0
  50. autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis.py +28 -0
  51. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr.py +28 -0
  52. autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore.py +28 -0
  53. autogen/agentchat/contrib/captainagent/tools/data_analysis/explore_csv.py +21 -0
  54. autogen/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test.py +30 -0
  55. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download.py +27 -0
  56. autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search.py +53 -0
  57. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image.py +53 -0
  58. autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text.py +38 -0
  59. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text.py +21 -0
  60. autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption.py +34 -0
  61. autogen/agentchat/contrib/captainagent/tools/information_retrieval/image_qa.py +60 -0
  62. autogen/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition.py +61 -0
  63. autogen/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search.py +47 -0
  64. autogen/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables.py +33 -0
  65. autogen/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file.py +21 -0
  66. autogen/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download.py +35 -0
  67. autogen/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter.py +21 -0
  68. autogen/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week.py +18 -0
  69. autogen/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum.py +28 -0
  70. autogen/agentchat/contrib/captainagent/tools/math/calculate_matrix_power.py +31 -0
  71. autogen/agentchat/contrib/captainagent/tools/math/calculate_reflected_point.py +16 -0
  72. autogen/agentchat/contrib/captainagent/tools/math/complex_numbers_product.py +25 -0
  73. autogen/agentchat/contrib/captainagent/tools/math/compute_currency_conversion.py +23 -0
  74. autogen/agentchat/contrib/captainagent/tools/math/count_distinct_permutations.py +27 -0
  75. autogen/agentchat/contrib/captainagent/tools/math/evaluate_expression.py +28 -0
  76. autogen/agentchat/contrib/captainagent/tools/math/find_continuity_point.py +34 -0
  77. autogen/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers.py +39 -0
  78. autogen/agentchat/contrib/captainagent/tools/math/modular_inverse_sum.py +23 -0
  79. autogen/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers.py +36 -0
  80. autogen/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials.py +15 -0
  81. autogen/agentchat/contrib/captainagent/tools/math/sum_of_primes_below.py +15 -0
  82. autogen/agentchat/contrib/captainagent/tools/requirements.txt +10 -0
  83. autogen/agentchat/contrib/captainagent/tools/tool_description.tsv +34 -0
  84. autogen/agentchat/contrib/gpt_assistant_agent.py +526 -0
  85. autogen/agentchat/contrib/graph_rag/__init__.py +9 -0
  86. autogen/agentchat/contrib/graph_rag/document.py +29 -0
  87. autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py +167 -0
  88. autogen/agentchat/contrib/graph_rag/falkor_graph_rag_capability.py +103 -0
  89. autogen/agentchat/contrib/graph_rag/graph_query_engine.py +53 -0
  90. autogen/agentchat/contrib/graph_rag/graph_rag_capability.py +63 -0
  91. autogen/agentchat/contrib/graph_rag/neo4j_graph_query_engine.py +263 -0
  92. autogen/agentchat/contrib/graph_rag/neo4j_graph_rag_capability.py +83 -0
  93. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_query_engine.py +210 -0
  94. autogen/agentchat/contrib/graph_rag/neo4j_native_graph_rag_capability.py +93 -0
  95. autogen/agentchat/contrib/img_utils.py +397 -0
  96. autogen/agentchat/contrib/llamaindex_conversable_agent.py +117 -0
  97. autogen/agentchat/contrib/llava_agent.py +189 -0
  98. autogen/agentchat/contrib/math_user_proxy_agent.py +464 -0
  99. autogen/agentchat/contrib/multimodal_conversable_agent.py +125 -0
  100. autogen/agentchat/contrib/qdrant_retrieve_user_proxy_agent.py +325 -0
  101. autogen/agentchat/contrib/rag/__init__.py +10 -0
  102. autogen/agentchat/contrib/rag/chromadb_query_engine.py +268 -0
  103. autogen/agentchat/contrib/rag/llamaindex_query_engine.py +195 -0
  104. autogen/agentchat/contrib/rag/mongodb_query_engine.py +319 -0
  105. autogen/agentchat/contrib/rag/query_engine.py +76 -0
  106. autogen/agentchat/contrib/retrieve_assistant_agent.py +59 -0
  107. autogen/agentchat/contrib/retrieve_user_proxy_agent.py +704 -0
  108. autogen/agentchat/contrib/society_of_mind_agent.py +200 -0
  109. autogen/agentchat/contrib/swarm_agent.py +1404 -0
  110. autogen/agentchat/contrib/text_analyzer_agent.py +79 -0
  111. autogen/agentchat/contrib/vectordb/__init__.py +5 -0
  112. autogen/agentchat/contrib/vectordb/base.py +224 -0
  113. autogen/agentchat/contrib/vectordb/chromadb.py +316 -0
  114. autogen/agentchat/contrib/vectordb/couchbase.py +405 -0
  115. autogen/agentchat/contrib/vectordb/mongodb.py +551 -0
  116. autogen/agentchat/contrib/vectordb/pgvectordb.py +927 -0
  117. autogen/agentchat/contrib/vectordb/qdrant.py +320 -0
  118. autogen/agentchat/contrib/vectordb/utils.py +126 -0
  119. autogen/agentchat/contrib/web_surfer.py +304 -0
  120. autogen/agentchat/conversable_agent.py +4307 -0
  121. autogen/agentchat/group/__init__.py +67 -0
  122. autogen/agentchat/group/available_condition.py +91 -0
  123. autogen/agentchat/group/context_condition.py +77 -0
  124. autogen/agentchat/group/context_expression.py +238 -0
  125. autogen/agentchat/group/context_str.py +39 -0
  126. autogen/agentchat/group/context_variables.py +182 -0
  127. autogen/agentchat/group/events/transition_events.py +111 -0
  128. autogen/agentchat/group/group_tool_executor.py +324 -0
  129. autogen/agentchat/group/group_utils.py +659 -0
  130. autogen/agentchat/group/guardrails.py +179 -0
  131. autogen/agentchat/group/handoffs.py +303 -0
  132. autogen/agentchat/group/llm_condition.py +93 -0
  133. autogen/agentchat/group/multi_agent_chat.py +291 -0
  134. autogen/agentchat/group/on_condition.py +55 -0
  135. autogen/agentchat/group/on_context_condition.py +51 -0
  136. autogen/agentchat/group/patterns/__init__.py +18 -0
  137. autogen/agentchat/group/patterns/auto.py +160 -0
  138. autogen/agentchat/group/patterns/manual.py +177 -0
  139. autogen/agentchat/group/patterns/pattern.py +295 -0
  140. autogen/agentchat/group/patterns/random.py +106 -0
  141. autogen/agentchat/group/patterns/round_robin.py +117 -0
  142. autogen/agentchat/group/reply_result.py +24 -0
  143. autogen/agentchat/group/safeguards/__init__.py +21 -0
  144. autogen/agentchat/group/safeguards/api.py +241 -0
  145. autogen/agentchat/group/safeguards/enforcer.py +1158 -0
  146. autogen/agentchat/group/safeguards/events.py +140 -0
  147. autogen/agentchat/group/safeguards/validator.py +435 -0
  148. autogen/agentchat/group/speaker_selection_result.py +41 -0
  149. autogen/agentchat/group/targets/__init__.py +4 -0
  150. autogen/agentchat/group/targets/function_target.py +245 -0
  151. autogen/agentchat/group/targets/group_chat_target.py +133 -0
  152. autogen/agentchat/group/targets/group_manager_target.py +151 -0
  153. autogen/agentchat/group/targets/transition_target.py +424 -0
  154. autogen/agentchat/group/targets/transition_utils.py +6 -0
  155. autogen/agentchat/groupchat.py +1832 -0
  156. autogen/agentchat/realtime/__init__.py +3 -0
  157. autogen/agentchat/realtime/experimental/__init__.py +20 -0
  158. autogen/agentchat/realtime/experimental/audio_adapters/__init__.py +8 -0
  159. autogen/agentchat/realtime/experimental/audio_adapters/twilio_audio_adapter.py +148 -0
  160. autogen/agentchat/realtime/experimental/audio_adapters/websocket_audio_adapter.py +139 -0
  161. autogen/agentchat/realtime/experimental/audio_observer.py +42 -0
  162. autogen/agentchat/realtime/experimental/clients/__init__.py +15 -0
  163. autogen/agentchat/realtime/experimental/clients/gemini/__init__.py +7 -0
  164. autogen/agentchat/realtime/experimental/clients/gemini/client.py +274 -0
  165. autogen/agentchat/realtime/experimental/clients/oai/__init__.py +8 -0
  166. autogen/agentchat/realtime/experimental/clients/oai/base_client.py +220 -0
  167. autogen/agentchat/realtime/experimental/clients/oai/rtc_client.py +243 -0
  168. autogen/agentchat/realtime/experimental/clients/oai/utils.py +48 -0
  169. autogen/agentchat/realtime/experimental/clients/realtime_client.py +191 -0
  170. autogen/agentchat/realtime/experimental/function_observer.py +84 -0
  171. autogen/agentchat/realtime/experimental/realtime_agent.py +158 -0
  172. autogen/agentchat/realtime/experimental/realtime_events.py +42 -0
  173. autogen/agentchat/realtime/experimental/realtime_observer.py +100 -0
  174. autogen/agentchat/realtime/experimental/realtime_swarm.py +533 -0
  175. autogen/agentchat/realtime/experimental/websockets.py +21 -0
  176. autogen/agentchat/realtime_agent/__init__.py +21 -0
  177. autogen/agentchat/user_proxy_agent.py +114 -0
  178. autogen/agentchat/utils.py +206 -0
  179. autogen/agents/__init__.py +3 -0
  180. autogen/agents/contrib/__init__.py +10 -0
  181. autogen/agents/contrib/time/__init__.py +8 -0
  182. autogen/agents/contrib/time/time_reply_agent.py +74 -0
  183. autogen/agents/contrib/time/time_tool_agent.py +52 -0
  184. autogen/agents/experimental/__init__.py +27 -0
  185. autogen/agents/experimental/deep_research/__init__.py +7 -0
  186. autogen/agents/experimental/deep_research/deep_research.py +52 -0
  187. autogen/agents/experimental/discord/__init__.py +7 -0
  188. autogen/agents/experimental/discord/discord.py +66 -0
  189. autogen/agents/experimental/document_agent/__init__.py +19 -0
  190. autogen/agents/experimental/document_agent/chroma_query_engine.py +301 -0
  191. autogen/agents/experimental/document_agent/docling_doc_ingest_agent.py +113 -0
  192. autogen/agents/experimental/document_agent/document_agent.py +643 -0
  193. autogen/agents/experimental/document_agent/document_conditions.py +50 -0
  194. autogen/agents/experimental/document_agent/document_utils.py +376 -0
  195. autogen/agents/experimental/document_agent/inmemory_query_engine.py +214 -0
  196. autogen/agents/experimental/document_agent/parser_utils.py +134 -0
  197. autogen/agents/experimental/document_agent/url_utils.py +417 -0
  198. autogen/agents/experimental/reasoning/__init__.py +7 -0
  199. autogen/agents/experimental/reasoning/reasoning_agent.py +1178 -0
  200. autogen/agents/experimental/slack/__init__.py +7 -0
  201. autogen/agents/experimental/slack/slack.py +73 -0
  202. autogen/agents/experimental/telegram/__init__.py +7 -0
  203. autogen/agents/experimental/telegram/telegram.py +76 -0
  204. autogen/agents/experimental/websurfer/__init__.py +7 -0
  205. autogen/agents/experimental/websurfer/websurfer.py +70 -0
  206. autogen/agents/experimental/wikipedia/__init__.py +7 -0
  207. autogen/agents/experimental/wikipedia/wikipedia.py +88 -0
  208. autogen/browser_utils.py +309 -0
  209. autogen/cache/__init__.py +10 -0
  210. autogen/cache/abstract_cache_base.py +71 -0
  211. autogen/cache/cache.py +203 -0
  212. autogen/cache/cache_factory.py +88 -0
  213. autogen/cache/cosmos_db_cache.py +144 -0
  214. autogen/cache/disk_cache.py +97 -0
  215. autogen/cache/in_memory_cache.py +54 -0
  216. autogen/cache/redis_cache.py +119 -0
  217. autogen/code_utils.py +598 -0
  218. autogen/coding/__init__.py +30 -0
  219. autogen/coding/base.py +120 -0
  220. autogen/coding/docker_commandline_code_executor.py +283 -0
  221. autogen/coding/factory.py +56 -0
  222. autogen/coding/func_with_reqs.py +203 -0
  223. autogen/coding/jupyter/__init__.py +23 -0
  224. autogen/coding/jupyter/base.py +36 -0
  225. autogen/coding/jupyter/docker_jupyter_server.py +160 -0
  226. autogen/coding/jupyter/embedded_ipython_code_executor.py +182 -0
  227. autogen/coding/jupyter/import_utils.py +82 -0
  228. autogen/coding/jupyter/jupyter_client.py +224 -0
  229. autogen/coding/jupyter/jupyter_code_executor.py +154 -0
  230. autogen/coding/jupyter/local_jupyter_server.py +164 -0
  231. autogen/coding/local_commandline_code_executor.py +341 -0
  232. autogen/coding/markdown_code_extractor.py +44 -0
  233. autogen/coding/utils.py +55 -0
  234. autogen/coding/yepcode_code_executor.py +197 -0
  235. autogen/doc_utils.py +35 -0
  236. autogen/environments/__init__.py +10 -0
  237. autogen/environments/docker_python_environment.py +365 -0
  238. autogen/environments/python_environment.py +125 -0
  239. autogen/environments/system_python_environment.py +85 -0
  240. autogen/environments/venv_python_environment.py +220 -0
  241. autogen/environments/working_directory.py +74 -0
  242. autogen/events/__init__.py +7 -0
  243. autogen/events/agent_events.py +1016 -0
  244. autogen/events/base_event.py +100 -0
  245. autogen/events/client_events.py +168 -0
  246. autogen/events/helpers.py +44 -0
  247. autogen/events/print_event.py +45 -0
  248. autogen/exception_utils.py +73 -0
  249. autogen/extensions/__init__.py +5 -0
  250. autogen/fast_depends/__init__.py +16 -0
  251. autogen/fast_depends/_compat.py +75 -0
  252. autogen/fast_depends/core/__init__.py +14 -0
  253. autogen/fast_depends/core/build.py +206 -0
  254. autogen/fast_depends/core/model.py +527 -0
  255. autogen/fast_depends/dependencies/__init__.py +15 -0
  256. autogen/fast_depends/dependencies/model.py +30 -0
  257. autogen/fast_depends/dependencies/provider.py +40 -0
  258. autogen/fast_depends/library/__init__.py +10 -0
  259. autogen/fast_depends/library/model.py +46 -0
  260. autogen/fast_depends/py.typed +6 -0
  261. autogen/fast_depends/schema.py +66 -0
  262. autogen/fast_depends/use.py +272 -0
  263. autogen/fast_depends/utils.py +177 -0
  264. autogen/formatting_utils.py +83 -0
  265. autogen/function_utils.py +13 -0
  266. autogen/graph_utils.py +173 -0
  267. autogen/import_utils.py +539 -0
  268. autogen/interop/__init__.py +22 -0
  269. autogen/interop/crewai/__init__.py +7 -0
  270. autogen/interop/crewai/crewai.py +88 -0
  271. autogen/interop/interoperability.py +71 -0
  272. autogen/interop/interoperable.py +46 -0
  273. autogen/interop/langchain/__init__.py +8 -0
  274. autogen/interop/langchain/langchain_chat_model_factory.py +156 -0
  275. autogen/interop/langchain/langchain_tool.py +78 -0
  276. autogen/interop/litellm/__init__.py +7 -0
  277. autogen/interop/litellm/litellm_config_factory.py +178 -0
  278. autogen/interop/pydantic_ai/__init__.py +7 -0
  279. autogen/interop/pydantic_ai/pydantic_ai.py +172 -0
  280. autogen/interop/registry.py +70 -0
  281. autogen/io/__init__.py +15 -0
  282. autogen/io/base.py +151 -0
  283. autogen/io/console.py +56 -0
  284. autogen/io/processors/__init__.py +12 -0
  285. autogen/io/processors/base.py +21 -0
  286. autogen/io/processors/console_event_processor.py +61 -0
  287. autogen/io/run_response.py +294 -0
  288. autogen/io/thread_io_stream.py +63 -0
  289. autogen/io/websockets.py +214 -0
  290. autogen/json_utils.py +42 -0
  291. autogen/llm_clients/MIGRATION_TO_V2.md +782 -0
  292. autogen/llm_clients/__init__.py +77 -0
  293. autogen/llm_clients/client_v2.py +122 -0
  294. autogen/llm_clients/models/__init__.py +55 -0
  295. autogen/llm_clients/models/content_blocks.py +389 -0
  296. autogen/llm_clients/models/unified_message.py +145 -0
  297. autogen/llm_clients/models/unified_response.py +83 -0
  298. autogen/llm_clients/openai_completions_client.py +444 -0
  299. autogen/llm_config/__init__.py +11 -0
  300. autogen/llm_config/client.py +59 -0
  301. autogen/llm_config/config.py +461 -0
  302. autogen/llm_config/entry.py +169 -0
  303. autogen/llm_config/types.py +37 -0
  304. autogen/llm_config/utils.py +223 -0
  305. autogen/logger/__init__.py +11 -0
  306. autogen/logger/base_logger.py +129 -0
  307. autogen/logger/file_logger.py +262 -0
  308. autogen/logger/logger_factory.py +42 -0
  309. autogen/logger/logger_utils.py +57 -0
  310. autogen/logger/sqlite_logger.py +524 -0
  311. autogen/math_utils.py +338 -0
  312. autogen/mcp/__init__.py +7 -0
  313. autogen/mcp/__main__.py +78 -0
  314. autogen/mcp/helpers.py +45 -0
  315. autogen/mcp/mcp_client.py +349 -0
  316. autogen/mcp/mcp_proxy/__init__.py +19 -0
  317. autogen/mcp/mcp_proxy/fastapi_code_generator_helpers.py +62 -0
  318. autogen/mcp/mcp_proxy/mcp_proxy.py +577 -0
  319. autogen/mcp/mcp_proxy/operation_grouping.py +166 -0
  320. autogen/mcp/mcp_proxy/operation_renaming.py +110 -0
  321. autogen/mcp/mcp_proxy/patch_fastapi_code_generator.py +98 -0
  322. autogen/mcp/mcp_proxy/security.py +399 -0
  323. autogen/mcp/mcp_proxy/security_schema_visitor.py +37 -0
  324. autogen/messages/__init__.py +7 -0
  325. autogen/messages/agent_messages.py +946 -0
  326. autogen/messages/base_message.py +108 -0
  327. autogen/messages/client_messages.py +172 -0
  328. autogen/messages/print_message.py +48 -0
  329. autogen/oai/__init__.py +61 -0
  330. autogen/oai/anthropic.py +1516 -0
  331. autogen/oai/bedrock.py +800 -0
  332. autogen/oai/cerebras.py +302 -0
  333. autogen/oai/client.py +1658 -0
  334. autogen/oai/client_utils.py +196 -0
  335. autogen/oai/cohere.py +494 -0
  336. autogen/oai/gemini.py +1045 -0
  337. autogen/oai/gemini_types.py +156 -0
  338. autogen/oai/groq.py +319 -0
  339. autogen/oai/mistral.py +311 -0
  340. autogen/oai/oai_models/__init__.py +23 -0
  341. autogen/oai/oai_models/_models.py +16 -0
  342. autogen/oai/oai_models/chat_completion.py +86 -0
  343. autogen/oai/oai_models/chat_completion_audio.py +32 -0
  344. autogen/oai/oai_models/chat_completion_message.py +97 -0
  345. autogen/oai/oai_models/chat_completion_message_tool_call.py +60 -0
  346. autogen/oai/oai_models/chat_completion_token_logprob.py +62 -0
  347. autogen/oai/oai_models/completion_usage.py +59 -0
  348. autogen/oai/ollama.py +657 -0
  349. autogen/oai/openai_responses.py +451 -0
  350. autogen/oai/openai_utils.py +897 -0
  351. autogen/oai/together.py +387 -0
  352. autogen/remote/__init__.py +18 -0
  353. autogen/remote/agent.py +199 -0
  354. autogen/remote/agent_service.py +197 -0
  355. autogen/remote/errors.py +17 -0
  356. autogen/remote/httpx_client_factory.py +131 -0
  357. autogen/remote/protocol.py +37 -0
  358. autogen/remote/retry.py +102 -0
  359. autogen/remote/runtime.py +96 -0
  360. autogen/retrieve_utils.py +490 -0
  361. autogen/runtime_logging.py +161 -0
  362. autogen/testing/__init__.py +12 -0
  363. autogen/testing/messages.py +45 -0
  364. autogen/testing/test_agent.py +111 -0
  365. autogen/token_count_utils.py +280 -0
  366. autogen/tools/__init__.py +20 -0
  367. autogen/tools/contrib/__init__.py +9 -0
  368. autogen/tools/contrib/time/__init__.py +7 -0
  369. autogen/tools/contrib/time/time.py +40 -0
  370. autogen/tools/dependency_injection.py +249 -0
  371. autogen/tools/experimental/__init__.py +54 -0
  372. autogen/tools/experimental/browser_use/__init__.py +7 -0
  373. autogen/tools/experimental/browser_use/browser_use.py +154 -0
  374. autogen/tools/experimental/code_execution/__init__.py +7 -0
  375. autogen/tools/experimental/code_execution/python_code_execution.py +86 -0
  376. autogen/tools/experimental/crawl4ai/__init__.py +7 -0
  377. autogen/tools/experimental/crawl4ai/crawl4ai.py +150 -0
  378. autogen/tools/experimental/deep_research/__init__.py +7 -0
  379. autogen/tools/experimental/deep_research/deep_research.py +329 -0
  380. autogen/tools/experimental/duckduckgo/__init__.py +7 -0
  381. autogen/tools/experimental/duckduckgo/duckduckgo_search.py +103 -0
  382. autogen/tools/experimental/firecrawl/__init__.py +7 -0
  383. autogen/tools/experimental/firecrawl/firecrawl_tool.py +836 -0
  384. autogen/tools/experimental/google/__init__.py +14 -0
  385. autogen/tools/experimental/google/authentication/__init__.py +11 -0
  386. autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
  387. autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
  388. autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
  389. autogen/tools/experimental/google/drive/__init__.py +9 -0
  390. autogen/tools/experimental/google/drive/drive_functions.py +124 -0
  391. autogen/tools/experimental/google/drive/toolkit.py +88 -0
  392. autogen/tools/experimental/google/model.py +17 -0
  393. autogen/tools/experimental/google/toolkit_protocol.py +19 -0
  394. autogen/tools/experimental/google_search/__init__.py +8 -0
  395. autogen/tools/experimental/google_search/google_search.py +93 -0
  396. autogen/tools/experimental/google_search/youtube_search.py +181 -0
  397. autogen/tools/experimental/messageplatform/__init__.py +17 -0
  398. autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
  399. autogen/tools/experimental/messageplatform/discord/discord.py +284 -0
  400. autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
  401. autogen/tools/experimental/messageplatform/slack/slack.py +385 -0
  402. autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
  403. autogen/tools/experimental/messageplatform/telegram/telegram.py +271 -0
  404. autogen/tools/experimental/perplexity/__init__.py +7 -0
  405. autogen/tools/experimental/perplexity/perplexity_search.py +249 -0
  406. autogen/tools/experimental/reliable/__init__.py +10 -0
  407. autogen/tools/experimental/reliable/reliable.py +1311 -0
  408. autogen/tools/experimental/searxng/__init__.py +7 -0
  409. autogen/tools/experimental/searxng/searxng_search.py +142 -0
  410. autogen/tools/experimental/tavily/__init__.py +7 -0
  411. autogen/tools/experimental/tavily/tavily_search.py +176 -0
  412. autogen/tools/experimental/web_search_preview/__init__.py +7 -0
  413. autogen/tools/experimental/web_search_preview/web_search_preview.py +120 -0
  414. autogen/tools/experimental/wikipedia/__init__.py +7 -0
  415. autogen/tools/experimental/wikipedia/wikipedia.py +284 -0
  416. autogen/tools/function_utils.py +412 -0
  417. autogen/tools/tool.py +188 -0
  418. autogen/tools/toolkit.py +86 -0
  419. autogen/types.py +29 -0
  420. autogen/version.py +7 -0
  421. templates/client_template/main.jinja2 +72 -0
  422. templates/config_template/config.jinja2 +7 -0
  423. templates/main.jinja2 +61 -0
@@ -0,0 +1,399 @@
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 base64
5
+ import json
6
+ import logging
7
+ from typing import Any, ClassVar, Literal, TypeAlias
8
+
9
+ import requests
10
+ from pydantic import BaseModel, model_validator
11
+
12
+ # Get the logger
13
+ logger = logging.getLogger(__name__)
14
+ logger.setLevel(logging.DEBUG)
15
+
16
+ BaseSecurityType: TypeAlias = type["BaseSecurity"]
17
+
18
+
19
+ class BaseSecurity(BaseModel):
20
+ """Base class for security classes."""
21
+
22
+ type: ClassVar[Literal["apiKey", "http", "mutualTLS", "oauth2", "openIdConnect", "unsupported"]]
23
+ in_value: ClassVar[Literal["header", "query", "cookie", "bearer", "basic", "tls", "unsupported"]]
24
+ name: str
25
+
26
+ @model_validator(mode="after") # type: ignore[misc]
27
+ def __post_init__(
28
+ self,
29
+ ) -> "BaseSecurity": # dataclasses uses __post_init__ instead of model_validator
30
+ """Validate the in_value based on the type."""
31
+ valid_in_values = {
32
+ "apiKey": ["header", "query", "cookie"],
33
+ "http": ["bearer", "basic"],
34
+ "oauth2": ["bearer"],
35
+ "openIdConnect": ["bearer"],
36
+ "mutualTLS": ["tls"],
37
+ "unsupported": ["unsupported"],
38
+ }
39
+ if self.in_value not in valid_in_values[self.type]:
40
+ raise ValueError(f"Invalid in_value '{self.in_value}' for type '{self.type}'")
41
+ return self
42
+
43
+ def accept(self, security_params: "BaseSecurityParameters") -> bool:
44
+ return isinstance(self, security_params.get_security_class())
45
+
46
+ @classmethod
47
+ def is_supported(cls, type: str, schema_parameters: dict[str, Any]) -> bool:
48
+ return cls.type == type and cls.in_value == schema_parameters.get("in")
49
+
50
+ @classmethod
51
+ def get_security_class(cls, type: str, schema_parameters: dict[str, Any]) -> BaseSecurityType:
52
+ sub_classes = cls.__subclasses__()
53
+
54
+ for sub_class in sub_classes:
55
+ if sub_class.is_supported(type, schema_parameters):
56
+ return sub_class
57
+
58
+ logger.error(f"Unsupported type '{type}' and schema_parameters '{schema_parameters}' combination")
59
+ return UnsuportedSecurityStub
60
+
61
+ @classmethod
62
+ def get_security_parameters(cls, schema_parameters: dict[str, Any]) -> str:
63
+ return f'{cls.__name__}(name="{schema_parameters.get("name")}")'
64
+
65
+ @classmethod
66
+ def parse_security_parameters(cls, unparsed_params: dict[str, Any]) -> "BaseSecurityParameters":
67
+ type = unparsed_params.pop("type")
68
+ schema_parameters = unparsed_params.pop("schema_parameters")
69
+ security_class = cls.get_security_class(type, schema_parameters)
70
+ return security_class.Parameters.model_validate(unparsed_params)
71
+
72
+ @classmethod
73
+ def parse_security_parameters_from_env(cls, env: dict[str, str]) -> "BaseSecurityParameters":
74
+ """Parse security parameters from environment variables."""
75
+ security_str = env.get("SECURITY")
76
+ if not security_str:
77
+ logger.warning("No security parameters found in environment variables.")
78
+
79
+ return cls.parse_security_parameters(json.loads(security_str))
80
+
81
+
82
+ class BaseSecurityParameters(BaseModel):
83
+ """Base class for security parameters."""
84
+
85
+ def apply(
86
+ self,
87
+ q_params: dict[str, Any],
88
+ body_dict: dict[str, Any],
89
+ security: BaseSecurity,
90
+ ) -> None: ...
91
+
92
+ def get_security_class(self) -> type[BaseSecurity]: ...
93
+
94
+ def dump(self) -> dict[str, Any]:
95
+ raise NotImplementedError("Subclasses must implement the dump method")
96
+
97
+ def to_env(self) -> dict[str, Any]:
98
+ """Convert the security parameters to a dictionary."""
99
+ return {
100
+ "SECURITY": json.dumps(self.dump()),
101
+ }
102
+
103
+
104
+ class UnsuportedSecurityStub(BaseSecurity):
105
+ """Unsupported security stub class."""
106
+
107
+ type: ClassVar[Literal["unsupported"]] = "unsupported"
108
+ in_value: ClassVar[Literal["unsupported"]] = "unsupported"
109
+
110
+ @classmethod
111
+ def is_supported(cls, type: str, schema_parameters: dict[str, Any]) -> bool:
112
+ return False
113
+
114
+ def accept(self, security_params: "BaseSecurityParameters") -> bool:
115
+ if isinstance(self, security_params.get_security_class()):
116
+ raise RuntimeError("Trying to set UnsuportedSecurityStub params")
117
+ return False
118
+
119
+ class Parameters(BaseSecurityParameters): # BaseSecurityParameters
120
+ """API Key Header security parameters class."""
121
+
122
+ def apply(
123
+ self,
124
+ q_params: dict[str, Any],
125
+ body_dict: dict[str, Any],
126
+ security: BaseSecurity,
127
+ ) -> None:
128
+ pass
129
+
130
+ def get_security_class(self) -> type[BaseSecurity]:
131
+ return UnsuportedSecurityStub
132
+
133
+ def dump(self) -> dict[str, Any]:
134
+ return {
135
+ "type": "unsupported",
136
+ }
137
+
138
+
139
+ class APIKeyHeader(BaseSecurity):
140
+ """API Key Header security class."""
141
+
142
+ type: ClassVar[Literal["apiKey"]] = "apiKey"
143
+ in_value: ClassVar[Literal["header"]] = "header"
144
+
145
+ class Parameters(BaseSecurityParameters): # BaseSecurityParameters
146
+ """API Key Header security parameters class."""
147
+
148
+ value: str = "API_KEY"
149
+
150
+ def apply(
151
+ self,
152
+ q_params: dict[str, Any],
153
+ body_dict: dict[str, Any],
154
+ security: BaseSecurity,
155
+ ) -> None:
156
+ api_key_header: APIKeyHeader = security # type: ignore[assignment]
157
+
158
+ if "headers" not in body_dict:
159
+ body_dict["headers"] = {}
160
+
161
+ body_dict["headers"][api_key_header.name] = self.value
162
+
163
+ def get_security_class(self) -> type[BaseSecurity]:
164
+ return APIKeyHeader
165
+
166
+ def dump(self) -> dict[str, Any]:
167
+ return {
168
+ "type": "apiKey",
169
+ "schema_parameters": {"in": "header"},
170
+ **self.model_dump(),
171
+ }
172
+
173
+
174
+ class APIKeyQuery(BaseSecurity):
175
+ """API Key Query security class."""
176
+
177
+ type: ClassVar[Literal["apiKey"]] = "apiKey"
178
+ in_value: ClassVar[Literal["query"]] = "query"
179
+
180
+ @classmethod
181
+ def is_supported(cls, type: str, schema_parameters: dict[str, Any]) -> bool:
182
+ return super().is_supported(type, schema_parameters)
183
+
184
+ class Parameters(BaseSecurityParameters): # BaseSecurityParameters
185
+ """API Key Query security parameters class."""
186
+
187
+ value: str = "API_KEY"
188
+
189
+ def apply(
190
+ self,
191
+ q_params: dict[str, Any],
192
+ body_dict: dict[str, Any],
193
+ security: BaseSecurity,
194
+ ) -> None:
195
+ api_key_query: APIKeyQuery = security # type: ignore[assignment]
196
+
197
+ q_params[api_key_query.name] = self.value
198
+
199
+ def get_security_class(self) -> type[BaseSecurity]:
200
+ return APIKeyQuery
201
+
202
+ def dump(self) -> dict[str, Any]:
203
+ return {
204
+ "type": "apiKey",
205
+ "schema_parameters": {"in": "query"},
206
+ **self.model_dump(),
207
+ }
208
+
209
+
210
+ class APIKeyCookie(BaseSecurity):
211
+ """API Key Cookie security class."""
212
+
213
+ type: ClassVar[Literal["apiKey"]] = "apiKey"
214
+ in_value: ClassVar[Literal["cookie"]] = "cookie"
215
+
216
+ class Parameters(BaseSecurityParameters): # BaseSecurityParameters
217
+ """API Key Cookie security parameters class."""
218
+
219
+ value: str = "API_KEY"
220
+
221
+ def apply(
222
+ self,
223
+ q_params: dict[str, Any],
224
+ body_dict: dict[str, Any],
225
+ security: BaseSecurity,
226
+ ) -> None:
227
+ api_key_cookie: APIKeyCookie = security # type: ignore[assignment]
228
+
229
+ if "cookies" not in body_dict:
230
+ body_dict["cookies"] = {}
231
+
232
+ body_dict["cookies"][api_key_cookie.name] = self.value
233
+
234
+ def get_security_class(self) -> type[BaseSecurity]:
235
+ return APIKeyCookie
236
+
237
+ def dump(self) -> dict[str, Any]:
238
+ return {
239
+ "type": "apiKey",
240
+ "schema_parameters": {"in": "cookie"},
241
+ **self.model_dump(),
242
+ }
243
+
244
+
245
+ class HTTPBearer(BaseSecurity):
246
+ """HTTP Bearer security class."""
247
+
248
+ type: ClassVar[Literal["http"]] = "http"
249
+ in_value: ClassVar[Literal["bearer"]] = "bearer"
250
+
251
+ @classmethod
252
+ def is_supported(cls, type: str, schema_parameters: dict[str, Any]) -> bool:
253
+ return cls.type == type and cls.in_value == schema_parameters.get("scheme")
254
+
255
+ class Parameters(BaseSecurityParameters): # BaseSecurityParameters
256
+ """HTTP Bearer security parameters class."""
257
+
258
+ value: str = "BEARER_TOKEN"
259
+
260
+ def apply(
261
+ self,
262
+ q_params: dict[str, Any],
263
+ body_dict: dict[str, Any],
264
+ security: BaseSecurity,
265
+ ) -> None:
266
+ if "headers" not in body_dict:
267
+ body_dict["headers"] = {}
268
+
269
+ body_dict["headers"]["Authorization"] = f"Bearer {self.value}"
270
+
271
+ def get_security_class(self) -> type[BaseSecurity]:
272
+ return HTTPBearer
273
+
274
+ def dump(self) -> dict[str, Any]:
275
+ return {
276
+ "type": "http",
277
+ "schema_parameters": {"scheme": "bearer"},
278
+ **self.model_dump(),
279
+ }
280
+
281
+
282
+ class HTTPBasic(BaseSecurity):
283
+ """HTTP Bearer security class."""
284
+
285
+ type: ClassVar[Literal["http"]] = "http"
286
+ in_value: ClassVar[Literal["basic"]] = "basic"
287
+
288
+ @classmethod
289
+ def is_supported(cls, type: str, schema_parameters: dict[str, Any]) -> bool:
290
+ return cls.type == type and cls.in_value == schema_parameters.get("scheme")
291
+
292
+ class Parameters(BaseSecurityParameters): # BaseSecurityParameters
293
+ """HTTP Basic security parameters class."""
294
+
295
+ username: str = "USERNAME"
296
+ password: str = "PASSWORD"
297
+
298
+ def apply(
299
+ self,
300
+ q_params: dict[str, Any],
301
+ body_dict: dict[str, Any],
302
+ security: BaseSecurity,
303
+ ) -> None:
304
+ if "headers" not in body_dict:
305
+ body_dict["headers"] = {}
306
+
307
+ credentials = f"{self.username}:{self.password}"
308
+ encoded_credentials = base64.b64encode(credentials.encode("utf-8")).decode("utf-8")
309
+
310
+ body_dict["headers"]["Authorization"] = f"Basic {encoded_credentials}"
311
+
312
+ def get_security_class(self) -> type[BaseSecurity]:
313
+ return HTTPBasic
314
+
315
+ def dump(self) -> dict[str, Any]:
316
+ return {
317
+ "type": "http",
318
+ "schema_parameters": {"scheme": "basic"},
319
+ **self.model_dump(),
320
+ }
321
+
322
+
323
+ class OAuth2PasswordBearer(BaseSecurity):
324
+ """OAuth2 Password Bearer security class."""
325
+
326
+ type: ClassVar[Literal["oauth2"]] = "oauth2"
327
+ in_value: ClassVar[Literal["bearer"]] = "bearer"
328
+ token_url: str
329
+
330
+ @classmethod
331
+ def is_supported(cls, type: str, schema_parameters: dict[str, Any]) -> bool:
332
+ return type == cls.type and "password" in schema_parameters.get("flows", {})
333
+
334
+ @classmethod
335
+ def get_security_parameters(cls, schema_parameters: dict[str, Any]) -> str:
336
+ name = schema_parameters.get("name")
337
+ token_url = f"{schema_parameters.get('server_url')}/{schema_parameters['flows']['password']['tokenUrl']}"
338
+ return f'{cls.__name__}(name="{name}", token_url="{token_url}")'
339
+
340
+ class Parameters(BaseSecurityParameters): # BaseSecurityParameters
341
+ """OAuth2 Password Bearer security class."""
342
+
343
+ username: str = "USERNAME"
344
+ password: str = "PASSWORD"
345
+ bearer_token: str | None = None
346
+ token_url: str = "TOKEN_URL"
347
+
348
+ # @model_validator(mode="before")
349
+ # def check_credentials(cls, values: dict[str, Any]) -> Any: # noqa
350
+ # username = values.get("username")
351
+ # password = values.get("password")
352
+ # bearer_token = values.get("bearer_token")
353
+
354
+ # if not bearer_token and (not username or not password):
355
+ # # If bearer_token is not provided, both username and password must be defined
356
+ # raise ValueError("Both username and password are required if bearer_token is not provided.")
357
+
358
+ # return values
359
+
360
+ def get_token(self, token_url: str) -> str:
361
+ # Get the token
362
+ request = requests.post(
363
+ token_url,
364
+ data={
365
+ "username": self.username,
366
+ "password": self.password,
367
+ },
368
+ timeout=5,
369
+ )
370
+ request.raise_for_status()
371
+ return request.json()["access_token"] # type: ignore
372
+
373
+ def apply(
374
+ self,
375
+ q_params: dict[str, Any],
376
+ body_dict: dict[str, Any],
377
+ security: BaseSecurity,
378
+ ) -> None:
379
+ if not self.bearer_token:
380
+ if security.token_url is None: # type: ignore
381
+ raise ValueError("Token URL is not defined")
382
+ self.bearer_token = self.get_token(security.token_url) # type: ignore
383
+
384
+ if "headers" not in body_dict:
385
+ body_dict["headers"] = {}
386
+
387
+ body_dict["headers"]["Authorization"] = f"Bearer {self.bearer_token}"
388
+
389
+ def get_security_class(self) -> type[BaseSecurity]:
390
+ return OAuth2PasswordBearer
391
+
392
+ def dump(self) -> dict[str, Any]:
393
+ return {
394
+ "type": "oauth2",
395
+ "schema_parameters": {"flows": {"password": {"tokenUrl": self.token_url or ""}}},
396
+ "username": self.username,
397
+ "password": self.password,
398
+ "bearer_token": self.bearer_token,
399
+ }
@@ -0,0 +1,37 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ from pathlib import Path
5
+
6
+ from autogen.import_utils import optional_import_block
7
+ from autogen.mcp.mcp_proxy.security import BaseSecurity
8
+
9
+ with optional_import_block() as result:
10
+ from fastapi_code_generator.parser import OpenAPIParser
11
+ from fastapi_code_generator.visitor import Visitor
12
+
13
+
14
+ def custom_visitor(parser: "OpenAPIParser", model_path: Path) -> dict[str, object]:
15
+ if "components" not in parser.raw_obj or "securitySchemes" not in parser.raw_obj["components"]:
16
+ return {}
17
+ security_schemes = parser.raw_obj["components"]["securitySchemes"]
18
+ server_url = parser.raw_obj["servers"][0]["url"]
19
+
20
+ security_classes = []
21
+ security_parameters = {}
22
+ for k, v in security_schemes.items():
23
+ v["server_url"] = server_url
24
+ security_class = BaseSecurity.get_security_class(type=v["type"], schema_parameters=v)
25
+
26
+ security_classes.append(security_class.__name__)
27
+
28
+ security_parameters[k] = security_class.get_security_parameters(schema_parameters=v)
29
+
30
+ return {
31
+ "security_schemes": security_schemes,
32
+ "security_classes": security_classes,
33
+ "security_parameters": security_parameters,
34
+ }
35
+
36
+
37
+ visit: "Visitor" = custom_visitor
@@ -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 .base_message import BaseMessage, get_annotated_type_for_message_classes, wrap_message
6
+
7
+ __all__ = ["BaseMessage", "get_annotated_type_for_message_classes", "wrap_message"]