feat: improve tool call durability on long calls

This commit is contained in:
Alex committed 2026-08-10 14:32:30 +01:00
1 parent 7137196212
commit ca345e3bf8
15 files changed
+1563 -96

No files matched your search

+42 -2
View File
@@ -94,6 +94,46 @@ def _exceeds_tabular_gate(file: Path) -> bool:
return _tabular_content_size(file) > max_bytes
def _delegate(
parser: BaseParser, file: Path, errors: str
) -> Union[str, List[str]]:
"""Run a lightweight fallback parser, normalizing its failures.
Anything the fallback raises is converted to ``DocumentParseError``,
which matters twice over. The Celery tasks that own these paths list
``DocumentParseError`` in ``dont_autoretry_for``, so a deterministic
content error now fails once instead of retrying four times (each retry
re-downloading the file from S3); and ``SimpleDirectoryReader.load_data``
catches only ``DocumentParseError``, so one poison spreadsheet is skipped
into ``failed_files`` instead of aborting an entire multi-file ingest.
This restores the symmetry with ``DoclingParser.parse_file``, whose own
failures are already wrapped — the delegation branch bypassed that.
Args:
parser: The lightweight parser to delegate to.
file: Path to the file being parsed.
errors: Decoding error policy, forwarded to the parser.
Returns:
The parsed text, or list of row strings.
Raises:
DocumentParseError: If the fallback parser fails for any reason.
"""
try:
return parser.parse_file(file, errors)
except DocumentParseError:
raise
except Exception as e:
logger.error(
f"Lightweight parse of {file.name} failed: {e}", exc_info=True
)
raise DocumentParseError(
f"Failed to parse {file.name}: the file could not be read."
) from e
def _capped_markup_copy(file: Path) -> Optional[str]:
"""Head-truncate an oversized markup file to a temp copy for docling.
@@ -413,7 +453,7 @@ class DoclingXLSXParser(DoclingParser):
)
from application.parser.file.tabular_parser import ExcelParser
return ExcelParser().parse_file(file, errors)
return _delegate(ExcelParser(), file, errors)
return super().parse_file(file, errors)
@@ -466,7 +506,7 @@ class DoclingCSVParser(DoclingParser):
)
from application.parser.file.tabular_parser import CSVParser
return CSVParser().parse_file(file, errors)
return _delegate(CSVParser(), file, errors)
return super().parse_file(file, errors)