fix: support for Spark Lite model (#1526)
* fix: Support for Spark Lite model * fix: fix panic * fix: fix xunfei version config --------- Co-authored-by: JustSong <39998050+songquanpeng@users.noreply.github.com> Co-authored-by: JustSong <songquanpeng@foxmail.com>
This commit is contained in:
parent
f83894c83f
commit
c1971870fa
@ -67,26 +67,28 @@ func SetupContextForSelectedChannel(c *gin.Context, channel *model.Channel, mode
|
|||||||
c.Set(ctxkey.BaseURL, channel.GetBaseURL())
|
c.Set(ctxkey.BaseURL, channel.GetBaseURL())
|
||||||
cfg, _ := channel.LoadConfig()
|
cfg, _ := channel.LoadConfig()
|
||||||
// this is for backward compatibility
|
// this is for backward compatibility
|
||||||
|
if channel.Other != nil {
|
||||||
switch channel.Type {
|
switch channel.Type {
|
||||||
case channeltype.Azure:
|
case channeltype.Azure:
|
||||||
if cfg.APIVersion == "" {
|
if cfg.APIVersion == "" {
|
||||||
cfg.APIVersion = channel.Other
|
cfg.APIVersion = *channel.Other
|
||||||
}
|
}
|
||||||
case channeltype.Xunfei:
|
case channeltype.Xunfei:
|
||||||
if cfg.APIVersion == "" {
|
if cfg.APIVersion == "" {
|
||||||
cfg.APIVersion = channel.Other
|
cfg.APIVersion = *channel.Other
|
||||||
}
|
}
|
||||||
case channeltype.Gemini:
|
case channeltype.Gemini:
|
||||||
if cfg.APIVersion == "" {
|
if cfg.APIVersion == "" {
|
||||||
cfg.APIVersion = channel.Other
|
cfg.APIVersion = *channel.Other
|
||||||
}
|
}
|
||||||
case channeltype.AIProxyLibrary:
|
case channeltype.AIProxyLibrary:
|
||||||
if cfg.LibraryID == "" {
|
if cfg.LibraryID == "" {
|
||||||
cfg.LibraryID = channel.Other
|
cfg.LibraryID = *channel.Other
|
||||||
}
|
}
|
||||||
case channeltype.Ali:
|
case channeltype.Ali:
|
||||||
if cfg.Plugin == "" {
|
if cfg.Plugin == "" {
|
||||||
cfg.Plugin = channel.Other
|
cfg.Plugin = *channel.Other
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.Set(ctxkey.Config, cfg)
|
c.Set(ctxkey.Config, cfg)
|
||||||
|
@ -27,7 +27,7 @@ type Channel struct {
|
|||||||
TestTime int64 `json:"test_time" gorm:"bigint"`
|
TestTime int64 `json:"test_time" gorm:"bigint"`
|
||||||
ResponseTime int `json:"response_time"` // in milliseconds
|
ResponseTime int `json:"response_time"` // in milliseconds
|
||||||
BaseURL *string `json:"base_url" gorm:"column:base_url;default:''"`
|
BaseURL *string `json:"base_url" gorm:"column:base_url;default:''"`
|
||||||
Other string `json:"other"` // DEPRECATED: please save config to field Config
|
Other *string `json:"other"` // DEPRECATED: please save config to field Config
|
||||||
Balance float64 `json:"balance"` // in USD
|
Balance float64 `json:"balance"` // in USD
|
||||||
BalanceUpdatedTime int64 `json:"balance_updated_time" gorm:"bigint"`
|
BalanceUpdatedTime int64 `json:"balance_updated_time" gorm:"bigint"`
|
||||||
Models string `json:"models"`
|
Models string `json:"models"`
|
||||||
|
@ -27,14 +27,6 @@ func (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {
|
|||||||
|
|
||||||
func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {
|
func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {
|
||||||
adaptor.SetupCommonRequestHeader(c, req, meta)
|
adaptor.SetupCommonRequestHeader(c, req, meta)
|
||||||
version := parseAPIVersionByModelName(meta.ActualModelName)
|
|
||||||
if version == "" {
|
|
||||||
version = a.meta.Config.APIVersion
|
|
||||||
}
|
|
||||||
if version == "" {
|
|
||||||
version = "v1.1"
|
|
||||||
}
|
|
||||||
a.meta.Config.APIVersion = version
|
|
||||||
// check DoResponse for auth part
|
// check DoResponse for auth part
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -69,6 +61,14 @@ func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Met
|
|||||||
if a.request == nil {
|
if a.request == nil {
|
||||||
return nil, openai.ErrorWrapper(errors.New("request is nil"), "request_is_nil", http.StatusBadRequest)
|
return nil, openai.ErrorWrapper(errors.New("request is nil"), "request_is_nil", http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
version := parseAPIVersionByModelName(meta.ActualModelName)
|
||||||
|
if version == "" {
|
||||||
|
version = a.meta.Config.APIVersion
|
||||||
|
}
|
||||||
|
if version == "" {
|
||||||
|
version = "v1.1"
|
||||||
|
}
|
||||||
|
a.meta.Config.APIVersion = version
|
||||||
if meta.IsStream {
|
if meta.IsStream {
|
||||||
err, usage = StreamHandler(c, meta, *a.request, splits[0], splits[1], splits[2])
|
err, usage = StreamHandler(c, meta, *a.request, splits[0], splits[1], splits[2])
|
||||||
} else {
|
} else {
|
||||||
|
@ -5,7 +5,14 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/songquanpeng/one-api/common"
|
"github.com/songquanpeng/one-api/common"
|
||||||
@ -16,11 +23,6 @@ import (
|
|||||||
"github.com/songquanpeng/one-api/relay/constant"
|
"github.com/songquanpeng/one-api/relay/constant"
|
||||||
"github.com/songquanpeng/one-api/relay/meta"
|
"github.com/songquanpeng/one-api/relay/meta"
|
||||||
"github.com/songquanpeng/one-api/relay/model"
|
"github.com/songquanpeng/one-api/relay/model"
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"net/url"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// https://console.xfyun.cn/services/cbm
|
// https://console.xfyun.cn/services/cbm
|
||||||
@ -28,11 +30,7 @@ import (
|
|||||||
|
|
||||||
func requestOpenAI2Xunfei(request model.GeneralOpenAIRequest, xunfeiAppId string, domain string) *ChatRequest {
|
func requestOpenAI2Xunfei(request model.GeneralOpenAIRequest, xunfeiAppId string, domain string) *ChatRequest {
|
||||||
messages := make([]Message, 0, len(request.Messages))
|
messages := make([]Message, 0, len(request.Messages))
|
||||||
var lastToolCalls []model.Tool
|
|
||||||
for _, message := range request.Messages {
|
for _, message := range request.Messages {
|
||||||
if message.ToolCalls != nil {
|
|
||||||
lastToolCalls = message.ToolCalls
|
|
||||||
}
|
|
||||||
messages = append(messages, Message{
|
messages = append(messages, Message{
|
||||||
Role: message.Role,
|
Role: message.Role,
|
||||||
Content: message.StringContent(),
|
Content: message.StringContent(),
|
||||||
@ -45,9 +43,10 @@ func requestOpenAI2Xunfei(request model.GeneralOpenAIRequest, xunfeiAppId string
|
|||||||
xunfeiRequest.Parameter.Chat.TopK = request.N
|
xunfeiRequest.Parameter.Chat.TopK = request.N
|
||||||
xunfeiRequest.Parameter.Chat.MaxTokens = request.MaxTokens
|
xunfeiRequest.Parameter.Chat.MaxTokens = request.MaxTokens
|
||||||
xunfeiRequest.Payload.Message.Text = messages
|
xunfeiRequest.Payload.Message.Text = messages
|
||||||
if len(lastToolCalls) != 0 {
|
|
||||||
for _, toolCall := range lastToolCalls {
|
if strings.HasPrefix(domain, "generalv3") {
|
||||||
xunfeiRequest.Payload.Functions.Text = append(xunfeiRequest.Payload.Functions.Text, toolCall.Function)
|
xunfeiRequest.Payload.Functions = &Functions{
|
||||||
|
Text: request.Tools,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +202,7 @@ func Handler(c *gin.Context, meta *meta.Meta, textRequest model.GeneralOpenAIReq
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(xunfeiResponse.Payload.Choices.Text) == 0 {
|
if len(xunfeiResponse.Payload.Choices.Text) == 0 {
|
||||||
return openai.ErrorWrapper(err, "xunfei_empty_response_detected", http.StatusInternalServerError), nil
|
return openai.ErrorWrapper(errors.New("xunfei empty response detected"), "xunfei_empty_response_detected", http.StatusInternalServerError), nil
|
||||||
}
|
}
|
||||||
xunfeiResponse.Payload.Choices.Text[0].Content = content
|
xunfeiResponse.Payload.Choices.Text[0].Content = content
|
||||||
|
|
||||||
|
@ -9,6 +9,10 @@ type Message struct {
|
|||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Functions struct {
|
||||||
|
Text []model.Tool `json:"text,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type ChatRequest struct {
|
type ChatRequest struct {
|
||||||
Header struct {
|
Header struct {
|
||||||
AppId string `json:"app_id"`
|
AppId string `json:"app_id"`
|
||||||
@ -26,9 +30,7 @@ type ChatRequest struct {
|
|||||||
Message struct {
|
Message struct {
|
||||||
Text []Message `json:"text"`
|
Text []Message `json:"text"`
|
||||||
} `json:"message"`
|
} `json:"message"`
|
||||||
Functions *struct {
|
Functions *Functions `json:"functions,omitempty"`
|
||||||
Text []model.Function `json:"text,omitempty"`
|
|
||||||
} `json:"functions,omitempty"`
|
|
||||||
} `json:"payload"`
|
} `json:"payload"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,9 +181,6 @@ const EditChannel = () => {
|
|||||||
if (localInputs.type === 3 && localInputs.other === '') {
|
if (localInputs.type === 3 && localInputs.other === '') {
|
||||||
localInputs.other = '2024-03-01-preview';
|
localInputs.other = '2024-03-01-preview';
|
||||||
}
|
}
|
||||||
if (localInputs.type === 18 && localInputs.other === '') {
|
|
||||||
localInputs.other = 'v2.1';
|
|
||||||
}
|
|
||||||
let res;
|
let res;
|
||||||
localInputs.models = localInputs.models.join(',');
|
localInputs.models = localInputs.models.join(',');
|
||||||
localInputs.group = localInputs.groups.join(',');
|
localInputs.group = localInputs.groups.join(',');
|
||||||
|
Loading…
Reference in New Issue
Block a user