From 5797dd4733939ca9139aa7d4c4d6afe6acf4c6e0 Mon Sep 17 00:00:00 2001 From: sijinhui Date: Wed, 19 Feb 2025 23:01:17 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=81=AB=E5=B1=B1=E6=96=B9=E8=88=9F=E7=9A=84=E8=81=94=E7=BD=91?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=93=8D=E5=BA=94=E6=A0=BC=E5=BC=8F=E4=B8=8D?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=AF=BC=E8=87=B4=E6=97=A0=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/adaptor/openai/main.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/relay/adaptor/openai/main.go b/relay/adaptor/openai/main.go index 97080738..1fb52c53 100644 --- a/relay/adaptor/openai/main.go +++ b/relay/adaptor/openai/main.go @@ -35,6 +35,12 @@ func StreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*model.E doneRendered := false for scanner.Scan() { data := scanner.Text() + // 确保前缀是 "data: {"(冒号后有空格) + if strings.HasPrefix(data, "data:{") { // 检测无空格的情况 + // 替换整个前缀 + data = "data: {" + strings.TrimPrefix(data, "data:{") + } + if len(data) < dataPrefixLength { // ignore blank line or wrong format continue } From 585674dbf77aa8fc521aa0bf467acf6f51e1adbe Mon Sep 17 00:00:00 2001 From: sijinhui Date: Fri, 21 Feb 2025 22:11:08 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=8E=B0=E6=9C=89=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E9=80=82=E9=85=8D=E5=A4=84=E7=90=86=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E7=A9=BA=E6=A0=BC=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/adaptor/openai/main.go | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/relay/adaptor/openai/main.go b/relay/adaptor/openai/main.go index 1fb52c53..793b481a 100644 --- a/relay/adaptor/openai/main.go +++ b/relay/adaptor/openai/main.go @@ -35,23 +35,20 @@ func StreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*model.E doneRendered := false for scanner.Scan() { data := scanner.Text() - // 确保前缀是 "data: {"(冒号后有空格) - if strings.HasPrefix(data, "data:{") { // 检测无空格的情况 - // 替换整个前缀 - data = "data: {" + strings.TrimPrefix(data, "data:{") - } - if len(data) < dataPrefixLength { // ignore blank line or wrong format continue } - if data[:dataPrefixLength] != dataPrefix && data[:dataPrefixLength] != done { - continue - } - if strings.HasPrefix(data[dataPrefixLength:], done) { - render.StringData(c, data) - doneRendered = true - continue - } + if data[:dataPrefixLength] != dataPrefix { + if strings.HasPrefix(data, done) { + render.StringData(c, data) + doneRendered = true + continue + } + continue + } else { + // 这里处理标准的data:开头,标准化为 data: + 单空格格式 + data = dataPrefix + " " + strings.TrimLeft(data[len(dataPrefix):], " ") + } switch relayMode { case relaymode.ChatCompletions: var streamResponse ChatCompletionsStreamResponse From 4625aa9fa8835db6d3320fce0f5812167105b1f8 Mon Sep 17 00:00:00 2001 From: sijinhui Date: Fri, 21 Feb 2025 22:23:39 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E8=BF=99=E9=87=8C=E5=A4=9A=E5=86=99?= =?UTF-8?q?=E4=BA=86=E4=B8=80=E4=B8=AAcontinue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/adaptor/openai/main.go | 1 - 1 file changed, 1 deletion(-) diff --git a/relay/adaptor/openai/main.go b/relay/adaptor/openai/main.go index 793b481a..243fc266 100644 --- a/relay/adaptor/openai/main.go +++ b/relay/adaptor/openai/main.go @@ -42,7 +42,6 @@ func StreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*model.E if strings.HasPrefix(data, done) { render.StringData(c, data) doneRendered = true - continue } continue } else { From 33fd5d5913a4a952f4b6d4377a755f447c1ae5f4 Mon Sep 17 00:00:00 2001 From: sijinhui Date: Fri, 21 Feb 2025 22:51:53 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=8A=B1=E6=AD=89=EF=BC=8C=E7=BB=8F?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=BF=99=E6=A0=B7=E6=89=8D=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/adaptor/openai/main.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/relay/adaptor/openai/main.go b/relay/adaptor/openai/main.go index 243fc266..d83a4588 100644 --- a/relay/adaptor/openai/main.go +++ b/relay/adaptor/openai/main.go @@ -19,7 +19,7 @@ import ( ) const ( - dataPrefix = "data: " + dataPrefix = "data:" done = "[DONE]" dataPrefixLength = len(dataPrefix) ) @@ -38,15 +38,17 @@ func StreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*model.E if len(data) < dataPrefixLength { // ignore blank line or wrong format continue } - if data[:dataPrefixLength] != dataPrefix { - if strings.HasPrefix(data, done) { - render.StringData(c, data) - doneRendered = true - } - continue + if data[:dataPrefixLength] != dataPrefix && data[:dataPrefixLength] != done { + continue } else { + payload := strings.TrimLeft(data[len(dataPrefix):], " ") // 这里处理标准的data:开头,标准化为 data: + 单空格格式 data = dataPrefix + " " + strings.TrimLeft(data[len(dataPrefix):], " ") + if strings.HasPrefix(payload, done) { + render.StringData(c, data) + doneRendered = true + continue + } } switch relayMode { case relaymode.ChatCompletions: From 80c55280755cbf2bd664430d676605c7092d837d Mon Sep 17 00:00:00 2001 From: sijinhui Date: Fri, 21 Feb 2025 22:55:59 +0800 Subject: [PATCH 5/5] 1 --- relay/adaptor/openai/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/relay/adaptor/openai/main.go b/relay/adaptor/openai/main.go index d83a4588..f7cd0dd4 100644 --- a/relay/adaptor/openai/main.go +++ b/relay/adaptor/openai/main.go @@ -41,9 +41,9 @@ func StreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*model.E if data[:dataPrefixLength] != dataPrefix && data[:dataPrefixLength] != done { continue } else { - payload := strings.TrimLeft(data[len(dataPrefix):], " ") + payload := strings.TrimLeft(data[dataPrefixLength:], " ") // 这里处理标准的data:开头,标准化为 data: + 单空格格式 - data = dataPrefix + " " + strings.TrimLeft(data[len(dataPrefix):], " ") + data = dataPrefix + " " + strings.TrimLeft(payload, " ") if strings.HasPrefix(payload, done) { render.StringData(c, data) doneRendered = true