File size: 2,698 Bytes
7cd5cb8 61ed9bf 7cd5cb8 61ed9bf 7cd5cb8 61ed9bf 7cd5cb8 0cef4ab 7cd5cb8 0cef4ab 7cd5cb8 0cef4ab 7cd5cb8 61ed9bf 7cd5cb8 61ed9bf 0cef4ab 7cd5cb8 0cef4ab 7cd5cb8 0cef4ab 7cd5cb8 0cef4ab 7cd5cb8 61ed9bf 0cef4ab 61ed9bf 0cef4ab 61ed9bf 7cd5cb8 0cef4ab 61ed9bf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 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 {
|