From: Douglas Hanley Date: Sat, 12 Jul 2025 10:21:02 +0000 (-0400) Subject: server : fix pooled embedding output (#14645) X-Git-Tag: upstream/0.0.5882~6 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=0c1df14b5f8d992805cb22d0b77b44092a18aeab;p=pkg%2Fggml%2Fsources%2Fllama.cpp server : fix pooled embedding output (#14645) --- diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 57b917f2..d4dffb39 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -2581,12 +2581,14 @@ struct server_context { continue; } - const float * embd = llama_get_embeddings_seq(ctx, batch.seq_id[i][0]); - if (embd == NULL) { + const float * embd = nullptr; + if (llama_pooling_type(slot.ctx) == LLAMA_POOLING_TYPE_NONE) { embd = llama_get_embeddings_ith(ctx, i); + } else { + embd = llama_get_embeddings_seq(ctx, batch.seq_id[i][0]); } - if (embd == NULL) { + if (embd == nullptr) { SLT_ERR(slot, "failed to get embeddings, token = %d, seq_id = %d\n", batch.token[i], batch.seq_id[i][0]); res->embedding.push_back(std::vector(n_embd, 0.0f)); @@ -2594,12 +2596,12 @@ struct server_context { } // normalize only when there is pooling - // TODO: configurable if (llama_pooling_type(slot.ctx) != LLAMA_POOLING_TYPE_NONE) { common_embd_normalize(embd, embd_res.data(), n_embd, 2); res->embedding.push_back(embd_res); + break; } else { - res->embedding.push_back({ embd, embd + n_embd }); + res->embedding.emplace_back(embd, embd + n_embd); } }