func()

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
	}
}