{"record":{"id":"3ee71c5a50729b16","repo":"run-llama/liteparse","slug":"parse-timeout-requires-pool-size","errorCode":null,"errorMessage":"parse_timeout requires pool_size","messagePattern":"parse_timeout requires pool_size","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/python/liteparse/parser.py","lineNumber":659,"sourceCode":"        if ocr_hedge_delays_ms is not None:\n            kwargs[\"ocr_hedge_delays_ms\"] = ocr_hedge_delays_ms\n        if emit_word_boxes is not None:\n            kwargs[\"emit_word_boxes\"] = emit_word_boxes\n        if extract_text_metadata is not None:\n            kwargs[\"extract_text_metadata\"] = extract_text_metadata\n        if crop_box is not None:\n            kwargs[\"crop_box\"] = crop_box\n        if skip_diagonal_text is not None:\n            kwargs[\"skip_diagonal_text\"] = skip_diagonal_text\n        if include_complexity is not None:\n            kwargs[\"include_complexity\"] = include_complexity\n        if extract_vector_graphics is not None:\n            kwargs[\"extract_vector_graphics\"] = extract_vector_graphics\n\n        self._native = _NativeLiteParse(**kwargs)\n\n        if parse_timeout is not None and pool_size is None:\n            raise ValueError(\n                \"parse_timeout requires pool_size\"\n            )\n        self._pool = None\n        if pool_size is not None:\n            from ._pool import WorkerPool\n\n            self._pool = WorkerPool(kwargs, pool_size, parse_timeout)\n\n    def close(self) -> None:\n        \"\"\"Shut down pool workers, if pool mode is enabled. Idempotent.\n\n        Without ``pool_size`` this is a no-op. Workers also exit on their own\n        when the parent process does, so forgetting to call this leaks\n        nothing past interpreter exit.\n        \"\"\"\n        if self._pool is not None:\n            self._pool.close()\n","sourceCodeStart":641,"sourceCodeEnd":677,"githubUrl":"https://github.com/run-llama/liteparse/blob/22d2dd8cd7f7b9320102b57ddaf0e663ff7d15a8/packages/python/liteparse/parser.py#L641-L677","documentation":"ValueError raised by the LiteParse constructor when parse_timeout is given but pool_size is omitted. The timeout is implemented by killing worker processes, so it only exists in the process-pool mode; without a pool there is no worker to enforce it against.","triggerScenarios":"LiteParse(parse_timeout=30) without pool_size — the validation at parser.py:659 fires immediately at construction time.","commonSituations":"Copy-pasting timeout config from pooled examples into non-pooled code; adding parse_timeout to tune latency but forgetting it requires opting into the worker pool; refactors that removed pool_size while keeping the timeout.","solutions":["Pass pool_size (>= 1) together with parse_timeout","Remove parse_timeout if you do not want the process pool and implement your own deadline around parse() instead","Note init time is excluded from parse_timeout — only the parse itself is bounded"],"exampleFix":"// before\nparser = LiteParse(parse_timeout=30)\n\n// after\nparser = LiteParse(pool_size=2, parse_timeout=30)","handlingStrategy":"validation","validationCode":"def make_parser(pool_size=None, parse_timeout=None):\n    if parse_timeout is not None and pool_size is None:\n        raise ValueError(\"parse_timeout requires pool_size\")\n    return LiteParse(pool_size=pool_size, parse_timeout=parse_timeout)","typeGuard":null,"tryCatchPattern":"try:\n    parser = LiteParse(parse_timeout=timeout)\nexcept ValueError as e:\n    if \"parse_timeout requires pool_size\" in str(e):\n        parser = LiteParse(pool_size=2, parse_timeout=timeout)\n    else:\n        raise","preventionTips":["Always set pool_size and parse_timeout together as a pair","Keep the pool construction in one factory function so the invariant is checked in one place","Remember parse_timeout only works in pool mode; use your own wrapper deadline otherwise"],"tags":["configuration","validation","python"],"backgroundTag":"conflicting-config-options","analyzedSha":"22d2dd8cd7f7b9320102b57ddaf0e663ff7d15a8","analyzedAt":"2026-09-08T06:09:49.009Z","contentChangedAt":"2026-09-08T06:09:49.009Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}