Devaharibabu commited on
Commit
5e7efef
·
verified ·
1 Parent(s): 3df2da9

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +89 -0
app.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ import arxiv
4
+ from transformers import pipeline
5
+ from sentence_transformers import SentenceTransformer, util
6
+
7
+ qa_pipeline = pipeline("question-answering", model="distilbert-base-cased-distilled-squad")
8
+ embedder = SentenceTransformer("all-MiniLM-L6-v2")
9
+
10
+ def fetch_arxiv_papers(query, max_results=5):
11
+ search = arxiv.Search(
12
+ query=query,
13
+ max_results=max_results,
14
+ sort_by=arxiv.SortCriterion.Relevance
15
+ )
16
+ return list(search.results())
17
+
18
+ def generate_answer(question, context):
19
+ return qa_pipeline(question=question, context=context)["answer"]
20
+
21
+ def evaluate_retrieval(query, context):
22
+ query_embed = embedder.encode(query, convert_to_tensor=True)
23
+ context_embed = embedder.encode(context, convert_to_tensor=True)
24
+ similarity = util.pytorch_cos_sim(query_embed, context_embed)
25
+ score = float(similarity[0][0])
26
+ if score > 0.7:
27
+ return "High"
28
+ elif score > 0.4:
29
+ return "Medium"
30
+ else:
31
+ return "Low"
32
+
33
+ def evaluate_summary(context, answer):
34
+ if answer.lower() in context.lower():
35
+ return "Good"
36
+ elif len(answer.split()) > 5:
37
+ return "Fair"
38
+ else:
39
+ return "Poor"
40
+
41
+ def rag_pipeline(user_query):
42
+ papers = fetch_arxiv_papers(user_query)
43
+ if not papers:
44
+ return "No relevant papers found.", "", ""
45
+
46
+ output_blocks = []
47
+ for i, paper in enumerate(papers, 1):
48
+ title = paper.title
49
+ abstract = paper.summary
50
+ link = paper.entry_id
51
+ answer = generate_answer(user_query, abstract)
52
+ retrieval_score = evaluate_retrieval(user_query, abstract)
53
+ summary_score = evaluate_summary(abstract, answer)
54
+
55
+ block = f"""
56
+ ### Paper {i}
57
+
58
+ Title: {title}
59
+
60
+ Abstract: {abstract}
61
+
62
+ Summarized Answer: {answer}
63
+
64
+ Link: {link}
65
+
66
+ Retrieval Accuracy: {retrieval_score}
67
+ Summary Quality: {summary_score}
68
+
69
+ ---"""
70
+ output_blocks.append(block)
71
+
72
+ final_output = "\n".join(output_blocks)
73
+ return final_output, "Multiple Papers Shown", "See Above"
74
+
75
+ # Gradio UI
76
+ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="green")) as demo:
77
+ gr.Markdown("## Scientific Paper Discovery — RAG-Based QA & Evaluation")
78
+ gr.Markdown("Enter your research topic below to explore papers from arXiv and get summarized insights.")
79
+
80
+ query = gr.Textbox(label="Enter a research topic")
81
+ run_btn = gr.Button("Search and Summarize")
82
+
83
+ output = gr.Markdown(label="Output")
84
+ retrieval_accuracy = gr.Textbox(label="Retrieval Accuracy")
85
+ summary_quality = gr.Textbox(label="Summary Quality")
86
+
87
+ run_btn.click(fn=rag_pipeline, inputs=query, outputs=[output, retrieval_accuracy, summary_quality])
88
+
89
+ demo.launch()