Spaces:
Running
Running
| import os | |
| import sys | |
| sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) | |
| import gradio as gr | |
| from gradio.themes import Soft | |
| from gradio.themes.utils import colors, fonts, sizes | |
| from services.summarizer import summarize_document | |
| colors.orange_red = colors.Color( | |
| name="orange_red", | |
| c50="#FFF0E5", c100="#FFE0CC", c200="#FFC299", c300="#FFA366", | |
| c400="#FF8533", c500="#FF4500", c600="#E63E00", c700="#CC3700", | |
| c800="#B33000", c900="#992900", c950="#802200", | |
| ) | |
| class OrangeRedTheme(Soft): | |
| def __init__(self): | |
| super().__init__( | |
| primary_hue=colors.orange_red, | |
| secondary_hue=colors.orange_red, | |
| neutral_hue=colors.slate, | |
| text_size=sizes.text_lg, | |
| font=(fonts.GoogleFont("Outfit"), "Arial", "sans-serif"), | |
| font_mono=(fonts.GoogleFont("IBM Plex Mono"), "monospace"), | |
| ) | |
| super().set( | |
| body_background_fill="linear-gradient(135deg, *primary_200, *primary_100)", | |
| button_primary_background_fill="linear-gradient(90deg, *secondary_500, *secondary_600)", | |
| button_primary_background_fill_hover="linear-gradient(90deg, *secondary_600, *secondary_700)", | |
| button_primary_text_color="white", | |
| block_border_width="3px", | |
| block_shadow="*shadow_drop_lg", | |
| ) | |
| orange_red_theme = OrangeRedTheme() | |
| css_style = """ | |
| #container { | |
| max-width: 1280px; /* wider layout */ | |
| margin: auto; | |
| } | |
| @media (min-width: 1600px) { | |
| #container { | |
| max-width: 1440px; | |
| } | |
| } | |
| #title h1 { | |
| font-size: 2.4em !important; | |
| } | |
| """ | |
| with gr.Blocks(title="AI Document Summarizer") as demo: | |
| with gr.Column(elem_id="container"): | |
| gr.Markdown("# **AI Document Summarizer**", elem_id="title") | |
| gr.Markdown( | |
| "Summarize **PDF, DOCX, TXT** documents using **Qwen2.5-7B-Instruct** via Hugging Face." | |
| ) | |
| with gr.Row(equal_height=True): | |
| # LEFT | |
| with gr.Column(): | |
| file_input = gr.File( | |
| label="Upload Document", | |
| file_types=[".pdf", ".docx", ".txt"], | |
| type="filepath", | |
| ) | |
| summarize_btn = gr.Button("Generate Summary", variant="primary") | |
| # RIGHT | |
| with gr.Column(): | |
| output = gr.Textbox( | |
| label="Summary", | |
| lines=18, | |
| placeholder="Summary will appear here...", | |
| ) | |
| gr.Markdown( | |
| "*Powered by Hugging Face Inference API · Free tier rate limits apply*" | |
| ) | |
| summarize_btn.click( | |
| fn=summarize_document, | |
| inputs=file_input, | |
| outputs=output, | |
| ) | |
| if __name__ == "__main__": | |
| demo.queue().launch( | |
| theme=orange_red_theme, | |
| css=css_style, | |
| show_error=True, | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| debug=True | |
| ) |