mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-18 09:36:37 +08:00
The GetAdaptor function in the Adaptor struct has been updated to use the actual model name instead of the origin model name. This change ensures that the correct adaptor is retrieved for processing the response.
102 lines
2.6 KiB
Go
102 lines
2.6 KiB
Go
package vertexai
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/songquanpeng/one-api/relay/adaptor"
|
|
channelhelper "github.com/songquanpeng/one-api/relay/adaptor"
|
|
"github.com/songquanpeng/one-api/relay/meta"
|
|
"github.com/songquanpeng/one-api/relay/model"
|
|
relaymodel "github.com/songquanpeng/one-api/relay/model"
|
|
)
|
|
|
|
var _ adaptor.Adaptor = new(Adaptor)
|
|
|
|
const channelName = "vertexai"
|
|
|
|
type Adaptor struct{}
|
|
|
|
func (a *Adaptor) Init(meta *meta.Meta) {
|
|
}
|
|
|
|
func (a *Adaptor) ConvertRequest(c *gin.Context, relayMode int, request *model.GeneralOpenAIRequest) (any, error) {
|
|
if request == nil {
|
|
return nil, errors.New("request is nil")
|
|
}
|
|
|
|
adaptor := GetAdaptor(request.Model)
|
|
if adaptor == nil {
|
|
return nil, errors.New("adaptor not found")
|
|
}
|
|
|
|
return adaptor.ConvertRequest(c, relayMode, request)
|
|
}
|
|
|
|
func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, meta *meta.Meta) (usage *model.Usage, err *model.ErrorWithStatusCode) {
|
|
adaptor := GetAdaptor(meta.ActualModelName)
|
|
if adaptor == nil {
|
|
return nil, &relaymodel.ErrorWithStatusCode{
|
|
StatusCode: http.StatusInternalServerError,
|
|
Error: relaymodel.Error{
|
|
Message: "adaptor not found",
|
|
},
|
|
}
|
|
}
|
|
return adaptor.DoResponse(c, resp, meta)
|
|
}
|
|
|
|
func (a *Adaptor) GetModelList() (models []string) {
|
|
models = modelList
|
|
return
|
|
}
|
|
|
|
func (a *Adaptor) GetChannelName() string {
|
|
return channelName
|
|
}
|
|
|
|
func (a *Adaptor) GetRequestURL(meta *meta.Meta) (string, error) {
|
|
suffix := ""
|
|
if strings.HasPrefix(meta.ActualModelName, "gemini") {
|
|
if meta.IsStream {
|
|
suffix = "streamGenerateContent"
|
|
} else {
|
|
suffix = "generateContent"
|
|
}
|
|
} else {
|
|
if meta.IsStream {
|
|
suffix = "streamRawPredict"
|
|
} else {
|
|
suffix = "rawPredict"
|
|
}
|
|
}
|
|
|
|
baseUrl := fmt.Sprintf("https://%s-aiplatform.googleapis.com/v1/projects/%s/locations/%s/publishers/google/models/%s:%s", meta.Config.Region, meta.Config.VertexAIProjectID, meta.Config.Region, meta.ActualModelName, suffix)
|
|
return baseUrl, nil
|
|
}
|
|
|
|
func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, meta *meta.Meta) error {
|
|
adaptor.SetupCommonRequestHeader(c, req, meta)
|
|
token, err := getToken(c, meta.ChannelId, meta.Config.VertexAIADC)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
req.Header.Set("Authorization", "Bearer "+token)
|
|
return nil
|
|
}
|
|
|
|
func (a *Adaptor) ConvertImageRequest(request *model.ImageRequest) (any, error) {
|
|
if request == nil {
|
|
return nil, errors.New("request is nil")
|
|
}
|
|
return request, nil
|
|
}
|
|
|
|
func (a *Adaptor) DoRequest(c *gin.Context, meta *meta.Meta, requestBody io.Reader) (*http.Response, error) {
|
|
return channelhelper.DoRequestHelper(a, c, meta, requestBody)
|
|
}
|