@@ -89,12 +89,6 @@ func (co *CopilotApi) CompletionsHandler(c *gin.Context) {
8989 return
9090 }
9191
92- // 默认流式输出
93- isStream := true
94- if b , ok := req ["stream" ]; ok && b .(bool ) == false {
95- isStream = false
96- }
97-
9892 if model , ok := req ["model" ]; ok && model == "gemini-pro" || model == openai .GPT432K {
9993 global .SugarLog .Debugw ("CompletionsHandler gemini-pro model" , "model" , model )
10094 genApi := & genai.GenApi {}
@@ -115,7 +109,7 @@ func (co *CopilotApi) CompletionsHandler(c *gin.Context) {
115109 response .FailWithOpenAIError (http .StatusUnauthorized , err .Error (), c )
116110 return
117111 }
118- err = CompletionsRequest (c , req , isStream , copilotToken )
112+ err = CompletionsRequest (c , req , copilotToken )
119113 // 如果 token 过期,重新获取一次 token
120114 if errors .Is (err , TokenExpiredError ) {
121115 CopilotTokenCache .Delete (token ) // 删除缓存
@@ -127,7 +121,7 @@ func (co *CopilotApi) CompletionsHandler(c *gin.Context) {
127121 return
128122 }
129123 global .SugarLog .Infow ("CompletionsHandler http get token is success" )
130- err = CompletionsRequest (c , req , isStream , coCopilotToken )
124+ err = CompletionsRequest (c , req , coCopilotToken )
131125 if err != nil {
132126 global .SugarLog .Errorw ("CompletionsHandler CompletionsRequest retry request error" , "err" , err )
133127 response .FailWithOpenAIError (http .StatusBadGateway , err .Error (), c )
@@ -150,19 +144,13 @@ func (co *CopilotApi) CompletionsOfficialHandler(c *gin.Context) {
150144 return
151145 }
152146
153- // 默认流式输出
154- isStream := true
155- if b , ok := req ["stream" ]; ok && b .(bool ) == false {
156- isStream = false
157- }
158-
159147 token , err := utils .GetAuthToken (c , "Bearer" )
160148 if err != nil {
161149 global .SugarLog .Errorw ("CompletionsOfficialHandler get auth token err" , "err" , err .Error ())
162150 response .FailWithOpenAIError (http .StatusUnauthorized , err .Error (), c )
163151 return
164152 }
165- err = CompletionsRequest (c , req , isStream , token )
153+ err = CompletionsRequest (c , req , token )
166154 if err != nil {
167155 global .SugarLog .Warnw ("CompletionsOfficialHandler CompletionsRequest request error" , "err" , err , "token" , token )
168156 response .FailWithOpenAIError (http .StatusInternalServerError , err .Error (), c )
@@ -190,27 +178,27 @@ func GetCopilotTokenWithCache(token string) (copilotToken string, err error) {
190178}
191179
192180// CompletionsRequest 请求 Copilot CompletionsHandler 接口
193- func CompletionsRequest (c * gin.Context , req map [string ]interface {}, isStream bool , copilotToken string ) (err error ) {
194- url := global .Config .Copilot .CompletionsURL
181+ func CompletionsRequest (c * gin.Context , req map [string ]interface {}, copilotToken string ) (err error ) {
182+ completionsURL := global .Config .Copilot .CompletionsURL
195183 resp , err := Client .SetRetryCount (1 ).R ().
196184 AddRetryCondition (func (r * resty.Response , err error ) bool {
197185 if err != nil && strings .Contains (err .Error (), "connection reset by peer" ) {
198- global .SugarLog .Warnw ("CompletionsRequest Client connection reset by peer" , "stream" , isStream , " err" , err .Error ())
186+ global .SugarLog .Warnw ("CompletionsRequest Client connection reset by peer" , "err" , err .Error ())
199187 }
200188 var netErr net.Error
201189 if errors .As (err , & netErr ) && netErr .Timeout () {
202- global .SugarLog .Warnw ("CompletionsRequest Client timeout err, retry" , "stream" , isStream , " err" , netErr .Error ())
190+ global .SugarLog .Warnw ("CompletionsRequest Client timeout err, retry" , "err" , netErr .Error ())
203191 return true
204192 }
205193 return false
206194 }).
207195 SetDoNotParseResponse (true ).
208196 SetHeaders (GetCompletionsHeader (copilotToken )).
209197 SetBody (req ).
210- Post (url )
198+ Post (completionsURL )
211199
212200 if err != nil {
213- global .SugarLog .Errorw ("CompletionsRequest http error" , "err" , err , "url " , url , "req" , req , "copilotToken" , copilotToken )
201+ global .SugarLog .Errorw ("CompletionsRequest http error" , "err" , err , "completionsURL " , completionsURL , "req" , req , "copilotToken" , copilotToken )
214202 response .FailWithOpenAIError (http .StatusInternalServerError , err .Error (), c )
215203 return
216204 }
@@ -219,33 +207,31 @@ func CompletionsRequest(c *gin.Context, req map[string]interface{}, isStream boo
219207
220208 respContentType := resp .Header ().Get ("Content-Type" )
221209 if resp .StatusCode () != http .StatusOK {
222- global .SugarLog .Warnw ("CompletionsRequest respContentType" , "respContentType" , respContentType , "stream" , isStream , " statusCode" , resp .StatusCode ())
210+ global .SugarLog .Warnw ("CompletionsRequest respContentType" , "respContentType" , respContentType , "statusCode" , resp .StatusCode ())
223211 }
224212
225- if strings .Contains (respContentType , "text/plain" ) {
213+ w := c .Writer
214+
215+ if strings .Contains (respContentType , "text/plain" ) { // 有错误信息
226216 body , err := io .ReadAll (reader )
227217 if err != nil {
228- global .SugarLog .Errorw ("CompletionsHandler reader body err" , "stream" , isStream , " err" , err )
218+ global .SugarLog .Errorw ("CompletionsHandler reader body err" , "err" , err )
229219 return err
230220 }
231221 bodyStr := strings .TrimRight (string (body ), "\n " )
232222 if bodyStr == "unauthorized: token expired" {
233- global .SugarLog .Errorw ("CompletionsHandler token expired" , "stream" , isStream , " body" , bodyStr )
223+ global .SugarLog .Errorw ("CompletionsHandler token expired" , "body" , bodyStr )
234224 return TokenExpiredError
235225 }
236- global .SugarLog .Infow ("CompletionsHandler response error" , "stream" , isStream , " body" , bodyStr , "copilotToken" , copilotToken )
226+ global .SugarLog .Infow ("CompletionsHandler response error" , "body" , bodyStr , "copilotToken" , copilotToken )
237227 response .FailWithOpenAIError (resp .StatusCode (), bodyStr , c )
238228 return nil
239- }
240-
241- w := c .Writer
242- // 非流式输出
243- if ! isStream {
244- utils .SetNotStreamHeaders (c )
229+ } else if strings .Contains (respContentType , "application/json" ) { // json 格式 非流式
230+ utils .SetJsonHeaders (c )
245231 flusher , _ := w .(http.Flusher )
246232 body , readErr := io .ReadAll (reader )
247233 if readErr != nil {
248- global .SugarLog .Errorw ("CompletionsHandler reader body err" , "stream " , isStream , "err" , readErr )
234+ global .SugarLog .Errorw ("CompletionsHandler reader body err" , "respContentType " , respContentType , "req" , req , "err" , readErr )
249235 return readErr
250236 }
251237 w .Write (body )
@@ -260,7 +246,7 @@ func CompletionsRequest(c *gin.Context, req map[string]interface{}, isStream boo
260246 if err == io .EOF {
261247 break
262248 } else if err != nil {
263- global .SugarLog .Errorw ("CompletionsHandler reader err" , "stream" , isStream , " err" , err )
249+ global .SugarLog .Errorw ("CompletionsHandler reader err" , "err" , err )
264250 break
265251 }
266252 w .Write (line )
0 commit comments