import gradio as gr import pandas as pd from utils import get_textrank_summary def textrank_summarizer(text, level, max_tokens, verbose): summary, verbose_info = get_textrank_summary(text=text, level=level, token_count=max_tokens, verbose=verbose) return summary, verbose_info def option2_summarizer(text, max_tokens): return f"[Option2 Summary]\n{text[:max_tokens]}...", "" def option3_summarizer(text, max_tokens): return f"[Option3 Summary]\n{text[:max_tokens]}...", "" def summarize_text(text, method, level, max_tokens, verbose): if method == "TextRank": return textrank_summarizer(text, level, max_tokens, verbose) elif method == "Option2": return option2_summarizer(text, max_tokens) elif method == "Option3": return option3_summarizer(text, max_tokens) return "Invalid method selected.", "Invalid method selected." def process_file(file, method, level, max_tokens, verbose): try: if file.name.endswith(".csv"): df = pd.read_csv(file.name) elif file.name.endswith(".xlsx"): df = pd.read_excel(file.name) else: return "Unsupported file format.", "" summaries = [] logs = [] for column in df.columns: column_summary, verbose_log = summarize_text( " ".join(df[column].astype(str).tolist()), method, level, max_tokens, verbose ) summaries.append({"Column": column, "Summary": column_summary}) logs.append(f"Column: {column}\n{verbose_log}") return pd.DataFrame(summaries), "\n\n".join(logs) except Exception as e: return f"Error processing file: {e}", "" with gr.Blocks() as demo: with gr.Tabs(): with gr.TabItem("Text Summarization"): text_input = gr.TextArea(label="Text", placeholder="Enter your text here...", lines=5) summarization_method = gr.Radio([ "TextRank", "Option2", "Option3" ], value="TextRank", label="Summarization Method") level_selector = gr.Radio([ "sentence", "paragraph" ], value="sentence", label="Level", visible=True) max_tokens_slider = gr.Slider(0, 4096, value=100, label="Max Tokens") verbose_checkbox = gr.Checkbox(label="Verbose Mode", value=False) summarize_button = gr.Button("Summarize", interactive=False) output = gr.TextArea(label="Summary", interactive=False, lines=5, show_copy_button=True) verbose_output = gr.Markdown(label="Verbose Logs") def toggle_level_selector(method): return gr.update(visible=(method == "TextRank")) def toggle_summarize_button(method): return gr.update(interactive=(len(method) != 0)) def toggle_verbose_logs(verbose_mode): return gr.update(visible=verbose_mode) summarization_method.change(toggle_level_selector, inputs=summarization_method, outputs=level_selector) text_input.change(toggle_summarize_button, inputs=text_input, outputs=summarize_button) verbose_checkbox.change(toggle_verbose_logs, inputs=verbose_checkbox, outputs=verbose_output) summarize_button.click( summarize_text, inputs=[text_input, summarization_method, level_selector, max_tokens_slider, verbose_checkbox], outputs=[output, verbose_output], show_progress=True ) with gr.TabItem("File Processing"): file_input = gr.File(label="Upload File (xlsx, csv)") summarization_method_file = gr.Radio([ "TextRank", "Option2", "Option3" ], value="TextRank", label="Summarization Method") level_selector_file = gr.Radio([ "sentence", "paragraph" ], value="sentence", label="Level", visible=True) max_tokens_slider_file = gr.Slider(0, 4096, value=100, label="Max Tokens") verbose_checkbox_file = gr.Checkbox(label="Verbose Mode", value=False) load_button = gr.Button("Load and Process") file_output = gr.Dataframe() verbose_file_output = gr.TextArea(label="Verbose Logs", interactive=False, lines=10) def toggle_level_selector_file(method): return gr.update(visible=(method == "TextRank")) summarization_method_file.change(toggle_level_selector_file, inputs=summarization_method_file, outputs=level_selector_file) load_button.click( process_file, inputs=[file_input, summarization_method_file, level_selector_file, max_tokens_slider_file, verbose_checkbox_file], outputs=[file_output, verbose_file_output], show_progress=True ) demo.launch()