What changed
Previously, the --embd-normalize CLI flag (which controls L2 vs cosine vs raw normalization for embedding outputs) was accepted at startup but silently ignored by the /embeddings server endpoint โ the endpoint always returned its own normalization behavior regardless of the configured flag. The fix propagates the flag into the endpoint's computation path.
TL;DR
llama.cpp b9193 (May 17) fixes a silent misconfiguration bug: if you set --embd-normalize 0 (raw) or --embd-normalize 1 (max-absolute) to get un-normalized embeddings from llama-server, it now actually works.
Developer signal
If you run llama-server as an embedding backend for a RAG pipeline, semantic search index, or similarity system, check which normalization your downstream code assumes. The default --embd-normalize 2 (L2) was already the server's implicit behavior, so if you never set this flag, nothing changes. The bug bites in two cases: (1) you set --embd-normalize 0 to get raw logits for custom normalization and were silently getting L2-normalized vectors instead โ your similarity scores were consistent but not what you configured; (2) you set --embd-normalize 1 for max-absolute normalization and got L2 instead. After updating to b9193, re-generate any stored embeddings that were produced with a non-default --embd-normalize flag, since they were computed with the wrong normalization. If you use default settings, no action needed.