From 8726729ade006d41018b046825a527a35462e144 Mon Sep 17 00:00:00 2001 From: haochun <759869747@qq.com> Date: Thu, 10 Oct 2024 10:53:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=81=E5=BC=8F=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=97=B6=E7=9A=84=E7=BB=93=E6=9E=84=EF=BC=8C=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/adaptor/ali/main.go | 32 ++++++++++++++++++++------------ relay/adaptor/openai/model.go | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/relay/adaptor/ali/main.go b/relay/adaptor/ali/main.go index a77da8c7..43198c48 100644 --- a/relay/adaptor/ali/main.go +++ b/relay/adaptor/ali/main.go @@ -147,7 +147,24 @@ func responseAli2OpenAI(response *ChatResponse) *openai.TextResponse { return &fullTextResponse } -func streamResponseAli2OpenAI(aliResponse *ChatResponse) *openai.ChatCompletionsStreamResponse { +func streamResponseAli2OpenAI(aliResponse *ChatResponse) interface{} { + if aliResponse.Code != "" { + var choice openai.ChatCompletionsStreamResponseChoice + choice.Index = 0 + choice.Delta = model.Message{ + Role: "assistant", + Content: "", + } + response := openai.ChatCompletionsErrorStreamResponse{ + Id: aliResponse.RequestId, + Object: "chat.completion.chunk", + Created: helper.GetTimestamp(), + Model: "qwen", + ErrorCode: aliResponse.Code, + Choices: []openai.ChatCompletionsStreamResponseChoice{choice}, + } + return &response + } if len(aliResponse.Output.Choices) == 0 { return nil } @@ -202,18 +219,9 @@ func StreamHandler(c *gin.Context, resp *http.Response) (*model.ErrorWithStatusC // Check for known error codes and handle accordingly if aliResponse.Code != "" { + response := streamResponseAli2OpenAI(&aliResponse) - errorResponse := &model.ErrorWithStatusCode{ - Error: model.Error{ - Message: aliResponse.Message, - Type: aliResponse.Code, - Param: aliResponse.RequestId, - Code: aliResponse.Code, - }, - StatusCode: resp.StatusCode, - } - - err = render.ObjectData(c, errorResponse) + err = render.ObjectData(c, response) if err != nil { logger.SysError(err.Error()) } diff --git a/relay/adaptor/openai/model.go b/relay/adaptor/openai/model.go index 4c974de4..d45bd316 100644 --- a/relay/adaptor/openai/model.go +++ b/relay/adaptor/openai/model.go @@ -97,6 +97,16 @@ type TextResponse struct { model.Usage `json:"usage"` } +type ErrorTextResponse struct { + Id string `json:"id"` + Model string `json:"model,omitempty"` + Object string `json:"object"` + ErrorCode string `json:"error_code"` + Created int64 `json:"created"` + Choices []TextResponseChoice `json:"choices"` + model.Usage `json:"usage"` +} + type EmbeddingResponseItem struct { Object string `json:"object"` Index int `json:"index"` @@ -137,6 +147,16 @@ type ChatCompletionsStreamResponse struct { Usage *model.Usage `json:"usage,omitempty"` } +type ChatCompletionsErrorStreamResponse struct { + Id string `json:"id"` + Object string `json:"object"` + Created int64 `json:"created"` + ErrorCode string `json:"error_code"` + Model string `json:"model"` + Choices []ChatCompletionsStreamResponseChoice `json:"choices"` + Usage *model.Usage `json:"usage,omitempty"` +} + type CompletionsStreamResponse struct { Choices []struct { Text string `json:"text"`