Migrate all callers from /get_server_info to /server_info (#21463)
This commit is contained in:
@@ -212,7 +212,7 @@ Please consult the documentation below and [server_args.py](https://github.com/s
|
||||
| Argument | Description | Defaults | Options |
|
||||
| --- | --- | --- | --- |
|
||||
| `--api-key` | Set API key of the server. It is also used in the OpenAI API compatible server. | `None` | Type: str |
|
||||
| `--admin-api-key` | Set **admin API key** for administrative/control endpoints (e.g., weights update, cache flush, `/get_server_info`). Endpoints marked as admin-only require `Authorization: Bearer <admin_api_key>` when this is set. | `None` | Type: str |
|
||||
| `--admin-api-key` | Set **admin API key** for administrative/control endpoints (e.g., weights update, cache flush, `/server_info`). Endpoints marked as admin-only require `Authorization: Bearer <admin_api_key>` when this is set. | `None` | Type: str |
|
||||
| `--served-model-name` | Override the model name returned by the v1/models endpoint in OpenAI API server. | `None` | Type: str |
|
||||
| `--weight-version` | Version identifier for the model weights. Defaults to 'default' if not specified. | `default` | Type: str |
|
||||
| `--chat-template` | The builtin chat template name or the path of the chat template file. This is only used for OpenAI-compatible API server. | `None` | Type: str |
|
||||
|
||||
@@ -77,7 +77,7 @@ SGLang Model Gateway is a high-performance model-routing gateway for large-scale
|
||||
|
||||
### Control Plane
|
||||
|
||||
- **Worker Manager** discovers capabilities (`/get_server_info`, `/get_model_info`), tracks load, and registers/removes workers in the shared registry.
|
||||
- **Worker Manager** discovers capabilities (`/server_info`, `/get_model_info`), tracks load, and registers/removes workers in the shared registry.
|
||||
- **Job Queue** serializes add/remove requests and exposes status (`/workers/{worker_id}`) so clients can track onboarding progress.
|
||||
- **Load Monitor** feeds cache-aware and power-of-two policies with live worker load statistics.
|
||||
- **Health Checker** continuously probes workers and updates readiness, circuit breaker state, and router metrics.
|
||||
@@ -552,7 +552,7 @@ Response:
|
||||
| `GET` | `/engine_metrics` | Engine-level metrics from workers |
|
||||
| `GET` | `/v1/models` | List available models |
|
||||
| `GET` | `/get_model_info` | Get model information |
|
||||
| `GET` | `/get_server_info` | Get server information |
|
||||
| `GET` | `/server_info` | Get server information |
|
||||
| `POST` | `/flush_cache` | Clear all caches |
|
||||
| `GET` | `/get_loads` | Get all worker loads |
|
||||
| `POST` | `/wasm` | Upload WASM module |
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"\n",
|
||||
"- `/generate` (text generation model)\n",
|
||||
"- `/get_model_info`\n",
|
||||
"- `/get_server_info`\n",
|
||||
"- `/server_info`\n",
|
||||
"- `/health`\n",
|
||||
"- `/health_generate`\n",
|
||||
"- `/flush_cache`\n",
|
||||
@@ -140,7 +140,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"url = f\"http://localhost:{port}/get_server_info\"\n",
|
||||
"url = f\"http://localhost:{port}/server_info\"\n",
|
||||
"\n",
|
||||
"response = requests.get(url)\n",
|
||||
"print_highlight(response.text)"
|
||||
|
||||
@@ -352,4 +352,4 @@ python3 -m sglang.bench_serving \
|
||||
### Notes
|
||||
|
||||
- The script raises the file descriptor soft limit (`RLIMIT_NOFILE`) to help with many concurrent connections.
|
||||
- For sglang, `/get_server_info` is queried post-run to report speculative decoding accept length when available.
|
||||
- For sglang, `/server_info` is queried post-run to report speculative decoding accept length when available.
|
||||
|
||||
@@ -1402,7 +1402,7 @@ async def benchmark(
|
||||
|
||||
if "sglang" in backend:
|
||||
server_info = requests.get(
|
||||
base_url + "/get_server_info", headers=get_auth_headers()
|
||||
base_url + "/server_info", headers=get_auth_headers()
|
||||
)
|
||||
if server_info.status_code == 200:
|
||||
server_info_json = server_info.json()
|
||||
@@ -1538,7 +1538,7 @@ async def benchmark(
|
||||
print("{:<40} {:<10.2f}".format("Max ITL (ms):", metrics.max_itl_ms))
|
||||
print("=" * 50)
|
||||
|
||||
resp = requests.get(base_url + "/get_server_info", headers=get_auth_headers())
|
||||
resp = requests.get(base_url + "/server_info", headers=get_auth_headers())
|
||||
server_info = resp.json() if resp.status_code == 200 else None
|
||||
|
||||
if (
|
||||
|
||||
@@ -67,7 +67,7 @@ class RuntimeEndpoint(BaseBackend):
|
||||
|
||||
def get_server_info(self):
|
||||
res = http_request(
|
||||
self.base_url + "/get_server_info",
|
||||
self.base_url + "/server_info",
|
||||
api_key=self.api_key,
|
||||
verify=self.verify,
|
||||
)
|
||||
@@ -531,7 +531,7 @@ class Runtime:
|
||||
|
||||
async def get_server_info(self):
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(f"{self.url}/get_server_info") as response:
|
||||
async with session.get(f"{self.url}/server_info") as response:
|
||||
if response.status == 200:
|
||||
return await response.json()
|
||||
else:
|
||||
|
||||
@@ -42,7 +42,7 @@ def run_profile(
|
||||
# Dump server args.
|
||||
file_path = Path(output_dir) / "server_args.json"
|
||||
if not file_path.exists():
|
||||
response = requests.get(url + "/get_server_info")
|
||||
response = requests.get(url + "/server_info")
|
||||
response.raise_for_status()
|
||||
server_args_data = response.json()
|
||||
with open(file_path, "w") as file:
|
||||
|
||||
@@ -609,7 +609,7 @@ def run_one_case(
|
||||
last_gen_throughput = -1
|
||||
acc_length = -1
|
||||
else:
|
||||
response = requests.get(url + "/get_server_info", timeout=DEFAULT_TIMEOUT)
|
||||
response = requests.get(url + "/server_info", timeout=DEFAULT_TIMEOUT)
|
||||
response.raise_for_status()
|
||||
server_info = response.json()
|
||||
internal_state = server_info.get("internal_states", [{}])
|
||||
@@ -793,7 +793,7 @@ def run_benchmark_internal(
|
||||
skip_max_running_requests_threshold = float("inf")
|
||||
else:
|
||||
model_name = None
|
||||
response = requests.get(base_url + "/get_server_info", timeout=DEFAULT_TIMEOUT)
|
||||
response = requests.get(base_url + "/server_info", timeout=DEFAULT_TIMEOUT)
|
||||
response.raise_for_status()
|
||||
server_info = response.json()
|
||||
if "tokenizer_path" in server_info:
|
||||
|
||||
@@ -221,7 +221,7 @@ async def _send_round(
|
||||
def _get_page_size(base_url: str) -> int:
|
||||
"""Query server for page_size used by radix cache."""
|
||||
try:
|
||||
resp = requests.get(f"{base_url}/get_server_info", timeout=10)
|
||||
resp = requests.get(f"{base_url}/server_info", timeout=10)
|
||||
resp.raise_for_status()
|
||||
info = resp.json()
|
||||
return info.get("page_size", 1)
|
||||
|
||||
@@ -208,7 +208,7 @@ def test_input_output_logprobs_match_helper(
|
||||
def test_input_output_logprobs_match_prefill_cache_hit_helper(
|
||||
base_url, ACC_THRESHOLDS, model_name, max_samples=None, max_new_tokens=8192
|
||||
):
|
||||
server_info = requests.get(base_url + "/get_server_info").json()
|
||||
server_info = requests.get(base_url + "/server_info").json()
|
||||
if server_info["disable_radix_cache"]:
|
||||
print("Radix cache is disabled, skipping test")
|
||||
return
|
||||
@@ -261,7 +261,7 @@ def test_input_output_logprobs_match_prefill_cache_hit_helper(
|
||||
def test_input_output_logprobs_match_decode_cache_hit_helper(
|
||||
base_url, ACC_THRESHOLDS, model_name, max_samples=None, max_new_tokens=8192
|
||||
):
|
||||
server_info = requests.get(base_url + "/get_server_info").json()
|
||||
server_info = requests.get(base_url + "/server_info").json()
|
||||
if server_info["disable_radix_cache"]:
|
||||
print("Radix cache is disabled, skipping test")
|
||||
return
|
||||
|
||||
@@ -324,7 +324,7 @@ class NightlyBenchmarkRunner:
|
||||
The average speculative decoding accept length, or None if not available.
|
||||
"""
|
||||
try:
|
||||
response = requests.get(f"{self.base_url}/get_server_info", timeout=10)
|
||||
response = requests.get(f"{self.base_url}/server_info", timeout=10)
|
||||
if response.status_code == 200:
|
||||
server_info = response.json()
|
||||
internal_states = server_info.get("internal_states", [])
|
||||
|
||||
@@ -119,7 +119,7 @@ def send_one_batch(base_url, num_prompts, batch_size, processor, is_multimodal):
|
||||
acc_length = results["accept_length"] or 1.0
|
||||
avg_output_token = results["total_output_tokens"] / results["completed"]
|
||||
|
||||
server_info = requests.get(base_url + "/get_server_info").json()
|
||||
server_info = requests.get(base_url + "/server_info").json()
|
||||
# We use 20% percentile instead of median on purpose
|
||||
step_time = np.percentile(
|
||||
server_info["internal_states"][0]["step_time_dict"][str(batch_size)], 20
|
||||
|
||||
@@ -407,7 +407,7 @@ Use upstream SGLang binaries to start dedicated worker processes.
|
||||
|
||||
### Worker Lifecycle & Job Queue
|
||||
- `JobQueue` handles asynchronous add/remove operations to avoid blocking clients.
|
||||
- `WorkerManager` inspects worker metadata (`/get_server_info`, `/get_model_info`), tracks load, and exposes `flush_cache` and `get_loads`.
|
||||
- `WorkerManager` inspects worker metadata (`/server_info`, `/get_model_info`), tracks load, and exposes `flush_cache` and `get_loads`.
|
||||
- Per-worker circuit breakers and health probes keep the registry healthy; load monitor feeds metrics to cache-aware and power-of-two policies.
|
||||
|
||||
### Administrative & Worker APIs
|
||||
|
||||
@@ -269,6 +269,8 @@ async def flush_cache():
|
||||
return Response(status_code=200)
|
||||
|
||||
|
||||
# TODO: Remove `/get_server_info` alias after one release-cycle deprecation window.
|
||||
@app.get("/server_info")
|
||||
@app.get("/get_server_info")
|
||||
async def get_server_info():
|
||||
prefill_infos = []
|
||||
@@ -277,10 +279,10 @@ async def get_server_info():
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
for server in lb.prefill_urls:
|
||||
server_info = await session.get(f"{server}/get_server_info")
|
||||
server_info = await session.get(f"{server}/server_info")
|
||||
prefill_infos.append(await server_info.json())
|
||||
for server in lb.decode_urls:
|
||||
server_info = await session.get(f"{server}/get_server_info")
|
||||
server_info = await session.get(f"{server}/server_info")
|
||||
info_json = await server_info.json()
|
||||
decode_infos.append(info_json)
|
||||
# Extract internal_states from decode servers
|
||||
|
||||
@@ -1223,7 +1223,7 @@ impl RouterTrait for PDRouter {
|
||||
async fn get_server_info(&self, _req: Request<Body>) -> Response {
|
||||
// Get info from the first decode server to match sglang's server info format
|
||||
// Note: We use decode workers for server info to match expected format
|
||||
self.proxy_to_first_prefill_worker("get_server_info", None)
|
||||
self.proxy_to_first_prefill_worker("server_info", None)
|
||||
.await
|
||||
}
|
||||
|
||||
|
||||
@@ -724,7 +724,7 @@ impl RouterTrait for Router {
|
||||
}
|
||||
|
||||
async fn get_server_info(&self, req: Request<Body>) -> Response {
|
||||
self.proxy_get_request(req, "get_server_info").await
|
||||
self.proxy_get_request(req, "server_info").await
|
||||
}
|
||||
|
||||
async fn get_models(&self, req: Request<Body>) -> Response {
|
||||
|
||||
@@ -610,6 +610,8 @@ pub fn build_app(
|
||||
.route("/engine_metrics", get(engine_metrics))
|
||||
.route("/v1/models", get(v1_models))
|
||||
.route("/get_model_info", get(get_model_info))
|
||||
.route("/server_info", get(get_server_info))
|
||||
// TODO: Remove `/get_server_info` alias after one release-cycle deprecation window.
|
||||
.route("/get_server_info", get(get_server_info));
|
||||
|
||||
// Build admin routes with control plane auth if configured, otherwise use simple API key auth
|
||||
|
||||
@@ -314,7 +314,7 @@ mod model_info_tests {
|
||||
|
||||
let req = Request::builder()
|
||||
.method("GET")
|
||||
.uri("/get_server_info")
|
||||
.uri("/server_info")
|
||||
.body(Body::empty())
|
||||
.unwrap();
|
||||
|
||||
@@ -445,7 +445,7 @@ mod model_info_tests {
|
||||
|
||||
let req = Request::builder()
|
||||
.method("GET")
|
||||
.uri("/get_server_info")
|
||||
.uri("/server_info")
|
||||
.body(Body::empty())
|
||||
.unwrap();
|
||||
let resp = app.clone().oneshot(req).await.unwrap();
|
||||
|
||||
@@ -82,7 +82,7 @@ impl MockWorker {
|
||||
let app = Router::new()
|
||||
.route("/health", get(health_handler))
|
||||
.route("/health_generate", get(health_generate_handler))
|
||||
.route("/get_server_info", get(server_info_handler))
|
||||
.route("/server_info", get(server_info_handler))
|
||||
.route("/get_model_info", get(model_info_handler))
|
||||
.route("/generate", post(generate_handler))
|
||||
.route("/v1/chat/completions", post(chat_completions_handler))
|
||||
|
||||
@@ -101,7 +101,7 @@ impl TlsMockWorker {
|
||||
let app = Router::new()
|
||||
.route("/health", get(health_handler))
|
||||
.route("/health_generate", get(health_generate_handler))
|
||||
.route("/get_server_info", get(server_info_handler))
|
||||
.route("/server_info", get(server_info_handler))
|
||||
.route("/generate", post(generate_handler))
|
||||
.route("/v1/chat/completions", post(chat_completions_handler))
|
||||
.with_state(config);
|
||||
|
||||
@@ -765,7 +765,7 @@ mod pd_routing_unit_tests {
|
||||
let implemented_endpoints = vec![
|
||||
("/health", "GET", true),
|
||||
("/health_generate", "GET", true), // Note: Python uses POST, we use GET
|
||||
("/get_server_info", "GET", true),
|
||||
("/server_info", "GET", true),
|
||||
("/v1/models", "GET", true),
|
||||
("/get_model_info", "GET", true),
|
||||
("/generate", "POST", true),
|
||||
|
||||
@@ -149,7 +149,7 @@ class TestQwen35FP4MTP(CustomTestCase):
|
||||
print(f"{metrics=}")
|
||||
self.assertGreaterEqual(metrics["score"], ACC_THRESHOLDS[self.model]["gsm8k"])
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -226,7 +226,7 @@ class TestQwen35FP4MTPV2(CustomTestCase):
|
||||
print(f"{metrics=}")
|
||||
self.assertGreaterEqual(metrics["score"], ACC_THRESHOLDS[self.model]["gsm8k"])
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -76,7 +76,7 @@ class TestDeepseekV32DPMTP(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -163,7 +163,7 @@ class TestDeepseekV32DPMTPV2(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -246,7 +246,7 @@ class TestDeepseekV32TPMTP(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -330,7 +330,7 @@ class TestDeepseekV32TPMTPV2(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -72,7 +72,7 @@ class TestDeepseekV3MTP(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -106,7 +106,7 @@ class TestDeepseekV32TPMTP(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -108,7 +108,7 @@ class TestDeepseekV32TPMTP(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -135,7 +135,7 @@ class TestDeepseekR1MXFP4MTP(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -87,7 +87,7 @@ class TestDeepseekV32DPMTP(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -179,7 +179,7 @@ class TestDeepseekV32TPMTP(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -72,7 +72,7 @@ class TestDeepseekV3MTP(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -76,7 +76,7 @@ class TestDeepseekV3MTPKvFp8(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -145,7 +145,7 @@ class TestMTP(CustomTestCase):
|
||||
print(f"{metrics=}")
|
||||
self.assertGreaterEqual(metrics["accuracy"], 0.92)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -397,7 +397,7 @@ class TestMTPwithTBONormal(CustomTestCase):
|
||||
print(f"{metrics=}")
|
||||
self.assertGreaterEqual(metrics["accuracy"], 0.92)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -457,7 +457,7 @@ class TestMTPwithTBOLowLatency(CustomTestCase):
|
||||
print(f"{metrics=}")
|
||||
self.assertGreaterEqual(metrics["accuracy"], 0.92)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -146,7 +146,7 @@ class TestQwen3CoderNextMTP(CustomTestCase):
|
||||
metrics = run_eval_few_shot_gsm8k(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -64,7 +64,7 @@ class TestAscendWarmups(CustomTestCase):
|
||||
|
||||
def test_warmups_with_voice_chat(self):
|
||||
# Call the get_server_info API to verify that the warmups parameter configuration takes effect.
|
||||
response = requests.get(f"{DEFAULT_URL_FOR_TEST}/get_server_info")
|
||||
response = requests.get(f"{DEFAULT_URL_FOR_TEST}/server_info")
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual("voice_chat", response.json().get("warmups"))
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ class TestHybridAttnBackendBase(CustomTestCase):
|
||||
self.assertGreater(metrics["score"], self.accuracy_threshold)
|
||||
|
||||
if self.speculative_decode:
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -500,7 +500,7 @@ class TestSRTEndpoint(CustomTestCase):
|
||||
self.assertEqual(send_and_check_cached_tokens(range(0, 11000)), 10000)
|
||||
|
||||
def test_get_server_info(self):
|
||||
response = requests.get(self.base_url + "/get_server_info")
|
||||
response = requests.get(self.base_url + "/server_info")
|
||||
response_json = response.json()
|
||||
|
||||
max_total_num_tokens = response_json["max_total_num_tokens"]
|
||||
@@ -630,7 +630,7 @@ class TestSRTEndpoint(CustomTestCase):
|
||||
tp = ThreadPoolExecutor(max_workers=30)
|
||||
|
||||
def s():
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
server_info.json()
|
||||
|
||||
futures = []
|
||||
|
||||
@@ -57,13 +57,13 @@ class TestDataParallelism(CustomTestCase, GSM8KMixin):
|
||||
assert response.status_code == 200
|
||||
|
||||
def test_get_memory_pool_size(self):
|
||||
# use `get_server_info` instead since `get_memory_pool_size` is merged into `get_server_info`
|
||||
response = requests.get(self.base_url + "/get_server_info")
|
||||
# use `server_info` instead since `get_memory_pool_size` is merged into `server_info`
|
||||
response = requests.get(self.base_url + "/server_info")
|
||||
assert response.status_code == 200
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
response = requests.get(self.base_url + "/get_server_info")
|
||||
response = requests.get(self.base_url + "/server_info")
|
||||
assert response.status_code == 200
|
||||
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ class TestDPAttentionDP2TP2DeepseekV3MTP(
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -127,7 +127,7 @@ class TestDPAttentionDP2TP2DeepseekV3MTP(
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -148,7 +148,7 @@ class TestDeepseekMTP(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.92)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -412,7 +412,7 @@ class TestMTP(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -486,7 +486,7 @@ class TestMTPWithTBO(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -562,7 +562,7 @@ class TestMTPWithTPAttnAndTBO(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -199,7 +199,7 @@ class TestDeepseekV3MTP(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -115,7 +115,7 @@ class TestFlashinferMLAMTP(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info").json()
|
||||
server_info = requests.get(self.base_url + "/server_info").json()
|
||||
avg_spec_accept_length = server_info["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -117,7 +117,7 @@ class TestDeepseekV3MTPChannelInt8(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -221,7 +221,7 @@ class TestDeepseekV3MTPBlockInt8(CustomTestCase):
|
||||
|
||||
self.assertGreater(metrics["score"], 0.60)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -84,7 +84,7 @@ class TestDeepseekV32FP4DPSpecV2(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -175,7 +175,7 @@ class TestDeepseekV32FP4TPSpecV2(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -106,7 +106,7 @@ class TestDeepseekV3W4Afp8Mtp(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -87,7 +87,7 @@ class TestEAGLE3EngineDPAttention(CustomTestCase):
|
||||
metrics = run_eval(args)
|
||||
print(f"{metrics=}")
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
server_data = server_info.json()
|
||||
|
||||
# Try to get avg_spec_accept_length
|
||||
|
||||
@@ -33,7 +33,7 @@ def test_gsm8k(base_url: str, model: str):
|
||||
num_threads=128,
|
||||
)
|
||||
metrics = run_eval(args)
|
||||
server_info = requests.get(base_url + "/get_server_info")
|
||||
server_info = requests.get(base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
@@ -113,7 +113,7 @@ class TestStandaloneSpeculativeDecodingBase(CustomTestCase):
|
||||
metric_key = "score"
|
||||
self.assertGreater(metrics[metric_key], self.accuracy_threshold)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
@@ -176,7 +176,7 @@ class TestStandaloneV2SpeculativeDecodingBase(CustomTestCase):
|
||||
metric_key = "score"
|
||||
self.assertGreater(metrics[metric_key], self.accuracy_threshold)
|
||||
|
||||
server_info = requests.get(self.base_url + "/get_server_info")
|
||||
server_info = requests.get(self.base_url + "/server_info")
|
||||
avg_spec_accept_length = server_info.json()["internal_states"][0][
|
||||
"avg_spec_accept_length"
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user