Spaces:
Runtime error
Runtime error
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()
|