12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package ticket
- import (
- _ "embed"
- "encoding/json"
- "fmt"
- "github.com/google/uuid"
- "github.com/lithammer/shortuuid/v4"
- "github.com/sashabaranov/go-openai"
- "google.golang.org/protobuf/encoding/protojson"
- "time"
- )
- func New(id string) *Ticket {
- return &Ticket{
- Id: id,
- Thread: []*Message{},
- }
- }
- func NewId(suffix string) string {
- now := time.Now()
- return fmt.Sprintf("t%s%d%03d-%s",
- suffix,
- now.Year(),
- now.YearDay(),
- shortuuid.NewWithAlphabet("23456789abcdefghijkmnopqrstuvwxy"))
- }
- func (t *Ticket) Marshal() ([]byte, error) {
- return protojson.Marshal(t)
- }
- func (t *Ticket) AddMessage(m *Message) error {
- if m == nil {
- return fmt.Errorf("illegal argument: Message must not be a nil")
- }
- if m.TicketId == "" {
- m.TicketId = t.Id
- }
- if m.Id == "" {
- m.Id = uuid.NewString()
- }
- if m.Date == 0 {
- m.Date = time.Now().UnixMilli()
- }
- t.Thread = append(t.Thread, m)
- return nil
- }
- func (t *Ticket) AddGPTResponseMessage(src *openai.ChatCompletionChoice) (*Message, error) {
- var (
- message = &Message{
- Id: uuid.NewString(),
- TicketId: t.Id,
- Provider: MessageProvider_GptMessageProvider,
- Body: src.Message.Content,
- Date: time.Now().UnixMilli(),
- }
- buf []byte
- err error
- )
- if buf, err = json.Marshal(src); err != nil {
- return nil, err
- }
- message.Raw = string(buf)
- if err = t.AddMessage(message); err != nil {
- return nil, err
- }
- return message, nil
- }
- //goland:noinspection GoUnusedExportedFunction
- func Unmarshal(d []byte) (*Ticket, error) {
- t := &Ticket{}
- if err := protojson.Unmarshal(d, t); err != nil {
- return nil, err
- }
- return t, nil
- }
|