Procházet zdrojové kódy

feat: support azure images edits (#396)

* feat: support azure imagesEdits

* fix: call err unsupported mimetype ('application/octet-stream')

* refactor: simplify multipart form handling in ImagesHandler

close #395
Zhiqiang Li před 2 měsíci
rodič
revize
c6ceffbc51

+ 15 - 0
core/relay/adaptor/azure/main.go

@@ -53,6 +53,21 @@ func GetRequestURL(meta *meta.Meta, replaceDot bool) (adaptor.RequestURL, error)
 			return adaptor.RequestURL{}, err
 		}
 
+		return adaptor.RequestURL{
+			Method: http.MethodPost,
+			URL:    fmt.Sprintf("%s?api-version=%s", url, apiVersion),
+		}, nil
+	case mode.ImagesEdits:
+		url, err := url.JoinPath(
+			meta.Channel.BaseURL,
+			"/openai/deployments",
+			model,
+			"/images/edits",
+		)
+		if err != nil {
+			return adaptor.RequestURL{}, err
+		}
+
 		return adaptor.RequestURL{
 			Method: http.MethodPost,
 			URL:    fmt.Sprintf("%s?api-version=%s", url, apiVersion),

+ 6 - 5
core/relay/adaptor/openai/image.go

@@ -93,7 +93,7 @@ func ConvertImagesEditsRequest(
 		}
 	}
 
-	for key, files := range request.MultipartForm.File {
+	for _, files := range request.MultipartForm.File {
 		if len(files) == 0 {
 			continue
 		}
@@ -105,7 +105,7 @@ func ConvertImagesEditsRequest(
 			return adaptor.ConvertResult{}, err
 		}
 
-		w, err := multipartWriter.CreateFormFile(key, fileHeader.Filename)
+		w, err := multipartWriter.CreatePart(fileHeader.Header)
 		if err != nil {
 			file.Close()
 			return adaptor.ConvertResult{}, err
@@ -119,12 +119,13 @@ func ConvertImagesEditsRequest(
 		}
 	}
 
-	multipartWriter.Close()
-	ContentType := multipartWriter.FormDataContentType()
+	if err := multipartWriter.Close(); err != nil {
+		return adaptor.ConvertResult{}, err
+	}
 
 	return adaptor.ConvertResult{
 		Header: http.Header{
-			"Content-Type": {ContentType},
+			"Content-Type": {multipartWriter.FormDataContentType()},
 		},
 		Body: multipartBody,
 	}, nil