[router][grpc] Support E2E non-stream chat completions (#10980)
This commit is contained in:
@@ -321,14 +321,14 @@ class SGLangSchedulerServicer(sglang_scheduler_pb2_grpc.SglangSchedulerServicer)
|
||||
logger.info(f"Sending health check request to request manager...")
|
||||
|
||||
# Submit and wait for response
|
||||
output_queue = await self.request_manager.generate_request(
|
||||
output_generator = self.request_manager.generate_request(
|
||||
health_request, request_id=rid
|
||||
)
|
||||
|
||||
try:
|
||||
# Wait for response with configurable timeout
|
||||
# Get first response with timeout
|
||||
response = await asyncio.wait_for(
|
||||
output_queue.get(), timeout=HEALTH_CHECK_TIMEOUT
|
||||
output_generator.__anext__(), timeout=HEALTH_CHECK_TIMEOUT
|
||||
)
|
||||
|
||||
# Clean up
|
||||
@@ -492,13 +492,32 @@ class SGLangSchedulerServicer(sglang_scheduler_pb2_grpc.SglangSchedulerServicer)
|
||||
) -> sglang_scheduler_pb2.GenerateResponse:
|
||||
"""Create a completion response."""
|
||||
|
||||
# Determine finish reason
|
||||
finish_reason = sglang_scheduler_pb2.GenerateComplete.STOP
|
||||
# Extract meta info and finish reason details
|
||||
meta_info = output.get("meta_info", {})
|
||||
if meta_info.get("finish_reason") == "length":
|
||||
finish_reason = sglang_scheduler_pb2.GenerateComplete.LENGTH
|
||||
elif meta_info.get("finish_reason") == "eos_token":
|
||||
finish_reason = sglang_scheduler_pb2.GenerateComplete.EOS_TOKEN
|
||||
finish_reason_data = meta_info.get("finish_reason")
|
||||
|
||||
# Determine finish reason, default is stop
|
||||
finish_reason = "stop"
|
||||
if finish_reason_data:
|
||||
if isinstance(finish_reason_data, dict):
|
||||
finish_reason_type = finish_reason_data.get("type")
|
||||
else:
|
||||
# Handle legacy string format
|
||||
finish_reason_type = finish_reason_data
|
||||
|
||||
if finish_reason_type == "length":
|
||||
finish_reason = "length"
|
||||
elif finish_reason_type == "abort":
|
||||
finish_reason = "abort"
|
||||
|
||||
# Extract matched_stop information
|
||||
matched_stop_kwargs = {}
|
||||
if isinstance(finish_reason_data, dict) and "matched" in finish_reason_data:
|
||||
matched = finish_reason_data["matched"]
|
||||
if isinstance(matched, int):
|
||||
matched_stop_kwargs["matched_token_id"] = matched
|
||||
elif isinstance(matched, str):
|
||||
matched_stop_kwargs["matched_stop_str"] = matched
|
||||
|
||||
return sglang_scheduler_pb2.GenerateResponse(
|
||||
request_id=request_id,
|
||||
@@ -510,6 +529,7 @@ class SGLangSchedulerServicer(sglang_scheduler_pb2_grpc.SglangSchedulerServicer)
|
||||
"completion_tokens", len(output.get("token_ids", []))
|
||||
),
|
||||
cached_tokens=meta_info.get("cached_tokens", 0),
|
||||
**matched_stop_kwargs,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user