from typing import List, Tuple import logging import gradio as gr try: from .services import identify_vague_statements except ImportError: from services import identify_vague_statements def create_editable_section(label, js_script, submit_fn, textbox): with gr.Accordion(f"Edit {label}", open=False) as acc: output_text = gr.HTML(label="Highlighted Text", elem_id=f"highlighted_textarea_{label}", value=textbox) output_text_suggestion = gr.Textbox(label="Suggestions", lines=5, interactive=True) with gr.Row(): submit_button = gr.Button("Run Editorial AI", size="small") accept_button = gr.Button("Apply Changes", size="small") edit_pairs = gr.State([]) def submit_callback(default_text): result = submit_fn(default_text) pairs = result["pairs"] edit_pairs.value = pairs return result["html"], result["suggestions"] def update_change(changes, original): for old_text, new_text in changes: modified = original.replace(old_text, new_text) return modified # pylint: disable=no-member submit_button.click( # fn=submit_fn, fn=submit_callback, inputs=textbox, outputs=[output_text, output_text_suggestion] ) # pylint: disable=no-member accept_button.click( fn=update_change, inputs=[edit_pairs, textbox], outputs=textbox ) # Add custom JavaScript to make the output area editable gr.HTML(f"") return acc def highlight_text(input_section: str) -> Tuple[str, List[str], List[str], List[str]]: try: # Escape special characters for HTML input_section = input_section.replace("&", "&").replace("<", "<").replace(">", ">") vague_statements, alternative_texts, reasons = identify_vague_statements(input_section) highlighted_text = input_section for vague_statement in vague_statements: vague_statement = vague_statement.replace("&", "&").replace("<", "<").replace(">", ">") highlighted_text = highlighted_text.replace(vague_statement, f'{vague_statement}') logging.info("Success: Highlight text") return highlighted_text, vague_statements, alternative_texts, reasons except Exception as e: logging.error("Error: %s", e) # return input_section, [], [], [] raise gr.Error("Error in Extracting vague statements..") def update_highlighted_text(default_text: str): gr.Info("Running Editorial AI..") # progress = gr.Progress() # progress(0, desc="Starting...") highlighted_text, vague_statements, alternative_texts, reasons = highlight_text(default_text) suggestions = "" pairs = [] # for vague, alternative, reason in progress.tqdm(zip(vague_statements, alternative_texts, reasons)): for vague, alternative, reason in zip(vague_statements, alternative_texts, reasons): pairs.append((vague, alternative)) suggestions += f"Vague Statement: {vague}\nReason: {reason}\nAlternative Text: {alternative}\n\n" html = f"""