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 {