1m timeout for non stream request
This commit is contained in:
19
process.go
19
process.go
@@ -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
32
request_body.go
Normal 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user