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,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
|
+
#
|
|
5
|
+
# Portions derived from https://github.com/microsoft/autogen are under the MIT License.
|
|
6
|
+
# SPDX-License-Identifier: MIT
|
|
7
|
+
import re
|
|
8
|
+
|
|
9
|
+
from ..code_utils import CODE_BLOCK_PATTERN, UNKNOWN, content_str, infer_lang
|
|
10
|
+
from ..doc_utils import export_module
|
|
11
|
+
from ..types import UserMessageImageContentPart, UserMessageTextContentPart
|
|
12
|
+
from .base import CodeBlock, CodeExtractor
|
|
13
|
+
|
|
14
|
+
__all__ = ("MarkdownCodeExtractor",)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@export_module("autogen.coding")
|
|
18
|
+
class MarkdownCodeExtractor(CodeExtractor):
|
|
19
|
+
"""(Experimental) A class that extracts code blocks from a message using Markdown syntax."""
|
|
20
|
+
|
|
21
|
+
def extract_code_blocks(
|
|
22
|
+
self, message: str | list[UserMessageTextContentPart | UserMessageImageContentPart] | None
|
|
23
|
+
) -> list[CodeBlock]:
|
|
24
|
+
"""(Experimental) Extract code blocks from a message. If no code blocks are found,
|
|
25
|
+
return an empty list.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
message (str): The message to extract code blocks from.
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
List[CodeBlock]: The extracted code blocks or an empty list.
|
|
32
|
+
"""
|
|
33
|
+
text = content_str(message)
|
|
34
|
+
match = re.findall(CODE_BLOCK_PATTERN, text, flags=re.DOTALL)
|
|
35
|
+
if not match:
|
|
36
|
+
return []
|
|
37
|
+
code_blocks = []
|
|
38
|
+
for lang, code in match:
|
|
39
|
+
if lang == "":
|
|
40
|
+
lang = infer_lang(code)
|
|
41
|
+
if lang == UNKNOWN:
|
|
42
|
+
lang = ""
|
|
43
|
+
code_blocks.append(CodeBlock(code=code, language=lang))
|
|
44
|
+
return code_blocks
|
autogen/coding/utils.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
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/ag2ai/ag2 are under the MIT License.
|
|
6
|
+
# SPDX-License-Identifier: MIT
|
|
7
|
+
# Will return the filename relative to the workspace path
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
filename_patterns = [
|
|
12
|
+
re.compile(r"^<!-- (filename:)?(.+?) -->", re.DOTALL),
|
|
13
|
+
re.compile(r"^/\* (filename:)?(.+?) \*/", re.DOTALL),
|
|
14
|
+
re.compile(r"^// (filename:)?(.+?)$", re.DOTALL),
|
|
15
|
+
re.compile(r"^# (filename:)?(.+?)$", re.DOTALL),
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Raises ValueError if the file is not in the workspace
|
|
20
|
+
def _get_file_name_from_content(code: str, workspace_path: Path) -> str | None:
|
|
21
|
+
first_line = code.split("\n")[0].strip()
|
|
22
|
+
# TODO - support other languages
|
|
23
|
+
for pattern in filename_patterns:
|
|
24
|
+
matches = pattern.match(first_line)
|
|
25
|
+
if matches is not None:
|
|
26
|
+
filename = matches.group(2).strip()
|
|
27
|
+
|
|
28
|
+
# Handle relative paths in the filename
|
|
29
|
+
path = Path(filename)
|
|
30
|
+
if not path.is_absolute():
|
|
31
|
+
path = workspace_path / path
|
|
32
|
+
path = path.resolve()
|
|
33
|
+
# Throws an error if the file is not in the workspace
|
|
34
|
+
relative = path.relative_to(workspace_path.resolve())
|
|
35
|
+
return str(relative)
|
|
36
|
+
return None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def silence_pip(code: str, lang: str) -> str:
|
|
40
|
+
"""Apply -qqq flag to pip install commands."""
|
|
41
|
+
if lang == "python":
|
|
42
|
+
regex = r"^! ?pip install"
|
|
43
|
+
elif lang in ["bash", "shell", "sh", "pwsh", "powershell", "ps1"]:
|
|
44
|
+
regex = r"^pip install"
|
|
45
|
+
else:
|
|
46
|
+
return code
|
|
47
|
+
|
|
48
|
+
# Find lines that start with pip install and make sure "-qqq" flag is added.
|
|
49
|
+
lines = code.split("\n")
|
|
50
|
+
for i, line in enumerate(lines):
|
|
51
|
+
# use regex to find lines that start with pip install.
|
|
52
|
+
match = re.search(regex, line)
|
|
53
|
+
if match is not None and "-qqq" not in line:
|
|
54
|
+
lines[i] = line.replace(match.group(0), match.group(0) + " -qqq")
|
|
55
|
+
return "\n".join(lines)
|
|
@@ -0,0 +1,197 @@
|
|
|
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
|
+
"""YepCode code executor implementation."""
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
from collections.abc import Callable
|
|
11
|
+
from typing import ClassVar
|
|
12
|
+
|
|
13
|
+
from pydantic import Field
|
|
14
|
+
|
|
15
|
+
from ..doc_utils import export_module
|
|
16
|
+
from .base import CodeBlock, CodeExecutor, CodeExtractor, CodeResult
|
|
17
|
+
from .markdown_code_extractor import MarkdownCodeExtractor
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
from dotenv import load_dotenv
|
|
21
|
+
|
|
22
|
+
_load_dotenv: Callable[[], bool] | None = load_dotenv
|
|
23
|
+
except ImportError:
|
|
24
|
+
_load_dotenv = None
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
from yepcode_run import YepCodeApiConfig, YepCodeRun
|
|
28
|
+
except ImportError:
|
|
29
|
+
YepCodeRun = None
|
|
30
|
+
YepCodeApiConfig = None
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@export_module("autogen.coding")
|
|
34
|
+
class YepCodeCodeResult(CodeResult):
|
|
35
|
+
"""A code result class for YepCode executor."""
|
|
36
|
+
|
|
37
|
+
execution_id: str | None = Field(default=None, description="The YepCode execution ID for this result.")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@export_module("autogen.coding")
|
|
41
|
+
class YepCodeCodeExecutor(CodeExecutor):
|
|
42
|
+
"""A code executor class that executes code using YepCode's serverless runtime.
|
|
43
|
+
|
|
44
|
+
This executor runs code in YepCode's secure, production-grade sandboxes.
|
|
45
|
+
It supports Python and JavaScript execution with access to any external library with automatic discovery and installation.
|
|
46
|
+
|
|
47
|
+
The executor executes code blocks serially in the order they are received.
|
|
48
|
+
Each code block is executed in a separate YepCode execution environment.
|
|
49
|
+
Currently supports Python and JavaScript languages.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
api_token (Optional[str]): YepCode API token. If None, will try to get from YEPCODE_API_TOKEN environment variable.
|
|
53
|
+
timeout (int): The timeout for code execution in seconds. Default is 60.
|
|
54
|
+
remove_on_done (bool): Whether to remove the execution after completion. Default is False.
|
|
55
|
+
sync_execution (bool): Whether to wait for execution to complete. Default is True.
|
|
56
|
+
|
|
57
|
+
Raises:
|
|
58
|
+
ImportError: If yepcode-run package is not installed.
|
|
59
|
+
ValueError: If YepCode API token is not provided or timeout is invalid.
|
|
60
|
+
RuntimeError: If YepCode runner initialization fails.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
SUPPORTED_LANGUAGES: ClassVar[list[str]] = ["python", "javascript"]
|
|
64
|
+
|
|
65
|
+
def __init__(
|
|
66
|
+
self,
|
|
67
|
+
api_token: str | None = None,
|
|
68
|
+
timeout: int = 60,
|
|
69
|
+
remove_on_done: bool = False,
|
|
70
|
+
sync_execution: bool = True,
|
|
71
|
+
):
|
|
72
|
+
if YepCodeRun is None or YepCodeApiConfig is None:
|
|
73
|
+
raise ImportError(
|
|
74
|
+
"Missing dependencies for YepCodeCodeExecutor. Please install with: pip install ag2[yepcode]"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
if timeout < 1:
|
|
78
|
+
raise ValueError("Timeout must be greater than or equal to 1.")
|
|
79
|
+
|
|
80
|
+
# Load environment variables from .env file if dotenv is available
|
|
81
|
+
if _load_dotenv is not None:
|
|
82
|
+
_load_dotenv()
|
|
83
|
+
|
|
84
|
+
# Get API token from parameter or environment
|
|
85
|
+
self._api_token = api_token or os.getenv("YEPCODE_API_TOKEN")
|
|
86
|
+
if not self._api_token:
|
|
87
|
+
raise ValueError(
|
|
88
|
+
"YepCode API token is required. Provide it via api_token parameter or YEPCODE_API_TOKEN environment variable."
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
self._timeout = timeout
|
|
92
|
+
self._remove_on_done = remove_on_done
|
|
93
|
+
self._sync_execution = sync_execution
|
|
94
|
+
|
|
95
|
+
try:
|
|
96
|
+
config = YepCodeApiConfig(api_token=self._api_token)
|
|
97
|
+
self._runner = YepCodeRun(config)
|
|
98
|
+
except Exception as e:
|
|
99
|
+
raise RuntimeError(f"Failed to initialize YepCode runner: {str(e)}") from e
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def code_extractor(self) -> CodeExtractor:
|
|
103
|
+
"""(Experimental) Export a code extractor that can be used by an agent."""
|
|
104
|
+
return MarkdownCodeExtractor()
|
|
105
|
+
|
|
106
|
+
@property
|
|
107
|
+
def timeout(self) -> int:
|
|
108
|
+
"""The timeout for code execution."""
|
|
109
|
+
return self._timeout
|
|
110
|
+
|
|
111
|
+
def _normalize_language(self, language: str) -> str:
|
|
112
|
+
"""Normalize language name to YepCode format."""
|
|
113
|
+
lang = language.lower()
|
|
114
|
+
if lang in ["js", "javascript"]:
|
|
115
|
+
return "javascript"
|
|
116
|
+
elif lang in ["python", "py"]:
|
|
117
|
+
return "python"
|
|
118
|
+
else:
|
|
119
|
+
return lang
|
|
120
|
+
|
|
121
|
+
def execute_code_blocks(self, code_blocks: list[CodeBlock]) -> YepCodeCodeResult:
|
|
122
|
+
"""Execute the code blocks and return the result.
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
code_blocks (List[CodeBlock]): The code blocks to execute.
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
YepCodeCodeResult: The result of the code execution.
|
|
129
|
+
"""
|
|
130
|
+
if not code_blocks:
|
|
131
|
+
return YepCodeCodeResult(exit_code=0, output="")
|
|
132
|
+
|
|
133
|
+
outputs: list[str] = []
|
|
134
|
+
last_execution_id: str | None = None
|
|
135
|
+
|
|
136
|
+
for code_block in code_blocks:
|
|
137
|
+
lang = self._normalize_language(code_block.language)
|
|
138
|
+
|
|
139
|
+
if lang not in ["python", "javascript"]:
|
|
140
|
+
return YepCodeCodeResult(
|
|
141
|
+
exit_code=1,
|
|
142
|
+
output=f"Unsupported language: {code_block.language}. Supported languages: {', '.join(self.SUPPORTED_LANGUAGES)}",
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
try:
|
|
146
|
+
# Execute code using YepCode
|
|
147
|
+
execution = self._runner.run(
|
|
148
|
+
code_block.code,
|
|
149
|
+
{
|
|
150
|
+
"language": lang,
|
|
151
|
+
"removeOnDone": self._remove_on_done,
|
|
152
|
+
"timeout": self._timeout * 1000, # Convert to milliseconds
|
|
153
|
+
},
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
last_execution_id = execution.id
|
|
157
|
+
|
|
158
|
+
if self._sync_execution:
|
|
159
|
+
# Wait for execution to complete
|
|
160
|
+
execution.wait_for_done()
|
|
161
|
+
|
|
162
|
+
logs_output = ""
|
|
163
|
+
# Get logs
|
|
164
|
+
if execution.logs:
|
|
165
|
+
logs_output = "\n\nExecution logs:\n" + "\n".join([
|
|
166
|
+
f"{log.timestamp} - {log.level}: {log.message}" for log in execution.logs
|
|
167
|
+
])
|
|
168
|
+
|
|
169
|
+
# Check if execution was successful
|
|
170
|
+
if execution.error:
|
|
171
|
+
output = f"Execution failed with error:\n{execution.error}{logs_output}"
|
|
172
|
+
|
|
173
|
+
return YepCodeCodeResult(exit_code=1, output=output, execution_id=execution.id)
|
|
174
|
+
|
|
175
|
+
# Get output
|
|
176
|
+
output = ""
|
|
177
|
+
if execution.return_value:
|
|
178
|
+
output = f"Execution result:\n{execution.return_value}"
|
|
179
|
+
|
|
180
|
+
output += logs_output
|
|
181
|
+
|
|
182
|
+
outputs.append(output)
|
|
183
|
+
else:
|
|
184
|
+
outputs.append(f"Execution started with ID: {execution.id}")
|
|
185
|
+
|
|
186
|
+
except Exception as e:
|
|
187
|
+
return YepCodeCodeResult(
|
|
188
|
+
exit_code=1,
|
|
189
|
+
output=f"Error executing code: {str(e)}",
|
|
190
|
+
execution_id=last_execution_id,
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
return YepCodeCodeResult(exit_code=0, output="\n===\n".join(outputs), execution_id=last_execution_id)
|
|
194
|
+
|
|
195
|
+
def restart(self) -> None:
|
|
196
|
+
"""Restart the code executor."""
|
|
197
|
+
pass
|
autogen/doc_utils.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
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__ = ["export_module"]
|
|
6
|
+
|
|
7
|
+
from collections.abc import Callable
|
|
8
|
+
from typing import TypeVar
|
|
9
|
+
|
|
10
|
+
T = TypeVar("T")
|
|
11
|
+
|
|
12
|
+
# Global dictionary to store export module mappings
|
|
13
|
+
# Key: original symbol name (qualified by module)
|
|
14
|
+
# Value: target module where it should be documented
|
|
15
|
+
_PDOC_MODULE_EXPORT_MAPPINGS: dict[str, str] = {}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def export_module(module: str) -> Callable[[T], T]:
|
|
19
|
+
def decorator(cls: T) -> T:
|
|
20
|
+
original_module = getattr(cls, "__module__", None)
|
|
21
|
+
if original_module:
|
|
22
|
+
fqn = f"{original_module}.{cls.__name__}"
|
|
23
|
+
_PDOC_MODULE_EXPORT_MAPPINGS[fqn] = module
|
|
24
|
+
return cls
|
|
25
|
+
|
|
26
|
+
return decorator
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def get_target_module(obj: object) -> str | None:
|
|
30
|
+
"""Get the target module where an object should be documented."""
|
|
31
|
+
if not hasattr(obj, "__module__"):
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
fqn = f"{obj.__module__}.{obj.__name__}"
|
|
35
|
+
return _PDOC_MODULE_EXPORT_MAPPINGS.get(fqn)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from .docker_python_environment import DockerPythonEnvironment
|
|
6
|
+
from .system_python_environment import SystemPythonEnvironment
|
|
7
|
+
from .venv_python_environment import VenvPythonEnvironment
|
|
8
|
+
from .working_directory import WorkingDirectory
|
|
9
|
+
|
|
10
|
+
__all__ = ["DockerPythonEnvironment", "SystemPythonEnvironment", "VenvPythonEnvironment", "WorkingDirectory"]
|