embeddings: base64 encoding fix (#12715)

This commit is contained in:
nicole pardal
2025-10-22 11:27:44 -07:00
committed by GitHub
parent d515aed6c3
commit e0ead1adee
4 changed files with 386 additions and 12 deletions

View File

@@ -7,6 +7,7 @@ import (
"io"
"math/rand"
"net/http"
"strings"
"github.com/gin-gonic/gin"
@@ -44,7 +45,8 @@ type RetrieveWriter struct {
type EmbedWriter struct {
BaseWriter
model string
model string
encodingFormat string
}
func (w *BaseWriter) writeError(data []byte) (int, error) {
@@ -254,7 +256,7 @@ func (w *EmbedWriter) writeResponse(data []byte) (int, error) {
}
w.ResponseWriter.Header().Set("Content-Type", "application/json")
err = json.NewEncoder(w.ResponseWriter).Encode(openai.ToEmbeddingList(w.model, embedResponse))
err = json.NewEncoder(w.ResponseWriter).Encode(openai.ToEmbeddingList(w.model, embedResponse, w.encodingFormat))
if err != nil {
return 0, err
}
@@ -348,6 +350,14 @@ func EmbeddingsMiddleware() gin.HandlerFunc {
return
}
// Validate encoding_format parameter
if req.EncodingFormat != "" {
if !strings.EqualFold(req.EncodingFormat, "float") && !strings.EqualFold(req.EncodingFormat, "base64") {
c.AbortWithStatusJSON(http.StatusBadRequest, openai.NewError(http.StatusBadRequest, fmt.Sprintf("Invalid value for 'encoding_format' = %s. Supported values: ['float', 'base64'].", req.EncodingFormat)))
return
}
}
if req.Input == "" {
req.Input = []string{""}
}
@@ -371,8 +381,9 @@ func EmbeddingsMiddleware() gin.HandlerFunc {
c.Request.Body = io.NopCloser(&b)
w := &EmbedWriter{
BaseWriter: BaseWriter{ResponseWriter: c.Writer},
model: req.Model,
BaseWriter: BaseWriter{ResponseWriter: c.Writer},
model: req.Model,
encodingFormat: req.EncodingFormat,
}
c.Writer = w