Skip to content

feat: add progress_callback support for real-time conversion tracking#1

Merged
echavet merged 1 commit into
mainfrom
feat/progress-callback
May 18, 2026
Merged

feat: add progress_callback support for real-time conversion tracking#1
echavet merged 1 commit into
mainfrom
feat/progress-callback

Conversation

@echavet
Copy link
Copy Markdown
Owner

@echavet echavet commented May 18, 2026

Résumé

Ajoute un mécanisme progress_callback à MarkItDown, permettant aux applications appelantes de recevoir des mises à jour de progression en temps réel pendant la conversion de documents.

Problème résolu

Lors de la conversion de gros documents (ex: PDF de 213 pages), convert() bloque pendant plusieurs minutes sans aucun moyen de reporter la progression à l'utilisateur. Les applications serveur, les workers, et les UIs ne peuvent pas afficher de feedback significatif.

Conception

Deux nouveaux types publics dans _base_converter.py :

  • ConversionProgress — un @dataclass frozen portant current, total, unit (page/slide/chapter/sheet), et source (nom de la classe converter).
  • ProgressCallback — un Protocol @runtime_checkable que tout callable (ConversionProgress) -> None satisfait (duck typing).

Le callback est propagé via la chaîne **kwargs existante (convert()_convert()converter.convert()). Les convertisseurs qui ne supportent pas la progression ignorent simplement le kwarg.

Convertisseurs mis à jour

Converter Unit Loop
PdfConverter page per-page in pdfplumber loop
PptxConverter slide per-slide
EpubConverter chapter per-spine-item
XlsxConverter sheet per-sheet
XlsConverter sheet per-sheet

Compatibilité

  • ✅ Toutes les fonctionnalités existantes inchangées
  • ✅ Le callback est optionnel — l'omettre préserve le comportement actuel
  • ✅ Aucune nouvelle dépendance

Lien upstream

PR soumise à Microsoft : microsoft/markitdown#1851

Add ConversionProgress dataclass and ProgressCallback Protocol to enable
real-time progress reporting during document conversion.

Converters emit progress events for each logical unit processed:
- PdfConverter: per page
- PptxConverter: per slide
- EpubConverter: per chapter
- XlsxConverter / XlsConverter: per sheet

The callback is optional and passed via kwargs (progress_callback).
Converters that do not support progress simply ignore it.
Fully backward-compatible — no changes to existing API signatures.

Signed-off-by: Eric Chavet <echavet@gmail.com>
@echavet echavet merged commit eee8e63 into main May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant