From 84a79b6807ac1a679ca86f34c8c6f39175c294d8 Mon Sep 17 00:00:00 2001 From: bigsong <35025755+bigsongeth@users.noreply.github.com> Date: Fri, 24 Jul 2026 14:10:32 +0800 Subject: [PATCH] fix: log response body when parsed upstream error message is empty When an upstream error response parses as valid JSON but yields no usable error message (e.g. an aggregator gateway returning {"error":{"message":""}}), RelayErrorHandler previously produced a bare "bad response status code N" error with no trace of the original body, making the failure undiagnosable. Log the body preview in that case, mirroring the existing behavior for unparseable bodies. --- service/error.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/service/error.go b/service/error.go index cf7325b6..9d035858 100644 --- a/service/error.go +++ b/service/error.go @@ -123,7 +123,13 @@ func RelayErrorHandler(ctx context.Context, resp *http.Response, showBodyWhenFai return } } - newApiErr = types.NewOpenAIError(errors.New(errResponse.ToMessage()), types.ErrorCodeBadResponseStatusCode, resp.StatusCode) + message := errResponse.ToMessage() + if message == "" { + // The body parsed as JSON but carried no usable error message; log the + // raw body so the upstream failure remains diagnosable. + logger.LogError(ctx, fmt.Sprintf("bad response status code %d with empty error message, body: %s", resp.StatusCode, responseBodyPreview)) + } + newApiErr = types.NewOpenAIError(errors.New(message), types.ErrorCodeBadResponseStatusCode, resp.StatusCode) if showBodyWhenFail { newApiErr.Err = buildErrWithBody(newApiErr.Error()) }