From b666c0928c6f804237259513cc8cb36ff279e125 Mon Sep 17 00:00:00 2001 From: David xu Date: Tue, 20 Jun 2023 15:24:37 +0800 Subject: [PATCH] feat response fmt like openai api --- conversion/response/chatgpt/convert.go | 6 ++++-- internal/chatgpt/request.go | 6 ++++-- typings/official/response.go | 5 ++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/conversion/response/chatgpt/convert.go b/conversion/response/chatgpt/convert.go index 366e332..93b9220 100644 --- a/conversion/response/chatgpt/convert.go +++ b/conversion/response/chatgpt/convert.go @@ -7,9 +7,11 @@ import ( "strings" ) -func ConvertToString(chatgpt_response *chatgpt_types.ChatGPTResponse, previous_text *typings.StringStruct) string { +func ConvertToString(chatgpt_response *chatgpt_types.ChatGPTResponse, previous_text *typings.StringStruct, role bool) string { translated_response := official_types.NewChatCompletionChunk(strings.ReplaceAll(chatgpt_response.Message.Content.Parts[0], *&previous_text.Text, "")) - translated_response.Choices[0].Delta.Role = chatgpt_response.Message.Author.Role + if role { + translated_response.Choices[0].Delta.Role = chatgpt_response.Message.Author.Role + } previous_text.Text = chatgpt_response.Message.Content.Parts[0] return "data: " + translated_response.String() + "\n\n" diff --git a/internal/chatgpt/request.go b/internal/chatgpt/request.go index a3d2ef0..fc5e6fb 100644 --- a/internal/chatgpt/request.go +++ b/internal/chatgpt/request.go @@ -158,6 +158,7 @@ func Handler(c *gin.Context, response *http.Response, token string, translated_r var finish_reason string var previous_text typings.StringStruct var original_response chatgpt_types.ChatGPTResponse + var isRole = true for { line, err := reader.ReadString('\n') if err != nil { @@ -186,10 +187,11 @@ func Handler(c *gin.Context, response *http.Response, token string, translated_r if original_response.Message.Author.Role != "assistant" || original_response.Message.Content.Parts == nil { continue } - if original_response.Message.Metadata.MessageType != "next" && original_response.Message.Metadata.MessageType != "continue" { + if original_response.Message.Metadata.MessageType != "next" && original_response.Message.Metadata.MessageType != "continue" || original_response.Message.EndTurn != nil { continue } - response_string := chatgpt_response_converter.ConvertToString(&original_response, &previous_text) + response_string := chatgpt_response_converter.ConvertToString(&original_response, &previous_text, isRole) + isRole = false if stream { _, err = c.Writer.WriteString(response_string) if err != nil { diff --git a/typings/official/response.go b/typings/official/response.go index 747b540..0ef4b61 100644 --- a/typings/official/response.go +++ b/typings/official/response.go @@ -22,8 +22,8 @@ type Choices struct { } type Delta struct { - Content string `json:"content"` - Role string `json:"role"` + Content string `json:"content,omitempty"` + Role string `json:"role,omitempty"` } func NewChatCompletionChunk(text string) ChatCompletionChunk { @@ -37,7 +37,6 @@ func NewChatCompletionChunk(text string) ChatCompletionChunk { Index: 0, Delta: Delta{ Content: text, - Role: "assistant", }, FinishReason: nil, },