weaviate/weaviate · error

get vector input from modules provider: is target vector mul

Error message

get vector input from modules provider: is target vector multi vector: %w

What it means

When generating the query vector from a module, vectorFromModuleInput first asks whether the target vector is a multi-vector (multiple vectors per object, e.g. ColBERT-style). This error wraps a failure of that IsTargetVectorMultiVector lookup against the modules provider — typically a schema/module resolution failure, not a vectorization failure.

Source

Thrown at usecases/traverser/hybrid/searcher.go:290

			targetVector := getTargetVector(targetVectors)
			if err != nil {
				return nil, err
			}
			vector, err := vectorFromModuleInput(ctx, class, query, targetVector, modules)
			if err != nil {
				return nil, err
			}
			return vector, nil
		} else {
			return nil, fmt.Errorf("no vector or modules provided for hybrid search")
		}
	}
}

func vectorFromModuleInput(ctx context.Context, class, input, targetVector string, modules modulesProvider) (models.Vector, error) {
	isMultiVector, err := modules.IsTargetVectorMultiVector(class, targetVector)
	if err != nil {
		return nil, fmt.Errorf("get vector input from modules provider: is target vector multi vector: %w", err)
	}
	if isMultiVector {
		vector, err := modules.MultiVectorFromInput(ctx, class, input, targetVector)
		if err != nil {
			return nil, fmt.Errorf("get multi vector input from modules provider: %w", err)
		}
		return vector, nil
	}
	vector, err := modules.VectorFromInput(ctx, class, input, targetVector)
	if err != nil {
		return nil, fmt.Errorf("get vector input from modules provider: %w", err)
	}
	return vector, nil
}

func getTargetVector(targetVectors []string) string {
	if len(targetVectors) == 1 {
		return targetVectors[0]

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Check the wrapped error for the module/schema failure detail.
  2. Confirm the target vector name exists in the class's named-vector configuration.
  3. Verify the responsible vectorizer module is enabled and initialized (server logs, ENABLE_MODULES).
  4. Fix or remove stale named-vector entries in the collection schema.

Example fix

// before
"vectorConfig": { "myvec": { "vectorizer": { "none": {} } } }
// query references targetVector: "othervec"
// after: query with targetVector: "myvec" or add "othervec" to vectorConfig
Defensive patterns

Strategy: validation

Validate before calling

const schema = await client.schema.classGetter().withClassName(className).do();
const namedVectors = Object.keys(schema.vectorConfig ?? {});
if (targetVector && !namedVectors.includes(targetVector)) {
  throw new Error(`target vector '${targetVector}' not in [${namedVectors}]`);
}

Type guard

const hasTargetVector = (cls, name) => !cls?.vectorConfig || Object.prototype.hasOwnProperty.call(cls.vectorConfig, name);

Try / catch

try {
  return await hybridQuery();
} catch (e) {
  if (String(e).includes("is target vector multi vector")) {
    // retry with default target vector
    return await hybridQuery({ targetVector: undefined });
  }
  throw e;
}

Prevention

When it happens

Trigger: Hybrid search relying on module vectorization where the target-vector name does not resolve against the class schema, or the modules provider fails to answer the multi-vector query (module not initialized, schema inconsistent).

Common situations: Named-vector configuration referencing a target vector that does not exist on the class; module disabled after being referenced in config; schema migration leaving stale named-vector definitions.

Related errors


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