|
|
import gradio as gr |
|
|
import arxiv |
|
|
from transformers import pipeline |
|
|
|
|
|
|
|
|
summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6") |
|
|
|
|
|
|
|
|
def search_and_summarize(topic, sort_by_option): |
|
|
try: |
|
|
num_papers = 3 |
|
|
sort_mapping = { |
|
|
"Relevance": arxiv.SortCriterion.Relevance, |
|
|
"Most Recent": arxiv.SortCriterion.SubmittedDate |
|
|
} |
|
|
|
|
|
search = arxiv.Search( |
|
|
query=topic, |
|
|
max_results=num_papers, |
|
|
sort_by=sort_mapping.get(sort_by_option, arxiv.SortCriterion.Relevance) |
|
|
) |
|
|
|
|
|
results = [] |
|
|
for result in search.results(): |
|
|
summary = summarizer(result.summary[:1000], max_length=120, min_length=30, do_sample=False)[0]['summary_text'] |
|
|
authors = ", ".join([author.name for author in result.authors]) |
|
|
published_date = result.published.date().strftime("%Y-%m-%d") |
|
|
result_block = ( |
|
|
f"π *{result.title}*\n\n" |
|
|
f"π©βπ¬ Authors: {authors}\n" |
|
|
f"π
Published: {published_date}\n\n" |
|
|
f"π Summary: {summary}\n\n" |
|
|
f"π [Read More]({result.pdf_url})" |
|
|
) |
|
|
results.append(result_block) |
|
|
|
|
|
return "\n\n---\n\n".join(results) if results else "No results found." |
|
|
|
|
|
except Exception as e: |
|
|
return f"β οΈ An error occurred: {e}" |
|
|
|
|
|
|
|
|
with gr.Blocks(theme=gr.themes.Base()) as demo: |
|
|
gr.Markdown("# π€ AI Research Assistant\nSummarize academic research papers using Hugging Face models + Arxiv!") |
|
|
|
|
|
with gr.Row(): |
|
|
topic = gr.Textbox(label="π Enter your research topic", placeholder="e.g. diffusion models in AI") |
|
|
sort_by = gr.Dropdown(choices=["Relevance", "Most Recent"], value="Relevance", label="Sort by") |
|
|
|
|
|
search_btn = gr.Button("Search π") |
|
|
output = gr.Markdown() |
|
|
|
|
|
|
|
|
def show_loading(): |
|
|
return "β³ Loading, please wait..." |
|
|
|
|
|
search_btn.click(fn=show_loading, inputs=[], outputs=output, queue=False) |
|
|
search_btn.click(fn=search_and_summarize, inputs=[topic, sort_by], outputs=output) |
|
|
|
|
|
demo.launch() |