From e69ff90650bb29f28e38c9cc74105ac77b8c6030 Mon Sep 17 00:00:00 2001 From: pjmalandrino Date: Fri, 20 Mar 2026 08:59:20 +0100 Subject: [PATCH 1/2] Connect options with model configuration --- document-parser/api/analyses.py | 6 +- document-parser/api/schemas.py | 15 + document-parser/data/docling_studio.db | Bin 20480 -> 389120 bytes document-parser/domain/parsing.py | 50 +- document-parser/services/analysis_service.py | 15 +- document-parser/tests/test_api_endpoints.py | 54 ++ .../tests/test_pipeline_options.py | 564 ++++++++++++++++++ document-parser/tests/test_schemas.py | 41 ++ frontend/src/features/analysis/api.js | 8 +- frontend/src/features/analysis/api.test.js | 16 +- .../features/analysis/pipelineOptions.test.js | 226 +++++++ frontend/src/features/analysis/store.js | 4 +- frontend/src/features/analysis/store.test.js | 15 + frontend/src/pages/StudioPage.vue | 258 +++++--- frontend/src/shared/i18n.js | 66 +- 15 files changed, 1206 insertions(+), 132 deletions(-) create mode 100644 document-parser/tests/test_pipeline_options.py create mode 100644 frontend/src/features/analysis/pipelineOptions.test.js diff --git a/document-parser/api/analyses.py b/document-parser/api/analyses.py index 72c4712..b43309c 100644 --- a/document-parser/api/analyses.py +++ b/document-parser/api/analyses.py @@ -35,8 +35,12 @@ async def create_analysis(body: CreateAnalysisRequest): if not body.documentId or not body.documentId.strip(): raise HTTPException(status_code=400, detail="documentId is required") + pipeline_opts = None + if body.pipelineOptions: + pipeline_opts = body.pipelineOptions.model_dump() + try: - job = await analysis_service.create(body.documentId) + job = await analysis_service.create(body.documentId, pipeline_options=pipeline_opts) except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) diff --git a/document-parser/api/schemas.py b/document-parser/api/schemas.py index e9a981b..2030bfa 100644 --- a/document-parser/api/schemas.py +++ b/document-parser/api/schemas.py @@ -48,5 +48,20 @@ class AnalysisResponse(_CamelModel): created_at: str | datetime +class PipelineOptionsRequest(BaseModel): + """Docling pipeline configuration options.""" + do_ocr: bool = True + do_table_structure: bool = True + table_mode: str = "accurate" # "accurate" or "fast" + do_code_enrichment: bool = False + do_formula_enrichment: bool = False + do_picture_classification: bool = False + do_picture_description: bool = False + generate_picture_images: bool = False + generate_page_images: bool = False + images_scale: float = 1.0 + + class CreateAnalysisRequest(BaseModel): documentId: str # camelCase to match existing frontend contract + pipelineOptions: PipelineOptionsRequest | None = None diff --git a/document-parser/data/docling_studio.db b/document-parser/data/docling_studio.db index b3fd80f8a771620e6097cf8103280fb5d33f0057..c6ca6be1ca097683636f3805dbf97dbc4849ece8 100644 GIT binary patch literal 389120 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 z
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 B6Epw- diff --git a/document-parser/domain/parsing.py b/document-parser/domain/parsing.py index e7c5faf..8177cc2 100644 --- a/document-parser/domain/parsing.py +++ b/document-parser/domain/parsing.py @@ -106,11 +106,15 @@ def build_converter( do_ocr: bool = True, do_table_structure: bool = True, table_mode: str = "accurate", + do_code_enrichment: bool = False, + do_formula_enrichment: bool = False, + do_picture_classification: bool = False, + do_picture_description: bool = False, + generate_picture_images: bool = False, + generate_page_images: bool = False, + images_scale: float = 1.0, ) -> DocumentConverter: - """Build a DocumentConverter with the given pipeline options. - - Only exposes options that work out of the box (no extra model downloads). - """ + """Build a DocumentConverter with the given pipeline options.""" table_options = TableStructureOptions( do_cell_matching=True, mode=TableFormerMode.ACCURATE if table_mode == "accurate" else TableFormerMode.FAST, @@ -120,12 +124,13 @@ def build_converter( do_ocr=do_ocr, do_table_structure=do_table_structure, table_structure_options=table_options, - do_code_enrichment=False, - do_formula_enrichment=False, - do_picture_classification=False, - do_picture_description=False, - generate_page_images=False, - generate_picture_images=False, + do_code_enrichment=do_code_enrichment, + do_formula_enrichment=do_formula_enrichment, + do_picture_classification=do_picture_classification, + do_picture_description=do_picture_description, + generate_page_images=generate_page_images, + generate_picture_images=generate_picture_images, + images_scale=images_scale, ) return DocumentConverter( @@ -228,19 +233,42 @@ def convert_document( do_ocr: bool = True, do_table_structure: bool = True, table_mode: str = "accurate", + do_code_enrichment: bool = False, + do_formula_enrichment: bool = False, + do_picture_classification: bool = False, + do_picture_description: bool = False, + generate_picture_images: bool = False, + generate_page_images: bool = False, + images_scale: float = 1.0, ) -> ConversionResult: """Convert a document and return structured results. This is the main entry point for document parsing. Runs synchronously (caller should use asyncio.to_thread for non-blocking execution). """ - if do_ocr and do_table_structure and table_mode == "accurate": + # Use cached default converter only when all options match defaults + is_default = ( + do_ocr and do_table_structure and table_mode == "accurate" + and not do_code_enrichment and not do_formula_enrichment + and not do_picture_classification and not do_picture_description + and not generate_picture_images and not generate_page_images + and images_scale == 1.0 + ) + + if is_default: conv = get_default_converter() else: conv = build_converter( do_ocr=do_ocr, do_table_structure=do_table_structure, table_mode=table_mode, + do_code_enrichment=do_code_enrichment, + do_formula_enrichment=do_formula_enrichment, + do_picture_classification=do_picture_classification, + do_picture_description=do_picture_description, + generate_picture_images=generate_picture_images, + generate_page_images=generate_page_images, + images_scale=images_scale, ) with _converter_lock: diff --git a/document-parser/services/analysis_service.py b/document-parser/services/analysis_service.py index 12708d3..4f2612f 100644 --- a/document-parser/services/analysis_service.py +++ b/document-parser/services/analysis_service.py @@ -14,7 +14,7 @@ from persistence import analysis_repo, document_repo logger = logging.getLogger(__name__) -async def create(document_id: str) -> AnalysisJob: +async def create(document_id: str, *, pipeline_options: dict | None = None) -> AnalysisJob: """Create a new analysis job and launch background processing.""" doc = await document_repo.find_by_id(document_id) if not doc: @@ -25,7 +25,7 @@ async def create(document_id: str) -> AnalysisJob: await analysis_repo.insert(job) # Fire-and-forget background task - asyncio.create_task(_run_analysis(job.id, doc.storage_path, doc.filename)) + asyncio.create_task(_run_analysis(job.id, doc.storage_path, doc.filename, pipeline_options)) return job @@ -42,7 +42,9 @@ async def delete(job_id: str) -> bool: return await analysis_repo.delete(job_id) -async def _run_analysis(job_id: str, file_path: str, filename: str) -> None: +async def _run_analysis( + job_id: str, file_path: str, filename: str, pipeline_options: dict | None = None, +) -> None: """Background task: run Docling conversion and update job status.""" job = await analysis_repo.find_by_id(job_id) if not job: @@ -54,8 +56,13 @@ async def _run_analysis(job_id: str, file_path: str, filename: str) -> None: logger.info("Analysis started: %s (file: %s)", job_id, filename) try: + # Build kwargs from pipeline options + convert_kwargs = pipeline_options or {} + # Run blocking Docling conversion in a thread - result: ConversionResult = await asyncio.to_thread(convert_document, file_path) + result: ConversionResult = await asyncio.to_thread( + convert_document, file_path, **convert_kwargs, + ) pages_json = json.dumps([asdict(p) for p in result.pages]) diff --git a/document-parser/tests/test_api_endpoints.py b/document-parser/tests/test_api_endpoints.py index 1d5467d..20f2754 100644 --- a/document-parser/tests/test_api_endpoints.py +++ b/document-parser/tests/test_api_endpoints.py @@ -147,6 +147,60 @@ class TestAnalysisEndpoints: data = resp.json() assert data["id"] == "j1" assert data["documentId"] == "d1" + mock_create.assert_called_once_with("d1", pipeline_options=None) + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_create_analysis_with_pipeline_options(self, mock_create, client): + mock_create.return_value = AnalysisJob( + id="j2", document_id="d1", document_filename="test.pdf", + ) + + resp = client.post("/api/analyses", json={ + "documentId": "d1", + "pipelineOptions": { + "do_ocr": False, + "do_table_structure": True, + "table_mode": "fast", + "do_code_enrichment": True, + "do_formula_enrichment": False, + "do_picture_classification": False, + "do_picture_description": False, + "generate_picture_images": True, + "generate_page_images": False, + "images_scale": 2.0, + } + }) + assert resp.status_code == 200 + data = resp.json() + assert data["id"] == "j2" + + call_kwargs = mock_create.call_args + opts = call_kwargs.kwargs["pipeline_options"] + assert opts["do_ocr"] is False + assert opts["table_mode"] == "fast" + assert opts["do_code_enrichment"] is True + assert opts["generate_picture_images"] is True + assert opts["images_scale"] == 2.0 + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_create_analysis_with_partial_pipeline_options(self, mock_create, client): + """Pipeline options should use defaults for unspecified fields.""" + mock_create.return_value = AnalysisJob( + id="j3", document_id="d1", document_filename="test.pdf", + ) + + resp = client.post("/api/analyses", json={ + "documentId": "d1", + "pipelineOptions": {"do_ocr": False} + }) + assert resp.status_code == 200 + + opts = mock_create.call_args.kwargs["pipeline_options"] + assert opts["do_ocr"] is False + # Defaults + assert opts["do_table_structure"] is True + assert opts["table_mode"] == "accurate" + assert opts["do_code_enrichment"] is False @patch("services.analysis_service.create", new_callable=AsyncMock) def test_create_analysis_document_not_found(self, mock_create, client): diff --git a/document-parser/tests/test_pipeline_options.py b/document-parser/tests/test_pipeline_options.py new file mode 100644 index 0000000..6e619e8 --- /dev/null +++ b/document-parser/tests/test_pipeline_options.py @@ -0,0 +1,564 @@ +"""Tests for pipeline options — build_converter, convert_document routing, service forwarding.""" + +from __future__ import annotations + +import asyncio +from unittest.mock import AsyncMock, MagicMock, patch, call + +import pytest +from docling.datamodel.base_models import InputFormat +from docling.datamodel.pipeline_options import ( + PdfPipelineOptions, + TableFormerMode, +) + +from domain.parsing import build_converter, convert_document, get_default_converter + + +# --------------------------------------------------------------------------- +# build_converter — verifies Docling pipeline options are wired correctly +# --------------------------------------------------------------------------- + +class TestBuildConverter: + """Verify that build_converter produces a DocumentConverter with the right PdfPipelineOptions.""" + + def _get_pipeline_options(self, converter) -> PdfPipelineOptions: + """Extract PdfPipelineOptions from a DocumentConverter.""" + fmt_opt = converter.format_to_options[InputFormat.PDF] + return fmt_opt.pipeline_options + + def test_defaults(self): + conv = build_converter() + opts = self._get_pipeline_options(conv) + assert opts.do_ocr is True + assert opts.do_table_structure is True + assert opts.table_structure_options.mode == TableFormerMode.ACCURATE + assert opts.do_code_enrichment is False + assert opts.do_formula_enrichment is False + assert opts.do_picture_classification is False + assert opts.do_picture_description is False + assert opts.generate_page_images is False + assert opts.generate_picture_images is False + assert opts.images_scale == 1.0 + + def test_ocr_disabled(self): + conv = build_converter(do_ocr=False) + opts = self._get_pipeline_options(conv) + assert opts.do_ocr is False + + def test_table_mode_fast(self): + conv = build_converter(table_mode="fast") + opts = self._get_pipeline_options(conv) + assert opts.table_structure_options.mode == TableFormerMode.FAST + + def test_table_mode_accurate(self): + conv = build_converter(table_mode="accurate") + opts = self._get_pipeline_options(conv) + assert opts.table_structure_options.mode == TableFormerMode.ACCURATE + + def test_table_structure_disabled(self): + conv = build_converter(do_table_structure=False) + opts = self._get_pipeline_options(conv) + assert opts.do_table_structure is False + + def test_code_enrichment_enabled(self): + conv = build_converter(do_code_enrichment=True) + opts = self._get_pipeline_options(conv) + assert opts.do_code_enrichment is True + + def test_formula_enrichment_enabled(self): + conv = build_converter(do_formula_enrichment=True) + opts = self._get_pipeline_options(conv) + assert opts.do_formula_enrichment is True + + def test_picture_classification_enabled(self): + conv = build_converter(do_picture_classification=True) + opts = self._get_pipeline_options(conv) + assert opts.do_picture_classification is True + + def test_picture_description_enabled(self): + conv = build_converter(do_picture_description=True) + opts = self._get_pipeline_options(conv) + assert opts.do_picture_description is True + + def test_generate_picture_images(self): + conv = build_converter(generate_picture_images=True) + opts = self._get_pipeline_options(conv) + assert opts.generate_picture_images is True + + def test_generate_page_images(self): + conv = build_converter(generate_page_images=True) + opts = self._get_pipeline_options(conv) + assert opts.generate_page_images is True + + def test_images_scale(self): + conv = build_converter(images_scale=2.0) + opts = self._get_pipeline_options(conv) + assert opts.images_scale == 2.0 + + def test_all_options_combined(self): + conv = build_converter( + do_ocr=False, + do_table_structure=True, + table_mode="fast", + do_code_enrichment=True, + do_formula_enrichment=True, + do_picture_classification=True, + do_picture_description=True, + generate_picture_images=True, + generate_page_images=True, + images_scale=1.5, + ) + opts = self._get_pipeline_options(conv) + assert opts.do_ocr is False + assert opts.do_table_structure is True + assert opts.table_structure_options.mode == TableFormerMode.FAST + assert opts.do_code_enrichment is True + assert opts.do_formula_enrichment is True + assert opts.do_picture_classification is True + assert opts.do_picture_description is True + assert opts.generate_picture_images is True + assert opts.generate_page_images is True + assert opts.images_scale == 1.5 + + +# --------------------------------------------------------------------------- +# convert_document — default vs custom converter routing +# --------------------------------------------------------------------------- + +class TestConvertDocumentRouting: + """Verify convert_document uses default converter for default opts, custom otherwise.""" + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_default_converter_with_all_defaults(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_get_default.return_value = mock_conv + + convert_document("/tmp/test.pdf") + + mock_get_default.assert_called_once() + mock_build.assert_not_called() + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_custom_converter_when_ocr_disabled(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document("/tmp/test.pdf", do_ocr=False) + + mock_build.assert_called_once() + mock_get_default.assert_not_called() + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_custom_converter_when_table_mode_fast(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document("/tmp/test.pdf", table_mode="fast") + + mock_build.assert_called_once() + assert mock_build.call_args.kwargs["table_mode"] == "fast" + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_custom_converter_when_code_enrichment_on(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document("/tmp/test.pdf", do_code_enrichment=True) + + mock_build.assert_called_once() + assert mock_build.call_args.kwargs["do_code_enrichment"] is True + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_custom_converter_when_formula_enrichment_on(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document("/tmp/test.pdf", do_formula_enrichment=True) + + mock_build.assert_called_once() + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_custom_converter_when_picture_options_on(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document("/tmp/test.pdf", do_picture_classification=True) + + mock_build.assert_called_once() + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_custom_converter_when_generate_images_on(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document("/tmp/test.pdf", generate_picture_images=True) + + mock_build.assert_called_once() + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_uses_custom_converter_when_images_scale_changed(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document("/tmp/test.pdf", images_scale=2.0) + + mock_build.assert_called_once() + assert mock_build.call_args.kwargs["images_scale"] == 2.0 + + @patch("domain.parsing.get_default_converter") + @patch("domain.parsing.build_converter") + def test_forwards_all_options_to_build_converter(self, mock_build, mock_get_default): + mock_conv = MagicMock() + mock_result = MagicMock() + mock_result.document.pages = {} + mock_result.document.iterate_items.return_value = [] + mock_result.document.export_to_markdown.return_value = "" + mock_result.document.export_to_html.return_value = "" + mock_conv.convert.return_value = mock_result + mock_build.return_value = mock_conv + + convert_document( + "/tmp/test.pdf", + do_ocr=False, + do_table_structure=False, + table_mode="fast", + do_code_enrichment=True, + do_formula_enrichment=True, + do_picture_classification=True, + do_picture_description=True, + generate_picture_images=True, + generate_page_images=True, + images_scale=1.5, + ) + + mock_build.assert_called_once_with( + do_ocr=False, + do_table_structure=False, + table_mode="fast", + do_code_enrichment=True, + do_formula_enrichment=True, + do_picture_classification=True, + do_picture_description=True, + generate_picture_images=True, + generate_page_images=True, + images_scale=1.5, + ) + + +# --------------------------------------------------------------------------- +# Service layer — pipeline options forwarding +# --------------------------------------------------------------------------- + +class TestServiceForwardsPipelineOptions: + """Verify analysis_service.create and _run_analysis forward pipeline options.""" + + @pytest.fixture + def mock_doc(self): + from domain.models import Document + return Document(id="d1", filename="test.pdf", storage_path="/tmp/test.pdf") + + @pytest.fixture + def mock_job(self): + from domain.models import AnalysisJob + return AnalysisJob(id="j1", document_id="d1", document_filename="test.pdf") + + @patch("services.analysis_service.document_repo") + @patch("services.analysis_service.analysis_repo") + @patch("services.analysis_service._run_analysis") + @pytest.mark.asyncio + async def test_create_passes_pipeline_options_to_run( + self, mock_run, mock_analysis_repo, mock_doc_repo, mock_doc, + ): + mock_doc_repo.find_by_id = AsyncMock(return_value=mock_doc) + mock_analysis_repo.insert = AsyncMock() + # Patch _run_analysis as a coroutine that we can inspect + mock_run.return_value = None + + from services import analysis_service + + opts = {"do_ocr": False, "table_mode": "fast"} + + # We need to patch asyncio.create_task to capture the coroutine args + with patch("services.analysis_service.asyncio.create_task") as mock_task: + await analysis_service.create("d1", pipeline_options=opts) + + # create_task should have been called with _run_analysis(...) + mock_task.assert_called_once() + + @patch("services.analysis_service.document_repo") + @patch("services.analysis_service.analysis_repo") + @pytest.mark.asyncio + async def test_create_passes_none_when_no_options( + self, mock_analysis_repo, mock_doc_repo, mock_doc, + ): + mock_doc_repo.find_by_id = AsyncMock(return_value=mock_doc) + mock_analysis_repo.insert = AsyncMock() + + from services import analysis_service + + with patch("services.analysis_service.asyncio.create_task") as mock_task: + await analysis_service.create("d1") + mock_task.assert_called_once() + + @patch("services.analysis_service.analysis_repo") + @patch("services.analysis_service.document_repo") + @patch("services.analysis_service.convert_document") + @pytest.mark.asyncio + async def test_run_analysis_forwards_options_to_convert( + self, mock_convert, mock_doc_repo, mock_analysis_repo, mock_job, + ): + from domain.parsing import ConversionResult, PageDetail + + mock_analysis_repo.find_by_id = AsyncMock(return_value=mock_job) + mock_analysis_repo.update_status = AsyncMock() + mock_doc_repo.update_page_count = AsyncMock() + mock_convert.return_value = ConversionResult( + page_count=1, + content_markdown="# Test", + content_html="

Test

", + pages=[PageDetail(page_number=1, width=612.0, height=792.0)], + ) + + from services.analysis_service import _run_analysis + + opts = { + "do_ocr": False, + "table_mode": "fast", + "do_code_enrichment": True, + "do_formula_enrichment": False, + "do_picture_classification": False, + "do_picture_description": False, + "generate_picture_images": True, + "generate_page_images": False, + "images_scale": 2.0, + } + + await _run_analysis("j1", "/tmp/test.pdf", "test.pdf", opts) + + mock_convert.assert_called_once_with( + "/tmp/test.pdf", + do_ocr=False, + table_mode="fast", + do_code_enrichment=True, + do_formula_enrichment=False, + do_picture_classification=False, + do_picture_description=False, + generate_picture_images=True, + generate_page_images=False, + images_scale=2.0, + ) + + @patch("services.analysis_service.analysis_repo") + @patch("services.analysis_service.document_repo") + @patch("services.analysis_service.convert_document") + @pytest.mark.asyncio + async def test_run_analysis_uses_defaults_when_no_options( + self, mock_convert, mock_doc_repo, mock_analysis_repo, mock_job, + ): + from domain.parsing import ConversionResult, PageDetail + + mock_analysis_repo.find_by_id = AsyncMock(return_value=mock_job) + mock_analysis_repo.update_status = AsyncMock() + mock_doc_repo.update_page_count = AsyncMock() + mock_convert.return_value = ConversionResult( + page_count=1, + content_markdown="", + content_html="", + pages=[PageDetail(page_number=1, width=612.0, height=792.0)], + ) + + from services.analysis_service import _run_analysis + + await _run_analysis("j1", "/tmp/test.pdf", "test.pdf", None) + + # Called with file_path only (no kwargs spread from empty dict) + mock_convert.assert_called_once_with("/tmp/test.pdf") + + @patch("services.analysis_service.analysis_repo") + @patch("services.analysis_service.document_repo") + @patch("services.analysis_service.convert_document") + @pytest.mark.asyncio + async def test_run_analysis_marks_failed_on_error( + self, mock_convert, mock_doc_repo, mock_analysis_repo, mock_job, + ): + mock_analysis_repo.find_by_id = AsyncMock(return_value=mock_job) + mock_analysis_repo.update_status = AsyncMock() + mock_convert.side_effect = RuntimeError("Docling crashed") + + from services.analysis_service import _run_analysis + + await _run_analysis("j1", "/tmp/test.pdf", "test.pdf", {"do_ocr": False}) + + # Should have called update_status twice: RUNNING then FAILED + assert mock_analysis_repo.update_status.call_count == 2 + last_job = mock_analysis_repo.update_status.call_args_list[-1][0][0] + assert last_job.status.value == "FAILED" + assert "Docling crashed" in last_job.error_message + + +# --------------------------------------------------------------------------- +# API endpoint — full request/response with pipeline options +# --------------------------------------------------------------------------- + +class TestAnalysisEndpointPipelineOptions: + """Integration-level tests for the analysis creation endpoint with pipeline options.""" + + @pytest.fixture + def client(self): + from fastapi.testclient import TestClient + from main import app + return TestClient(app, raise_server_exceptions=False) + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_no_pipeline_options_sends_none(self, mock_create, client): + from domain.models import AnalysisJob + mock_create.return_value = AnalysisJob(id="j1", document_id="d1") + + client.post("/api/analyses", json={"documentId": "d1"}) + + mock_create.assert_called_once_with("d1", pipeline_options=None) + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_empty_pipeline_options_object_uses_defaults(self, mock_create, client): + from domain.models import AnalysisJob + mock_create.return_value = AnalysisJob(id="j1", document_id="d1") + + client.post("/api/analyses", json={ + "documentId": "d1", + "pipelineOptions": {}, + }) + + opts = mock_create.call_args.kwargs["pipeline_options"] + assert opts["do_ocr"] is True + assert opts["do_table_structure"] is True + assert opts["table_mode"] == "accurate" + assert opts["do_code_enrichment"] is False + assert opts["do_formula_enrichment"] is False + assert opts["images_scale"] == 1.0 + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_partial_pipeline_options_merges_with_defaults(self, mock_create, client): + from domain.models import AnalysisJob + mock_create.return_value = AnalysisJob(id="j1", document_id="d1") + + client.post("/api/analyses", json={ + "documentId": "d1", + "pipelineOptions": {"do_ocr": False, "images_scale": 1.5}, + }) + + opts = mock_create.call_args.kwargs["pipeline_options"] + assert opts["do_ocr"] is False + assert opts["images_scale"] == 1.5 + # All other fields should have defaults + assert opts["do_table_structure"] is True + assert opts["table_mode"] == "accurate" + assert opts["do_code_enrichment"] is False + assert opts["do_formula_enrichment"] is False + assert opts["do_picture_classification"] is False + assert opts["do_picture_description"] is False + assert opts["generate_picture_images"] is False + assert opts["generate_page_images"] is False + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_full_pipeline_options(self, mock_create, client): + from domain.models import AnalysisJob + mock_create.return_value = AnalysisJob(id="j1", document_id="d1") + + payload = { + "documentId": "d1", + "pipelineOptions": { + "do_ocr": False, + "do_table_structure": False, + "table_mode": "fast", + "do_code_enrichment": True, + "do_formula_enrichment": True, + "do_picture_classification": True, + "do_picture_description": True, + "generate_picture_images": True, + "generate_page_images": True, + "images_scale": 2.0, + }, + } + + resp = client.post("/api/analyses", json=payload) + assert resp.status_code == 200 + + opts = mock_create.call_args.kwargs["pipeline_options"] + assert opts == payload["pipelineOptions"] + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_invalid_pipeline_option_type_rejected(self, mock_create, client): + resp = client.post("/api/analyses", json={ + "documentId": "d1", + "pipelineOptions": {"do_ocr": "not-a-bool"}, + }) + assert resp.status_code == 422 + + @patch("services.analysis_service.create", new_callable=AsyncMock) + def test_unknown_pipeline_option_ignored(self, mock_create, client): + from domain.models import AnalysisJob + mock_create.return_value = AnalysisJob(id="j1", document_id="d1") + + resp = client.post("/api/analyses", json={ + "documentId": "d1", + "pipelineOptions": {"do_ocr": True, "unknown_field": True}, + }) + # Pydantic ignores extra fields by default + assert resp.status_code == 200 diff --git a/document-parser/tests/test_schemas.py b/document-parser/tests/test_schemas.py index dc6c8a8..1a79c6a 100644 --- a/document-parser/tests/test_schemas.py +++ b/document-parser/tests/test_schemas.py @@ -6,6 +6,7 @@ from api.schemas import ( AnalysisResponse, CreateAnalysisRequest, DocumentResponse, + PipelineOptionsRequest, _to_camel, ) @@ -79,7 +80,47 @@ class TestAnalysisResponse: assert resp.document_id == "d1" +class TestPipelineOptionsRequest: + def test_defaults(self): + opts = PipelineOptionsRequest() + assert opts.do_ocr is True + assert opts.do_table_structure is True + assert opts.table_mode == "accurate" + assert opts.do_code_enrichment is False + assert opts.do_formula_enrichment is False + assert opts.do_picture_classification is False + assert opts.do_picture_description is False + assert opts.generate_picture_images is False + assert opts.generate_page_images is False + assert opts.images_scale == 1.0 + + def test_custom_values(self): + opts = PipelineOptionsRequest( + do_ocr=False, table_mode="fast", do_code_enrichment=True, images_scale=2.0, + ) + assert opts.do_ocr is False + assert opts.table_mode == "fast" + assert opts.do_code_enrichment is True + assert opts.images_scale == 2.0 + + def test_model_dump(self): + opts = PipelineOptionsRequest(do_ocr=False) + data = opts.model_dump() + assert data["do_ocr"] is False + assert data["do_table_structure"] is True # default preserved + + class TestCreateAnalysisRequest: def test_parses_document_id(self): req = CreateAnalysisRequest(documentId="doc-42") assert req.documentId == "doc-42" + assert req.pipelineOptions is None + + def test_parses_with_pipeline_options(self): + req = CreateAnalysisRequest( + documentId="doc-42", + pipelineOptions=PipelineOptionsRequest(do_ocr=False, table_mode="fast"), + ) + assert req.documentId == "doc-42" + assert req.pipelineOptions.do_ocr is False + assert req.pipelineOptions.table_mode == "fast" diff --git a/frontend/src/features/analysis/api.js b/frontend/src/features/analysis/api.js index ee0209f..1b1ae93 100644 --- a/frontend/src/features/analysis/api.js +++ b/frontend/src/features/analysis/api.js @@ -1,9 +1,13 @@ import { apiFetch } from '../../shared/api/http.js' -export function createAnalysis(documentId) { +export function createAnalysis(documentId, pipelineOptions = null) { + const body = { documentId } + if (pipelineOptions) { + body.pipelineOptions = pipelineOptions + } return apiFetch('/api/analyses', { method: 'POST', - body: JSON.stringify({ documentId }) + body: JSON.stringify(body) }) } diff --git a/frontend/src/features/analysis/api.test.js b/frontend/src/features/analysis/api.test.js index 684b8d6..e18183f 100644 --- a/frontend/src/features/analysis/api.test.js +++ b/frontend/src/features/analysis/api.test.js @@ -12,7 +12,7 @@ describe('analysis API', () => { vi.clearAllMocks() }) - it('createAnalysis sends POST with documentId', async () => { + it('createAnalysis sends POST with documentId only', async () => { const job = { id: '1', documentId: 'doc-1', status: 'PENDING' } apiFetch.mockResolvedValue(job) @@ -25,6 +25,20 @@ describe('analysis API', () => { expect(result).toEqual(job) }) + it('createAnalysis sends POST with pipeline options', async () => { + const job = { id: '2', documentId: 'doc-1', status: 'PENDING' } + apiFetch.mockResolvedValue(job) + + const options = { do_ocr: false, table_mode: 'fast', do_code_enrichment: true } + const result = await createAnalysis('doc-1', options) + + expect(apiFetch).toHaveBeenCalledWith('/api/analyses', { + method: 'POST', + body: JSON.stringify({ documentId: 'doc-1', pipelineOptions: options }), + }) + expect(result).toEqual(job) + }) + it('fetchAnalyses calls GET /api/analyses', async () => { const jobs = [{ id: '1', status: 'COMPLETED' }] apiFetch.mockResolvedValue(jobs) diff --git a/frontend/src/features/analysis/pipelineOptions.test.js b/frontend/src/features/analysis/pipelineOptions.test.js new file mode 100644 index 0000000..2aacaa3 --- /dev/null +++ b/frontend/src/features/analysis/pipelineOptions.test.js @@ -0,0 +1,226 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' +import { setActivePinia, createPinia } from 'pinia' +import { createAnalysis } from './api.js' +import { useAnalysisStore } from './store.js' + +vi.mock('../../shared/api/http.js', () => ({ + apiFetch: vi.fn(), +})) + +vi.mock('./api.js', () => ({ + fetchAnalyses: vi.fn(), + fetchAnalysis: vi.fn(), + createAnalysis: vi.fn(), + deleteAnalysis: vi.fn(), +})) + +import { apiFetch } from '../../shared/api/http.js' +import * as api from './api.js' + +// --------------------------------------------------------------------------- +// API layer — body construction with pipeline options +// --------------------------------------------------------------------------- + +describe('createAnalysis — pipeline options body construction', () => { + // For these tests we need the REAL createAnalysis, not the mock. + // So we re-import the actual module. + let realCreateAnalysis + + beforeEach(() => { + vi.clearAllMocks() + // Reset the real module to get the unmocked version + vi.doUnmock('./api.js') + }) + + // We test the mock integration (store → api) separately below. + // Here we verify the raw apiFetch call shape. + + it('sends body without pipelineOptions when null', async () => { + const { apiFetch: realApiFetch } = await import('../../shared/api/http.js') + realApiFetch.mockResolvedValue({ id: '1', status: 'PENDING' }) + + const { createAnalysis: real } = await import('./api.js') + await real('doc-1', null) + + expect(realApiFetch).toHaveBeenCalledWith('/api/analyses', { + method: 'POST', + body: JSON.stringify({ documentId: 'doc-1' }), + }) + }) + + it('sends body without pipelineOptions when undefined', async () => { + const { apiFetch: realApiFetch } = await import('../../shared/api/http.js') + realApiFetch.mockResolvedValue({ id: '1', status: 'PENDING' }) + + const { createAnalysis: real } = await import('./api.js') + await real('doc-1') + + expect(realApiFetch).toHaveBeenCalledWith('/api/analyses', { + method: 'POST', + body: JSON.stringify({ documentId: 'doc-1' }), + }) + }) + + it('includes pipelineOptions in body when provided', async () => { + const { apiFetch: realApiFetch } = await import('../../shared/api/http.js') + realApiFetch.mockResolvedValue({ id: '1', status: 'PENDING' }) + + const opts = { + do_ocr: false, + do_table_structure: true, + table_mode: 'fast', + do_code_enrichment: true, + do_formula_enrichment: false, + do_picture_classification: false, + do_picture_description: false, + generate_picture_images: false, + generate_page_images: false, + images_scale: 1.0, + } + + const { createAnalysis: real } = await import('./api.js') + await real('doc-1', opts) + + const sentBody = JSON.parse(realApiFetch.mock.calls[0][1].body) + expect(sentBody.documentId).toBe('doc-1') + expect(sentBody.pipelineOptions).toEqual(opts) + }) + + it('includes only specified fields in partial options', async () => { + const { apiFetch: realApiFetch } = await import('../../shared/api/http.js') + realApiFetch.mockResolvedValue({ id: '1', status: 'PENDING' }) + + const opts = { do_ocr: false } + + const { createAnalysis: real } = await import('./api.js') + await real('doc-1', opts) + + const sentBody = JSON.parse(realApiFetch.mock.calls[0][1].body) + expect(sentBody.pipelineOptions).toEqual({ do_ocr: false }) + }) + + it('does not include pipelineOptions key when options is empty object treated as falsy', async () => { + const { apiFetch: realApiFetch } = await import('../../shared/api/http.js') + realApiFetch.mockResolvedValue({ id: '1', status: 'PENDING' }) + + // Empty object is truthy in JS, so it SHOULD be included + const { createAnalysis: real } = await import('./api.js') + await real('doc-1', {}) + + const sentBody = JSON.parse(realApiFetch.mock.calls[0][1].body) + expect(sentBody.pipelineOptions).toEqual({}) + }) +}) + + +// --------------------------------------------------------------------------- +// Store → API integration — pipeline options forwarding +// --------------------------------------------------------------------------- + +describe('useAnalysisStore — pipeline options forwarding', () => { + beforeEach(() => { + setActivePinia(createPinia()) + vi.clearAllMocks() + vi.useFakeTimers() + }) + + afterEach(() => { + vi.useRealTimers() + }) + + it('run() passes null when no options provided', async () => { + const job = { id: 'j1', status: 'PENDING', documentId: 'd1' } + api.createAnalysis.mockResolvedValue(job) + api.fetchAnalysis.mockResolvedValue({ ...job, status: 'COMPLETED' }) + + const store = useAnalysisStore() + await store.run('d1') + + expect(api.createAnalysis).toHaveBeenCalledWith('d1', null) + store.stopPolling() + }) + + it('run() forwards full pipeline options object', async () => { + const job = { id: 'j1', status: 'PENDING', documentId: 'd1' } + api.createAnalysis.mockResolvedValue(job) + api.fetchAnalysis.mockResolvedValue({ ...job, status: 'COMPLETED' }) + + const store = useAnalysisStore() + const opts = { + do_ocr: false, + do_table_structure: true, + table_mode: 'fast', + do_code_enrichment: true, + do_formula_enrichment: false, + do_picture_classification: false, + do_picture_description: true, + generate_picture_images: true, + generate_page_images: false, + images_scale: 2.0, + } + await store.run('d1', opts) + + expect(api.createAnalysis).toHaveBeenCalledWith('d1', opts) + store.stopPolling() + }) + + it('run() forwards partial pipeline options', async () => { + const job = { id: 'j1', status: 'PENDING', documentId: 'd1' } + api.createAnalysis.mockResolvedValue(job) + api.fetchAnalysis.mockResolvedValue({ ...job, status: 'COMPLETED' }) + + const store = useAnalysisStore() + const opts = { do_ocr: false } + await store.run('d1', opts) + + expect(api.createAnalysis).toHaveBeenCalledWith('d1', { do_ocr: false }) + store.stopPolling() + }) + + it('run() sets running state even with pipeline options', async () => { + const job = { id: 'j1', status: 'PENDING', documentId: 'd1' } + api.createAnalysis.mockResolvedValue(job) + + const store = useAnalysisStore() + const opts = { do_ocr: false, table_mode: 'fast' } + await store.run('d1', opts) + + expect(store.running).toBe(true) + expect(store.currentAnalysis).toEqual(job) + store.stopPolling() + }) + + it('run() with options still triggers polling', async () => { + const job = { id: 'j1', status: 'PENDING', documentId: 'd1' } + api.createAnalysis.mockResolvedValue(job) + api.fetchAnalysis.mockResolvedValue({ ...job, status: 'RUNNING' }) + + const store = useAnalysisStore() + await store.run('d1', { do_ocr: false }) + + // After 2s polling should fire + await vi.advanceTimersByTimeAsync(2000) + expect(api.fetchAnalysis).toHaveBeenCalledWith('j1') + + // Still running + expect(store.running).toBe(true) + + // Now complete + api.fetchAnalysis.mockResolvedValue({ ...job, status: 'COMPLETED' }) + await vi.advanceTimersByTimeAsync(2000) + expect(store.running).toBe(false) + + store.stopPolling() + }) + + it('run() with options handles API error gracefully', async () => { + api.createAnalysis.mockRejectedValue(new Error('Server error')) + vi.spyOn(console, 'error').mockImplementation(() => {}) + + const store = useAnalysisStore() + await expect(store.run('d1', { do_ocr: false })).rejects.toThrow('Server error') + + expect(store.running).toBe(false) + expect(store.currentAnalysis).toBeNull() + }) +}) diff --git a/frontend/src/features/analysis/store.js b/frontend/src/features/analysis/store.js index a99eec6..e01025e 100644 --- a/frontend/src/features/analysis/store.js +++ b/frontend/src/features/analysis/store.js @@ -25,10 +25,10 @@ export const useAnalysisStore = defineStore('analysis', () => { } } - async function run(documentId) { + async function run(documentId, pipelineOptions = null) { running.value = true try { - const analysis = await api.createAnalysis(documentId) + const analysis = await api.createAnalysis(documentId, pipelineOptions) currentAnalysis.value = analysis analyses.value.unshift(analysis) startPolling(analysis.id) diff --git a/frontend/src/features/analysis/store.test.js b/frontend/src/features/analysis/store.test.js index 30324fd..9ee8313 100644 --- a/frontend/src/features/analysis/store.test.js +++ b/frontend/src/features/analysis/store.test.js @@ -70,6 +70,7 @@ describe('useAnalysisStore', () => { expect(store.currentAnalysis).toEqual(job) expect(store.analyses[0]).toEqual(job) expect(store.running).toBe(true) + expect(api.createAnalysis).toHaveBeenCalledWith('d1', null) // Advance timer to trigger polling await vi.advanceTimersByTimeAsync(2000) @@ -80,6 +81,20 @@ describe('useAnalysisStore', () => { store.stopPolling() }) + it('run() forwards pipeline options to API', async () => { + const job = { id: 'j2', status: 'PENDING', documentId: 'd1' } + api.createAnalysis.mockResolvedValue(job) + api.fetchAnalysis.mockResolvedValue({ ...job, status: 'COMPLETED' }) + + const store = useAnalysisStore() + const options = { do_ocr: false, table_mode: 'fast' } + await store.run('d1', options) + + expect(api.createAnalysis).toHaveBeenCalledWith('d1', options) + + store.stopPolling() + }) + it('run() resets running on error', async () => { api.createAnalysis.mockRejectedValue(new Error('fail')) vi.spyOn(console, 'error').mockImplementation(() => {}) diff --git a/frontend/src/pages/StudioPage.vue b/frontend/src/pages/StudioPage.vue index 61c77b5..06945d4 100644 --- a/frontend/src/pages/StudioPage.vue +++ b/frontend/src/pages/StudioPage.vue @@ -139,7 +139,6 @@
Docling @@ -147,50 +146,109 @@
+
- - -
+ -
- - -
+
+ + ? +
-
- -
- +
+ + ? +
+ +
+ +
+
- - + + +
+ + ? +
+ +
+ + ? +
+
+ + +
+ + +
+ + ? +
+ +
+ + ? +
+ +
+ + ? +
+ +
+ + ? +
+ +
+ + +
@@ -225,12 +283,23 @@ const { t } = useI18n() const mode = ref('configurer') const currentPage = ref(1) -const pageRange = ref('') -const tableMode = ref('markdown') const visualMode = ref(false) const pdfImageRef = ref(null) const bboxOverlayRef = ref(null) +const pipelineOptions = reactive({ + do_ocr: true, + do_table_structure: true, + table_mode: 'accurate', + do_code_enrichment: false, + do_formula_enrichment: false, + do_picture_classification: false, + do_picture_description: false, + generate_picture_images: false, + generate_page_images: false, + images_scale: 1.0, +}) + const hasAnalysisResults = computed(() => { return analysisStore.currentAnalysis?.status === 'COMPLETED' && analysisStore.currentPages?.length > 0 }) @@ -244,18 +313,6 @@ function onPdfImageLoad() { nextTick(() => bboxOverlayRef.value?.draw()) } -const extractOptions = computed(() => [ - { id: 'images', label: t('config.images'), icon: 'image' }, - { id: 'header', label: t('config.header'), icon: 'header' }, - { id: 'footer', label: t('config.footer'), icon: 'footer' } -]) -const activeExtracts = reactive(new Set(['images'])) - -function toggleExtract(id) { - if (activeExtracts.has(id)) activeExtracts.delete(id) - else activeExtracts.add(id) -} - const selectedDoc = computed(() => { return documentStore.documents.find(d => d.id === documentStore.selectedId) }) @@ -274,7 +331,7 @@ function onPageInput(e) { async function runAnalysis() { if (!documentStore.selectedId) return - await analysisStore.run(documentStore.selectedId) + await analysisStore.run(documentStore.selectedId, { ...pipelineOptions }) } function addMore() { @@ -812,59 +869,78 @@ onMounted(() => { color: var(--text); } -.extract-options { - display: flex; - gap: 8px; - flex-wrap: wrap; -} - -.extract-btn { +/* Toggle rows */ +.config-toggle-row { display: flex; align-items: center; - gap: 6px; - padding: 8px 14px; + justify-content: space-between; + padding: 6px 0; +} + +.toggle-label { + display: flex; + align-items: center; + gap: 10px; + cursor: pointer; + user-select: none; +} + +.toggle-input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} + +.toggle-switch { + position: relative; + width: 36px; + height: 20px; background: var(--bg-elevated); border: 1px solid var(--border); - border-radius: var(--radius-sm); - color: var(--text-secondary); - font-size: 13px; - font-weight: 500; - cursor: pointer; + border-radius: 10px; + transition: all var(--transition); + flex-shrink: 0; +} + +.toggle-switch::after { + content: ''; + position: absolute; + top: 2px; + left: 2px; + width: 14px; + height: 14px; + background: var(--text-muted); + border-radius: 50%; transition: all var(--transition); } -.extract-btn:hover { - background: var(--bg-hover); - color: var(--text); -} - -.extract-btn.active { - background: var(--accent-muted); +.toggle-input:checked + .toggle-switch { + background: var(--accent); border-color: var(--accent); - color: var(--accent); } -.extract-icon { - width: 16px; - height: 16px; +.toggle-input:checked + .toggle-switch::after { + left: 18px; + background: white; } -.config-add-btn { - background: var(--bg-elevated); - border: 1px solid var(--border); - border-radius: var(--radius-sm); - padding: 8px 14px; - color: var(--text-secondary); +.toggle-text { font-size: 13px; - font-weight: 500; - cursor: pointer; - transition: all var(--transition); - align-self: flex-start; + color: var(--text); } -.config-add-btn:hover { - background: var(--bg-hover); - color: var(--text); +.config-sub-option { + padding-left: 46px; + display: flex; + flex-direction: column; + gap: 4px; +} + +.config-label-sm { + font-size: 11px; + font-weight: 500; + color: var(--text-muted); } .config-docs { diff --git a/frontend/src/shared/i18n.js b/frontend/src/shared/i18n.js index b0e7c56..399b42d 100644 --- a/frontend/src/shared/i18n.js +++ b/frontend/src/shared/i18n.js @@ -25,16 +25,29 @@ const messages = { // Config panel 'config.model': 'Modèle', - 'config.pages': 'Pages', - 'config.pagesPlaceholder': 'par ex. "1-4,8"', - 'config.extractTables': 'Extraire les tableaux', - 'config.markdownIntegrated': 'Markdown intégré', - 'config.extract': 'Extraire', - 'config.images': 'Images', - 'config.header': 'En-tête', - 'config.footer': 'Pied de page', - 'config.annotateImages': 'Annoter les images', - 'config.add': 'Ajouter +', + 'config.pipeline': 'Pipeline', + 'config.ocr': 'OCR', + 'config.ocrHint': 'Activer l\'OCR pour les documents scannés', + 'config.tableStructure': 'Extraction des tableaux', + 'config.tableStructureHint': 'Détecter et extraire la structure des tableaux', + 'config.tableMode': 'Mode tableaux', + 'config.tableModeAccurate': 'Précis', + 'config.tableModeFast': 'Rapide', + 'config.enrichment': 'Enrichissement', + 'config.codeEnrichment': 'Code', + 'config.codeEnrichmentHint': 'OCR spécialisé pour les blocs de code', + 'config.formulaEnrichment': 'Formules', + 'config.formulaEnrichmentHint': 'OCR des formules, retourne du LaTeX', + 'config.pictures': 'Images', + 'config.pictureClassification': 'Classification', + 'config.pictureClassificationHint': 'Classifier les types d\'images', + 'config.pictureDescription': 'Description', + 'config.pictureDescriptionHint': 'Générer des descriptions d\'images (VLM)', + 'config.generatePictureImages': 'Extraire les images', + 'config.generatePictureImagesHint': 'Extraire les images du document', + 'config.generatePageImages': 'Images de pages', + 'config.generatePageImagesHint': 'Générer une image par page via Docling', + 'config.imagesScale': 'Échelle images', 'config.documents': 'Documents', // Results @@ -86,16 +99,29 @@ const messages = { 'studio.visual': 'Visual', 'config.model': 'Model', - 'config.pages': 'Pages', - 'config.pagesPlaceholder': 'e.g. "1-4,8"', - 'config.extractTables': 'Extract tables', - 'config.markdownIntegrated': 'Inline Markdown', - 'config.extract': 'Extract', - 'config.images': 'Images', - 'config.header': 'Header', - 'config.footer': 'Footer', - 'config.annotateImages': 'Annotate images', - 'config.add': 'Add +', + 'config.pipeline': 'Pipeline', + 'config.ocr': 'OCR', + 'config.ocrHint': 'Enable OCR for scanned documents', + 'config.tableStructure': 'Table extraction', + 'config.tableStructureHint': 'Detect and extract table structure', + 'config.tableMode': 'Table mode', + 'config.tableModeAccurate': 'Accurate', + 'config.tableModeFast': 'Fast', + 'config.enrichment': 'Enrichment', + 'config.codeEnrichment': 'Code', + 'config.codeEnrichmentHint': 'Specialized OCR for code blocks', + 'config.formulaEnrichment': 'Formulas', + 'config.formulaEnrichmentHint': 'Formula OCR, returns LaTeX', + 'config.pictures': 'Pictures', + 'config.pictureClassification': 'Classification', + 'config.pictureClassificationHint': 'Classify picture types', + 'config.pictureDescription': 'Description', + 'config.pictureDescriptionHint': 'Generate picture descriptions (VLM)', + 'config.generatePictureImages': 'Extract pictures', + 'config.generatePictureImagesHint': 'Extract pictures from document', + 'config.generatePageImages': 'Page images', + 'config.generatePageImagesHint': 'Generate one image per page via Docling', + 'config.imagesScale': 'Images scale', 'config.documents': 'Documents', 'results.textResult': 'Text result', From d77fe2d989a0763456f35c098a9bc6c1eafeae7f Mon Sep 17 00:00:00 2001 From: pjmalandrino Date: Fri, 20 Mar 2026 09:23:26 +0100 Subject: [PATCH 2/2] Add configuration descriptions --- document-parser/data/docling_studio.db | Bin 389120 -> 622592 bytes frontend/src/pages/StudioPage.vue | 54 +++++++++++++++++++++---- frontend/src/shared/i18n.js | 36 ++++++++--------- 3 files changed, 64 insertions(+), 26 deletions(-) diff --git a/document-parser/data/docling_studio.db b/document-parser/data/docling_studio.db index c6ca6be1ca097683636f3805dbf97dbc4849ece8..bdb74be6b9519c4d7d444b8b3453f22b98057b20 100644 GIT binary patch delta 205595 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 Q#?KD;8;>L-_TQKP7Y#a<*8l(j delta 418 zcmZo@P-}P~K0%t5oq>TNexiasBm2gLh5Xz=9ux0n2ENO@mp2P49OqqpS(dTBNsEy) zG+LXPu_@R$G11f{$=o7Y*Vs7OK-a|F%tY5RH8oi`DcLm9+&IbD$iUpvCp=TvWCY-wO=l$@k%Y?^4IYhq|%qMMXxn51g~6f-om zFiuNMON%GcVj}}1GhG8?T_Xbp19K}=Q!5h-J#$k-OLJpw0|P4q11?Y~@ULg!zX2p5 zV6%k59RA7c^)-#unL{~=2?SoCMn=vm2F|LDjRly;*tkF@GxFa6n!H)i;2b{- e$gt`CnVc$30c`<{Z2?Se0nBXyEXx8|7XSeC&2+B- diff --git a/frontend/src/pages/StudioPage.vue b/frontend/src/pages/StudioPage.vue index 06945d4..cbcf370 100644 --- a/frontend/src/pages/StudioPage.vue +++ b/frontend/src/pages/StudioPage.vue @@ -156,7 +156,7 @@ {{ t('config.ocr') }} - ? + {{ t('config.ocrHint') }}?
@@ -165,7 +165,7 @@ {{ t('config.tableStructure') }} - ? + {{ t('config.tableStructureHint') }}?
@@ -187,7 +187,7 @@ {{ t('config.codeEnrichment') }} - ? + {{ t('config.codeEnrichmentHint') }}?
@@ -196,7 +196,7 @@ {{ t('config.formulaEnrichment') }} - ? + {{ t('config.formulaEnrichmentHint') }}?
@@ -210,7 +210,7 @@ {{ t('config.pictureClassification') }} - ? + {{ t('config.pictureClassificationHint') }}?
@@ -219,7 +219,7 @@ {{ t('config.pictureDescription') }} - ? + {{ t('config.pictureDescriptionHint') }}?
@@ -228,7 +228,7 @@ {{ t('config.generatePictureImages') }} - ? + {{ t('config.generatePictureImagesHint') }}?
@@ -237,7 +237,7 @@ {{ t('config.generatePageImages') }} - ? + {{ t('config.generatePageImagesHint') }}?
@@ -791,6 +791,7 @@ onMounted(() => { } .config-hint { + position: relative; display: inline-flex; align-items: center; justify-content: center; @@ -801,6 +802,43 @@ onMounted(() => { font-size: 10px; color: var(--text-muted); cursor: help; + flex-shrink: 0; +} + +.config-hint:hover { + border-color: var(--accent); + color: var(--accent); +} + +.config-tooltip { + display: none; + position: absolute; + bottom: calc(100% + 8px); + right: -8px; + width: 240px; + padding: 8px 10px; + background: var(--bg-primary); + border: 1px solid var(--border-light); + border-radius: 6px; + font-size: 11px; + line-height: 1.5; + color: var(--text-secondary); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + z-index: 100; + pointer-events: none; +} + +.config-tooltip::after { + content: ''; + position: absolute; + top: 100%; + right: 12px; + border: 5px solid transparent; + border-top-color: var(--border-light); +} + +.config-hint:hover .config-tooltip { + display: block; } .config-select-display { diff --git a/frontend/src/shared/i18n.js b/frontend/src/shared/i18n.js index 399b42d..3d96ce2 100644 --- a/frontend/src/shared/i18n.js +++ b/frontend/src/shared/i18n.js @@ -9,7 +9,7 @@ const messages = { // Studio — import 'studio.title': 'Intelligence des documents', - 'studio.subtitle': 'Importez un document PDF pour commencer l\'analyse avec Docling', + 'studio.subtitle': "Importez un document PDF pour commencer l'analyse avec Docling", 'studio.recentDocs': 'Documents récents', // Studio — workspace @@ -27,26 +27,26 @@ const messages = { 'config.model': 'Modèle', 'config.pipeline': 'Pipeline', 'config.ocr': 'OCR', - 'config.ocrHint': 'Activer l\'OCR pour les documents scannés', + 'config.ocrHint': "Applique la reconnaissance optique de caractères sur les pages scannées ou les images intégrées. Indispensable pour les PDF non-natifs.", 'config.tableStructure': 'Extraction des tableaux', - 'config.tableStructureHint': 'Détecter et extraire la structure des tableaux', + 'config.tableStructureHint': "Détecte les tableaux dans le document et reconstruit leur structure lignes/colonnes via le modèle TableFormer, avec correspondance des cellules.", 'config.tableMode': 'Mode tableaux', 'config.tableModeAccurate': 'Précis', 'config.tableModeFast': 'Rapide', 'config.enrichment': 'Enrichissement', 'config.codeEnrichment': 'Code', - 'config.codeEnrichmentHint': 'OCR spécialisé pour les blocs de code', + 'config.codeEnrichmentHint': "Active un modèle OCR spécialisé pour les blocs de code, préservant l'indentation et la syntaxe.", 'config.formulaEnrichment': 'Formules', - 'config.formulaEnrichmentHint': 'OCR des formules, retourne du LaTeX', + 'config.formulaEnrichmentHint': "Reconnaît les formules mathématiques et les convertit en LaTeX via un modèle dédié.", 'config.pictures': 'Images', 'config.pictureClassification': 'Classification', - 'config.pictureClassificationHint': 'Classifier les types d\'images', + 'config.pictureClassificationHint': "Classe chaque image détectée par type (graphique, photo, diagramme, logo…) via un modèle de classification.", 'config.pictureDescription': 'Description', - 'config.pictureDescriptionHint': 'Générer des descriptions d\'images (VLM)', + 'config.pictureDescriptionHint': "Génère une description textuelle de chaque image via un Vision Language Model (VLM). Utile pour l'accessibilité et l'indexation.", 'config.generatePictureImages': 'Extraire les images', - 'config.generatePictureImagesHint': 'Extraire les images du document', + 'config.generatePictureImagesHint': "Extrait les images détectées du document et les sauvegarde en tant que fichiers séparés. Nécessaire pour l'export d'images.", 'config.generatePageImages': 'Images de pages', - 'config.generatePageImagesHint': 'Générer une image par page via Docling', + 'config.generatePageImagesHint': "Rasterise chaque page du PDF en image. Utile pour la visualisation ou le post-traitement visuel.", 'config.imagesScale': 'Échelle images', 'config.documents': 'Documents', @@ -58,7 +58,7 @@ const messages = { 'results.noImages': 'Aucune image détectée dans ce document', 'results.noMarkdown': 'Pas de contenu markdown', 'results.runAnalysis': 'Lancez une analyse pour voir les résultats', - 'results.analysisFailed': 'L\'analyse a échoué', + 'results.analysisFailed': "L'analyse a échoué", 'results.page': 'Page', // Upload @@ -101,26 +101,26 @@ const messages = { 'config.model': 'Model', 'config.pipeline': 'Pipeline', 'config.ocr': 'OCR', - 'config.ocrHint': 'Enable OCR for scanned documents', + 'config.ocrHint': 'Applies Optical Character Recognition on scanned pages or embedded images. Essential for non-native PDFs.', 'config.tableStructure': 'Table extraction', - 'config.tableStructureHint': 'Detect and extract table structure', + 'config.tableStructureHint': 'Detects tables in the document and reconstructs their row/column structure using the TableFormer model, with cell matching.', 'config.tableMode': 'Table mode', 'config.tableModeAccurate': 'Accurate', 'config.tableModeFast': 'Fast', 'config.enrichment': 'Enrichment', 'config.codeEnrichment': 'Code', - 'config.codeEnrichmentHint': 'Specialized OCR for code blocks', + 'config.codeEnrichmentHint': 'Activates a specialized OCR model for code blocks, preserving indentation and syntax.', 'config.formulaEnrichment': 'Formulas', - 'config.formulaEnrichmentHint': 'Formula OCR, returns LaTeX', + 'config.formulaEnrichmentHint': 'Recognizes mathematical formulas and converts them to LaTeX using a dedicated model.', 'config.pictures': 'Pictures', 'config.pictureClassification': 'Classification', - 'config.pictureClassificationHint': 'Classify picture types', + 'config.pictureClassificationHint': 'Classifies each detected image by type (chart, photo, diagram, logo…) using a classification model.', 'config.pictureDescription': 'Description', - 'config.pictureDescriptionHint': 'Generate picture descriptions (VLM)', + 'config.pictureDescriptionHint': 'Generates a text description for each image using a Vision Language Model (VLM). Useful for accessibility and indexing.', 'config.generatePictureImages': 'Extract pictures', - 'config.generatePictureImagesHint': 'Extract pictures from document', + 'config.generatePictureImagesHint': 'Extracts detected images from the document and saves them as separate files. Required for image export.', 'config.generatePageImages': 'Page images', - 'config.generatePageImagesHint': 'Generate one image per page via Docling', + 'config.generatePageImagesHint': 'Rasterizes each PDF page as an image. Useful for visual preview or post-processing.', 'config.imagesScale': 'Images scale', 'config.documents': 'Documents',