diff --git a/sgl-model-gateway/src/routers/grpc/common/responses/handlers.rs b/sgl-model-gateway/src/routers/grpc/common/responses/handlers.rs index 4b7b8c0905a1..0d9e84d3b2e7 100644 --- a/sgl-model-gateway/src/routers/grpc/common/responses/handlers.rs +++ b/sgl-model-gateway/src/routers/grpc/common/responses/handlers.rs @@ -10,7 +10,8 @@ use serde_json::json; use tracing::{debug, error, warn}; use crate::{ - data_connector::ResponseId, routers::grpc::regular::responses::context::ResponsesContext, + data_connector::ResponseId, + routers::{error, grpc::regular::responses::context::ResponsesContext}, }; /// Implementation for GET /v1/responses/{response_id} @@ -23,27 +24,14 @@ pub async fn get_response_impl(ctx: &ResponsesContext, response_id: &str) -> Res // Retrieve response from storage match ctx.response_storage.get_response(&resp_id).await { Ok(Some(stored_response)) => axum::Json(stored_response.raw_response).into_response(), - Ok(None) => ( - StatusCode::NOT_FOUND, - axum::Json(json!({ - "error": { - "message": format!("Response with id '{}' not found", response_id), - "type": "not_found_error", - "code": "response_not_found" - } - })), - ) - .into_response(), - Err(e) => ( - StatusCode::INTERNAL_SERVER_ERROR, - axum::Json(json!({ - "error": { - "message": format!("Failed to retrieve response: {}", e), - "type": "internal_error" - } - })), - ) - .into_response(), + Ok(None) => error::not_found( + "response_not_found", + format!("Response with id '{}' not found", response_id), + ), + Err(e) => error::internal_error( + "retrieve_response_failed", + format!("Failed to retrieve response: {}", e), + ), } } @@ -112,41 +100,19 @@ pub async fn cancel_response_impl(ctx: &ResponsesContext, response_id: &str) -> "Response {} has status '{}' but task handle is missing. Task may have crashed or storage update failed.", response_id, current_status ); - ( - StatusCode::INTERNAL_SERVER_ERROR, - axum::Json(json!({ - "error": { - "message": "Internal error: background task completed but failed to update status in storage", - "type": "internal_error", - "code": "status_update_failed" - } - })), + error::internal_error( + "status_update_failed", + "Internal error: background task completed but failed to update status in storage", ) - .into_response() } } - "completed" => ( - StatusCode::BAD_REQUEST, - axum::Json(json!({ - "error": { - "message": "Cannot cancel completed response", - "type": "invalid_request_error", - "code": "response_already_completed" - } - })), - ) - .into_response(), - "failed" => ( - StatusCode::BAD_REQUEST, - axum::Json(json!({ - "error": { - "message": "Cannot cancel failed response", - "type": "invalid_request_error", - "code": "response_already_failed" - } - })), - ) - .into_response(), + "completed" => error::bad_request( + "response_already_completed", + "Cannot cancel completed response", + ), + "failed" => { + error::bad_request("response_already_failed", "Cannot cancel failed response") + } "cancelled" => ( StatusCode::OK, axum::Json(json!({ @@ -158,39 +124,20 @@ pub async fn cancel_response_impl(ctx: &ResponsesContext, response_id: &str) -> .into_response(), _ => { // Unknown status - ( - StatusCode::INTERNAL_SERVER_ERROR, - axum::Json(json!({ - "error": { - "message": format!("Unknown response status: {}", current_status), - "type": "internal_error" - } - })), + error::internal_error( + "unknown_response_status", + format!("Unknown response status: {}", current_status), ) - .into_response() } } } - Ok(None) => ( - StatusCode::NOT_FOUND, - axum::Json(json!({ - "error": { - "message": format!("Response with id '{}' not found", response_id), - "type": "not_found_error", - "code": "response_not_found" - } - })), - ) - .into_response(), - Err(e) => ( - StatusCode::INTERNAL_SERVER_ERROR, - axum::Json(json!({ - "error": { - "message": format!("Failed to retrieve response: {}", e), - "type": "internal_error" - } - })), - ) - .into_response(), + Ok(None) => error::not_found( + "response_not_found", + format!("Response with id '{}' not found", response_id), + ), + Err(e) => error::internal_error( + "retrieve_response_failed", + format!("Failed to retrieve response: {}", e), + ), } } 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 693d76da003c..0d74ee74350e 100644 --- a/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs +++ b/sgl-model-gateway/src/routers/grpc/common/responses/utils.rs @@ -2,11 +2,8 @@ use std::sync::Arc; -use axum::{ - http::StatusCode, - response::{IntoResponse, Response}, -}; -use serde_json::{json, to_value}; +use axum::response::Response; +use serde_json::to_value; use tracing::{debug, error, warn}; use crate::{ @@ -67,24 +64,14 @@ pub fn validate_worker_availability( let available_models = worker_registry.get_models(); if !available_models.contains(&model.to_string()) { - return Some( - ( - StatusCode::SERVICE_UNAVAILABLE, - axum::Json(json!({ - "error": { - "message": format!( - "No workers available for model '{}'. Available models: {}", - model, - available_models.join(", ") - ), - "type": "service_unavailable", - "param": "model", - "code": "no_available_workers" - } - })), - ) - .into_response(), - ); + return Some(error::service_unavailable( + "no_available_workers", + format!( + "No workers available for model '{}'. Available models: {}", + model, + available_models.join(", ") + ), + )); } None 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 328905662ffc..794f2e3272af 100644 --- a/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs +++ b/sgl-model-gateway/src/routers/grpc/regular/responses/handlers.rs @@ -36,7 +36,7 @@ use std::sync::Arc; use axum::{ body::Body, - http::{self, StatusCode}, + http, response::{IntoResponse, Response}, }; use bytes::Bytes; @@ -85,18 +85,10 @@ pub async fn route_responses( // 1. Reject background mode (no longer supported) let is_background = request.background.unwrap_or(false); if is_background { - return ( - StatusCode::BAD_REQUEST, - axum::Json(json!({ - "error": { - "message": "Background mode is not supported. Please set 'background' to false or omit it.", - "type": "invalid_request_error", - "param": "background", - "code": "unsupported_parameter" - } - })), - ) - .into_response(); + return error::bad_request( + "unsupported_parameter", + "Background mode is not supported. Please set 'background' to false or omit it.", + ); } // 2. Route based on execution mode @@ -219,16 +211,10 @@ async fn route_responses_streaming( let chat_request = match conversions::responses_to_chat(&modified_request) { Ok(req) => Arc::new(req), Err(e) => { - return ( - StatusCode::BAD_REQUEST, - axum::Json(json!({ - "error": { - "message": format!("Failed to convert request: {}", e), - "type": "invalid_request_error" - } - })), - ) - .into_response(); + return error::bad_request( + "convert_request_failed", + format!("Failed to convert request: {}", e), + ); } };