Spaces:
Running
Running
import gradio as gr | |
import google.generativeai as genai | |
from markitdown import MarkItDown | |
from typing import Union | |
import os | |
def extract_content(input_source: str) -> str: | |
"""Extract text content using MarkItDown""" | |
try: | |
md = MarkItDown() | |
result = md.convert(input_source) | |
return result.text_content | |
except Exception as e: | |
raise ValueError(f"Error processing {input_source}: {str(e)}") | |
def summarize_content(content: str, api_key: str) -> str: | |
"""Summarize text using Gemini Flash""" | |
genai.configure(api_key=os.getenv('GEMINI_KEY')) | |
model = genai.GenerativeModel('gemini-1.5-flash') | |
response = model.generate_content( | |
f"Create a structured summary with key points using bullet points. " | |
f"Focus on main ideas and important details:\n\n{content}" | |
) | |
return response.text | |
def process_input(api_key: str, url: str = None, file: str = None) -> str: | |
"""Handle both URL and file inputs""" | |
try: | |
if url: | |
text = extract_content(url) | |
elif file: | |
text = extract_content(file) | |
else: | |
return "β οΈ Please provide either a URL or upload a file" | |
if not text.strip(): | |
return "β Error: No text could be extracted from the provided input" | |
return summarize_content(text, api_key) | |
except Exception as e: | |
return f"β Processing Error: {str(e)}" | |
# Gradio interface | |
with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
gr.Markdown("""# π Smart Content Summarizer | |
**Powered by Gemini Flash & Microsoft Markitdown**""") | |
with gr.Row(): | |
with gr.Tab("π URL Input"): | |
url_input = gr.Textbox(label="Enter URL", placeholder="https://example.com/article") | |
url_submit = gr.Button("Summarize URL", variant="primary") | |
with gr.Tab("π File Upload"): | |
file_input = gr.File(label="Upload Document (PDF, DOCX, TXT)", | |
file_types=[".pdf", ".docx", ".txt"]) | |
file_submit = gr.Button("Summarize File", variant="primary") | |
api_key_input = gr.Textbox(label="Google API Key", type="password", | |
placeholder="Enter your API key here") | |
output = gr.Markdown() | |
url_submit.click( | |
fn=process_input, | |
inputs=[api_key_input, url_input, None], | |
outputs=output | |
) | |
file_submit.click( | |
fn=process_input, | |
inputs=[api_key_input, None, file_input], | |
outputs=output | |
) | |
if __name__ == "__main__": | |
demo.launch() |