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.
- ag2-0.10.2.dist-info/METADATA +819 -0
- ag2-0.10.2.dist-info/RECORD +423 -0
- ag2-0.10.2.dist-info/WHEEL +4 -0
- ag2-0.10.2.dist-info/licenses/LICENSE +201 -0
- ag2-0.10.2.dist-info/licenses/NOTICE.md +19 -0
- autogen/__init__.py +88 -0
- autogen/_website/__init__.py +3 -0
- autogen/_website/generate_api_references.py +426 -0
- autogen/_website/generate_mkdocs.py +1216 -0
- autogen/_website/notebook_processor.py +475 -0
- autogen/_website/process_notebooks.py +656 -0
- autogen/_website/utils.py +413 -0
- autogen/a2a/__init__.py +36 -0
- autogen/a2a/agent_executor.py +86 -0
- autogen/a2a/client.py +357 -0
- autogen/a2a/errors.py +18 -0
- autogen/a2a/httpx_client_factory.py +79 -0
- autogen/a2a/server.py +221 -0
- autogen/a2a/utils.py +207 -0
- autogen/agentchat/__init__.py +47 -0
- autogen/agentchat/agent.py +180 -0
- autogen/agentchat/assistant_agent.py +86 -0
- autogen/agentchat/chat.py +325 -0
- autogen/agentchat/contrib/__init__.py +5 -0
- autogen/agentchat/contrib/agent_eval/README.md +7 -0
- autogen/agentchat/contrib/agent_eval/agent_eval.py +108 -0
- autogen/agentchat/contrib/agent_eval/criterion.py +43 -0
- autogen/agentchat/contrib/agent_eval/critic_agent.py +44 -0
- autogen/agentchat/contrib/agent_eval/quantifier_agent.py +39 -0
- autogen/agentchat/contrib/agent_eval/subcritic_agent.py +45 -0
- autogen/agentchat/contrib/agent_eval/task.py +42 -0
- autogen/agentchat/contrib/agent_optimizer.py +432 -0
- autogen/agentchat/contrib/capabilities/__init__.py +5 -0
- autogen/agentchat/contrib/capabilities/agent_capability.py +20 -0
- autogen/agentchat/contrib/capabilities/generate_images.py +301 -0
- autogen/agentchat/contrib/capabilities/teachability.py +393 -0
- autogen/agentchat/contrib/capabilities/text_compressors.py +66 -0
- autogen/agentchat/contrib/capabilities/tools_capability.py +22 -0
- autogen/agentchat/contrib/capabilities/transform_messages.py +93 -0
- autogen/agentchat/contrib/capabilities/transforms.py +578 -0
- autogen/agentchat/contrib/capabilities/transforms_util.py +122 -0
- autogen/agentchat/contrib/capabilities/vision_capability.py +215 -0
- autogen/agentchat/contrib/captainagent/__init__.py +9 -0
- autogen/agentchat/contrib/captainagent/agent_builder.py +790 -0
- autogen/agentchat/contrib/captainagent/captainagent.py +514 -0
- autogen/agentchat/contrib/captainagent/tool_retriever.py +334 -0
- autogen/agentchat/contrib/captainagent/tools/README.md +44 -0
- autogen/agentchat/contrib/captainagent/tools/__init__.py +5 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation.py +40 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/explore_csv.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test.py +30 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download.py +27 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search.py +53 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image.py +53 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text.py +38 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption.py +34 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/image_qa.py +60 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition.py +61 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search.py +47 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables.py +33 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download.py +35 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week.py +18 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_matrix_power.py +31 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_reflected_point.py +16 -0
- autogen/agentchat/contrib/captainagent/tools/math/complex_numbers_product.py +25 -0
- autogen/agentchat/contrib/captainagent/tools/math/compute_currency_conversion.py +23 -0
- autogen/agentchat/contrib/captainagent/tools/math/count_distinct_permutations.py +27 -0
- autogen/agentchat/contrib/captainagent/tools/math/evaluate_expression.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/math/find_continuity_point.py +34 -0
- autogen/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers.py +39 -0
- autogen/agentchat/contrib/captainagent/tools/math/modular_inverse_sum.py +23 -0
- autogen/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers.py +36 -0
- autogen/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials.py +15 -0
- autogen/agentchat/contrib/captainagent/tools/math/sum_of_primes_below.py +15 -0
- autogen/agentchat/contrib/captainagent/tools/requirements.txt +10 -0
- autogen/agentchat/contrib/captainagent/tools/tool_description.tsv +34 -0
- autogen/agentchat/contrib/gpt_assistant_agent.py +526 -0
- autogen/agentchat/contrib/graph_rag/__init__.py +9 -0
- autogen/agentchat/contrib/graph_rag/document.py +29 -0
- autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py +167 -0
- autogen/agentchat/contrib/graph_rag/falkor_graph_rag_capability.py +103 -0
- autogen/agentchat/contrib/graph_rag/graph_query_engine.py +53 -0
- autogen/agentchat/contrib/graph_rag/graph_rag_capability.py +63 -0
- autogen/agentchat/contrib/graph_rag/neo4j_graph_query_engine.py +263 -0
- autogen/agentchat/contrib/graph_rag/neo4j_graph_rag_capability.py +83 -0
- autogen/agentchat/contrib/graph_rag/neo4j_native_graph_query_engine.py +210 -0
- autogen/agentchat/contrib/graph_rag/neo4j_native_graph_rag_capability.py +93 -0
- autogen/agentchat/contrib/img_utils.py +397 -0
- autogen/agentchat/contrib/llamaindex_conversable_agent.py +117 -0
- autogen/agentchat/contrib/llava_agent.py +189 -0
- autogen/agentchat/contrib/math_user_proxy_agent.py +464 -0
- autogen/agentchat/contrib/multimodal_conversable_agent.py +125 -0
- autogen/agentchat/contrib/qdrant_retrieve_user_proxy_agent.py +325 -0
- autogen/agentchat/contrib/rag/__init__.py +10 -0
- autogen/agentchat/contrib/rag/chromadb_query_engine.py +268 -0
- autogen/agentchat/contrib/rag/llamaindex_query_engine.py +195 -0
- autogen/agentchat/contrib/rag/mongodb_query_engine.py +319 -0
- autogen/agentchat/contrib/rag/query_engine.py +76 -0
- autogen/agentchat/contrib/retrieve_assistant_agent.py +59 -0
- autogen/agentchat/contrib/retrieve_user_proxy_agent.py +704 -0
- autogen/agentchat/contrib/society_of_mind_agent.py +200 -0
- autogen/agentchat/contrib/swarm_agent.py +1404 -0
- autogen/agentchat/contrib/text_analyzer_agent.py +79 -0
- autogen/agentchat/contrib/vectordb/__init__.py +5 -0
- autogen/agentchat/contrib/vectordb/base.py +224 -0
- autogen/agentchat/contrib/vectordb/chromadb.py +316 -0
- autogen/agentchat/contrib/vectordb/couchbase.py +405 -0
- autogen/agentchat/contrib/vectordb/mongodb.py +551 -0
- autogen/agentchat/contrib/vectordb/pgvectordb.py +927 -0
- autogen/agentchat/contrib/vectordb/qdrant.py +320 -0
- autogen/agentchat/contrib/vectordb/utils.py +126 -0
- autogen/agentchat/contrib/web_surfer.py +304 -0
- autogen/agentchat/conversable_agent.py +4307 -0
- autogen/agentchat/group/__init__.py +67 -0
- autogen/agentchat/group/available_condition.py +91 -0
- autogen/agentchat/group/context_condition.py +77 -0
- autogen/agentchat/group/context_expression.py +238 -0
- autogen/agentchat/group/context_str.py +39 -0
- autogen/agentchat/group/context_variables.py +182 -0
- autogen/agentchat/group/events/transition_events.py +111 -0
- autogen/agentchat/group/group_tool_executor.py +324 -0
- autogen/agentchat/group/group_utils.py +659 -0
- autogen/agentchat/group/guardrails.py +179 -0
- autogen/agentchat/group/handoffs.py +303 -0
- autogen/agentchat/group/llm_condition.py +93 -0
- autogen/agentchat/group/multi_agent_chat.py +291 -0
- autogen/agentchat/group/on_condition.py +55 -0
- autogen/agentchat/group/on_context_condition.py +51 -0
- autogen/agentchat/group/patterns/__init__.py +18 -0
- autogen/agentchat/group/patterns/auto.py +160 -0
- autogen/agentchat/group/patterns/manual.py +177 -0
- autogen/agentchat/group/patterns/pattern.py +295 -0
- autogen/agentchat/group/patterns/random.py +106 -0
- autogen/agentchat/group/patterns/round_robin.py +117 -0
- autogen/agentchat/group/reply_result.py +24 -0
- autogen/agentchat/group/safeguards/__init__.py +21 -0
- autogen/agentchat/group/safeguards/api.py +241 -0
- autogen/agentchat/group/safeguards/enforcer.py +1158 -0
- autogen/agentchat/group/safeguards/events.py +140 -0
- autogen/agentchat/group/safeguards/validator.py +435 -0
- autogen/agentchat/group/speaker_selection_result.py +41 -0
- autogen/agentchat/group/targets/__init__.py +4 -0
- autogen/agentchat/group/targets/function_target.py +245 -0
- autogen/agentchat/group/targets/group_chat_target.py +133 -0
- autogen/agentchat/group/targets/group_manager_target.py +151 -0
- autogen/agentchat/group/targets/transition_target.py +424 -0
- autogen/agentchat/group/targets/transition_utils.py +6 -0
- autogen/agentchat/groupchat.py +1832 -0
- autogen/agentchat/realtime/__init__.py +3 -0
- autogen/agentchat/realtime/experimental/__init__.py +20 -0
- autogen/agentchat/realtime/experimental/audio_adapters/__init__.py +8 -0
- autogen/agentchat/realtime/experimental/audio_adapters/twilio_audio_adapter.py +148 -0
- autogen/agentchat/realtime/experimental/audio_adapters/websocket_audio_adapter.py +139 -0
- autogen/agentchat/realtime/experimental/audio_observer.py +42 -0
- autogen/agentchat/realtime/experimental/clients/__init__.py +15 -0
- autogen/agentchat/realtime/experimental/clients/gemini/__init__.py +7 -0
- autogen/agentchat/realtime/experimental/clients/gemini/client.py +274 -0
- autogen/agentchat/realtime/experimental/clients/oai/__init__.py +8 -0
- autogen/agentchat/realtime/experimental/clients/oai/base_client.py +220 -0
- autogen/agentchat/realtime/experimental/clients/oai/rtc_client.py +243 -0
- autogen/agentchat/realtime/experimental/clients/oai/utils.py +48 -0
- autogen/agentchat/realtime/experimental/clients/realtime_client.py +191 -0
- autogen/agentchat/realtime/experimental/function_observer.py +84 -0
- autogen/agentchat/realtime/experimental/realtime_agent.py +158 -0
- autogen/agentchat/realtime/experimental/realtime_events.py +42 -0
- autogen/agentchat/realtime/experimental/realtime_observer.py +100 -0
- autogen/agentchat/realtime/experimental/realtime_swarm.py +533 -0
- autogen/agentchat/realtime/experimental/websockets.py +21 -0
- autogen/agentchat/realtime_agent/__init__.py +21 -0
- autogen/agentchat/user_proxy_agent.py +114 -0
- autogen/agentchat/utils.py +206 -0
- autogen/agents/__init__.py +3 -0
- autogen/agents/contrib/__init__.py +10 -0
- autogen/agents/contrib/time/__init__.py +8 -0
- autogen/agents/contrib/time/time_reply_agent.py +74 -0
- autogen/agents/contrib/time/time_tool_agent.py +52 -0
- autogen/agents/experimental/__init__.py +27 -0
- autogen/agents/experimental/deep_research/__init__.py +7 -0
- autogen/agents/experimental/deep_research/deep_research.py +52 -0
- autogen/agents/experimental/discord/__init__.py +7 -0
- autogen/agents/experimental/discord/discord.py +66 -0
- autogen/agents/experimental/document_agent/__init__.py +19 -0
- autogen/agents/experimental/document_agent/chroma_query_engine.py +301 -0
- autogen/agents/experimental/document_agent/docling_doc_ingest_agent.py +113 -0
- autogen/agents/experimental/document_agent/document_agent.py +643 -0
- autogen/agents/experimental/document_agent/document_conditions.py +50 -0
- autogen/agents/experimental/document_agent/document_utils.py +376 -0
- autogen/agents/experimental/document_agent/inmemory_query_engine.py +214 -0
- autogen/agents/experimental/document_agent/parser_utils.py +134 -0
- autogen/agents/experimental/document_agent/url_utils.py +417 -0
- autogen/agents/experimental/reasoning/__init__.py +7 -0
- autogen/agents/experimental/reasoning/reasoning_agent.py +1178 -0
- autogen/agents/experimental/slack/__init__.py +7 -0
- autogen/agents/experimental/slack/slack.py +73 -0
- autogen/agents/experimental/telegram/__init__.py +7 -0
- autogen/agents/experimental/telegram/telegram.py +76 -0
- autogen/agents/experimental/websurfer/__init__.py +7 -0
- autogen/agents/experimental/websurfer/websurfer.py +70 -0
- autogen/agents/experimental/wikipedia/__init__.py +7 -0
- autogen/agents/experimental/wikipedia/wikipedia.py +88 -0
- autogen/browser_utils.py +309 -0
- autogen/cache/__init__.py +10 -0
- autogen/cache/abstract_cache_base.py +71 -0
- autogen/cache/cache.py +203 -0
- autogen/cache/cache_factory.py +88 -0
- autogen/cache/cosmos_db_cache.py +144 -0
- autogen/cache/disk_cache.py +97 -0
- autogen/cache/in_memory_cache.py +54 -0
- autogen/cache/redis_cache.py +119 -0
- autogen/code_utils.py +598 -0
- autogen/coding/__init__.py +30 -0
- autogen/coding/base.py +120 -0
- autogen/coding/docker_commandline_code_executor.py +283 -0
- autogen/coding/factory.py +56 -0
- autogen/coding/func_with_reqs.py +203 -0
- autogen/coding/jupyter/__init__.py +23 -0
- autogen/coding/jupyter/base.py +36 -0
- autogen/coding/jupyter/docker_jupyter_server.py +160 -0
- autogen/coding/jupyter/embedded_ipython_code_executor.py +182 -0
- autogen/coding/jupyter/import_utils.py +82 -0
- autogen/coding/jupyter/jupyter_client.py +224 -0
- autogen/coding/jupyter/jupyter_code_executor.py +154 -0
- autogen/coding/jupyter/local_jupyter_server.py +164 -0
- autogen/coding/local_commandline_code_executor.py +341 -0
- autogen/coding/markdown_code_extractor.py +44 -0
- autogen/coding/utils.py +55 -0
- autogen/coding/yepcode_code_executor.py +197 -0
- autogen/doc_utils.py +35 -0
- autogen/environments/__init__.py +10 -0
- autogen/environments/docker_python_environment.py +365 -0
- autogen/environments/python_environment.py +125 -0
- autogen/environments/system_python_environment.py +85 -0
- autogen/environments/venv_python_environment.py +220 -0
- autogen/environments/working_directory.py +74 -0
- autogen/events/__init__.py +7 -0
- autogen/events/agent_events.py +1016 -0
- autogen/events/base_event.py +100 -0
- autogen/events/client_events.py +168 -0
- autogen/events/helpers.py +44 -0
- autogen/events/print_event.py +45 -0
- autogen/exception_utils.py +73 -0
- autogen/extensions/__init__.py +5 -0
- autogen/fast_depends/__init__.py +16 -0
- autogen/fast_depends/_compat.py +75 -0
- autogen/fast_depends/core/__init__.py +14 -0
- autogen/fast_depends/core/build.py +206 -0
- autogen/fast_depends/core/model.py +527 -0
- autogen/fast_depends/dependencies/__init__.py +15 -0
- autogen/fast_depends/dependencies/model.py +30 -0
- autogen/fast_depends/dependencies/provider.py +40 -0
- autogen/fast_depends/library/__init__.py +10 -0
- autogen/fast_depends/library/model.py +46 -0
- autogen/fast_depends/py.typed +6 -0
- autogen/fast_depends/schema.py +66 -0
- autogen/fast_depends/use.py +272 -0
- autogen/fast_depends/utils.py +177 -0
- autogen/formatting_utils.py +83 -0
- autogen/function_utils.py +13 -0
- autogen/graph_utils.py +173 -0
- autogen/import_utils.py +539 -0
- autogen/interop/__init__.py +22 -0
- autogen/interop/crewai/__init__.py +7 -0
- autogen/interop/crewai/crewai.py +88 -0
- autogen/interop/interoperability.py +71 -0
- autogen/interop/interoperable.py +46 -0
- autogen/interop/langchain/__init__.py +8 -0
- autogen/interop/langchain/langchain_chat_model_factory.py +156 -0
- autogen/interop/langchain/langchain_tool.py +78 -0
- autogen/interop/litellm/__init__.py +7 -0
- autogen/interop/litellm/litellm_config_factory.py +178 -0
- autogen/interop/pydantic_ai/__init__.py +7 -0
- autogen/interop/pydantic_ai/pydantic_ai.py +172 -0
- autogen/interop/registry.py +70 -0
- autogen/io/__init__.py +15 -0
- autogen/io/base.py +151 -0
- autogen/io/console.py +56 -0
- autogen/io/processors/__init__.py +12 -0
- autogen/io/processors/base.py +21 -0
- autogen/io/processors/console_event_processor.py +61 -0
- autogen/io/run_response.py +294 -0
- autogen/io/thread_io_stream.py +63 -0
- autogen/io/websockets.py +214 -0
- autogen/json_utils.py +42 -0
- autogen/llm_clients/MIGRATION_TO_V2.md +782 -0
- autogen/llm_clients/__init__.py +77 -0
- autogen/llm_clients/client_v2.py +122 -0
- autogen/llm_clients/models/__init__.py +55 -0
- autogen/llm_clients/models/content_blocks.py +389 -0
- autogen/llm_clients/models/unified_message.py +145 -0
- autogen/llm_clients/models/unified_response.py +83 -0
- autogen/llm_clients/openai_completions_client.py +444 -0
- autogen/llm_config/__init__.py +11 -0
- autogen/llm_config/client.py +59 -0
- autogen/llm_config/config.py +461 -0
- autogen/llm_config/entry.py +169 -0
- autogen/llm_config/types.py +37 -0
- autogen/llm_config/utils.py +223 -0
- autogen/logger/__init__.py +11 -0
- autogen/logger/base_logger.py +129 -0
- autogen/logger/file_logger.py +262 -0
- autogen/logger/logger_factory.py +42 -0
- autogen/logger/logger_utils.py +57 -0
- autogen/logger/sqlite_logger.py +524 -0
- autogen/math_utils.py +338 -0
- autogen/mcp/__init__.py +7 -0
- autogen/mcp/__main__.py +78 -0
- autogen/mcp/helpers.py +45 -0
- autogen/mcp/mcp_client.py +349 -0
- autogen/mcp/mcp_proxy/__init__.py +19 -0
- autogen/mcp/mcp_proxy/fastapi_code_generator_helpers.py +62 -0
- autogen/mcp/mcp_proxy/mcp_proxy.py +577 -0
- autogen/mcp/mcp_proxy/operation_grouping.py +166 -0
- autogen/mcp/mcp_proxy/operation_renaming.py +110 -0
- autogen/mcp/mcp_proxy/patch_fastapi_code_generator.py +98 -0
- autogen/mcp/mcp_proxy/security.py +399 -0
- autogen/mcp/mcp_proxy/security_schema_visitor.py +37 -0
- autogen/messages/__init__.py +7 -0
- autogen/messages/agent_messages.py +946 -0
- autogen/messages/base_message.py +108 -0
- autogen/messages/client_messages.py +172 -0
- autogen/messages/print_message.py +48 -0
- autogen/oai/__init__.py +61 -0
- autogen/oai/anthropic.py +1516 -0
- autogen/oai/bedrock.py +800 -0
- autogen/oai/cerebras.py +302 -0
- autogen/oai/client.py +1658 -0
- autogen/oai/client_utils.py +196 -0
- autogen/oai/cohere.py +494 -0
- autogen/oai/gemini.py +1045 -0
- autogen/oai/gemini_types.py +156 -0
- autogen/oai/groq.py +319 -0
- autogen/oai/mistral.py +311 -0
- autogen/oai/oai_models/__init__.py +23 -0
- autogen/oai/oai_models/_models.py +16 -0
- autogen/oai/oai_models/chat_completion.py +86 -0
- autogen/oai/oai_models/chat_completion_audio.py +32 -0
- autogen/oai/oai_models/chat_completion_message.py +97 -0
- autogen/oai/oai_models/chat_completion_message_tool_call.py +60 -0
- autogen/oai/oai_models/chat_completion_token_logprob.py +62 -0
- autogen/oai/oai_models/completion_usage.py +59 -0
- autogen/oai/ollama.py +657 -0
- autogen/oai/openai_responses.py +451 -0
- autogen/oai/openai_utils.py +897 -0
- autogen/oai/together.py +387 -0
- autogen/remote/__init__.py +18 -0
- autogen/remote/agent.py +199 -0
- autogen/remote/agent_service.py +197 -0
- autogen/remote/errors.py +17 -0
- autogen/remote/httpx_client_factory.py +131 -0
- autogen/remote/protocol.py +37 -0
- autogen/remote/retry.py +102 -0
- autogen/remote/runtime.py +96 -0
- autogen/retrieve_utils.py +490 -0
- autogen/runtime_logging.py +161 -0
- autogen/testing/__init__.py +12 -0
- autogen/testing/messages.py +45 -0
- autogen/testing/test_agent.py +111 -0
- autogen/token_count_utils.py +280 -0
- autogen/tools/__init__.py +20 -0
- autogen/tools/contrib/__init__.py +9 -0
- autogen/tools/contrib/time/__init__.py +7 -0
- autogen/tools/contrib/time/time.py +40 -0
- autogen/tools/dependency_injection.py +249 -0
- autogen/tools/experimental/__init__.py +54 -0
- autogen/tools/experimental/browser_use/__init__.py +7 -0
- autogen/tools/experimental/browser_use/browser_use.py +154 -0
- autogen/tools/experimental/code_execution/__init__.py +7 -0
- autogen/tools/experimental/code_execution/python_code_execution.py +86 -0
- autogen/tools/experimental/crawl4ai/__init__.py +7 -0
- autogen/tools/experimental/crawl4ai/crawl4ai.py +150 -0
- autogen/tools/experimental/deep_research/__init__.py +7 -0
- autogen/tools/experimental/deep_research/deep_research.py +329 -0
- autogen/tools/experimental/duckduckgo/__init__.py +7 -0
- autogen/tools/experimental/duckduckgo/duckduckgo_search.py +103 -0
- autogen/tools/experimental/firecrawl/__init__.py +7 -0
- autogen/tools/experimental/firecrawl/firecrawl_tool.py +836 -0
- autogen/tools/experimental/google/__init__.py +14 -0
- autogen/tools/experimental/google/authentication/__init__.py +11 -0
- autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
- autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
- autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
- autogen/tools/experimental/google/drive/__init__.py +9 -0
- autogen/tools/experimental/google/drive/drive_functions.py +124 -0
- autogen/tools/experimental/google/drive/toolkit.py +88 -0
- autogen/tools/experimental/google/model.py +17 -0
- autogen/tools/experimental/google/toolkit_protocol.py +19 -0
- autogen/tools/experimental/google_search/__init__.py +8 -0
- autogen/tools/experimental/google_search/google_search.py +93 -0
- autogen/tools/experimental/google_search/youtube_search.py +181 -0
- autogen/tools/experimental/messageplatform/__init__.py +17 -0
- autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/discord/discord.py +284 -0
- autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/slack/slack.py +385 -0
- autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/telegram/telegram.py +271 -0
- autogen/tools/experimental/perplexity/__init__.py +7 -0
- autogen/tools/experimental/perplexity/perplexity_search.py +249 -0
- autogen/tools/experimental/reliable/__init__.py +10 -0
- autogen/tools/experimental/reliable/reliable.py +1311 -0
- autogen/tools/experimental/searxng/__init__.py +7 -0
- autogen/tools/experimental/searxng/searxng_search.py +142 -0
- autogen/tools/experimental/tavily/__init__.py +7 -0
- autogen/tools/experimental/tavily/tavily_search.py +176 -0
- autogen/tools/experimental/web_search_preview/__init__.py +7 -0
- autogen/tools/experimental/web_search_preview/web_search_preview.py +120 -0
- autogen/tools/experimental/wikipedia/__init__.py +7 -0
- autogen/tools/experimental/wikipedia/wikipedia.py +284 -0
- autogen/tools/function_utils.py +412 -0
- autogen/tools/tool.py +188 -0
- autogen/tools/toolkit.py +86 -0
- autogen/types.py +29 -0
- autogen/version.py +7 -0
- templates/client_template/main.jinja2 +72 -0
- templates/config_template/config.jinja2 +7 -0
- templates/main.jinja2 +61 -0
|
@@ -0,0 +1,122 @@
|
|
|
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 collections.abc import Hashable
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from .... import token_count_utils
|
|
11
|
+
from ....cache.abstract_cache_base import AbstractCache
|
|
12
|
+
from ....oai.openai_utils import filter_config
|
|
13
|
+
from ....types import MessageContentType
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def cache_key(content: MessageContentType, *args: Hashable) -> str:
|
|
17
|
+
"""Calculates the cache key for the given message content and any other hashable args.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
content (MessageContentType): The message content to calculate the cache key for.
|
|
21
|
+
*args: Any additional hashable args to include in the cache key.
|
|
22
|
+
"""
|
|
23
|
+
str_keys = [str(key) for key in (content, *args)]
|
|
24
|
+
return "".join(str_keys)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def cache_content_get(cache: AbstractCache | None, key: str) -> tuple[MessageContentType, ...] | None:
|
|
28
|
+
"""Retrieves cached content from the cache.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
cache (None or AbstractCache): The cache to retrieve the content from. If None, the cache is ignored.
|
|
32
|
+
key (str): The key to retrieve the content from.
|
|
33
|
+
"""
|
|
34
|
+
if cache:
|
|
35
|
+
cached_value = cache.get(key)
|
|
36
|
+
if cached_value:
|
|
37
|
+
return cached_value
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def cache_content_set(cache: AbstractCache | None, key: str, content: MessageContentType, *extra_values):
|
|
41
|
+
"""Sets content into the cache.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
cache (None or AbstractCache): The cache to set the content into. If None, the cache is ignored.
|
|
45
|
+
key (str): The key to set the content into.
|
|
46
|
+
content (MessageContentType): The message content to set into the cache.
|
|
47
|
+
*extra_values: Additional values to be passed to the cache.
|
|
48
|
+
"""
|
|
49
|
+
if cache:
|
|
50
|
+
cache_value = (content, *extra_values)
|
|
51
|
+
cache.set(key, cache_value)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def min_tokens_reached(messages: list[dict[str, Any]], min_tokens: int | None) -> bool:
|
|
55
|
+
"""Returns True if the total number of tokens in the messages is greater than or equal to the specified value.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
messages (List[Dict]): A list of messages to check.
|
|
59
|
+
min_tokens (None or int): The minimum number of tokens to check for.
|
|
60
|
+
"""
|
|
61
|
+
if not min_tokens:
|
|
62
|
+
return True
|
|
63
|
+
|
|
64
|
+
messages_tokens = sum(count_text_tokens(msg["content"]) for msg in messages if "content" in msg)
|
|
65
|
+
return messages_tokens >= min_tokens
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def count_text_tokens(content: MessageContentType) -> int:
|
|
69
|
+
"""Calculates the number of text tokens in the given message content.
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
content (MessageContentType): The message content to calculate the number of text tokens for.
|
|
73
|
+
"""
|
|
74
|
+
token_count = 0
|
|
75
|
+
if isinstance(content, str):
|
|
76
|
+
token_count = token_count_utils.count_token(content)
|
|
77
|
+
elif isinstance(content, list):
|
|
78
|
+
for item in content:
|
|
79
|
+
if isinstance(item, str):
|
|
80
|
+
token_count += token_count_utils.count_token(item)
|
|
81
|
+
else:
|
|
82
|
+
token_count += count_text_tokens(item.get("text", ""))
|
|
83
|
+
return token_count
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def is_content_right_type(content: Any) -> bool:
|
|
87
|
+
"""A helper function to check if the passed in content is of the right type."""
|
|
88
|
+
return isinstance(content, (str, list))
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def is_content_text_empty(content: MessageContentType) -> bool:
|
|
92
|
+
"""Checks if the content of the message does not contain any text.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
content (MessageContentType): The message content to check.
|
|
96
|
+
"""
|
|
97
|
+
if isinstance(content, str):
|
|
98
|
+
return content == ""
|
|
99
|
+
elif isinstance(content, list):
|
|
100
|
+
texts = []
|
|
101
|
+
for item in content:
|
|
102
|
+
if isinstance(item, str):
|
|
103
|
+
texts.append(item)
|
|
104
|
+
elif isinstance(item, dict):
|
|
105
|
+
texts.append(item.get("text", ""))
|
|
106
|
+
return not any(texts)
|
|
107
|
+
else:
|
|
108
|
+
return True
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def should_transform_message(message: dict[str, Any], filter_dict: dict[str, Any] | None, exclude: bool) -> bool:
|
|
112
|
+
"""Validates whether the transform should be applied according to the filter dictionary.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
message (Dict[str, Any]): The message to validate.
|
|
116
|
+
filter_dict (None or Dict[str, Any]): The filter dictionary to validate against. If None, the transform is always applied.
|
|
117
|
+
exclude (bool): Whether to exclude messages that match the filter dictionary.
|
|
118
|
+
"""
|
|
119
|
+
if not filter_dict:
|
|
120
|
+
return True
|
|
121
|
+
|
|
122
|
+
return len(filter_config([message], filter_dict, exclude)) > 0
|
|
@@ -0,0 +1,215 @@
|
|
|
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 copy
|
|
8
|
+
from collections.abc import Callable
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from ....code_utils import content_str
|
|
12
|
+
from ....oai.client import OpenAIWrapper
|
|
13
|
+
from ...assistant_agent import ConversableAgent
|
|
14
|
+
from ..img_utils import (
|
|
15
|
+
convert_base64_to_data_uri,
|
|
16
|
+
get_image_data,
|
|
17
|
+
get_pil_image,
|
|
18
|
+
gpt4v_formatter,
|
|
19
|
+
)
|
|
20
|
+
from .agent_capability import AgentCapability
|
|
21
|
+
|
|
22
|
+
DEFAULT_DESCRIPTION_PROMPT = (
|
|
23
|
+
"Write a detailed caption for this image. "
|
|
24
|
+
"Pay special attention to any details that might be useful or relevant "
|
|
25
|
+
"to the ongoing conversation."
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class VisionCapability(AgentCapability):
|
|
30
|
+
"""We can add vision capability to regular ConversableAgent, even if the agent does not have the multimodal capability,
|
|
31
|
+
such as GPT-3.5-turbo agent, Llama, Orca, or Mistral agents. This vision capability will invoke a LMM client to describe
|
|
32
|
+
the image (captioning) before sending the information to the agent's actual client.
|
|
33
|
+
|
|
34
|
+
The vision capability will hook to the ConversableAgent's `process_last_received_message`.
|
|
35
|
+
|
|
36
|
+
Some technical details:
|
|
37
|
+
When the agent (who has the vision capability) received an message, it will:
|
|
38
|
+
1. _process_received_message:
|
|
39
|
+
a. _append_oai_message
|
|
40
|
+
2. generate_reply: if the agent is a MultimodalAgent, it will also use the image tag.
|
|
41
|
+
a. hook process_last_received_message (NOTE: this is where the vision capability will be hooked to.)
|
|
42
|
+
b. hook process_all_messages_before_reply
|
|
43
|
+
3. send:
|
|
44
|
+
a. hook process_message_before_send
|
|
45
|
+
b. _append_oai_message
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
def __init__(
|
|
49
|
+
self,
|
|
50
|
+
lmm_config: dict[str, Any],
|
|
51
|
+
description_prompt: str | None = DEFAULT_DESCRIPTION_PROMPT,
|
|
52
|
+
custom_caption_func: Callable = None,
|
|
53
|
+
) -> None:
|
|
54
|
+
"""Initializes a new instance, setting up the configuration for interacting with
|
|
55
|
+
a Language Multimodal (LMM) client and specifying optional parameters for image
|
|
56
|
+
description and captioning.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
lmm_config (Dict): Configuration for the LMM client, which is used to call
|
|
60
|
+
the LMM service for describing the image. This must be a dictionary containing
|
|
61
|
+
the necessary configuration parameters. If `lmm_config` is False or an empty dictionary,
|
|
62
|
+
it is considered invalid, and initialization will assert.
|
|
63
|
+
description_prompt (Optional[str], optional): The prompt to use for generating
|
|
64
|
+
descriptions of the image. This parameter allows customization of the
|
|
65
|
+
prompt passed to the LMM service. Defaults to `DEFAULT_DESCRIPTION_PROMPT` if not provided.
|
|
66
|
+
custom_caption_func (Callable, optional): A callable that, if provided, will be used
|
|
67
|
+
to generate captions for images. This allows for custom captioning logic outside
|
|
68
|
+
of the standard LMM service interaction.
|
|
69
|
+
The callable should take three parameters as input:
|
|
70
|
+
1. an image URL (or local location)
|
|
71
|
+
2. image_data (a PIL image)
|
|
72
|
+
3. lmm_client (to call remote LMM)
|
|
73
|
+
and then return a description (as string).
|
|
74
|
+
If not provided, captioning will rely on the LMM client configured via `lmm_config`.
|
|
75
|
+
If provided, we will not run the default self._get_image_caption method.
|
|
76
|
+
|
|
77
|
+
Raises:
|
|
78
|
+
AssertionError: If neither a valid `lmm_config` nor a `custom_caption_func` is provided,
|
|
79
|
+
an AssertionError is raised to indicate that the Vision Capability requires
|
|
80
|
+
one of these to be valid for operation.
|
|
81
|
+
"""
|
|
82
|
+
self._lmm_config = lmm_config
|
|
83
|
+
self._description_prompt = description_prompt
|
|
84
|
+
self._parent_agent = None
|
|
85
|
+
|
|
86
|
+
if lmm_config:
|
|
87
|
+
self._lmm_client = OpenAIWrapper(**lmm_config)
|
|
88
|
+
else:
|
|
89
|
+
self._lmm_client = None
|
|
90
|
+
|
|
91
|
+
self._custom_caption_func = custom_caption_func
|
|
92
|
+
assert self._lmm_config or custom_caption_func, (
|
|
93
|
+
"Vision Capability requires a valid lmm_config or custom_caption_func."
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
def add_to_agent(self, agent: ConversableAgent) -> None:
|
|
97
|
+
self._parent_agent = agent
|
|
98
|
+
|
|
99
|
+
# Append extra info to the system message.
|
|
100
|
+
agent.update_system_message(agent.system_message + "\nYou've been given the ability to interpret images.")
|
|
101
|
+
|
|
102
|
+
# Register a hook for processing the last message.
|
|
103
|
+
agent.register_hook(hookable_method="process_last_received_message", hook=self.process_last_received_message)
|
|
104
|
+
|
|
105
|
+
def process_last_received_message(self, content: str | list[dict[str, Any]]) -> str:
|
|
106
|
+
"""Processes the last received message content by normalizing and augmenting it
|
|
107
|
+
with descriptions of any included images. The function supports input content
|
|
108
|
+
as either a string or a list of dictionaries, where each dictionary represents
|
|
109
|
+
a content item (e.g., text, image). If the content contains image URLs, it
|
|
110
|
+
fetches the image data, generates a caption for each image, and inserts the
|
|
111
|
+
caption into the augmented content.
|
|
112
|
+
|
|
113
|
+
The function aims to transform the content into a format compatible with GPT-4V
|
|
114
|
+
multimodal inputs, specifically by formatting strings into PIL-compatible
|
|
115
|
+
images if needed and appending text descriptions for images. This allows for
|
|
116
|
+
a more accessible presentation of the content, especially in contexts where
|
|
117
|
+
images cannot be displayed directly.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
content (Union[str, List[dict[str, Any]]]): The last received message content, which
|
|
121
|
+
can be a plain text string or a list of dictionaries representing
|
|
122
|
+
different types of content items (e.g., text, image_url).
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
str: The augmented message content
|
|
126
|
+
|
|
127
|
+
Raises:
|
|
128
|
+
AssertionError: If an item in the content list is not a dictionary.
|
|
129
|
+
|
|
130
|
+
Examples:
|
|
131
|
+
Assuming `self._get_image_caption(img_data)` returns
|
|
132
|
+
"A beautiful sunset over the mountains" for the image.
|
|
133
|
+
|
|
134
|
+
- Input as String:
|
|
135
|
+
content = "Check out this cool photo!"
|
|
136
|
+
Output: "Check out this cool photo!"
|
|
137
|
+
(Content is a string without an image, remains unchanged.)
|
|
138
|
+
|
|
139
|
+
- Input as String, with image location:
|
|
140
|
+
content = "What's weather in this cool photo: `<img http://example.com/photo.jpg>`"
|
|
141
|
+
Output: "What's weather in this cool photo: `<img http://example.com/photo.jpg>` in case you can not see, the caption of this image is:
|
|
142
|
+
A beautiful sunset over the mountains\n"
|
|
143
|
+
(Caption added after the image)
|
|
144
|
+
|
|
145
|
+
- Input as List with Text Only:
|
|
146
|
+
content = `[{"type": "text", "text": "Here's an interesting fact."}]`
|
|
147
|
+
Output: "Here's an interesting fact."
|
|
148
|
+
(No images in the content, it remains unchanged.)
|
|
149
|
+
|
|
150
|
+
- Input as List with Image URL:
|
|
151
|
+
```python
|
|
152
|
+
content = [
|
|
153
|
+
{"type": "text", "text": "What's weather in this cool photo:"},
|
|
154
|
+
{"type": "image_url", "image_url": {"url": "http://example.com/photo.jpg"}},
|
|
155
|
+
]
|
|
156
|
+
```
|
|
157
|
+
Output: "What's weather in this cool photo: `<img http://example.com/photo.jpg>` in case you can not see, the caption of this image is:
|
|
158
|
+
A beautiful sunset over the mountains\n"
|
|
159
|
+
(Caption added after the image)
|
|
160
|
+
"""
|
|
161
|
+
copy.deepcopy(content)
|
|
162
|
+
# normalize the content into the gpt-4v format for multimodal
|
|
163
|
+
# we want to keep the URL format to keep it concise.
|
|
164
|
+
if isinstance(content, str):
|
|
165
|
+
content = gpt4v_formatter(content, img_format="url")
|
|
166
|
+
|
|
167
|
+
aug_content: str = ""
|
|
168
|
+
for item in content:
|
|
169
|
+
assert isinstance(item, dict)
|
|
170
|
+
if item["type"] == "text":
|
|
171
|
+
aug_content += item["text"]
|
|
172
|
+
elif item["type"] == "image_url":
|
|
173
|
+
img_url = item["image_url"]["url"]
|
|
174
|
+
img_caption = ""
|
|
175
|
+
|
|
176
|
+
if self._custom_caption_func:
|
|
177
|
+
img_caption = self._custom_caption_func(img_url, get_pil_image(img_url), self._lmm_client)
|
|
178
|
+
elif self._lmm_client:
|
|
179
|
+
img_data = get_image_data(img_url)
|
|
180
|
+
img_caption = self._get_image_caption(img_data)
|
|
181
|
+
else:
|
|
182
|
+
img_caption = ""
|
|
183
|
+
|
|
184
|
+
aug_content += f"<img {img_url}> in case you can not see, the caption of this image is: {img_caption}\n"
|
|
185
|
+
else:
|
|
186
|
+
print(f"Warning: the input type should either be `test` or `image_url`. Skip {item['type']} here.")
|
|
187
|
+
|
|
188
|
+
return aug_content
|
|
189
|
+
|
|
190
|
+
def _get_image_caption(self, img_data: str) -> str:
|
|
191
|
+
"""Args:
|
|
192
|
+
img_data (str): base64 encoded image data.
|
|
193
|
+
|
|
194
|
+
Returns:
|
|
195
|
+
str: caption for the given image.
|
|
196
|
+
"""
|
|
197
|
+
response = self._lmm_client.create(
|
|
198
|
+
context=None,
|
|
199
|
+
messages=[
|
|
200
|
+
{
|
|
201
|
+
"role": "user",
|
|
202
|
+
"content": [
|
|
203
|
+
{"type": "text", "text": self._description_prompt},
|
|
204
|
+
{
|
|
205
|
+
"type": "image_url",
|
|
206
|
+
"image_url": {
|
|
207
|
+
"url": convert_base64_to_data_uri(img_data),
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
],
|
|
211
|
+
}
|
|
212
|
+
],
|
|
213
|
+
)
|
|
214
|
+
description = response.choices[0].message.content
|
|
215
|
+
return content_str(description)
|
|
@@ -0,0 +1,9 @@
|
|
|
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 .agent_builder import AgentBuilder
|
|
6
|
+
from .captainagent import CaptainAgent
|
|
7
|
+
from .tool_retriever import ToolBuilder, format_ag2_tool, get_full_tool_description
|
|
8
|
+
|
|
9
|
+
__all__ = ["AgentBuilder", "CaptainAgent", "ToolBuilder", "format_ag2_tool", "get_full_tool_description"]
|