This is the exact bug I'd expect and most writeups skip it. Good catch showing the raw distances instead of just the fix. One thing worth adding: 1 - distance only looked like similarity because MiniLM happens to emit unit-length vectors. That's a property of that model, not of Chroma or your retriever code. Swap embedding models later and if the new one isn't reliably unit-norm, the scores don't break loudly, they just get quietly worse. Normalizing embeddings yourself right after generation, even when the model already does it, means that failure mode never comes back.
This is the exact bug I'd expect and most writeups skip it. Good catch showing the raw distances instead of just the fix. One thing worth adding: 1 - distance only looked like similarity because MiniLM happens to emit unit-length vectors. That's a property of that model, not of Chroma or your retriever code. Swap embedding models later and if the new one isn't reliably unit-norm, the scores don't break loudly, they just get quietly worse. Normalizing embeddings yourself right after generation, even when the model already does it, means that failure mode never comes back.