in ollama/ollama.go [105:143]
func (h *handlers) embedHandler(w http.ResponseWriter, r *http.Request) {
body, err := io.ReadAll(r.Body)
if err != nil {
internal.ErrorHandler(w, r, http.StatusInternalServerError, "failed to read request body: %v", err)
return
}
defer r.Body.Close()
var req EmbedRequest
if err := json.Unmarshal(body, &req); err != nil {
internal.ErrorHandler(w, r, http.StatusInternalServerError, "failed to unmarshal request body: %v", err)
return
}
model := h.client.EmbeddingModel(req.Model)
batch := model.NewBatch()
for _, input := range req.Input {
batch.AddContent(genai.Text(input))
}
gresp, err := model.BatchEmbedContents(r.Context(), batch)
if err != nil {
internal.ErrorHandler(w, r, http.StatusInternalServerError, "failed to create embedding: %v", err)
return
}
embeddings := make([][]float32, 0, len(gresp.Embeddings))
for _, embedding := range gresp.Embeddings {
embeddings = append(embeddings, embedding.Values)
}
if err := json.NewEncoder(w).Encode(&EmbedResponse{
Model: req.Model,
Embeddings: embeddings,
}); err != nil {
internal.ErrorHandler(w, r, http.StatusInternalServerError, "failed to encode embeddings response: %v", err)
return
}
}