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,66 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/https://github.com/Lancetnik/FastDepends are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+
8
+ from typing import Any
9
+
10
+ from ._compat import PYDANTIC_V2, create_model, model_schema
11
+ from .core import CallModel
12
+
13
+
14
+ def get_schema(
15
+ call: CallModel[Any, Any],
16
+ embed: bool = False,
17
+ resolve_refs: bool = False,
18
+ ) -> dict[str, Any]:
19
+ assert call.model, "Call should has a model"
20
+ params_model = create_model( # type: ignore[call-overload]
21
+ call.model.__name__, **call.flat_params
22
+ )
23
+
24
+ body: dict[str, Any] = model_schema(params_model)
25
+
26
+ if not call.flat_params:
27
+ body = {"title": body["title"], "type": "null"}
28
+
29
+ if resolve_refs:
30
+ pydantic_key = "$defs" if PYDANTIC_V2 else "definitions"
31
+ body = _move_pydantic_refs(body, pydantic_key)
32
+ body.pop(pydantic_key, None)
33
+
34
+ if embed and len(body["properties"]) == 1:
35
+ body = list(body["properties"].values())[0]
36
+
37
+ return body
38
+
39
+
40
+ def _move_pydantic_refs(original: Any, key: str, refs: dict[str, Any] | None = None) -> Any:
41
+ if not isinstance(original, dict):
42
+ return original
43
+
44
+ data = original.copy()
45
+
46
+ if refs is None:
47
+ raw_refs = data.get(key, {})
48
+ refs = _move_pydantic_refs(raw_refs, key, raw_refs)
49
+
50
+ name: str | None = None
51
+ for k in data:
52
+ if k == "$ref":
53
+ name = data[k].replace(f"#/{key}/", "")
54
+
55
+ elif isinstance(data[k], dict):
56
+ data[k] = _move_pydantic_refs(data[k], key, refs)
57
+
58
+ elif isinstance(data[k], list):
59
+ for i in range(len(data[k])):
60
+ data[k][i] = _move_pydantic_refs(data[k][i], key, refs)
61
+
62
+ if name:
63
+ assert refs, "Smth wrong"
64
+ data = refs[name]
65
+
66
+ return data
@@ -0,0 +1,272 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/https://github.com/Lancetnik/FastDepends are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+
8
+ from collections.abc import AsyncIterator, Callable, Iterator, Sequence
9
+ from contextlib import AsyncExitStack, ExitStack
10
+ from functools import partial, wraps
11
+ from typing import (
12
+ Any,
13
+ Protocol,
14
+ TypeVar,
15
+ cast,
16
+ overload,
17
+ )
18
+
19
+ from typing_extensions import ParamSpec
20
+
21
+ from ._compat import ConfigDict
22
+ from .core import CallModel, build_call_model
23
+ from .dependencies import dependency_provider, model
24
+
25
+ P = ParamSpec("P")
26
+ T = TypeVar("T")
27
+
28
+
29
+ def Depends( # noqa: N802
30
+ dependency: Callable[P, T],
31
+ *,
32
+ use_cache: bool = True,
33
+ cast: bool = True,
34
+ ) -> Any:
35
+ return model.Depends(
36
+ dependency=dependency,
37
+ use_cache=use_cache,
38
+ cast=cast,
39
+ )
40
+
41
+
42
+ class _InjectWrapper(Protocol[P, T]):
43
+ def __call__(
44
+ self,
45
+ func: Callable[P, T],
46
+ model: CallModel[P, T] | None = None,
47
+ ) -> Callable[P, T]: ...
48
+
49
+
50
+ @overload
51
+ def inject( # pragma: no cover
52
+ func: None,
53
+ *,
54
+ cast: bool = True,
55
+ extra_dependencies: Sequence[model.Depends] = (),
56
+ pydantic_config: ConfigDict | None = None,
57
+ dependency_overrides_provider: Any | None = dependency_provider,
58
+ wrap_model: Callable[[CallModel[P, T]], CallModel[P, T]] = lambda x: x,
59
+ ) -> _InjectWrapper[P, T]: ...
60
+
61
+
62
+ @overload
63
+ def inject( # pragma: no cover
64
+ func: Callable[P, T],
65
+ *,
66
+ cast: bool = True,
67
+ extra_dependencies: Sequence[model.Depends] = (),
68
+ pydantic_config: ConfigDict | None = None,
69
+ dependency_overrides_provider: Any | None = dependency_provider,
70
+ wrap_model: Callable[[CallModel[P, T]], CallModel[P, T]] = lambda x: x,
71
+ ) -> Callable[P, T]: ...
72
+
73
+
74
+ def inject(
75
+ func: Callable[P, T] | None = None,
76
+ *,
77
+ cast: bool = True,
78
+ extra_dependencies: Sequence[model.Depends] = (),
79
+ pydantic_config: ConfigDict | None = None,
80
+ dependency_overrides_provider: Any | None = dependency_provider,
81
+ wrap_model: Callable[[CallModel[P, T]], CallModel[P, T]] = lambda x: x,
82
+ ) -> Callable[P, T] | _InjectWrapper[P, T]:
83
+ decorator = _wrap_inject(
84
+ dependency_overrides_provider=dependency_overrides_provider,
85
+ wrap_model=wrap_model,
86
+ extra_dependencies=extra_dependencies,
87
+ cast=cast,
88
+ pydantic_config=pydantic_config,
89
+ )
90
+
91
+ if func is None:
92
+ return decorator
93
+
94
+ else:
95
+ return decorator(func)
96
+
97
+
98
+ def _wrap_inject(
99
+ dependency_overrides_provider: Any | None,
100
+ wrap_model: Callable[
101
+ [CallModel[P, T]],
102
+ CallModel[P, T],
103
+ ],
104
+ extra_dependencies: Sequence[model.Depends],
105
+ cast: bool,
106
+ pydantic_config: ConfigDict | None,
107
+ ) -> _InjectWrapper[P, T]:
108
+ if (
109
+ dependency_overrides_provider
110
+ and getattr(dependency_overrides_provider, "dependency_overrides", None) is not None
111
+ ):
112
+ overrides = dependency_overrides_provider.dependency_overrides
113
+ else:
114
+ overrides = None
115
+
116
+ def func_wrapper(
117
+ func: Callable[P, T],
118
+ model: CallModel[P, T] | None = None,
119
+ ) -> Callable[P, T]:
120
+ if model is None:
121
+ real_model = wrap_model(
122
+ build_call_model(
123
+ call=func,
124
+ extra_dependencies=extra_dependencies,
125
+ cast=cast,
126
+ pydantic_config=pydantic_config,
127
+ )
128
+ )
129
+ else:
130
+ real_model = model
131
+
132
+ if real_model.is_async:
133
+ injected_wrapper: Callable[P, T]
134
+
135
+ if real_model.is_generator:
136
+ injected_wrapper = partial(solve_async_gen, real_model, overrides) # type: ignore[assignment]
137
+
138
+ else:
139
+
140
+ @wraps(func)
141
+ async def injected_wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
142
+ async with AsyncExitStack() as stack:
143
+ r = await real_model.asolve(
144
+ *args,
145
+ stack=stack,
146
+ dependency_overrides=overrides,
147
+ cache_dependencies={},
148
+ nested=False,
149
+ **kwargs,
150
+ )
151
+ return r
152
+
153
+ raise AssertionError("unreachable")
154
+
155
+ else:
156
+ if real_model.is_generator:
157
+ injected_wrapper = partial(solve_gen, real_model, overrides) # type: ignore[assignment]
158
+
159
+ else:
160
+
161
+ @wraps(func)
162
+ def injected_wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
163
+ with ExitStack() as stack:
164
+ r = real_model.solve(
165
+ *args,
166
+ stack=stack,
167
+ dependency_overrides=overrides,
168
+ cache_dependencies={},
169
+ nested=False,
170
+ **kwargs,
171
+ )
172
+ return r
173
+
174
+ raise AssertionError("unreachable")
175
+
176
+ return injected_wrapper
177
+
178
+ return func_wrapper
179
+
180
+
181
+ class solve_async_gen: # noqa: N801
182
+ _iter: AsyncIterator[Any] | None = None
183
+
184
+ def __init__(
185
+ self,
186
+ model: "CallModel[..., Any]",
187
+ overrides: Any | None,
188
+ *args: Any,
189
+ **kwargs: Any,
190
+ ):
191
+ self.call = model
192
+ self.args = args
193
+ self.kwargs = kwargs
194
+ self.overrides = overrides
195
+
196
+ def __aiter__(self) -> "solve_async_gen":
197
+ self._iter = None
198
+ self.stack = AsyncExitStack()
199
+ return self
200
+
201
+ async def __anext__(self) -> Any:
202
+ if self._iter is None:
203
+ stack = self.stack = AsyncExitStack()
204
+ await self.stack.__aenter__()
205
+ self._iter = cast(
206
+ AsyncIterator[Any],
207
+ (
208
+ await self.call.asolve(
209
+ *self.args,
210
+ stack=stack,
211
+ dependency_overrides=self.overrides,
212
+ cache_dependencies={},
213
+ nested=False,
214
+ **self.kwargs,
215
+ )
216
+ ).__aiter__(),
217
+ )
218
+
219
+ try:
220
+ r = await self._iter.__anext__()
221
+ except StopAsyncIteration as e:
222
+ await self.stack.__aexit__(None, None, None)
223
+ raise e
224
+ else:
225
+ return r
226
+
227
+
228
+ class solve_gen: # noqa: N801
229
+ _iter: Iterator[Any] | None = None
230
+
231
+ def __init__(
232
+ self,
233
+ model: "CallModel[..., Any]",
234
+ overrides: Any | None,
235
+ *args: Any,
236
+ **kwargs: Any,
237
+ ):
238
+ self.call = model
239
+ self.args = args
240
+ self.kwargs = kwargs
241
+ self.overrides = overrides
242
+
243
+ def __iter__(self) -> "solve_gen":
244
+ self._iter = None
245
+ self.stack = ExitStack()
246
+ return self
247
+
248
+ def __next__(self) -> Any:
249
+ if self._iter is None:
250
+ stack = self.stack = ExitStack()
251
+ self.stack.__enter__()
252
+ self._iter = cast(
253
+ Iterator[Any],
254
+ iter(
255
+ self.call.solve(
256
+ *self.args,
257
+ stack=stack,
258
+ dependency_overrides=self.overrides,
259
+ cache_dependencies={},
260
+ nested=False,
261
+ **self.kwargs,
262
+ )
263
+ ),
264
+ )
265
+
266
+ try:
267
+ r = next(self._iter)
268
+ except StopIteration as e:
269
+ self.stack.__exit__(None, None, None)
270
+ raise e
271
+ else:
272
+ return r
@@ -0,0 +1,177 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/https://github.com/Lancetnik/FastDepends are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+
8
+ import asyncio
9
+ import functools
10
+ import inspect
11
+ from collections.abc import AsyncGenerator, AsyncIterable, Awaitable, Callable
12
+ from contextlib import AbstractContextManager, AsyncExitStack, ExitStack, asynccontextmanager, contextmanager
13
+ from typing import TYPE_CHECKING, Annotated, Any, ForwardRef, TypeVar, cast, get_args, get_origin
14
+
15
+ import anyio
16
+ from typing_extensions import (
17
+ ParamSpec,
18
+ )
19
+
20
+ from ._compat import evaluate_forwardref
21
+
22
+ if TYPE_CHECKING:
23
+ from types import FrameType
24
+
25
+ P = ParamSpec("P")
26
+ T = TypeVar("T")
27
+
28
+
29
+ def asyncify(func: Callable[P, T]) -> Callable[P, Awaitable[T]]:
30
+ if is_coroutine_callable(func):
31
+ return cast(Callable[P, Awaitable[T]], func)
32
+
33
+ async def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
34
+ return await run_in_threadpool(func, *args, **kwargs)
35
+
36
+ return wrapper
37
+
38
+
39
+ async def run_async(
40
+ func: Callable[P, T] | Callable[P, Awaitable[T]],
41
+ *args: P.args,
42
+ **kwargs: P.kwargs,
43
+ ) -> T:
44
+ if is_coroutine_callable(func):
45
+ return await cast(Callable[P, Awaitable[T]], func)(*args, **kwargs)
46
+ else:
47
+ return await run_in_threadpool(cast(Callable[P, T], func), *args, **kwargs)
48
+
49
+
50
+ async def run_in_threadpool(func: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T:
51
+ if kwargs:
52
+ func = functools.partial(func, **kwargs)
53
+ return await anyio.to_thread.run_sync(func, *args)
54
+
55
+
56
+ async def solve_generator_async(
57
+ *sub_args: Any, call: Callable[..., Any], stack: AsyncExitStack, **sub_values: Any
58
+ ) -> Any:
59
+ if is_gen_callable(call):
60
+ cm = contextmanager_in_threadpool(contextmanager(call)(**sub_values))
61
+ elif is_async_gen_callable(call): # pragma: no branch
62
+ cm = asynccontextmanager(call)(*sub_args, **sub_values)
63
+ return await stack.enter_async_context(cm)
64
+
65
+
66
+ def solve_generator_sync(*sub_args: Any, call: Callable[..., Any], stack: ExitStack, **sub_values: Any) -> Any:
67
+ cm = contextmanager(call)(*sub_args, **sub_values)
68
+ return stack.enter_context(cm)
69
+
70
+
71
+ def get_typed_signature(call: Callable[..., Any]) -> tuple[inspect.Signature, Any]:
72
+ signature = inspect.signature(call)
73
+
74
+ locals = collect_outer_stack_locals()
75
+
76
+ # We unwrap call to get the original unwrapped function
77
+ call = inspect.unwrap(call)
78
+
79
+ globalns = getattr(call, "__globals__", {})
80
+ typed_params = [
81
+ inspect.Parameter(
82
+ name=param.name,
83
+ kind=param.kind,
84
+ default=param.default,
85
+ annotation=get_typed_annotation(
86
+ param.annotation,
87
+ globalns,
88
+ locals,
89
+ ),
90
+ )
91
+ for param in signature.parameters.values()
92
+ ]
93
+
94
+ return inspect.Signature(typed_params), get_typed_annotation(
95
+ signature.return_annotation,
96
+ globalns,
97
+ locals,
98
+ )
99
+
100
+
101
+ def collect_outer_stack_locals() -> dict[str, Any]:
102
+ frame = inspect.currentframe()
103
+
104
+ frames: list[FrameType] = []
105
+ while frame is not None:
106
+ if "fast_depends" not in frame.f_code.co_filename:
107
+ frames.append(frame)
108
+ frame = frame.f_back
109
+
110
+ locals = {}
111
+ for f in frames[::-1]:
112
+ locals.update(f.f_locals)
113
+
114
+ return locals
115
+
116
+
117
+ def get_typed_annotation(
118
+ annotation: Any,
119
+ globalns: dict[str, Any],
120
+ locals: dict[str, Any],
121
+ ) -> Any:
122
+ if isinstance(annotation, str):
123
+ annotation = ForwardRef(annotation)
124
+
125
+ if isinstance(annotation, ForwardRef):
126
+ annotation = evaluate_forwardref(annotation, globalns, locals)
127
+
128
+ if get_origin(annotation) is Annotated and (args := get_args(annotation)):
129
+ solved_args = [get_typed_annotation(x, globalns, locals) for x in args]
130
+ annotation.__origin__, annotation.__metadata__ = solved_args[0], tuple(solved_args[1:])
131
+
132
+ return annotation
133
+
134
+
135
+ @asynccontextmanager
136
+ async def contextmanager_in_threadpool(
137
+ cm: AbstractContextManager[T],
138
+ ) -> AsyncGenerator[T, None]:
139
+ exit_limiter = anyio.CapacityLimiter(1)
140
+ try:
141
+ yield await run_in_threadpool(cm.__enter__)
142
+ except Exception as e:
143
+ ok = bool(await anyio.to_thread.run_sync(cm.__exit__, type(e), e, None, limiter=exit_limiter))
144
+ if not ok: # pragma: no branch
145
+ raise e
146
+ else:
147
+ await anyio.to_thread.run_sync(cm.__exit__, None, None, None, limiter=exit_limiter)
148
+
149
+
150
+ def is_gen_callable(call: Callable[..., Any]) -> bool:
151
+ if inspect.isgeneratorfunction(call):
152
+ return True
153
+ dunder_call = getattr(call, "__call__", None) # noqa: B004
154
+ return inspect.isgeneratorfunction(dunder_call)
155
+
156
+
157
+ def is_async_gen_callable(call: Callable[..., Any]) -> bool:
158
+ if inspect.isasyncgenfunction(call):
159
+ return True
160
+ dunder_call = getattr(call, "__call__", None) # noqa: B004
161
+ return inspect.isasyncgenfunction(dunder_call)
162
+
163
+
164
+ def is_coroutine_callable(call: Callable[..., Any]) -> bool:
165
+ if inspect.isclass(call):
166
+ return False
167
+
168
+ if asyncio.iscoroutinefunction(call):
169
+ return True
170
+
171
+ dunder_call = getattr(call, "__call__", None) # noqa: B004
172
+ return asyncio.iscoroutinefunction(dunder_call)
173
+
174
+
175
+ async def async_map(func: Callable[..., T], async_iterable: AsyncIterable[Any]) -> AsyncIterable[T]:
176
+ async for i in async_iterable:
177
+ yield func(i)
@@ -0,0 +1,83 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ #
5
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+ from __future__ import annotations
8
+
9
+ from collections.abc import Iterable
10
+ from typing import Literal
11
+
12
+ from .import_utils import optional_import_block
13
+
14
+ with optional_import_block() as result:
15
+ from termcolor import colored
16
+
17
+ if not result.is_successful:
18
+ # termcolor is an optional dependency - if it cannot be imported then no color is used.
19
+ # Alternatively the envvar NO_COLOR can be used to disable color.
20
+ # To allow for proper typing and for termcolor to be optional we need to re-define the types used in the lib here.
21
+ # This is the direct function definition from termcolor.
22
+ Attribute = Literal[
23
+ "bold",
24
+ "dark",
25
+ "underline",
26
+ "blink",
27
+ "reverse",
28
+ "concealed",
29
+ ]
30
+
31
+ Highlight = Literal[
32
+ "on_black",
33
+ "on_grey",
34
+ "on_red",
35
+ "on_green",
36
+ "on_yellow",
37
+ "on_blue",
38
+ "on_magenta",
39
+ "on_cyan",
40
+ "on_light_grey",
41
+ "on_dark_grey",
42
+ "on_light_red",
43
+ "on_light_green",
44
+ "on_light_yellow",
45
+ "on_light_blue",
46
+ "on_light_magenta",
47
+ "on_light_cyan",
48
+ "on_white",
49
+ ]
50
+
51
+ Color = Literal[
52
+ "black",
53
+ "grey",
54
+ "red",
55
+ "green",
56
+ "yellow",
57
+ "blue",
58
+ "magenta",
59
+ "cyan",
60
+ "light_grey",
61
+ "dark_grey",
62
+ "light_red",
63
+ "light_green",
64
+ "light_yellow",
65
+ "light_blue",
66
+ "light_magenta",
67
+ "light_cyan",
68
+ "white",
69
+ ]
70
+
71
+ def colored(
72
+ text: object,
73
+ color: Color | None = None,
74
+ on_color: Highlight | None = None,
75
+ attrs: Iterable[Attribute] | None = None,
76
+ *,
77
+ no_color: bool | None = None,
78
+ force_color: bool | None = None,
79
+ ) -> str:
80
+ return str(text)
81
+
82
+
83
+ __all__ = ["colored"]
@@ -0,0 +1,13 @@
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 logging import getLogger
6
+
7
+ from .tools import get_function_schema, load_basemodels_if_needed, serialize_to_str
8
+
9
+ __all__ = ["get_function_schema", "load_basemodels_if_needed", "serialize_to_str"]
10
+
11
+ logger = getLogger(__name__)
12
+
13
+ logger.info("Importing from 'autogen.function_utils' is deprecated, import from 'autogen.tools' instead.")