Przeglądaj źródła

feat: gemini imagen quality value

Sh1n3zZ 4 miesięcy temu
rodzic
commit
8f00af181b
2 zmienionych plików z 28 dodań i 1 usunięć
  1. 1 0
      dto/gemini.go
  2. 27 1
      relay/channel/gemini/adaptor.go

+ 1 - 0
dto/gemini.go

@@ -329,6 +329,7 @@ type GeminiImageParameters struct {
 	SampleCount      int    `json:"sampleCount,omitempty"`
 	AspectRatio      string `json:"aspectRatio,omitempty"`
 	PersonGeneration string `json:"personGeneration,omitempty"`
+	ImageSize        string `json:"imageSize,omitempty"`
 }
 
 type GeminiImageResponse struct {

+ 27 - 1
relay/channel/gemini/adaptor.go

@@ -67,8 +67,12 @@ func (a *Adaptor) ConvertImageRequest(c *gin.Context, info *relaycommon.RelayInf
 			aspectRatio = size
 		} else {
 			switch size {
-			case "1024x1024":
+			case "256x256", "512x512", "1024x1024":
 				aspectRatio = "1:1"
+			case "1536x1024":
+				aspectRatio = "3:2"
+			case "1024x1536":
+				aspectRatio = "2:3"
 			case "1024x1792":
 				aspectRatio = "9:16"
 			case "1792x1024":
@@ -91,6 +95,28 @@ func (a *Adaptor) ConvertImageRequest(c *gin.Context, info *relaycommon.RelayInf
 		},
 	}
 
+	// Set imageSize when quality parameter is specified
+	// Map quality parameter to imageSize (only supported by Standard and Ultra models)
+	// quality values: auto, high, medium, low (for gpt-image-1), hd, standard (for dall-e-3)
+	// imageSize values: 1K (default), 2K
+	// https://ai.google.dev/gemini-api/docs/imagen
+	// https://platform.openai.com/docs/api-reference/images/create
+	if request.Quality != "" {
+		imageSize := "1K" // default
+		switch request.Quality {
+		case "hd", "high":
+			imageSize = "2K"
+		case "2K":
+			imageSize = "2K"
+		case "standard", "medium", "low", "auto", "1K":
+			imageSize = "1K"
+		default:
+			// unknown quality value, default to 1K
+			imageSize = "1K"
+		}
+		geminiRequest.Parameters.ImageSize = imageSize
+	}
+
 	return geminiRequest, nil
 }