Update app.py
Browse files
app.py
CHANGED
@@ -11,36 +11,69 @@ class PaperManager:
|
|
11 |
self.papers = []
|
12 |
self.total_pages = 1
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
def fetch_papers(self):
|
15 |
try:
|
16 |
response = requests.get(f"{API_URL}?limit=50")
|
17 |
response.raise_for_status()
|
18 |
data = response.json()
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
self.total_pages = (len(self.papers) + self.papers_per_page - 1) // self.papers_per_page
|
21 |
self.current_page = 1
|
22 |
return True
|
23 |
except requests.RequestException as e:
|
24 |
print(f"Error fetching papers: {e}")
|
25 |
return False
|
|
|
|
|
|
|
26 |
|
27 |
def format_paper(self, paper):
|
28 |
title = paper.get('title', 'No title')
|
29 |
-
|
30 |
-
|
|
|
31 |
upvotes = paper.get('paper', {}).get('upvotes', 0)
|
32 |
comments = paper.get('numComments', 0)
|
33 |
-
published_time = datetime.fromisoformat(
|
34 |
-
|
35 |
-
|
|
|
|
|
36 |
return f"""
|
37 |
<div class="paper-item">
|
38 |
<h3><a href="{url}" target="_blank">{title}</a></h3>
|
39 |
<p class="paper-meta">
|
40 |
<span class="upvotes">{upvotes} ▲</span>
|
41 |
-
<span class="authors">{authors}</span>
|
42 |
-
<span class="time-ago">{time_ago}d</span>
|
43 |
<span class="comments">{comments}💬</span>
|
|
|
|
|
44 |
</p>
|
45 |
</div>
|
46 |
"""
|
@@ -66,6 +99,7 @@ class PaperManager:
|
|
66 |
return self.render_papers(), f"Page {self.current_page} of {self.total_pages}"
|
67 |
|
68 |
css = """
|
|
|
69 |
body {
|
70 |
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
71 |
background-color: #f0f2f5;
|
@@ -251,4 +285,4 @@ with demo:
|
|
251 |
prev_button.click(paper_manager.prev_page, outputs=[paper_list, page_info])
|
252 |
next_button.click(paper_manager.next_page, outputs=[paper_list, page_info])
|
253 |
|
254 |
-
demo.launch()
|
|
|
11 |
self.papers = []
|
12 |
self.total_pages = 1
|
13 |
|
14 |
+
def calculate_score(self, paper):
|
15 |
+
upvotes = paper.get('paper', {}).get('upvotes', 0)
|
16 |
+
comments = paper.get('numComments', 0)
|
17 |
+
published_at_str = paper.get('publishedAt', datetime.now(timezone.utc).isoformat())
|
18 |
+
|
19 |
+
try:
|
20 |
+
published_time = datetime.fromisoformat(
|
21 |
+
published_at_str.replace('Z', '+00:00')
|
22 |
+
)
|
23 |
+
except ValueError:
|
24 |
+
# Handle incorrect date format
|
25 |
+
published_time = datetime.now(timezone.utc)
|
26 |
+
|
27 |
+
age_days = (datetime.now(timezone.utc) - published_time).total_seconds() / 86400 # Convert seconds to days
|
28 |
+
age_days = max(age_days, 0) # Prevent negative ages
|
29 |
+
|
30 |
+
# Calculate score using a logarithmic scale to balance upvotes and comments
|
31 |
+
score = (upvotes + comments) / ((age_days + 2) ** 1.5)
|
32 |
+
return score
|
33 |
+
|
34 |
def fetch_papers(self):
|
35 |
try:
|
36 |
response = requests.get(f"{API_URL}?limit=50")
|
37 |
response.raise_for_status()
|
38 |
data = response.json()
|
39 |
+
|
40 |
+
# Calculate score for each paper
|
41 |
+
for paper in data:
|
42 |
+
paper['score'] = self.calculate_score(paper)
|
43 |
+
|
44 |
+
# Sort papers by score in descending order
|
45 |
+
self.papers = sorted(data, key=lambda x: x['score'], reverse=True)
|
46 |
+
|
47 |
self.total_pages = (len(self.papers) + self.papers_per_page - 1) // self.papers_per_page
|
48 |
self.current_page = 1
|
49 |
return True
|
50 |
except requests.RequestException as e:
|
51 |
print(f"Error fetching papers: {e}")
|
52 |
return False
|
53 |
+
except Exception as e:
|
54 |
+
print(f"Unexpected error: {e}")
|
55 |
+
return False
|
56 |
|
57 |
def format_paper(self, paper):
|
58 |
title = paper.get('title', 'No title')
|
59 |
+
paper_id = paper.get('paper', {}).get('id', '')
|
60 |
+
url = f"https://huggingface.co/papers/{paper_id}"
|
61 |
+
authors = ', '.join([author.get('name', '') for author in paper.get('paper', {}).get('authors', [])])
|
62 |
upvotes = paper.get('paper', {}).get('upvotes', 0)
|
63 |
comments = paper.get('numComments', 0)
|
64 |
+
published_time = datetime.fromisoformat(
|
65 |
+
paper.get('publishedAt', datetime.now(timezone.utc).isoformat()).replace('Z', '+00:00')
|
66 |
+
)
|
67 |
+
time_ago_days = (datetime.now(timezone.utc) - published_time).days
|
68 |
+
|
69 |
return f"""
|
70 |
<div class="paper-item">
|
71 |
<h3><a href="{url}" target="_blank">{title}</a></h3>
|
72 |
<p class="paper-meta">
|
73 |
<span class="upvotes">{upvotes} ▲</span>
|
|
|
|
|
74 |
<span class="comments">{comments}💬</span>
|
75 |
+
<span class="authors">{authors}</span>
|
76 |
+
<span class="time-ago">{time_ago_days}d</span>
|
77 |
</p>
|
78 |
</div>
|
79 |
"""
|
|
|
99 |
return self.render_papers(), f"Page {self.current_page} of {self.total_pages}"
|
100 |
|
101 |
css = """
|
102 |
+
/* Your existing CSS */
|
103 |
body {
|
104 |
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
|
105 |
background-color: #f0f2f5;
|
|
|
285 |
prev_button.click(paper_manager.prev_page, outputs=[paper_list, page_info])
|
286 |
next_button.click(paper_manager.next_page, outputs=[paper_list, page_info])
|
287 |
|
288 |
+
demo.launch()
|