8.3 KiB
8.3 KiB
Changelog
All notable changes to Docling Studio will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.5.1] - 2026-04-30
Fixed
- Nginx upload body cap raised from 5 MB to 200 MB (
NGINX_MAX_BODY_SIZE, default200M); uploads larger than 5 MB no longer returned 413 before reaching the backend.
[0.5.0] - 2026-04-28
Added
- Reasoning-trace viewer: SQLite-backed graph built from
document_json, iteration-by-iteration overlay on the document outline (StructureViewer + GraphView), bidirectional PDF ↔ graph focus - Live reasoning runner via docling-agent (Ollama backend):
POST /api/documents/:id/reasoningreturns answer + iteration trace + convergence flag (gated byREASONING_ENABLED, off by default) LLMProviderport abstraction withOllamaProvideradapter — opens the door to alternate LLM backends once docling-agent supports them- Neo4j graph storage pipeline:
TreeWriter+ChunkWriteradapters, schema bootstrap, graph fetch endpoint,Maintainstep with cytoscape-based graph visualization - Architecture decision record (ADR-001): graph visualization library choice and 200-page endpoint cap
- Remote chunking: enabled in Docling Serve mode (previously local-only)
- Hexagonal architecture tests powered by
pytestarch(CI-enforced) - Centralized magic numbers for page dimensions, limits, and timeouts
- Paste image size/type limits (env vars
MAX_PASTE_IMAGE_SIZE_MB,PASTE_ALLOWED_IMAGE_TYPES); surfaced in/api/health
Changed
- Breaking —
RAG_*env vars renamed toREASONING_*:RAG_ENABLED→REASONING_ENABLED,RAG_MODEL_ID→REASONING_MODEL_ID. Health response fieldragAvailable→reasoningAvailable. NewLLM_PROVIDER_TYPEenv var (defaultollama) materializes the LLM-provider abstraction. - Breaking — reasoning endpoint renamed
/rag→/reasoning:POST /api/documents/:id/ragis nowPOST /api/documents/:id/reasoning. Aligns with frontendreasoningfeature naming. api/reasoning.pyrefactored to depend onReasoningRunnerPort; concretedocling-agentintegration moved toinfra/docling_agent_reasoning.py(clean architecture)- Frontend
reasoningfeature flag now readsreasoningAvailablefrom/api/health; sidebar entry hides when the backend is not wired (instead of failing with 503 on click) - Documented that
docker-compose.ymlships dev-only defaults (Neo4jchangemepassword, OpenSearchDISABLE_SECURITY_PLUGIN=true); operators must harden their own production deployments - Backend logs a loud warning at boot if Neo4j is wired (
NEO4J_URIset) with the defaultchangemepassword, so prod operators can't silently inherit it DocumentConverterport exposessupports_page_batching: boolso the analysis service no longer relies onisinstance(converter, ServeConverter)(LSP fix)VectorStoreport gains aping()method;IngestionService.ping()now goes through the port instead of reaching into_vector_store._client(encapsulation)- API path parameters renamed
{job_id}→{analysis_id}acrossapi/analyses.pyandapi/ingestion.pyto align the OpenAPI surface with the user-facing terminology (URL paths unchanged) - Centralised
localStoragekeys (docling-theme,docling-locale) intofrontend/src/shared/storage/keys.ts(STORAGE_KEYS) - Removed the dead
apiUrlref from the settings store and its orphansettings.apiUrli18n entries - Document-status string
"uploaded"extracted toDOCUMENT_STATUS_UPLOADEDinapi/schemas.py - PDF preview endpoint (
GET /api/documents/{id}/preview) now offloads the synchronous file read + rasterisation to a worker thread (asyncio.to_thread), unblocking the FastAPI event loop
Fixed
- Graph: collapse Docling
InlineGroupandPicturechildren to avoid empty leaf nodes (#197) - Neo4j: rewrite
fetch_graphusingCALLsubqueries for proper relationship traversal - CI: install
pytestarchin backend tests job (#177) - CI: ignore CVE-2026-40393 (Mesa) with expiry — Debian has no backport (#190)
- Reasoning: re-scroll PDF when re-clicking the active iteration
infra/docling_tree.py:101migratedisinstance(bbox, (list, tuple))to PEP 604 union (Ruff UP038)- Cross-feature integration test moved out of
features/history/intosrc/__tests__/integration/so feature folders stay self-contained - Tightened terminal
assert X is not Nonechecks in domain/repo/service tests to compare the value (e.g.isinstance(.., datetime)aftermark_running()/mark_completed())
[0.4.0] - 2026-04-13
Added
- Inline chunk text editing: double-click or edit button to modify chunk text, with save/cancel and "modified" badge
- Docker Compose dev stack (
docker-compose.dev.yml) with OpenSearch, Dashboards, hot-reload backend and Vite frontend - Soft-delete chunks: delete button with confirmation dialog, chunks hidden from UI but preserved in data
- Vector index metadata schema:
IndexedChunkdomain model, OpenSearch mapping builder, configurable embedding dimension VectorStoreport (Protocol):ensure_index,index_chunks,search_similar,get_chunks,delete_document- OpenSearch adapter (
OpenSearchStore): kNN vector search, full-text search, bulk indexing, document CRUD - Embedding microservice (
embedding-service/): sentence-transformers REST API with batch processing and Dockerfile EmbeddingServiceport andEmbeddingClientHTTP adapter for remote embedding generation- Orchestrated ingestion pipeline: Docling → chunking → embedding → OpenSearch indexing (idempotent)
- Ingestion REST API:
POST /api/ingestion/{jobId},DELETE /api/ingestion/{docId},GET /api/ingestion/status - Production docker-compose with OpenSearch and embedding service
- E2E Karate test for full ingestion workflow (PDF → chunks in OpenSearch)
- My Documents screen: search, filter (all/indexed/not indexed), sort (name/date), ingestion status badges
- Ingest button in Studio: one-click ingestion from completed analysis with progress feedback
Fixed
Changed
[0.3.1] - 2026-04-09
Added
- Batch conversion progress: segmented progress bar with ring indicator and per-batch visual feedback
- Inline mini progress bar in the top banner during analysis
- Informational notice in Prepare mode when chunking is unavailable (batch mode)
BATCH_PAGE_SIZEenvironment variable forwarded in Docker Compose
Fixed
- Batch progress reset to null on completion (progress_current/progress_total overwritten by stale in-memory job object)
- Regression test for batch progress preservation in
_run_analysis_innerflow - E2E assertion on final progress values in batch-progress feature
[0.3.0] - 2026-04-07
Added
- Chunking support: domain objects, persistence, API endpoints, and frontend Prepare mode
- Chunk-to-bbox hover highlighting in Prepare mode
- Page filtering and collapsible config in Prepare mode
- Feature flipping mechanism
- Reusable pagination composable and PaginationBar component
- Version display in sidebar, settings page, and health endpoint
Fixed
- Feature flag health check blocked by CORS
- Zombie jobs and unprotected JSON parse
- Upload error not displayed in DocumentUpload component
- Serve API contract: send
to_formatsas repeated form fields - Audit findings: security, robustness, dead code, domain-infra violation
Changed
- Refactored backend to hexagonal architecture for converter extensibility
- Added ServeConverter adapter for remote Docling Serve integration
- Moved
@vitest/mockerfrom dependencies to devDependencies
[0.2.0] - 2025-05-14
Added
- Multi-arch Docker image release pipeline (GitHub Actions)
- Docker image published to
ghcr.io/scub-france/Docling-Studio
[0.1.0] - 2025-01-01
Added
- Initial release of Docling Studio
- PDF upload and document management
- Configurable Docling pipeline (OCR, tables, code, formulas, images)
- Bounding box visualization with color-coded overlays
- Per-page results synchronized with PDF viewer
- Markdown and HTML export
- Analysis history with re-visit capability
- Dark/Light theme support
- French and English localization
- Docker and Docker Compose deployment
- CI/CD with GitHub Actions (tests + multi-arch Docker build)
- Health check endpoint (
/health) - SQLite-backed persistence