| package llm
|
|
|
| import (
|
| "encoding/json"
|
| "fmt"
|
| )
|
|
|
| const (
|
| EmbeddingInputTypeString = "string"
|
| EmbeddingInputTypeStringArray = "string_array"
|
| EmbeddingInputTypeIntArray = "int_array"
|
| EmbeddingInputTypeIntArrayArray = "int_array_array"
|
| )
|
|
|
| type EmbeddingInput struct {
|
| String string `json:"string,omitempty"`
|
| StringArray []string `json:"string_array,omitempty"`
|
| IntArray []int64 `json:"int_array,omitempty"`
|
| IntArrayArray [][]int64 `json:"int_array_array,omitempty"`
|
| }
|
|
|
| func (e EmbeddingInput) MarshalJSON() ([]byte, error) {
|
| if e.String != "" {
|
| return json.Marshal(e.String)
|
| }
|
|
|
| if len(e.StringArray) > 0 {
|
| return json.Marshal(e.StringArray)
|
| }
|
|
|
| if len(e.IntArray) > 0 {
|
| return json.Marshal(e.IntArray)
|
| }
|
|
|
| if len(e.IntArrayArray) > 0 {
|
| return json.Marshal(e.IntArrayArray)
|
| }
|
|
|
| return json.Marshal(nil)
|
| }
|
|
|
| func (e *EmbeddingInput) UnmarshalJSON(data []byte) error {
|
| var str string
|
|
|
| err := json.Unmarshal(data, &str)
|
| if err == nil {
|
| e.String = str
|
| return nil
|
| }
|
|
|
| var strArray []string
|
|
|
| err = json.Unmarshal(data, &strArray)
|
| if err == nil {
|
| e.StringArray = strArray
|
| return nil
|
| }
|
|
|
| var intArray []int64
|
|
|
| err = json.Unmarshal(data, &intArray)
|
| if err == nil {
|
| e.IntArray = intArray
|
| return nil
|
| }
|
|
|
| var intArrayArray [][]int64
|
|
|
| err = json.Unmarshal(data, &intArrayArray)
|
| if err == nil {
|
| e.IntArrayArray = intArrayArray
|
| return nil
|
| }
|
|
|
| return fmt.Errorf("invalid embedding input type")
|
| }
|
|
|
| func (e EmbeddingInput) GetType() string {
|
| if e.String != "" {
|
| return EmbeddingInputTypeString
|
| }
|
|
|
| if len(e.StringArray) > 0 {
|
| return EmbeddingInputTypeStringArray
|
| }
|
|
|
| if len(e.IntArray) > 0 {
|
| return EmbeddingInputTypeIntArray
|
| }
|
|
|
| if len(e.IntArrayArray) > 0 {
|
| return EmbeddingInputTypeIntArrayArray
|
| }
|
|
|
| return ""
|
| }
|
|
|
|
|
|
|
| type EmbeddingRequest struct {
|
|
|
| Input EmbeddingInput `json:"input"`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Task string `json:"task,omitempty"`
|
|
|
|
|
|
|
|
|
|
|
| EncodingFormat string `json:"encoding_format,omitempty"`
|
|
|
|
|
| Dimensions *int `json:"dimensions,omitempty"`
|
|
|
|
|
| User string `json:"user,omitempty"`
|
| }
|
|
|
|
|
| type EmbeddingResponse struct {
|
|
|
| ID string `json:"id,omitempty"`
|
|
|
|
|
| Object string `json:"object"`
|
|
|
|
|
| Data []EmbeddingData `json:"data"`
|
|
|
|
|
| Usage *EmbeddingUsage `json:"usage,omitempty"`
|
| }
|
|
|
|
|
| type EmbeddingData struct {
|
|
|
| Object string `json:"object"`
|
|
|
|
|
| Embedding Embedding `json:"embedding"`
|
|
|
|
|
| Index int `json:"index"`
|
| }
|
|
|
| type Embedding struct {
|
| Embedding []float64 `json:"embedding,omitempty"`
|
| Base64 string `json:"base64,omitempty"`
|
| }
|
|
|
| func (e Embedding) MarshalJSON() ([]byte, error) {
|
| if len(e.Embedding) > 0 {
|
| return json.Marshal(e.Embedding)
|
| }
|
|
|
| if e.Base64 != "" {
|
| return json.Marshal(e.Base64)
|
| }
|
|
|
| return json.Marshal(nil)
|
| }
|
|
|
| func (e *Embedding) UnmarshalJSON(data []byte) error {
|
| var str string
|
|
|
| err := json.Unmarshal(data, &str)
|
| if err == nil {
|
| e.Base64 = str
|
| return nil
|
| }
|
|
|
| var floatArray []float64
|
|
|
| err = json.Unmarshal(data, &floatArray)
|
| if err == nil {
|
| e.Embedding = floatArray
|
| return nil
|
| }
|
|
|
| return fmt.Errorf("invalid embedding type")
|
| }
|
|
|
|
|
| type EmbeddingUsage struct {
|
|
|
| PromptTokens int64 `json:"prompt_tokens"`
|
|
|
|
|
| TotalTokens int64 `json:"total_tokens"`
|
| }
|
|
|