one-api/controller/relay-image-edits.go
Buer ef041e28a1
♻️ refactor: provider refactor (#41)
* ♻️ refactor: provider refactor
* 完善百度/讯飞的函数调用,现在可以在`lobe-chat`中正常调用函数了
2024-01-19 02:47:10 +08:00

80 lines
1.7 KiB
Go

package controller
import (
"net/http"
"one-api/common"
providersBase "one-api/providers/base"
"one-api/types"
"github.com/gin-gonic/gin"
)
func RelayImageEdits(c *gin.Context) {
var imageEditRequest types.ImageEditRequest
if err := common.UnmarshalBodyReusable(c, &imageEditRequest); err != nil {
common.AbortWithMessage(c, http.StatusBadRequest, err.Error())
return
}
if imageEditRequest.Prompt == "" {
common.AbortWithMessage(c, http.StatusBadRequest, "field prompt is required")
return
}
if imageEditRequest.Model == "" {
imageEditRequest.Model = "dall-e-2"
}
if imageEditRequest.Size == "" {
imageEditRequest.Size = "1024x1024"
}
// 获取供应商
provider, modelName, fail := getProvider(c, imageEditRequest.Model)
if fail {
return
}
imageEditRequest.Model = modelName
imageEditsProvider, ok := provider.(providersBase.ImageEditsInterface)
if !ok {
common.AbortWithMessage(c, http.StatusNotImplemented, "channel not implemented")
return
}
// 获取Input Tokens
promptTokens, err := common.CountTokenImage(imageEditRequest)
if err != nil {
common.AbortWithMessage(c, http.StatusInternalServerError, err.Error())
return
}
usage := &types.Usage{
PromptTokens: promptTokens,
}
provider.SetUsage(usage)
quotaInfo, errWithCode := generateQuotaInfo(c, imageEditRequest.Model, promptTokens)
if errWithCode != nil {
errorHelper(c, errWithCode)
return
}
response, errWithCode := imageEditsProvider.CreateImageEdits(&imageEditRequest)
if errWithCode != nil {
errorHelper(c, errWithCode)
return
}
errWithCode = responseJsonClient(c, response)
// 如果报错,则退还配额
if errWithCode != nil {
quotaInfo.undo(c, errWithCode)
return
}
quotaInfo.consume(c, usage)
}