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,206 @@
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
+ import re
8
+ from typing import Any, Optional, Union
9
+
10
+ from ..doc_utils import export_module
11
+ from .agent import Agent
12
+
13
+
14
+ def consolidate_chat_info(
15
+ chat_info: Union[dict[str, Any], list[dict[str, Any]]], uniform_sender: Optional[Agent] = None
16
+ ) -> None:
17
+ if isinstance(chat_info, dict):
18
+ chat_info = [chat_info]
19
+ for c in chat_info:
20
+ if uniform_sender is None:
21
+ assert "sender" in c, "sender must be provided."
22
+ sender = c["sender"]
23
+ else:
24
+ sender = uniform_sender
25
+ assert "recipient" in c, "recipient must be provided."
26
+ summary_method = c.get("summary_method")
27
+ assert (
28
+ summary_method is None or callable(summary_method) or summary_method in ("last_msg", "reflection_with_llm")
29
+ ), "summary_method must be a string chosen from 'reflection_with_llm' or 'last_msg' or a callable, or None."
30
+ if summary_method == "reflection_with_llm":
31
+ assert sender.client is not None or c["recipient"].client is not None, (
32
+ "llm client must be set in either the recipient or sender when summary_method is reflection_with_llm."
33
+ )
34
+
35
+
36
+ @export_module("autogen")
37
+ def gather_usage_summary(agents: list[Agent]) -> dict[str, dict[str, Any]]:
38
+ r"""Gather usage summary from all agents.
39
+
40
+ Args:
41
+ agents: (list): List of agents.
42
+
43
+ Returns:
44
+ dictionary: A dictionary containing two keys:
45
+ - "usage_including_cached_inference": Cost information on the total usage, including the tokens in cached inference.
46
+ - "usage_excluding_cached_inference": Cost information on the usage of tokens, excluding the tokens in cache. No larger than "usage_including_cached_inference".
47
+
48
+ Example:
49
+ ```python
50
+ {
51
+ "usage_including_cached_inference": {
52
+ "total_cost": 0.0006090000000000001,
53
+ "gpt-35-turbo": {
54
+ "cost": 0.0006090000000000001,
55
+ "prompt_tokens": 242,
56
+ "completion_tokens": 123,
57
+ "total_tokens": 365,
58
+ },
59
+ },
60
+ "usage_excluding_cached_inference": {
61
+ "total_cost": 0.0006090000000000001,
62
+ "gpt-35-turbo": {
63
+ "cost": 0.0006090000000000001,
64
+ "prompt_tokens": 242,
65
+ "completion_tokens": 123,
66
+ "total_tokens": 365,
67
+ },
68
+ },
69
+ }
70
+ ```
71
+
72
+ Note:
73
+ If none of the agents incurred any cost (not having a client), then the usage_including_cached_inference and usage_excluding_cached_inference will be `{'total_cost': 0}`.
74
+ """
75
+
76
+ def aggregate_summary(usage_summary: dict[str, Any], agent_summary: dict[str, Any]) -> None:
77
+ if agent_summary is None:
78
+ return
79
+ usage_summary["total_cost"] += agent_summary.get("total_cost", 0)
80
+ for model, data in agent_summary.items():
81
+ if model != "total_cost":
82
+ if model not in usage_summary:
83
+ usage_summary[model] = data.copy()
84
+ else:
85
+ usage_summary[model]["cost"] += data.get("cost", 0)
86
+ usage_summary[model]["prompt_tokens"] += data.get("prompt_tokens", 0)
87
+ usage_summary[model]["completion_tokens"] += data.get("completion_tokens", 0)
88
+ usage_summary[model]["total_tokens"] += data.get("total_tokens", 0)
89
+
90
+ usage_including_cached_inference = {"total_cost": 0}
91
+ usage_excluding_cached_inference = {"total_cost": 0}
92
+
93
+ for agent in agents:
94
+ if getattr(agent, "client", None):
95
+ aggregate_summary(usage_including_cached_inference, agent.client.total_usage_summary) # type: ignore[attr-defined]
96
+ aggregate_summary(usage_excluding_cached_inference, agent.client.actual_usage_summary) # type: ignore[attr-defined]
97
+
98
+ return {
99
+ "usage_including_cached_inference": usage_including_cached_inference,
100
+ "usage_excluding_cached_inference": usage_excluding_cached_inference,
101
+ }
102
+
103
+
104
+ def parse_tags_from_content(tag: str, content: Union[str, list[dict[str, Any]]]) -> list[dict[str, Any]]:
105
+ """Parses HTML style tags from message contents.
106
+
107
+ The parsing is done by looking for patterns in the text that match the format of HTML tags. The tag to be parsed is
108
+ specified as an argument to the function. The function looks for this tag in the text and extracts its content. The
109
+ content of a tag is everything that is inside the tag, between the opening and closing angle brackets. The content
110
+ can be a single string or a set of attribute-value pairs.
111
+
112
+ Examples:
113
+ `<img http://example.com/image.png> -> [{"tag": "img", "attr": {"src": "http://example.com/image.png"}, "match": re.Match}]`
114
+ ```<audio text="Hello I'm a robot" prompt="whisper"> ->
115
+ [{"tag": "audio", "attr": {"text": "Hello I'm a robot", "prompt": "whisper"}, "match": re.Match}]```
116
+
117
+ Args:
118
+ tag (str): The HTML style tag to be parsed.
119
+ content (Union[str, list[dict[str, Any]]]): The message content to parse. Can be a string or a list of content
120
+ items.
121
+
122
+ Returns:
123
+ list[dict[str, str]]: A list of dictionaries, where each dictionary represents a parsed tag. Each dictionary
124
+ contains three key-value pairs: 'type' which is the tag, 'attr' which is a dictionary of the parsed attributes,
125
+ and 'match' which is a regular expression match object.
126
+
127
+ Raises:
128
+ ValueError: If the content is not a string or a list.
129
+ """
130
+ results = []
131
+ if isinstance(content, str):
132
+ results.extend(_parse_tags_from_text(tag, content))
133
+ # Handles case for multimodal messages.
134
+ elif isinstance(content, list):
135
+ for item in content:
136
+ if item.get("type") == "text":
137
+ results.extend(_parse_tags_from_text(tag, item["text"]))
138
+ else:
139
+ raise ValueError(f"content must be str or list, but got {type(content)}")
140
+
141
+ return results
142
+
143
+
144
+ def _parse_tags_from_text(tag: str, text: str) -> list[dict[str, Any]]:
145
+ pattern = re.compile(f"<{tag} (.*?)>")
146
+
147
+ results = []
148
+ for match in re.finditer(pattern, text):
149
+ tag_attr = match.group(1).strip()
150
+ attr = _parse_attributes_from_tags(tag_attr)
151
+
152
+ results.append({"tag": tag, "attr": attr, "match": match})
153
+ return results
154
+
155
+
156
+ def _parse_attributes_from_tags(tag_content: str) -> dict[str, str]:
157
+ pattern = r"([^ ]+)"
158
+ attrs = re.findall(pattern, tag_content)
159
+ reconstructed_attrs = _reconstruct_attributes(attrs)
160
+
161
+ def _append_src_value(content: dict[str, str], value: Any) -> None:
162
+ if "src" in content:
163
+ content["src"] += f" {value}"
164
+ else:
165
+ content["src"] = value
166
+
167
+ content: dict[str, str] = {}
168
+ for attr in reconstructed_attrs:
169
+ if "=" not in attr:
170
+ _append_src_value(content, attr)
171
+ continue
172
+
173
+ key, value = attr.split("=", 1)
174
+ if value.startswith("'") or value.startswith('"'):
175
+ content[key] = value[1:-1] # remove quotes
176
+ else:
177
+ _append_src_value(content, attr)
178
+
179
+ return content
180
+
181
+
182
+ def _reconstruct_attributes(attrs: list[str]) -> list[str]:
183
+ """Reconstructs attributes from a list of strings where some attributes may be split across multiple elements."""
184
+
185
+ def is_attr(attr: str) -> bool:
186
+ if "=" in attr:
187
+ _, value = attr.split("=", 1)
188
+ if value.startswith("'") or value.startswith('"'):
189
+ return True
190
+ return False
191
+
192
+ reconstructed = []
193
+ found_attr = False
194
+ for attr in attrs:
195
+ if is_attr(attr):
196
+ reconstructed.append(attr)
197
+ found_attr = True
198
+ else:
199
+ if found_attr:
200
+ reconstructed[-1] += f" {attr}"
201
+ found_attr = True
202
+ elif reconstructed:
203
+ reconstructed[-1] += f" {attr}"
204
+ else:
205
+ reconstructed.append(attr)
206
+ return reconstructed
@@ -0,0 +1,3 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
@@ -0,0 +1,10 @@
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 .time import TimeReplyAgent, TimeToolAgent
6
+
7
+ __all__ = [
8
+ "TimeReplyAgent",
9
+ "TimeToolAgent",
10
+ ]
@@ -0,0 +1,8 @@
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 .time_reply_agent import TimeReplyAgent
6
+ from .time_tool_agent import TimeToolAgent
7
+
8
+ __all__ = ["TimeReplyAgent", "TimeToolAgent"]
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from typing import Any, Optional
6
+
7
+ from .... import Agent, ConversableAgent, OpenAIWrapper
8
+ from ....doc_utils import export_module
9
+
10
+ __all__ = ["TimeReplyAgent"]
11
+
12
+
13
+ @export_module("autogen.agents.contrib") # API Reference: autogen > agents > contrib > TimeReplyAgent
14
+ class TimeReplyAgent(ConversableAgent):
15
+ """A simple agent that returns the current time.
16
+
17
+ Use it is as a reference for creating new agents with a reply-based approach (as opposed to tool-based).
18
+
19
+ This agent will return the date and time whenever it needs to reply."""
20
+
21
+ DEFAULT_SYSTEM_MESSAGE = "You are a calendar agent that just returns the date and time."
22
+
23
+ def __init__(
24
+ self,
25
+ date_time_format: str = "%Y-%m-%d %H:%M:%S", # This is a parameter that is unique to this agent
26
+ output_prefix: str = "Tick, tock, the current date/time is ",
27
+ **kwargs: Any,
28
+ ) -> None:
29
+ """Initialize the TimeReplyAgent.
30
+
31
+ Args:
32
+ date_time_format: The format in which the date and time should be returned.
33
+ output_prefix: The prefix to add to the output message.
34
+ **kwargs: Additional parameters to pass to the base
35
+ """
36
+ # Here we handle a ConversableAgent parameter through the kwargs
37
+ # We will pass this through when we run init() the base class
38
+ # Note: For this TimeReplyAgent, the LLM is not used so this won't affect the behavior of this agent
39
+ system_message = kwargs.pop("system_message", self.DEFAULT_SYSTEM_MESSAGE)
40
+
41
+ # Store the date and time format on the agent, prefixed with an underscore to indicate it's a private variable
42
+ self._date_time_format = date_time_format
43
+
44
+ self._output_prefix = output_prefix
45
+
46
+ # Initialise the base class, passing through the system_message parameter
47
+ super().__init__(system_message=system_message, **kwargs)
48
+
49
+ # Our reply function.
50
+ # This one is simple, but yours will be more complex and
51
+ # may even contain another AG2 workflow inside it
52
+ def get_date_time_reply(
53
+ agent: ConversableAgent,
54
+ messages: Optional[list[dict[str, Any]]] = None,
55
+ sender: Optional[Agent] = None,
56
+ config: Optional[OpenAIWrapper] = None,
57
+ ) -> tuple[bool, dict[str, Any]]:
58
+ from datetime import datetime
59
+
60
+ now = datetime.now()
61
+
62
+ # Format the date and time as a string (e.g., "2025-02-25 14:30:00")
63
+ current_date_time = now.strftime(self._date_time_format)
64
+
65
+ # Final reply, with the date/time as the message
66
+ return True, {"content": f"{self._output_prefix}{current_date_time}."}
67
+
68
+ # Register our reply function with the agent
69
+ self.register_reply(
70
+ trigger=[Agent, None],
71
+ reply_func=get_date_time_reply, # This is the function that will be called when the agent needs to reply
72
+ remove_other_reply_funcs=True, # Removing all other reply functions so only this one will be used
73
+ )
@@ -0,0 +1,51 @@
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
6
+
7
+ from .... import ConversableAgent
8
+ from ....doc_utils import export_module
9
+ from ....tools.contrib import TimeTool
10
+
11
+ __all__ = ["TimeToolAgent"]
12
+
13
+
14
+ @export_module("autogen.agents.contrib") # API Reference: autogen > agents > contrib > TimeToolAgent
15
+ class TimeToolAgent(ConversableAgent):
16
+ """A simple agent that returns the current time using tools
17
+
18
+ Use it is as a reference for creating new agents with a tool-based approach (as opposed to reply-based).
19
+
20
+ This agent will call the TimeTool and return the date and time whenever it needs to reply."""
21
+
22
+ DEFAULT_SYSTEM_MESSAGE = (
23
+ "You are a calendar agent that uses tools to return the date and time. "
24
+ "When you reply, say 'Tick, tock, the current date/time is ' followed by the date and time in the exact format the tool provided."
25
+ )
26
+
27
+ def __init__(
28
+ self,
29
+ date_time_format: str = "%Y-%m-%d %H:%M:%S", # This is a parameter that is unique to this agent
30
+ **kwargs: Any,
31
+ ) -> None:
32
+ """Initialize the TimeToolAgent.
33
+
34
+ Args:
35
+ date_time_format: The format in which the date and time should be returned.
36
+ **kwargs: Additional keyword arguments passed to the parent ConversableAgent class.
37
+ """
38
+ # Here we handle a ConversableAgent parameter through the kwargs
39
+ # We will pass this through when we run init() the base class
40
+ # Use this to tailor the return message
41
+ system_message = kwargs.pop("system_message", self.DEFAULT_SYSTEM_MESSAGE)
42
+
43
+ # Store the date and time format on the agent, prefixed with an underscore to indicate it's a private variable
44
+ self._date_time_format = date_time_format
45
+
46
+ self._time_tool = TimeTool(date_time_format=self._date_time_format)
47
+
48
+ # Initialise the base class, passing through the system_message parameter
49
+ super().__init__(system_message=system_message, **kwargs)
50
+
51
+ self.register_for_llm()(self._time_tool)
@@ -0,0 +1,27 @@
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 .deep_research import DeepResearchAgent
6
+ from .discord import DiscordAgent
7
+ from .document_agent import DocAgent, DoclingDocIngestAgent, InMemoryQueryEngine, VectorChromaQueryEngine
8
+ from .reasoning import ReasoningAgent, ThinkNode
9
+ from .slack import SlackAgent
10
+ from .telegram import TelegramAgent
11
+ from .websurfer import WebSurferAgent
12
+ from .wikipedia import WikipediaAgent
13
+
14
+ __all__ = [
15
+ "DeepResearchAgent",
16
+ "DiscordAgent",
17
+ "DocAgent",
18
+ "DoclingDocIngestAgent",
19
+ "InMemoryQueryEngine",
20
+ "ReasoningAgent",
21
+ "SlackAgent",
22
+ "TelegramAgent",
23
+ "ThinkNode",
24
+ "VectorChromaQueryEngine",
25
+ "WebSurferAgent",
26
+ "WikipediaAgent",
27
+ ]
@@ -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 .deep_research import DeepResearchAgent
6
+
7
+ __all__ = ["DeepResearchAgent"]
@@ -0,0 +1,52 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from typing import Any, Optional, Union
6
+
7
+ from .... import ConversableAgent
8
+ from ....doc_utils import export_module
9
+ from ....llm_config import LLMConfig
10
+ from ....tools.experimental import DeepResearchTool
11
+
12
+ __all__ = ["DeepResearchAgent"]
13
+
14
+
15
+ @export_module("autogen.agents.experimental")
16
+ class DeepResearchAgent(ConversableAgent):
17
+ """An agent that performs deep research tasks."""
18
+
19
+ DEFAULT_PROMPT = "You are a deep research agent. You have the ability to get information from the web and perform research tasks."
20
+
21
+ def __init__(
22
+ self,
23
+ name: str,
24
+ llm_config: Optional[Union[LLMConfig, dict[str, Any]]] = None,
25
+ system_message: Optional[Union[str, list[str]]] = DEFAULT_PROMPT,
26
+ max_web_steps: int = 30,
27
+ **kwargs: Any,
28
+ ) -> None:
29
+ """Initialize the DeepResearchAgent.
30
+
31
+ Args:
32
+ name: The name of the agent.
33
+ llm_config: The LLM configuration.
34
+ system_message: The system message. Defaults to DEFAULT_PROMPT.
35
+ max_web_steps: The maximum number of web steps. Defaults to 30.
36
+ **kwargs: Additional keyword arguments to pass to the ConversableAgent.
37
+ """
38
+ llm_config = LLMConfig.get_current_llm_config(llm_config) # type: ignore[arg-type]
39
+
40
+ super().__init__(
41
+ name=name,
42
+ system_message=system_message,
43
+ llm_config=llm_config,
44
+ **kwargs,
45
+ )
46
+
47
+ self.tool = DeepResearchTool(
48
+ llm_config=llm_config, # type: ignore[arg-type]
49
+ max_web_steps=max_web_steps,
50
+ )
51
+
52
+ self.register_for_llm()(self.tool)
@@ -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 .discord import DiscordAgent
6
+
7
+ __all__ = ["DiscordAgent"]
@@ -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
+ from typing import Any, Optional
6
+
7
+ from .... import ConversableAgent
8
+ from ....doc_utils import export_module
9
+ from ....tools.experimental import DiscordRetrieveTool, DiscordSendTool
10
+
11
+ __all__ = ["DiscordAgent"]
12
+
13
+
14
+ @export_module("autogen.agents.experimental")
15
+ class DiscordAgent(ConversableAgent):
16
+ """An agent that can send messages and retrieve messages on Discord."""
17
+
18
+ DEFAULT_SYSTEM_MESSAGE = (
19
+ "You are a helpful AI assistant that communicates through Discord. "
20
+ "Remember that Discord uses Markdown for formatting and has a character limit. "
21
+ "Keep messages clear and concise, and consider using appropriate formatting when helpful."
22
+ )
23
+
24
+ def __init__(
25
+ self,
26
+ name: str,
27
+ system_message: Optional[str] = None,
28
+ *,
29
+ bot_token: str,
30
+ channel_name: str,
31
+ guild_name: str,
32
+ has_writing_instructions: bool = True,
33
+ **kwargs: Any,
34
+ ) -> None:
35
+ """Initialize the DiscordAgent.
36
+
37
+ Args:
38
+ name: name of the agent.
39
+ system_message: system message for the ChatCompletion inference.
40
+ bot_token: Discord bot token
41
+ channel_name: Channel name where messages will be sent / retrieved
42
+ guild_name: Guild (server) name where the channel is located
43
+ has_writing_instructions: Whether to add writing instructions to the system message. Defaults to True.
44
+ **kwargs: Additional keyword arguments passed to the parent ConversableAgent class.
45
+ """
46
+ discord_system_message = system_message or self.DEFAULT_SYSTEM_MESSAGE
47
+
48
+ self._send_tool = DiscordSendTool(bot_token=bot_token, channel_name=channel_name, guild_name=guild_name)
49
+ self._retrieve_tool = DiscordRetrieveTool(bot_token=bot_token, channel_name=channel_name, guild_name=guild_name)
50
+
51
+ # Add formatting instructions
52
+ if has_writing_instructions:
53
+ formatting_instructions = (
54
+ "\nFormat guidelines for Discord:\n"
55
+ "1. Max message length: 2000 characters\n"
56
+ "2. Supports Markdown formatting\n"
57
+ "3. Can use ** for bold, * for italic, ``` for code blocks\n"
58
+ "4. Consider using appropriate emojis when suitable\n"
59
+ )
60
+
61
+ discord_system_message = discord_system_message + formatting_instructions
62
+
63
+ super().__init__(name=name, system_message=discord_system_message, **kwargs)
64
+
65
+ self.register_for_llm()(self._send_tool)
66
+ self.register_for_llm()(self._retrieve_tool)
@@ -0,0 +1,19 @@
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 .chroma_query_engine import VectorChromaQueryEngine
6
+ from .docling_doc_ingest_agent import DoclingDocIngestAgent
7
+ from .document_agent import DocAgent
8
+ from .document_utils import handle_input
9
+ from .inmemory_query_engine import InMemoryQueryEngine
10
+ from .parser_utils import docling_parse_docs
11
+
12
+ __all__ = [
13
+ "DocAgent",
14
+ "DoclingDocIngestAgent",
15
+ "InMemoryQueryEngine",
16
+ "VectorChromaQueryEngine",
17
+ "docling_parse_docs",
18
+ "handle_input",
19
+ ]