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,100 @@
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
+
6
+ from abc import ABC
7
+ from collections.abc import Callable
8
+ from typing import Annotated, Any, Literal, Union
9
+ from uuid import UUID, uuid4
10
+
11
+ from pydantic import BaseModel, Field, create_model
12
+
13
+ from ..doc_utils import export_module
14
+
15
+ __all__ = ["BaseEvent", "get_annotated_type_for_event_classes", "get_event_classes", "wrap_event"]
16
+
17
+
18
+ @export_module("autogen.events")
19
+ class BaseEvent(BaseModel, ABC):
20
+ uuid: UUID
21
+
22
+ def __init__(self, uuid: UUID | None = None, **kwargs: Any) -> None:
23
+ uuid = uuid or uuid4()
24
+ super().__init__(uuid=uuid, **kwargs)
25
+
26
+ def print(self, f: Callable[..., Any] | None = None) -> None:
27
+ """Print event
28
+
29
+ Args:
30
+ f (Optional[Callable[..., Any]], optional): Print function. If none, python's default print will be used.
31
+ """
32
+ ...
33
+
34
+
35
+ def camel2snake(name: str) -> str:
36
+ return "".join(["_" + i.lower() if i.isupper() else i for i in name]).lstrip("_")
37
+
38
+
39
+ _event_classes: dict[str, type[BaseModel]] = {}
40
+
41
+
42
+ @export_module("autogen.events")
43
+ def wrap_event(event_cls: type[BaseEvent]) -> type[BaseModel]:
44
+ """Wrap a event class with a type field to be used in a union type
45
+
46
+ This is needed for proper serialization and deserialization of events in a union type.
47
+
48
+ Args:
49
+ event_cls (type[BaseEvent]): Event class to wrap
50
+ """
51
+ global _event_classes
52
+
53
+ if not event_cls.__name__.endswith("Event"):
54
+ raise ValueError("Event class name must end with 'Event'")
55
+
56
+ type_name = camel2snake(event_cls.__name__)
57
+ type_name = type_name[: -len("_event")]
58
+
59
+ class WrapperBase(BaseModel):
60
+ # these types are generated dynamically so we need to disable the type checker
61
+ type: Literal[type_name] = type_name # type: ignore[valid-type]
62
+ content: event_cls # type: ignore[valid-type]
63
+
64
+ def __init__(self, *args: Any, **data: Any):
65
+ if set(data.keys()) == {"type", "content"} and "content" in data:
66
+ super().__init__(*args, **data)
67
+ else:
68
+ if "content" in data:
69
+ content = data.pop("content")
70
+ super().__init__(*args, content=event_cls(*args, **data, content=content), **data)
71
+ else:
72
+ super().__init__(content=event_cls(*args, **data), **data)
73
+
74
+ def print(self, f: Callable[..., Any] | None = None) -> None:
75
+ self.content.print(f) # type: ignore[attr-defined]
76
+
77
+ wrapper_cls = create_model(event_cls.__name__, __base__=WrapperBase)
78
+
79
+ # Preserve the original class's docstring and other attributes
80
+ wrapper_cls.__doc__ = event_cls.__doc__
81
+ wrapper_cls.__module__ = event_cls.__module__
82
+
83
+ # Copy any other relevant attributes/metadata from the original class
84
+ if hasattr(event_cls, "__annotations__"):
85
+ wrapper_cls.__annotations__ = event_cls.__annotations__
86
+
87
+ _event_classes[type_name] = wrapper_cls
88
+
89
+ return wrapper_cls
90
+
91
+
92
+ @export_module("autogen.events")
93
+ def get_annotated_type_for_event_classes() -> type[Any]:
94
+ # this is a dynamic type so we need to disable the type checker
95
+ union_type = Union[tuple(_event_classes.values())] # type: ignore[valid-type] # noqa: UP007
96
+ return Annotated[union_type, Field(discriminator="type")] # type: ignore[return-value]
97
+
98
+
99
+ def get_event_classes() -> dict[str, type[BaseModel]]:
100
+ return _event_classes
@@ -0,0 +1,168 @@
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 collections.abc import Callable
6
+ from typing import Any, Literal
7
+ from uuid import UUID
8
+
9
+ from pydantic import BaseModel
10
+
11
+ from .base_event import BaseEvent, wrap_event
12
+
13
+ __all__ = ["UsageSummaryEvent"]
14
+
15
+
16
+ class ModelUsageSummary(BaseModel):
17
+ """Model usage summary."""
18
+
19
+ model: str
20
+ """Model name."""
21
+ completion_tokens: int
22
+ """Number of tokens used for completion."""
23
+ cost: float
24
+ """Cost of the completion."""
25
+ prompt_tokens: int
26
+ """Number of tokens used for prompt."""
27
+ total_tokens: int
28
+ """Total number of tokens used."""
29
+
30
+
31
+ class ActualUsageSummary(BaseModel):
32
+ """Actual usage summary."""
33
+
34
+ usages: list[ModelUsageSummary] | None = None
35
+ """List of model usage summaries."""
36
+ total_cost: float | None = None
37
+ """Total cost."""
38
+
39
+
40
+ class TotalUsageSummary(BaseModel):
41
+ """Total usage summary."""
42
+
43
+ usages: list[ModelUsageSummary] | None = None
44
+ """List of model usage summaries."""
45
+ total_cost: float | None = None
46
+ """Total cost."""
47
+
48
+
49
+ Mode = Literal["both", "total", "actual"]
50
+
51
+
52
+ def _change_usage_summary_format(
53
+ actual_usage_summary: dict[str, Any] | None = None, total_usage_summary: dict[str, Any] | None = None
54
+ ) -> dict[str, dict[str, Any]]:
55
+ summary: dict[str, Any] = {}
56
+
57
+ for usage_type, usage_summary in {"actual": actual_usage_summary, "total": total_usage_summary}.items():
58
+ if usage_summary is None:
59
+ summary[usage_type] = {"usages": None, "total_cost": None}
60
+ continue
61
+
62
+ usage_summary_altered_format: dict[str, list[dict[str, Any]]] = {"usages": []}
63
+ for k, v in usage_summary.items():
64
+ if isinstance(k, str) and isinstance(v, dict):
65
+ current_usage = dict(v.items())
66
+ current_usage["model"] = k
67
+ usage_summary_altered_format["usages"].append(current_usage)
68
+ else:
69
+ usage_summary_altered_format[k] = v
70
+ summary[usage_type] = usage_summary_altered_format
71
+
72
+ return summary
73
+
74
+
75
+ @wrap_event
76
+ class UsageSummaryEvent(BaseEvent):
77
+ """Usage summary message."""
78
+
79
+ actual: ActualUsageSummary
80
+ """Actual usage summary."""
81
+ total: TotalUsageSummary
82
+ """Total usage summary."""
83
+ mode: Mode
84
+ """Mode to display the usage summary."""
85
+
86
+ def __init__(
87
+ self,
88
+ *,
89
+ uuid: UUID | None = None,
90
+ actual_usage_summary: dict[str, Any] | None = None,
91
+ total_usage_summary: dict[str, Any] | None = None,
92
+ mode: Mode = "both",
93
+ ):
94
+ # print(f"{actual_usage_summary=}")
95
+ # print(f"{total_usage_summary=}")
96
+
97
+ summary_dict = _change_usage_summary_format(actual_usage_summary, total_usage_summary)
98
+
99
+ super().__init__(uuid=uuid, **summary_dict, mode=mode)
100
+
101
+ def _print_usage(
102
+ self,
103
+ usage_summary: ActualUsageSummary | TotalUsageSummary,
104
+ usage_type: str = "total",
105
+ f: Callable[..., Any] | None = None,
106
+ ) -> None:
107
+ f = f or print
108
+ word_from_type = "including" if usage_type == "total" else "excluding"
109
+ if usage_summary.usages is None or len(usage_summary.usages) == 0:
110
+ f("No actual cost incurred (all completions are using cache).", flush=True)
111
+ return
112
+
113
+ f(f"Usage summary {word_from_type} cached usage: ", flush=True)
114
+ f(f"Total cost: {round(usage_summary.total_cost, 5)}", flush=True) # type: ignore [arg-type]
115
+
116
+ for usage in usage_summary.usages:
117
+ f(
118
+ f"* Model '{usage.model}': cost: {round(usage.cost, 5)}, prompt_tokens: {usage.prompt_tokens}, completion_tokens: {usage.completion_tokens}, total_tokens: {usage.total_tokens}",
119
+ flush=True,
120
+ )
121
+
122
+ def print(self, f: Callable[..., Any] | None = None) -> None:
123
+ f = f or print
124
+
125
+ if self.total.usages is None:
126
+ f('No usage summary. Please call "create" first.', flush=True)
127
+ return
128
+
129
+ f("-" * 100, flush=True)
130
+ if self.mode == "both":
131
+ self._print_usage(self.actual, "actual", f)
132
+ f()
133
+ if self.total.model_dump_json() != self.actual.model_dump_json():
134
+ self._print_usage(self.total, "total", f)
135
+ else:
136
+ f(
137
+ "All completions are non-cached: the total cost with cached completions is the same as actual cost.",
138
+ flush=True,
139
+ )
140
+ elif self.mode == "total":
141
+ self._print_usage(self.total, "total", f)
142
+ elif self.mode == "actual":
143
+ self._print_usage(self.actual, "actual", f)
144
+ else:
145
+ raise ValueError(f'Invalid mode: {self.mode}, choose from "actual", "total", ["actual", "total"]')
146
+ f("-" * 100, flush=True)
147
+
148
+
149
+ @wrap_event
150
+ class StreamEvent(BaseEvent):
151
+ """Stream event."""
152
+
153
+ content: str
154
+ """Content of the event."""
155
+
156
+ def __init__(self, *, uuid: UUID | None = None, content: str) -> None:
157
+ super().__init__(uuid=uuid, content=content)
158
+
159
+ def print(self, f: Callable[..., Any] | None = None) -> None:
160
+ f = f or print
161
+
162
+ # Set the terminal text color to green
163
+ f("\033[32m", end="")
164
+
165
+ f(self.content, end="", flush=True)
166
+
167
+ # Reset the terminal text color
168
+ f("\033[0m\n")
@@ -0,0 +1,44 @@
1
+ # Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ import logging
5
+ from collections.abc import Callable
6
+ from functools import wraps
7
+
8
+ from pydantic import BaseModel
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ def deprecated_by(
14
+ new_class: type[BaseModel],
15
+ param_mapping: dict[str, str] = None,
16
+ default_params: dict[str, any] = None,
17
+ ) -> Callable[[type[BaseModel]], Callable[..., BaseModel]]:
18
+ param_mapping = param_mapping or {}
19
+ default_params = default_params or {}
20
+
21
+ def decorator(
22
+ old_class: type[BaseModel],
23
+ param_mapping: dict[str, str] = param_mapping,
24
+ default_params: dict[str, any] = default_params,
25
+ ) -> Callable[..., BaseModel]:
26
+ @wraps(old_class)
27
+ def wrapper(*args, **kwargs) -> BaseModel:
28
+ logger.warning(
29
+ f"{old_class.__name__} is deprecated by {new_class.__name__}. Please import it from {new_class.__module__} and use it instead."
30
+ )
31
+ # Translate old parameters to new parameters
32
+ new_kwargs = {param_mapping.get(k, k): v for k, v in kwargs.items()}
33
+
34
+ # Add default parameters if not already present
35
+ for key, value in default_params.items():
36
+ if key not in new_kwargs:
37
+ new_kwargs[key] = value
38
+
39
+ # Pass the translated parameters to the new class
40
+ return new_class(*args, **new_kwargs)
41
+
42
+ return wrapper
43
+
44
+ return decorator
@@ -0,0 +1,45 @@
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
+
6
+ import json
7
+ from collections.abc import Callable
8
+ from typing import Any
9
+ from uuid import UUID
10
+
11
+ from .base_event import BaseEvent, wrap_event
12
+
13
+
14
+ @wrap_event
15
+ class PrintEvent(BaseEvent):
16
+ """Print message"""
17
+
18
+ objects: list[str]
19
+ """List of objects to print"""
20
+ sep: str
21
+ """Separator between objects"""
22
+ end: str
23
+ """End of the print"""
24
+
25
+ def __init__(self, *objects: Any, sep: str = " ", end: str = "\n", flush: bool = False, uuid: UUID | None = None):
26
+ objects_as_string = [self._to_json(x) for x in objects]
27
+
28
+ super().__init__(uuid=uuid, objects=objects_as_string, sep=sep, end=end)
29
+
30
+ def _to_json(self, obj: Any) -> str:
31
+ if isinstance(obj, str):
32
+ return obj
33
+
34
+ if hasattr(obj, "model_dump_json"):
35
+ return obj.model_dump_json() # type: ignore [no-any-return]
36
+ try:
37
+ return json.dumps(obj)
38
+ except Exception:
39
+ return str(obj)
40
+ # return repr(obj)
41
+
42
+ def print(self, f: Callable[..., Any] | None = None) -> None:
43
+ f = f or print
44
+
45
+ f(*self.objects, sep=self.sep, end=self.end, flush=True)
@@ -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
+ # Portions derived from https://github.com/microsoft/autogen are under the MIT License.
6
+ # SPDX-License-Identifier: MIT
7
+ from typing import Any
8
+
9
+ from .doc_utils import export_module
10
+
11
+ __all__ = [
12
+ "AgentNameConflictError",
13
+ "InvalidCarryOverTypeError",
14
+ "ModelToolNotSupportedError",
15
+ "NoEligibleSpeakerError",
16
+ "SenderRequiredError",
17
+ "UndefinedNextAgentError",
18
+ ]
19
+
20
+
21
+ @export_module("autogen")
22
+ class AgentNameConflictError(Exception): # noqa: N818
23
+ def __init__(self, msg: str = "Found multiple agents with the same name.", *args: Any, **kwargs: Any):
24
+ super().__init__(msg, *args, **kwargs)
25
+
26
+
27
+ @export_module("autogen")
28
+ class NoEligibleSpeakerError(Exception): # noqa: N818
29
+ """Exception raised for early termination of a GroupChat."""
30
+
31
+ def __init__(self, message: str = "No eligible speakers."):
32
+ self.message = message
33
+ super().__init__(self.message)
34
+
35
+
36
+ @export_module("autogen")
37
+ class SenderRequiredError(Exception): # noqa: N818
38
+ """Exception raised when the sender is required but not provided."""
39
+
40
+ def __init__(self, message: str = "Sender is required but not provided."):
41
+ self.message = message
42
+ super().__init__(self.message)
43
+
44
+
45
+ @export_module("autogen")
46
+ class InvalidCarryOverTypeError(Exception): # noqa: N818
47
+ """Exception raised when the carryover type is invalid."""
48
+
49
+ def __init__(
50
+ self, message: str = "Carryover should be a string or a list of strings. Not adding carryover to the message."
51
+ ):
52
+ self.message = message
53
+ super().__init__(self.message)
54
+
55
+
56
+ @export_module("autogen")
57
+ class UndefinedNextAgentError(Exception): # noqa: N818
58
+ """Exception raised when the provided next agents list does not overlap with agents in the group."""
59
+
60
+ def __init__(self, message: str = "The provided agents list does not overlap with agents in the group."):
61
+ self.message = message
62
+ super().__init__(self.message)
63
+
64
+
65
+ class ModelToolNotSupportedError(Exception):
66
+ """Exception raised when attempting to use tools with models that do not support them."""
67
+
68
+ def __init__(
69
+ self,
70
+ model: str,
71
+ ):
72
+ self.message = f"Tools are not supported with {model} models. Refer to the documentation at https://platform.openai.com/docs/guides/reasoning#limitations"
73
+ super().__init__(self.message)
@@ -0,0 +1,5 @@
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
+ __all__: list[str] = []
@@ -0,0 +1,16 @@
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 .dependencies import Provider, dependency_provider
9
+ from .use import Depends, inject
10
+
11
+ __all__ = (
12
+ "Depends",
13
+ "Provider",
14
+ "dependency_provider",
15
+ "inject",
16
+ )
@@ -0,0 +1,75 @@
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 sys
9
+ from typing import Any
10
+
11
+ from pydantic import BaseModel, create_model
12
+ from pydantic.version import VERSION as PYDANTIC_VERSION
13
+
14
+ __all__ = (
15
+ "PYDANTIC_V2",
16
+ "BaseModel",
17
+ "ConfigDict",
18
+ "ExceptionGroup",
19
+ "create_model",
20
+ "evaluate_forwardref",
21
+ "get_config_base",
22
+ )
23
+
24
+
25
+ PYDANTIC_V2 = PYDANTIC_VERSION.startswith("2.")
26
+
27
+ default_pydantic_config = {"arbitrary_types_allowed": True}
28
+
29
+ evaluate_forwardref: Any
30
+ # isort: off
31
+ if PYDANTIC_V2:
32
+ from pydantic import ConfigDict
33
+ from pydantic._internal._typing_extra import ( # type: ignore[no-redef]
34
+ eval_type_lenient as evaluate_forwardref,
35
+ )
36
+
37
+ def model_schema(model: type[BaseModel]) -> dict[str, Any]:
38
+ return model.model_json_schema()
39
+
40
+ def get_config_base(config_data: ConfigDict | None = None) -> ConfigDict:
41
+ return config_data or ConfigDict(**default_pydantic_config) # type: ignore[typeddict-item]
42
+
43
+ def get_aliases(model: type[BaseModel]) -> tuple[str, ...]:
44
+ return tuple(f.alias or name for name, f in model.model_fields.items())
45
+
46
+ class CreateBaseModel(BaseModel):
47
+ """Just to support FastStream < 0.3.7."""
48
+
49
+ model_config = ConfigDict(arbitrary_types_allowed=True)
50
+
51
+ else:
52
+ from pydantic.typing import evaluate_forwardref as evaluate_forwardref # type: ignore[no-redef]
53
+ from pydantic.config import get_config, ConfigDict, BaseConfig
54
+
55
+ def get_config_base(config_data: ConfigDict | None = None) -> type[BaseConfig]: # type: ignore[misc,no-any-unimported]
56
+ return get_config(config_data or ConfigDict(**default_pydantic_config)) # type: ignore[typeddict-item,no-any-unimported,no-any-return]
57
+
58
+ def model_schema(model: type[BaseModel]) -> dict[str, Any]:
59
+ return model.schema()
60
+
61
+ def get_aliases(model: type[BaseModel]) -> tuple[str, ...]:
62
+ return tuple(f.alias or name for name, f in model.__fields__.items()) # type: ignore[attr-defined]
63
+
64
+ class CreateBaseModel(BaseModel): # type: ignore[no-redef]
65
+ """Just to support FastStream < 0.3.7."""
66
+
67
+ class Config:
68
+ arbitrary_types_allowed = True
69
+
70
+
71
+ if sys.version_info < (3, 11):
72
+ from exceptiongroup import ExceptionGroup as ExceptionGroup
73
+
74
+ else:
75
+ ExceptionGroup = ExceptionGroup
@@ -0,0 +1,14 @@
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 .build import build_call_model
9
+ from .model import CallModel
10
+
11
+ __all__ = (
12
+ "CallModel",
13
+ "build_call_model",
14
+ )