Spaces:
Sleeping
Sleeping
feat: markdown upload support — app/services/parsers/__init__.py
Browse files
app/services/parsers/__init__.py
CHANGED
|
@@ -35,6 +35,9 @@ def _register_default() -> None:
|
|
| 35 |
_REGISTRY["simple"] = SimpleParser
|
| 36 |
except ImportError as e:
|
| 37 |
logger.warning("simple parser not installed: %s", e)
|
|
|
|
|
|
|
|
|
|
| 38 |
# mineru / vlm 留 hook (按需装)
|
| 39 |
|
| 40 |
|
|
@@ -55,7 +58,13 @@ def get_parser(name: str | None = None) -> BaseParser:
|
|
| 55 |
|
| 56 |
|
| 57 |
def get_parser_chain() -> list[BaseParser]:
|
| 58 |
-
"""按 settings 配置返回 [primary, fallback] 链.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
chain: list[BaseParser] = []
|
| 60 |
for name in (settings.parser_primary, settings.parser_fallback):
|
| 61 |
if name and name not in {p.name for p in chain}:
|
|
@@ -64,6 +73,12 @@ def get_parser_chain() -> list[BaseParser]:
|
|
| 64 |
except IngestionFailedError:
|
| 65 |
# 跳过未装的, 继续
|
| 66 |
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
return chain
|
| 68 |
|
| 69 |
|
|
|
|
| 35 |
_REGISTRY["simple"] = SimpleParser
|
| 36 |
except ImportError as e:
|
| 37 |
logger.warning("simple parser not installed: %s", e)
|
| 38 |
+
# Markdown parser — 零依赖, 始终可用
|
| 39 |
+
from app.services.parsers.markdown_parser import MarkdownParser
|
| 40 |
+
_REGISTRY["markdown"] = MarkdownParser
|
| 41 |
# mineru / vlm 留 hook (按需装)
|
| 42 |
|
| 43 |
|
|
|
|
| 58 |
|
| 59 |
|
| 60 |
def get_parser_chain() -> list[BaseParser]:
|
| 61 |
+
"""按 settings 配置返回 [primary, fallback] 链.
|
| 62 |
+
|
| 63 |
+
此外, 始终把零依赖的 markdown parser 追加到链尾 — 它支持的扩展名
|
| 64 |
+
(md/markdown) 跟 primary/fallback 都不重叠, 互不干扰. 这样
|
| 65 |
+
PARSER_PRIMARY=docling + PARSER_FALLBACK=simple 的生产配置, 用户
|
| 66 |
+
上传 .md 文件也能直接被 markdown parser 接管, 不需要改 env.
|
| 67 |
+
"""
|
| 68 |
chain: list[BaseParser] = []
|
| 69 |
for name in (settings.parser_primary, settings.parser_fallback):
|
| 70 |
if name and name not in {p.name for p in chain}:
|
|
|
|
| 73 |
except IngestionFailedError:
|
| 74 |
# 跳过未装的, 继续
|
| 75 |
continue
|
| 76 |
+
# 始终补一个 markdown parser (零依赖, 必装), 除非已存在于链
|
| 77 |
+
if "markdown" not in {p.name for p in chain}:
|
| 78 |
+
try:
|
| 79 |
+
chain.append(_build_parser("markdown"))
|
| 80 |
+
except IngestionFailedError:
|
| 81 |
+
pass
|
| 82 |
return chain
|
| 83 |
|
| 84 |
|