weaviate/weaviate · error

vectorize thermal: %v

Error message

vectorize thermal: %v

What it means

The nearDepth argument's searcher (searcher.go:34) invokes the depth (thermal-image) vectorizer's VectorizeDepth with the user-supplied Depth parameter. If the underlying inference service fails (multi2vec-clip/thermal module backend error), it is converted via errors.Errorf to "vectorize thermal: %v". The module name is historical ('thermal' images) though the argument is nearDepth.

Source

Thrown at usecases/modulecomponents/arguments/nearDepth/searcher.go:34

	"github.com/pkg/errors"
	"github.com/weaviate/weaviate/entities/dto"
	"github.com/weaviate/weaviate/entities/modulecapabilities"
	"github.com/weaviate/weaviate/entities/moduletools"
)

type Searcher[T dto.Embedding] struct {
	vectorForParams modulecapabilities.VectorForParams[T]
}

func NewSearcher[T dto.Embedding](vectorizer bindVectorizer[T]) *Searcher[T] {
	return &Searcher[T]{func(ctx context.Context, params any, className string,
		findVectorFn modulecapabilities.FindVectorFn[T],
		cfg moduletools.ClassConfig,
	) (T, error) {
		vector, err := vectorizer.VectorizeDepth(ctx, params.(*NearDepthParams).Depth, cfg)
		if err != nil {
			return nil, errors.Errorf("vectorize thermal: %v", err)
		}
		return vector, nil
	}}
}

type bindVectorizer[T dto.Embedding] interface {
	VectorizeDepth(ctx context.Context, thermal string, cfg moduletools.ClassConfig) (T, error)
}

func (s *Searcher[T]) VectorSearches() map[string]modulecapabilities.VectorForParams[T] {
	vectorSearches := map[string]modulecapabilities.VectorForParams[T]{}
	vectorSearches["nearDepth"] = s.vectorForParams
	return vectorSearches
}

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Ensure the depth/clip inference module container is running and reachable (check `docker compose ps` and Weaviate's module URL env vars like CLIP_INFERENCE_API)
  2. Retry with a valid numeric depth value matching the module's expected parameter
  3. Check the inference service logs for the underlying model error reported after 'vectorize thermal:'
  4. If the service is overloaded, scale it or increase timeouts; verify network connectivity between Weaviate and the module service

Example fix

// GraphQL before (fails when inference service is down or param malformed)
{ Get { ThermalImage(limit: 5, nearDepth: { depth: "surface" }) { image } } }
// after (valid numeric depth, service reachable)
{ Get { ThermalImage(limit: 5, nearDepth: { depth: 2.5 }) { image } } }
Defensive patterns

Strategy: fallback

Validate before calling

// validate the nearDepth input and module availability before querying
if typeof depth !== 'number' || isNaN(depth) || depth < 0 {
  throw new Error('nearDepth.depth must be a non-negative number');
}
const modules = await weaviate.modules.list();
if (!modules.includes('multi2vec-clip')) {
  throw new Error('depth/thermal vectorizer module not enabled on this instance');
}

Type guard

function isValidDepthParams(p) {
  return p != null && typeof p.depth === 'number' && isFinite(p.depth) && p.depth >= 0;
}

Try / catch

try {
  const res = await client.graphql.get().withNearDepth({ depth: 2.5 }).do();
} catch (e) {
  if (String(e).includes('vectorize thermal')) {
    // inference service failed: check module container health, then retry
  }
}

Prevention

When it happens

Trigger: GraphQL query using nearDepth(depth: X) on a class vectorized by a depth-image module, when the vectorization call fails: inference container down/unreachable, malformed Depth param (empty/non-number), model failing on the input, or timeout calling the module service.

Common situations: The multi2vec-clip (or depth-specific) inference container not deployed/scaled in docker-compose; module service OOM or crashed on a bad image; network policy blocking Weaviate→module traffic; passing depth as a string instead of a number.

Related errors


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