import gradio as gr from functions import extract_text_from_pdf, format_content, split_into_snippets, build_prompts def process_inputs(pdf_file, model_choice, output_format, oauth_token: gr.OAuthToken | None = None): """Process PDF and generate summary""" if oauth_token is None: return "### Please log in to use this service" if not pdf_file: return "### Please upload a PDF file" try: text = extract_text_from_pdf(pdf_file.name) return f"### Processing successful with {model_choice}!" except Exception as e: return f"### Error: {str(e)}" # Define core interface components iface = gr.Interface( fn=process_inputs, inputs=[ gr.File( label="Upload PDF", file_types=[".pdf"] ), gr.Dropdown( choices=[ "GPT-3.5", "GPT-4", "Claude-3", "Mistral" ], label="Model", value="GPT-3.5" ), gr.Radio( choices=["TXT", "MD", "HTML"], label="Format", value="TXT" ) ], outputs=gr.Markdown( label="Output", value="### Upload your PDF to begin" ), flagging_mode="never", css=""" .gradio-container { max-width: 800px !important; margin: 0 auto !important; } .container { max-width: 800px !important; margin: 0 auto !important; padding: 2rem !important; } """ ) # Create main app with gr.Blocks(theme=gr.themes.Default()) as demo: gr.Markdown("## 🚀 PDF to LLM Summarizer") with gr.Row(): with gr.Column(): gr.Markdown("📄 Extract and summarize text from PDFs using state-of-the-art language models") with gr.Column(): gr.LoginButton(min_width=200) iface.render() gr.Markdown("Made with Gradio") if __name__ == "__main__": demo.launch()