ag2 0.9.1__py3-none-any.whl → 0.9.1.post0__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.1.dist-info → ag2-0.9.1.post0.dist-info}/METADATA +264 -73
- ag2-0.9.1.post0.dist-info/RECORD +392 -0
- {ag2-0.9.1.dist-info → ag2-0.9.1.post0.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 +4020 -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 +1010 -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 +113 -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 +379 -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/mcp_client.py +208 -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 +1435 -0
- autogen/oai/client_utils.py +169 -0
- autogen/oai/cohere.py +479 -0
- autogen/oai/gemini.py +990 -0
- autogen/oai/gemini_types.py +129 -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 +43 -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/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
- ag2-0.9.1.dist-info/RECORD +0 -6
- ag2-0.9.1.dist-info/top_level.txt +0 -1
- {ag2-0.9.1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/LICENSE +0 -0
- {ag2-0.9.1.dist-info → ag2-0.9.1.post0.dist-info/licenses}/NOTICE.md +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
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
|
+
|
|
6
|
+
from abc import ABC
|
|
7
|
+
from typing import Annotated, Any, Callable, Literal, Optional, TypeVar, Union
|
|
8
|
+
from uuid import UUID, uuid4
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel, Field, create_model
|
|
11
|
+
|
|
12
|
+
from ..doc_utils import export_module
|
|
13
|
+
|
|
14
|
+
PetType = TypeVar("PetType", bound=Literal["cat", "dog"])
|
|
15
|
+
|
|
16
|
+
__all__ = ["BaseMessage", "get_annotated_type_for_message_classes", "wrap_message"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@export_module("autogen.messages")
|
|
20
|
+
class BaseMessage(BaseModel, ABC):
|
|
21
|
+
uuid: UUID
|
|
22
|
+
|
|
23
|
+
def __init__(self, uuid: Optional[UUID] = None, **kwargs: Any) -> None:
|
|
24
|
+
"""Base message class
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
uuid (Optional[UUID], optional): Unique identifier for the message. Defaults to None.
|
|
28
|
+
**kwargs (Any): Additional keyword arguments
|
|
29
|
+
"""
|
|
30
|
+
uuid = uuid or uuid4()
|
|
31
|
+
super().__init__(uuid=uuid, **kwargs)
|
|
32
|
+
|
|
33
|
+
def print(self, f: Optional[Callable[..., Any]] = None) -> None:
|
|
34
|
+
"""Print message
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
f (Optional[Callable[..., Any]], optional): Print function. If none, python's default print will be used.
|
|
38
|
+
"""
|
|
39
|
+
...
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def camel2snake(name: str) -> str:
|
|
43
|
+
return "".join(["_" + i.lower() if i.isupper() else i for i in name]).lstrip("_")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
_message_classes: dict[str, type[BaseModel]] = {}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@export_module("autogen.messages")
|
|
50
|
+
def wrap_message(message_cls: type[BaseMessage]) -> type[BaseModel]:
|
|
51
|
+
"""Wrap a message class with a type field to be used in a union type
|
|
52
|
+
|
|
53
|
+
This is needed for proper serialization and deserialization of messages in a union type.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
message_cls (type[BaseMessage]): Message class to wrap
|
|
57
|
+
"""
|
|
58
|
+
global _message_classes
|
|
59
|
+
|
|
60
|
+
if not message_cls.__name__.endswith("Message"):
|
|
61
|
+
raise ValueError("Message class name must end with 'Message'")
|
|
62
|
+
|
|
63
|
+
type_name = camel2snake(message_cls.__name__)
|
|
64
|
+
type_name = type_name[: -len("_message")]
|
|
65
|
+
|
|
66
|
+
class WrapperBase(BaseModel):
|
|
67
|
+
# these types are generated dynamically so we need to disable the type checker
|
|
68
|
+
type: Literal[type_name] = type_name # type: ignore[valid-type]
|
|
69
|
+
content: message_cls # type: ignore[valid-type]
|
|
70
|
+
|
|
71
|
+
def __init__(self, *args: Any, **data: Any):
|
|
72
|
+
if set(data.keys()) == {"type", "content"} and "content" in data:
|
|
73
|
+
super().__init__(*args, **data)
|
|
74
|
+
else:
|
|
75
|
+
if "content" in data:
|
|
76
|
+
content = data.pop("content")
|
|
77
|
+
super().__init__(*args, content=message_cls(*args, **data, content=content), **data)
|
|
78
|
+
else:
|
|
79
|
+
super().__init__(content=message_cls(*args, **data), **data)
|
|
80
|
+
|
|
81
|
+
def print(self, f: Optional[Callable[..., Any]] = None) -> None:
|
|
82
|
+
self.content.print(f) # type: ignore[attr-defined]
|
|
83
|
+
|
|
84
|
+
wrapper_cls = create_model(message_cls.__name__, __base__=WrapperBase)
|
|
85
|
+
|
|
86
|
+
# Preserve the original class's docstring and other attributes
|
|
87
|
+
wrapper_cls.__doc__ = message_cls.__doc__
|
|
88
|
+
wrapper_cls.__module__ = message_cls.__module__
|
|
89
|
+
|
|
90
|
+
# Copy any other relevant attributes/metadata from the original class
|
|
91
|
+
if hasattr(message_cls, "__annotations__"):
|
|
92
|
+
wrapper_cls.__annotations__ = message_cls.__annotations__
|
|
93
|
+
|
|
94
|
+
_message_classes[type_name] = wrapper_cls
|
|
95
|
+
|
|
96
|
+
return wrapper_cls
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@export_module("autogen.messages")
|
|
100
|
+
def get_annotated_type_for_message_classes() -> type[Any]:
|
|
101
|
+
# this is a dynamic type so we need to disable the type checker
|
|
102
|
+
union_type = Union[tuple(_message_classes.values())] # type: ignore[valid-type]
|
|
103
|
+
return Annotated[union_type, Field(discriminator="type")] # type: ignore[return-value]
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def get_message_classes() -> dict[str, type[BaseModel]]:
|
|
107
|
+
return _message_classes
|
|
@@ -0,0 +1,171 @@
|
|
|
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, Callable, Literal, Optional, Union
|
|
6
|
+
from uuid import UUID
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel
|
|
9
|
+
|
|
10
|
+
from ..events import deprecated_by
|
|
11
|
+
from ..events.client_events import StreamEvent, UsageSummaryEvent
|
|
12
|
+
from .base_message import BaseMessage, wrap_message
|
|
13
|
+
|
|
14
|
+
__all__ = ["UsageSummaryMessage"]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ModelUsageSummary(BaseModel):
|
|
18
|
+
"""Model usage summary."""
|
|
19
|
+
|
|
20
|
+
model: str
|
|
21
|
+
"""Model name."""
|
|
22
|
+
completion_tokens: int
|
|
23
|
+
"""Number of tokens used for completion."""
|
|
24
|
+
cost: float
|
|
25
|
+
"""Cost of the completion."""
|
|
26
|
+
prompt_tokens: int
|
|
27
|
+
"""Number of tokens used for prompt."""
|
|
28
|
+
total_tokens: int
|
|
29
|
+
"""Total number of tokens used."""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ActualUsageSummary(BaseModel):
|
|
33
|
+
"""Actual usage summary."""
|
|
34
|
+
|
|
35
|
+
usages: Optional[list[ModelUsageSummary]] = None
|
|
36
|
+
"""List of model usage summaries."""
|
|
37
|
+
total_cost: Optional[float] = None
|
|
38
|
+
"""Total cost."""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class TotalUsageSummary(BaseModel):
|
|
42
|
+
"""Total usage summary."""
|
|
43
|
+
|
|
44
|
+
usages: Optional[list[ModelUsageSummary]] = None
|
|
45
|
+
"""List of model usage summaries."""
|
|
46
|
+
total_cost: Optional[float] = None
|
|
47
|
+
"""Total cost."""
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
Mode = Literal["both", "total", "actual"]
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _change_usage_summary_format(
|
|
54
|
+
actual_usage_summary: Optional[dict[str, Any]] = None, total_usage_summary: Optional[dict[str, Any]] = None
|
|
55
|
+
) -> dict[str, dict[str, Any]]:
|
|
56
|
+
summary: dict[str, Any] = {}
|
|
57
|
+
|
|
58
|
+
for usage_type, usage_summary in {"actual": actual_usage_summary, "total": total_usage_summary}.items():
|
|
59
|
+
if usage_summary is None:
|
|
60
|
+
summary[usage_type] = {"usages": None, "total_cost": None}
|
|
61
|
+
continue
|
|
62
|
+
|
|
63
|
+
usage_summary_altered_format: dict[str, list[dict[str, Any]]] = {"usages": []}
|
|
64
|
+
for k, v in usage_summary.items():
|
|
65
|
+
if isinstance(k, str) and isinstance(v, dict):
|
|
66
|
+
current_usage = {key: value for key, value in v.items()}
|
|
67
|
+
current_usage["model"] = k
|
|
68
|
+
usage_summary_altered_format["usages"].append(current_usage)
|
|
69
|
+
else:
|
|
70
|
+
usage_summary_altered_format[k] = v
|
|
71
|
+
summary[usage_type] = usage_summary_altered_format
|
|
72
|
+
|
|
73
|
+
return summary
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@deprecated_by(UsageSummaryEvent)
|
|
77
|
+
@wrap_message
|
|
78
|
+
class UsageSummaryMessage(BaseMessage):
|
|
79
|
+
"""Usage summary message."""
|
|
80
|
+
|
|
81
|
+
actual: ActualUsageSummary
|
|
82
|
+
"""Actual usage summary."""
|
|
83
|
+
total: TotalUsageSummary
|
|
84
|
+
"""Total usage summary."""
|
|
85
|
+
mode: Mode
|
|
86
|
+
"""Mode to display the usage summary."""
|
|
87
|
+
|
|
88
|
+
def __init__(
|
|
89
|
+
self,
|
|
90
|
+
*,
|
|
91
|
+
uuid: Optional[UUID] = None,
|
|
92
|
+
actual_usage_summary: Optional[dict[str, Any]] = None,
|
|
93
|
+
total_usage_summary: Optional[dict[str, Any]] = None,
|
|
94
|
+
mode: Mode = "both",
|
|
95
|
+
):
|
|
96
|
+
# print(f"{actual_usage_summary=}")
|
|
97
|
+
# print(f"{total_usage_summary=}")
|
|
98
|
+
|
|
99
|
+
summary_dict = _change_usage_summary_format(actual_usage_summary, total_usage_summary)
|
|
100
|
+
|
|
101
|
+
super().__init__(uuid=uuid, **summary_dict, mode=mode)
|
|
102
|
+
|
|
103
|
+
def _print_usage(
|
|
104
|
+
self,
|
|
105
|
+
usage_summary: Union[ActualUsageSummary, TotalUsageSummary],
|
|
106
|
+
usage_type: str = "total",
|
|
107
|
+
f: Optional[Callable[..., Any]] = None,
|
|
108
|
+
) -> None:
|
|
109
|
+
f = f or print
|
|
110
|
+
word_from_type = "including" if usage_type == "total" else "excluding"
|
|
111
|
+
if usage_summary.usages is None or len(usage_summary.usages) == 0:
|
|
112
|
+
f("No actual cost incurred (all completions are using cache).", flush=True)
|
|
113
|
+
return
|
|
114
|
+
|
|
115
|
+
f(f"Usage summary {word_from_type} cached usage: ", flush=True)
|
|
116
|
+
f(f"Total cost: {round(usage_summary.total_cost, 5)}", flush=True) # type: ignore [arg-type]
|
|
117
|
+
|
|
118
|
+
for usage in usage_summary.usages:
|
|
119
|
+
f(
|
|
120
|
+
f"* Model '{usage.model}': cost: {round(usage.cost, 5)}, prompt_tokens: {usage.prompt_tokens}, completion_tokens: {usage.completion_tokens}, total_tokens: {usage.total_tokens}",
|
|
121
|
+
flush=True,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
def print(self, f: Optional[Callable[..., Any]] = None) -> None:
|
|
125
|
+
f = f or print
|
|
126
|
+
|
|
127
|
+
if self.total.usages is None:
|
|
128
|
+
f('No usage summary. Please call "create" first.', flush=True)
|
|
129
|
+
return
|
|
130
|
+
|
|
131
|
+
f("-" * 100, flush=True)
|
|
132
|
+
if self.mode == "both":
|
|
133
|
+
self._print_usage(self.actual, "actual", f)
|
|
134
|
+
f()
|
|
135
|
+
if self.total.model_dump_json() != self.actual.model_dump_json():
|
|
136
|
+
self._print_usage(self.total, "total", f)
|
|
137
|
+
else:
|
|
138
|
+
f(
|
|
139
|
+
"All completions are non-cached: the total cost with cached completions is the same as actual cost.",
|
|
140
|
+
flush=True,
|
|
141
|
+
)
|
|
142
|
+
elif self.mode == "total":
|
|
143
|
+
self._print_usage(self.total, "total", f)
|
|
144
|
+
elif self.mode == "actual":
|
|
145
|
+
self._print_usage(self.actual, "actual", f)
|
|
146
|
+
else:
|
|
147
|
+
raise ValueError(f'Invalid mode: {self.mode}, choose from "actual", "total", ["actual", "total"]')
|
|
148
|
+
f("-" * 100, flush=True)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@deprecated_by(StreamEvent)
|
|
152
|
+
@wrap_message
|
|
153
|
+
class StreamMessage(BaseMessage):
|
|
154
|
+
"""Stream message."""
|
|
155
|
+
|
|
156
|
+
content: str
|
|
157
|
+
"""Content of the message."""
|
|
158
|
+
|
|
159
|
+
def __init__(self, *, uuid: Optional[UUID] = None, content: str) -> None:
|
|
160
|
+
super().__init__(uuid=uuid, content=content)
|
|
161
|
+
|
|
162
|
+
def print(self, f: Optional[Callable[..., Any]] = None) -> None:
|
|
163
|
+
f = f or print
|
|
164
|
+
|
|
165
|
+
# Set the terminal text color to green
|
|
166
|
+
f("\033[32m", end="")
|
|
167
|
+
|
|
168
|
+
f(self.content, end="", flush=True)
|
|
169
|
+
|
|
170
|
+
# Reset the terminal text color
|
|
171
|
+
f("\033[0m\n")
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
|
|
6
|
+
import json
|
|
7
|
+
from typing import Any, Callable, Optional
|
|
8
|
+
from uuid import UUID
|
|
9
|
+
|
|
10
|
+
from ..events import deprecated_by
|
|
11
|
+
from ..events.print_event import PrintEvent
|
|
12
|
+
from .base_message import BaseMessage, wrap_message
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@deprecated_by(PrintEvent)
|
|
16
|
+
@wrap_message
|
|
17
|
+
class PrintMessage(BaseMessage):
|
|
18
|
+
"""Print message"""
|
|
19
|
+
|
|
20
|
+
objects: list[str]
|
|
21
|
+
"""List of objects to print"""
|
|
22
|
+
sep: str
|
|
23
|
+
"""Separator between objects"""
|
|
24
|
+
end: str
|
|
25
|
+
"""End of the print"""
|
|
26
|
+
|
|
27
|
+
def __init__(
|
|
28
|
+
self, *objects: Any, sep: str = " ", end: str = "\n", flush: bool = False, uuid: Optional[UUID] = None
|
|
29
|
+
):
|
|
30
|
+
objects_as_string = [self._to_json(x) for x in objects]
|
|
31
|
+
|
|
32
|
+
super().__init__(uuid=uuid, objects=objects_as_string, sep=sep, end=end)
|
|
33
|
+
|
|
34
|
+
def _to_json(self, obj: Any) -> str:
|
|
35
|
+
if isinstance(obj, str):
|
|
36
|
+
return obj
|
|
37
|
+
|
|
38
|
+
if hasattr(obj, "model_dump_json"):
|
|
39
|
+
return obj.model_dump_json() # type: ignore [no-any-return]
|
|
40
|
+
try:
|
|
41
|
+
return json.dumps(obj)
|
|
42
|
+
except Exception:
|
|
43
|
+
return str(obj)
|
|
44
|
+
# return repr(obj)
|
|
45
|
+
|
|
46
|
+
def print(self, f: Optional[Callable[..., Any]] = None) -> None:
|
|
47
|
+
f = f or print
|
|
48
|
+
|
|
49
|
+
f(*self.objects, sep=self.sep, end=self.end, flush=True)
|
autogen/oai/__init__.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
#
|
|
5
|
+
# Portions derived from https://github.com/microsoft/autogen are under the MIT License.
|
|
6
|
+
# SPDX-License-Identifier: MIT
|
|
7
|
+
from ..cache.cache import Cache
|
|
8
|
+
from .anthropic import AnthropicLLMConfigEntry
|
|
9
|
+
from .bedrock import BedrockLLMConfigEntry
|
|
10
|
+
from .cerebras import CerebrasLLMConfigEntry
|
|
11
|
+
from .client import AzureOpenAILLMConfigEntry, DeepSeekLLMConfigEntry, ModelClient, OpenAILLMConfigEntry, OpenAIWrapper
|
|
12
|
+
from .cohere import CohereLLMConfigEntry
|
|
13
|
+
from .gemini import GeminiLLMConfigEntry
|
|
14
|
+
from .groq import GroqLLMConfigEntry
|
|
15
|
+
from .mistral import MistralLLMConfigEntry
|
|
16
|
+
from .ollama import OllamaLLMConfigEntry
|
|
17
|
+
from .openai_utils import (
|
|
18
|
+
config_list_from_dotenv,
|
|
19
|
+
config_list_from_json,
|
|
20
|
+
config_list_from_models,
|
|
21
|
+
config_list_gpt4_gpt35,
|
|
22
|
+
config_list_openai_aoai,
|
|
23
|
+
filter_config,
|
|
24
|
+
get_config_list,
|
|
25
|
+
get_first_llm_config,
|
|
26
|
+
)
|
|
27
|
+
from .together import TogetherLLMConfigEntry
|
|
28
|
+
|
|
29
|
+
__all__ = [
|
|
30
|
+
"AnthropicLLMConfigEntry",
|
|
31
|
+
"AzureOpenAILLMConfigEntry",
|
|
32
|
+
"BedrockLLMConfigEntry",
|
|
33
|
+
"Cache",
|
|
34
|
+
"CerebrasLLMConfigEntry",
|
|
35
|
+
"CohereLLMConfigEntry",
|
|
36
|
+
"DeepSeekLLMConfigEntry",
|
|
37
|
+
"GeminiLLMConfigEntry",
|
|
38
|
+
"GroqLLMConfigEntry",
|
|
39
|
+
"MistralLLMConfigEntry",
|
|
40
|
+
"ModelClient",
|
|
41
|
+
"OllamaLLMConfigEntry",
|
|
42
|
+
"OpenAILLMConfigEntry",
|
|
43
|
+
"OpenAIWrapper",
|
|
44
|
+
"TogetherLLMConfigEntry",
|
|
45
|
+
"config_list_from_dotenv",
|
|
46
|
+
"config_list_from_json",
|
|
47
|
+
"config_list_from_models",
|
|
48
|
+
"config_list_gpt4_gpt35",
|
|
49
|
+
"config_list_openai_aoai",
|
|
50
|
+
"filter_config",
|
|
51
|
+
"get_config_list",
|
|
52
|
+
"get_first_llm_config",
|
|
53
|
+
]
|