Improve OpenAI message parsing and error handling
- Enhanced error handling in OpenAI message processing - Added colored console output for JSON parsing errors - Updated Error struct to support flexible code type - Improved message type and done state setting for various error scenarios - Added support for parsing different error message formats
This commit is contained in:
parent
54e946c61d
commit
6ac0406ad4
2 changed files with 33 additions and 4 deletions
|
|
@ -191,7 +191,11 @@ func NewOpenAI(data []byte) *Message {
|
|||
case strings.Contains(text, `"delta":{`) && strings.Contains(text, `"tool_calls"`):
|
||||
var toolCalls openai.ToolCalls
|
||||
if err := jsoniter.Unmarshal(data, &toolCalls); err != nil {
|
||||
msg.Text = err.Error() + "\n" + string(data)
|
||||
color.Red("JSON parse error: %s", err.Error())
|
||||
color.White(string(data))
|
||||
msg.Text = "JSON parse error\n" + string(data)
|
||||
msg.Type = "error"
|
||||
msg.IsDone = true
|
||||
return msg
|
||||
}
|
||||
|
||||
|
|
@ -205,7 +209,11 @@ func NewOpenAI(data []byte) *Message {
|
|||
case strings.Contains(text, `"delta":{`) && strings.Contains(text, `"content":`):
|
||||
var message openai.Message
|
||||
if err := jsoniter.Unmarshal(data, &message); err != nil {
|
||||
msg.Text = err.Error() + "\n" + string(data)
|
||||
color.Red("JSON parse error: %s", err.Error())
|
||||
color.White(string(data))
|
||||
msg.Text = "JSON parse error\n" + string(data)
|
||||
msg.Type = "error"
|
||||
msg.IsDone = true
|
||||
return msg
|
||||
}
|
||||
|
||||
|
|
@ -214,14 +222,35 @@ func NewOpenAI(data []byte) *Message {
|
|||
msg.Text = message.Choices[0].Delta.Content
|
||||
}
|
||||
|
||||
case strings.Index(text, `{"code":`) == 0:
|
||||
var errorMessage openai.Error
|
||||
if err := jsoniter.UnmarshalFromString(text, &errorMessage); err != nil {
|
||||
color.Red("JSON parse error: %s", err.Error())
|
||||
color.White(string(data))
|
||||
msg.Text = "JSON parse error\n" + string(data)
|
||||
msg.Type = "error"
|
||||
msg.IsDone = true
|
||||
return msg
|
||||
}
|
||||
msg.Type = "error"
|
||||
msg.Text = errorMessage.Message
|
||||
msg.IsDone = true
|
||||
break
|
||||
|
||||
case strings.Contains(text, `{"error":{`):
|
||||
var errorMessage openai.ErrorMessage
|
||||
if err := jsoniter.Unmarshal(data, &errorMessage); err != nil {
|
||||
msg.Text = err.Error() + "\n" + string(data)
|
||||
color.Red("JSON parse error: %s", err.Error())
|
||||
color.White(string(data))
|
||||
msg.Text = "JSON parse error\n" + string(data)
|
||||
msg.Type = "error"
|
||||
msg.IsDone = true
|
||||
return msg
|
||||
}
|
||||
msg.Type = "error"
|
||||
msg.Text = errorMessage.Error.Message
|
||||
msg.IsDone = true
|
||||
break
|
||||
|
||||
case strings.Contains(text, `[DONE]`):
|
||||
msg.IsDone = true
|
||||
|
|
|
|||
|
|
@ -48,5 +48,5 @@ type Error struct {
|
|||
Message string `json:"message,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
Param interface{} `json:"param,omitempty"`
|
||||
Code string `json:"code,omitempty"`
|
||||
Code any `json:"code,omitempty"` // string or int
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue