ag2 0.10.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ag2-0.10.2.dist-info/METADATA +819 -0
- ag2-0.10.2.dist-info/RECORD +423 -0
- ag2-0.10.2.dist-info/WHEEL +4 -0
- ag2-0.10.2.dist-info/licenses/LICENSE +201 -0
- ag2-0.10.2.dist-info/licenses/NOTICE.md +19 -0
- autogen/__init__.py +88 -0
- autogen/_website/__init__.py +3 -0
- autogen/_website/generate_api_references.py +426 -0
- autogen/_website/generate_mkdocs.py +1216 -0
- autogen/_website/notebook_processor.py +475 -0
- autogen/_website/process_notebooks.py +656 -0
- autogen/_website/utils.py +413 -0
- autogen/a2a/__init__.py +36 -0
- autogen/a2a/agent_executor.py +86 -0
- autogen/a2a/client.py +357 -0
- autogen/a2a/errors.py +18 -0
- autogen/a2a/httpx_client_factory.py +79 -0
- autogen/a2a/server.py +221 -0
- autogen/a2a/utils.py +207 -0
- autogen/agentchat/__init__.py +47 -0
- autogen/agentchat/agent.py +180 -0
- autogen/agentchat/assistant_agent.py +86 -0
- autogen/agentchat/chat.py +325 -0
- autogen/agentchat/contrib/__init__.py +5 -0
- autogen/agentchat/contrib/agent_eval/README.md +7 -0
- autogen/agentchat/contrib/agent_eval/agent_eval.py +108 -0
- autogen/agentchat/contrib/agent_eval/criterion.py +43 -0
- autogen/agentchat/contrib/agent_eval/critic_agent.py +44 -0
- autogen/agentchat/contrib/agent_eval/quantifier_agent.py +39 -0
- autogen/agentchat/contrib/agent_eval/subcritic_agent.py +45 -0
- autogen/agentchat/contrib/agent_eval/task.py +42 -0
- autogen/agentchat/contrib/agent_optimizer.py +432 -0
- autogen/agentchat/contrib/capabilities/__init__.py +5 -0
- autogen/agentchat/contrib/capabilities/agent_capability.py +20 -0
- autogen/agentchat/contrib/capabilities/generate_images.py +301 -0
- autogen/agentchat/contrib/capabilities/teachability.py +393 -0
- autogen/agentchat/contrib/capabilities/text_compressors.py +66 -0
- autogen/agentchat/contrib/capabilities/tools_capability.py +22 -0
- autogen/agentchat/contrib/capabilities/transform_messages.py +93 -0
- autogen/agentchat/contrib/capabilities/transforms.py +578 -0
- autogen/agentchat/contrib/capabilities/transforms_util.py +122 -0
- autogen/agentchat/contrib/capabilities/vision_capability.py +215 -0
- autogen/agentchat/contrib/captainagent/__init__.py +9 -0
- autogen/agentchat/contrib/captainagent/agent_builder.py +790 -0
- autogen/agentchat/contrib/captainagent/captainagent.py +514 -0
- autogen/agentchat/contrib/captainagent/tool_retriever.py +334 -0
- autogen/agentchat/contrib/captainagent/tools/README.md +44 -0
- autogen/agentchat/contrib/captainagent/tools/__init__.py +5 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_correlation.py +40 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/calculate_skewness_and_kurtosis.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_iqr.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/detect_outlier_zscore.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/explore_csv.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/data_analysis/shapiro_wilk_test.py +30 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_download.py +27 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/arxiv_search.py +53 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_image.py +53 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/extract_pdf_text.py +38 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_wikipedia_text.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/get_youtube_caption.py +34 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/image_qa.py +60 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/optical_character_recognition.py +61 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/perform_web_search.py +47 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/scrape_wikipedia_tables.py +33 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/transcribe_audio_file.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/information_retrieval/youtube_download.py +35 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_circle_area_from_diameter.py +21 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_day_of_the_week.py +18 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_fraction_sum.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_matrix_power.py +31 -0
- autogen/agentchat/contrib/captainagent/tools/math/calculate_reflected_point.py +16 -0
- autogen/agentchat/contrib/captainagent/tools/math/complex_numbers_product.py +25 -0
- autogen/agentchat/contrib/captainagent/tools/math/compute_currency_conversion.py +23 -0
- autogen/agentchat/contrib/captainagent/tools/math/count_distinct_permutations.py +27 -0
- autogen/agentchat/contrib/captainagent/tools/math/evaluate_expression.py +28 -0
- autogen/agentchat/contrib/captainagent/tools/math/find_continuity_point.py +34 -0
- autogen/agentchat/contrib/captainagent/tools/math/fraction_to_mixed_numbers.py +39 -0
- autogen/agentchat/contrib/captainagent/tools/math/modular_inverse_sum.py +23 -0
- autogen/agentchat/contrib/captainagent/tools/math/simplify_mixed_numbers.py +36 -0
- autogen/agentchat/contrib/captainagent/tools/math/sum_of_digit_factorials.py +15 -0
- autogen/agentchat/contrib/captainagent/tools/math/sum_of_primes_below.py +15 -0
- autogen/agentchat/contrib/captainagent/tools/requirements.txt +10 -0
- autogen/agentchat/contrib/captainagent/tools/tool_description.tsv +34 -0
- autogen/agentchat/contrib/gpt_assistant_agent.py +526 -0
- autogen/agentchat/contrib/graph_rag/__init__.py +9 -0
- autogen/agentchat/contrib/graph_rag/document.py +29 -0
- autogen/agentchat/contrib/graph_rag/falkor_graph_query_engine.py +167 -0
- autogen/agentchat/contrib/graph_rag/falkor_graph_rag_capability.py +103 -0
- autogen/agentchat/contrib/graph_rag/graph_query_engine.py +53 -0
- autogen/agentchat/contrib/graph_rag/graph_rag_capability.py +63 -0
- autogen/agentchat/contrib/graph_rag/neo4j_graph_query_engine.py +263 -0
- autogen/agentchat/contrib/graph_rag/neo4j_graph_rag_capability.py +83 -0
- autogen/agentchat/contrib/graph_rag/neo4j_native_graph_query_engine.py +210 -0
- autogen/agentchat/contrib/graph_rag/neo4j_native_graph_rag_capability.py +93 -0
- autogen/agentchat/contrib/img_utils.py +397 -0
- autogen/agentchat/contrib/llamaindex_conversable_agent.py +117 -0
- autogen/agentchat/contrib/llava_agent.py +189 -0
- autogen/agentchat/contrib/math_user_proxy_agent.py +464 -0
- autogen/agentchat/contrib/multimodal_conversable_agent.py +125 -0
- autogen/agentchat/contrib/qdrant_retrieve_user_proxy_agent.py +325 -0
- autogen/agentchat/contrib/rag/__init__.py +10 -0
- autogen/agentchat/contrib/rag/chromadb_query_engine.py +268 -0
- autogen/agentchat/contrib/rag/llamaindex_query_engine.py +195 -0
- autogen/agentchat/contrib/rag/mongodb_query_engine.py +319 -0
- autogen/agentchat/contrib/rag/query_engine.py +76 -0
- autogen/agentchat/contrib/retrieve_assistant_agent.py +59 -0
- autogen/agentchat/contrib/retrieve_user_proxy_agent.py +704 -0
- autogen/agentchat/contrib/society_of_mind_agent.py +200 -0
- autogen/agentchat/contrib/swarm_agent.py +1404 -0
- autogen/agentchat/contrib/text_analyzer_agent.py +79 -0
- autogen/agentchat/contrib/vectordb/__init__.py +5 -0
- autogen/agentchat/contrib/vectordb/base.py +224 -0
- autogen/agentchat/contrib/vectordb/chromadb.py +316 -0
- autogen/agentchat/contrib/vectordb/couchbase.py +405 -0
- autogen/agentchat/contrib/vectordb/mongodb.py +551 -0
- autogen/agentchat/contrib/vectordb/pgvectordb.py +927 -0
- autogen/agentchat/contrib/vectordb/qdrant.py +320 -0
- autogen/agentchat/contrib/vectordb/utils.py +126 -0
- autogen/agentchat/contrib/web_surfer.py +304 -0
- autogen/agentchat/conversable_agent.py +4307 -0
- autogen/agentchat/group/__init__.py +67 -0
- autogen/agentchat/group/available_condition.py +91 -0
- autogen/agentchat/group/context_condition.py +77 -0
- autogen/agentchat/group/context_expression.py +238 -0
- autogen/agentchat/group/context_str.py +39 -0
- autogen/agentchat/group/context_variables.py +182 -0
- autogen/agentchat/group/events/transition_events.py +111 -0
- autogen/agentchat/group/group_tool_executor.py +324 -0
- autogen/agentchat/group/group_utils.py +659 -0
- autogen/agentchat/group/guardrails.py +179 -0
- autogen/agentchat/group/handoffs.py +303 -0
- autogen/agentchat/group/llm_condition.py +93 -0
- autogen/agentchat/group/multi_agent_chat.py +291 -0
- autogen/agentchat/group/on_condition.py +55 -0
- autogen/agentchat/group/on_context_condition.py +51 -0
- autogen/agentchat/group/patterns/__init__.py +18 -0
- autogen/agentchat/group/patterns/auto.py +160 -0
- autogen/agentchat/group/patterns/manual.py +177 -0
- autogen/agentchat/group/patterns/pattern.py +295 -0
- autogen/agentchat/group/patterns/random.py +106 -0
- autogen/agentchat/group/patterns/round_robin.py +117 -0
- autogen/agentchat/group/reply_result.py +24 -0
- autogen/agentchat/group/safeguards/__init__.py +21 -0
- autogen/agentchat/group/safeguards/api.py +241 -0
- autogen/agentchat/group/safeguards/enforcer.py +1158 -0
- autogen/agentchat/group/safeguards/events.py +140 -0
- autogen/agentchat/group/safeguards/validator.py +435 -0
- autogen/agentchat/group/speaker_selection_result.py +41 -0
- autogen/agentchat/group/targets/__init__.py +4 -0
- autogen/agentchat/group/targets/function_target.py +245 -0
- autogen/agentchat/group/targets/group_chat_target.py +133 -0
- autogen/agentchat/group/targets/group_manager_target.py +151 -0
- autogen/agentchat/group/targets/transition_target.py +424 -0
- autogen/agentchat/group/targets/transition_utils.py +6 -0
- autogen/agentchat/groupchat.py +1832 -0
- autogen/agentchat/realtime/__init__.py +3 -0
- autogen/agentchat/realtime/experimental/__init__.py +20 -0
- autogen/agentchat/realtime/experimental/audio_adapters/__init__.py +8 -0
- autogen/agentchat/realtime/experimental/audio_adapters/twilio_audio_adapter.py +148 -0
- autogen/agentchat/realtime/experimental/audio_adapters/websocket_audio_adapter.py +139 -0
- autogen/agentchat/realtime/experimental/audio_observer.py +42 -0
- autogen/agentchat/realtime/experimental/clients/__init__.py +15 -0
- autogen/agentchat/realtime/experimental/clients/gemini/__init__.py +7 -0
- autogen/agentchat/realtime/experimental/clients/gemini/client.py +274 -0
- autogen/agentchat/realtime/experimental/clients/oai/__init__.py +8 -0
- autogen/agentchat/realtime/experimental/clients/oai/base_client.py +220 -0
- autogen/agentchat/realtime/experimental/clients/oai/rtc_client.py +243 -0
- autogen/agentchat/realtime/experimental/clients/oai/utils.py +48 -0
- autogen/agentchat/realtime/experimental/clients/realtime_client.py +191 -0
- autogen/agentchat/realtime/experimental/function_observer.py +84 -0
- autogen/agentchat/realtime/experimental/realtime_agent.py +158 -0
- autogen/agentchat/realtime/experimental/realtime_events.py +42 -0
- autogen/agentchat/realtime/experimental/realtime_observer.py +100 -0
- autogen/agentchat/realtime/experimental/realtime_swarm.py +533 -0
- autogen/agentchat/realtime/experimental/websockets.py +21 -0
- autogen/agentchat/realtime_agent/__init__.py +21 -0
- autogen/agentchat/user_proxy_agent.py +114 -0
- autogen/agentchat/utils.py +206 -0
- autogen/agents/__init__.py +3 -0
- autogen/agents/contrib/__init__.py +10 -0
- autogen/agents/contrib/time/__init__.py +8 -0
- autogen/agents/contrib/time/time_reply_agent.py +74 -0
- autogen/agents/contrib/time/time_tool_agent.py +52 -0
- autogen/agents/experimental/__init__.py +27 -0
- autogen/agents/experimental/deep_research/__init__.py +7 -0
- autogen/agents/experimental/deep_research/deep_research.py +52 -0
- autogen/agents/experimental/discord/__init__.py +7 -0
- autogen/agents/experimental/discord/discord.py +66 -0
- autogen/agents/experimental/document_agent/__init__.py +19 -0
- autogen/agents/experimental/document_agent/chroma_query_engine.py +301 -0
- autogen/agents/experimental/document_agent/docling_doc_ingest_agent.py +113 -0
- autogen/agents/experimental/document_agent/document_agent.py +643 -0
- autogen/agents/experimental/document_agent/document_conditions.py +50 -0
- autogen/agents/experimental/document_agent/document_utils.py +376 -0
- autogen/agents/experimental/document_agent/inmemory_query_engine.py +214 -0
- autogen/agents/experimental/document_agent/parser_utils.py +134 -0
- autogen/agents/experimental/document_agent/url_utils.py +417 -0
- autogen/agents/experimental/reasoning/__init__.py +7 -0
- autogen/agents/experimental/reasoning/reasoning_agent.py +1178 -0
- autogen/agents/experimental/slack/__init__.py +7 -0
- autogen/agents/experimental/slack/slack.py +73 -0
- autogen/agents/experimental/telegram/__init__.py +7 -0
- autogen/agents/experimental/telegram/telegram.py +76 -0
- autogen/agents/experimental/websurfer/__init__.py +7 -0
- autogen/agents/experimental/websurfer/websurfer.py +70 -0
- autogen/agents/experimental/wikipedia/__init__.py +7 -0
- autogen/agents/experimental/wikipedia/wikipedia.py +88 -0
- autogen/browser_utils.py +309 -0
- autogen/cache/__init__.py +10 -0
- autogen/cache/abstract_cache_base.py +71 -0
- autogen/cache/cache.py +203 -0
- autogen/cache/cache_factory.py +88 -0
- autogen/cache/cosmos_db_cache.py +144 -0
- autogen/cache/disk_cache.py +97 -0
- autogen/cache/in_memory_cache.py +54 -0
- autogen/cache/redis_cache.py +119 -0
- autogen/code_utils.py +598 -0
- autogen/coding/__init__.py +30 -0
- autogen/coding/base.py +120 -0
- autogen/coding/docker_commandline_code_executor.py +283 -0
- autogen/coding/factory.py +56 -0
- autogen/coding/func_with_reqs.py +203 -0
- autogen/coding/jupyter/__init__.py +23 -0
- autogen/coding/jupyter/base.py +36 -0
- autogen/coding/jupyter/docker_jupyter_server.py +160 -0
- autogen/coding/jupyter/embedded_ipython_code_executor.py +182 -0
- autogen/coding/jupyter/import_utils.py +82 -0
- autogen/coding/jupyter/jupyter_client.py +224 -0
- autogen/coding/jupyter/jupyter_code_executor.py +154 -0
- autogen/coding/jupyter/local_jupyter_server.py +164 -0
- autogen/coding/local_commandline_code_executor.py +341 -0
- autogen/coding/markdown_code_extractor.py +44 -0
- autogen/coding/utils.py +55 -0
- autogen/coding/yepcode_code_executor.py +197 -0
- autogen/doc_utils.py +35 -0
- autogen/environments/__init__.py +10 -0
- autogen/environments/docker_python_environment.py +365 -0
- autogen/environments/python_environment.py +125 -0
- autogen/environments/system_python_environment.py +85 -0
- autogen/environments/venv_python_environment.py +220 -0
- autogen/environments/working_directory.py +74 -0
- autogen/events/__init__.py +7 -0
- autogen/events/agent_events.py +1016 -0
- autogen/events/base_event.py +100 -0
- autogen/events/client_events.py +168 -0
- autogen/events/helpers.py +44 -0
- autogen/events/print_event.py +45 -0
- autogen/exception_utils.py +73 -0
- autogen/extensions/__init__.py +5 -0
- autogen/fast_depends/__init__.py +16 -0
- autogen/fast_depends/_compat.py +75 -0
- autogen/fast_depends/core/__init__.py +14 -0
- autogen/fast_depends/core/build.py +206 -0
- autogen/fast_depends/core/model.py +527 -0
- autogen/fast_depends/dependencies/__init__.py +15 -0
- autogen/fast_depends/dependencies/model.py +30 -0
- autogen/fast_depends/dependencies/provider.py +40 -0
- autogen/fast_depends/library/__init__.py +10 -0
- autogen/fast_depends/library/model.py +46 -0
- autogen/fast_depends/py.typed +6 -0
- autogen/fast_depends/schema.py +66 -0
- autogen/fast_depends/use.py +272 -0
- autogen/fast_depends/utils.py +177 -0
- autogen/formatting_utils.py +83 -0
- autogen/function_utils.py +13 -0
- autogen/graph_utils.py +173 -0
- autogen/import_utils.py +539 -0
- autogen/interop/__init__.py +22 -0
- autogen/interop/crewai/__init__.py +7 -0
- autogen/interop/crewai/crewai.py +88 -0
- autogen/interop/interoperability.py +71 -0
- autogen/interop/interoperable.py +46 -0
- autogen/interop/langchain/__init__.py +8 -0
- autogen/interop/langchain/langchain_chat_model_factory.py +156 -0
- autogen/interop/langchain/langchain_tool.py +78 -0
- autogen/interop/litellm/__init__.py +7 -0
- autogen/interop/litellm/litellm_config_factory.py +178 -0
- autogen/interop/pydantic_ai/__init__.py +7 -0
- autogen/interop/pydantic_ai/pydantic_ai.py +172 -0
- autogen/interop/registry.py +70 -0
- autogen/io/__init__.py +15 -0
- autogen/io/base.py +151 -0
- autogen/io/console.py +56 -0
- autogen/io/processors/__init__.py +12 -0
- autogen/io/processors/base.py +21 -0
- autogen/io/processors/console_event_processor.py +61 -0
- autogen/io/run_response.py +294 -0
- autogen/io/thread_io_stream.py +63 -0
- autogen/io/websockets.py +214 -0
- autogen/json_utils.py +42 -0
- autogen/llm_clients/MIGRATION_TO_V2.md +782 -0
- autogen/llm_clients/__init__.py +77 -0
- autogen/llm_clients/client_v2.py +122 -0
- autogen/llm_clients/models/__init__.py +55 -0
- autogen/llm_clients/models/content_blocks.py +389 -0
- autogen/llm_clients/models/unified_message.py +145 -0
- autogen/llm_clients/models/unified_response.py +83 -0
- autogen/llm_clients/openai_completions_client.py +444 -0
- autogen/llm_config/__init__.py +11 -0
- autogen/llm_config/client.py +59 -0
- autogen/llm_config/config.py +461 -0
- autogen/llm_config/entry.py +169 -0
- autogen/llm_config/types.py +37 -0
- autogen/llm_config/utils.py +223 -0
- autogen/logger/__init__.py +11 -0
- autogen/logger/base_logger.py +129 -0
- autogen/logger/file_logger.py +262 -0
- autogen/logger/logger_factory.py +42 -0
- autogen/logger/logger_utils.py +57 -0
- autogen/logger/sqlite_logger.py +524 -0
- autogen/math_utils.py +338 -0
- autogen/mcp/__init__.py +7 -0
- autogen/mcp/__main__.py +78 -0
- autogen/mcp/helpers.py +45 -0
- autogen/mcp/mcp_client.py +349 -0
- autogen/mcp/mcp_proxy/__init__.py +19 -0
- autogen/mcp/mcp_proxy/fastapi_code_generator_helpers.py +62 -0
- autogen/mcp/mcp_proxy/mcp_proxy.py +577 -0
- autogen/mcp/mcp_proxy/operation_grouping.py +166 -0
- autogen/mcp/mcp_proxy/operation_renaming.py +110 -0
- autogen/mcp/mcp_proxy/patch_fastapi_code_generator.py +98 -0
- autogen/mcp/mcp_proxy/security.py +399 -0
- autogen/mcp/mcp_proxy/security_schema_visitor.py +37 -0
- autogen/messages/__init__.py +7 -0
- autogen/messages/agent_messages.py +946 -0
- autogen/messages/base_message.py +108 -0
- autogen/messages/client_messages.py +172 -0
- autogen/messages/print_message.py +48 -0
- autogen/oai/__init__.py +61 -0
- autogen/oai/anthropic.py +1516 -0
- autogen/oai/bedrock.py +800 -0
- autogen/oai/cerebras.py +302 -0
- autogen/oai/client.py +1658 -0
- autogen/oai/client_utils.py +196 -0
- autogen/oai/cohere.py +494 -0
- autogen/oai/gemini.py +1045 -0
- autogen/oai/gemini_types.py +156 -0
- autogen/oai/groq.py +319 -0
- autogen/oai/mistral.py +311 -0
- autogen/oai/oai_models/__init__.py +23 -0
- autogen/oai/oai_models/_models.py +16 -0
- autogen/oai/oai_models/chat_completion.py +86 -0
- autogen/oai/oai_models/chat_completion_audio.py +32 -0
- autogen/oai/oai_models/chat_completion_message.py +97 -0
- autogen/oai/oai_models/chat_completion_message_tool_call.py +60 -0
- autogen/oai/oai_models/chat_completion_token_logprob.py +62 -0
- autogen/oai/oai_models/completion_usage.py +59 -0
- autogen/oai/ollama.py +657 -0
- autogen/oai/openai_responses.py +451 -0
- autogen/oai/openai_utils.py +897 -0
- autogen/oai/together.py +387 -0
- autogen/remote/__init__.py +18 -0
- autogen/remote/agent.py +199 -0
- autogen/remote/agent_service.py +197 -0
- autogen/remote/errors.py +17 -0
- autogen/remote/httpx_client_factory.py +131 -0
- autogen/remote/protocol.py +37 -0
- autogen/remote/retry.py +102 -0
- autogen/remote/runtime.py +96 -0
- autogen/retrieve_utils.py +490 -0
- autogen/runtime_logging.py +161 -0
- autogen/testing/__init__.py +12 -0
- autogen/testing/messages.py +45 -0
- autogen/testing/test_agent.py +111 -0
- autogen/token_count_utils.py +280 -0
- autogen/tools/__init__.py +20 -0
- autogen/tools/contrib/__init__.py +9 -0
- autogen/tools/contrib/time/__init__.py +7 -0
- autogen/tools/contrib/time/time.py +40 -0
- autogen/tools/dependency_injection.py +249 -0
- autogen/tools/experimental/__init__.py +54 -0
- autogen/tools/experimental/browser_use/__init__.py +7 -0
- autogen/tools/experimental/browser_use/browser_use.py +154 -0
- autogen/tools/experimental/code_execution/__init__.py +7 -0
- autogen/tools/experimental/code_execution/python_code_execution.py +86 -0
- autogen/tools/experimental/crawl4ai/__init__.py +7 -0
- autogen/tools/experimental/crawl4ai/crawl4ai.py +150 -0
- autogen/tools/experimental/deep_research/__init__.py +7 -0
- autogen/tools/experimental/deep_research/deep_research.py +329 -0
- autogen/tools/experimental/duckduckgo/__init__.py +7 -0
- autogen/tools/experimental/duckduckgo/duckduckgo_search.py +103 -0
- autogen/tools/experimental/firecrawl/__init__.py +7 -0
- autogen/tools/experimental/firecrawl/firecrawl_tool.py +836 -0
- autogen/tools/experimental/google/__init__.py +14 -0
- autogen/tools/experimental/google/authentication/__init__.py +11 -0
- autogen/tools/experimental/google/authentication/credentials_hosted_provider.py +43 -0
- autogen/tools/experimental/google/authentication/credentials_local_provider.py +91 -0
- autogen/tools/experimental/google/authentication/credentials_provider.py +35 -0
- autogen/tools/experimental/google/drive/__init__.py +9 -0
- autogen/tools/experimental/google/drive/drive_functions.py +124 -0
- autogen/tools/experimental/google/drive/toolkit.py +88 -0
- autogen/tools/experimental/google/model.py +17 -0
- autogen/tools/experimental/google/toolkit_protocol.py +19 -0
- autogen/tools/experimental/google_search/__init__.py +8 -0
- autogen/tools/experimental/google_search/google_search.py +93 -0
- autogen/tools/experimental/google_search/youtube_search.py +181 -0
- autogen/tools/experimental/messageplatform/__init__.py +17 -0
- autogen/tools/experimental/messageplatform/discord/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/discord/discord.py +284 -0
- autogen/tools/experimental/messageplatform/slack/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/slack/slack.py +385 -0
- autogen/tools/experimental/messageplatform/telegram/__init__.py +7 -0
- autogen/tools/experimental/messageplatform/telegram/telegram.py +271 -0
- autogen/tools/experimental/perplexity/__init__.py +7 -0
- autogen/tools/experimental/perplexity/perplexity_search.py +249 -0
- autogen/tools/experimental/reliable/__init__.py +10 -0
- autogen/tools/experimental/reliable/reliable.py +1311 -0
- autogen/tools/experimental/searxng/__init__.py +7 -0
- autogen/tools/experimental/searxng/searxng_search.py +142 -0
- autogen/tools/experimental/tavily/__init__.py +7 -0
- autogen/tools/experimental/tavily/tavily_search.py +176 -0
- autogen/tools/experimental/web_search_preview/__init__.py +7 -0
- autogen/tools/experimental/web_search_preview/web_search_preview.py +120 -0
- autogen/tools/experimental/wikipedia/__init__.py +7 -0
- autogen/tools/experimental/wikipedia/wikipedia.py +284 -0
- autogen/tools/function_utils.py +412 -0
- autogen/tools/tool.py +188 -0
- autogen/tools/toolkit.py +86 -0
- autogen/types.py +29 -0
- autogen/version.py +7 -0
- templates/client_template/main.jinja2 +72 -0
- templates/config_template/config.jinja2 +7 -0
- templates/main.jinja2 +61 -0
autogen/tools/tool.py
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
import inspect
|
|
6
|
+
from collections.abc import Callable
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Union
|
|
8
|
+
|
|
9
|
+
from ..doc_utils import export_module
|
|
10
|
+
from ..tools.function_utils import get_function_schema
|
|
11
|
+
from .dependency_injection import ChatContext, get_context_params, inject_params
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from ..agentchat.conversable_agent import ConversableAgent
|
|
15
|
+
|
|
16
|
+
__all__ = ["Tool", "tool"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@export_module("autogen.tools")
|
|
20
|
+
class Tool:
|
|
21
|
+
"""A class representing a Tool that can be used by an agent for various tasks.
|
|
22
|
+
|
|
23
|
+
This class encapsulates a tool with a name, description, and an executable function.
|
|
24
|
+
The tool can be registered with a ConversableAgent for use either with an LLM or for direct execution.
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
name (str): The name of the tool.
|
|
28
|
+
description (str): The description of the tool.
|
|
29
|
+
func_or_tool (Union[Tool, Callable[..., Any]]): The function or Tool instance to create a Tool from.
|
|
30
|
+
parameters_json_schema (Optional[ict[str, Any]]): A schema describing the parameters that the function accepts. If None, the schema will be generated from the function signature.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
*,
|
|
36
|
+
name: str | None = None,
|
|
37
|
+
description: str | None = None,
|
|
38
|
+
func_or_tool: Union["Tool", Callable[..., Any]],
|
|
39
|
+
parameters_json_schema: dict[str, Any] | None = None,
|
|
40
|
+
) -> None:
|
|
41
|
+
"""Create a new Tool object.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
name (str): The name of the tool.
|
|
45
|
+
description (str): The description of the tool.
|
|
46
|
+
func_or_tool (Union[Tool, Callable[..., Any]]): The function or Tool instance to create a Tool from.
|
|
47
|
+
parameters_json_schema (Optional[dict[str, Any]]): A schema describing the parameters that the function accepts. If None, the schema will be generated from the function signature.
|
|
48
|
+
"""
|
|
49
|
+
if isinstance(func_or_tool, Tool):
|
|
50
|
+
self._name: str = name or func_or_tool.name
|
|
51
|
+
self._description: str = description or func_or_tool.description
|
|
52
|
+
self._func: Callable[..., Any] = func_or_tool.func
|
|
53
|
+
self._chat_context_param_names: list[str] = func_or_tool._chat_context_param_names
|
|
54
|
+
elif inspect.isfunction(func_or_tool) or inspect.ismethod(func_or_tool):
|
|
55
|
+
self._chat_context_param_names = get_context_params(func_or_tool, subclass=ChatContext)
|
|
56
|
+
self._func = inject_params(func_or_tool)
|
|
57
|
+
self._name = name or func_or_tool.__name__
|
|
58
|
+
self._description = description or func_or_tool.__doc__ or ""
|
|
59
|
+
else:
|
|
60
|
+
raise ValueError(
|
|
61
|
+
f"Parameter 'func_or_tool' must be a function, method or a Tool instance, it is '{type(func_or_tool)}' instead."
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
self._func_schema = (
|
|
65
|
+
{
|
|
66
|
+
"type": "function",
|
|
67
|
+
"function": {
|
|
68
|
+
"name": name,
|
|
69
|
+
"description": description,
|
|
70
|
+
"parameters": parameters_json_schema,
|
|
71
|
+
},
|
|
72
|
+
}
|
|
73
|
+
if parameters_json_schema
|
|
74
|
+
else None
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def name(self) -> str:
|
|
79
|
+
return self._name
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def description(self) -> str:
|
|
83
|
+
return self._description
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def func(self) -> Callable[..., Any]:
|
|
87
|
+
return self._func
|
|
88
|
+
|
|
89
|
+
def register_for_llm(self, agent: "ConversableAgent") -> None:
|
|
90
|
+
"""Registers the tool for use with a ConversableAgent's language model (LLM).
|
|
91
|
+
|
|
92
|
+
This method registers the tool so that it can be invoked by the agent during
|
|
93
|
+
interactions with the language model.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
agent (ConversableAgent): The agent to which the tool will be registered.
|
|
97
|
+
"""
|
|
98
|
+
if self._func_schema:
|
|
99
|
+
agent.update_tool_signature(self._func_schema, is_remove=False)
|
|
100
|
+
else:
|
|
101
|
+
agent.register_for_llm()(self)
|
|
102
|
+
|
|
103
|
+
def register_for_execution(self, agent: "ConversableAgent") -> None:
|
|
104
|
+
"""Registers the tool for direct execution by a ConversableAgent.
|
|
105
|
+
|
|
106
|
+
This method registers the tool so that it can be executed by the agent,
|
|
107
|
+
typically outside of the context of an LLM interaction.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
agent (ConversableAgent): The agent to which the tool will be registered.
|
|
111
|
+
"""
|
|
112
|
+
agent.register_for_execution()(self)
|
|
113
|
+
|
|
114
|
+
def register_tool(self, agent: "ConversableAgent") -> None:
|
|
115
|
+
"""Register a tool to be both proposed and executed by an agent.
|
|
116
|
+
|
|
117
|
+
Equivalent to calling both `register_for_llm` and `register_for_execution` with the same agent.
|
|
118
|
+
|
|
119
|
+
Note: This will not make the agent recommend and execute the call in the one step. If the agent
|
|
120
|
+
recommends the tool, it will need to be the next agent to speak in order to execute the tool.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
agent (ConversableAgent): The agent to which the tool will be registered.
|
|
124
|
+
"""
|
|
125
|
+
self.register_for_llm(agent)
|
|
126
|
+
self.register_for_execution(agent)
|
|
127
|
+
|
|
128
|
+
def __call__(self, *args: Any, **kwargs: Any) -> Any:
|
|
129
|
+
"""Execute the tool by calling its underlying function with the provided arguments.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
*args: Positional arguments to pass to the tool
|
|
133
|
+
**kwargs: Keyword arguments to pass to the tool
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
The result of executing the tool's function.
|
|
137
|
+
"""
|
|
138
|
+
return self._func(*args, **kwargs)
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def tool_schema(self) -> dict[str, Any]:
|
|
142
|
+
"""Get the schema for the tool.
|
|
143
|
+
|
|
144
|
+
This is the preferred way of handling function calls with OpeaAI and compatible frameworks.
|
|
145
|
+
|
|
146
|
+
"""
|
|
147
|
+
return get_function_schema(self.func, name=self.name, description=self.description)
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def function_schema(self) -> dict[str, Any]:
|
|
151
|
+
"""Get the schema for the function.
|
|
152
|
+
|
|
153
|
+
This is the old way of handling function calls with OpenAI and compatible frameworks.
|
|
154
|
+
It is provided for backward compatibility.
|
|
155
|
+
|
|
156
|
+
"""
|
|
157
|
+
schema = get_function_schema(self.func, name=self.name, description=self.description)
|
|
158
|
+
return schema["function"] # type: ignore[no-any-return]
|
|
159
|
+
|
|
160
|
+
@property
|
|
161
|
+
def realtime_tool_schema(self) -> dict[str, Any]:
|
|
162
|
+
"""Get the schema for the tool.
|
|
163
|
+
|
|
164
|
+
This is the preferred way of handling function calls with OpeaAI and compatible frameworks.
|
|
165
|
+
|
|
166
|
+
"""
|
|
167
|
+
schema = get_function_schema(self.func, name=self.name, description=self.description)
|
|
168
|
+
schema = {"type": schema["type"], **schema["function"]}
|
|
169
|
+
|
|
170
|
+
return schema
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
@export_module("autogen.tools")
|
|
174
|
+
def tool(name: str | None = None, description: str | None = None) -> Callable[[Callable[..., Any]], Tool]:
|
|
175
|
+
"""Decorator to create a Tool from a function.
|
|
176
|
+
|
|
177
|
+
Args:
|
|
178
|
+
name (str): The name of the tool.
|
|
179
|
+
description (str): The description of the tool.
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
Callable[[Callable[..., Any]], Tool]: A decorator that creates a Tool from a function.
|
|
183
|
+
"""
|
|
184
|
+
|
|
185
|
+
def decorator(func: Callable[..., Any]) -> Tool:
|
|
186
|
+
return Tool(name=name, description=description, func_or_tool=func)
|
|
187
|
+
|
|
188
|
+
return decorator
|
autogen/tools/toolkit.py
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
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 TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from ..doc_utils import export_module
|
|
8
|
+
from .tool import Tool
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from ..agentchat.conversable_agent import ConversableAgent
|
|
12
|
+
|
|
13
|
+
__all__ = ["Toolkit"]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@export_module("autogen.tools")
|
|
17
|
+
class Toolkit:
|
|
18
|
+
"""A class representing a set of tools that can be used by an agent for various tasks."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, tools: list[Tool]) -> None:
|
|
21
|
+
"""Create a new Toolkit object.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
tools (list[Tool]): The list of tools in the
|
|
25
|
+
"""
|
|
26
|
+
self.toolkit = {tool.name: tool for tool in tools}
|
|
27
|
+
|
|
28
|
+
@property
|
|
29
|
+
def tools(self) -> list[Tool]:
|
|
30
|
+
"""Get the list of tools in the set."""
|
|
31
|
+
return list(self.toolkit.values())
|
|
32
|
+
|
|
33
|
+
def register_for_llm(self, agent: "ConversableAgent") -> None:
|
|
34
|
+
"""Register the tools in the set with an LLM agent.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
agent (ConversableAgent): The LLM agent to register the tools with.
|
|
38
|
+
"""
|
|
39
|
+
for tool in self.toolkit.values():
|
|
40
|
+
tool.register_for_llm(agent)
|
|
41
|
+
|
|
42
|
+
def register_for_execution(self, agent: "ConversableAgent") -> None:
|
|
43
|
+
"""Register the tools in the set with an agent for
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
agent (ConversableAgent): The agent to register the tools with.
|
|
47
|
+
"""
|
|
48
|
+
for tool in self.toolkit.values():
|
|
49
|
+
tool.register_for_execution(agent)
|
|
50
|
+
|
|
51
|
+
def get_tool(self, tool_name: str) -> Tool:
|
|
52
|
+
"""Get a tool from the set by name.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
tool_name (str): The name of the tool to get.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Tool: The tool with the given name.
|
|
59
|
+
"""
|
|
60
|
+
if tool_name in self.toolkit:
|
|
61
|
+
return self.toolkit[tool_name]
|
|
62
|
+
|
|
63
|
+
raise ValueError(f"Tool '{tool_name}' not found in Toolkit.")
|
|
64
|
+
|
|
65
|
+
def set_tool(self, tool: Tool) -> None:
|
|
66
|
+
"""Set a tool in the set.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
tool (Tool): The tool to set.
|
|
70
|
+
"""
|
|
71
|
+
self.toolkit[tool.name] = tool
|
|
72
|
+
|
|
73
|
+
def remove_tool(self, tool_name: str) -> None:
|
|
74
|
+
"""Remove a tool from the set by name.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
tool_name (str): The name of the tool to remove.
|
|
78
|
+
"""
|
|
79
|
+
if tool_name in self.toolkit:
|
|
80
|
+
del self.toolkit[tool_name]
|
|
81
|
+
else:
|
|
82
|
+
raise ValueError(f"Tool '{tool_name}' not found in Toolkit.")
|
|
83
|
+
|
|
84
|
+
def __len__(self) -> int:
|
|
85
|
+
"""Get the number of tools in the map."""
|
|
86
|
+
return len(self.toolkit)
|
autogen/types.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
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 typing import Any, Literal, TypedDict
|
|
9
|
+
|
|
10
|
+
MessageContentType = str | list[dict[str, Any] | str] | None
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class UserMessageTextContentPart(TypedDict):
|
|
14
|
+
"""Represents a text content part of a user message"""
|
|
15
|
+
|
|
16
|
+
type: Literal["text"]
|
|
17
|
+
"""The type of the content part. Always "text" for text content parts."""
|
|
18
|
+
text: str
|
|
19
|
+
"""The text content of the part."""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class UserMessageImageContentPart(TypedDict):
|
|
23
|
+
"""Represents an image content part of a user message"""
|
|
24
|
+
|
|
25
|
+
type: Literal["image_url"]
|
|
26
|
+
"""The type of the content part. Always "image_url" for image content parts."""
|
|
27
|
+
# Ignoring the other "detail param for now"
|
|
28
|
+
image_url: dict[Literal["url"], str]
|
|
29
|
+
"""The URL of the image."""
|
autogen/version.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{{imports}}
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import json
|
|
5
|
+
import os
|
|
6
|
+
from typing import *
|
|
7
|
+
|
|
8
|
+
from autogen.mcp.mcp_proxy import MCPProxy
|
|
9
|
+
from autogen.mcp.mcp_proxy.security import BaseSecurity
|
|
10
|
+
from autogen.mcp.mcp_proxy.security import {% for i in security_classes %}{{i}}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
11
|
+
|
|
12
|
+
app = MCPProxy(
|
|
13
|
+
{% if info %}
|
|
14
|
+
{% for key,value in info.items() %}
|
|
15
|
+
{% set info_value= value.__repr__() %}
|
|
16
|
+
{% if not key.startswith('x-') %}
|
|
17
|
+
{{ key }} = {{info_value}},
|
|
18
|
+
{% endif %}
|
|
19
|
+
{% endfor %}
|
|
20
|
+
{% endif %}
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
{% for operation in operations %}
|
|
25
|
+
@app.{{operation.type}}('{{operation.path}}'
|
|
26
|
+
{% if operation.description %}
|
|
27
|
+
, description=""" {{operation.description}} """
|
|
28
|
+
{% endif %}
|
|
29
|
+
{% if operation.tags %}
|
|
30
|
+
, tags={{operation.tags}}
|
|
31
|
+
{% endif %}
|
|
32
|
+
{% if operation.security %}
|
|
33
|
+
, security=[{% for security in operation.security %}
|
|
34
|
+
{% for key, value in security.items() %}
|
|
35
|
+
{{security_parameters[key]}},
|
|
36
|
+
{% endfor %}
|
|
37
|
+
{% endfor %}]
|
|
38
|
+
{% endif %}
|
|
39
|
+
)
|
|
40
|
+
def {{operation.function_name}}({{operation.snake_case_arguments}}
|
|
41
|
+
):
|
|
42
|
+
{%- if operation.summary %}
|
|
43
|
+
"""
|
|
44
|
+
{{ operation.summary }}
|
|
45
|
+
"""
|
|
46
|
+
{%- endif %}
|
|
47
|
+
raise RuntimeError("Should be patched by MCPProxy and never executed")
|
|
48
|
+
{% endfor %}
|
|
49
|
+
|
|
50
|
+
if __name__ == "__main__":
|
|
51
|
+
parser = argparse.ArgumentParser(description="Math Server")
|
|
52
|
+
parser.add_argument("transport", choices=["stdio", "sse", "streamable-http"], help="Transport mode (stdio, sse or streamable-http)")
|
|
53
|
+
args = parser.parse_args()
|
|
54
|
+
|
|
55
|
+
if "CONFIG_PATH" in os.environ:
|
|
56
|
+
config_path = os.environ["CONFIG_PATH"]
|
|
57
|
+
app.load_configuration(config_path)
|
|
58
|
+
|
|
59
|
+
if "CONFIG" in os.environ:
|
|
60
|
+
config = os.environ["CONFIG"]
|
|
61
|
+
app.load_configuration_from_string(config)
|
|
62
|
+
|
|
63
|
+
if "SECURITY" in os.environ:
|
|
64
|
+
security_params = BaseSecurity.parse_security_parameters_from_env(
|
|
65
|
+
os.environ,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
app.set_security_params(security_params)
|
|
69
|
+
|
|
70
|
+
mcp_settings = json.loads(os.environ.get("MCP_SETTINGS", "{}"))
|
|
71
|
+
|
|
72
|
+
app.get_mcp(**mcp_settings).run(transport=args.transport)
|
templates/main.jinja2
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{{imports}}
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import os
|
|
5
|
+
from typing import *
|
|
6
|
+
|
|
7
|
+
from autogen.mcp.mcp_proxy import MCPProxy
|
|
8
|
+
from autogen.mcp.mcp_proxy.security import BaseSecurity
|
|
9
|
+
from autogen.mcp.mcp_proxy.security import {% for i in security_classes %}{{i}}{% if not loop.last %}, {% endif %}{% endfor %}
|
|
10
|
+
|
|
11
|
+
app = MCPProxy(
|
|
12
|
+
{% if info %}
|
|
13
|
+
{% for key,value in info.items() %}
|
|
14
|
+
{% set info_value= value.__repr__() %}
|
|
15
|
+
{% if not key.startswith('x-') %}
|
|
16
|
+
{{ key }} = {{info_value}},
|
|
17
|
+
{% endif %}
|
|
18
|
+
{% endfor %}
|
|
19
|
+
{% endif %}
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
{% for operation in operations %}
|
|
24
|
+
@app.{{operation.type}}('{{operation.path}}'
|
|
25
|
+
{% if operation.description %}
|
|
26
|
+
, description=""" {{operation.description}} """
|
|
27
|
+
{% endif %}
|
|
28
|
+
{% if operation.tags %}
|
|
29
|
+
, tags={{operation.tags}}
|
|
30
|
+
{% endif %}
|
|
31
|
+
{% if operation.security %}
|
|
32
|
+
, security=[{% for security in operation.security %}
|
|
33
|
+
{% for key, value in security.items() %}
|
|
34
|
+
{{security_parameters[key]}},
|
|
35
|
+
{% endfor %}
|
|
36
|
+
{% endfor %}]
|
|
37
|
+
{% endif %}
|
|
38
|
+
)
|
|
39
|
+
def {{operation.function_name}}({{operation.snake_case_arguments}}
|
|
40
|
+
):
|
|
41
|
+
{%- if operation.summary %}
|
|
42
|
+
"""
|
|
43
|
+
{{ operation.summary }}
|
|
44
|
+
"""
|
|
45
|
+
{%- endif %}
|
|
46
|
+
raise RuntimeError("Should be patched by MCPProxy and never executed")
|
|
47
|
+
{% endfor %}
|
|
48
|
+
|
|
49
|
+
if __name__ == "__main__":
|
|
50
|
+
parser = argparse.ArgumentParser(description="Math Server")
|
|
51
|
+
parser.add_argument("transport", choices=["stdio", "sse", "streamable-http"], help="Transport mode (stdio, sse or streamable-http)")
|
|
52
|
+
args = parser.parse_args()
|
|
53
|
+
|
|
54
|
+
if "SECURITY" in os.environ:
|
|
55
|
+
security_params = BaseSecurity.parse_security_parameters_from_env(
|
|
56
|
+
os.environ,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
app.set_security_params(security_params)
|
|
60
|
+
|
|
61
|
+
app._mcp.run(transport=args.transport)
|