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,206 @@
|
|
|
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
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from ..doc_utils import export_module
|
|
11
|
+
from .agent import Agent
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def consolidate_chat_info(
|
|
15
|
+
chat_info: dict[str, Any] | list[dict[str, Any]], uniform_sender: Agent | None = None
|
|
16
|
+
) -> None:
|
|
17
|
+
if isinstance(chat_info, dict):
|
|
18
|
+
chat_info = [chat_info]
|
|
19
|
+
for c in chat_info:
|
|
20
|
+
if uniform_sender is None:
|
|
21
|
+
assert "sender" in c, "sender must be provided."
|
|
22
|
+
sender = c["sender"]
|
|
23
|
+
else:
|
|
24
|
+
sender = uniform_sender
|
|
25
|
+
assert "recipient" in c, "recipient must be provided."
|
|
26
|
+
summary_method = c.get("summary_method")
|
|
27
|
+
assert (
|
|
28
|
+
summary_method is None or callable(summary_method) or summary_method in ("last_msg", "reflection_with_llm")
|
|
29
|
+
), "summary_method must be a string chosen from 'reflection_with_llm' or 'last_msg' or a callable, or None."
|
|
30
|
+
if summary_method == "reflection_with_llm":
|
|
31
|
+
assert sender.client is not None or c["recipient"].client is not None, (
|
|
32
|
+
"llm client must be set in either the recipient or sender when summary_method is reflection_with_llm."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@export_module("autogen")
|
|
37
|
+
def gather_usage_summary(agents: list[Agent]) -> dict[str, dict[str, Any]]:
|
|
38
|
+
r"""Gather usage summary from all agents.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
agents: (list): List of agents.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
dictionary: A dictionary containing two keys:
|
|
45
|
+
- "usage_including_cached_inference": Cost information on the total usage, including the tokens in cached inference.
|
|
46
|
+
- "usage_excluding_cached_inference": Cost information on the usage of tokens, excluding the tokens in cache. No larger than "usage_including_cached_inference".
|
|
47
|
+
|
|
48
|
+
Example:
|
|
49
|
+
```python
|
|
50
|
+
{
|
|
51
|
+
"usage_including_cached_inference": {
|
|
52
|
+
"total_cost": 0.0006090000000000001,
|
|
53
|
+
"gpt-35-turbo": {
|
|
54
|
+
"cost": 0.0006090000000000001,
|
|
55
|
+
"prompt_tokens": 242,
|
|
56
|
+
"completion_tokens": 123,
|
|
57
|
+
"total_tokens": 365,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
"usage_excluding_cached_inference": {
|
|
61
|
+
"total_cost": 0.0006090000000000001,
|
|
62
|
+
"gpt-35-turbo": {
|
|
63
|
+
"cost": 0.0006090000000000001,
|
|
64
|
+
"prompt_tokens": 242,
|
|
65
|
+
"completion_tokens": 123,
|
|
66
|
+
"total_tokens": 365,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Note:
|
|
73
|
+
If none of the agents incurred any cost (not having a client), then the usage_including_cached_inference and usage_excluding_cached_inference will be `{'total_cost': 0}`.
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
def aggregate_summary(usage_summary: dict[str, Any], agent_summary: dict[str, Any]) -> None:
|
|
77
|
+
if agent_summary is None:
|
|
78
|
+
return
|
|
79
|
+
usage_summary["total_cost"] += agent_summary.get("total_cost", 0)
|
|
80
|
+
for model, data in agent_summary.items():
|
|
81
|
+
if model != "total_cost":
|
|
82
|
+
if model not in usage_summary:
|
|
83
|
+
usage_summary[model] = data.copy()
|
|
84
|
+
else:
|
|
85
|
+
usage_summary[model]["cost"] += data.get("cost", 0)
|
|
86
|
+
usage_summary[model]["prompt_tokens"] += data.get("prompt_tokens", 0)
|
|
87
|
+
usage_summary[model]["completion_tokens"] += data.get("completion_tokens", 0)
|
|
88
|
+
usage_summary[model]["total_tokens"] += data.get("total_tokens", 0)
|
|
89
|
+
|
|
90
|
+
usage_including_cached_inference = {"total_cost": 0}
|
|
91
|
+
usage_excluding_cached_inference = {"total_cost": 0}
|
|
92
|
+
|
|
93
|
+
for agent in agents:
|
|
94
|
+
if getattr(agent, "client", None):
|
|
95
|
+
aggregate_summary(usage_including_cached_inference, agent.client.total_usage_summary) # type: ignore[attr-defined]
|
|
96
|
+
aggregate_summary(usage_excluding_cached_inference, agent.client.actual_usage_summary) # type: ignore[attr-defined]
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
"usage_including_cached_inference": usage_including_cached_inference,
|
|
100
|
+
"usage_excluding_cached_inference": usage_excluding_cached_inference,
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def parse_tags_from_content(tag: str, content: str | list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
105
|
+
"""Parses HTML style tags from message contents.
|
|
106
|
+
|
|
107
|
+
The parsing is done by looking for patterns in the text that match the format of HTML tags. The tag to be parsed is
|
|
108
|
+
specified as an argument to the function. The function looks for this tag in the text and extracts its content. The
|
|
109
|
+
content of a tag is everything that is inside the tag, between the opening and closing angle brackets. The content
|
|
110
|
+
can be a single string or a set of attribute-value pairs.
|
|
111
|
+
|
|
112
|
+
Examples:
|
|
113
|
+
`<img http://example.com/image.png> -> [{"tag": "img", "attr": {"src": "http://example.com/image.png"}, "match": re.Match}]`
|
|
114
|
+
```<audio text="Hello I'm a robot" prompt="whisper"> ->
|
|
115
|
+
[{"tag": "audio", "attr": {"text": "Hello I'm a robot", "prompt": "whisper"}, "match": re.Match}]```
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
tag (str): The HTML style tag to be parsed.
|
|
119
|
+
content (Union[str, list[dict[str, Any]]]): The message content to parse. Can be a string or a list of content
|
|
120
|
+
items.
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
list[dict[str, str]]: A list of dictionaries, where each dictionary represents a parsed tag. Each dictionary
|
|
124
|
+
contains three key-value pairs: 'type' which is the tag, 'attr' which is a dictionary of the parsed attributes,
|
|
125
|
+
and 'match' which is a regular expression match object.
|
|
126
|
+
|
|
127
|
+
Raises:
|
|
128
|
+
ValueError: If the content is not a string or a list.
|
|
129
|
+
"""
|
|
130
|
+
results = []
|
|
131
|
+
if isinstance(content, str):
|
|
132
|
+
results.extend(_parse_tags_from_text(tag, content))
|
|
133
|
+
# Handles case for multimodal messages.
|
|
134
|
+
elif isinstance(content, list):
|
|
135
|
+
for item in content:
|
|
136
|
+
if item.get("type") == "text":
|
|
137
|
+
results.extend(_parse_tags_from_text(tag, item["text"]))
|
|
138
|
+
else:
|
|
139
|
+
raise ValueError(f"content must be str or list, but got {type(content)}")
|
|
140
|
+
|
|
141
|
+
return results
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _parse_tags_from_text(tag: str, text: str) -> list[dict[str, Any]]:
|
|
145
|
+
pattern = re.compile(f"<{tag} (.*?)>")
|
|
146
|
+
|
|
147
|
+
results = []
|
|
148
|
+
for match in re.finditer(pattern, text):
|
|
149
|
+
tag_attr = match.group(1).strip()
|
|
150
|
+
attr = _parse_attributes_from_tags(tag_attr)
|
|
151
|
+
|
|
152
|
+
results.append({"tag": tag, "attr": attr, "match": match})
|
|
153
|
+
return results
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def _parse_attributes_from_tags(tag_content: str) -> dict[str, str]:
|
|
157
|
+
pattern = r"([^ ]+)"
|
|
158
|
+
attrs = re.findall(pattern, tag_content)
|
|
159
|
+
reconstructed_attrs = _reconstruct_attributes(attrs)
|
|
160
|
+
|
|
161
|
+
def _append_src_value(content: dict[str, str], value: Any) -> None:
|
|
162
|
+
if "src" in content:
|
|
163
|
+
content["src"] += f" {value}"
|
|
164
|
+
else:
|
|
165
|
+
content["src"] = value
|
|
166
|
+
|
|
167
|
+
content: dict[str, str] = {}
|
|
168
|
+
for attr in reconstructed_attrs:
|
|
169
|
+
if "=" not in attr:
|
|
170
|
+
_append_src_value(content, attr)
|
|
171
|
+
continue
|
|
172
|
+
|
|
173
|
+
key, value = attr.split("=", 1)
|
|
174
|
+
if value.startswith("'") or value.startswith('"'):
|
|
175
|
+
content[key] = value[1:-1] # remove quotes
|
|
176
|
+
else:
|
|
177
|
+
_append_src_value(content, attr)
|
|
178
|
+
|
|
179
|
+
return content
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def _reconstruct_attributes(attrs: list[str]) -> list[str]:
|
|
183
|
+
"""Reconstructs attributes from a list of strings where some attributes may be split across multiple elements."""
|
|
184
|
+
|
|
185
|
+
def is_attr(attr: str) -> bool:
|
|
186
|
+
if "=" in attr:
|
|
187
|
+
_, value = attr.split("=", 1)
|
|
188
|
+
if value.startswith("'") or value.startswith('"'):
|
|
189
|
+
return True
|
|
190
|
+
return False
|
|
191
|
+
|
|
192
|
+
reconstructed = []
|
|
193
|
+
found_attr = False
|
|
194
|
+
for attr in attrs:
|
|
195
|
+
if is_attr(attr):
|
|
196
|
+
reconstructed.append(attr)
|
|
197
|
+
found_attr = True
|
|
198
|
+
else:
|
|
199
|
+
if found_attr:
|
|
200
|
+
reconstructed[-1] += f" {attr}"
|
|
201
|
+
found_attr = True
|
|
202
|
+
elif reconstructed:
|
|
203
|
+
reconstructed[-1] += f" {attr}"
|
|
204
|
+
else:
|
|
205
|
+
reconstructed.append(attr)
|
|
206
|
+
return reconstructed
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from .time_reply_agent import TimeReplyAgent
|
|
6
|
+
from .time_tool_agent import TimeToolAgent
|
|
7
|
+
|
|
8
|
+
__all__ = ["TimeReplyAgent", "TimeToolAgent"]
|
|
@@ -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
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .... import Agent, ConversableAgent, OpenAIWrapper
|
|
8
|
+
from ....doc_utils import export_module
|
|
9
|
+
|
|
10
|
+
__all__ = ["TimeReplyAgent"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@export_module("autogen.agents.contrib") # API Reference: autogen > agents > contrib > TimeReplyAgent
|
|
14
|
+
class TimeReplyAgent(ConversableAgent):
|
|
15
|
+
"""A simple agent that returns the current time.
|
|
16
|
+
|
|
17
|
+
Use it is as a reference for creating new agents with a reply-based approach (as opposed to tool-based).
|
|
18
|
+
|
|
19
|
+
This agent will return the date and time whenever it needs to reply.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
DEFAULT_SYSTEM_MESSAGE = "You are a calendar agent that just returns the date and time."
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
date_time_format: str = "%Y-%m-%d %H:%M:%S", # This is a parameter that is unique to this agent
|
|
27
|
+
output_prefix: str = "Tick, tock, the current date/time is ",
|
|
28
|
+
**kwargs: Any,
|
|
29
|
+
) -> None:
|
|
30
|
+
"""Initialize the TimeReplyAgent.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
date_time_format: The format in which the date and time should be returned.
|
|
34
|
+
output_prefix: The prefix to add to the output message.
|
|
35
|
+
**kwargs: Additional parameters to pass to the base
|
|
36
|
+
"""
|
|
37
|
+
# Here we handle a ConversableAgent parameter through the kwargs
|
|
38
|
+
# We will pass this through when we run init() the base class
|
|
39
|
+
# Note: For this TimeReplyAgent, the LLM is not used so this won't affect the behavior of this agent
|
|
40
|
+
system_message = kwargs.pop("system_message", self.DEFAULT_SYSTEM_MESSAGE)
|
|
41
|
+
|
|
42
|
+
# Store the date and time format on the agent, prefixed with an underscore to indicate it's a private variable
|
|
43
|
+
self._date_time_format = date_time_format
|
|
44
|
+
|
|
45
|
+
self._output_prefix = output_prefix
|
|
46
|
+
|
|
47
|
+
# Initialise the base class, passing through the system_message parameter
|
|
48
|
+
super().__init__(system_message=system_message, **kwargs)
|
|
49
|
+
|
|
50
|
+
# Our reply function.
|
|
51
|
+
# This one is simple, but yours will be more complex and
|
|
52
|
+
# may even contain another AG2 workflow inside it
|
|
53
|
+
def get_date_time_reply(
|
|
54
|
+
agent: ConversableAgent,
|
|
55
|
+
messages: list[dict[str, Any]] | None = None,
|
|
56
|
+
sender: Agent | None = None,
|
|
57
|
+
config: OpenAIWrapper | None = None,
|
|
58
|
+
) -> tuple[bool, dict[str, Any]]:
|
|
59
|
+
from datetime import datetime
|
|
60
|
+
|
|
61
|
+
now = datetime.now()
|
|
62
|
+
|
|
63
|
+
# Format the date and time as a string (e.g., "2025-02-25 14:30:00")
|
|
64
|
+
current_date_time = now.strftime(self._date_time_format)
|
|
65
|
+
|
|
66
|
+
# Final reply, with the date/time as the message
|
|
67
|
+
return True, {"content": f"{self._output_prefix}{current_date_time}."}
|
|
68
|
+
|
|
69
|
+
# Register our reply function with the agent
|
|
70
|
+
self.register_reply(
|
|
71
|
+
trigger=[Agent, None],
|
|
72
|
+
reply_func=get_date_time_reply, # This is the function that will be called when the agent needs to reply
|
|
73
|
+
remove_other_reply_funcs=True, # Removing all other reply functions so only this one will be used
|
|
74
|
+
)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .... import ConversableAgent
|
|
8
|
+
from ....doc_utils import export_module
|
|
9
|
+
from ....tools.contrib import TimeTool
|
|
10
|
+
|
|
11
|
+
__all__ = ["TimeToolAgent"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@export_module("autogen.agents.contrib") # API Reference: autogen > agents > contrib > TimeToolAgent
|
|
15
|
+
class TimeToolAgent(ConversableAgent):
|
|
16
|
+
"""A simple agent that returns the current time using tools
|
|
17
|
+
|
|
18
|
+
Use it is as a reference for creating new agents with a tool-based approach (as opposed to reply-based).
|
|
19
|
+
|
|
20
|
+
This agent will call the TimeTool and return the date and time whenever it needs to reply.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
DEFAULT_SYSTEM_MESSAGE = (
|
|
24
|
+
"You are a calendar agent that uses tools to return the date and time. "
|
|
25
|
+
"When you reply, say 'Tick, tock, the current date/time is ' followed by the date and time in the exact format the tool provided."
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
def __init__(
|
|
29
|
+
self,
|
|
30
|
+
date_time_format: str = "%Y-%m-%d %H:%M:%S", # This is a parameter that is unique to this agent
|
|
31
|
+
**kwargs: Any,
|
|
32
|
+
) -> None:
|
|
33
|
+
"""Initialize the TimeToolAgent.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
date_time_format: The format in which the date and time should be returned.
|
|
37
|
+
**kwargs: Additional keyword arguments passed to the parent ConversableAgent class.
|
|
38
|
+
"""
|
|
39
|
+
# Here we handle a ConversableAgent parameter through the kwargs
|
|
40
|
+
# We will pass this through when we run init() the base class
|
|
41
|
+
# Use this to tailor the return message
|
|
42
|
+
system_message = kwargs.pop("system_message", self.DEFAULT_SYSTEM_MESSAGE)
|
|
43
|
+
|
|
44
|
+
# Store the date and time format on the agent, prefixed with an underscore to indicate it's a private variable
|
|
45
|
+
self._date_time_format = date_time_format
|
|
46
|
+
|
|
47
|
+
self._time_tool = TimeTool(date_time_format=self._date_time_format)
|
|
48
|
+
|
|
49
|
+
# Initialise the base class, passing through the system_message parameter
|
|
50
|
+
super().__init__(system_message=system_message, **kwargs)
|
|
51
|
+
|
|
52
|
+
self.register_for_llm()(self._time_tool)
|
|
@@ -0,0 +1,27 @@
|
|
|
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 .deep_research import DeepResearchAgent
|
|
6
|
+
from .discord import DiscordAgent
|
|
7
|
+
from .document_agent import DocAgent, DoclingDocIngestAgent, InMemoryQueryEngine, VectorChromaQueryEngine
|
|
8
|
+
from .reasoning import ReasoningAgent, ThinkNode
|
|
9
|
+
from .slack import SlackAgent
|
|
10
|
+
from .telegram import TelegramAgent
|
|
11
|
+
from .websurfer import WebSurferAgent
|
|
12
|
+
from .wikipedia import WikipediaAgent
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"DeepResearchAgent",
|
|
16
|
+
"DiscordAgent",
|
|
17
|
+
"DocAgent",
|
|
18
|
+
"DoclingDocIngestAgent",
|
|
19
|
+
"InMemoryQueryEngine",
|
|
20
|
+
"ReasoningAgent",
|
|
21
|
+
"SlackAgent",
|
|
22
|
+
"TelegramAgent",
|
|
23
|
+
"ThinkNode",
|
|
24
|
+
"VectorChromaQueryEngine",
|
|
25
|
+
"WebSurferAgent",
|
|
26
|
+
"WikipediaAgent",
|
|
27
|
+
]
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .... import ConversableAgent
|
|
8
|
+
from ....doc_utils import export_module
|
|
9
|
+
from ....llm_config import LLMConfig
|
|
10
|
+
from ....tools.experimental import DeepResearchTool
|
|
11
|
+
|
|
12
|
+
__all__ = ["DeepResearchAgent"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@export_module("autogen.agents.experimental")
|
|
16
|
+
class DeepResearchAgent(ConversableAgent):
|
|
17
|
+
"""An agent that performs deep research tasks."""
|
|
18
|
+
|
|
19
|
+
DEFAULT_PROMPT = "You are a deep research agent. You have the ability to get information from the web and perform research tasks."
|
|
20
|
+
|
|
21
|
+
def __init__(
|
|
22
|
+
self,
|
|
23
|
+
name: str,
|
|
24
|
+
llm_config: LLMConfig | dict[str, Any] | None = None,
|
|
25
|
+
system_message: str | list[str] | None = DEFAULT_PROMPT,
|
|
26
|
+
max_web_steps: int = 30,
|
|
27
|
+
**kwargs: Any,
|
|
28
|
+
) -> None:
|
|
29
|
+
"""Initialize the DeepResearchAgent.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
name: The name of the agent.
|
|
33
|
+
llm_config: The LLM configuration.
|
|
34
|
+
system_message: The system message. Defaults to DEFAULT_PROMPT.
|
|
35
|
+
max_web_steps: The maximum number of web steps. Defaults to 30.
|
|
36
|
+
**kwargs: Additional keyword arguments to pass to the ConversableAgent.
|
|
37
|
+
"""
|
|
38
|
+
llm_config = LLMConfig.get_current_llm_config(llm_config) # type: ignore[arg-type]
|
|
39
|
+
|
|
40
|
+
super().__init__(
|
|
41
|
+
name=name,
|
|
42
|
+
system_message=system_message,
|
|
43
|
+
llm_config=llm_config,
|
|
44
|
+
**kwargs,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
self.tool = DeepResearchTool(
|
|
48
|
+
llm_config=llm_config, # type: ignore[arg-type]
|
|
49
|
+
max_web_steps=max_web_steps,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
self.register_for_llm()(self.tool)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .... import ConversableAgent
|
|
8
|
+
from ....doc_utils import export_module
|
|
9
|
+
from ....tools.experimental import DiscordRetrieveTool, DiscordSendTool
|
|
10
|
+
|
|
11
|
+
__all__ = ["DiscordAgent"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@export_module("autogen.agents.experimental")
|
|
15
|
+
class DiscordAgent(ConversableAgent):
|
|
16
|
+
"""An agent that can send messages and retrieve messages on Discord."""
|
|
17
|
+
|
|
18
|
+
DEFAULT_SYSTEM_MESSAGE = (
|
|
19
|
+
"You are a helpful AI assistant that communicates through Discord. "
|
|
20
|
+
"Remember that Discord uses Markdown for formatting and has a character limit. "
|
|
21
|
+
"Keep messages clear and concise, and consider using appropriate formatting when helpful."
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
name: str,
|
|
27
|
+
system_message: str | None = None,
|
|
28
|
+
*,
|
|
29
|
+
bot_token: str,
|
|
30
|
+
channel_name: str,
|
|
31
|
+
guild_name: str,
|
|
32
|
+
has_writing_instructions: bool = True,
|
|
33
|
+
**kwargs: Any,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""Initialize the DiscordAgent.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
name: name of the agent.
|
|
39
|
+
system_message: system message for the ChatCompletion inference.
|
|
40
|
+
bot_token: Discord bot token
|
|
41
|
+
channel_name: Channel name where messages will be sent / retrieved
|
|
42
|
+
guild_name: Guild (server) name where the channel is located
|
|
43
|
+
has_writing_instructions: Whether to add writing instructions to the system message. Defaults to True.
|
|
44
|
+
**kwargs: Additional keyword arguments passed to the parent ConversableAgent class.
|
|
45
|
+
"""
|
|
46
|
+
discord_system_message = system_message or self.DEFAULT_SYSTEM_MESSAGE
|
|
47
|
+
|
|
48
|
+
self._send_tool = DiscordSendTool(bot_token=bot_token, channel_name=channel_name, guild_name=guild_name)
|
|
49
|
+
self._retrieve_tool = DiscordRetrieveTool(bot_token=bot_token, channel_name=channel_name, guild_name=guild_name)
|
|
50
|
+
|
|
51
|
+
# Add formatting instructions
|
|
52
|
+
if has_writing_instructions:
|
|
53
|
+
formatting_instructions = (
|
|
54
|
+
"\nFormat guidelines for Discord:\n"
|
|
55
|
+
"1. Max message length: 2000 characters\n"
|
|
56
|
+
"2. Supports Markdown formatting\n"
|
|
57
|
+
"3. Can use ** for bold, * for italic, ``` for code blocks\n"
|
|
58
|
+
"4. Consider using appropriate emojis when suitable\n"
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
discord_system_message = discord_system_message + formatting_instructions
|
|
62
|
+
|
|
63
|
+
super().__init__(name=name, system_message=discord_system_message, **kwargs)
|
|
64
|
+
|
|
65
|
+
self.register_for_llm()(self._send_tool)
|
|
66
|
+
self.register_for_llm()(self._retrieve_tool)
|
|
@@ -0,0 +1,19 @@
|
|
|
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 .chroma_query_engine import VectorChromaQueryEngine
|
|
6
|
+
from .docling_doc_ingest_agent import DoclingDocIngestAgent
|
|
7
|
+
from .document_agent import DocAgent
|
|
8
|
+
from .document_utils import handle_input
|
|
9
|
+
from .inmemory_query_engine import InMemoryQueryEngine
|
|
10
|
+
from .parser_utils import docling_parse_docs
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"DocAgent",
|
|
14
|
+
"DoclingDocIngestAgent",
|
|
15
|
+
"InMemoryQueryEngine",
|
|
16
|
+
"VectorChromaQueryEngine",
|
|
17
|
+
"docling_parse_docs",
|
|
18
|
+
"handle_input",
|
|
19
|
+
]
|