mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-04-19 11:48:38 +00:00
Merge pull request #2036 from etnAtker/siliconflow-images-generations
feat: 添加SiliconFlow图像生成接口自动转换支持
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/QuantumNous/new-api/common"
|
||||||
"github.com/QuantumNous/new-api/dto"
|
"github.com/QuantumNous/new-api/dto"
|
||||||
"github.com/QuantumNous/new-api/relay/channel"
|
"github.com/QuantumNous/new-api/relay/channel"
|
||||||
"github.com/QuantumNous/new-api/relay/channel/openai"
|
"github.com/QuantumNous/new-api/relay/channel/openai"
|
||||||
@@ -35,8 +36,27 @@ func (a *Adaptor) ConvertAudioRequest(c *gin.Context, info *relaycommon.RelayInf
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *Adaptor) ConvertImageRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.ImageRequest) (any, error) {
|
func (a *Adaptor) ConvertImageRequest(c *gin.Context, info *relaycommon.RelayInfo, request dto.ImageRequest) (any, error) {
|
||||||
adaptor := openai.Adaptor{}
|
// 解析extra到SFImageRequest里,以填入SiliconFlow特殊字段。若失败重建一个空的。
|
||||||
return adaptor.ConvertImageRequest(c, info, request)
|
sfRequest := &SFImageRequest{}
|
||||||
|
extra, err := common.Marshal(request.Extra)
|
||||||
|
if err == nil {
|
||||||
|
err = common.Unmarshal(extra, sfRequest)
|
||||||
|
if err != nil {
|
||||||
|
sfRequest = &SFImageRequest{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sfRequest.Model = request.Model
|
||||||
|
sfRequest.Prompt = request.Prompt
|
||||||
|
// 优先使用image_size/batch_size,否则使用OpenAI标准的size/n
|
||||||
|
if sfRequest.ImageSize == "" {
|
||||||
|
sfRequest.ImageSize = request.Size
|
||||||
|
}
|
||||||
|
if sfRequest.BatchSize == 0 {
|
||||||
|
sfRequest.BatchSize = request.N
|
||||||
|
}
|
||||||
|
|
||||||
|
return sfRequest, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Adaptor) Init(info *relaycommon.RelayInfo) {
|
func (a *Adaptor) Init(info *relaycommon.RelayInfo) {
|
||||||
@@ -51,6 +71,8 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
|
|||||||
return fmt.Sprintf("%s/v1/chat/completions", info.ChannelBaseUrl), nil
|
return fmt.Sprintf("%s/v1/chat/completions", info.ChannelBaseUrl), nil
|
||||||
} else if info.RelayMode == constant.RelayModeCompletions {
|
} else if info.RelayMode == constant.RelayModeCompletions {
|
||||||
return fmt.Sprintf("%s/v1/completions", info.ChannelBaseUrl), nil
|
return fmt.Sprintf("%s/v1/completions", info.ChannelBaseUrl), nil
|
||||||
|
} else if info.RelayMode == constant.RelayModeImagesGenerations {
|
||||||
|
return fmt.Sprintf("%s/v1/images/generations", info.ChannelBaseUrl), nil
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s/v1/chat/completions", info.ChannelBaseUrl), nil
|
return fmt.Sprintf("%s/v1/chat/completions", info.ChannelBaseUrl), nil
|
||||||
}
|
}
|
||||||
@@ -102,6 +124,8 @@ func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, info *relaycom
|
|||||||
fallthrough
|
fallthrough
|
||||||
case constant.RelayModeChatCompletions:
|
case constant.RelayModeChatCompletions:
|
||||||
fallthrough
|
fallthrough
|
||||||
|
case constant.RelayModeImagesGenerations:
|
||||||
|
fallthrough
|
||||||
default:
|
default:
|
||||||
if info.IsStream {
|
if info.IsStream {
|
||||||
usage, err = openai.OaiStreamHandler(c, info, resp)
|
usage, err = openai.OaiStreamHandler(c, info, resp)
|
||||||
|
|||||||
@@ -15,3 +15,18 @@ type SFRerankResponse struct {
|
|||||||
Results []dto.RerankResponseResult `json:"results"`
|
Results []dto.RerankResponseResult `json:"results"`
|
||||||
Meta SFMeta `json:"meta"`
|
Meta SFMeta `json:"meta"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SFImageRequest struct {
|
||||||
|
Model string `json:"model"`
|
||||||
|
Prompt string `json:"prompt"`
|
||||||
|
NegativePrompt string `json:"negative_prompt,omitempty"`
|
||||||
|
ImageSize string `json:"image_size,omitempty"`
|
||||||
|
BatchSize uint `json:"batch_size,omitempty"`
|
||||||
|
Seed uint64 `json:"seed,omitempty"`
|
||||||
|
NumInferenceSteps uint `json:"num_inference_steps,omitempty"`
|
||||||
|
GuidanceScale float64 `json:"guidance_scale,omitempty"`
|
||||||
|
Cfg float64 `json:"cfg,omitempty"`
|
||||||
|
Image string `json:"image,omitempty"`
|
||||||
|
Image2 string `json:"image2,omitempty"`
|
||||||
|
Image3 string `json:"image3,omitempty"`
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user