Kasper Dinkla commited on
Commit
45f20c2
·
unverified ·
1 Parent(s): 8029efc

feat: Render DoclingDocument with npm docling-components in the example UI (#65)

Browse files
Files changed (1) hide show
  1. 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,