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,22 @@
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 .crewai import CrewAIInteroperability
6
+ from .interoperability import Interoperability
7
+ from .interoperable import Interoperable
8
+ from .langchain import LangChainChatModelFactory, LangChainInteroperability
9
+ from .litellm import LiteLLmConfigFactory
10
+ from .pydantic_ai import PydanticAIInteroperability
11
+ from .registry import register_interoperable_class
12
+
13
+ __all__ = [
14
+ "CrewAIInteroperability",
15
+ "Interoperability",
16
+ "Interoperable",
17
+ "LangChainChatModelFactory",
18
+ "LangChainInteroperability",
19
+ "LiteLLmConfigFactory",
20
+ "PydanticAIInteroperability",
21
+ "register_interoperable_class",
22
+ ]
@@ -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 .crewai import CrewAIInteroperability
6
+
7
+ __all__ = ["CrewAIInteroperability"]
@@ -0,0 +1,88 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import re
6
+ import sys
7
+ from typing import Any, Optional
8
+
9
+ from ...doc_utils import export_module
10
+ from ...import_utils import optional_import_block, require_optional_import
11
+ from ...tools import Tool
12
+ from ..registry import register_interoperable_class
13
+
14
+ __all__ = ["CrewAIInteroperability"]
15
+
16
+
17
+ def _sanitize_name(s: str) -> str:
18
+ return re.sub(r"\W|^(?=\d)", "_", s)
19
+
20
+
21
+ with optional_import_block():
22
+ from crewai.tools import BaseTool as CrewAITool
23
+
24
+
25
+ @register_interoperable_class("crewai")
26
+ @export_module("autogen.interop")
27
+ class CrewAIInteroperability:
28
+ """A class implementing the `Interoperable` protocol for converting CrewAI tools
29
+ to a general `Tool` format.
30
+
31
+ This class takes a `CrewAITool` and converts it into a standard `Tool` object.
32
+ """
33
+
34
+ @classmethod
35
+ @require_optional_import("crewai", "interop-crewai")
36
+ def convert_tool(cls, tool: Any, **kwargs: Any) -> Tool:
37
+ """Converts a given CrewAI tool into a general `Tool` format.
38
+
39
+ This method ensures that the provided tool is a valid `CrewAITool`, sanitizes
40
+ the tool's name, processes its description, and prepares a function to interact
41
+ with the tool's arguments. It then returns a standardized `Tool` object.
42
+
43
+ Args:
44
+ tool (Any): The tool to convert, expected to be an instance of `CrewAITool`.
45
+ **kwargs (Any): Additional arguments, which are not supported by this method.
46
+
47
+ Returns:
48
+ Tool: A standardized `Tool` object converted from the CrewAI tool.
49
+
50
+ Raises:
51
+ ValueError: If the provided tool is not an instance of `CrewAITool`, or if
52
+ any additional arguments are passed.
53
+ """
54
+ if not isinstance(tool, CrewAITool):
55
+ raise ValueError(f"Expected an instance of `crewai.tools.BaseTool`, got {type(tool)}")
56
+ if kwargs:
57
+ raise ValueError(f"The CrewAIInteroperability does not support any additional arguments, got {kwargs}")
58
+
59
+ # needed for type checking
60
+ crewai_tool: CrewAITool = tool # type: ignore[no-any-unimported]
61
+
62
+ name = _sanitize_name(crewai_tool.name)
63
+ description = (
64
+ crewai_tool.description.split("Tool Description: ")[-1]
65
+ + " (IMPORTANT: When using arguments, put them all in an `args` dictionary)"
66
+ )
67
+
68
+ def func(args: crewai_tool.args_schema) -> Any: # type: ignore[no-any-unimported]
69
+ return crewai_tool.run(**args.model_dump())
70
+
71
+ return Tool(
72
+ name=name,
73
+ description=description,
74
+ func_or_tool=func,
75
+ )
76
+
77
+ @classmethod
78
+ def get_unsupported_reason(cls) -> Optional[str]:
79
+ if sys.version_info < (3, 10) or sys.version_info >= (3, 13):
80
+ return "This submodule is only supported for Python versions 3.10, 3.11, and 3.12"
81
+
82
+ with optional_import_block() as result:
83
+ import crewai.tools # noqa: F401
84
+
85
+ if not result.is_successful:
86
+ return "Please install `interop-crewai` extra to use this module:\n\n\tpip install ag2[interop-crewai]"
87
+
88
+ return None
@@ -0,0 +1,71 @@
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 typing import Any
5
+
6
+ from ..doc_utils import export_module
7
+ from ..tools import Tool
8
+ from .interoperable import Interoperable
9
+ from .registry import InteroperableRegistry
10
+
11
+ __all__ = ["Interoperable"]
12
+
13
+
14
+ @export_module("autogen.interop")
15
+ class Interoperability:
16
+ """A class to handle interoperability between different tool types.
17
+
18
+ This class allows the conversion of tools to various interoperability classes and provides functionality
19
+ for retrieving and registering interoperability classes.
20
+ """
21
+
22
+ registry = InteroperableRegistry.get_instance()
23
+
24
+ @classmethod
25
+ def convert_tool(cls, *, tool: Any, type: str, **kwargs: Any) -> Tool:
26
+ """Converts a given tool to an instance of a specified interoperability type.
27
+
28
+ Args:
29
+ tool (Any): The tool object to be converted.
30
+ type (str): The type of interoperability to convert the tool to.
31
+ **kwargs (Any): Additional arguments to be passed during conversion.
32
+
33
+ Returns:
34
+ Tool: The converted tool.
35
+
36
+ Raises:
37
+ ValueError: If the interoperability class for the provided type is not found.
38
+ """
39
+ interop = cls.get_interoperability_class(type)
40
+ return interop.convert_tool(tool, **kwargs)
41
+
42
+ @classmethod
43
+ def get_interoperability_class(cls, type: str) -> type[Interoperable]:
44
+ """Retrieves the interoperability class corresponding to the specified type.
45
+
46
+ Args:
47
+ type (str): The type of the interoperability class to retrieve.
48
+
49
+ Returns:
50
+ type[Interoperable]: The interoperability class type.
51
+
52
+ Raises:
53
+ ValueError: If no interoperability class is found for the provided type.
54
+ """
55
+ supported_types = cls.registry.get_supported_types()
56
+ if type not in supported_types:
57
+ supported_types_formatted = ", ".join(["'t'" for t in supported_types])
58
+ raise ValueError(
59
+ f"Interoperability class {type} is not supported, supported types: {supported_types_formatted}"
60
+ )
61
+
62
+ return cls.registry.get_class(type)
63
+
64
+ @classmethod
65
+ def get_supported_types(cls) -> list[str]:
66
+ """Returns a sorted list of all supported interoperability types.
67
+
68
+ Returns:
69
+ List[str]: A sorted list of strings representing the supported interoperability types.
70
+ """
71
+ return sorted(cls.registry.get_supported_types())
@@ -0,0 +1,46 @@
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, Protocol, runtime_checkable
6
+
7
+ from ..doc_utils import export_module
8
+ from ..tools import Tool
9
+
10
+ __all__ = ["Interoperable"]
11
+
12
+
13
+ @runtime_checkable
14
+ @export_module("autogen.interop")
15
+ class Interoperable(Protocol):
16
+ """A Protocol defining the interoperability interface for tool conversion.
17
+
18
+ This protocol ensures that any class implementing it provides the method
19
+ `convert_tool` to convert a given tool into a desired format or type.
20
+ """
21
+
22
+ @classmethod
23
+ def convert_tool(cls, tool: Any, **kwargs: Any) -> Tool:
24
+ """Converts a given tool to a desired format or type.
25
+
26
+ This method should be implemented by any class adhering to the `Interoperable` protocol.
27
+
28
+ Args:
29
+ tool (Any): The tool object to be converted.
30
+ **kwargs (Any): Additional parameters to pass during the conversion process.
31
+
32
+ Returns:
33
+ Tool: The converted tool in the desired format or type.
34
+ """
35
+ ...
36
+
37
+ @classmethod
38
+ def get_unsupported_reason(cls) -> Optional[str]:
39
+ """Returns the reason for the tool being unsupported.
40
+
41
+ This method should be implemented by any class adhering to the `Interoperable` protocol.
42
+
43
+ Returns:
44
+ str: The reason for the interoperability class being unsupported.
45
+ """
46
+ ...
@@ -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 .langchain_chat_model_factory import LangChainChatModelFactory
6
+ from .langchain_tool import LangChainInteroperability
7
+
8
+ __all__ = ["LangChainChatModelFactory", "LangChainInteroperability"]
@@ -0,0 +1,155 @@
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 abc import ABC, abstractmethod
6
+ from typing import Any, Callable, TypeVar, Union
7
+
8
+ from ...doc_utils import export_module
9
+ from ...import_utils import optional_import_block, require_optional_import
10
+ from ...llm_config import LLMConfig
11
+ from ...oai import get_first_llm_config
12
+
13
+ with optional_import_block():
14
+ from langchain_anthropic import ChatAnthropic
15
+ from langchain_core.language_models import BaseChatModel
16
+ from langchain_google_genai import ChatGoogleGenerativeAI
17
+ from langchain_ollama import ChatOllama
18
+ from langchain_openai import AzureChatOpenAI, ChatOpenAI
19
+
20
+
21
+ __all__ = ["LangChainChatModelFactory"]
22
+
23
+ T = TypeVar("T", bound="LangChainChatModelFactory")
24
+
25
+
26
+ @require_optional_import(
27
+ ["langchain_anthropic", "langchain_google_genai", "langchain_ollama", "langchain_openai", "langchain_core"],
28
+ "browser-use",
29
+ except_for=["__init__", "register_factory"],
30
+ )
31
+ @export_module("autogen.interop")
32
+ class LangChainChatModelFactory(ABC):
33
+ _factories: set["LangChainChatModelFactory"] = set()
34
+
35
+ @classmethod
36
+ def create_base_chat_model(cls, llm_config: Union[LLMConfig, dict[str, Any]]) -> "BaseChatModel": # type: ignore [no-any-unimported]
37
+ first_llm_config = get_first_llm_config(llm_config)
38
+ for factory in LangChainChatModelFactory._factories:
39
+ if factory.accepts(first_llm_config):
40
+ return factory.create(first_llm_config)
41
+
42
+ raise ValueError("Could not find a factory for the given config.")
43
+
44
+ @classmethod
45
+ def register_factory(cls) -> Callable[[type[T]], type[T]]:
46
+ def decorator(factory: type[T]) -> type[T]:
47
+ cls._factories.add(factory())
48
+ return factory
49
+
50
+ return decorator
51
+
52
+ @classmethod
53
+ def prepare_config(cls, first_llm_config: dict[str, Any]) -> dict[str, Any]:
54
+ for pop_keys in ["api_type", "response_format"]:
55
+ first_llm_config.pop(pop_keys, None)
56
+ return first_llm_config
57
+
58
+ @classmethod
59
+ @abstractmethod
60
+ def create(cls, first_llm_config: dict[str, Any]) -> "BaseChatModel": # type: ignore [no-any-unimported]
61
+ ...
62
+
63
+ @classmethod
64
+ @abstractmethod
65
+ def get_api_type(cls) -> str: ...
66
+
67
+ @classmethod
68
+ def accepts(cls, first_llm_config: dict[str, Any]) -> bool:
69
+ return first_llm_config.get("api_type", "openai") == cls.get_api_type() # type: ignore [no-any-return]
70
+
71
+
72
+ @LangChainChatModelFactory.register_factory()
73
+ class ChatOpenAIFactory(LangChainChatModelFactory):
74
+ @classmethod
75
+ def create(cls, first_llm_config: dict[str, Any]) -> "ChatOpenAI": # type: ignore [no-any-unimported]
76
+ first_llm_config = cls.prepare_config(first_llm_config)
77
+
78
+ return ChatOpenAI(**first_llm_config)
79
+
80
+ @classmethod
81
+ def get_api_type(cls) -> str:
82
+ return "openai"
83
+
84
+
85
+ @LangChainChatModelFactory.register_factory()
86
+ class DeepSeekFactory(ChatOpenAIFactory):
87
+ @classmethod
88
+ def create(cls, first_llm_config: dict[str, Any]) -> "ChatOpenAI": # type: ignore [no-any-unimported]
89
+ if "base_url" not in first_llm_config:
90
+ raise ValueError("base_url is required for deepseek api type.")
91
+ return super().create(first_llm_config)
92
+
93
+ @classmethod
94
+ def get_api_type(cls) -> str:
95
+ return "deepseek"
96
+
97
+
98
+ @LangChainChatModelFactory.register_factory()
99
+ class ChatAnthropicFactory(LangChainChatModelFactory):
100
+ @classmethod
101
+ def create(cls, first_llm_config: dict[str, Any]) -> "ChatAnthropic": # type: ignore [no-any-unimported]
102
+ first_llm_config = cls.prepare_config(first_llm_config)
103
+
104
+ return ChatAnthropic(**first_llm_config)
105
+
106
+ @classmethod
107
+ def get_api_type(cls) -> str:
108
+ return "anthropic"
109
+
110
+
111
+ @LangChainChatModelFactory.register_factory()
112
+ class ChatGoogleGenerativeAIFactory(LangChainChatModelFactory):
113
+ @classmethod
114
+ def create(cls, first_llm_config: dict[str, Any]) -> "ChatGoogleGenerativeAI": # type: ignore [no-any-unimported]
115
+ first_llm_config = cls.prepare_config(first_llm_config)
116
+
117
+ return ChatGoogleGenerativeAI(**first_llm_config)
118
+
119
+ @classmethod
120
+ def get_api_type(cls) -> str:
121
+ return "google"
122
+
123
+
124
+ @LangChainChatModelFactory.register_factory()
125
+ class AzureChatOpenAIFactory(LangChainChatModelFactory):
126
+ @classmethod
127
+ def create(cls, first_llm_config: dict[str, Any]) -> "AzureChatOpenAI": # type: ignore [no-any-unimported]
128
+ first_llm_config = cls.prepare_config(first_llm_config)
129
+ for param in ["base_url", "api_version"]:
130
+ if param not in first_llm_config:
131
+ raise ValueError(f"{param} is required for azure api type.")
132
+ first_llm_config["azure_endpoint"] = first_llm_config.pop("base_url")
133
+
134
+ return AzureChatOpenAI(**first_llm_config)
135
+
136
+ @classmethod
137
+ def get_api_type(cls) -> str:
138
+ return "azure"
139
+
140
+
141
+ @LangChainChatModelFactory.register_factory()
142
+ class ChatOllamaFactory(LangChainChatModelFactory):
143
+ @classmethod
144
+ def create(cls, first_llm_config: dict[str, Any]) -> "ChatOllama": # type: ignore [no-any-unimported]
145
+ first_llm_config = cls.prepare_config(first_llm_config)
146
+ first_llm_config["base_url"] = first_llm_config.pop("client_host", None)
147
+ if "num_ctx" not in first_llm_config:
148
+ # In all Browser Use examples, num_ctx is set to 32000
149
+ first_llm_config["num_ctx"] = 32000
150
+
151
+ return ChatOllama(**first_llm_config)
152
+
153
+ @classmethod
154
+ def get_api_type(cls) -> str:
155
+ return "ollama"
@@ -0,0 +1,82 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import sys
6
+ from typing import Any, Optional
7
+
8
+ from ...doc_utils import export_module
9
+ from ...import_utils import optional_import_block, require_optional_import
10
+ from ...tools import Tool
11
+ from ..registry import register_interoperable_class
12
+
13
+ __all__ = ["LangChainInteroperability"]
14
+
15
+ with optional_import_block():
16
+ from langchain_core.tools import BaseTool as LangchainTool
17
+
18
+
19
+ @register_interoperable_class("langchain")
20
+ @export_module("autogen.interop")
21
+ class LangChainInteroperability:
22
+ """A class implementing the `Interoperable` protocol for converting Langchain tools
23
+ into a general `Tool` format.
24
+
25
+ This class takes a `LangchainTool` and converts it into a standard `Tool` object,
26
+ ensuring compatibility between Langchain tools and other systems that expect
27
+ the `Tool` format.
28
+ """
29
+
30
+ @classmethod
31
+ @require_optional_import("langchain_core", "interop-langchain")
32
+ def convert_tool(cls, tool: Any, **kwargs: Any) -> Tool:
33
+ """Converts a given Langchain tool into a general `Tool` format.
34
+
35
+ This method verifies that the provided tool is a valid `LangchainTool`,
36
+ processes the tool's input and description, and returns a standardized
37
+ `Tool` object.
38
+
39
+ Args:
40
+ tool (Any): The tool to convert, expected to be an instance of `LangchainTool`.
41
+ **kwargs (Any): Additional arguments, which are not supported by this method.
42
+
43
+ Returns:
44
+ Tool: A standardized `Tool` object converted from the Langchain tool.
45
+
46
+ Raises:
47
+ ValueError: If the provided tool is not an instance of `LangchainTool`, or if
48
+ any additional arguments are passed.
49
+ """
50
+ if not isinstance(tool, LangchainTool):
51
+ raise ValueError(f"Expected an instance of `langchain_core.tools.BaseTool`, got {type(tool)}")
52
+ if kwargs:
53
+ raise ValueError(f"The LangchainInteroperability does not support any additional arguments, got {kwargs}")
54
+
55
+ # needed for type checking
56
+ langchain_tool: LangchainTool = tool # type: ignore[no-any-unimported]
57
+
58
+ model_type = langchain_tool.get_input_schema()
59
+
60
+ def func(tool_input: model_type) -> Any: # type: ignore[valid-type]
61
+ return langchain_tool.run(tool_input.model_dump()) # type: ignore[attr-defined]
62
+
63
+ return Tool(
64
+ name=langchain_tool.name,
65
+ description=langchain_tool.description,
66
+ func_or_tool=func,
67
+ )
68
+
69
+ @classmethod
70
+ def get_unsupported_reason(cls) -> Optional[str]:
71
+ if sys.version_info < (3, 9):
72
+ return "This submodule is only supported for Python versions 3.9 and above"
73
+
74
+ with optional_import_block() as result:
75
+ import langchain_core.tools # noqa: F401
76
+
77
+ if not result.is_successful:
78
+ return (
79
+ "Please install `interop-langchain` extra to use this module:\n\n\tpip install ag2[interop-langchain]"
80
+ )
81
+
82
+ return None
@@ -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 .litellm_config_factory import LiteLLmConfigFactory
6
+
7
+ __all__ = ["LiteLLmConfigFactory"]
@@ -0,0 +1,113 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import os
6
+ from abc import ABC, abstractmethod
7
+ from typing import Any, Callable, TypeVar, Union
8
+
9
+ from ...doc_utils import export_module
10
+ from ...llm_config import LLMConfig
11
+ from ...oai import get_first_llm_config
12
+
13
+ __all__ = ["LiteLLmConfigFactory"]
14
+
15
+ T = TypeVar("T", bound="LiteLLmConfigFactory")
16
+
17
+
18
+ @export_module("autogen.interop")
19
+ class LiteLLmConfigFactory(ABC):
20
+ _factories: set["LiteLLmConfigFactory"] = set()
21
+
22
+ @classmethod
23
+ def create_lite_llm_config(cls, llm_config: Union[LLMConfig, dict[str, Any]]) -> dict[str, Any]:
24
+ first_llm_config = get_first_llm_config(llm_config)
25
+ for factory in LiteLLmConfigFactory._factories:
26
+ if factory.accepts(first_llm_config):
27
+ return factory.create(first_llm_config)
28
+
29
+ raise ValueError("Could not find a factory for the given config.")
30
+
31
+ @classmethod
32
+ def register_factory(cls) -> Callable[[type[T]], type[T]]:
33
+ def decorator(factory: type[T]) -> type[T]:
34
+ cls._factories.add(factory())
35
+ return factory
36
+
37
+ return decorator
38
+
39
+ @classmethod
40
+ def create(cls, first_llm_config: dict[str, Any]) -> dict[str, Any]:
41
+ model = first_llm_config.pop("model")
42
+ api_type = first_llm_config.pop("api_type", "openai")
43
+
44
+ first_llm_config["provider"] = f"{api_type}/{model}"
45
+ return first_llm_config
46
+
47
+ @classmethod
48
+ @abstractmethod
49
+ def get_api_type(cls) -> str: ...
50
+
51
+ @classmethod
52
+ def accepts(cls, first_llm_config: dict[str, Any]) -> bool:
53
+ return first_llm_config.get("api_type", "openai") == cls.get_api_type() # type: ignore [no-any-return]
54
+
55
+
56
+ @LiteLLmConfigFactory.register_factory()
57
+ class DefaultLiteLLmConfigFactory(LiteLLmConfigFactory):
58
+ @classmethod
59
+ def get_api_type(cls) -> str:
60
+ raise NotImplementedError("DefaultLiteLLmConfigFactory does not have an API type.")
61
+
62
+ @classmethod
63
+ def accepts(cls, first_llm_config: dict[str, Any]) -> bool:
64
+ non_base_api_types = ["google", "ollama"]
65
+ return first_llm_config.get("api_type", "openai") not in non_base_api_types
66
+
67
+ @classmethod
68
+ def create(cls, first_llm_config: dict[str, Any]) -> dict[str, Any]:
69
+ api_type = first_llm_config.get("api_type", "openai")
70
+ if api_type != "openai" and "api_key" not in first_llm_config:
71
+ raise ValueError("API key is required.")
72
+ first_llm_config["api_token"] = first_llm_config.pop("api_key", os.getenv("OPENAI_API_KEY"))
73
+
74
+ first_llm_config = super().create(first_llm_config)
75
+
76
+ return first_llm_config
77
+
78
+
79
+ @LiteLLmConfigFactory.register_factory()
80
+ class GoogleLiteLLmConfigFactory(LiteLLmConfigFactory):
81
+ @classmethod
82
+ def get_api_type(cls) -> str:
83
+ return "google"
84
+
85
+ @classmethod
86
+ def create(cls, first_llm_config: dict[str, Any]) -> dict[str, Any]:
87
+ # api type must be changed before calling super().create
88
+ # litellm uses gemini as the api type for google
89
+ first_llm_config["api_type"] = "gemini"
90
+ first_llm_config["api_token"] = first_llm_config.pop("api_key")
91
+ first_llm_config = super().create(first_llm_config)
92
+
93
+ return first_llm_config
94
+
95
+ @classmethod
96
+ def accepts(cls, first_llm_config: dict[str, Any]) -> bool:
97
+ api_type: str = first_llm_config.get("api_type", "")
98
+ return api_type == cls.get_api_type() or api_type == "gemini"
99
+
100
+
101
+ @LiteLLmConfigFactory.register_factory()
102
+ class OllamaLiteLLmConfigFactory(LiteLLmConfigFactory):
103
+ @classmethod
104
+ def get_api_type(cls) -> str:
105
+ return "ollama"
106
+
107
+ @classmethod
108
+ def create(cls, first_llm_config: dict[str, Any]) -> dict[str, Any]:
109
+ first_llm_config = super().create(first_llm_config)
110
+ if "client_host" in first_llm_config:
111
+ first_llm_config["api_base"] = first_llm_config.pop("client_host")
112
+
113
+ return first_llm_config
@@ -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 .pydantic_ai import PydanticAIInteroperability
6
+
7
+ __all__ = ["PydanticAIInteroperability"]