From c2c455c9807f0d92f4b4c4ba956fef8cf5ff9145 Mon Sep 17 00:00:00 2001 From: glzjin Date: Tue, 1 Aug 2023 23:51:28 +0800 Subject: [PATCH] fix: fix zhipu streaming (#349) * Fix #348 * chore: update implementation --------- Co-authored-by: JustSong --- controller/relay-zhipu.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/controller/relay-zhipu.go b/controller/relay-zhipu.go index 33d141c7c4..20a4fa42e9 100644 --- a/controller/relay-zhipu.go +++ b/controller/relay-zhipu.go @@ -194,8 +194,8 @@ func zhipuStreamHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithSt if atEOF && len(data) == 0 { return 0, nil, nil } - if i := strings.Index(string(data), "\n"); i >= 0 { - return i + 1, data[0:i], nil + if i := strings.Index(string(data), "\n\n"); i >= 0 && strings.Index(string(data), ":") >= 0 { + return i + 2, data[0:i], nil } if atEOF { return len(data), data, nil @@ -208,14 +208,19 @@ func zhipuStreamHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithSt go func() { for scanner.Scan() { data := scanner.Text() - data = strings.Trim(data, "\"") - if len(data) < 5 { // ignore blank line or wrong format - continue - } - if data[:5] == "data:" { - dataChan <- data[5:] - } else if data[:5] == "meta:" { - metaChan <- data[5:] + lines := strings.Split(data, "\n") + for i, line := range lines { + if len(line) < 5 { + continue + } + if line[:5] == "data:" { + dataChan <- line[5:] + if i != len(lines)-1 { + dataChan <- "\n" + } + } else if line[:5] == "meta:" { + metaChan <- line[5:] + } } } stopChan <- true