{"record":{"id":"b0c91bfaa5042e67","repo":"weaviate/weaviate","slug":"extend-s-v","errorCode":null,"errorMessage":"extend %s: %v","messagePattern":"extend (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"usecases/modules/modules.go","lineNumber":777,"sourceCode":"\t\t\t\t\tsearchValue := value\n\t\t\t\t\tif searchVectorValue, ok := value.(modulecapabilities.AdditionalPropertyWithSearchVector[[]float32]); ok {\n\t\t\t\t\t\tif vec, ok := searchVector.([]float32); ok {\n\t\t\t\t\t\t\tsearchVectorValue.SetSearchVector(vec)\n\t\t\t\t\t\t\tsearchValue = searchVectorValue\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn nil, errors.Errorf(\"extend %s: set search vector unrecongnized type: %T\", name, searchVector)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if searchVectorValue, ok := value.(modulecapabilities.AdditionalPropertyWithSearchVector[[][]float32]); ok {\n\t\t\t\t\t\tif vec, ok := searchVector.([][]float32); ok {\n\t\t\t\t\t\t\tsearchVectorValue.SetSearchVector(vec)\n\t\t\t\t\t\t\tsearchValue = searchVectorValue\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn nil, errors.Errorf(\"extend %s: set search multi vector unrecongnized type: %T\", name, searchVector)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresArray, err := additionalPropertyFn(ctx, toBeExtended, searchValue, nil, argumentModuleParams, cfg)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, errors.Errorf(\"extend %s: %v\", name, err)\n\t\t\t\t\t}\n\t\t\t\t\ttoBeExtended = resArray\n\t\t\t\t} else {\n\t\t\t\t\treturn nil, errors.Errorf(\"unknown capability: %s\", name)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn toBeExtended, nil\n}\n\nfunc (p *Provider) getClassFromSearchResult(in []search.Result) (*models.Class, error) {\n\tif len(in) > 0 {\n\t\treturn p.getClass(in[0].ClassName)\n\t}\n\treturn nil, errors.Errorf(\"unknown class\")\n}\n","sourceCodeStart":759,"sourceCodeEnd":795,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/modules/modules.go#L759-L795","documentation":"After a successful type match, additionalExtend invokes the module's actual additional-property function additionalPropertyFn. Any error that function returns is re-wrapped as \"extend %s: %v\" with the property name. This means the module itself failed while computing the additional property (e.g. remote vectorizer/generative call failed), not the type assignment.","triggerScenarios":"The module's AdditionalProperty function returns an error during GetObjectAdditionalExtend, ListObjectsAdditionalExtend, GetExploreAdditionalExtend, or ListExploreAdditionalExtend — e.g. upstream API failure, auth error, rate limit, or invalid module parameters.","commonSituations":"Generative/reranker/vectorizer module calling an external provider whose API key is missing or expired, network outage to the provider, module-specific parameter (argumentModuleParams) rejected by the module, module misconfigured via environment variables.","solutions":["Inspect the wrapped inner message for the module's root cause","Verify module credentials/config env vars (API keys, endpoints) for the named module","Retry the request if the inner error is a transient network/rate-limit failure","Test the module's upstream service reachability from the Weaviate host","If it is a bug in a custom module, fix the additionalPropertyFn and return a descriptive error"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Pre-flight: check module config env vars before issuing the request\nrequired := []string{\"ENABLE_MODULES\", \"OPENAI_APIKEY\"} // adjust per module\nfor _, k := range required {\n\tif os.Getenv(k) == \"\" {\n\t\treturn fmt.Errorf(\"missing env var %s required by module\", k)\n\t}\n}","typeGuard":null,"tryCatchPattern":"res, err := provider.GetObjectAdditionalExtend(ctx, id, prop, searchVector, params, cfg)\nif err != nil {\n\tvar retryable = strings.Contains(err.Error(), \"timeout\") || strings.Contains(err.Error(), \"rate limit\")\n\tif retryable {\n\t\t// backoff and retry once\n\t}\n\tlog.Warnf(\"extend %s failed: %v\", prop, err)\n\treturn nil, err\n}","preventionTips":["Validate module API keys and endpoints at startup","Set client timeouts and retries inside custom modules","Monitor upstream provider rate limits and quota","Log the inner module error (the %v part) — it carries the root cause"],"tags":["weaviate","modules","upstream","error-wrapping"],"backgroundTag":"module-upstream-call-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"}