diff --git a/relay/channel/openai/adaptor.go b/relay/channel/openai/adaptor.go index 3fd2466..9400aa0 100644 --- a/relay/channel/openai/adaptor.go +++ b/relay/channel/openai/adaptor.go @@ -621,15 +621,28 @@ func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *relaycommo } func (a *Adaptor) DoRequest(c *gin.Context, info *relaycommon.RelayInfo, requestBody io.Reader) (any, error) { - if info.RelayMode == relayconstant.RelayModeAudioTranscription || - info.RelayMode == relayconstant.RelayModeAudioTranslation || - (info.RelayMode == relayconstant.RelayModeImagesEdits && !isJSONRequest(c)) { + if info.RelayMode == relayconstant.RelayModeAudioTranscription || info.RelayMode == relayconstant.RelayModeAudioTranslation { return channel.DoFormRequest(a, c, info, requestBody) - } else if info.RelayMode == relayconstant.RelayModeRealtime { + } + if info.RelayMode == relayconstant.RelayModeImagesEdits && !isJSONRequest(c) { + response, err := channel.DoFormRequest(a, c, info, requestBody) + if err != nil { + return nil, err + } + return resolveOpenAIImageTask(c, info, response) + } + if info.RelayMode == relayconstant.RelayModeRealtime { return channel.DoWssRequest(a, c, info, requestBody) - } else { - return channel.DoApiRequest(a, c, info, requestBody) } + + response, err := channel.DoApiRequest(a, c, info, requestBody) + if err != nil { + return nil, err + } + if info.RelayMode == relayconstant.RelayModeImagesGenerations || info.RelayMode == relayconstant.RelayModeImagesEdits { + return resolveOpenAIImageTask(c, info, response) + } + return response, nil } func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, info *relaycommon.RelayInfo) (usage any, err *types.NewAPIError) { diff --git a/relay/channel/openai/relay_image.go b/relay/channel/openai/relay_image.go index e0f09aa..f9372d7 100644 --- a/relay/channel/openai/relay_image.go +++ b/relay/channel/openai/relay_image.go @@ -39,6 +39,16 @@ func OpenaiImageHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http. return nil, types.NewOpenAIError(err, types.ErrorCodeReadResponseBodyFailed, http.StatusInternalServerError) } + responseBody, compatStats, err := convertOpenAIImageURLsToBase64(responseBody, downloadOpenAIImageURLCompat) + if err != nil { + return nil, types.NewOpenAIError(err, types.ErrorCodeBadResponseBody, http.StatusBadGateway) + } + if compatStats.Converted > 0 { + c.Header("Server-Timing", compatStats.ServerTiming()) + c.Header("X-New-API-Image-Compat", "url-to-b64") + logger.LogInfo(c, compatStats.LogMessage()) + } + var usageResp dto.SimpleResponse err = common.Unmarshal(responseBody, &usageResp) if err != nil {