mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-17 16:06:38 +08:00
fix: fix SensitiveWords error
This commit is contained in:
parent
d7e25e1604
commit
222a55387d
@ -1,9 +1,14 @@
|
||||
package dto
|
||||
|
||||
type TextResponse struct {
|
||||
Choices []*OpenAITextResponseChoice `json:"choices"`
|
||||
type TextResponseWithError struct {
|
||||
Choices []OpenAITextResponseChoice `json:"choices"`
|
||||
Usage `json:"usage"`
|
||||
Error OpenAIError `json:"error"`
|
||||
}
|
||||
|
||||
type TextResponse struct {
|
||||
Choices []OpenAITextResponseChoice `json:"choices"`
|
||||
Usage `json:"usage"`
|
||||
Error *OpenAIError `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type OpenAITextResponseChoice struct {
|
||||
|
@ -125,7 +125,7 @@ func OpenaiStreamHandler(c *gin.Context, resp *http.Response, relayMode int) (*d
|
||||
}
|
||||
|
||||
func OpenaiHandler(c *gin.Context, resp *http.Response, promptTokens int, model string) (*dto.OpenAIErrorWithStatusCode, *dto.Usage, *dto.SensitiveResponse) {
|
||||
var textResponse dto.TextResponse
|
||||
var textResponseWithError dto.TextResponseWithError
|
||||
responseBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return service.OpenAIErrorWrapper(err, "read_response_body_failed", http.StatusInternalServerError), nil, nil
|
||||
@ -134,18 +134,23 @@ func OpenaiHandler(c *gin.Context, resp *http.Response, promptTokens int, model
|
||||
if err != nil {
|
||||
return service.OpenAIErrorWrapper(err, "close_response_body_failed", http.StatusInternalServerError), nil, nil
|
||||
}
|
||||
err = json.Unmarshal(responseBody, &textResponse)
|
||||
err = json.Unmarshal(responseBody, &textResponseWithError)
|
||||
if err != nil {
|
||||
log.Printf("unmarshal_response_body_failed: body: %s, err: %v", string(responseBody), err)
|
||||
return service.OpenAIErrorWrapper(err, "unmarshal_response_body_failed", http.StatusInternalServerError), nil, nil
|
||||
}
|
||||
log.Printf("textResponse: %+v", textResponse)
|
||||
if textResponse.Error != nil {
|
||||
if textResponseWithError.Error.Type != "" {
|
||||
return &dto.OpenAIErrorWithStatusCode{
|
||||
Error: *textResponse.Error,
|
||||
Error: textResponseWithError.Error,
|
||||
StatusCode: resp.StatusCode,
|
||||
}, nil, nil
|
||||
}
|
||||
|
||||
textResponse := &dto.TextResponse{
|
||||
Choices: textResponseWithError.Choices,
|
||||
Usage: textResponseWithError.Usage,
|
||||
}
|
||||
|
||||
checkSensitive := constant.ShouldCheckCompletionSensitive()
|
||||
sensitiveWords := make([]string, 0)
|
||||
triggerSensitive := false
|
||||
@ -174,7 +179,7 @@ func OpenaiHandler(c *gin.Context, resp *http.Response, promptTokens int, model
|
||||
}
|
||||
}
|
||||
|
||||
if constant.StopOnSensitiveEnabled {
|
||||
if checkSensitive && constant.StopOnSensitiveEnabled && triggerSensitive {
|
||||
|
||||
} else {
|
||||
responseBody, err = json.Marshal(textResponse)
|
||||
@ -200,7 +205,7 @@ func OpenaiHandler(c *gin.Context, resp *http.Response, promptTokens int, model
|
||||
|
||||
if checkSensitive && triggerSensitive {
|
||||
sensitiveWords = common.RemoveDuplicate(sensitiveWords)
|
||||
return service.OpenAIErrorWrapper(errors.New(fmt.Sprintf("sensitive words detected: %s", strings.Join(sensitiveWords, ", "))), "sensitive_words_detected", http.StatusBadRequest), &textResponse.Usage, &dto.SensitiveResponse{
|
||||
return service.OpenAIErrorWrapper(errors.New(fmt.Sprintf("sensitive words detected on response: %s", strings.Join(sensitiveWords, ", "))), "sensitive_words_detected", http.StatusBadRequest), &textResponse.Usage, &dto.SensitiveResponse{
|
||||
SensitiveWords: sensitiveWords,
|
||||
}
|
||||
}
|
||||
|
@ -35,12 +35,12 @@ func RelayErrorHandler(resp *http.Response) (OpenAIErrorWithStatusCode *dto.Open
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var textResponse dto.TextResponse
|
||||
var textResponse dto.TextResponseWithError
|
||||
err = json.Unmarshal(responseBody, &textResponse)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
OpenAIErrorWithStatusCode.Error = *textResponse.Error
|
||||
OpenAIErrorWithStatusCode.Error = textResponse.Error
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ func SensitiveWordReplace(text string, returnImmediately bool) (bool, []string,
|
||||
for _, hit := range hits {
|
||||
pos := hit.Pos
|
||||
word := string(hit.Word)
|
||||
text = text[:pos] + "*###*" + text[pos+len(word):]
|
||||
text = text[:pos] + "**###**" + text[pos+len(word):]
|
||||
words = append(words, word)
|
||||
}
|
||||
return true, words, text
|
||||
|
Loading…
Reference in New Issue
Block a user