From 35fc031c7a33ea3e7dd5f7cec640d3018085d225 Mon Sep 17 00:00:00 2001 From: "fangyaozheng@bytedance.com" Date: Wed, 20 Aug 2025 16:47:38 +0800 Subject: [PATCH] fix openapi route for web --- veadk/cli/cli_web.py | 27 +++++++++++++++++++ .../src/app.py | 17 ++++++++++++ veadk/runner.py | 7 +++-- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/veadk/cli/cli_web.py b/veadk/cli/cli_web.py index b92766ee..84acdce3 100644 --- a/veadk/cli/cli_web.py +++ b/veadk/cli/cli_web.py @@ -102,6 +102,32 @@ def _get_memory( return short_term_memory, long_term_memory +def patch_adkwebserver_disable_openapi(): + """ + Monkey patch AdkWebServer.get_fast_api to remove openapi.json route. + """ + import google.adk.cli.adk_web_server + from fastapi.routing import APIRoute + from starlette.routing import Route + + original_get_fast_api = google.adk.cli.adk_web_server.AdkWebServer.get_fast_api_app + + def wrapped_get_fast_api(self, *args, **kwargs): + app = original_get_fast_api(self, *args, **kwargs) + + paths = ["/openapi.json", "/docs", "/redoc"] + new_routes = [] + for route in app.router.routes: + if isinstance(route, (APIRoute, Route)) and route.path in paths: + continue + new_routes.append(route) + app.router.routes = new_routes + + return app + + google.adk.cli.adk_web_server.AdkWebServer.get_fast_api_app = wrapped_get_fast_api + + @click.command() @click.option("--host", default="127.0.0.1", help="Host to run the web server on") def web(host: str) -> None: @@ -145,6 +171,7 @@ def init_for_veadk( import google.adk.cli.adk_web_server google.adk.cli.adk_web_server.AdkWebServer.__init__ = init_for_veadk + patch_adkwebserver_disable_openapi() import google.adk.cli.cli_tools_click as cli_tools_click diff --git a/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py b/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py index 252e2ae4..4841680d 100644 --- a/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +++ b/veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py @@ -17,9 +17,16 @@ from typing import Callable from agent import agent_run_config + from fastapi import FastAPI +from fastapi.routing import APIRoute + from fastmcp import FastMCP + +from starlette.routing import Route + from google.adk.a2a.utils.agent_card_builder import AgentCardBuilder + from veadk.a2a.ve_a2a_server import init_app from veadk.runner import Runner from veadk.tracing.telemetry.exporters.apmplus_exporter import APMPlusExporter @@ -159,4 +166,14 @@ async def combined_lifespan(app: FastAPI): # Mount MCP server at /mcp endpoint app.mount("/mcp", mcp_app) + +# remove openapi routes +paths = ["/openapi.json", "/docs", "/redoc"] +new_routes = [] +for route in app.router.routes: + if isinstance(route, (APIRoute, Route)) and route.path in paths: + continue + new_routes.append(route) +app.router.routes = new_routes + # === Build mcp server end === diff --git a/veadk/runner.py b/veadk/runner.py index d9afdaa3..bee47251 100644 --- a/veadk/runner.py +++ b/veadk/runner.py @@ -51,7 +51,7 @@ def __init__( self, agent: VeAgent, short_term_memory: ShortTermMemory, - plugins: list[BasePlugin] = [], + plugins: list[BasePlugin] | None = None, app_name: str = "veadk_default_app", user_id: str = "veadk_default_user", ): @@ -77,7 +77,10 @@ def __init__( try: # try to detect tracer _ = self.agent.tracers[0] - plugins.extend([UserMessagePlugin(name="user_message_plugin")]) + if not plugins: + plugins = [UserMessagePlugin(name="user_message_plugin")] + else: + plugins.append(UserMessagePlugin(name="user_message_plugin")) except Exception: logger.debug("Agent has no tracers, telemetry plugin not added.")