@@ -273,16 +273,16 @@ func ChatProxy(c *gin.Context, chatReq *ChatCompletionRequest) {
273
273
return
274
274
}
275
275
defer resp .Body .Close ()
276
- c .Writer .WriteHeader (resp .StatusCode )
277
- for key , value := range resp .Header {
278
- for _ , v := range value {
279
- c .Writer .Header ().Add (key , v )
280
- }
281
- }
282
- teeReader := io .TeeReader (resp .Body , c .Writer )
283
276
284
277
var result string
285
278
if chatReq .Stream {
279
+ for key , value := range resp .Header {
280
+ for _ , v := range value {
281
+ c .Writer .Header ().Add (key , v )
282
+ }
283
+ }
284
+ c .Writer .WriteHeader (resp .StatusCode )
285
+ teeReader := io .TeeReader (resp .Body , c .Writer )
286
286
// 流式响应
287
287
scanner := bufio .NewScanner (teeReader )
288
288
@@ -318,15 +318,18 @@ func ChatProxy(c *gin.Context, chatReq *ChatCompletionRequest) {
318
318
319
319
}
320
320
} else {
321
+
321
322
// 处理非流式响应
322
- body , err := io .ReadAll (teeReader )
323
+ body , err := io .ReadAll (resp . Body )
323
324
if err != nil {
324
325
fmt .Println ("Error reading response body:" , err )
326
+ c .JSON (http .StatusInternalServerError , gin.H {"error" : err .Error ()})
325
327
return
326
328
}
327
329
var opiResp ChatCompletionResponse
328
330
if err := json .Unmarshal (body , & opiResp ); err != nil {
329
331
log .Println ("Error parsing JSON:" , err )
332
+ c .JSON (http .StatusInternalServerError , gin.H {"error" : err .Error ()})
330
333
return
331
334
}
332
335
if opiResp .Choices != nil && len (opiResp .Choices ) > 0 {
@@ -343,6 +346,16 @@ func ChatProxy(c *gin.Context, chatReq *ChatCompletionRequest) {
343
346
}
344
347
345
348
}
349
+ resp .Body = io .NopCloser (bytes .NewBuffer (body ))
350
+
351
+ for k , v := range resp .Header {
352
+ c .Writer .Header ().Set (k , v [0 ])
353
+ }
354
+ c .Writer .WriteHeader (resp .StatusCode )
355
+ _ , err = io .Copy (c .Writer , resp .Body )
356
+ if err != nil {
357
+ log .Println (err )
358
+ }
346
359
}
347
360
usagelog .CompletionCount = tokenizer .NumTokensFromStr (result , chatReq .Model )
348
361
usagelog .Cost = fmt .Sprintf ("%.6f" , tokenizer .Cost (usagelog .Model , usagelog .PromptCount , usagelog .CompletionCount ))
0 commit comments