Spaces:
Configuration error
Configuration error
Kasper Dinkla
commited on
feat: Render DoclingDocument with npm docling-components in the example UI (#65)
Browse files- docling_serve/gradio_ui.py +34 -0
docling_serve/gradio_ui.py
CHANGED
@@ -12,6 +12,13 @@ from docling_serve.helper_functions import _to_list_of_strings
|
|
12 |
|
13 |
logger = logging.getLogger(__name__)
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
#################
|
16 |
# CSS and theme #
|
17 |
#################
|
@@ -49,6 +56,14 @@ css = """
|
|
49 |
#file_input_zone {
|
50 |
height: 140px;
|
51 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
"""
|
53 |
|
54 |
theme = gr.themes.Default(
|
@@ -110,6 +125,7 @@ def set_download_button_label(label_text: gr.State):
|
|
110 |
def clear_outputs():
|
111 |
markdown_content = ""
|
112 |
json_content = ""
|
|
|
113 |
html_content = ""
|
114 |
text_content = ""
|
115 |
doctags_content = ""
|
@@ -118,6 +134,7 @@ def clear_outputs():
|
|
118 |
markdown_content,
|
119 |
markdown_content,
|
120 |
json_content,
|
|
|
121 |
html_content,
|
122 |
html_content,
|
123 |
text_content,
|
@@ -260,6 +277,7 @@ def process_file(
|
|
260 |
def response_to_output(response, return_as_file):
|
261 |
markdown_content = ""
|
262 |
json_content = ""
|
|
|
263 |
html_content = ""
|
264 |
text_content = ""
|
265 |
doctags_content = ""
|
@@ -282,6 +300,12 @@ def response_to_output(response, return_as_file):
|
|
282 |
json_content = json.dumps(
|
283 |
full_content.get("document").get("json_content"), indent=2
|
284 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
html_content = full_content.get("document").get("html_content")
|
286 |
text_content = full_content.get("document").get("text_content")
|
287 |
doctags_content = full_content.get("document").get("doctags_content")
|
@@ -289,6 +313,7 @@ def response_to_output(response, return_as_file):
|
|
289 |
markdown_content,
|
290 |
markdown_content,
|
291 |
json_content,
|
|
|
292 |
html_content,
|
293 |
html_content,
|
294 |
text_content,
|
@@ -302,6 +327,7 @@ def response_to_output(response, return_as_file):
|
|
302 |
############
|
303 |
|
304 |
with gr.Blocks(
|
|
|
305 |
css=css,
|
306 |
theme=theme,
|
307 |
title="Docling Serve",
|
@@ -464,6 +490,8 @@ with gr.Blocks(
|
|
464 |
output_markdown_rendered = gr.Markdown(label="Response")
|
465 |
with gr.Tab("Docling (JSON)"):
|
466 |
output_json = gr.Code(language="json", wrap_lines=True, show_label=False)
|
|
|
|
|
467 |
with gr.Tab("HTML"):
|
468 |
output_html = gr.Code(language="html", wrap_lines=True, show_label=False)
|
469 |
with gr.Tab("HTML-Rendered"):
|
@@ -514,6 +542,7 @@ with gr.Blocks(
|
|
514 |
output_markdown,
|
515 |
output_markdown_rendered,
|
516 |
output_json,
|
|
|
517 |
output_html,
|
518 |
output_html_rendered,
|
519 |
output_text,
|
@@ -538,6 +567,7 @@ with gr.Blocks(
|
|
538 |
output_markdown,
|
539 |
output_markdown_rendered,
|
540 |
output_json,
|
|
|
541 |
output_html,
|
542 |
output_html_rendered,
|
543 |
output_text,
|
@@ -553,6 +583,7 @@ with gr.Blocks(
|
|
553 |
output_markdown,
|
554 |
output_markdown_rendered,
|
555 |
output_json,
|
|
|
556 |
output_html,
|
557 |
output_html_rendered,
|
558 |
output_text,
|
@@ -582,6 +613,7 @@ with gr.Blocks(
|
|
582 |
output_markdown,
|
583 |
output_markdown_rendered,
|
584 |
output_json,
|
|
|
585 |
output_html,
|
586 |
output_html_rendered,
|
587 |
output_text,
|
@@ -606,6 +638,7 @@ with gr.Blocks(
|
|
606 |
output_markdown,
|
607 |
output_markdown_rendered,
|
608 |
output_json,
|
|
|
609 |
output_html,
|
610 |
output_html_rendered,
|
611 |
output_text,
|
@@ -621,6 +654,7 @@ with gr.Blocks(
|
|
621 |
output_markdown,
|
622 |
output_markdown_rendered,
|
623 |
output_json,
|
|
|
624 |
output_html,
|
625 |
output_html_rendered,
|
626 |
output_text,
|
|
|
12 |
|
13 |
logger = logging.getLogger(__name__)
|
14 |
|
15 |
+
##############################
|
16 |
+
# Head JS for web components #
|
17 |
+
##############################
|
18 |
+
head = """
|
19 |
+
<script src="https://unpkg.com/@docling/[email protected]" type="module"></script>
|
20 |
+
"""
|
21 |
+
|
22 |
#################
|
23 |
# CSS and theme #
|
24 |
#################
|
|
|
56 |
#file_input_zone {
|
57 |
height: 140px;
|
58 |
}
|
59 |
+
|
60 |
+
docling-img::part(pages) {
|
61 |
+
gap: 1rem;
|
62 |
+
}
|
63 |
+
|
64 |
+
docling-img::part(page) {
|
65 |
+
box-shadow: 0 0.5rem 1rem 0 rgba(0, 0, 0, 0.2);
|
66 |
+
}
|
67 |
"""
|
68 |
|
69 |
theme = gr.themes.Default(
|
|
|
125 |
def clear_outputs():
|
126 |
markdown_content = ""
|
127 |
json_content = ""
|
128 |
+
json_rendered_content = ""
|
129 |
html_content = ""
|
130 |
text_content = ""
|
131 |
doctags_content = ""
|
|
|
134 |
markdown_content,
|
135 |
markdown_content,
|
136 |
json_content,
|
137 |
+
json_rendered_content,
|
138 |
html_content,
|
139 |
html_content,
|
140 |
text_content,
|
|
|
277 |
def response_to_output(response, return_as_file):
|
278 |
markdown_content = ""
|
279 |
json_content = ""
|
280 |
+
json_rendered_content = ""
|
281 |
html_content = ""
|
282 |
text_content = ""
|
283 |
doctags_content = ""
|
|
|
300 |
json_content = json.dumps(
|
301 |
full_content.get("document").get("json_content"), indent=2
|
302 |
)
|
303 |
+
# Embed document JSON and trigger load at client via an image.
|
304 |
+
json_rendered_content = f"""
|
305 |
+
<docling-img id="dclimg" pagenumbers tooltip="parsed"></docling-img>
|
306 |
+
<script id="dcljson" type="application/json" onload="document.getElementById('dclimg').src = JSON.parse(document.getElementById('dcljson').textContent);">{json_content}</script>
|
307 |
+
<img src onerror="document.getElementById('dclimg').src = JSON.parse(document.getElementById('dcljson').textContent);" />
|
308 |
+
"""
|
309 |
html_content = full_content.get("document").get("html_content")
|
310 |
text_content = full_content.get("document").get("text_content")
|
311 |
doctags_content = full_content.get("document").get("doctags_content")
|
|
|
313 |
markdown_content,
|
314 |
markdown_content,
|
315 |
json_content,
|
316 |
+
json_rendered_content,
|
317 |
html_content,
|
318 |
html_content,
|
319 |
text_content,
|
|
|
327 |
############
|
328 |
|
329 |
with gr.Blocks(
|
330 |
+
head=head,
|
331 |
css=css,
|
332 |
theme=theme,
|
333 |
title="Docling Serve",
|
|
|
490 |
output_markdown_rendered = gr.Markdown(label="Response")
|
491 |
with gr.Tab("Docling (JSON)"):
|
492 |
output_json = gr.Code(language="json", wrap_lines=True, show_label=False)
|
493 |
+
with gr.Tab("Docling-Rendered"):
|
494 |
+
output_json_rendered = gr.HTML()
|
495 |
with gr.Tab("HTML"):
|
496 |
output_html = gr.Code(language="html", wrap_lines=True, show_label=False)
|
497 |
with gr.Tab("HTML-Rendered"):
|
|
|
542 |
output_markdown,
|
543 |
output_markdown_rendered,
|
544 |
output_json,
|
545 |
+
output_json_rendered,
|
546 |
output_html,
|
547 |
output_html_rendered,
|
548 |
output_text,
|
|
|
567 |
output_markdown,
|
568 |
output_markdown_rendered,
|
569 |
output_json,
|
570 |
+
output_json_rendered,
|
571 |
output_html,
|
572 |
output_html_rendered,
|
573 |
output_text,
|
|
|
583 |
output_markdown,
|
584 |
output_markdown_rendered,
|
585 |
output_json,
|
586 |
+
output_json_rendered,
|
587 |
output_html,
|
588 |
output_html_rendered,
|
589 |
output_text,
|
|
|
613 |
output_markdown,
|
614 |
output_markdown_rendered,
|
615 |
output_json,
|
616 |
+
output_json_rendered,
|
617 |
output_html,
|
618 |
output_html_rendered,
|
619 |
output_text,
|
|
|
638 |
output_markdown,
|
639 |
output_markdown_rendered,
|
640 |
output_json,
|
641 |
+
output_json_rendered,
|
642 |
output_html,
|
643 |
output_html_rendered,
|
644 |
output_text,
|
|
|
654 |
output_markdown,
|
655 |
output_markdown_rendered,
|
656 |
output_json,
|
657 |
+
output_json_rendered,
|
658 |
output_html,
|
659 |
output_html_rendered,
|
660 |
output_text,
|