render.go 775 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package render
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/bytedance/sonic"
  6. "github.com/gin-gonic/gin"
  7. "github.com/labring/aiproxy/core/common/conv"
  8. )
  9. func StringData(c *gin.Context, str string) {
  10. if len(c.Errors) > 0 {
  11. return
  12. }
  13. if c.IsAborted() {
  14. return
  15. }
  16. c.Render(-1, &OpenAISSE{Data: str})
  17. c.Writer.Flush()
  18. }
  19. func ObjectData(c *gin.Context, object any) error {
  20. if len(c.Errors) > 0 {
  21. return c.Errors.Last()
  22. }
  23. if c.IsAborted() {
  24. return errors.New("context aborted")
  25. }
  26. jsonData, err := sonic.Marshal(object)
  27. if err != nil {
  28. return fmt.Errorf("error marshalling object: %w", err)
  29. }
  30. c.Render(-1, &OpenAISSE{Data: conv.BytesToString(jsonData)})
  31. c.Writer.Flush()
  32. return nil
  33. }
  34. const DONE = "[DONE]"
  35. func Done(c *gin.Context) {
  36. StringData(c, DONE)
  37. }