From a9354df54920dcf6d0727eec6655fdf8cda21bb9 Mon Sep 17 00:00:00 2001 From: somnifex <98788152+somnifex@users.noreply.github.com> Date: Mon, 15 Sep 2025 23:23:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96ollamaStreamHandler?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=81=9C=E6=AD=A2=E5=92=8C=E6=9C=80=E7=BB=88?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=93=8D=E5=BA=94=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- relay/channel/ollama/stream.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/relay/channel/ollama/stream.go b/relay/channel/ollama/stream.go index d5b104d6..4e17f12d 100644 --- a/relay/channel/ollama/stream.go +++ b/relay/channel/ollama/stream.go @@ -114,15 +114,23 @@ func ollamaStreamHandler(c *gin.Context, info *relaycommon.RelayInfo, resp *http continue } // done frame + // finalize once and break loop usage.PromptTokens = chunk.PromptEvalCount usage.CompletionTokens = chunk.EvalCount usage.TotalTokens = usage.PromptTokens + usage.CompletionTokens finishReason := chunk.DoneReason if finishReason == "" { finishReason = "stop" } - stop := helper.GenerateStopResponse(responseId, created, model, finishReason) - if data, err := common.Marshal(stop); err == nil { _ = helper.StringData(c, string(data)) } - final := helper.GenerateFinalUsageResponse(responseId, created, model, *usage) - if data, err := common.Marshal(final); err == nil { _ = helper.StringData(c, string(data)) } + // emit stop delta + if stop := helper.GenerateStopResponse(responseId, created, model, finishReason); stop != nil { + if data, err := common.Marshal(stop); err == nil { _ = helper.StringData(c, string(data)) } + } + // emit usage frame + if final := helper.GenerateFinalUsageResponse(responseId, created, model, *usage); final != nil { + if data, err := common.Marshal(final); err == nil { _ = helper.StringData(c, string(data)) } + } + // send [DONE] + helper.Done(c) + break } if err := scanner.Err(); err != nil && err != io.EOF { logger.LogError(c, "ollama stream scan error: "+err.Error()) } return usage, nil