ag2 0.9.1a1__py3-none-any.whl → 0.9.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.
Potentially problematic release.
This version of ag2 might be problematic. Click here for more details.
- {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info}/METADATA +272 -75
- ag2-0.9.2.dist-info/RECORD +406 -0
- {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info}/WHEEL +1 -2
- autogen/__init__.py +89 -0
- autogen/_website/__init__.py +3 -0
- autogen/_website/generate_api_references.py +427 -0
- autogen/_website/generate_mkdocs.py +1174 -0
- autogen/_website/notebook_processor.py +476 -0
- autogen/_website/process_notebooks.py +656 -0
- autogen/_website/utils.py +412 -0
- autogen/agentchat/__init__.py +44 -0
- autogen/agentchat/agent.py +182 -0
- autogen/agentchat/assistant_agent.py +85 -0
- autogen/agentchat/chat.py +309 -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 +429 -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 +566 -0
- autogen/agentchat/contrib/capabilities/transforms_util.py +122 -0
- autogen/agentchat/contrib/capabilities/vision_capability.py +214 -0
- autogen/agentchat/contrib/captainagent/__init__.py +9 -0
- autogen/agentchat/contrib/captainagent/agent_builder.py +790 -0
- autogen/agentchat/contrib/captainagent/captainagent.py +512 -0
- autogen/agentchat/contrib/captainagent/tool_retriever.py +335 -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 +170 -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 +268 -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 +187 -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 +324 -0
- autogen/agentchat/contrib/rag/__init__.py +10 -0
- autogen/agentchat/contrib/rag/chromadb_query_engine.py +272 -0
- autogen/agentchat/contrib/rag/llamaindex_query_engine.py +198 -0
- autogen/agentchat/contrib/rag/mongodb_query_engine.py +329 -0
- autogen/agentchat/contrib/rag/query_engine.py +74 -0
- autogen/agentchat/contrib/retrieve_assistant_agent.py +56 -0
- autogen/agentchat/contrib/retrieve_user_proxy_agent.py +703 -0
- autogen/agentchat/contrib/society_of_mind_agent.py +199 -0
- autogen/agentchat/contrib/swarm_agent.py +1425 -0
- autogen/agentchat/contrib/text_analyzer_agent.py +79 -0
- autogen/agentchat/contrib/vectordb/__init__.py +5 -0
- autogen/agentchat/contrib/vectordb/base.py +232 -0
- autogen/agentchat/contrib/vectordb/chromadb.py +315 -0
- autogen/agentchat/contrib/vectordb/couchbase.py +407 -0
- autogen/agentchat/contrib/vectordb/mongodb.py +550 -0
- autogen/agentchat/contrib/vectordb/pgvectordb.py +928 -0
- autogen/agentchat/contrib/vectordb/qdrant.py +320 -0
- autogen/agentchat/contrib/vectordb/utils.py +126 -0
- autogen/agentchat/contrib/web_surfer.py +303 -0
- autogen/agentchat/conversable_agent.py +4023 -0
- autogen/agentchat/group/__init__.py +64 -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 +41 -0
- autogen/agentchat/group/context_variables.py +192 -0
- autogen/agentchat/group/group_tool_executor.py +202 -0
- autogen/agentchat/group/group_utils.py +591 -0
- autogen/agentchat/group/handoffs.py +244 -0
- autogen/agentchat/group/llm_condition.py +93 -0
- autogen/agentchat/group/multi_agent_chat.py +237 -0
- autogen/agentchat/group/on_condition.py +58 -0
- autogen/agentchat/group/on_context_condition.py +54 -0
- autogen/agentchat/group/patterns/__init__.py +18 -0
- autogen/agentchat/group/patterns/auto.py +159 -0
- autogen/agentchat/group/patterns/manual.py +176 -0
- autogen/agentchat/group/patterns/pattern.py +288 -0
- autogen/agentchat/group/patterns/random.py +106 -0
- autogen/agentchat/group/patterns/round_robin.py +117 -0
- autogen/agentchat/group/reply_result.py +26 -0
- autogen/agentchat/group/speaker_selection_result.py +41 -0
- autogen/agentchat/group/targets/__init__.py +4 -0
- autogen/agentchat/group/targets/group_chat_target.py +132 -0
- autogen/agentchat/group/targets/group_manager_target.py +151 -0
- autogen/agentchat/group/targets/transition_target.py +413 -0
- autogen/agentchat/group/targets/transition_utils.py +6 -0
- autogen/agentchat/groupchat.py +1694 -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 +190 -0
- autogen/agentchat/realtime/experimental/function_observer.py +85 -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 +475 -0
- autogen/agentchat/realtime/experimental/websockets.py +21 -0
- autogen/agentchat/realtime_agent/__init__.py +21 -0
- autogen/agentchat/user_proxy_agent.py +111 -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 +73 -0
- autogen/agents/contrib/time/time_tool_agent.py +51 -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 +316 -0
- autogen/agents/experimental/document_agent/docling_doc_ingest_agent.py +118 -0
- autogen/agents/experimental/document_agent/document_agent.py +461 -0
- autogen/agents/experimental/document_agent/document_conditions.py +50 -0
- autogen/agents/experimental/document_agent/document_utils.py +380 -0
- autogen/agents/experimental/document_agent/inmemory_query_engine.py +220 -0
- autogen/agents/experimental/document_agent/parser_utils.py +130 -0
- autogen/agents/experimental/document_agent/url_utils.py +426 -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 +77 -0
- autogen/agents/experimental/websurfer/__init__.py +7 -0
- autogen/agents/experimental/websurfer/websurfer.py +62 -0
- autogen/agents/experimental/wikipedia/__init__.py +7 -0
- autogen/agents/experimental/wikipedia/wikipedia.py +90 -0
- autogen/browser_utils.py +309 -0
- autogen/cache/__init__.py +10 -0
- autogen/cache/abstract_cache_base.py +75 -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 +102 -0
- autogen/cache/in_memory_cache.py +58 -0
- autogen/cache/redis_cache.py +123 -0
- autogen/code_utils.py +596 -0
- autogen/coding/__init__.py +22 -0
- autogen/coding/base.py +119 -0
- autogen/coding/docker_commandline_code_executor.py +268 -0
- autogen/coding/factory.py +47 -0
- autogen/coding/func_with_reqs.py +202 -0
- autogen/coding/jupyter/__init__.py +23 -0
- autogen/coding/jupyter/base.py +36 -0
- autogen/coding/jupyter/docker_jupyter_server.py +167 -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 +231 -0
- autogen/coding/jupyter/jupyter_code_executor.py +160 -0
- autogen/coding/jupyter/local_jupyter_server.py +172 -0
- autogen/coding/local_commandline_code_executor.py +405 -0
- autogen/coding/markdown_code_extractor.py +45 -0
- autogen/coding/utils.py +56 -0
- autogen/doc_utils.py +34 -0
- autogen/events/__init__.py +7 -0
- autogen/events/agent_events.py +1013 -0
- autogen/events/base_event.py +99 -0
- autogen/events/client_events.py +167 -0
- autogen/events/helpers.py +36 -0
- autogen/events/print_event.py +46 -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 +80 -0
- autogen/fast_depends/core/__init__.py +14 -0
- autogen/fast_depends/core/build.py +225 -0
- autogen/fast_depends/core/model.py +576 -0
- autogen/fast_depends/dependencies/__init__.py +15 -0
- autogen/fast_depends/dependencies/model.py +29 -0
- autogen/fast_depends/dependencies/provider.py +39 -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 +280 -0
- autogen/fast_depends/utils.py +187 -0
- autogen/formatting_utils.py +83 -0
- autogen/function_utils.py +13 -0
- autogen/graph_utils.py +178 -0
- autogen/import_utils.py +526 -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 +155 -0
- autogen/interop/langchain/langchain_tool.py +82 -0
- autogen/interop/litellm/__init__.py +7 -0
- autogen/interop/litellm/litellm_config_factory.py +179 -0
- autogen/interop/pydantic_ai/__init__.py +7 -0
- autogen/interop/pydantic_ai/pydantic_ai.py +168 -0
- autogen/interop/registry.py +69 -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 +56 -0
- autogen/io/run_response.py +293 -0
- autogen/io/thread_io_stream.py +63 -0
- autogen/io/websockets.py +213 -0
- autogen/json_utils.py +43 -0
- autogen/llm_config.py +382 -0
- autogen/logger/__init__.py +11 -0
- autogen/logger/base_logger.py +128 -0
- autogen/logger/file_logger.py +261 -0
- autogen/logger/logger_factory.py +42 -0
- autogen/logger/logger_utils.py +57 -0
- autogen/logger/sqlite_logger.py +523 -0
- autogen/math_utils.py +339 -0
- autogen/mcp/__init__.py +7 -0
- autogen/mcp/__main__.py +78 -0
- autogen/mcp/mcp_client.py +208 -0
- autogen/mcp/mcp_proxy/__init__.py +19 -0
- autogen/mcp/mcp_proxy/fastapi_code_generator_helpers.py +63 -0
- autogen/mcp/mcp_proxy/mcp_proxy.py +581 -0
- autogen/mcp/mcp_proxy/operation_grouping.py +158 -0
- autogen/mcp/mcp_proxy/operation_renaming.py +114 -0
- autogen/mcp/mcp_proxy/patch_fastapi_code_generator.py +98 -0
- autogen/mcp/mcp_proxy/security.py +400 -0
- autogen/mcp/mcp_proxy/security_schema_visitor.py +37 -0
- autogen/messages/__init__.py +7 -0
- autogen/messages/agent_messages.py +948 -0
- autogen/messages/base_message.py +107 -0
- autogen/messages/client_messages.py +171 -0
- autogen/messages/print_message.py +49 -0
- autogen/oai/__init__.py +53 -0
- autogen/oai/anthropic.py +714 -0
- autogen/oai/bedrock.py +628 -0
- autogen/oai/cerebras.py +299 -0
- autogen/oai/client.py +1444 -0
- autogen/oai/client_utils.py +169 -0
- autogen/oai/cohere.py +479 -0
- autogen/oai/gemini.py +998 -0
- autogen/oai/gemini_types.py +155 -0
- autogen/oai/groq.py +305 -0
- autogen/oai/mistral.py +303 -0
- autogen/oai/oai_models/__init__.py +11 -0
- autogen/oai/oai_models/_models.py +16 -0
- autogen/oai/oai_models/chat_completion.py +87 -0
- autogen/oai/oai_models/chat_completion_audio.py +32 -0
- autogen/oai/oai_models/chat_completion_message.py +86 -0
- autogen/oai/oai_models/chat_completion_message_tool_call.py +37 -0
- autogen/oai/oai_models/chat_completion_token_logprob.py +63 -0
- autogen/oai/oai_models/completion_usage.py +60 -0
- autogen/oai/ollama.py +643 -0
- autogen/oai/openai_utils.py +881 -0
- autogen/oai/together.py +370 -0
- autogen/retrieve_utils.py +491 -0
- autogen/runtime_logging.py +160 -0
- autogen/token_count_utils.py +267 -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 +41 -0
- autogen/tools/dependency_injection.py +254 -0
- autogen/tools/experimental/__init__.py +48 -0
- autogen/tools/experimental/browser_use/__init__.py +7 -0
- autogen/tools/experimental/browser_use/browser_use.py +161 -0
- autogen/tools/experimental/crawl4ai/__init__.py +7 -0
- autogen/tools/experimental/crawl4ai/crawl4ai.py +153 -0
- autogen/tools/experimental/deep_research/__init__.py +7 -0
- autogen/tools/experimental/deep_research/deep_research.py +328 -0
- autogen/tools/experimental/duckduckgo/__init__.py +7 -0
- autogen/tools/experimental/duckduckgo/duckduckgo_search.py +109 -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 +288 -0
- autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/slack/slack.py +391 -0
- autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/telegram/telegram.py +275 -0
- autogen/tools/experimental/perplexity/__init__.py +7 -0
- autogen/tools/experimental/perplexity/perplexity_search.py +260 -0
- autogen/tools/experimental/reliable/__init__.py +10 -0
- autogen/tools/experimental/reliable/reliable.py +1316 -0
- autogen/tools/experimental/tavily/__init__.py +7 -0
- autogen/tools/experimental/tavily/tavily_search.py +183 -0
- autogen/tools/experimental/web_search_preview/__init__.py +7 -0
- autogen/tools/experimental/web_search_preview/web_search_preview.py +114 -0
- autogen/tools/experimental/wikipedia/__init__.py +7 -0
- autogen/tools/experimental/wikipedia/wikipedia.py +287 -0
- autogen/tools/function_utils.py +411 -0
- autogen/tools/tool.py +187 -0
- autogen/tools/toolkit.py +86 -0
- autogen/types.py +29 -0
- autogen/version.py +7 -0
- templates/client_template/main.jinja2 +69 -0
- templates/config_template/config.jinja2 +7 -0
- templates/main.jinja2 +61 -0
- ag2-0.9.1a1.dist-info/RECORD +0 -6
- ag2-0.9.1a1.dist-info/top_level.txt +0 -1
- {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info/licenses}/LICENSE +0 -0
- {ag2-0.9.1a1.dist-info → ag2-0.9.2.dist-info/licenses}/NOTICE.md +0 -0
|
@@ -0,0 +1,301 @@
|
|
|
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, Literal, Optional, Protocol, Union
|
|
9
|
+
|
|
10
|
+
from .... import Agent, ConversableAgent, code_utils
|
|
11
|
+
from ....cache import AbstractCache
|
|
12
|
+
from ....import_utils import optional_import_block, require_optional_import
|
|
13
|
+
from ....llm_config import LLMConfig
|
|
14
|
+
from .. import img_utils
|
|
15
|
+
from ..capabilities.agent_capability import AgentCapability
|
|
16
|
+
from ..text_analyzer_agent import TextAnalyzerAgent
|
|
17
|
+
|
|
18
|
+
with optional_import_block():
|
|
19
|
+
from PIL.Image import Image
|
|
20
|
+
from openai import OpenAI
|
|
21
|
+
|
|
22
|
+
SYSTEM_MESSAGE = "You've been given the special ability to generate images."
|
|
23
|
+
DESCRIPTION_MESSAGE = "This agent has the ability to generate images."
|
|
24
|
+
|
|
25
|
+
PROMPT_INSTRUCTIONS = """In detail, please summarize the provided prompt to generate the image described in the TEXT.
|
|
26
|
+
DO NOT include any advice. RESPOND like the following example:
|
|
27
|
+
EXAMPLE: Blue background, 3D shapes, ...
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ImageGenerator(Protocol):
|
|
32
|
+
"""This class defines an interface for image generators.
|
|
33
|
+
|
|
34
|
+
Concrete implementations of this protocol must provide a `generate_image` method that takes a string prompt as
|
|
35
|
+
input and returns a PIL Image object.
|
|
36
|
+
|
|
37
|
+
NOTE: Current implementation does not allow you to edit a previously existing image.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def generate_image(self, prompt: str) -> "Image":
|
|
41
|
+
"""Generates an image based on the provided prompt.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
prompt: A string describing the desired image.
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
A PIL Image object representing the generated image.
|
|
48
|
+
|
|
49
|
+
Raises:
|
|
50
|
+
ValueError: If the image generation fails.
|
|
51
|
+
"""
|
|
52
|
+
...
|
|
53
|
+
|
|
54
|
+
def cache_key(self, prompt: str) -> str:
|
|
55
|
+
"""Generates a unique cache key for the given prompt.
|
|
56
|
+
|
|
57
|
+
This key can be used to store and retrieve generated images based on the prompt.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
prompt: A string describing the desired image.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
A unique string that can be used as a cache key.
|
|
64
|
+
"""
|
|
65
|
+
...
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@require_optional_import("PIL", "unknown")
|
|
69
|
+
@require_optional_import("openai>=1.66.2", "openai")
|
|
70
|
+
class DalleImageGenerator:
|
|
71
|
+
"""Generates images using OpenAI's DALL-E models.
|
|
72
|
+
|
|
73
|
+
This class provides a convenient interface for generating images based on textual prompts using OpenAI's DALL-E
|
|
74
|
+
models. It allows you to specify the DALL-E model, resolution, quality, and the number of images to generate.
|
|
75
|
+
|
|
76
|
+
Note: Current implementation does not allow you to edit a previously existing image.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
def __init__(
|
|
80
|
+
self,
|
|
81
|
+
llm_config: Union[LLMConfig, dict[str, Any]],
|
|
82
|
+
resolution: Literal["256x256", "512x512", "1024x1024", "1792x1024", "1024x1792"] = "1024x1024",
|
|
83
|
+
quality: Literal["standard", "hd"] = "standard",
|
|
84
|
+
num_images: int = 1,
|
|
85
|
+
):
|
|
86
|
+
"""Args:
|
|
87
|
+
llm_config (LLMConfig or dict): llm config, must contain a valid dalle model and OpenAI API key in config_list.
|
|
88
|
+
resolution (str): The resolution of the image you want to generate. Must be one of "256x256", "512x512", "1024x1024", "1792x1024", "1024x1792".
|
|
89
|
+
quality (str): The quality of the image you want to generate. Must be one of "standard", "hd".
|
|
90
|
+
num_images (int): The number of images to generate.
|
|
91
|
+
"""
|
|
92
|
+
config_list = llm_config["config_list"]
|
|
93
|
+
_validate_dalle_model(config_list[0]["model"])
|
|
94
|
+
_validate_resolution_format(resolution)
|
|
95
|
+
|
|
96
|
+
self._model = config_list[0]["model"]
|
|
97
|
+
self._resolution = resolution
|
|
98
|
+
self._quality = quality
|
|
99
|
+
self._num_images = num_images
|
|
100
|
+
self._dalle_client = OpenAI(api_key=config_list[0]["api_key"])
|
|
101
|
+
|
|
102
|
+
def generate_image(self, prompt: str) -> "Image":
|
|
103
|
+
response = self._dalle_client.images.generate(
|
|
104
|
+
model=self._model,
|
|
105
|
+
prompt=prompt,
|
|
106
|
+
size=self._resolution,
|
|
107
|
+
quality=self._quality,
|
|
108
|
+
n=self._num_images,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
image_url = response.data[0].url
|
|
112
|
+
if image_url is None:
|
|
113
|
+
raise ValueError("Failed to generate image.")
|
|
114
|
+
|
|
115
|
+
return img_utils.get_pil_image(image_url)
|
|
116
|
+
|
|
117
|
+
def cache_key(self, prompt: str) -> str:
|
|
118
|
+
keys = (prompt, self._model, self._resolution, self._quality, self._num_images)
|
|
119
|
+
return ",".join([str(k) for k in keys])
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
@require_optional_import("PIL", "unknown")
|
|
123
|
+
class ImageGeneration(AgentCapability):
|
|
124
|
+
"""This capability allows a ConversableAgent to generate images based on the message received from other Agents.
|
|
125
|
+
|
|
126
|
+
1. Utilizes a TextAnalyzerAgent to analyze incoming messages to identify requests for image generation and
|
|
127
|
+
extract relevant details.
|
|
128
|
+
2. Leverages the provided ImageGenerator (e.g., DalleImageGenerator) to create the image.
|
|
129
|
+
3. Optionally caches generated images for faster retrieval in future conversations.
|
|
130
|
+
|
|
131
|
+
NOTE: This capability increases the token usage of the agent, as it uses TextAnalyzerAgent to analyze every
|
|
132
|
+
message received by the agent.
|
|
133
|
+
|
|
134
|
+
Example:
|
|
135
|
+
```python
|
|
136
|
+
import autogen
|
|
137
|
+
from autogen.agentchat.contrib.capabilities.image_generation import ImageGeneration
|
|
138
|
+
|
|
139
|
+
# Assuming you have llm configs configured for the LLMs you want to use and Dalle.
|
|
140
|
+
# Create the agent
|
|
141
|
+
agent = autogen.ConversableAgent(
|
|
142
|
+
name="dalle", llm_config={...}, max_consecutive_auto_reply=3, human_input_mode="NEVER"
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
# Create an ImageGenerator with desired settings
|
|
146
|
+
dalle_gen = generate_images.DalleImageGenerator(llm_config={...})
|
|
147
|
+
|
|
148
|
+
# Add the ImageGeneration capability to the agent
|
|
149
|
+
agent.add_capability(ImageGeneration(image_generator=dalle_gen))
|
|
150
|
+
```
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
def __init__(
|
|
154
|
+
self,
|
|
155
|
+
image_generator: ImageGenerator,
|
|
156
|
+
cache: Optional[AbstractCache] = None,
|
|
157
|
+
text_analyzer_llm_config: Optional[Union[LLMConfig, dict[str, Any]]] = None,
|
|
158
|
+
text_analyzer_instructions: str = PROMPT_INSTRUCTIONS,
|
|
159
|
+
verbosity: int = 0,
|
|
160
|
+
register_reply_position: int = 2,
|
|
161
|
+
):
|
|
162
|
+
"""Args:
|
|
163
|
+
image_generator (ImageGenerator): The image generator you would like to use to generate images.
|
|
164
|
+
cache (None or AbstractCache): The cache client to use to store and retrieve generated images. If None,
|
|
165
|
+
no caching will be used.
|
|
166
|
+
text_analyzer_llm_config (LLMConfig or Dict or None): The LLM config for the text analyzer. If None, the LLM config will
|
|
167
|
+
be retrieved from the agent you're adding the ability to.
|
|
168
|
+
text_analyzer_instructions (str): Instructions provided to the TextAnalyzerAgent used to analyze
|
|
169
|
+
incoming messages and extract the prompt for image generation. The default instructions focus on
|
|
170
|
+
summarizing the prompt. You can customize the instructions to achieve more granular control over prompt
|
|
171
|
+
extraction.
|
|
172
|
+
Example: 'Extract specific details from the message, like desired objects, styles, or backgrounds.'
|
|
173
|
+
verbosity (int): The verbosity level. Defaults to 0 and must be greater than or equal to 0. The text
|
|
174
|
+
analyzer llm calls will be silent if verbosity is less than 2.
|
|
175
|
+
register_reply_position (int): The position of the reply function in the agent's list of reply functions.
|
|
176
|
+
This capability registers a new reply function to handle messages with image generation requests.
|
|
177
|
+
Defaults to 2 to place it after the check termination and human reply for a ConversableAgent.
|
|
178
|
+
"""
|
|
179
|
+
self._image_generator = image_generator
|
|
180
|
+
self._cache = cache
|
|
181
|
+
self._text_analyzer_llm_config = text_analyzer_llm_config
|
|
182
|
+
self._text_analyzer_instructions = text_analyzer_instructions
|
|
183
|
+
self._verbosity = verbosity
|
|
184
|
+
self._register_reply_position = register_reply_position
|
|
185
|
+
|
|
186
|
+
self._agent: Optional[ConversableAgent] = None
|
|
187
|
+
self._text_analyzer: Optional[TextAnalyzerAgent] = None
|
|
188
|
+
|
|
189
|
+
def add_to_agent(self, agent: ConversableAgent):
|
|
190
|
+
"""Adds the Image Generation capability to the specified ConversableAgent.
|
|
191
|
+
|
|
192
|
+
This function performs the following modifications to the agent:
|
|
193
|
+
|
|
194
|
+
1. Registers a reply function: A new reply function is registered with the agent to handle messages that
|
|
195
|
+
potentially request image generation. This function analyzes the message and triggers image generation if
|
|
196
|
+
necessary.
|
|
197
|
+
2. Creates an Agent (TextAnalyzerAgent): This is used to analyze messages for image generation requirements.
|
|
198
|
+
3. Updates System Message: The agent's system message is updated to include a message indicating the
|
|
199
|
+
capability to generate images has been added.
|
|
200
|
+
4. Updates Description: The agent's description is updated to reflect the addition of the Image Generation
|
|
201
|
+
capability. This might be helpful in certain use cases, like group chats.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
agent (ConversableAgent): The ConversableAgent to add the capability to.
|
|
205
|
+
"""
|
|
206
|
+
self._agent = agent
|
|
207
|
+
|
|
208
|
+
agent.register_reply([Agent, None], self._image_gen_reply, position=self._register_reply_position)
|
|
209
|
+
|
|
210
|
+
self._text_analyzer_llm_config = self._text_analyzer_llm_config or agent.llm_config
|
|
211
|
+
self._text_analyzer = TextAnalyzerAgent(llm_config=self._text_analyzer_llm_config)
|
|
212
|
+
|
|
213
|
+
agent.update_system_message(agent.system_message + "\n" + SYSTEM_MESSAGE)
|
|
214
|
+
agent.description += "\n" + DESCRIPTION_MESSAGE
|
|
215
|
+
|
|
216
|
+
def _image_gen_reply(
|
|
217
|
+
self,
|
|
218
|
+
recipient: ConversableAgent,
|
|
219
|
+
messages: Optional[list[dict[str, Any]]],
|
|
220
|
+
sender: Optional[Agent] = None,
|
|
221
|
+
config: Optional[Any] = None,
|
|
222
|
+
) -> tuple[bool, Optional[Union[str, dict[str, Any]]]]:
|
|
223
|
+
if messages is None:
|
|
224
|
+
return False, None
|
|
225
|
+
|
|
226
|
+
last_message = code_utils.content_str(messages[-1]["content"])
|
|
227
|
+
|
|
228
|
+
if not last_message:
|
|
229
|
+
return False, None
|
|
230
|
+
|
|
231
|
+
if self._should_generate_image(last_message):
|
|
232
|
+
prompt = self._extract_prompt(last_message)
|
|
233
|
+
|
|
234
|
+
image = self._cache_get(prompt)
|
|
235
|
+
if image is None:
|
|
236
|
+
image = self._image_generator.generate_image(prompt)
|
|
237
|
+
self._cache_set(prompt, image)
|
|
238
|
+
|
|
239
|
+
return True, self._generate_content_message(prompt, image)
|
|
240
|
+
|
|
241
|
+
else:
|
|
242
|
+
return False, None
|
|
243
|
+
|
|
244
|
+
def _should_generate_image(self, message: str) -> bool:
|
|
245
|
+
assert self._text_analyzer is not None
|
|
246
|
+
|
|
247
|
+
instructions = """
|
|
248
|
+
Does any part of the TEXT ask the agent to generate an image?
|
|
249
|
+
The TEXT must explicitly mention that the image must be generated.
|
|
250
|
+
Answer with just one word, yes or no.
|
|
251
|
+
"""
|
|
252
|
+
analysis = self._text_analyzer.analyze_text(message, instructions)
|
|
253
|
+
|
|
254
|
+
return "yes" in self._extract_analysis(analysis).lower()
|
|
255
|
+
|
|
256
|
+
def _extract_prompt(self, last_message) -> str:
|
|
257
|
+
assert self._text_analyzer is not None
|
|
258
|
+
|
|
259
|
+
analysis = self._text_analyzer.analyze_text(last_message, self._text_analyzer_instructions)
|
|
260
|
+
return self._extract_analysis(analysis)
|
|
261
|
+
|
|
262
|
+
def _cache_get(self, prompt: str) -> Optional["Image"]:
|
|
263
|
+
if self._cache:
|
|
264
|
+
key = self._image_generator.cache_key(prompt)
|
|
265
|
+
cached_value = self._cache.get(key)
|
|
266
|
+
|
|
267
|
+
if cached_value:
|
|
268
|
+
return img_utils.get_pil_image(cached_value)
|
|
269
|
+
|
|
270
|
+
def _cache_set(self, prompt: str, image: "Image"):
|
|
271
|
+
if self._cache:
|
|
272
|
+
key = self._image_generator.cache_key(prompt)
|
|
273
|
+
self._cache.set(key, img_utils.pil_to_data_uri(image))
|
|
274
|
+
|
|
275
|
+
def _extract_analysis(self, analysis: Optional[Union[str, dict[str, Any]]]) -> str:
|
|
276
|
+
if isinstance(analysis, dict):
|
|
277
|
+
return code_utils.content_str(analysis["content"])
|
|
278
|
+
else:
|
|
279
|
+
return code_utils.content_str(analysis)
|
|
280
|
+
|
|
281
|
+
def _generate_content_message(self, prompt: str, image: "Image") -> dict[str, Any]:
|
|
282
|
+
return {
|
|
283
|
+
"content": [
|
|
284
|
+
{"type": "text", "text": f"I generated an image with the prompt: {prompt}"},
|
|
285
|
+
{"type": "image_url", "image_url": {"url": img_utils.pil_to_data_uri(image)}},
|
|
286
|
+
]
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
# Helpers
|
|
291
|
+
def _validate_resolution_format(resolution: str):
|
|
292
|
+
"""Checks if a string is in a valid resolution format (e.g., "1024x768")."""
|
|
293
|
+
pattern = r"^\d+x\d+$" # Matches a pattern of digits, "x", and digits
|
|
294
|
+
matched_resolution = re.match(pattern, resolution)
|
|
295
|
+
if matched_resolution is None:
|
|
296
|
+
raise ValueError(f"Invalid resolution format: {resolution}")
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def _validate_dalle_model(model: str):
|
|
300
|
+
if model not in ["dall-e-3", "dall-e-2"]:
|
|
301
|
+
raise ValueError(f"Invalid DALL-E model: {model}. Must be 'dall-e-3' or 'dall-e-2'")
|