Skip to content

fix: route txt/md KB uploads to TextParser and clarify missing markitdown - #9920

Draft
lxfight wants to merge 1 commit into
AstrBotDevs:masterfrom
lxfight:fix/kb-txt-md-text-parser
Draft

fix: route txt/md KB uploads to TextParser and clarify missing markitdown#9920
lxfight wants to merge 1 commit into
AstrBotDevs:masterfrom
lxfight:fix/kb-txt-md-text-parser

Conversation

@lxfight

@lxfight lxfight commented Sep 2, 2026

Copy link
Copy Markdown
Member

Fixes #9598

.txt / .md / .markdown uploads were routed to MarkitdownParser, which imports markitdown-no-magika at module level. On environments where that package is absent, uploading a txt file failed with a generic "文档解析失败:无法读取或解析上传文件" error that never mentioned the actual cause (ModuleNotFoundError). Meanwhile TextParser — a dependency-free plain-text parser explicitly written for TXT/MD — existed but was never used by select_parser.

Modifications / 改动点

  • astrbot/core/knowledge_base/parsers/util.py:

    • Route .txt / .md / .markdown to TextParser (no external dependency needed; behavior is unchanged since markitdown just passed these through).
    • Keep .rst/.adoc/.xlsx/.docx/.xls on MarkitdownParser, but catch ImportError at selection time and raise KnowledgeBaseUploadError with an explicit install hint (pip install 'markitdown-no-magika[docx,xls,xlsx]'). kb_helper re-raises KnowledgeBaseUploadError untouched, so users now see the real cause instead of the misleading "file corrupted" message.
  • tests/test_kb_select_parser.py: cover routing for all extensions, unsupported extension error, and the missing-dependency error path (simulated via sys.modules).

  • This is NOT a breaking change. / 这不是一个破坏性变更。

Screenshots or Test Results / 运行截图或测试结果

$ uv run pytest tests/test_kb_select_parser.py tests/test_epub_parser.py tests/test_kb_import.py -q
22 passed, 2 warnings in 2.97s
  • uv run ruff format / uv run ruff check pass.
  • Verification steps: in an environment without markitdown-no-magika, upload a .txt file to a knowledge base — it now parses and indexes successfully; uploading a .docx in the same environment reports the missing-dependency hint instead of a generic parse failure.

Checklist / 检查清单

  • 😊 If there are new features added in the PR, I have discussed it with the authors through issues/emails, etc.
    / 如果 PR 中有新加入的功能,已经通过 Issue / 邮件等方式和作者讨论过。

  • 👀 My changes have been well-tested, and "Verification Steps" and "Screenshots" have been provided above.
    / 我的更改经过了良好的测试,并已在上方提供了“验证步骤”和“运行截图”

  • 🤓 I have ensured that no new dependencies are introduced, OR if new dependencies are introduced, they have been added to the appropriate locations in requirements.txt and pyproject.toml.
    / 我确保没有引入新依赖库,或者引入了新依赖库的同时将其添加到 requirements.txtpyproject.toml 文件相应位置。

  • 😮 My changes do not introduce malicious code.
    / 我的更改没有引入恶意代码。

Summary by Sourcery

Ensure knowledge-base uploads use the appropriate parser and expose actionable errors for missing optional dependencies.

Bug Fixes:

  • Route plain-text knowledge-base uploads through the dependency-free TextParser so TXT and Markdown files continue to work when markitdown is unavailable.
  • Report a clear installation hint when formats requiring markitdown-no-magika are uploaded without that dependency.

Tests:

  • Add parser-selection coverage for text, office, EPUB, PDF, unsupported formats, and missing markitdown dependencies.

…down

txt/md/markdown are plain text and were routed to MarkitdownParser,
which requires markitdown-no-magika. Without that package the upload
failed with a generic parse error that never mentioned the missing
dependency, and TextParser existed but was never used.

Route plain-text formats to TextParser, and when markitdown-no-magika
is missing for office formats, raise KnowledgeBaseUploadError with an
explicit install hint instead of a wrapped ModuleNotFoundError.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 没有markitdown-no-magika依赖时知识库中上传txt文件会报错

1 participant