@@ -1203,27 +1203,46 @@ func (s *ProxyService) streamWithAdapter(reader io.Reader, writer io.Writer, flu
12031203func (s * ProxyService ) streamDirect (reader io.Reader , writer io.Writer , flusher http.Flusher , model string , routeID int64 ) error {
12041204 buf := make ([]byte , 4096 )
12051205 var responseBuffer bytes.Buffer
1206+ var bytesWritten int64
12061207
12071208 for {
12081209 n , err := reader .Read (buf )
12091210 if n > 0 {
12101211 // 将数据写入缓冲区以便后续解析token使用信息
12111212 responseBuffer .Write (buf [:n ])
1213+ bytesWritten += int64 (n )
12121214
12131215 if _ , writeErr := writer .Write (buf [:n ]); writeErr != nil {
1216+ log .Errorf ("[Stream Direct] Failed to write to client: %v" , writeErr )
12141217 s .routeService .LogRequest (model , routeID , 0 , 0 , 0 , false , writeErr .Error ())
12151218 return writeErr
12161219 }
12171220 flusher .Flush ()
12181221 }
12191222 if err != nil {
12201223 if err == io .EOF {
1224+ log .Debugf ("[Stream Direct] Stream completed. Total bytes: %d" , bytesWritten )
1225+
12211226 // 尝试从响应中提取token使用信息
1222- promptTokens , completionTokens := s .extractTokensFromStreamResponse (responseBuffer .String ())
1227+ responseStr := responseBuffer .String ()
1228+ log .Debugf ("[Stream Direct] Response buffer length: %d bytes" , len (responseStr ))
1229+
1230+ // 仅在debug模式下记录响应内容(前500字符)
1231+ if len (responseStr ) > 0 {
1232+ previewLen := 500
1233+ if len (responseStr ) < previewLen {
1234+ previewLen = len (responseStr )
1235+ }
1236+ log .Debugf ("[Stream Direct] Response preview: %s" , responseStr [:previewLen ])
1237+ }
1238+
1239+ promptTokens , completionTokens := s .extractTokensFromStreamResponse (responseStr )
12231240 totalTokens := promptTokens + completionTokens
1241+ log .Infof ("[Stream Direct] Extracted tokens: prompt=%d, completion=%d, total=%d" , promptTokens , completionTokens , totalTokens )
12241242 s .routeService .LogRequest (model , routeID , promptTokens , completionTokens , totalTokens , true , "" )
12251243 return nil
12261244 }
1245+ log .Errorf ("[Stream Direct] Stream error: %v" , err )
12271246 s .routeService .LogRequest (model , routeID , 0 , 0 , 0 , false , err .Error ())
12281247 return err
12291248 }
@@ -3910,6 +3929,10 @@ func (s *ProxyService) ProxyCursorStreamRequest(requestBody []byte, headers map[
39103929 targetURL = s .buildAdapterStreamURL (cleanAPIUrl , adapterName , model )
39113930 } else {
39123931 reqData ["stream" ] = true
3932+ // 请求后端在流式响应中包含 usage 信息
3933+ reqData ["stream_options" ] = map [string ]interface {}{
3934+ "include_usage" : true ,
3935+ }
39133936 transformedBody , _ = json .Marshal (reqData )
39143937 targetURL = buildOpenAIChatURL (route .APIUrl )
39153938 }
0 commit comments