Tencent/WeKnora · error
parse document: %w
Error message
parse document: %w
What it means
Wraps a failure from docparser.NewReader while constructing a document reader for the given parser engine and extension. Reader construction fails when the engine/format combination is unknown or unsupported (e.g. engine name typo, no reader registered for the extension).
Source
Thrown at internal/application/service/temporary_document.go:403
parserEngine := strings.TrimSpace(options.ParserEngine)
if parserEngine == "auto" {
parserEngine = ""
}
request := &types.ReadRequest{
FileContent: data, FileName: document.FileName, FileType: strings.TrimPrefix(ext, "."),
ParserEngine: parserEngine,
}
if tenant, ok := ctx.Value(types.TenantInfoContextKey).(*types.Tenant); ok && tenant != nil && tenant.ParserEngineConfig != nil {
request.ParserEngineOverrides = tenant.ParserEngineConfig.ToOverridesMap()
}
deps := docparser.ReaderDeps{Overrides: request.ParserEngineOverrides, Remote: s.documentReader}
if s.tenantService != nil {
deps.WeKnoraCloudCredentials = s.tenantService.GetWeKnoraCloudCredentials
}
reader, err := docparser.NewReader(ctx, parserEngine, strings.TrimPrefix(ext, "."), false, deps)
if err != nil {
return "", nil, nil, fmt.Errorf("parse document: %w", err)
}
result, err := reader.Read(ctx, request)
if err != nil {
return "", nil, nil, fmt.Errorf("parse document: %w", err)
}
// Capture raw page-image bytes before ResolveAndStore stores/rewrites them,
// so the VLM OCR fallback for scanned documents has bytes to work with.
maxOCRPages := temporaryDocumentImageOCRMaxPages()
if options.OCRMaxPages > 0 {
maxOCRPages = options.OCRMaxPages
}
pageImages := collectImageBytes(result.ImageRefs, maxOCRPages)
images := make([]types.TemporaryDocumentImage, 0)
if s.imageResolver != nil {
updated, stored, resolveErr := s.imageResolver.ResolveAndStore(
ctx, result, temporarySaveFileService{s.fileService}, document.TenantID,
)
if resolveErr != nil {View on GitHub (pinned to 988cbb0330)
Solutions
- Use a supported ParserEngine value or "auto" to let the system pick
- Check that the file extension is a supported document format
- Verify ParserEngineOverrides entries reference valid engines
- Inspect the wrapped error for which engine/format combination failed
Example fix
// before
types.ParseOptions{ParserEngine: "ocr-xml"} // unsupported
// after
types.ParseOptions{ParserEngine: "auto"} Defensive patterns
Strategy: validation
Validate before calling
if !docparser.IsSupportedExtension(ext) || !isKnownEngine(opts.ParserEngine) {
return errors.New("unsupported document format or parser engine")
} Try / catch
if err != nil {
if strings.HasPrefix(err.Error(), "parse document:") {
// inspect wrapped cause: unsupported engine/format
}
} Prevention
- Use ParserEngine "auto" unless a specific engine is required
- Keep ParserEngineOverrides limited to verified engine names
- Only upload supported file extensions
When it happens
Trigger: parse → Process on a non-audio document where parserEngine (after trim/auto resolution) plus the trimmed extension yields no registered docparser reader — NewReader returns an error.
Common situations: Caller passes an unsupported ParserEngine value (misspelling or engine not compiled in); file extension with no parser available (e.g. unusual binary format); ParserEngineOverrides map references a nonexistent engine.
Related errors
- attachment %s failed to parse: %s
- decode suggestion JSON: %w
- open source file: %w
- read source file: %w
- readability parse: %w
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/408608510174829a.
Report an issue: GitHub.