message.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package ticket
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/confluentinc/confluent-kafka-go/v2/kafka"
  6. "github.com/google/uuid"
  7. "github.com/kelindar/bitmap"
  8. "github.com/sashabaranov/go-openai"
  9. "strings"
  10. "time"
  11. )
  12. func NewKafkaMessage(src *kafka.Message) *Message {
  13. m := &Message{
  14. Id: uuid.NewString(),
  15. Provider: MessageProvider_EmailMessageProvider,
  16. Body: string(src.Value),
  17. Raw: string(src.Value),
  18. Date: src.Timestamp.UnixMilli(),
  19. Headers: []*Message_Header{},
  20. }
  21. for _, h := range src.Headers {
  22. m.Headers = append(m.Headers, &Message_Header{
  23. Key: h.Key,
  24. Value: string(h.Value),
  25. })
  26. }
  27. return m
  28. }
  29. func NewGPTResponseMessage(tid string, src *openai.ChatCompletionChoice) (*Message, error) {
  30. tid = strings.TrimSpace(tid)
  31. if tid == "" {
  32. return nil, fmt.Errorf("illegal argument: ticket id must not be an emptry string")
  33. }
  34. raw, err := json.Marshal(src)
  35. if err != nil {
  36. return nil, err
  37. }
  38. return &Message{
  39. Id: uuid.NewString(),
  40. TicketId: tid,
  41. Provider: MessageProvider_GptMessageProvider,
  42. Body: src.Message.Content,
  43. Date: time.Now().UnixMilli(),
  44. Raw: string(raw),
  45. }, nil
  46. }
  47. func (m *Message) SetBitmap(flags bitmap.Bitmap) {
  48. m.Flags = flags.ToBytes()
  49. }
  50. func (m *Message) GetBitmap() bitmap.Bitmap {
  51. return bitmap.FromBytes(m.Flags)
  52. }