mirror of
https://github.com/ollama/ollama.git
synced 2025-11-10 21:07:45 +01:00
embeddings: base64 encoding fix (#12715)
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
package openai
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
@@ -73,9 +75,10 @@ type JsonSchema struct {
|
||||
}
|
||||
|
||||
type EmbedRequest struct {
|
||||
Input any `json:"input"`
|
||||
Model string `json:"model"`
|
||||
Dimensions int `json:"dimensions,omitempty"`
|
||||
Input any `json:"input"`
|
||||
Model string `json:"model"`
|
||||
Dimensions int `json:"dimensions,omitempty"`
|
||||
EncodingFormat string `json:"encoding_format,omitempty"` // "float" or "base64"
|
||||
}
|
||||
|
||||
type StreamOptions struct {
|
||||
@@ -181,9 +184,9 @@ type Model struct {
|
||||
}
|
||||
|
||||
type Embedding struct {
|
||||
Object string `json:"object"`
|
||||
Embedding []float32 `json:"embedding"`
|
||||
Index int `json:"index"`
|
||||
Object string `json:"object"`
|
||||
Embedding any `json:"embedding"` // Can be []float32 (float format) or string (base64 format)
|
||||
Index int `json:"index"`
|
||||
}
|
||||
|
||||
type ListCompletion struct {
|
||||
@@ -377,13 +380,21 @@ func ToListCompletion(r api.ListResponse) ListCompletion {
|
||||
}
|
||||
|
||||
// ToEmbeddingList converts an api.EmbedResponse to EmbeddingList
|
||||
func ToEmbeddingList(model string, r api.EmbedResponse) EmbeddingList {
|
||||
// encodingFormat can be "float", "base64", or empty (defaults to "float")
|
||||
func ToEmbeddingList(model string, r api.EmbedResponse, encodingFormat string) EmbeddingList {
|
||||
if r.Embeddings != nil {
|
||||
var data []Embedding
|
||||
for i, e := range r.Embeddings {
|
||||
var embedding any
|
||||
if strings.EqualFold(encodingFormat, "base64") {
|
||||
embedding = floatsToBase64(e)
|
||||
} else {
|
||||
embedding = e
|
||||
}
|
||||
|
||||
data = append(data, Embedding{
|
||||
Object: "embedding",
|
||||
Embedding: e,
|
||||
Embedding: embedding,
|
||||
Index: i,
|
||||
})
|
||||
}
|
||||
@@ -402,6 +413,13 @@ func ToEmbeddingList(model string, r api.EmbedResponse) EmbeddingList {
|
||||
return EmbeddingList{}
|
||||
}
|
||||
|
||||
// floatsToBase64 encodes a []float32 to a base64 string
|
||||
func floatsToBase64(floats []float32) string {
|
||||
var buf bytes.Buffer
|
||||
binary.Write(&buf, binary.LittleEndian, floats)
|
||||
return base64.StdEncoding.EncodeToString(buf.Bytes())
|
||||
}
|
||||
|
||||
// ToModel converts an api.ShowResponse to Model
|
||||
func ToModel(r api.ShowResponse, m string) Model {
|
||||
return Model{
|
||||
|
||||
Reference in New Issue
Block a user