embedding.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package dto
  2. type EmbeddingOptions struct {
  3. Seed int `json:"seed,omitempty"`
  4. Temperature *float64 `json:"temperature,omitempty"`
  5. TopK int `json:"top_k,omitempty"`
  6. TopP *float64 `json:"top_p,omitempty"`
  7. FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"`
  8. PresencePenalty *float64 `json:"presence_penalty,omitempty"`
  9. NumPredict int `json:"num_predict,omitempty"`
  10. NumCtx int `json:"num_ctx,omitempty"`
  11. }
  12. type EmbeddingRequest struct {
  13. Model string `json:"model"`
  14. Input any `json:"input"`
  15. EncodingFormat string `json:"encoding_format,omitempty"`
  16. Dimensions int `json:"dimensions,omitempty"`
  17. User string `json:"user,omitempty"`
  18. Seed float64 `json:"seed,omitempty"`
  19. Temperature *float64 `json:"temperature,omitempty"`
  20. TopP float64 `json:"top_p,omitempty"`
  21. FrequencyPenalty float64 `json:"frequency_penalty,omitempty"`
  22. PresencePenalty float64 `json:"presence_penalty,omitempty"`
  23. }
  24. func (r EmbeddingRequest) ParseInput() []string {
  25. if r.Input == nil {
  26. return nil
  27. }
  28. var input []string
  29. switch r.Input.(type) {
  30. case string:
  31. input = []string{r.Input.(string)}
  32. case []any:
  33. input = make([]string, 0, len(r.Input.([]any)))
  34. for _, item := range r.Input.([]any) {
  35. if str, ok := item.(string); ok {
  36. input = append(input, str)
  37. }
  38. }
  39. }
  40. return input
  41. }
  42. type EmbeddingResponseItem struct {
  43. Object string `json:"object"`
  44. Index int `json:"index"`
  45. Embedding []float64 `json:"embedding"`
  46. }
  47. type EmbeddingResponse struct {
  48. Object string `json:"object"`
  49. Data []EmbeddingResponseItem `json:"data"`
  50. Model string `json:"model"`
  51. Usage `json:"usage"`
  52. }