akhaliq HF staff commited on
Commit
4525f68
·
verified ·
1 Parent(s): 7dddfbb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -9
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
- self.papers = sorted(data, key=lambda x: x.get('paper', {}).get('upvotes', 0), reverse=True)
 
 
 
 
 
 
 
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
- url = f"https://huggingface.co/papers/{paper['paper'].get('id', '')}"
30
- authors = ', '.join([author.get('name', '') for author in paper['paper'].get('authors', [])])
 
31
  upvotes = paper.get('paper', {}).get('upvotes', 0)
32
  comments = paper.get('numComments', 0)
33
- published_time = datetime.fromisoformat(paper.get('publishedAt', datetime.now(timezone.utc).isoformat()).replace('Z', '+00:00'))
34
- time_ago = (datetime.now(timezone.utc) - published_time).days
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()