weaviate/weaviate · error
extend %s: %v
Error message
extend %s: %v
What it means
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.
Source
Thrown at usecases/modules/modules.go:777
searchValue := value
if searchVectorValue, ok := value.(modulecapabilities.AdditionalPropertyWithSearchVector[[]float32]); ok {
if vec, ok := searchVector.([]float32); ok {
searchVectorValue.SetSearchVector(vec)
searchValue = searchVectorValue
} else {
return nil, errors.Errorf("extend %s: set search vector unrecongnized type: %T", name, searchVector)
}
} else if searchVectorValue, ok := value.(modulecapabilities.AdditionalPropertyWithSearchVector[[][]float32]); ok {
if vec, ok := searchVector.([][]float32); ok {
searchVectorValue.SetSearchVector(vec)
searchValue = searchVectorValue
} else {
return nil, errors.Errorf("extend %s: set search multi vector unrecongnized type: %T", name, searchVector)
}
}
resArray, err := additionalPropertyFn(ctx, toBeExtended, searchValue, nil, argumentModuleParams, cfg)
if err != nil {
return nil, errors.Errorf("extend %s: %v", name, err)
}
toBeExtended = resArray
} else {
return nil, errors.Errorf("unknown capability: %s", name)
}
}
}
}
return toBeExtended, nil
}
func (p *Provider) getClassFromSearchResult(in []search.Result) (*models.Class, error) {
if len(in) > 0 {
return p.getClass(in[0].ClassName)
}
return nil, errors.Errorf("unknown class")
}
View on GitHub (pinned to 75aa4b6d11)
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
Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-flight: check module config env vars before issuing the request
required := []string{"ENABLE_MODULES", "OPENAI_APIKEY"} // adjust per module
for _, k := range required {
if os.Getenv(k) == "" {
return fmt.Errorf("missing env var %s required by module", k)
}
} Try / catch
res, err := provider.GetObjectAdditionalExtend(ctx, id, prop, searchVector, params, cfg)
if err != nil {
var retryable = strings.Contains(err.Error(), "timeout") || strings.Contains(err.Error(), "rate limit")
if retryable {
// backoff and retry once
}
log.Warnf("extend %s failed: %v", prop, err)
return nil, err
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/b0c91bfaa5042e67.
Report an issue: GitHub.