66from openkb .parsers .base import Parser
77from openkb .parsers .local import LocalParser
88
9- VALID_PARSERS = ("local" , "mineru" , "mistral" , "vlm" )
9+
10+ def _make_mistral (opts , config ):
11+ from openkb .parsers .mistral import MistralParser
12+ return MistralParser (opts )
13+
14+
15+ def _make_vlm (opts , config ):
16+ from openkb .parsers .vlm import VLMParser
17+ return VLMParser (opts , model = config .get ("model" ))
18+
19+
20+ def _make_mineru (opts , config ):
21+ from openkb .parsers .mineru import MineruParser
22+ return MineruParser (opts )
23+
24+
25+ # Single source of truth: online-parser name -> lazy factory.
26+ _ONLINE_PARSERS = {
27+ "mineru" : _make_mineru ,
28+ "mistral" : _make_mistral ,
29+ "vlm" : _make_vlm ,
30+ }
31+
32+ # Valid parser names (drives the CLI --parser choice and error messages).
33+ VALID_PARSERS = ("local" , * _ONLINE_PARSERS )
1034
1135
1236def get_parser (
@@ -21,18 +45,10 @@ def get_parser(
2145 name = (override or config .get ("parser" ) or "local" ).lower ()
2246 if name == "local" :
2347 return LocalParser (doc_name = doc_name , images_dir = images_dir , source_dir = source_dir )
24-
25- parsers_cfg = config .get ("parsers" , {}) or {}
26- opts = parsers_cfg .get (name , {}) or {}
27- if name == "mistral" :
28- from openkb .parsers .mistral import MistralParser
29- return MistralParser (opts )
30- if name == "vlm" :
31- from openkb .parsers .vlm import VLMParser
32- return VLMParser (opts , model = config .get ("model" ))
33- if name == "mineru" :
34- from openkb .parsers .mineru import MineruParser
35- return MineruParser (opts )
36- raise ValueError (
37- f"Unknown parser { name !r} . Valid options: { ', ' .join (VALID_PARSERS )} ."
38- )
48+ factory = _ONLINE_PARSERS .get (name )
49+ if factory is None :
50+ raise ValueError (
51+ f"Unknown parser { name !r} . Valid options: { ', ' .join (VALID_PARSERS )} ."
52+ )
53+ opts = (config .get ("parsers" , {}) or {}).get (name , {}) or {}
54+ return factory (opts , config )
0 commit comments