From fb29e7f0d9bf1da37a99f6727a20215ba9f4ea79 Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:05:47 +0800 Subject: [PATCH 01/10] more --- sgl-model-gateway/src/routers/error.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sgl-model-gateway/src/routers/error.rs b/sgl-model-gateway/src/routers/error.rs index c41a865054aa..18c068084ba0 100644 --- a/sgl-model-gateway/src/routers/error.rs +++ b/sgl-model-gateway/src/routers/error.rs @@ -56,6 +56,13 @@ fn create_error(status_code: StatusCode, error_type: &str, message: impl Into &'static str { + match status_code { + StatusCode::BAD_REQUEST => "bad_request", + StatusCode::INTERNAL_SERVER_ERROR => "internal_server_error", + } +} + #[cfg(test)] mod tests { use super::*; From b39bc42ac2165d4e50609439ae330c53a9fe1258 Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:07:32 +0800 Subject: [PATCH 02/10] more --- sgl-model-gateway/src/routers/error.rs | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/sgl-model-gateway/src/routers/error.rs b/sgl-model-gateway/src/routers/error.rs index 18c068084ba0..20294a408d44 100644 --- a/sgl-model-gateway/src/routers/error.rs +++ b/sgl-model-gateway/src/routers/error.rs @@ -58,8 +58,71 @@ fn create_error(status_code: StatusCode, error_type: &str, message: impl Into &'static str { match status_code { + StatusCode::CONTINUE => "continue", + StatusCode::SWITCHING_PROTOCOLS => "switching_protocols", + StatusCode::PROCESSING => "processing", + StatusCode::OK => "ok", + StatusCode::CREATED => "created", + StatusCode::ACCEPTED => "accepted", + StatusCode::NON_AUTHORITATIVE_INFORMATION => "non_authoritative_information", + StatusCode::NO_CONTENT => "no_content", + StatusCode::RESET_CONTENT => "reset_content", + StatusCode::PARTIAL_CONTENT => "partial_content", + StatusCode::MULTI_STATUS => "multi_status", + StatusCode::ALREADY_REPORTED => "already_reported", + StatusCode::IM_USED => "im_used", + + StatusCode::MULTIPLE_CHOICES => "multiple_choices", + StatusCode::MOVED_PERMANENTLY => "moved_permanently", + StatusCode::FOUND => "found", + StatusCode::SEE_OTHER => "see_other", + StatusCode::NOT_MODIFIED => "not_modified", + StatusCode::USE_PROXY => "use_proxy", + StatusCode::TEMPORARY_REDIRECT => "temporary_redirect", + StatusCode::PERMANENT_REDIRECT => "permanent_redirect", + StatusCode::BAD_REQUEST => "bad_request", + StatusCode::UNAUTHORIZED => "unauthorized", + StatusCode::PAYMENT_REQUIRED => "payment_required", + StatusCode::FORBIDDEN => "forbidden", + StatusCode::NOT_FOUND => "not_found", + StatusCode::METHOD_NOT_ALLOWED => "method_not_allowed", + StatusCode::NOT_ACCEPTABLE => "not_acceptable", + StatusCode::PROXY_AUTHENTICATION_REQUIRED => "proxy_authentication_required", + StatusCode::REQUEST_TIMEOUT => "request_timeout", + StatusCode::CONFLICT => "conflict", + StatusCode::GONE => "gone", + StatusCode::LENGTH_REQUIRED => "length_required", + StatusCode::PRECONDITION_FAILED => "precondition_failed", + StatusCode::PAYLOAD_TOO_LARGE => "payload_too_large", + StatusCode::URI_TOO_LONG => "uri_too_long", + StatusCode::UNSUPPORTED_MEDIA_TYPE => "unsupported_media_type", + StatusCode::RANGE_NOT_SATISFIABLE => "range_not_satisfiable", + StatusCode::EXPECTATION_FAILED => "expectation_failed", + StatusCode::IM_A_TEAPOT => "im_a_teapot", + StatusCode::MISDIRECTED_REQUEST => "misdirected_request", + StatusCode::UNPROCESSABLE_ENTITY => "unprocessable_entity", + StatusCode::LOCKED => "locked", + StatusCode::FAILED_DEPENDENCY => "failed_dependency", + StatusCode::UPGRADE_REQUIRED => "upgrade_required", + StatusCode::PRECONDITION_REQUIRED => "precondition_required", + StatusCode::TOO_MANY_REQUESTS => "too_many_requests", + StatusCode::REQUEST_HEADER_FIELDS_TOO_LARGE => "request_header_fields_too_large", + StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS => "unavailable_for_legal_reasons", + StatusCode::INTERNAL_SERVER_ERROR => "internal_server_error", + StatusCode::NOT_IMPLEMENTED => "not_implemented", + StatusCode::BAD_GATEWAY => "bad_gateway", + StatusCode::SERVICE_UNAVAILABLE => "service_unavailable", + StatusCode::GATEWAY_TIMEOUT => "gateway_timeout", + StatusCode::HTTP_VERSION_NOT_SUPPORTED => "http_version_not_supported", + StatusCode::VARIANT_ALSO_NEGOTIATES => "variant_also_negotiates", + StatusCode::INSUFFICIENT_STORAGE => "insufficient_storage", + StatusCode::LOOP_DETECTED => "loop_detected", + StatusCode::NOT_EXTENDED => "not_extended", + StatusCode::NETWORK_AUTHENTICATION_REQUIRED => "network_authentication_required", + + _ => "unknown_status_code", } } From 75f873ee500ed3c5eadb33a22d5592e7ebc81514 Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:08:03 +0800 Subject: [PATCH 03/10] more --- sgl-model-gateway/src/routers/error.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sgl-model-gateway/src/routers/error.rs b/sgl-model-gateway/src/routers/error.rs index 20294a408d44..505583b90023 100644 --- a/sgl-model-gateway/src/routers/error.rs +++ b/sgl-model-gateway/src/routers/error.rs @@ -58,9 +58,13 @@ fn create_error(status_code: StatusCode, error_type: &str, message: impl Into &'static str { match status_code { + // 1xx StatusCode::CONTINUE => "continue", StatusCode::SWITCHING_PROTOCOLS => "switching_protocols", StatusCode::PROCESSING => "processing", + StatusCode::EARLY_HINTS => "early_hints", + + // 2xx StatusCode::OK => "ok", StatusCode::CREATED => "created", StatusCode::ACCEPTED => "accepted", @@ -72,6 +76,7 @@ fn status_code_to_str(status_code: StatusCode) -> &'static str { StatusCode::ALREADY_REPORTED => "already_reported", StatusCode::IM_USED => "im_used", + // 3xx StatusCode::MULTIPLE_CHOICES => "multiple_choices", StatusCode::MOVED_PERMANENTLY => "moved_permanently", StatusCode::FOUND => "found", @@ -81,6 +86,7 @@ fn status_code_to_str(status_code: StatusCode) -> &'static str { StatusCode::TEMPORARY_REDIRECT => "temporary_redirect", StatusCode::PERMANENT_REDIRECT => "permanent_redirect", + // 4xx StatusCode::BAD_REQUEST => "bad_request", StatusCode::UNAUTHORIZED => "unauthorized", StatusCode::PAYMENT_REQUIRED => "payment_required", @@ -110,6 +116,7 @@ fn status_code_to_str(status_code: StatusCode) -> &'static str { StatusCode::REQUEST_HEADER_FIELDS_TOO_LARGE => "request_header_fields_too_large", StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS => "unavailable_for_legal_reasons", + // 5xx StatusCode::INTERNAL_SERVER_ERROR => "internal_server_error", StatusCode::NOT_IMPLEMENTED => "not_implemented", StatusCode::BAD_GATEWAY => "bad_gateway", From 81dcc067472b191033ce3080f07aa225e0f9ffa7 Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:09:01 +0800 Subject: [PATCH 04/10] more --- sgl-model-gateway/src/routers/error.rs | 28 ++++++++------------------ 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/sgl-model-gateway/src/routers/error.rs b/sgl-model-gateway/src/routers/error.rs index 505583b90023..df0e218b1c6e 100644 --- a/sgl-model-gateway/src/routers/error.rs +++ b/sgl-model-gateway/src/routers/error.rs @@ -6,49 +6,37 @@ use axum::{ use serde_json::json; pub fn internal_error(message: impl Into) -> Response { - create_error(StatusCode::INTERNAL_SERVER_ERROR, "internal_error", message) + create_error(StatusCode::INTERNAL_SERVER_ERROR, message) } pub fn bad_request(message: impl Into) -> Response { - create_error(StatusCode::BAD_REQUEST, "invalid_request_error", message) + create_error(StatusCode::BAD_REQUEST, message) } pub fn not_found(message: impl Into) -> Response { - create_error(StatusCode::NOT_FOUND, "invalid_request_error", message) + create_error(StatusCode::NOT_FOUND, message) } pub fn service_unavailable(message: impl Into) -> Response { - create_error( - StatusCode::SERVICE_UNAVAILABLE, - "service_unavailable", - message, - ) + create_error(StatusCode::SERVICE_UNAVAILABLE, message) } pub fn failed_dependency(message: impl Into) -> Response { - create_error( - StatusCode::FAILED_DEPENDENCY, - "external_connector_error", - message, - ) + create_error(StatusCode::FAILED_DEPENDENCY, message) } pub fn not_implemented(message: impl Into) -> Response { - create_error( - StatusCode::NOT_IMPLEMENTED, - "not_implemented_error", - message, - ) + create_error(StatusCode::NOT_IMPLEMENTED, message) } -fn create_error(status_code: StatusCode, error_type: &str, message: impl Into) -> Response { +fn create_error(status_code: StatusCode, message: impl Into) -> Response { let msg = message.into(); ( status_code, Json(json!({ "error": { "message": msg, - "type": error_type, + "type": status_code_to_str(status_code), "code": status_code.as_u16() } })), From 4a61d38b117ca26c58b15d8c03379faafb110676 Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:09:30 +0800 Subject: [PATCH 05/10] more --- sgl-model-gateway/src/routers/error.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/sgl-model-gateway/src/routers/error.rs b/sgl-model-gateway/src/routers/error.rs index df0e218b1c6e..bfe29641f5c0 100644 --- a/sgl-model-gateway/src/routers/error.rs +++ b/sgl-model-gateway/src/routers/error.rs @@ -29,15 +29,18 @@ pub fn not_implemented(message: impl Into) -> Response { create_error(StatusCode::NOT_IMPLEMENTED, message) } -fn create_error(status_code: StatusCode, message: impl Into) -> Response { - let msg = message.into(); +fn create_error( + status: StatusCode, + code: impl Into, + message: impl Into, +) -> Response { ( - status_code, + status, Json(json!({ "error": { - "message": msg, - "type": status_code_to_str(status_code), - "code": status_code.as_u16() + "message": message.into(), + "type": status_code_to_str(status), + "code": code.into(), } })), ) From 271018f95339ce06707d5f226a8f9042e03c44da Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:11:35 +0800 Subject: [PATCH 06/10] more --- sgl-model-gateway/src/routers/error.rs | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/sgl-model-gateway/src/routers/error.rs b/sgl-model-gateway/src/routers/error.rs index bfe29641f5c0..6f1bb9b8e213 100644 --- a/sgl-model-gateway/src/routers/error.rs +++ b/sgl-model-gateway/src/routers/error.rs @@ -5,28 +5,28 @@ use axum::{ }; use serde_json::json; -pub fn internal_error(message: impl Into) -> Response { - create_error(StatusCode::INTERNAL_SERVER_ERROR, message) +pub fn internal_error(code: impl Into, message: impl Into) -> Response { + create_error(StatusCode::INTERNAL_SERVER_ERROR, code, message) } -pub fn bad_request(message: impl Into) -> Response { - create_error(StatusCode::BAD_REQUEST, message) +pub fn bad_request(code: impl Into, message: impl Into) -> Response { + create_error(StatusCode::BAD_REQUEST, code, message) } -pub fn not_found(message: impl Into) -> Response { - create_error(StatusCode::NOT_FOUND, message) +pub fn not_found(code: impl Into, message: impl Into) -> Response { + create_error(StatusCode::NOT_FOUND, code, message) } -pub fn service_unavailable(message: impl Into) -> Response { - create_error(StatusCode::SERVICE_UNAVAILABLE, message) +pub fn service_unavailable(code: impl Into, message: impl Into) -> Response { + create_error(StatusCode::SERVICE_UNAVAILABLE, code, message) } -pub fn failed_dependency(message: impl Into) -> Response { - create_error(StatusCode::FAILED_DEPENDENCY, message) +pub fn failed_dependency(code: impl Into, message: impl Into) -> Response { + create_error(StatusCode::FAILED_DEPENDENCY, code, message) } -pub fn not_implemented(message: impl Into) -> Response { - create_error(StatusCode::NOT_IMPLEMENTED, message) +pub fn not_implemented(code: impl Into, message: impl Into) -> Response { + create_error(StatusCode::NOT_IMPLEMENTED, code, message) } fn create_error( @@ -130,31 +130,31 @@ mod tests { #[test] fn test_internal_error_string() { - let response = internal_error("Test error"); + let response = internal_error("test_error", "Test error"); assert_eq!(response.status(), StatusCode::INTERNAL_SERVER_ERROR); } #[test] fn test_internal_error_format() { - let response = internal_error(format!("Error: {}", 42)); + let response = internal_error("test_error", format!("Error: {}", 42)); assert_eq!(response.status(), StatusCode::INTERNAL_SERVER_ERROR); } #[test] fn test_bad_request() { - let response = bad_request("Invalid input"); + let response = bad_request("invalid_input", "Invalid input"); assert_eq!(response.status(), StatusCode::BAD_REQUEST); } #[test] fn test_not_found() { - let response = not_found("Resource not found"); + let response = not_found("resource_not_found", "Resource not found"); assert_eq!(response.status(), StatusCode::NOT_FOUND); } #[test] fn test_service_unavailable() { - let response = service_unavailable("No workers"); + let response = service_unavailable("no_workers", "No workers"); assert_eq!(response.status(), StatusCode::SERVICE_UNAVAILABLE); } } From 0e45b71406e7e7444990fde270058b26814b2986 Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:17:49 +0800 Subject: [PATCH 07/10] more --- .../grpc/common/response_collection.rs | 2 +- .../routers/grpc/common/responses/utils.rs | 1 + .../grpc/common/stages/client_acquisition.rs | 3 +- .../grpc/common/stages/dispatch_metadata.rs | 2 +- .../grpc/common/stages/request_execution.rs | 32 ++++++++++-------- .../grpc/common/stages/worker_selection.rs | 24 +++++++++----- .../src/routers/grpc/harmony/processor.rs | 14 ++++---- .../src/routers/grpc/harmony/responses.rs | 33 ++++++++++++------- .../grpc/harmony/stages/preparation.rs | 33 ++++++++++++------- .../grpc/harmony/stages/request_building.rs | 10 +++--- .../harmony/stages/response_processing.rs | 9 ++--- .../src/routers/grpc/pipeline.rs | 17 +++++----- .../src/routers/grpc/regular/processor.rs | 22 ++++++++----- .../grpc/regular/responses/handlers.rs | 17 ++++++---- .../grpc/regular/responses/tool_loop.rs | 8 ++--- .../grpc/regular/stages/chat/preparation.rs | 6 ++-- .../regular/stages/chat/request_building.rs | 8 ++--- .../stages/chat/response_processing.rs | 6 ++-- .../regular/stages/generate/preparation.rs | 2 +- .../stages/generate/request_building.rs | 8 ++--- .../stages/generate/response_processing.rs | 6 ++-- .../grpc/regular/stages/preparation.rs | 1 + .../grpc/regular/stages/request_building.rs | 1 + .../regular/stages/response_processing.rs | 1 + sgl-model-gateway/src/routers/grpc/utils.rs | 25 ++++++++------ 25 files changed, 172 insertions(+), 119 deletions(-) diff --git a/sgl-model-gateway/src/routers/grpc/common/response_collection.rs b/sgl-model-gateway/src/routers/grpc/common/response_collection.rs index 2c4af123fe21..9923087e2caa 100644 --- a/sgl-model-gateway/src/routers/grpc/common/response_collection.rs +++ b/sgl-model-gateway/src/routers/grpc/common/response_collection.rs @@ -58,7 +58,7 @@ pub async fn collect_responses( }; if all_responses.is_empty() { - return Err(error::internal_error("No responses from server")); + return Err(error::internal_error("no_responses_from_server", "No responses from server")); } Ok(all_responses) diff --git a/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs b/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs index e85aab4566c2..cdde4ef68927 100644 --- a/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs +++ b/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs @@ -49,6 +49,7 @@ pub async fn ensure_mcp_connection( "Failed to connect to MCP server" ); return Err(error::failed_dependency( + "failed_to_connect_to_mcp_server", "Failed to connect to MCP server. Check server_url and authorization.", )); } diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs b/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs index ca4661992051..05ed3c1bef70 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs @@ -24,7 +24,7 @@ impl PipelineStage for ClientAcquisitionStage { function = "ClientAcquisitionStage::execute", "Worker selection stage not completed" ); - error::internal_error("Worker selection not completed") + error::internal_error("worker_selection_not_completed", "Worker selection not completed") })?; let clients = match workers { @@ -43,6 +43,7 @@ impl PipelineStage for ClientAcquisitionStage { "vLLM backend does not support dual (PD disaggregated) mode" ); return Err(error::bad_request( + "vllm_backend_does_not_support_pd_mode", "vLLM backend does not support prefill/decode disaggregated mode. \ Please use runtime_type: sglang for PD mode, or use a regular (non-PD) worker configuration." )); diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/dispatch_metadata.rs b/sgl-model-gateway/src/routers/grpc/common/stages/dispatch_metadata.rs index c14b0c972558..3ec211dcb419 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/dispatch_metadata.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/dispatch_metadata.rs @@ -23,7 +23,7 @@ impl PipelineStage for DispatchMetadataStage { function = "DispatchMetadataStage::execute", "Proto request not built" ); - error::internal_error("Proto request not built") + error::internal_error("proto_request_not_built", "Proto request not built") })?; let request_id = proto_request.request_id().to_string(); diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs b/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs index 558534e7d891..59a5bca95731 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs @@ -42,7 +42,7 @@ impl PipelineStage for RequestExecutionStage { function = "RequestExecutionStage::execute", "Proto request not built" ); - error::internal_error("Proto request not built") + error::internal_error("proto_request_not_built", "Proto request not built") })?; let clients = ctx.state.clients.as_mut().ok_or_else(|| { @@ -50,7 +50,7 @@ impl PipelineStage for RequestExecutionStage { function = "RequestExecutionStage::execute", "Client acquisition not completed" ); - error::internal_error("Client acquisition not completed") + error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") })?; // Extract dispatch metadata for tracing span @@ -108,7 +108,7 @@ impl RequestExecutionStage { function = "execute_single", "Expected single client but got dual" ); - error::internal_error("Expected single client but got dual") + error::internal_error("expected_single_client_got_dual", "Expected single client but got dual") })?; let stream = client.generate(proto_request).await.map_err(|e| { @@ -117,7 +117,7 @@ impl RequestExecutionStage { error = %e, "Failed to start generation" ); - error::internal_error(format!("Failed to start generation: {}", e)) + error::internal_error("failed_to_start_generation", format!("Failed to start generation: {}", e)) })?; Ok(ExecutionResult::Single { stream }) @@ -133,7 +133,7 @@ impl RequestExecutionStage { function = "execute_dual_dispatch", "Expected dual clients but got single" ); - error::internal_error("Expected dual clients but got single") + error::internal_error("expected_dual_clients_got_single", "Expected dual clients but got single") })?; let prefill_request = proto_request.clone_inner(); @@ -153,10 +153,13 @@ impl RequestExecutionStage { error = %e, "Prefill worker failed to start" ); - return Err(error::internal_error(format!( - "Prefill worker failed to start: {}", - e - ))); + return Err(error::internal_error( + "prefill_worker_failed_to_start", + format!( + "Prefill worker failed to start: {}", + e + ) + )); } }; @@ -169,10 +172,13 @@ impl RequestExecutionStage { error = %e, "Decode worker failed to start" ); - return Err(error::internal_error(format!( - "Decode worker failed to start: {}", - e - ))); + return Err(error::internal_error( + "decode_worker_failed_to_start", + format!( + "Decode worker failed to start: {}", + e + ) + )); } }; diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs b/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs index 9ae600a2251a..32a3dd9f83bd 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs @@ -52,7 +52,7 @@ impl PipelineStage for WorkerSelectionStage { function = "WorkerSelectionStage::execute", "Preparation stage not completed" ); - error::internal_error("Preparation stage not completed") + error::internal_error("preparation_stage_not_completed", "Preparation stage not completed") })?; // For Harmony, use selection_text produced during Harmony encoding @@ -74,10 +74,13 @@ impl PipelineStage for WorkerSelectionStage { model_id = ?ctx.input.model_id, "No available workers for model" ); - return Err(error::service_unavailable(format!( - "No available workers for model: {:?}", - ctx.input.model_id - ))); + return Err(error::service_unavailable( + "no_available_workers", + format!( + "No available workers for model: {:?}", + ctx.input.model_id + ) + )); } } } @@ -91,10 +94,13 @@ impl PipelineStage for WorkerSelectionStage { model_id = ?ctx.input.model_id, "No available PD worker pairs for model" ); - return Err(error::service_unavailable(format!( - "No available PD worker pairs for model: {:?}", - ctx.input.model_id - ))); + return Err(error::service_unavailable( + "no_available_pd_worker_pairs", + format!( + "No available PD worker pairs for model: {:?}", + ctx.input.model_id + ) + )); } } } diff --git a/sgl-model-gateway/src/routers/grpc/harmony/processor.rs b/sgl-model-gateway/src/routers/grpc/harmony/processor.rs index b0c84b9e0515..61358fce6f9e 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/processor.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/processor.rs @@ -47,7 +47,7 @@ impl HarmonyResponseProcessor { // Collect all completed responses (one per choice) let all_responses = response_collection::collect_responses(execution_result, false).await?; if all_responses.is_empty() { - return Err(error::internal_error("No responses from server")); + return Err(error::internal_error("no_responses_from_server", "No responses from server")); } // Build choices by parsing output with HarmonyParserAdapter @@ -72,7 +72,7 @@ impl HarmonyResponseProcessor { error = %e, "Failed to create Harmony parser" ); - error::internal_error(format!("Failed to create Harmony parser: {}", e)) + error::internal_error("failed_to_create_harmony_parser", format!("Failed to create Harmony parser: {}", e)) })?; // Parse Harmony channels with finish_reason and matched_stop @@ -88,7 +88,7 @@ impl HarmonyResponseProcessor { error = %e, "Harmony parsing failed on complete response" ); - error::internal_error(format!("Harmony parsing failed: {}", e)) + error::internal_error("harmony_parsing_failed", format!("Harmony parsing failed: {}", e)) })?; // Build response message (assistant) @@ -187,13 +187,13 @@ impl HarmonyResponseProcessor { // Collect all completed responses let all_responses = response_collection::collect_responses(execution_result, false).await?; if all_responses.is_empty() { - return Err(error::internal_error("No responses from server")); + return Err(error::internal_error("no_responses_from_server", "No responses from server")); } // For Responses API, we only process the first response (n=1) let complete = all_responses .first() - .ok_or_else(|| error::internal_error("No complete response"))?; + .ok_or_else(|| error::internal_error("no_complete_response", "No complete response"))?; // Parse Harmony channels let mut parser = HarmonyParserAdapter::new().map_err(|e| { @@ -202,7 +202,7 @@ impl HarmonyResponseProcessor { error = %e, "Failed to create Harmony parser" ); - error::internal_error(format!("Failed to create Harmony parser: {}", e)) + error::internal_error("failed_to_create_harmony_parser", format!("Failed to create Harmony parser: {}", e)) })?; // Convert matched_stop from proto to JSON @@ -227,7 +227,7 @@ impl HarmonyResponseProcessor { error = %e, "Harmony parsing failed on complete response" ); - error::internal_error(format!("Harmony parsing failed: {}", e)) + error::internal_error("harmony_parsing_failed", format!("Harmony parsing failed: {}", e)) })?; // VALIDATION: Check if model incorrectly generated Tool role messages diff --git a/sgl-model-gateway/src/routers/grpc/harmony/responses.rs b/sgl-model-gateway/src/routers/grpc/harmony/responses.rs index 94f8feceda8e..0d3aa5d9bde5 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/responses.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/responses.rs @@ -332,10 +332,13 @@ async fn execute_with_mcp_loop( max_iterations = MAX_TOOL_ITERATIONS, "Maximum tool iterations exceeded" ); - return Err(error::internal_error(format!( - "Maximum tool iterations ({}) exceeded", - MAX_TOOL_ITERATIONS - ))); + return Err(error::internal_error( + "maximum_tool_iterations_exceeded", + format!( + "Maximum tool iterations ({}) exceeded", + MAX_TOOL_ITERATIONS + ) + )); } debug!( @@ -1176,10 +1179,13 @@ async fn execute_mcp_tools( error = %e, "Failed to parse tool arguments JSON" ); - error::internal_error(format!( - "Invalid tool arguments JSON for tool '{}': {}", - tool_call.function.name, e - )) + error::internal_error( + "invalid_tool_arguments_json", + format!( + "Invalid tool arguments JSON for tool '{}': {}", + tool_call.function.name, e + ) + ) })?; // Execute tool via MCP manager @@ -1544,10 +1550,13 @@ async fn load_previous_messages( error = %e, "Failed to load previous response chain from storage" ); - error::internal_error(format!( - "Failed to load previous response chain for {}: {}", - prev_id_str, e - )) + error::internal_error( + "failed_to_load_previous_response_chain", + format!( + "Failed to load previous response chain for {}: {}", + prev_id_str, e + ) + ) })?; // Build conversation history from stored responses diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs index 0a05f65acb89..712e86026ca8 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs @@ -65,6 +65,7 @@ impl PipelineStage for HarmonyPreparationStage { "Unsupported request type for Harmony pipeline" ); return Err(error::bad_request( + "unsupported_request_type_for_harmony", "Only Chat and Responses requests supported in Harmony pipeline".to_string(), )); } @@ -91,6 +92,7 @@ impl HarmonyPreparationStage { "logprobs requested but not supported for Harmony models" ); return Err(error::bad_request( + "logprobs_not_supported_for_harmony", "logprobs are not supported for Harmony models".to_string(), )); } @@ -112,7 +114,7 @@ impl HarmonyPreparationStage { error = %e, "Harmony build failed for chat request" ); - error::bad_request(format!("Harmony build failed: {}", e)) + error::bad_request("harmony_build_failed", format!("Harmony build failed: {}", e)) })?; // Step 4: Store results @@ -175,6 +177,7 @@ impl HarmonyPreparationStage { "Conflicting constraints: both tool_choice and text format specified" ); return Err(error::bad_request( + "conflicting_constraints", "Cannot use both tool_choice (required/function) and text format (json_object/json_schema) simultaneously".to_string(), )); } @@ -188,7 +191,7 @@ impl HarmonyPreparationStage { error = %e, "Harmony build failed for responses request" ); - error::bad_request(format!("Harmony build failed: {}", e)) + error::bad_request("harmony_build_failed", format!("Harmony build failed: {}", e)) })?; // Step 4: Store results with constraint @@ -230,7 +233,7 @@ impl HarmonyPreparationStage { error = %e, "Failed to build text format structural tag for JsonObject" ); - Box::new(error::internal_error(e)) + Box::new(error::internal_error("failed_to_build_text_format_tag", e)) })?; Ok(Some(("structural_tag".to_string(), tag))) } @@ -241,7 +244,7 @@ impl HarmonyPreparationStage { error = %e, "Failed to build text format structural tag for JsonSchema" ); - Box::new(error::internal_error(e)) + Box::new(error::internal_error("failed_to_build_text_format_tag", e)) })?; Ok(Some(("structural_tag".to_string(), tag))) } @@ -310,10 +313,13 @@ impl HarmonyPreparationStage { tool_name = %tool_name, "Specified tool not found in tools list" ); - return Err(Box::new(error::bad_request(format!( - "Tool '{}' not found in tools list", - tool_name - )))); + return Err(Box::new(error::bad_request( + "tool_not_found", + format!( + "Tool '{}' not found in tools list", + tool_name + ) + ))); } _ => {} } @@ -362,10 +368,13 @@ impl HarmonyPreparationStage { error = %e, "Failed to serialize structural tag" ); - Box::new(error::internal_error(format!( - "Failed to serialize structural tag: {}", - e - ))) + Box::new(error::internal_error( + "failed_to_serialize_structural_tag", + format!( + "Failed to serialize structural tag: {}", + e + ) + )) }) } } diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs index 199c368130be..e39ea2e18a62 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs @@ -38,7 +38,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { function = "HarmonyRequestBuildingStage::execute", "Preparation stage not completed" ); - error::internal_error("Preparation not completed") + error::internal_error("preparation_not_completed", "Preparation not completed") })?; // Get clients @@ -47,7 +47,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { function = "HarmonyRequestBuildingStage::execute", "Client acquisition stage not completed" ); - error::internal_error("Client acquisition not completed") + error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") })?; let builder_client = match clients { ClientSelection::Single { client } => client, @@ -57,6 +57,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { // Harmony model support not yet implemented for vLLM if builder_client.is_vllm() { return Err(error::not_implemented( + "harmony_not_implemented_for_vllm", "Harmony model support is not yet implemented for vLLM backend. \ Please use runtime_type: sglang for Harmony models.", )); @@ -72,6 +73,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { "Generate request type not supported for Harmony models" ); return Err(error::bad_request( + "generate_not_supported_with_harmony", "Generate requests are not supported with Harmony models".to_string(), )); } @@ -102,7 +104,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { error = %e, "Failed to build generate request from chat" ); - error::bad_request(format!("Invalid request parameters: {}", e)) + error::bad_request("invalid_request_parameters", format!("Invalid request parameters: {}", e)) })? } RequestType::Responses(request) => sglang_client @@ -120,7 +122,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { error = %e, "Failed to build generate request from responses" ); - error::bad_request(format!("Invalid request parameters: {}", e)) + error::bad_request("invalid_request_parameters", format!("Invalid request parameters: {}", e)) })?, _ => unreachable!(), }; diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/response_processing.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/response_processing.rs index 35161c22d3b7..eacc8c7bdb56 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/response_processing.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/response_processing.rs @@ -56,7 +56,7 @@ impl PipelineStage for HarmonyResponseProcessingStage { request_type = "Chat", "No execution result available" ); - error::internal_error("No execution result") + error::internal_error("no_execution_result", "No execution result") })?; let dispatch = ctx.state.dispatch.as_ref().cloned().ok_or_else(|| { @@ -65,7 +65,7 @@ impl PipelineStage for HarmonyResponseProcessingStage { request_type = "Chat", "Dispatch metadata not set" ); - error::internal_error("Dispatch metadata not set") + error::internal_error("dispatch_metadata_not_set", "Dispatch metadata not set") })?; // For streaming, delegate to streaming processor and return SSE response @@ -107,7 +107,7 @@ impl PipelineStage for HarmonyResponseProcessingStage { request_type = "Responses", "No execution result available" ); - error::internal_error("No execution result") + error::internal_error("no_execution_result", "No execution result") })?; let dispatch = ctx.state.dispatch.as_ref().cloned().ok_or_else(|| { @@ -116,7 +116,7 @@ impl PipelineStage for HarmonyResponseProcessingStage { request_type = "Responses", "Dispatch metadata not set" ); - error::internal_error("Dispatch metadata not set") + error::internal_error("dispatch_metadata_not_set", "Dispatch metadata not set") })?; let responses_request = ctx.responses_request_arc(); @@ -134,6 +134,7 @@ impl PipelineStage for HarmonyResponseProcessingStage { "Generate request type not supported in Harmony pipeline" ); Err(error::internal_error( + "generate_requests_not_supported_in_harmony", "Generate requests not supported in Harmony pipeline", )) } diff --git a/sgl-model-gateway/src/routers/grpc/pipeline.rs b/sgl-model-gateway/src/routers/grpc/pipeline.rs index 5ac69638bf5f..9cf35144f4aa 100644 --- a/sgl-model-gateway/src/routers/grpc/pipeline.rs +++ b/sgl-model-gateway/src/routers/grpc/pipeline.rs @@ -224,14 +224,14 @@ impl RequestPipeline { function = "execute_chat", "Wrong response type: expected Chat, got Generate" ); - error::internal_error("Internal error: wrong response type") + error::internal_error("wrong_response_type", "Internal error: wrong response type") } None => { error!( function = "execute_chat", "No response produced by pipeline" ); - error::internal_error("No response produced") + error::internal_error("no_response_produced", "No response produced") } } } @@ -275,14 +275,14 @@ impl RequestPipeline { function = "execute_generate", "Wrong response type: expected Generate, got Chat" ); - error::internal_error("Internal error: wrong response type") + error::internal_error("wrong_response_type", "Internal error: wrong response type") } None => { error!( function = "execute_generate", "No response produced by pipeline" ); - error::internal_error("No response produced") + error::internal_error("no_response_produced", "No response produced") } } } @@ -311,6 +311,7 @@ impl RequestPipeline { "Streaming attempted in responses context" ); return Err(error::bad_request( + "streaming_not_supported", "Streaming is not supported in this context".to_string(), )); } @@ -337,14 +338,14 @@ impl RequestPipeline { function = "execute_chat_for_responses", "Wrong response type: expected Chat, got Generate" ); - Err(error::internal_error("Internal error: wrong response type")) + Err(error::internal_error("wrong_response_type", "Internal error: wrong response type")) } None => { error!( function = "execute_chat_for_responses", "No response produced by pipeline" ); - Err(error::internal_error("No response produced")) + Err(error::internal_error("no_response_produced", "No response produced")) } } } @@ -415,7 +416,7 @@ impl RequestPipeline { function = "execute_harmony_responses", "No ResponsesIterationResult produced by pipeline" ); - error::internal_error("No ResponsesIterationResult produced by pipeline") + error::internal_error("no_responses_iteration_result", "No ResponsesIterationResult produced by pipeline") }) } @@ -465,7 +466,7 @@ impl RequestPipeline { function = "execute_harmony_responses_streaming", "No ExecutionResult produced by pipeline" ); - error::internal_error("No ExecutionResult produced by pipeline") + error::internal_error("no_execution_result_produced", "No ExecutionResult produced by pipeline") }) } } diff --git a/sgl-model-gateway/src/routers/grpc/regular/processor.rs b/sgl-model-gateway/src/routers/grpc/regular/processor.rs index 8f14cd819df1..2e702ba695c9 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/processor.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/processor.rs @@ -278,10 +278,13 @@ impl ResponseProcessor { { Ok(choice) => choices.push(choice), Err(e) => { - return Err(error::internal_error(format!( - "Failed to process choice {}: {}", - index, e - ))); + return Err(error::internal_error( + "failed_to_process_choice", + format!( + "Failed to process choice {}: {}", + index, e + ) + )); } } } @@ -380,10 +383,13 @@ impl ResponseProcessor { let outputs = match stop_decoder.process_tokens(complete.output_ids()) { Ok(outputs) => outputs, Err(e) => { - return Err(error::internal_error(format!( - "Failed to process tokens: {}", - e - ))) + return Err(error::internal_error( + "failed_to_process_tokens", + format!( + "Failed to process tokens: {}", + e + ) + )) } }; diff --git a/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs b/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs index eeed1cc40c8b..f3b050a75510 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs @@ -607,7 +607,7 @@ async fn execute_without_mcp( error = %e, "Failed to convert ResponsesRequest to ChatCompletionRequest" ); - error::bad_request(format!("Failed to convert request: {}", e)) + error::bad_request("failed_to_convert_request", format!("Failed to convert request: {}", e)) })?; // Execute chat pipeline (errors already have proper HTTP status codes) @@ -628,7 +628,7 @@ async fn execute_without_mcp( error = %e, "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error(format!("Failed to convert to responses format: {}", e)) + error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) }) } @@ -713,14 +713,17 @@ async fn load_conversation_history( error = %e, "Failed to check conversation existence in storage" ); - error::internal_error(format!("Failed to check conversation: {}", e)) + error::internal_error("failed_to_check_conversation", format!("Failed to check conversation: {}", e)) })?; if conversation.is_none() { - return Err(error::not_found(format!( - "Conversation '{}' not found. Please create the conversation first using the conversations API.", - conv_id_str - ))); + return Err(error::not_found( + "conversation_not_found", + format!( + "Conversation '{}' not found. Please create the conversation first using the conversations API.", + conv_id_str + ) + )); } // Load conversation history diff --git a/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs b/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs index 4cfab3fce7dd..dbca72e9dc34 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs @@ -257,7 +257,7 @@ pub(super) async fn execute_tool_loop( error = %e, "Failed to convert ResponsesRequest to ChatCompletionRequest in tool loop" ); - error::bad_request(format!("Failed to convert request: {}", e)) + error::bad_request("failed_to_convert_request", format!("Failed to convert request: {}", e)) })?; // Prepare tools and tool_choice for this iteration @@ -315,7 +315,7 @@ pub(super) async fn execute_tool_loop( context = "function_tool_calls", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error(format!("Failed to convert to responses format: {}", e)) + error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) })?; // Return response with function tool calls to caller @@ -352,7 +352,7 @@ pub(super) async fn execute_tool_loop( context = "max_tool_calls_limit", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error(format!("Failed to convert to responses format: {}", e)) + error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) })?; // Mark as completed but with incomplete details @@ -481,7 +481,7 @@ pub(super) async fn execute_tool_loop( context = "final_response", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error(format!("Failed to convert to responses format: {}", e)) + error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) })?; // Inject MCP metadata into output diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs index adb48ab52861..9d1b3f6d9b9d 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs @@ -54,7 +54,7 @@ impl ChatPreparationStage { Ok(msgs) => msgs, Err(e) => { error!(function = "ChatPreparationStage::execute", error = %e, "Failed to process chat messages"); - return Err(error::bad_request(e)); + return Err(error::bad_request("failed_to_process_messages", e)); } }; @@ -63,7 +63,7 @@ impl ChatPreparationStage { Ok(encoding) => encoding, Err(e) => { error!(function = "ChatPreparationStage::execute", error = %e, "Tokenization failed"); - return Err(error::internal_error(format!("Tokenization failed: {}", e))); + return Err(error::internal_error("tokenization_failed", format!("Tokenization failed: {}", e))); } }; @@ -74,7 +74,7 @@ impl ChatPreparationStage { utils::generate_tool_constraints(tools, &request.tool_choice, &request.model) .map_err(|e| { error!(function = "ChatPreparationStage::execute", error = %e, "Invalid tool configuration"); - error::bad_request(format!("Invalid tool configuration: {}", e)) + error::bad_request("invalid_tool_configuration", format!("Invalid tool configuration: {}", e)) })? } else { None diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs index 2a88b3cad8f1..0392fb5b8a57 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs @@ -36,7 +36,7 @@ impl PipelineStage for ChatRequestBuildingStage { function = "ChatRequestBuildingStage::execute", "Preparation not completed" ); - error::internal_error("Preparation not completed") + error::internal_error("preparation_not_completed", "Preparation not completed") })?; let clients = ctx.state.clients.as_ref().ok_or_else(|| { @@ -44,7 +44,7 @@ impl PipelineStage for ChatRequestBuildingStage { function = "ChatRequestBuildingStage::execute", "Client acquisition not completed" ); - error::internal_error("Client acquisition not completed") + error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") })?; let chat_request = ctx.chat_request_arc(); @@ -77,7 +77,7 @@ impl PipelineStage for ChatRequestBuildingStage { ) .map_err(|e| { error!(function = "ChatRequestBuildingStage::execute", error = %e, "Failed to build SGLang generate request"); - error::bad_request(format!("Invalid request parameters: {}", e)) + error::bad_request("invalid_request_parameters", format!("Invalid request parameters: {}", e)) })?; ProtoGenerateRequest::Sglang(Box::new(req)) } @@ -92,7 +92,7 @@ impl PipelineStage for ChatRequestBuildingStage { ) .map_err(|e| { error!(function = "ChatRequestBuildingStage::execute", error = %e, "Failed to build vLLM generate request"); - error::bad_request(format!("Invalid request parameters: {}", e)) + error::bad_request("invalid_request_parameters", format!("Invalid request parameters: {}", e)) })?; ProtoGenerateRequest::Vllm(Box::new(req)) } diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs index 42af1a45ecf0..7ee8fc669e42 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs @@ -62,7 +62,7 @@ impl ChatResponseProcessingStage { function = "ChatResponseProcessingStage::execute", "No execution result" ); - error::internal_error("No execution result") + error::internal_error("no_execution_result", "No execution result") })?; // Get dispatch metadata (needed by both streaming and non-streaming) @@ -75,7 +75,7 @@ impl ChatResponseProcessingStage { function = "ChatResponseProcessingStage::execute", "Dispatch metadata not set" ); - error::internal_error("Dispatch metadata not set") + error::internal_error("dispatch_metadata_not_set", "Dispatch metadata not set") })? .clone(); @@ -100,7 +100,7 @@ impl ChatResponseProcessingStage { function = "ChatResponseProcessingStage::execute", "Stop decoder not initialized" ); - error::internal_error("Stop decoder not initialized") + error::internal_error("stop_decoder_not_initialized", "Stop decoder not initialized") })?; let response = self diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs index dadcffcfc801..b3d9edf2b27a 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs @@ -49,7 +49,7 @@ impl GeneratePreparationStage { Ok(res) => res, Err(msg) => { error!(function = "GeneratePreparationStage::execute", error = %msg, "Failed to resolve generate input"); - return Err(error::bad_request(msg)); + return Err(error::bad_request("failed_to_resolve_input", msg)); } }; diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs index 216312f5b2e8..85939ad4d284 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs @@ -36,7 +36,7 @@ impl PipelineStage for GenerateRequestBuildingStage { function = "GenerateRequestBuildingStage::execute", "Preparation not completed" ); - error::internal_error("Preparation not completed") + error::internal_error("preparation_not_completed", "Preparation not completed") })?; let clients = ctx.state.clients.as_ref().ok_or_else(|| { @@ -44,7 +44,7 @@ impl PipelineStage for GenerateRequestBuildingStage { function = "GenerateRequestBuildingStage::execute", "Client acquisition not completed" ); - error::internal_error("Client acquisition not completed") + error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") })?; let generate_request = ctx.generate_request_arc(); @@ -73,7 +73,7 @@ impl PipelineStage for GenerateRequestBuildingStage { ) .map_err(|e| { error!(function = "GenerateRequestBuildingStage::execute", error = %e, "Failed to build SGLang generate request"); - error::bad_request(e) + error::bad_request("failed_to_build_request", e) })?; ProtoGenerateRequest::Sglang(Box::new(req)) } @@ -87,7 +87,7 @@ impl PipelineStage for GenerateRequestBuildingStage { ) .map_err(|e| { error!(function = "GenerateRequestBuildingStage::execute", error = %e, "Failed to build vLLM generate request"); - error::bad_request(e) + error::bad_request("failed_to_build_request", e) })?; ProtoGenerateRequest::Vllm(Box::new(req)) } diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs index 7afd626d4a1a..e08da2f98c0b 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs @@ -60,7 +60,7 @@ impl GenerateResponseProcessingStage { function = "GenerateResponseProcessingStage::execute", "No execution result" ); - error::internal_error("No execution result") + error::internal_error("no_execution_result", "No execution result") })?; // Get dispatch metadata (needed by both streaming and non-streaming) @@ -73,7 +73,7 @@ impl GenerateResponseProcessingStage { function = "GenerateResponseProcessingStage::execute", "Dispatch metadata not set" ); - error::internal_error("Dispatch metadata not set") + error::internal_error("dispatch_metadata_not_set", "Dispatch metadata not set") })? .clone(); @@ -97,7 +97,7 @@ impl GenerateResponseProcessingStage { function = "GenerateResponseProcessingStage::execute", "Stop decoder not initialized" ); - error::internal_error("Stop decoder not initialized") + error::internal_error("stop_decoder_not_initialized", "Stop decoder not initialized") })?; let result_array = self diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs index b2d8c1c03663..8c60e7bfe262 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs @@ -49,6 +49,7 @@ impl PipelineStage for PreparationStage { "RequestType::Responses reached regular preparation stage" ); Err(grpc_error::internal_error( + "responses_request_reached_regular_preparation", "RequestType::Responses reached regular preparation stage", )) } diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs index 4f1ee62c948f..949848a374e6 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs @@ -40,6 +40,7 @@ impl PipelineStage for RequestBuildingStage { "RequestType::Responses reached regular request building stage" ); Err(grpc_error::internal_error( + "responses_request_reached_regular_request_building", "RequestType::Responses reached regular request building stage", )) } diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs index 2dea97e08627..df85bd8108f0 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs @@ -49,6 +49,7 @@ impl PipelineStage for ResponseProcessingStage { "RequestType::Responses reached regular response processing stage" ); Err(error::internal_error( + "responses_request_reached_regular_response_processing", "RequestType::Responses reached regular response processing stage", )) } diff --git a/sgl-model-gateway/src/routers/grpc/utils.rs b/sgl-model-gateway/src/routers/grpc/utils.rs index 1f199cbfd7d2..0829cd4d2ed2 100644 --- a/sgl-model-gateway/src/routers/grpc/utils.rs +++ b/sgl-model-gateway/src/routers/grpc/utils.rs @@ -52,14 +52,14 @@ pub async fn get_grpc_client_from_worker(worker: &Arc) -> Result { error!(function = "collect_stream_responses", worker = %worker_name, error = %err.message(), "Worker generation error"); // Don't mark as completed - let Drop send abort for error cases - return Err(error::internal_error(format!( - "{} generation failed: {}", - worker_name, - err.message() - ))); + return Err(error::internal_error( + "worker_generation_failed", + format!( + "{} generation failed: {}", + worker_name, + err.message() + ) + )); } ProtoResponseVariant::Chunk(_chunk) => { // Streaming chunk - no action needed @@ -629,9 +632,11 @@ pub async fn collect_stream_responses( Err(e) => { error!(function = "collect_stream_responses", worker = %worker_name, error = ?e, "Worker stream error"); // Don't mark as completed - let Drop send abort for error cases - return Err(error::internal_error(format!( - "{} stream failed: {}", - worker_name, e + return Err(error::internal_error( + "worker_stream_failed", + format!( + "{} stream failed: {}", + worker_name, e ))); } } From 91d28339d1c5eaab81a4e662901044de520e83e1 Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 10:46:29 +0800 Subject: [PATCH 08/10] more --- .../src/routers/grpc/common/responses/utils.rs | 2 +- .../src/routers/grpc/common/stages/client_acquisition.rs | 2 +- .../src/routers/grpc/common/stages/request_execution.rs | 2 +- sgl-model-gateway/src/routers/grpc/harmony/responses.rs | 6 +++--- .../src/routers/grpc/harmony/stages/preparation.rs | 4 ++-- .../src/routers/grpc/harmony/stages/request_building.rs | 4 ++-- .../src/routers/grpc/regular/stages/preparation.rs | 2 +- .../src/routers/grpc/regular/stages/request_building.rs | 2 +- .../src/routers/grpc/regular/stages/response_processing.rs | 2 +- sgl-model-gateway/src/routers/grpc/utils.rs | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs b/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs index cdde4ef68927..693d76da003c 100644 --- a/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs +++ b/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs @@ -49,7 +49,7 @@ pub async fn ensure_mcp_connection( "Failed to connect to MCP server" ); return Err(error::failed_dependency( - "failed_to_connect_to_mcp_server", + "connect_mcp_server_failed", "Failed to connect to MCP server. Check server_url and authorization.", )); } diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs b/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs index 05ed3c1bef70..ea26bf37dff7 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs @@ -43,7 +43,7 @@ impl PipelineStage for ClientAcquisitionStage { "vLLM backend does not support dual (PD disaggregated) mode" ); return Err(error::bad_request( - "vllm_backend_does_not_support_pd_mode", + "vllm_pd_mode_not_supported", "vLLM backend does not support prefill/decode disaggregated mode. \ Please use runtime_type: sglang for PD mode, or use a regular (non-PD) worker configuration." )); diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs b/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs index 59a5bca95731..547a45779ee3 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs @@ -117,7 +117,7 @@ impl RequestExecutionStage { error = %e, "Failed to start generation" ); - error::internal_error("failed_to_start_generation", format!("Failed to start generation: {}", e)) + error::internal_error("start_generation_failed", format!("Failed to start generation: {}", e)) })?; Ok(ExecutionResult::Single { stream }) diff --git a/sgl-model-gateway/src/routers/grpc/harmony/responses.rs b/sgl-model-gateway/src/routers/grpc/harmony/responses.rs index 0d3aa5d9bde5..9ea6a2d9d3b5 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/responses.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/responses.rs @@ -333,7 +333,7 @@ async fn execute_with_mcp_loop( "Maximum tool iterations exceeded" ); return Err(error::internal_error( - "maximum_tool_iterations_exceeded", + "tool_iterations_exceeded", format!( "Maximum tool iterations ({}) exceeded", MAX_TOOL_ITERATIONS @@ -1180,7 +1180,7 @@ async fn execute_mcp_tools( "Failed to parse tool arguments JSON" ); error::internal_error( - "invalid_tool_arguments_json", + "invalid_tool_args", format!( "Invalid tool arguments JSON for tool '{}': {}", tool_call.function.name, e @@ -1551,7 +1551,7 @@ async fn load_previous_messages( "Failed to load previous response chain from storage" ); error::internal_error( - "failed_to_load_previous_response_chain", + "load_previous_response_chain_failed", format!( "Failed to load previous response chain for {}: {}", prev_id_str, e diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs index 712e86026ca8..fcf898e1540d 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs @@ -65,7 +65,7 @@ impl PipelineStage for HarmonyPreparationStage { "Unsupported request type for Harmony pipeline" ); return Err(error::bad_request( - "unsupported_request_type_for_harmony", + "harmony_request_type_invalid", "Only Chat and Responses requests supported in Harmony pipeline".to_string(), )); } @@ -92,7 +92,7 @@ impl HarmonyPreparationStage { "logprobs requested but not supported for Harmony models" ); return Err(error::bad_request( - "logprobs_not_supported_for_harmony", + "harmony_logprobs_not_supported", "logprobs are not supported for Harmony models".to_string(), )); } diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs index e39ea2e18a62..c63ab5bfe223 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs @@ -57,7 +57,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { // Harmony model support not yet implemented for vLLM if builder_client.is_vllm() { return Err(error::not_implemented( - "harmony_not_implemented_for_vllm", + "harmony_vllm_not_supported", "Harmony model support is not yet implemented for vLLM backend. \ Please use runtime_type: sglang for Harmony models.", )); @@ -73,7 +73,7 @@ impl PipelineStage for HarmonyRequestBuildingStage { "Generate request type not supported for Harmony models" ); return Err(error::bad_request( - "generate_not_supported_with_harmony", + "harmony_generate_not_supported", "Generate requests are not supported with Harmony models".to_string(), )); } diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs index 8c60e7bfe262..bd2490afc200 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/preparation.rs @@ -49,7 +49,7 @@ impl PipelineStage for PreparationStage { "RequestType::Responses reached regular preparation stage" ); Err(grpc_error::internal_error( - "responses_request_reached_regular_preparation", + "responses_in_wrong_pipeline", "RequestType::Responses reached regular preparation stage", )) } diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs index 949848a374e6..ec6eba055fe3 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/request_building.rs @@ -40,7 +40,7 @@ impl PipelineStage for RequestBuildingStage { "RequestType::Responses reached regular request building stage" ); Err(grpc_error::internal_error( - "responses_request_reached_regular_request_building", + "responses_in_wrong_pipeline", "RequestType::Responses reached regular request building stage", )) } diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs index df85bd8108f0..12ccbdd2e421 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/response_processing.rs @@ -49,7 +49,7 @@ impl PipelineStage for ResponseProcessingStage { "RequestType::Responses reached regular response processing stage" ); Err(error::internal_error( - "responses_request_reached_regular_response_processing", + "responses_in_wrong_pipeline", "RequestType::Responses reached regular response processing stage", )) } diff --git a/sgl-model-gateway/src/routers/grpc/utils.rs b/sgl-model-gateway/src/routers/grpc/utils.rs index 0829cd4d2ed2..d8b7d64b8b00 100644 --- a/sgl-model-gateway/src/routers/grpc/utils.rs +++ b/sgl-model-gateway/src/routers/grpc/utils.rs @@ -52,7 +52,7 @@ pub async fn get_grpc_client_from_worker(worker: &Arc) -> Result Date: Sat, 13 Dec 2025 10:56:05 +0800 Subject: [PATCH 09/10] more --- sgl-model-gateway/src/routers/grpc/harmony/processor.rs | 4 ++-- .../src/routers/grpc/harmony/stages/preparation.rs | 6 +++--- sgl-model-gateway/src/routers/grpc/regular/processor.rs | 4 ++-- .../src/routers/grpc/regular/responses/handlers.rs | 6 +++--- .../src/routers/grpc/regular/responses/tool_loop.rs | 8 ++++---- .../src/routers/grpc/regular/stages/chat/preparation.rs | 2 +- .../routers/grpc/regular/stages/generate/preparation.rs | 2 +- .../grpc/regular/stages/generate/request_building.rs | 4 ++-- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sgl-model-gateway/src/routers/grpc/harmony/processor.rs b/sgl-model-gateway/src/routers/grpc/harmony/processor.rs index 61358fce6f9e..d2c873024ac9 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/processor.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/processor.rs @@ -72,7 +72,7 @@ impl HarmonyResponseProcessor { error = %e, "Failed to create Harmony parser" ); - error::internal_error("failed_to_create_harmony_parser", format!("Failed to create Harmony parser: {}", e)) + error::internal_error("create_harmony_parser_failed", format!("Failed to create Harmony parser: {}", e)) })?; // Parse Harmony channels with finish_reason and matched_stop @@ -202,7 +202,7 @@ impl HarmonyResponseProcessor { error = %e, "Failed to create Harmony parser" ); - error::internal_error("failed_to_create_harmony_parser", format!("Failed to create Harmony parser: {}", e)) + error::internal_error("create_harmony_parser_failed", format!("Failed to create Harmony parser: {}", e)) })?; // Convert matched_stop from proto to JSON diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs index fcf898e1540d..b07b3584c649 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs @@ -233,7 +233,7 @@ impl HarmonyPreparationStage { error = %e, "Failed to build text format structural tag for JsonObject" ); - Box::new(error::internal_error("failed_to_build_text_format_tag", e)) + Box::new(error::internal_error("build_text_format_tag_failed", e)) })?; Ok(Some(("structural_tag".to_string(), tag))) } @@ -244,7 +244,7 @@ impl HarmonyPreparationStage { error = %e, "Failed to build text format structural tag for JsonSchema" ); - Box::new(error::internal_error("failed_to_build_text_format_tag", e)) + Box::new(error::internal_error("build_text_format_tag_failed", e)) })?; Ok(Some(("structural_tag".to_string(), tag))) } @@ -369,7 +369,7 @@ impl HarmonyPreparationStage { "Failed to serialize structural tag" ); Box::new(error::internal_error( - "failed_to_serialize_structural_tag", + "serialize_structural_tag_failed", format!( "Failed to serialize structural tag: {}", e diff --git a/sgl-model-gateway/src/routers/grpc/regular/processor.rs b/sgl-model-gateway/src/routers/grpc/regular/processor.rs index 2e702ba695c9..69e6027153bd 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/processor.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/processor.rs @@ -279,7 +279,7 @@ impl ResponseProcessor { Ok(choice) => choices.push(choice), Err(e) => { return Err(error::internal_error( - "failed_to_process_choice", + "process_choice_failed", format!( "Failed to process choice {}: {}", index, e @@ -384,7 +384,7 @@ impl ResponseProcessor { Ok(outputs) => outputs, Err(e) => { return Err(error::internal_error( - "failed_to_process_tokens", + "process_tokens_failed", format!( "Failed to process tokens: {}", e diff --git a/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs b/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs index f3b050a75510..7b99dc4008d8 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs @@ -607,7 +607,7 @@ async fn execute_without_mcp( error = %e, "Failed to convert ResponsesRequest to ChatCompletionRequest" ); - error::bad_request("failed_to_convert_request", format!("Failed to convert request: {}", e)) + error::bad_request("convert_request_failed", format!("Failed to convert request: {}", e)) })?; // Execute chat pipeline (errors already have proper HTTP status codes) @@ -628,7 +628,7 @@ async fn execute_without_mcp( error = %e, "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) + error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) }) } @@ -713,7 +713,7 @@ async fn load_conversation_history( error = %e, "Failed to check conversation existence in storage" ); - error::internal_error("failed_to_check_conversation", format!("Failed to check conversation: {}", e)) + error::internal_error("check_conversation_failed", format!("Failed to check conversation: {}", e)) })?; if conversation.is_none() { diff --git a/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs b/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs index dbca72e9dc34..574a956709f5 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs @@ -257,7 +257,7 @@ pub(super) async fn execute_tool_loop( error = %e, "Failed to convert ResponsesRequest to ChatCompletionRequest in tool loop" ); - error::bad_request("failed_to_convert_request", format!("Failed to convert request: {}", e)) + error::bad_request("convert_request_failed", format!("Failed to convert request: {}", e)) })?; // Prepare tools and tool_choice for this iteration @@ -315,7 +315,7 @@ pub(super) async fn execute_tool_loop( context = "function_tool_calls", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) + error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) })?; // Return response with function tool calls to caller @@ -352,7 +352,7 @@ pub(super) async fn execute_tool_loop( context = "max_tool_calls_limit", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) + error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) })?; // Mark as completed but with incomplete details @@ -481,7 +481,7 @@ pub(super) async fn execute_tool_loop( context = "final_response", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("failed_to_convert_to_responses_format", format!("Failed to convert to responses format: {}", e)) + error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) })?; // Inject MCP metadata into output diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs index 9d1b3f6d9b9d..b9e382fff85d 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs @@ -54,7 +54,7 @@ impl ChatPreparationStage { Ok(msgs) => msgs, Err(e) => { error!(function = "ChatPreparationStage::execute", error = %e, "Failed to process chat messages"); - return Err(error::bad_request("failed_to_process_messages", e)); + return Err(error::bad_request("process_messages_failed", e)); } }; diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs index b3d9edf2b27a..da365c5d8a34 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/preparation.rs @@ -49,7 +49,7 @@ impl GeneratePreparationStage { Ok(res) => res, Err(msg) => { error!(function = "GeneratePreparationStage::execute", error = %msg, "Failed to resolve generate input"); - return Err(error::bad_request("failed_to_resolve_input", msg)); + return Err(error::bad_request("resolve_input_failed", msg)); } }; diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs index 85939ad4d284..e80b94bbbf7a 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs @@ -73,7 +73,7 @@ impl PipelineStage for GenerateRequestBuildingStage { ) .map_err(|e| { error!(function = "GenerateRequestBuildingStage::execute", error = %e, "Failed to build SGLang generate request"); - error::bad_request("failed_to_build_request", e) + error::bad_request("build_request_failed", e) })?; ProtoGenerateRequest::Sglang(Box::new(req)) } @@ -87,7 +87,7 @@ impl PipelineStage for GenerateRequestBuildingStage { ) .map_err(|e| { error!(function = "GenerateRequestBuildingStage::execute", error = %e, "Failed to build vLLM generate request"); - error::bad_request("failed_to_build_request", e) + error::bad_request("build_request_failed", e) })?; ProtoGenerateRequest::Vllm(Box::new(req)) } From 92e21b2b2b8b5e6a1ff3b0ca20361ac33932f19d Mon Sep 17 00:00:00 2001 From: fzyzcjy Date: Sat, 13 Dec 2025 11:02:25 +0800 Subject: [PATCH 10/10] fmt --- .../grpc/common/response_collection.rs | 5 +++- .../grpc/common/stages/client_acquisition.rs | 5 +++- .../grpc/common/stages/request_execution.rs | 30 +++++++++++-------- .../grpc/common/stages/worker_selection.rs | 12 ++++---- .../src/routers/grpc/harmony/processor.rs | 30 +++++++++++++++---- .../src/routers/grpc/harmony/responses.rs | 9 ++---- .../grpc/harmony/stages/preparation.rs | 20 ++++++------- .../grpc/harmony/stages/request_building.rs | 15 ++++++++-- .../src/routers/grpc/pipeline.rs | 20 ++++++++++--- .../src/routers/grpc/regular/processor.rs | 10 ++----- .../grpc/regular/responses/handlers.rs | 15 ++++++++-- .../grpc/regular/responses/tool_loop.rs | 20 ++++++++++--- .../grpc/regular/stages/chat/preparation.rs | 5 +++- .../regular/stages/chat/request_building.rs | 5 +++- .../stages/chat/response_processing.rs | 5 +++- .../stages/generate/request_building.rs | 5 +++- .../stages/generate/response_processing.rs | 5 +++- sgl-model-gateway/src/routers/grpc/utils.rs | 22 +++++++------- 18 files changed, 158 insertions(+), 80 deletions(-) diff --git a/sgl-model-gateway/src/routers/grpc/common/response_collection.rs b/sgl-model-gateway/src/routers/grpc/common/response_collection.rs index 9923087e2caa..9cdd4788143e 100644 --- a/sgl-model-gateway/src/routers/grpc/common/response_collection.rs +++ b/sgl-model-gateway/src/routers/grpc/common/response_collection.rs @@ -58,7 +58,10 @@ pub async fn collect_responses( }; if all_responses.is_empty() { - return Err(error::internal_error("no_responses_from_server", "No responses from server")); + return Err(error::internal_error( + "no_responses_from_server", + "No responses from server", + )); } Ok(all_responses) diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs b/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs index ea26bf37dff7..eca9fa1cf2fe 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/client_acquisition.rs @@ -24,7 +24,10 @@ impl PipelineStage for ClientAcquisitionStage { function = "ClientAcquisitionStage::execute", "Worker selection stage not completed" ); - error::internal_error("worker_selection_not_completed", "Worker selection not completed") + error::internal_error( + "worker_selection_not_completed", + "Worker selection not completed", + ) })?; let clients = match workers { diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs b/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs index 547a45779ee3..ddb8f4efa1f8 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/request_execution.rs @@ -50,7 +50,10 @@ impl PipelineStage for RequestExecutionStage { function = "RequestExecutionStage::execute", "Client acquisition not completed" ); - error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") + error::internal_error( + "client_acquisition_not_completed", + "Client acquisition not completed", + ) })?; // Extract dispatch metadata for tracing span @@ -108,7 +111,10 @@ impl RequestExecutionStage { function = "execute_single", "Expected single client but got dual" ); - error::internal_error("expected_single_client_got_dual", "Expected single client but got dual") + error::internal_error( + "expected_single_client_got_dual", + "Expected single client but got dual", + ) })?; let stream = client.generate(proto_request).await.map_err(|e| { @@ -117,7 +123,10 @@ impl RequestExecutionStage { error = %e, "Failed to start generation" ); - error::internal_error("start_generation_failed", format!("Failed to start generation: {}", e)) + error::internal_error( + "start_generation_failed", + format!("Failed to start generation: {}", e), + ) })?; Ok(ExecutionResult::Single { stream }) @@ -133,7 +142,10 @@ impl RequestExecutionStage { function = "execute_dual_dispatch", "Expected dual clients but got single" ); - error::internal_error("expected_dual_clients_got_single", "Expected dual clients but got single") + error::internal_error( + "expected_dual_clients_got_single", + "Expected dual clients but got single", + ) })?; let prefill_request = proto_request.clone_inner(); @@ -155,10 +167,7 @@ impl RequestExecutionStage { ); return Err(error::internal_error( "prefill_worker_failed_to_start", - format!( - "Prefill worker failed to start: {}", - e - ) + format!("Prefill worker failed to start: {}", e), )); } }; @@ -174,10 +183,7 @@ impl RequestExecutionStage { ); return Err(error::internal_error( "decode_worker_failed_to_start", - format!( - "Decode worker failed to start: {}", - e - ) + format!("Decode worker failed to start: {}", e), )); } }; diff --git a/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs b/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs index 32a3dd9f83bd..f599fcbcf432 100644 --- a/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs +++ b/sgl-model-gateway/src/routers/grpc/common/stages/worker_selection.rs @@ -52,7 +52,10 @@ impl PipelineStage for WorkerSelectionStage { function = "WorkerSelectionStage::execute", "Preparation stage not completed" ); - error::internal_error("preparation_stage_not_completed", "Preparation stage not completed") + error::internal_error( + "preparation_stage_not_completed", + "Preparation stage not completed", + ) })?; // For Harmony, use selection_text produced during Harmony encoding @@ -76,10 +79,7 @@ impl PipelineStage for WorkerSelectionStage { ); return Err(error::service_unavailable( "no_available_workers", - format!( - "No available workers for model: {:?}", - ctx.input.model_id - ) + format!("No available workers for model: {:?}", ctx.input.model_id), )); } } @@ -99,7 +99,7 @@ impl PipelineStage for WorkerSelectionStage { format!( "No available PD worker pairs for model: {:?}", ctx.input.model_id - ) + ), )); } } diff --git a/sgl-model-gateway/src/routers/grpc/harmony/processor.rs b/sgl-model-gateway/src/routers/grpc/harmony/processor.rs index d2c873024ac9..cc86a3f931ee 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/processor.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/processor.rs @@ -47,7 +47,10 @@ impl HarmonyResponseProcessor { // Collect all completed responses (one per choice) let all_responses = response_collection::collect_responses(execution_result, false).await?; if all_responses.is_empty() { - return Err(error::internal_error("no_responses_from_server", "No responses from server")); + return Err(error::internal_error( + "no_responses_from_server", + "No responses from server", + )); } // Build choices by parsing output with HarmonyParserAdapter @@ -72,7 +75,10 @@ impl HarmonyResponseProcessor { error = %e, "Failed to create Harmony parser" ); - error::internal_error("create_harmony_parser_failed", format!("Failed to create Harmony parser: {}", e)) + error::internal_error( + "create_harmony_parser_failed", + format!("Failed to create Harmony parser: {}", e), + ) })?; // Parse Harmony channels with finish_reason and matched_stop @@ -88,7 +94,10 @@ impl HarmonyResponseProcessor { error = %e, "Harmony parsing failed on complete response" ); - error::internal_error("harmony_parsing_failed", format!("Harmony parsing failed: {}", e)) + error::internal_error( + "harmony_parsing_failed", + format!("Harmony parsing failed: {}", e), + ) })?; // Build response message (assistant) @@ -187,7 +196,10 @@ impl HarmonyResponseProcessor { // Collect all completed responses let all_responses = response_collection::collect_responses(execution_result, false).await?; if all_responses.is_empty() { - return Err(error::internal_error("no_responses_from_server", "No responses from server")); + return Err(error::internal_error( + "no_responses_from_server", + "No responses from server", + )); } // For Responses API, we only process the first response (n=1) @@ -202,7 +214,10 @@ impl HarmonyResponseProcessor { error = %e, "Failed to create Harmony parser" ); - error::internal_error("create_harmony_parser_failed", format!("Failed to create Harmony parser: {}", e)) + error::internal_error( + "create_harmony_parser_failed", + format!("Failed to create Harmony parser: {}", e), + ) })?; // Convert matched_stop from proto to JSON @@ -227,7 +242,10 @@ impl HarmonyResponseProcessor { error = %e, "Harmony parsing failed on complete response" ); - error::internal_error("harmony_parsing_failed", format!("Harmony parsing failed: {}", e)) + error::internal_error( + "harmony_parsing_failed", + format!("Harmony parsing failed: {}", e), + ) })?; // VALIDATION: Check if model incorrectly generated Tool role messages diff --git a/sgl-model-gateway/src/routers/grpc/harmony/responses.rs b/sgl-model-gateway/src/routers/grpc/harmony/responses.rs index 9ea6a2d9d3b5..0193d6cbe229 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/responses.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/responses.rs @@ -334,10 +334,7 @@ async fn execute_with_mcp_loop( ); return Err(error::internal_error( "tool_iterations_exceeded", - format!( - "Maximum tool iterations ({}) exceeded", - MAX_TOOL_ITERATIONS - ) + format!("Maximum tool iterations ({}) exceeded", MAX_TOOL_ITERATIONS), )); } @@ -1184,7 +1181,7 @@ async fn execute_mcp_tools( format!( "Invalid tool arguments JSON for tool '{}': {}", tool_call.function.name, e - ) + ), ) })?; @@ -1555,7 +1552,7 @@ async fn load_previous_messages( format!( "Failed to load previous response chain for {}: {}", prev_id_str, e - ) + ), ) })?; diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs index b07b3584c649..32b3093194c6 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/preparation.rs @@ -114,7 +114,10 @@ impl HarmonyPreparationStage { error = %e, "Harmony build failed for chat request" ); - error::bad_request("harmony_build_failed", format!("Harmony build failed: {}", e)) + error::bad_request( + "harmony_build_failed", + format!("Harmony build failed: {}", e), + ) })?; // Step 4: Store results @@ -191,7 +194,10 @@ impl HarmonyPreparationStage { error = %e, "Harmony build failed for responses request" ); - error::bad_request("harmony_build_failed", format!("Harmony build failed: {}", e)) + error::bad_request( + "harmony_build_failed", + format!("Harmony build failed: {}", e), + ) })?; // Step 4: Store results with constraint @@ -315,10 +321,7 @@ impl HarmonyPreparationStage { ); return Err(Box::new(error::bad_request( "tool_not_found", - format!( - "Tool '{}' not found in tools list", - tool_name - ) + format!("Tool '{}' not found in tools list", tool_name), ))); } _ => {} @@ -370,10 +373,7 @@ impl HarmonyPreparationStage { ); Box::new(error::internal_error( "serialize_structural_tag_failed", - format!( - "Failed to serialize structural tag: {}", - e - ) + format!("Failed to serialize structural tag: {}", e), )) }) } diff --git a/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs b/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs index c63ab5bfe223..f7f87fbe0172 100644 --- a/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/harmony/stages/request_building.rs @@ -47,7 +47,10 @@ impl PipelineStage for HarmonyRequestBuildingStage { function = "HarmonyRequestBuildingStage::execute", "Client acquisition stage not completed" ); - error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") + error::internal_error( + "client_acquisition_not_completed", + "Client acquisition not completed", + ) })?; let builder_client = match clients { ClientSelection::Single { client } => client, @@ -104,7 +107,10 @@ impl PipelineStage for HarmonyRequestBuildingStage { error = %e, "Failed to build generate request from chat" ); - error::bad_request("invalid_request_parameters", format!("Invalid request parameters: {}", e)) + error::bad_request( + "invalid_request_parameters", + format!("Invalid request parameters: {}", e), + ) })? } RequestType::Responses(request) => sglang_client @@ -122,7 +128,10 @@ impl PipelineStage for HarmonyRequestBuildingStage { error = %e, "Failed to build generate request from responses" ); - error::bad_request("invalid_request_parameters", format!("Invalid request parameters: {}", e)) + error::bad_request( + "invalid_request_parameters", + format!("Invalid request parameters: {}", e), + ) })?, _ => unreachable!(), }; diff --git a/sgl-model-gateway/src/routers/grpc/pipeline.rs b/sgl-model-gateway/src/routers/grpc/pipeline.rs index 9cf35144f4aa..ce68eb8d858d 100644 --- a/sgl-model-gateway/src/routers/grpc/pipeline.rs +++ b/sgl-model-gateway/src/routers/grpc/pipeline.rs @@ -338,14 +338,20 @@ impl RequestPipeline { function = "execute_chat_for_responses", "Wrong response type: expected Chat, got Generate" ); - Err(error::internal_error("wrong_response_type", "Internal error: wrong response type")) + Err(error::internal_error( + "wrong_response_type", + "Internal error: wrong response type", + )) } None => { error!( function = "execute_chat_for_responses", "No response produced by pipeline" ); - Err(error::internal_error("no_response_produced", "No response produced")) + Err(error::internal_error( + "no_response_produced", + "No response produced", + )) } } } @@ -416,7 +422,10 @@ impl RequestPipeline { function = "execute_harmony_responses", "No ResponsesIterationResult produced by pipeline" ); - error::internal_error("no_responses_iteration_result", "No ResponsesIterationResult produced by pipeline") + error::internal_error( + "no_responses_iteration_result", + "No ResponsesIterationResult produced by pipeline", + ) }) } @@ -466,7 +475,10 @@ impl RequestPipeline { function = "execute_harmony_responses_streaming", "No ExecutionResult produced by pipeline" ); - error::internal_error("no_execution_result_produced", "No ExecutionResult produced by pipeline") + error::internal_error( + "no_execution_result_produced", + "No ExecutionResult produced by pipeline", + ) }) } } diff --git a/sgl-model-gateway/src/routers/grpc/regular/processor.rs b/sgl-model-gateway/src/routers/grpc/regular/processor.rs index 69e6027153bd..1499603bfc0b 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/processor.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/processor.rs @@ -280,10 +280,7 @@ impl ResponseProcessor { Err(e) => { return Err(error::internal_error( "process_choice_failed", - format!( - "Failed to process choice {}: {}", - index, e - ) + format!("Failed to process choice {}: {}", index, e), )); } } @@ -385,10 +382,7 @@ impl ResponseProcessor { Err(e) => { return Err(error::internal_error( "process_tokens_failed", - format!( - "Failed to process tokens: {}", - e - ) + format!("Failed to process tokens: {}", e), )) } }; diff --git a/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs b/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs index 7b99dc4008d8..328905662ffc 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs @@ -607,7 +607,10 @@ async fn execute_without_mcp( error = %e, "Failed to convert ResponsesRequest to ChatCompletionRequest" ); - error::bad_request("convert_request_failed", format!("Failed to convert request: {}", e)) + error::bad_request( + "convert_request_failed", + format!("Failed to convert request: {}", e), + ) })?; // Execute chat pipeline (errors already have proper HTTP status codes) @@ -628,7 +631,10 @@ async fn execute_without_mcp( error = %e, "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) + error::internal_error( + "convert_to_responses_format_failed", + format!("Failed to convert to responses format: {}", e), + ) }) } @@ -713,7 +719,10 @@ async fn load_conversation_history( error = %e, "Failed to check conversation existence in storage" ); - error::internal_error("check_conversation_failed", format!("Failed to check conversation: {}", e)) + error::internal_error( + "check_conversation_failed", + format!("Failed to check conversation: {}", e), + ) })?; if conversation.is_none() { diff --git a/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs b/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs index 574a956709f5..b47423e52a0f 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/responses/tool_loop.rs @@ -257,7 +257,10 @@ pub(super) async fn execute_tool_loop( error = %e, "Failed to convert ResponsesRequest to ChatCompletionRequest in tool loop" ); - error::bad_request("convert_request_failed", format!("Failed to convert request: {}", e)) + error::bad_request( + "convert_request_failed", + format!("Failed to convert request: {}", e), + ) })?; // Prepare tools and tool_choice for this iteration @@ -315,7 +318,10 @@ pub(super) async fn execute_tool_loop( context = "function_tool_calls", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) + error::internal_error( + "convert_to_responses_format_failed", + format!("Failed to convert to responses format: {}", e), + ) })?; // Return response with function tool calls to caller @@ -352,7 +358,10 @@ pub(super) async fn execute_tool_loop( context = "max_tool_calls_limit", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) + error::internal_error( + "convert_to_responses_format_failed", + format!("Failed to convert to responses format: {}", e), + ) })?; // Mark as completed but with incomplete details @@ -481,7 +490,10 @@ pub(super) async fn execute_tool_loop( context = "final_response", "Failed to convert ChatCompletionResponse to ResponsesResponse" ); - error::internal_error("convert_to_responses_format_failed", format!("Failed to convert to responses format: {}", e)) + error::internal_error( + "convert_to_responses_format_failed", + format!("Failed to convert to responses format: {}", e), + ) })?; // Inject MCP metadata into output diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs index b9e382fff85d..dcdea0044ccd 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/preparation.rs @@ -63,7 +63,10 @@ impl ChatPreparationStage { Ok(encoding) => encoding, Err(e) => { error!(function = "ChatPreparationStage::execute", error = %e, "Tokenization failed"); - return Err(error::internal_error("tokenization_failed", format!("Tokenization failed: {}", e))); + return Err(error::internal_error( + "tokenization_failed", + format!("Tokenization failed: {}", e), + )); } }; diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs index 0392fb5b8a57..56cd326f9560 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/request_building.rs @@ -44,7 +44,10 @@ impl PipelineStage for ChatRequestBuildingStage { function = "ChatRequestBuildingStage::execute", "Client acquisition not completed" ); - error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") + error::internal_error( + "client_acquisition_not_completed", + "Client acquisition not completed", + ) })?; let chat_request = ctx.chat_request_arc(); diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs index 7ee8fc669e42..b88fa614405b 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/chat/response_processing.rs @@ -100,7 +100,10 @@ impl ChatResponseProcessingStage { function = "ChatResponseProcessingStage::execute", "Stop decoder not initialized" ); - error::internal_error("stop_decoder_not_initialized", "Stop decoder not initialized") + error::internal_error( + "stop_decoder_not_initialized", + "Stop decoder not initialized", + ) })?; let response = self diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs index e80b94bbbf7a..d523b33ee9f6 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/request_building.rs @@ -44,7 +44,10 @@ impl PipelineStage for GenerateRequestBuildingStage { function = "GenerateRequestBuildingStage::execute", "Client acquisition not completed" ); - error::internal_error("client_acquisition_not_completed", "Client acquisition not completed") + error::internal_error( + "client_acquisition_not_completed", + "Client acquisition not completed", + ) })?; let generate_request = ctx.generate_request_arc(); diff --git a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs index e08da2f98c0b..1ae502894708 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/stages/generate/response_processing.rs @@ -97,7 +97,10 @@ impl GenerateResponseProcessingStage { function = "GenerateResponseProcessingStage::execute", "Stop decoder not initialized" ); - error::internal_error("stop_decoder_not_initialized", "Stop decoder not initialized") + error::internal_error( + "stop_decoder_not_initialized", + "Stop decoder not initialized", + ) })?; let result_array = self diff --git a/sgl-model-gateway/src/routers/grpc/utils.rs b/sgl-model-gateway/src/routers/grpc/utils.rs index d8b7d64b8b00..b6d220ec1d16 100644 --- a/sgl-model-gateway/src/routers/grpc/utils.rs +++ b/sgl-model-gateway/src/routers/grpc/utils.rs @@ -52,14 +52,20 @@ pub async fn get_grpc_client_from_worker(worker: &Arc) -> Result { @@ -634,10 +636,8 @@ pub async fn collect_stream_responses( // Don't mark as completed - let Drop send abort for error cases return Err(error::internal_error( "worker_stream_failed", - format!( - "{} stream failed: {}", - worker_name, e - ))); + format!("{} stream failed: {}", worker_name, e), + )); } } }