appQQQ commited on
Commit
54a58bd
·
verified ·
1 Parent(s): 06be677

feat: markdown upload support — app/services/parsers/__init__.py

Browse files
Files changed (1) hide show
  1. app/services/parsers/__init__.py +16 -1
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