{"record":{"id":"44b3dc8d5d3069fd","repo":"weaviate/weaviate","slug":"get-vector-input-from-modules-provider-w","errorCode":null,"errorMessage":"get vector input from modules provider: %w","messagePattern":"get vector input from modules provider: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"usecases/traverser/hybrid/searcher.go","lineNumber":301,"sourceCode":"\t\t}\n\t}\n}\n\nfunc vectorFromModuleInput(ctx context.Context, class, input, targetVector string, modules modulesProvider) (models.Vector, error) {\n\tisMultiVector, err := modules.IsTargetVectorMultiVector(class, targetVector)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get vector input from modules provider: is target vector multi vector: %w\", err)\n\t}\n\tif isMultiVector {\n\t\tvector, err := modules.MultiVectorFromInput(ctx, class, input, targetVector)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"get multi vector input from modules provider: %w\", err)\n\t\t}\n\t\treturn vector, nil\n\t}\n\tvector, err := modules.VectorFromInput(ctx, class, input, targetVector)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get vector input from modules provider: %w\", err)\n\t}\n\treturn vector, nil\n}\n\nfunc getTargetVector(targetVectors []string) string {\n\tif len(targetVectors) == 1 {\n\t\treturn targetVectors[0]\n\t}\n\treturn \"\"\n}\n\nfunc performFusion(fusionAlgorithm int, weights []float64, resultSets [][]*search.Result, names []string) ([]search.Result, error) {\n\tswitch fusionAlgorithm {\n\tcase common_filters.HybridRankedFusion:\n\t\tfused := FusionRanked(weights, resultSets, names)\n\t\treturn toSearchResults(fused), nil\n\tcase common_filters.HybridRelativeScoreFusion:\n\t\tfused := FusionRelativeScore(weights, resultSets, names, true)","sourceCodeStart":283,"sourceCodeEnd":319,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/traverser/hybrid/searcher.go#L283-L319","documentation":"For standard (single-vector) targets, vectorFromModuleInput calls modules.VectorFromInput to vectorize the query text. This error wraps that module call's failure — the most common module-side failure in hybrid search when no explicit vector was supplied.","triggerScenarios":"Hybrid search with alpha > 0 (dense leg needed) and no explicit vector, where the configured vectorizer module fails to convert the query string: bad/missing API key, provider HTTP error, rate limit, or empty query text rejected by the module.","commonSituations":"text2vec-openai/cohere/huggingface keys expired or absent; module not in ENABLE_MODULES; provider outage or quota exhaustion; empty-string hybrid queries.","solutions":["Read the wrapped root error in logs to see which vectorizer failed and why.","Supply the API key header (e.g. X-OpenAI-Api-Key) or fix module credentials in collection config.","Confirm the vectorizer module is enabled server-side and the collection's vectorizer matches an available module.","Provide an explicit query vector to bypass module vectorization, or retry after provider rate limits clear."],"exampleFix":"// before\nconst res = await weaviate.graphql.hybrid(\"q\", 0.5) // no key configured\n// after\nconst client = weaviate.client({ ...config, headers: { \"X-OpenAI-Api-Key\": process.env.OPENAI_API_KEY } })","handlingStrategy":"retry","validationCode":"if (!query || typeof query !== \"string\") {\n  throw new Error(\"hybrid query text must be a non-empty string before module vectorization\");\n}\nif (!providerApiKey) throw new Error(\"vectorizer API key missing\");","typeGuard":null,"tryCatchPattern":"try {\n  return await hybridQuery();\n} catch (e) {\n  if (String(e).includes(\"get vector input from modules provider\")) {\n    await sleep(retryDelay); // handle provider rate limits/transient outages\n    return await hybridQuery();\n  }\n  throw e;\n}","preventionTips":["Always configure the vectorizer's provider API key header.","Ensure the collection's vectorizer module is listed in ENABLE_MODULES.","Never send empty query strings to hybrid search.","Add exponential backoff for provider rate-limit errors."],"tags":["hybrid-search","vectorizer","modules","api-key"],"backgroundTag":"vectorizer-api-failed","analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}