| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package controller
- import (
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/labring/aiproxy/core/model"
- "github.com/labring/aiproxy/core/relay/adaptor/openai"
- relaymodel "github.com/labring/aiproxy/core/relay/model"
- "github.com/labring/aiproxy/core/relay/utils"
- )
- func getImagesRequest(c *gin.Context) (*relaymodel.ImageRequest, error) {
- imageRequest, err := utils.UnmarshalImageRequest(c.Request)
- if err != nil {
- return nil, err
- }
- if imageRequest.Prompt == "" {
- return nil, errors.New("prompt is required")
- }
- if imageRequest.N == 0 {
- imageRequest.N = 1
- }
- return imageRequest, nil
- }
- func GetImagesOutputPrice(modelConfig model.ModelConfig, size, quality string) (float64, bool) {
- switch {
- case len(modelConfig.ImagePrices) == 0 && len(modelConfig.ImageQualityPrices) == 0:
- return float64(modelConfig.Price.OutputPrice), true
- case len(modelConfig.ImageQualityPrices) != 0:
- price, ok := modelConfig.ImageQualityPrices[size][quality]
- return price, ok
- case len(modelConfig.ImagePrices) != 0:
- price, ok := modelConfig.ImagePrices[size]
- return price, ok
- default:
- return 0, false
- }
- }
- func GetImagesRequestPrice(c *gin.Context, mc model.ModelConfig) (model.Price, error) {
- imageRequest, err := getImagesRequest(c)
- if err != nil {
- return model.Price{}, err
- }
- imageCostPrice, ok := GetImagesOutputPrice(mc, imageRequest.Size, imageRequest.Quality)
- if !ok {
- return model.Price{}, fmt.Errorf(
- "invalid image size `%s` or quality `%s`",
- imageRequest.Size,
- imageRequest.Quality,
- )
- }
- return model.Price{
- PerRequestPrice: mc.Price.PerRequestPrice,
- InputPrice: mc.Price.InputPrice,
- InputPriceUnit: mc.Price.InputPriceUnit,
- ImageInputPrice: mc.Price.ImageInputPrice,
- ImageInputPriceUnit: mc.Price.ImageInputPriceUnit,
- OutputPrice: model.ZeroNullFloat64(imageCostPrice),
- OutputPriceUnit: mc.Price.OutputPriceUnit,
- }, nil
- }
- func GetImagesRequestUsage(c *gin.Context, _ model.ModelConfig) (model.Usage, error) {
- imageRequest, err := getImagesRequest(c)
- if err != nil {
- return model.Usage{}, err
- }
- return model.Usage{
- InputTokens: model.ZeroNullInt64(openai.CountTokenInput(
- imageRequest.Prompt,
- imageRequest.Model,
- )),
- OutputTokens: model.ZeroNullInt64(imageRequest.N),
- }, nil
- }
|