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,260 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Module: perplexity_search_tool
|
|
3
|
+
Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
4
|
+
SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
|
|
6
|
+
This module provides classes for interacting with the Perplexity AI search API.
|
|
7
|
+
It defines data models for responses and a tool for executing web and conversational searches.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
import os
|
|
12
|
+
from typing import Any, Optional, Union
|
|
13
|
+
|
|
14
|
+
import requests
|
|
15
|
+
from pydantic import BaseModel, ValidationError
|
|
16
|
+
|
|
17
|
+
from autogen.tools import Tool
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Message(BaseModel):
|
|
21
|
+
"""
|
|
22
|
+
Represents a message in the chat conversation.
|
|
23
|
+
|
|
24
|
+
Attributes:
|
|
25
|
+
role (str): The role of the message sender (e.g., "system", "user").
|
|
26
|
+
content (str): The text content of the message.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
role: str
|
|
30
|
+
content: str
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Usage(BaseModel):
|
|
34
|
+
"""
|
|
35
|
+
Model representing token usage details.
|
|
36
|
+
|
|
37
|
+
Attributes:
|
|
38
|
+
prompt_tokens (int): The number of tokens used for the prompt.
|
|
39
|
+
completion_tokens (int): The number of tokens generated in the completion.
|
|
40
|
+
total_tokens (int): The total number of tokens (prompt + completion).
|
|
41
|
+
search_context_size (str): The size context used in the search (e.g., "high").
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
prompt_tokens: int
|
|
45
|
+
completion_tokens: int
|
|
46
|
+
total_tokens: int
|
|
47
|
+
search_context_size: str
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class Choice(BaseModel):
|
|
51
|
+
"""
|
|
52
|
+
Represents one choice in the response from the Perplexity API.
|
|
53
|
+
|
|
54
|
+
Attributes:
|
|
55
|
+
index (int): The index of this choice.
|
|
56
|
+
finish_reason (str): The reason why the API finished generating this choice.
|
|
57
|
+
message (Message): The message object containing the response text.
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
index: int
|
|
61
|
+
finish_reason: str
|
|
62
|
+
message: Message
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class PerplexityChatCompletionResponse(BaseModel):
|
|
66
|
+
"""
|
|
67
|
+
Represents the full chat completion response from the Perplexity API.
|
|
68
|
+
|
|
69
|
+
Attributes:
|
|
70
|
+
id (str): Unique identifier for the response.
|
|
71
|
+
model (str): The model name used for generating the response.
|
|
72
|
+
created (int): Timestamp when the response was created.
|
|
73
|
+
usage (Usage): Token usage details.
|
|
74
|
+
citations (list[str]): list of citation strings included in the response.
|
|
75
|
+
object (str): Type of the response object.
|
|
76
|
+
choices (list[Choice]): list of choices returned by the API.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
id: str
|
|
80
|
+
model: str
|
|
81
|
+
created: int
|
|
82
|
+
usage: Usage
|
|
83
|
+
citations: list[str]
|
|
84
|
+
object: str
|
|
85
|
+
choices: list[Choice]
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class SearchResponse(BaseModel):
|
|
89
|
+
"""
|
|
90
|
+
Represents the response from a search query.
|
|
91
|
+
|
|
92
|
+
Attributes:
|
|
93
|
+
content (Optional[str]): The textual content returned from the search.
|
|
94
|
+
citations (Optional[list[str]]): A list of citation URLs relevant to the search result.
|
|
95
|
+
error (Optional[str]): An error message if the search failed.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
content: Union[str, None]
|
|
99
|
+
citations: Union[list[str], None]
|
|
100
|
+
error: Union[str, None]
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class PerplexitySearchTool(Tool):
|
|
104
|
+
"""
|
|
105
|
+
Tool for interacting with the Perplexity AI search API.
|
|
106
|
+
|
|
107
|
+
This tool uses the Perplexity API to perform web search, news search,
|
|
108
|
+
and conversational search, returning concise and precise responses.
|
|
109
|
+
|
|
110
|
+
Attributes:
|
|
111
|
+
url (str): API endpoint URL.
|
|
112
|
+
model (str): Name of the model to be used.
|
|
113
|
+
api_key (str): API key for authenticating with the Perplexity API.
|
|
114
|
+
max_tokens (int): Maximum tokens allowed for the API response.
|
|
115
|
+
search_domain_filters (Optional[list[str]]): Optional list of domain filters for the search.
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
def __init__(
|
|
119
|
+
self,
|
|
120
|
+
model: str = "sonar",
|
|
121
|
+
api_key: Optional[str] = None,
|
|
122
|
+
max_tokens: int = 1000,
|
|
123
|
+
search_domain_filter: Optional[list[str]] = None,
|
|
124
|
+
):
|
|
125
|
+
"""
|
|
126
|
+
Initializes a new instance of the PerplexitySearchTool.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
model (str, optional): The model to use. Defaults to "sonar".
|
|
130
|
+
api_key (Optional[str], optional): API key for authentication.
|
|
131
|
+
max_tokens (int, optional): Maximum number of tokens for the response. Defaults to 1000.
|
|
132
|
+
search_domain_filter (Optional[list[str]], optional): list of domain filters to restrict search.
|
|
133
|
+
|
|
134
|
+
Raises:
|
|
135
|
+
ValueError: If the API key is missing, the model is empty, max_tokens is not positive,
|
|
136
|
+
or if search_domain_filter is not a list when provided.
|
|
137
|
+
"""
|
|
138
|
+
self.api_key = api_key or os.getenv("PERPLEXITY_API_KEY")
|
|
139
|
+
self._validate_tool_config(model, self.api_key, max_tokens, search_domain_filter)
|
|
140
|
+
self.url = "https://api.perplexity.ai/chat/completions"
|
|
141
|
+
self.model = model
|
|
142
|
+
self.max_tokens = max_tokens
|
|
143
|
+
self.search_domain_filters = search_domain_filter
|
|
144
|
+
super().__init__(
|
|
145
|
+
name="perplexity-search",
|
|
146
|
+
description="Perplexity AI search tool for web search, news search, and conversational search "
|
|
147
|
+
"for finding answers to everyday questions, conducting in-depth research and analysis.",
|
|
148
|
+
func_or_tool=self.search,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
@staticmethod
|
|
152
|
+
def _validate_tool_config(
|
|
153
|
+
model: str, api_key: Union[str, None], max_tokens: int, search_domain_filter: Union[list[str], None]
|
|
154
|
+
) -> None:
|
|
155
|
+
"""
|
|
156
|
+
Validates the configuration parameters for the search tool.
|
|
157
|
+
|
|
158
|
+
Args:
|
|
159
|
+
model (str): The model to use.
|
|
160
|
+
api_key (Union[str, None]): The API key for authentication.
|
|
161
|
+
max_tokens (int): Maximum tokens allowed.
|
|
162
|
+
search_domain_filter (Union[list[str], None]): Domain filters for search.
|
|
163
|
+
|
|
164
|
+
Raises:
|
|
165
|
+
ValueError: If the API key is missing, model is empty, max_tokens is not positive,
|
|
166
|
+
or search_domain_filter is not a list.
|
|
167
|
+
"""
|
|
168
|
+
if not api_key:
|
|
169
|
+
raise ValueError("Perplexity API key is missing")
|
|
170
|
+
if not model:
|
|
171
|
+
raise ValueError("model cannot be empty")
|
|
172
|
+
if max_tokens <= 0:
|
|
173
|
+
raise ValueError("max_tokens must be positive")
|
|
174
|
+
if search_domain_filter is not None and not isinstance(search_domain_filter, list):
|
|
175
|
+
raise ValueError("search_domain_filter must be a list")
|
|
176
|
+
|
|
177
|
+
def _execute_query(self, payload: dict[str, Any]) -> "PerplexityChatCompletionResponse":
|
|
178
|
+
"""
|
|
179
|
+
Executes a query by sending a POST request to the Perplexity API.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
payload (dict[str, Any]): The payload to send in the API request.
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
PerplexityChatCompletionResponse: Parsed response from the Perplexity API.
|
|
186
|
+
|
|
187
|
+
Raises:
|
|
188
|
+
RuntimeError: If there is a network error, HTTP error, JSON parsing error, or if the response
|
|
189
|
+
cannot be parsed into a PerplexityChatCompletionResponse.
|
|
190
|
+
"""
|
|
191
|
+
headers = {"Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json"}
|
|
192
|
+
response = requests.request("POST", self.url, json=payload, headers=headers, timeout=10)
|
|
193
|
+
try:
|
|
194
|
+
response.raise_for_status()
|
|
195
|
+
except requests.exceptions.Timeout as e:
|
|
196
|
+
raise RuntimeError(
|
|
197
|
+
f"Perplexity API => Request timed out: {response.text}. Status code: {response.status_code}"
|
|
198
|
+
) from e
|
|
199
|
+
except requests.exceptions.HTTPError as e:
|
|
200
|
+
raise RuntimeError(
|
|
201
|
+
f"Perplexity API => HTTP error occurred: {response.text}. Status code: {response.status_code}"
|
|
202
|
+
) from e
|
|
203
|
+
except requests.exceptions.RequestException as e:
|
|
204
|
+
raise RuntimeError(
|
|
205
|
+
f"Perplexity API => Error during request: {response.text}. Status code: {response.status_code}"
|
|
206
|
+
) from e
|
|
207
|
+
|
|
208
|
+
try:
|
|
209
|
+
response_json = response.json()
|
|
210
|
+
except json.JSONDecodeError as e:
|
|
211
|
+
raise RuntimeError(f"Perplexity API => Invalid JSON response received. Error: {e}") from e
|
|
212
|
+
|
|
213
|
+
try:
|
|
214
|
+
# This may raise a pydantic.ValidationError if the response structure is not as expected.
|
|
215
|
+
perp_resp = PerplexityChatCompletionResponse(**response_json)
|
|
216
|
+
except ValidationError as e:
|
|
217
|
+
raise RuntimeError("Perplexity API => Validation error when parsing API response: " + str(e)) from e
|
|
218
|
+
except Exception as e:
|
|
219
|
+
raise RuntimeError(
|
|
220
|
+
"Perplexity API => Failed to parse API response into PerplexityChatCompletionResponse: " + str(e)
|
|
221
|
+
) from e
|
|
222
|
+
|
|
223
|
+
return perp_resp
|
|
224
|
+
|
|
225
|
+
def search(self, query: str) -> "SearchResponse":
|
|
226
|
+
"""
|
|
227
|
+
Perform a search query using the Perplexity AI API.
|
|
228
|
+
|
|
229
|
+
Constructs the payload, executes the query, and parses the response to return
|
|
230
|
+
a concise search result along with any provided citations.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
query (str): The search query.
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
SearchResponse: A model containing the search result content and citations.
|
|
237
|
+
|
|
238
|
+
Raises:
|
|
239
|
+
ValueError: If the search query is invalid.
|
|
240
|
+
RuntimeError: If there is an error during the search process.
|
|
241
|
+
"""
|
|
242
|
+
if not query or not isinstance(query, str):
|
|
243
|
+
raise ValueError("A valid non-empty query string must be provided.")
|
|
244
|
+
|
|
245
|
+
payload = {
|
|
246
|
+
"model": self.model,
|
|
247
|
+
"messages": [{"role": "system", "content": "Be precise and concise."}, {"role": "user", "content": query}],
|
|
248
|
+
"max_tokens": self.max_tokens,
|
|
249
|
+
"search_domain_filter": self.search_domain_filters,
|
|
250
|
+
"web_search_options": {"search_context_size": "high"},
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
try:
|
|
254
|
+
perplexity_response = self._execute_query(payload)
|
|
255
|
+
content = perplexity_response.choices[0].message.content
|
|
256
|
+
citations = perplexity_response.citations
|
|
257
|
+
return SearchResponse(content=content, citations=citations, error=None)
|
|
258
|
+
except Exception as e:
|
|
259
|
+
# Return a SearchResponse with an error message if something goes wrong.
|
|
260
|
+
return SearchResponse(content=None, citations=None, error=f"{e}")
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
#
|
|
5
|
+
# Portions derived from https://github.com/microsoft/autogen are under the MIT License.
|
|
6
|
+
# SPDX-License-Identifier: MIT
|
|
7
|
+
|
|
8
|
+
from .reliable import ReliableTool, ReliableToolError, SuccessfulExecutionParameters, ToolExecutionDetails
|
|
9
|
+
|
|
10
|
+
__all__ = ["ReliableTool", "ReliableToolError", "SuccessfulExecutionParameters", "ToolExecutionDetails"]
|