rerank.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package dto
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/QuantumNous/new-api/types"
  6. "github.com/gin-gonic/gin"
  7. )
  8. type RerankRequest struct {
  9. Documents []any `json:"documents"`
  10. Query string `json:"query"`
  11. Model string `json:"model"`
  12. TopN int `json:"top_n,omitempty"`
  13. ReturnDocuments *bool `json:"return_documents,omitempty"`
  14. MaxChunkPerDoc int `json:"max_chunk_per_doc,omitempty"`
  15. OverLapTokens int `json:"overlap_tokens,omitempty"`
  16. }
  17. func (r *RerankRequest) IsStream(c *gin.Context) bool {
  18. return false
  19. }
  20. func (r *RerankRequest) GetTokenCountMeta() *types.TokenCountMeta {
  21. var texts = make([]string, 0)
  22. for _, document := range r.Documents {
  23. texts = append(texts, fmt.Sprintf("%v", document))
  24. }
  25. if r.Query != "" {
  26. texts = append(texts, r.Query)
  27. }
  28. return &types.TokenCountMeta{
  29. CombineText: strings.Join(texts, "\n"),
  30. }
  31. }
  32. func (r *RerankRequest) SetModelName(modelName string) {
  33. if modelName != "" {
  34. r.Model = modelName
  35. }
  36. }
  37. func (r *RerankRequest) GetReturnDocuments() bool {
  38. if r.ReturnDocuments == nil {
  39. return false
  40. }
  41. return *r.ReturnDocuments
  42. }
  43. type RerankResponseResult struct {
  44. Document any `json:"document,omitempty"`
  45. Index int `json:"index"`
  46. RelevanceScore float64 `json:"relevance_score"`
  47. }
  48. type RerankDocument struct {
  49. Text any `json:"text"`
  50. }
  51. type RerankResponse struct {
  52. Results []RerankResponseResult `json:"results"`
  53. Usage Usage `json:"usage"`
  54. }