1m timeout for non stream request

This commit is contained in:
2023-11-01 15:41:49 +08:00
parent 5a78c61e5f
commit d9a42842b2
2 changed files with 44 additions and 7 deletions

View File

@@ -32,13 +32,7 @@ func processRequest(c *gin.Context, upstream *OPENAI_UPSTREAM, record *Record, s
return err return err
} }
// set timeout, default is 5 second
timeout := 5 * time.Second
haveResponse := false haveResponse := false
if upstream.Timeout > 0 {
// convert upstream.Timeout(second) to nanosecond
timeout = time.Duration(upstream.Timeout) * time.Second
}
proxy := httputil.NewSingleHostReverseProxy(remote) proxy := httputil.NewSingleHostReverseProxy(remote)
proxy.Director = nil proxy.Director = nil
@@ -60,12 +54,23 @@ func processRequest(c *gin.Context, upstream *OPENAI_UPSTREAM, record *Record, s
// record chat message from user // record chat message from user
record.Body = string(inBody) record.Body = string(inBody)
requestBody, requestBodyOK := ParseRequestBody(inBody)
// set timeout, default is 5 second
timeout := 5 * time.Second
if upstream.Timeout > 0 {
// convert upstream.Timeout(second) to nanosecond
timeout = time.Duration(upstream.Timeout) * time.Second
}
if requestBodyOK == nil && !requestBody.Stream {
timeout = 60 * time.Second
}
// timeout out request // timeout out request
go func() { go func() {
time.Sleep(timeout) time.Sleep(timeout)
if !haveResponse { if !haveResponse {
log.Println("Timeout", upstream.Endpoint) log.Println("Timeout upstream", upstream.Endpoint)
errCtx = errors.New("timeout") errCtx = errors.New("timeout")
cancel() cancel()
} }

32
request_body.go Normal file
View File

@@ -0,0 +1,32 @@
package main
import (
"encoding/json"
)
type Message struct {
Content string `json:"content"`
Role string `json:"role"`
}
type RequestBody struct {
Model string `json:"model"`
Messages []Message `json:"messages"`
Stream bool `json:"stream"`
Temperature float64 `json:"temperature"`
TopP int64 `json:"top_p"`
PresencePenalty float64 `json:"presence_penalty"`
FrequencyPenalty float64 `json:"frequency_penalty"`
}
func ParseRequestBody(data []byte) (RequestBody, error) {
ret := RequestBody{}
var requestBody RequestBody
err := json.Unmarshal(data, &requestBody)
if err != nil {
return ret, err
}
return requestBody, nil
}