diff --git a/relay/channel/openai/relay-openai.go b/relay/channel/openai/relay-openai.go index f10ebc1b..ef660564 100644 --- a/relay/channel/openai/relay-openai.go +++ b/relay/channel/openai/relay-openai.go @@ -724,8 +724,6 @@ func OaiResponsesStreamHandler(c *gin.Context, resp *http.Response, info *relayc return true }) - helper.Done(c) - if usage.CompletionTokens == 0 { // 计算输出文本的 token 数量 tempStr := responseTextBuilder.String() diff --git a/relay/helper/common.go b/relay/helper/common.go index 43e8b92c..6a8ca2d7 100644 --- a/relay/helper/common.go +++ b/relay/helper/common.go @@ -37,7 +37,7 @@ func ClaudeData(c *gin.Context, resp dto.ClaudeResponse) error { func ClaudeChunkData(c *gin.Context, resp dto.ClaudeResponse, data string) { c.Render(-1, common.CustomEvent{Data: fmt.Sprintf("event: %s\n", resp.Type)}) - c.Render(-1, common.CustomEvent{Data: fmt.Sprintf("data: %s\n", data)}) + c.Render(-1, common.CustomEvent{Data: fmt.Sprintf("data: %s", data)}) if flusher, ok := c.Writer.(http.Flusher); ok { flusher.Flush() } diff --git a/relay/helper/stream_scanner.go b/relay/helper/stream_scanner.go index abb98f42..2738ce2a 100644 --- a/relay/helper/stream_scanner.go +++ b/relay/helper/stream_scanner.go @@ -32,7 +32,7 @@ func StreamScannerHandler(c *gin.Context, resp *http.Response, info *relaycommon defer resp.Body.Close() streamingTimeout := time.Duration(constant.StreamingTimeout) * time.Second - if strings.HasPrefix(info.UpstreamModelName, "o1") || strings.HasPrefix(info.UpstreamModelName, "o3") { + if strings.HasPrefix(info.UpstreamModelName, "o") { // twice timeout for thinking model streamingTimeout *= 2 } @@ -115,7 +115,7 @@ func StreamScannerHandler(c *gin.Context, resp *http.Response, info *relaycommon } data = data[5:] data = strings.TrimLeft(data, " ") - data = strings.TrimSuffix(data, "\"") + data = strings.TrimSuffix(data, "\r") if !strings.HasPrefix(data, "[DONE]") { info.SetFirstResponseTime() writeMutex.Lock() // Lock before writing