From cd66dc168ab679f57c0f4a7947c03563ac376134 Mon Sep 17 00:00:00 2001 From: RussellLuo Date: Thu, 2 Jul 2026 17:48:52 +0800 Subject: [PATCH] fix(converter): preserve docx embedded images from markitdown Fixes #162. --- openkb/converter.py | 2 +- tests/test_converter.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/openkb/converter.py b/openkb/converter.py index fc3c96b5..a904ea22 100644 --- a/openkb/converter.py +++ b/openkb/converter.py @@ -230,7 +230,7 @@ def convert_document( markdown = convert_pdf_with_images(src, doc_name, images_dir) else: # Non-PDF, non-MD: use markitdown (docx, pptx, html, etc.) - mid = MarkItDown() + mid = MarkItDown(keep_data_uris=True) result = mid.convert(str(src)) markdown = result.text_content markdown = extract_base64_images(markdown, doc_name, images_dir) diff --git a/tests/test_converter.py b/tests/test_converter.py index e7c95d4d..bc9ed22c 100644 --- a/tests/test_converter.py +++ b/tests/test_converter.py @@ -130,6 +130,36 @@ def test_long_pdf_returns_is_long_doc(self, kb_dir, tmp_path): assert result.raw_path is not None +# --------------------------------------------------------------------------- +# convert_document — MarkItDown-backed formats +# --------------------------------------------------------------------------- + + +class TestConvertDocumentMarkItDown: + def test_docx_conversion_enables_keep_data_uris(self, kb_dir, tmp_path): + src = tmp_path / "report.docx" + src.write_bytes(b"fake docx") + + mock_result = MagicMock() + mock_result.text_content = "![](data:image/png;base64,abc123)" + + with ( + patch("openkb.converter.MarkItDown") as mock_markitdown, + patch("openkb.converter.extract_base64_images", return_value="converted markdown") as mock_extract, + ): + mock_markitdown.return_value.convert.return_value = mock_result + + result = convert_document(src, kb_dir) + + mock_markitdown.assert_called_once_with(keep_data_uris=True) + mock_markitdown.return_value.convert.assert_called_once_with(str(src)) + mock_extract.assert_called_once() + assert result.skipped is False + assert result.is_long_doc is False + assert result.source_path is not None + assert result.source_path.read_text(encoding="utf-8") == "converted markdown" + + # --------------------------------------------------------------------------- # _registry_path # ---------------------------------------------------------------------------