| from functools import partial | |
| from tools import load_llm_model | |
| import gradio as gr | |
| from main import summarize | |
| import subprocess | |
| import os | |
| theme = gr.themes.Soft( | |
| primary_hue="purple", | |
| secondary_hue="cyan", | |
| neutral_hue="slate", | |
| font=[ | |
| gr.themes.GoogleFont('Syne'), | |
| gr.themes.GoogleFont('Poppins'), | |
| gr.themes.GoogleFont('Poppins'), | |
| gr.themes.GoogleFont('Poppins') | |
| ], | |
| ) | |
| def clear_everything(pdf_file, summary_output, info): | |
| pdf_file = None | |
| summary_output = None | |
| info = None | |
| return pdf_file, summary_output, info | |
| print("Loading LLM model...") | |
| llm = load_llm_model() | |
| print("Building app...") | |
| summarize_with_llm = partial(summarize, llm) | |
| with gr.Blocks(theme=theme, title="Hybrid Research Paper Summarizer", fill_height=True) as app: | |
| gr.HTML( | |
| value =''' | |
| <h1 style="text-align: center;">Hybrid PDF Summarizer</h1> | |
| <p style="text-align: center;">This app uses a hybrid approach to summarize PDF documents completely based on CPU.</p> | |
| <p style="text-align: center;">The app uses traditional methodologies such as TextRank, LSA, Luhn algorithms as well as quantized large language model (LLM) to generate summaries of the PDF document.</p> | |
| <p style="text-align: center;">The summarization process can take some time depending on the size of the PDF document and the complexity of the content.</p> | |
| ''') | |
| with gr.Column(): | |
| with gr.Row(): | |
| pdf_file = gr.File(label="Upload PDF", file_types=['.pdf']) | |
| with gr.Column(): | |
| with gr.Row(): | |
| summarize_btn = gr.Button(value="Summarize") | |
| clear_btn = gr.Button(value="Clear") | |
| info = gr.Textbox(label="Summarization Info", placeholder="Details regarding summarization will be shown here", interactive=False) | |
| summary_output = gr.TextArea(label="PDF Summary", placeholder="The summary will be displayed here", interactive=False, show_copy_button=True) | |
| summarize_btn.click( | |
| summarize_with_llm, | |
| inputs=pdf_file, | |
| outputs=[summary_output, info], | |
| concurrency_limit=5, | |
| scroll_to_output=True, | |
| api_name="summarize", | |
| show_progress="full", | |
| max_batch_size=10, | |
| ) | |
| clear_btn.click(clear_everything, inputs=[pdf_file, summary_output, info], outputs=[pdf_file, summary_output, info], show_api=False) | |
| print("Build Successful. Launching app...") | |
| app.queue(default_concurrency_limit=5).launch(show_api=True) | |