|
@@ -14,7 +14,7 @@ import (
|
|
|
"time"
|
|
"time"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
-func testChannel(channel *model.Channel, request ChatRequest) error {
|
|
|
|
|
|
|
+func testChannel(channel *model.Channel, request ChatRequest) (error, *OpenAIError) {
|
|
|
switch channel.Type {
|
|
switch channel.Type {
|
|
|
case common.ChannelTypeAzure:
|
|
case common.ChannelTypeAzure:
|
|
|
request.Model = "gpt-35-turbo"
|
|
request.Model = "gpt-35-turbo"
|
|
@@ -33,11 +33,11 @@ func testChannel(channel *model.Channel, request ChatRequest) error {
|
|
|
|
|
|
|
|
jsonData, err := json.Marshal(request)
|
|
jsonData, err := json.Marshal(request)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return err
|
|
|
|
|
|
|
+ return err, nil
|
|
|
}
|
|
}
|
|
|
req, err := http.NewRequest("POST", requestURL, bytes.NewBuffer(jsonData))
|
|
req, err := http.NewRequest("POST", requestURL, bytes.NewBuffer(jsonData))
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return err
|
|
|
|
|
|
|
+ return err, nil
|
|
|
}
|
|
}
|
|
|
if channel.Type == common.ChannelTypeAzure {
|
|
if channel.Type == common.ChannelTypeAzure {
|
|
|
req.Header.Set("api-key", channel.Key)
|
|
req.Header.Set("api-key", channel.Key)
|
|
@@ -48,18 +48,18 @@ func testChannel(channel *model.Channel, request ChatRequest) error {
|
|
|
client := &http.Client{}
|
|
client := &http.Client{}
|
|
|
resp, err := client.Do(req)
|
|
resp, err := client.Do(req)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return err
|
|
|
|
|
|
|
+ return err, nil
|
|
|
}
|
|
}
|
|
|
defer resp.Body.Close()
|
|
defer resp.Body.Close()
|
|
|
var response TextResponse
|
|
var response TextResponse
|
|
|
err = json.NewDecoder(resp.Body).Decode(&response)
|
|
err = json.NewDecoder(resp.Body).Decode(&response)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return err
|
|
|
|
|
|
|
+ return err, nil
|
|
|
}
|
|
}
|
|
|
if response.Usage.CompletionTokens == 0 {
|
|
if response.Usage.CompletionTokens == 0 {
|
|
|
- return errors.New(fmt.Sprintf("type %s, code %v, message %s", response.Error.Type, response.Error.Code, response.Error.Message))
|
|
|
|
|
|
|
+ return errors.New(fmt.Sprintf("type %s, code %v, message %s", response.Error.Type, response.Error.Code, response.Error.Message)), &response.Error
|
|
|
}
|
|
}
|
|
|
- return nil
|
|
|
|
|
|
|
+ return nil, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func buildTestRequest() *ChatRequest {
|
|
func buildTestRequest() *ChatRequest {
|
|
@@ -94,7 +94,7 @@ func TestChannel(c *gin.Context) {
|
|
|
}
|
|
}
|
|
|
testRequest := buildTestRequest()
|
|
testRequest := buildTestRequest()
|
|
|
tik := time.Now()
|
|
tik := time.Now()
|
|
|
- err = testChannel(channel, *testRequest)
|
|
|
|
|
|
|
+ err, _ = testChannel(channel, *testRequest)
|
|
|
tok := time.Now()
|
|
tok := time.Now()
|
|
|
milliseconds := tok.Sub(tik).Milliseconds()
|
|
milliseconds := tok.Sub(tik).Milliseconds()
|
|
|
go channel.UpdateResponseTime(milliseconds)
|
|
go channel.UpdateResponseTime(milliseconds)
|
|
@@ -158,13 +158,14 @@ func testAllChannels(notify bool) error {
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
tik := time.Now()
|
|
tik := time.Now()
|
|
|
- err := testChannel(channel, *testRequest)
|
|
|
|
|
|
|
+ err, openaiErr := testChannel(channel, *testRequest)
|
|
|
tok := time.Now()
|
|
tok := time.Now()
|
|
|
milliseconds := tok.Sub(tik).Milliseconds()
|
|
milliseconds := tok.Sub(tik).Milliseconds()
|
|
|
- if err != nil || milliseconds > disableThreshold {
|
|
|
|
|
- if milliseconds > disableThreshold {
|
|
|
|
|
- err = errors.New(fmt.Sprintf("响应时间 %.2fs 超过阈值 %.2fs", float64(milliseconds)/1000.0, float64(disableThreshold)/1000.0))
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if milliseconds > disableThreshold {
|
|
|
|
|
+ err = errors.New(fmt.Sprintf("响应时间 %.2fs 超过阈值 %.2fs", float64(milliseconds)/1000.0, float64(disableThreshold)/1000.0))
|
|
|
|
|
+ disableChannel(channel.Id, channel.Name, err.Error())
|
|
|
|
|
+ }
|
|
|
|
|
+ if shouldDisableChannel(openaiErr) {
|
|
|
disableChannel(channel.Id, channel.Name, err.Error())
|
|
disableChannel(channel.Id, channel.Name, err.Error())
|
|
|
}
|
|
}
|
|
|
channel.UpdateResponseTime(milliseconds)
|
|
channel.UpdateResponseTime(milliseconds)
|