weaviate/weaviate · error

normalized distance: %w

Error message

normalized distance: %w

What it means

NormalizedDistance computes (1 - cosine)/2 between two vectors and wraps any error from cosineSim with this prefix. The only source is dimension mismatch, so this error indicates the compared vectors were produced with different dimensionality.

Source

Thrown at usecases/vectorizer/distance.go:24

//
//  Copyright © 2016 - 2026 Weaviate B.V. All rights reserved.
//
//  CONTACT: hello@weaviate.io
//

package vectorizer

import (
	"fmt"
	"math"
)

// NormalizedDistance between two arbitrary vectors, errors if dimensions don't
// match, will return results between 0 (no distance) and 1 (maximum distance)
func NormalizedDistance(a, b []float32) (float32, error) {
	sim, err := cosineSim(a, b)
	if err != nil {
		return 1, fmt.Errorf("normalized distance: %w", err)
	}

	return (1 - sim) / 2, nil
}

func cosineSim(a, b []float32) (float32, error) {
	if len(a) != len(b) {
		return 0, fmt.Errorf("vectors have different dimensions")
	}

	var (
		sumProduct float64
		sumASquare float64
		sumBSquare float64
	)

	for i := range a {
		sumProduct += float64(a[i] * b[i])

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Ensure both vectors come from the same model/dimension before comparing.
  2. Re-vectorize the collection after any vectorizer/model change.
  3. Validate vector lengths at call sites before computing distances.
  4. Add a pre-call length equality guard in calling code.

Example fix

// before
sim, _ := vectorizer.NormalizedDistance(a, b)
// after
if len(a) != len(b) { return fmt.Errorf("dim mismatch: %d vs %d", len(a), len(b)) }
sim, err := vectorizer.NormalizedDistance(a, b)
Defensive patterns

Strategy: validation

Validate before calling

func canCompare(a, b []float32) bool { return len(a) == len(b) && len(a) > 0 }

Type guard

func sameDims(a, b []float32) bool { return len(a) == len(b) }

Try / catch

sim, err := vectorizer.NormalizedDistance(a, b)
if err != nil {
  var dimErr bool = strings.Contains(err.Error(), "different dimensions")
  if dimErr { return revectorizeAndRetry() }
  return err
}

Prevention

When it happens

Trigger: Calling vectorizer.NormalizedDistance(a, b) where len(a) != len(b) — e.g. mixing vectors from different vectorizers, different target vectors, or before/after a vectorizer model change.

Common situations: Schema migration changing vectorizer/model (dimension change) while old vectors remain; comparing cross-target-vector embeddings in multi-vector setups; hand-built vectors with wrong length.

Related errors


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/5d21a90b51871144. Report an issue: GitHub.