mirror of
https://github.com/coaidev/coai.git
synced 2025-05-19 21:10:18 +09:00
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package baichuan
|
|
|
|
import (
|
|
"chat/globals"
|
|
"chat/utils"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
func processChatResponse(data string) *ChatStreamResponse {
|
|
return utils.UnmarshalForm[ChatStreamResponse](data)
|
|
}
|
|
|
|
func processChatErrorResponse(data string) *ChatStreamErrorResponse {
|
|
return utils.UnmarshalForm[ChatStreamErrorResponse](data)
|
|
}
|
|
|
|
func getChoices(form *ChatStreamResponse) *globals.Chunk {
|
|
if len(form.Choices) == 0 {
|
|
return &globals.Chunk{Content: ""}
|
|
}
|
|
|
|
choice := form.Choices[0].Delta
|
|
|
|
return &globals.Chunk{
|
|
Content: choice.Content,
|
|
}
|
|
}
|
|
|
|
func (c *ChatInstance) ProcessLine(data string) (*globals.Chunk, error) {
|
|
if form := processChatResponse(data); form != nil {
|
|
return getChoices(form), nil
|
|
}
|
|
|
|
if form := processChatErrorResponse(data); form != nil {
|
|
return &globals.Chunk{Content: ""}, errors.New(fmt.Sprintf("baichuan error: %s (type: %s)", form.Error.Message, form.Error.Type))
|
|
}
|
|
|
|
globals.Warn(fmt.Sprintf("baichuan error: cannot parse chat completion response: %s", data))
|
|
return &globals.Chunk{Content: ""}, errors.New("parser error: cannot parse chat completion response")
|
|
}
|