import gradio as gr from gradio_highlightedtextbox import HighlightedTextbox def convert_tagged_text_to_highlighted_text( tagged_text: str, tag_id: str, tag_open: str, tag_close: str ) -> list[tuple[str, str | None]]: return HighlightedTextbox.tagged_text_to_tuples( tagged_text, tag_id, tag_open, tag_close ) def convert_highlighted_text_to_tagged_text( highlighted_text: dict[str, str | list[tuple[str, str | None]]], tag_id: str, tag_open: str, tag_close: str, ) -> str: return HighlightedTextbox.tuples_to_tagged_text( highlighted_text["data"], tag_id, tag_open, tag_close ) initial_text = "It is not something to be ashamed of: it is no different from the personal fears and dislikes of other things that very many people have." with gr.Blocks() as demo: tag_id = gr.Textbox( "Potential issue", label="Tag ID", show_label=True, info="Insert a tag ID to use in the highlighted textbox.", ) tag_open = gr.Textbox( "", label="Tag open", show_label=True, info="Insert a tag to mark the beginning of a highlighted section.", ) tag_close = gr.Textbox( "", label="Tag close", show_label=True, info="Insert a tag to mark the end of a highlighted section.", ) with gr.Row(): tagged_t2h = gr.Textbox( initial_text, interactive=True, label="Input", show_label=True, info="Insert a text with ... tags to mark spans that will be highlighted.", ) high_t2h = HighlightedTextbox( convert_tagged_text_to_highlighted_text( tagged_t2h.value, tag_id.value, tag_open.value, tag_close.value ), interactive=True, label="Output", info="Highlighted textbox.", show_legend=True, show_label=True, legend_label="Legend:", show_legend_label=True, ) with gr.Row(): high_h2t = HighlightedTextbox( convert_tagged_text_to_highlighted_text( tagged_t2h.value, tag_id.value, tag_open.value, tag_close.value ), interactive=True, label="Input", info="The following text will be marked by spans according to its highlights.", show_legend=True, show_label=True, legend_label="Legend:", show_legend_label=True, ) tagged_h2t = gr.Textbox( initial_text, interactive=True, label="Output", show_label=True, ) # Functions tagged_t2h.change( fn=convert_tagged_text_to_highlighted_text, inputs=[tagged_t2h, tag_id, tag_open, tag_close], outputs=high_t2h, ) high_t2h.change( fn=lambda x: x["data"], inputs=high_t2h, outputs=high_h2t, ) high_h2t.change( fn=convert_highlighted_text_to_tagged_text, inputs=[high_h2t, tag_id, tag_open, tag_close], outputs=tagged_h2t, ) demo.launch()