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,220 @@
|
|
|
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 logging
|
|
6
|
+
import os
|
|
7
|
+
import subprocess
|
|
8
|
+
import sys
|
|
9
|
+
import tempfile
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from anyio import to_thread
|
|
13
|
+
|
|
14
|
+
from .python_environment import PythonEnvironment
|
|
15
|
+
|
|
16
|
+
__all__ = ["VenvPythonEnvironment"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class VenvPythonEnvironment(PythonEnvironment):
|
|
20
|
+
"""A Python environment using a virtual environment (venv)."""
|
|
21
|
+
|
|
22
|
+
def __init__(
|
|
23
|
+
self,
|
|
24
|
+
python_version: str | None = None,
|
|
25
|
+
python_path: str | None = None,
|
|
26
|
+
venv_path: str | None = None,
|
|
27
|
+
):
|
|
28
|
+
"""Initialize a virtual environment for Python execution.
|
|
29
|
+
|
|
30
|
+
If you pass in a venv_path the path will be checked for a valid venv. If the venv doesn't exist it will be created using the python_version or python_path provided.
|
|
31
|
+
|
|
32
|
+
If the python_version or python_path is provided and the venv_path is not, a temporary directory will be created for venv and it will be setup with the provided python version.
|
|
33
|
+
|
|
34
|
+
If python_path is provided, it will take precedence over python_version.
|
|
35
|
+
|
|
36
|
+
The python version will not be installed if it doesn't exist and a RuntimeError will be raised.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
python_version: The Python version to use (e.g., "3.11"), otherwise defaults to the current executing Python version. Ignored if venv_path is provided and has a valid environment already.
|
|
40
|
+
python_path: Optional direct path to a Python executable to use (must include the executable). Takes precedence over python_version if both are provided.
|
|
41
|
+
venv_path: Optional path for the virtual environment, will create it if it doesn't exist. If None, creates a temp directory.
|
|
42
|
+
"""
|
|
43
|
+
self.python_version = python_version
|
|
44
|
+
self.python_path = python_path
|
|
45
|
+
self.venv_path = venv_path
|
|
46
|
+
self.created_venv = False
|
|
47
|
+
self._executable = None
|
|
48
|
+
super().__init__()
|
|
49
|
+
|
|
50
|
+
def _setup_environment(self) -> None:
|
|
51
|
+
"""Set up the virtual environment."""
|
|
52
|
+
# Create a venv directory if not provided
|
|
53
|
+
if self.venv_path is None:
|
|
54
|
+
self.venv_path = tempfile.mkdtemp(prefix="ag2_python_env_")
|
|
55
|
+
self.created_venv = True
|
|
56
|
+
|
|
57
|
+
# Determine the python version, getting it from the venv if it already has one
|
|
58
|
+
base_python = self._get_python_executable_for_version()
|
|
59
|
+
needs_creation = True
|
|
60
|
+
else:
|
|
61
|
+
# If venv_path is provided, check if it's already a valid venv
|
|
62
|
+
if os.name == "nt": # Windows
|
|
63
|
+
venv_python = os.path.join(self.venv_path, "Scripts", "python.exe")
|
|
64
|
+
else: # Unix-like (Mac/Linux)
|
|
65
|
+
venv_python = os.path.join(self.venv_path, "bin", "python")
|
|
66
|
+
|
|
67
|
+
if os.path.exists(venv_python) and os.access(venv_python, os.X_OK):
|
|
68
|
+
# Valid venv already exists, just use it
|
|
69
|
+
self._executable = venv_python
|
|
70
|
+
logging.info(f"Using existing virtual environment at {self.venv_path}")
|
|
71
|
+
needs_creation = False
|
|
72
|
+
else:
|
|
73
|
+
# Path exists but not a valid venv, or doesn't exist
|
|
74
|
+
if not os.path.exists(self.venv_path):
|
|
75
|
+
os.makedirs(self.venv_path, exist_ok=True)
|
|
76
|
+
self.created_venv = True
|
|
77
|
+
base_python = sys.executable
|
|
78
|
+
needs_creation = True
|
|
79
|
+
|
|
80
|
+
# Only create the venv if needed
|
|
81
|
+
if needs_creation:
|
|
82
|
+
logging.info(f"Creating virtual environment at {self.venv_path} using {base_python}")
|
|
83
|
+
|
|
84
|
+
try:
|
|
85
|
+
# Create the virtual environment
|
|
86
|
+
_ = subprocess.run(
|
|
87
|
+
[base_python, "-m", "venv", "--system-site-packages", self.venv_path],
|
|
88
|
+
check=True,
|
|
89
|
+
capture_output=True,
|
|
90
|
+
text=True,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Determine the Python executable path
|
|
94
|
+
if os.name == "nt": # Windows
|
|
95
|
+
self._executable = os.path.join(self.venv_path, "Scripts", "python.exe")
|
|
96
|
+
else: # Unix-like (Mac/Linux)
|
|
97
|
+
self._executable = os.path.join(self.venv_path, "bin", "python")
|
|
98
|
+
|
|
99
|
+
# Verify the executable exists
|
|
100
|
+
if not os.path.exists(self._executable):
|
|
101
|
+
raise RuntimeError(
|
|
102
|
+
f"Virtual environment created but Python executable not found at {self._executable}"
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
except subprocess.CalledProcessError as e:
|
|
106
|
+
raise RuntimeError(f"Failed to create virtual environment: {e.stderr}") from e
|
|
107
|
+
|
|
108
|
+
def _cleanup_environment(self) -> None:
|
|
109
|
+
"""Clean up the virtual environment."""
|
|
110
|
+
# Note: We intentionally don't clean up the venv here to allow
|
|
111
|
+
# tools to continue using it after the context exits.
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
def get_executable(self) -> str:
|
|
115
|
+
"""Get the path to the Python executable in the virtual environment."""
|
|
116
|
+
if not self._executable or not os.path.exists(self._executable):
|
|
117
|
+
raise RuntimeError("Virtual environment Python executable not found")
|
|
118
|
+
return self._executable
|
|
119
|
+
|
|
120
|
+
async def execute_code(self, code: str, script_path: str, timeout: int = 30) -> dict[str, Any]:
|
|
121
|
+
"""Execute code in the virtual environment."""
|
|
122
|
+
try:
|
|
123
|
+
# Get the Python executable
|
|
124
|
+
python_executable = self.get_executable()
|
|
125
|
+
|
|
126
|
+
# Verify the executable exists
|
|
127
|
+
if not os.path.exists(python_executable):
|
|
128
|
+
return {"success": False, "error": f"Python executable not found at {python_executable}"}
|
|
129
|
+
|
|
130
|
+
# Ensure the directory for the script exists
|
|
131
|
+
script_dir = os.path.dirname(script_path)
|
|
132
|
+
if script_dir:
|
|
133
|
+
os.makedirs(script_dir, exist_ok=True)
|
|
134
|
+
|
|
135
|
+
# Write the code to the script file using anyio.to_thread.run_sync (from base class)
|
|
136
|
+
await to_thread.run_sync(self._write_to_file, script_path, code)
|
|
137
|
+
|
|
138
|
+
logging.info(f"Wrote code to {script_path}")
|
|
139
|
+
|
|
140
|
+
try:
|
|
141
|
+
# Execute directly with subprocess using anyio.to_thread.run_sync for better reliability
|
|
142
|
+
result = await to_thread.run_sync(self._run_subprocess, [python_executable, script_path], timeout)
|
|
143
|
+
|
|
144
|
+
# Main execution result
|
|
145
|
+
return {
|
|
146
|
+
"success": result.returncode == 0,
|
|
147
|
+
"stdout": result.stdout,
|
|
148
|
+
"stderr": result.stderr,
|
|
149
|
+
"returncode": result.returncode,
|
|
150
|
+
}
|
|
151
|
+
except subprocess.TimeoutExpired:
|
|
152
|
+
return {"success": False, "error": f"Execution timed out after {timeout} seconds"}
|
|
153
|
+
|
|
154
|
+
except Exception as e:
|
|
155
|
+
return {"success": False, "error": f"Execution error: {str(e)}"}
|
|
156
|
+
|
|
157
|
+
def _get_python_executable_for_version(self) -> str:
|
|
158
|
+
"""Get the Python executable for the specified version and verify it can create a venv."""
|
|
159
|
+
# If a specific path is provided, use it directly
|
|
160
|
+
if self.python_path:
|
|
161
|
+
if not os.path.exists(self.python_path) or not os.access(self.python_path, os.X_OK):
|
|
162
|
+
raise RuntimeError(f"Python executable not found at {self.python_path}")
|
|
163
|
+
return self.python_path
|
|
164
|
+
|
|
165
|
+
# If no specific version is requested, use the current Python
|
|
166
|
+
if not self.python_version:
|
|
167
|
+
return sys.executable
|
|
168
|
+
|
|
169
|
+
potential_executables = []
|
|
170
|
+
|
|
171
|
+
# Try to find a specific Python version using pyenv if available
|
|
172
|
+
try:
|
|
173
|
+
pyenv_result = subprocess.run(
|
|
174
|
+
["pyenv", "which", f"python{self.python_version}"],
|
|
175
|
+
check=True,
|
|
176
|
+
capture_output=True,
|
|
177
|
+
text=True,
|
|
178
|
+
)
|
|
179
|
+
potential_executables.append(pyenv_result.stdout.strip())
|
|
180
|
+
except (subprocess.SubprocessError, FileNotFoundError):
|
|
181
|
+
pass
|
|
182
|
+
|
|
183
|
+
# Try common system paths based on platform
|
|
184
|
+
if os.name == "nt": # Windows
|
|
185
|
+
potential_executables.extend([
|
|
186
|
+
f"C:\\Python{self.python_version.replace('.', '')}\\python.exe",
|
|
187
|
+
f"C:\\Program Files\\Python{self.python_version.replace('.', '')}\\python.exe",
|
|
188
|
+
f"C:\\Program Files (x86)\\Python{self.python_version.replace('.', '')}\\python.exe",
|
|
189
|
+
])
|
|
190
|
+
else: # Unix-like (Mac and Linux)
|
|
191
|
+
# Add more paths that might exist on macOS
|
|
192
|
+
potential_executables.extend([
|
|
193
|
+
f"/usr/bin/python{self.python_version}",
|
|
194
|
+
f"/usr/local/bin/python{self.python_version}",
|
|
195
|
+
f"/opt/homebrew/bin/python{self.python_version}", # Homebrew on Apple Silicon
|
|
196
|
+
f"/opt/python/bin/python{self.python_version}",
|
|
197
|
+
])
|
|
198
|
+
|
|
199
|
+
# Try each potential path and verify it can create a venv
|
|
200
|
+
for path in potential_executables:
|
|
201
|
+
if os.path.exists(path) and os.access(path, os.X_OK):
|
|
202
|
+
# Verify this Python can create a venv
|
|
203
|
+
try:
|
|
204
|
+
test_result = subprocess.run(
|
|
205
|
+
[path, "-m", "venv", "--help"],
|
|
206
|
+
check=False, # Don't raise exception
|
|
207
|
+
capture_output=True,
|
|
208
|
+
text=True,
|
|
209
|
+
timeout=5, # Add timeout for safety
|
|
210
|
+
)
|
|
211
|
+
if test_result.returncode == 0:
|
|
212
|
+
# Successfully found a valid Python executable
|
|
213
|
+
return path
|
|
214
|
+
except (subprocess.SubprocessError, FileNotFoundError):
|
|
215
|
+
continue
|
|
216
|
+
|
|
217
|
+
# If we couldn't find the specified version, raise an exception
|
|
218
|
+
raise RuntimeError(
|
|
219
|
+
f"Python {self.python_version} not found or cannot create virtual environments. Provide a python_path to use a specific Python executable."
|
|
220
|
+
)
|
|
@@ -0,0 +1,74 @@
|
|
|
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 contextlib
|
|
6
|
+
import os
|
|
7
|
+
import shutil
|
|
8
|
+
import tempfile
|
|
9
|
+
from contextvars import ContextVar
|
|
10
|
+
from typing import Optional
|
|
11
|
+
|
|
12
|
+
__all__ = ["WorkingDirectory"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class WorkingDirectory:
|
|
16
|
+
"""Context manager for changing the current working directory."""
|
|
17
|
+
|
|
18
|
+
_current_working_directory: ContextVar["WorkingDirectory"] = ContextVar("_current_working_directory")
|
|
19
|
+
|
|
20
|
+
def __init__(self, path: str):
|
|
21
|
+
"""Initialize with a directory path.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
path: The directory path to change to.
|
|
25
|
+
"""
|
|
26
|
+
self.path = path
|
|
27
|
+
self.original_path = None
|
|
28
|
+
self.created_tmp = False
|
|
29
|
+
self._token = None
|
|
30
|
+
|
|
31
|
+
def __enter__(self):
|
|
32
|
+
"""Change to the specified directory and return self."""
|
|
33
|
+
self.original_path = os.getcwd()
|
|
34
|
+
if self.path:
|
|
35
|
+
os.makedirs(self.path, exist_ok=True)
|
|
36
|
+
os.chdir(self.path)
|
|
37
|
+
|
|
38
|
+
# Set this as the current working directory in the context
|
|
39
|
+
self._token = WorkingDirectory._current_working_directory.set(self)
|
|
40
|
+
|
|
41
|
+
return self
|
|
42
|
+
|
|
43
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
44
|
+
"""Change back to the original directory and clean up if necessary."""
|
|
45
|
+
# Reset the context variable if this was the active working directory
|
|
46
|
+
if self._token is not None:
|
|
47
|
+
WorkingDirectory._current_working_directory.reset(self._token)
|
|
48
|
+
self._token = None
|
|
49
|
+
|
|
50
|
+
if self.original_path:
|
|
51
|
+
os.chdir(self.original_path)
|
|
52
|
+
if self.created_tmp and self.path and os.path.exists(self.path):
|
|
53
|
+
with contextlib.suppress(Exception):
|
|
54
|
+
shutil.rmtree(self.path)
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
def create_tmp(cls):
|
|
58
|
+
"""Create a temporary directory and return a WorkingDirectory instance for it."""
|
|
59
|
+
tmp_dir = tempfile.mkdtemp(prefix="ag2_work_dir_")
|
|
60
|
+
instance = cls(tmp_dir)
|
|
61
|
+
instance.created_tmp = True
|
|
62
|
+
return instance
|
|
63
|
+
|
|
64
|
+
@classmethod
|
|
65
|
+
def get_current_working_directory(
|
|
66
|
+
cls, working_directory: Optional["WorkingDirectory"] = None
|
|
67
|
+
) -> Optional["WorkingDirectory"]:
|
|
68
|
+
"""Get the current working directory or the specified one if provided."""
|
|
69
|
+
if working_directory is not None:
|
|
70
|
+
return working_directory
|
|
71
|
+
try:
|
|
72
|
+
return cls._current_working_directory.get()
|
|
73
|
+
except LookupError:
|
|
74
|
+
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
|
+
from .base_event import BaseEvent, get_annotated_type_for_event_classes, wrap_event
|
|
5
|
+
from .helpers import deprecated_by
|
|
6
|
+
|
|
7
|
+
__all__ = ["BaseEvent", "deprecated_by", "get_annotated_type_for_event_classes", "wrap_event"]
|