diff --git a/fastdeploy/entrypoints/cli/serve.py b/fastdeploy/entrypoints/cli/serve.py index ead694695..59806ada1 100644 --- a/fastdeploy/entrypoints/cli/serve.py +++ b/fastdeploy/entrypoints/cli/serve.py @@ -73,7 +73,7 @@ class ServeSubcommand(CLISubcommand): name=self.name, help="Start the FastDeploy OpenAI Compatible API server.", description="Start the FastDeploy OpenAI Compatible API server.", - usage="fastdeploy serve [model_tag] [options]", + usage="fastdeploy serve [options]", ) serve_parser = make_arg_parser(serve_parser) serve_parser.add_argument("--config", help="Read CLI options from a config file. Must be a YAML file") diff --git a/fastdeploy/entrypoints/openai/api_server.py b/fastdeploy/entrypoints/openai/api_server.py index 25a38b89d..a87f742ae 100644 --- a/fastdeploy/entrypoints/openai/api_server.py +++ b/fastdeploy/entrypoints/openai/api_server.py @@ -15,6 +15,7 @@ """ import asyncio +import json import os import threading import time @@ -50,6 +51,7 @@ from fastdeploy.entrypoints.openai.serving_completion import OpenAIServingComple from fastdeploy.entrypoints.openai.serving_models import ModelPath, OpenAIServingModels from fastdeploy.entrypoints.openai.tool_parsers import ToolParserManager from fastdeploy.entrypoints.openai.utils import UVICORN_CONFIG, make_arg_parser +from fastdeploy.envs import environment_variables from fastdeploy.metrics.metrics import ( EXCLUDE_LABELS, cleanup_prometheus_files, @@ -439,6 +441,29 @@ async def metrics(): return Response(metrics_text, media_type=CONTENT_TYPE_LATEST) +@metrics_app.get("/config-info") +def config_info() -> Response: + """ + Get the current configuration of the API server. + """ + global llm_engine + if llm_engine is None: + return Response("Engine not loaded", status_code=500) + cfg = llm_engine.cfg + + def process_object(obj): + if hasattr(obj, "__dict__"): + # 处理有__dict__属性的对象 + return obj.__dict__ + return None # 或其他默认处理 + + cfg_dict = {k: v for k, v in cfg.__dict__.items()} + env_dict = {k: v() for k, v in environment_variables.items()} + cfg_dict["env_config"] = env_dict + result_content = json.dumps(cfg_dict, default=process_object, ensure_ascii=False) + return Response(result_content, media_type="application/json") + + def run_metrics_server(): """ run metrics server diff --git a/tests/ci_use/ERNIE_0dot3B/test_ernie_03b_pd.py b/tests/ci_use/ERNIE_0dot3B/test_ernie_03b_pd.py index f0e60d8a9..697a60289 100644 --- a/tests/ci_use/ERNIE_0dot3B/test_ernie_03b_pd.py +++ b/tests/ci_use/ERNIE_0dot3B/test_ernie_03b_pd.py @@ -239,6 +239,13 @@ def headers(): return {"Content-Type": "application/json"} +def test_metrics_config(metrics_url): + timeout = 600 + url = metrics_url.replace("metrics", "config-info") + res = requests.get(url, timeout=timeout) + assert res.status_code == 200 + + def send_request(url, payload, timeout=600): """ 发送请求到指定的URL,并返回响应结果。