embedding.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package dto
  2. import (
  3. "one-api/types"
  4. "strings"
  5. "github.com/gin-gonic/gin"
  6. )
  7. type EmbeddingOptions struct {
  8. Seed int `json:"seed,omitempty"`
  9. Temperature *float64 `json:"temperature,omitempty"`
  10. TopK int `json:"top_k,omitempty"`
  11. TopP *float64 `json:"top_p,omitempty"`
  12. FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"`
  13. PresencePenalty *float64 `json:"presence_penalty,omitempty"`
  14. NumPredict int `json:"num_predict,omitempty"`
  15. NumCtx int `json:"num_ctx,omitempty"`
  16. }
  17. type EmbeddingRequest struct {
  18. Model string `json:"model"`
  19. Input any `json:"input"`
  20. EncodingFormat string `json:"encoding_format,omitempty"`
  21. Dimensions int `json:"dimensions,omitempty"`
  22. User string `json:"user,omitempty"`
  23. Seed float64 `json:"seed,omitempty"`
  24. Temperature *float64 `json:"temperature,omitempty"`
  25. TopP float64 `json:"top_p,omitempty"`
  26. FrequencyPenalty float64 `json:"frequency_penalty,omitempty"`
  27. PresencePenalty float64 `json:"presence_penalty,omitempty"`
  28. }
  29. func (r *EmbeddingRequest) GetTokenCountMeta() *types.TokenCountMeta {
  30. var texts = make([]string, 0)
  31. inputs := r.ParseInput()
  32. for _, input := range inputs {
  33. texts = append(texts, input)
  34. }
  35. return &types.TokenCountMeta{
  36. CombineText: strings.Join(texts, "\n"),
  37. }
  38. }
  39. func (r *EmbeddingRequest) IsStream(c *gin.Context) bool {
  40. return false
  41. }
  42. func (r *EmbeddingRequest) SetModelName(modelName string) {
  43. if modelName != "" {
  44. r.Model = modelName
  45. }
  46. }
  47. func (r *EmbeddingRequest) ParseInput() []string {
  48. if r.Input == nil {
  49. return make([]string, 0)
  50. }
  51. var input []string
  52. switch r.Input.(type) {
  53. case string:
  54. input = []string{r.Input.(string)}
  55. case []any:
  56. input = make([]string, 0, len(r.Input.([]any)))
  57. for _, item := range r.Input.([]any) {
  58. if str, ok := item.(string); ok {
  59. input = append(input, str)
  60. }
  61. }
  62. }
  63. return input
  64. }
  65. type EmbeddingResponseItem struct {
  66. Object string `json:"object"`
  67. Index int `json:"index"`
  68. Embedding []float64 `json:"embedding"`
  69. }
  70. type EmbeddingResponse struct {
  71. Object string `json:"object"`
  72. Data []EmbeddingResponseItem `json:"data"`
  73. Model string `json:"model"`
  74. Usage `json:"usage"`
  75. }