mirror of
https://github.com/Tencent/WeKnora.git
synced 2026-09-01 14:53:07 +08:00
15550d14d4
Scanned PDFs without a successful OCR pass (e.g. when no VLM is configured on the KB, or when the VLM returned a "no text content" reply that the sanitizer discarded) reach the summary and wiki-ingest pipelines with nothing but markdown image references for content. The downstream LLM prompts used to receive the filename, file type, and title alongside that empty content, and the generate_summary template explicitly forbade the model from refusing — so the model would invent a topic from the filename alone, producing e.g. a "Canon scanner manual" summary for an MX5280.pdf that is actually a scanned legal letter. Two changes shut this down: 1. Drop filename / title / file-type from every LLM prompt input. The wiki summary, knowledge extract, candidate slug, and chunk citation prompts now see only the document content. The knowledge summary path no longer prepends the "Document Type: X / File Name: Y" intro. 2. Add a content-sufficiency guard in front of the LLM call. A new helper strips markdown image references and HTML image tags and refuses to invoke the model when fewer than 50 real-text runes remain. getSummary returns a sentinel error in that case and the caller marks the knowledge as SummaryStatusFailed instead of surfacing the first chunk's bare image reference. Wiki ingest skips LLM extraction with a clear log message. The generate_summary.yaml prompt is also updated: the "NEVER output refusal phrases" clause is removed and replaced with an explicit empty-content rule that returns a deterministic placeholder line. Real OCR (Tesseract / PaddleOCR) and filename-pattern sanitisation are intentionally left for separate PRs.