This commit refactors the logging mechanism across the application by replacing direct logger calls with a centralized logging approach using the `common` package. Key changes include: - Replaced instances of `logger.SysLog` and `logger.FatalLog` with `common.SysLog` and `common.FatalLog` for consistent logging practices. - Updated resource initialization error handling to utilize the new logging structure, enhancing maintainability and readability. - Minor adjustments to improve code clarity and organization throughout various modules. This change aims to streamline logging and improve the overall architecture of the codebase.
139 lines
4.1 KiB
Go
139 lines
4.1 KiB
Go
package coze
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"one-api/dto"
|
|
"one-api/relay/channel"
|
|
"one-api/relay/common"
|
|
"one-api/types"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type Adaptor struct {
|
|
}
|
|
|
|
func (a *Adaptor) ConvertGeminiRequest(*gin.Context, *common.RelayInfo, *dto.GeminiChatRequest) (any, error) {
|
|
//TODO implement me
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
// ConvertAudioRequest implements channel.Adaptor.
|
|
func (a *Adaptor) ConvertAudioRequest(c *gin.Context, info *common.RelayInfo, request dto.AudioRequest) (io.Reader, error) {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
// ConvertClaudeRequest implements channel.Adaptor.
|
|
func (a *Adaptor) ConvertClaudeRequest(c *gin.Context, info *common.RelayInfo, request *dto.ClaudeRequest) (any, error) {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
// ConvertEmbeddingRequest implements channel.Adaptor.
|
|
func (a *Adaptor) ConvertEmbeddingRequest(c *gin.Context, info *common.RelayInfo, request dto.EmbeddingRequest) (any, error) {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
// ConvertImageRequest implements channel.Adaptor.
|
|
func (a *Adaptor) ConvertImageRequest(c *gin.Context, info *common.RelayInfo, request dto.ImageRequest) (any, error) {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
// ConvertOpenAIRequest implements channel.Adaptor.
|
|
func (a *Adaptor) ConvertOpenAIRequest(c *gin.Context, info *common.RelayInfo, request *dto.GeneralOpenAIRequest) (any, error) {
|
|
if request == nil {
|
|
return nil, errors.New("request is nil")
|
|
}
|
|
return convertCozeChatRequest(c, *request), nil
|
|
}
|
|
|
|
// ConvertOpenAIResponsesRequest implements channel.Adaptor.
|
|
func (a *Adaptor) ConvertOpenAIResponsesRequest(c *gin.Context, info *common.RelayInfo, request dto.OpenAIResponsesRequest) (any, error) {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
// ConvertRerankRequest implements channel.Adaptor.
|
|
func (a *Adaptor) ConvertRerankRequest(c *gin.Context, relayMode int, request dto.RerankRequest) (any, error) {
|
|
return nil, errors.New("not implemented")
|
|
}
|
|
|
|
// DoRequest implements channel.Adaptor.
|
|
func (a *Adaptor) DoRequest(c *gin.Context, info *common.RelayInfo, requestBody io.Reader) (any, error) {
|
|
if info.IsStream {
|
|
return channel.DoApiRequest(a, c, info, requestBody)
|
|
}
|
|
// 首先发送创建消息请求,成功后再发送获取消息请求
|
|
// 发送创建消息请求
|
|
resp, err := channel.DoApiRequest(a, c, info, requestBody)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// 解析 resp
|
|
var cozeResponse CozeChatResponse
|
|
respBody, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
err = json.Unmarshal(respBody, &cozeResponse)
|
|
if cozeResponse.Code != 0 {
|
|
return nil, errors.New(cozeResponse.Msg)
|
|
}
|
|
c.Set("coze_conversation_id", cozeResponse.Data.ConversationId)
|
|
c.Set("coze_chat_id", cozeResponse.Data.Id)
|
|
// 轮询检查消息是否完成
|
|
for {
|
|
err, isComplete := checkIfChatComplete(a, c, info)
|
|
if err != nil {
|
|
return nil, err
|
|
} else {
|
|
if isComplete {
|
|
break
|
|
}
|
|
}
|
|
time.Sleep(time.Second * 1)
|
|
}
|
|
// 发送获取消息请求
|
|
return getChatDetail(a, c, info)
|
|
}
|
|
|
|
// DoResponse implements channel.Adaptor.
|
|
func (a *Adaptor) DoResponse(c *gin.Context, resp *http.Response, info *common.RelayInfo) (usage any, err *types.NewAPIError) {
|
|
if info.IsStream {
|
|
usage, err = cozeChatStreamHandler(c, info, resp)
|
|
} else {
|
|
usage, err = cozeChatHandler(c, info, resp)
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetChannelName implements channel.Adaptor.
|
|
func (a *Adaptor) GetChannelName() string {
|
|
return ChannelName
|
|
}
|
|
|
|
// GetModelList implements channel.Adaptor.
|
|
func (a *Adaptor) GetModelList() []string {
|
|
return ModelList
|
|
}
|
|
|
|
// GetRequestURL implements channel.Adaptor.
|
|
func (a *Adaptor) GetRequestURL(info *common.RelayInfo) (string, error) {
|
|
return fmt.Sprintf("%s/v3/chat", info.ChannelBaseUrl), nil
|
|
}
|
|
|
|
// Init implements channel.Adaptor.
|
|
func (a *Adaptor) Init(info *common.RelayInfo) {
|
|
|
|
}
|
|
|
|
// SetupRequestHeader implements channel.Adaptor.
|
|
func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Header, info *common.RelayInfo) error {
|
|
channel.SetupApiRequestHeader(info, c, req)
|
|
req.Set("Authorization", "Bearer "+info.ApiKey)
|
|
return nil
|
|
}
|