package dto import ( "encoding/json" "one-api/types" "strings" "github.com/gin-gonic/gin" ) type ImageRequest struct { Model string `json:"model"` Prompt string `json:"prompt" binding:"required"` N uint `json:"n,omitempty"` Size string `json:"size,omitempty"` Quality string `json:"quality,omitempty"` ResponseFormat string `json:"response_format,omitempty"` Style json.RawMessage `json:"style,omitempty"` User json.RawMessage `json:"user,omitempty"` ExtraFields json.RawMessage `json:"extra_fields,omitempty"` Background json.RawMessage `json:"background,omitempty"` Moderation json.RawMessage `json:"moderation,omitempty"` OutputFormat json.RawMessage `json:"output_format,omitempty"` OutputCompression json.RawMessage `json:"output_compression,omitempty"` PartialImages json.RawMessage `json:"partial_images,omitempty"` // Stream bool `json:"stream,omitempty"` Watermark *bool `json:"watermark,omitempty"` } func (i *ImageRequest) GetTokenCountMeta() *types.TokenCountMeta { var sizeRatio = 1.0 var qualityRatio = 1.0 if strings.HasPrefix(i.Model, "dall-e") { // Size if i.Size == "256x256" { sizeRatio = 0.4 } else if i.Size == "512x512" { sizeRatio = 0.45 } else if i.Size == "1024x1024" { sizeRatio = 1 } else if i.Size == "1024x1792" || i.Size == "1792x1024" { sizeRatio = 2 } if i.Model == "dall-e-3" && i.Quality == "hd" { qualityRatio = 2.0 if i.Size == "1024x1792" || i.Size == "1792x1024" { qualityRatio = 1.5 } } } // not support token count for dalle return &types.TokenCountMeta{ CombineText: i.Prompt, MaxTokens: 1584, ImagePriceRatio: sizeRatio * qualityRatio * float64(i.N), } } func (i *ImageRequest) IsStream(c *gin.Context) bool { return false } func (i *ImageRequest) SetModelName(modelName string) { if modelName != "" { i.Model = modelName } } type ImageResponse struct { Data []ImageData `json:"data"` Created int64 `json:"created"` } type ImageData struct { Url string `json:"url"` B64Json string `json:"b64_json"` RevisedPrompt string `json:"revised_prompt"` }