openfree commited on
Commit
cf34627
·
verified ·
1 Parent(s): c7c7d93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -56
app.py CHANGED
@@ -9,15 +9,13 @@ from gradio_calendar import Calendar
9
 
10
  from papers import PaperList, get_df
11
 
12
- DESCRIPTION = "# [Papers Leaderboard](https://huggingface.co/papers)\nAn interactive interface to explore and filter the latest papers."
13
- FOOT_NOTE = """\
14
- Community: https://discord.gg/openfreeai
15
- """
16
 
17
  paper_list = PaperList(get_df())
18
 
19
  def update_paper_list() -> None:
20
- global paper_list # noqa: PLW0603
21
  paper_list = PaperList(get_df())
22
 
23
  scheduler = BackgroundScheduler()
@@ -39,18 +37,16 @@ def search(
39
  ) -> pd.DataFrame:
40
  return paper_list.search(start_date, end_date, search_title, search_abstract, max_num_to_retrieve)
41
 
42
-
43
- # 추가할 CSS (Gradio Blocks의 css 파라미터)
 
44
  css = """
45
- /* 전체 배경이나 컨테이너 스타일 */
46
  body {
47
  margin: 0;
48
  padding: 0;
49
  background: linear-gradient(135deg, #eef2ff 0%, #fdfdfd 100%);
50
  font-family: "Helvetica Neue", Arial, sans-serif;
51
  }
52
-
53
- /* Hero / Header 섹션 스타일 */
54
  #hero-section {
55
  background: linear-gradient(135deg, #3b82f6 0%, #9333ea 100%);
56
  padding: 2rem;
@@ -60,15 +56,8 @@ body {
60
  }
61
  #hero-section h1 {
62
  font-size: 2.2rem;
63
- font-weight: bold;
64
  margin-bottom: 0.5rem;
65
  }
66
- #hero-section p {
67
- font-size: 1.1rem;
68
- margin: 0;
69
- }
70
-
71
- /* 검색 섹션 스타일 */
72
  .search-container {
73
  background-color: #ffffffdd;
74
  backdrop-filter: blur(6px);
@@ -77,13 +66,6 @@ body {
77
  box-shadow: 0 3px 5px rgba(0,0,0,0.1);
78
  margin-bottom: 1rem;
79
  }
80
- .search-container h2 {
81
- margin-top: 0;
82
- font-size: 1.4rem;
83
- color: #374151;
84
- }
85
-
86
- /* 그리드나 카드 스타일 */
87
  .card {
88
  background-color: #fff;
89
  border-radius: 0.75rem;
@@ -91,21 +73,6 @@ body {
91
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
92
  margin-bottom: 1rem;
93
  }
94
- .card h3 {
95
- margin-top: 0;
96
- font-size: 1.2rem;
97
- color: #111827;
98
- }
99
-
100
- /* 푸터/하단부 스타일 */
101
- .footer {
102
- color: #6b7280;
103
- font-size: 0.9rem;
104
- text-align: center;
105
- margin-top: 2rem;
106
- }
107
-
108
- /* DataFrame 테이블 추가 스타일 */
109
  #table table {
110
  border-collapse: collapse;
111
  width: 100%;
@@ -120,22 +87,32 @@ body {
120
  background-color: #f3f4f6;
121
  font-weight: 600;
122
  }
 
 
 
 
 
 
123
  """
124
 
125
  with gr.Blocks(css=css) as demo:
126
- # 상단 Hero 섹션
127
- with gr.Box(elem_id="hero-section"):
128
- gr.Markdown(
129
- """
130
- # Papers Leaderboard
131
- Explore the latest papers and filter by date, title, or abstract keywords.
132
- """
133
- )
134
- gr.Markdown("#### [View on HuggingFace](https://huggingface.co/papers)")
135
-
136
- gr.Markdown("### Search & Filter", elem_classes="search-container")
 
137
 
 
138
  # 검색 영역
 
 
139
  with gr.Group():
140
  search_title = gr.Textbox(label="Search title")
141
  with gr.Row():
@@ -157,21 +134,22 @@ with gr.Blocks(css=css) as demo:
157
  start_date = Calendar(label="Start date", type="datetime", value="2023-05-05")
158
  end_date = Calendar(label="End date", type="datetime")
159
 
160
- # 결과 표시
 
 
161
  with gr.Group(elem_id="results-section"):
162
- with gr.Box(elem_id="stats-container", _class="card"):
163
  num_papers = gr.Textbox(
164
  label="Number of papers",
165
  value=update_num_papers(paper_list.df_raw),
166
  interactive=False
167
  )
168
- # 테이블
169
  df = gr.Dataframe(
170
  value=paper_list.df_prettified,
171
  datatype=paper_list.column_datatype,
172
  type="pandas",
173
  interactive=False,
174
- max_height=1000,
175
  elem_id="table",
176
  column_widths=["10%", "10%", "60%", "10%", "5%", "5%"],
177
  wrap=True,
@@ -179,7 +157,9 @@ with gr.Blocks(css=css) as demo:
179
 
180
  gr.Markdown(FOOT_NOTE, elem_classes="footer")
181
 
 
182
  # 이벤트 연결
 
183
  gr.on(
184
  triggers=[start_date.change, end_date.change, search_title.submit, search_abstract.submit],
185
  fn=search,
@@ -194,7 +174,6 @@ with gr.Blocks(css=css) as demo:
194
  api_name=False,
195
  )
196
 
197
- # 첫 로드 시 df 갱신 -> 논문 수 갱신
198
  demo.load(
199
  fn=update_df,
200
  outputs=df,
@@ -209,5 +188,4 @@ with gr.Blocks(css=css) as demo:
209
  )
210
 
211
  if __name__ == "__main__":
212
- # queue()로 비동기 처리, API 비공개
213
  demo.queue(api_open=False).launch(show_api=False)
 
9
 
10
  from papers import PaperList, get_df
11
 
12
+ DESCRIPTION = "# Papers Leaderboard\nExplore the latest papers and filter by date, title, or abstract keywords."
13
+ FOOT_NOTE = "Community: https://discord.gg/openfreeai"
 
 
14
 
15
  paper_list = PaperList(get_df())
16
 
17
  def update_paper_list() -> None:
18
+ global paper_list
19
  paper_list = PaperList(get_df())
20
 
21
  scheduler = BackgroundScheduler()
 
37
  ) -> pd.DataFrame:
38
  return paper_list.search(start_date, end_date, search_title, search_abstract, max_num_to_retrieve)
39
 
40
+ # ------------------------------------------------------------------
41
+ # CSS (Blocks의 css 파라미터로 전달)
42
+ # ------------------------------------------------------------------
43
  css = """
 
44
  body {
45
  margin: 0;
46
  padding: 0;
47
  background: linear-gradient(135deg, #eef2ff 0%, #fdfdfd 100%);
48
  font-family: "Helvetica Neue", Arial, sans-serif;
49
  }
 
 
50
  #hero-section {
51
  background: linear-gradient(135deg, #3b82f6 0%, #9333ea 100%);
52
  padding: 2rem;
 
56
  }
57
  #hero-section h1 {
58
  font-size: 2.2rem;
 
59
  margin-bottom: 0.5rem;
60
  }
 
 
 
 
 
 
61
  .search-container {
62
  background-color: #ffffffdd;
63
  backdrop-filter: blur(6px);
 
66
  box-shadow: 0 3px 5px rgba(0,0,0,0.1);
67
  margin-bottom: 1rem;
68
  }
 
 
 
 
 
 
 
69
  .card {
70
  background-color: #fff;
71
  border-radius: 0.75rem;
 
73
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
74
  margin-bottom: 1rem;
75
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  #table table {
77
  border-collapse: collapse;
78
  width: 100%;
 
87
  background-color: #f3f4f6;
88
  font-weight: 600;
89
  }
90
+ .footer {
91
+ color: #6b7280;
92
+ font-size: 0.9rem;
93
+ text-align: center;
94
+ margin-top: 2rem;
95
+ }
96
  """
97
 
98
  with gr.Blocks(css=css) as demo:
99
+ # --------------------------------------------------------------
100
+ # Hero 섹션: HTML 내부에 div#hero-section 사용
101
+ # --------------------------------------------------------------
102
+ gr.Markdown(
103
+ """
104
+ <div id="hero-section">
105
+ <h1>Papers Leaderboard</h1>
106
+ <p>Explore the latest papers and filter by date, title, or abstract keywords.</p>
107
+ </div>
108
+ """,
109
+ unsafe_allow_html=True
110
+ )
111
 
112
+ # --------------------------------------------------------------
113
  # 검색 영역
114
+ # --------------------------------------------------------------
115
+ gr.Markdown("### Search & Filter", elem_classes="search-container")
116
  with gr.Group():
117
  search_title = gr.Textbox(label="Search title")
118
  with gr.Row():
 
134
  start_date = Calendar(label="Start date", type="datetime", value="2023-05-05")
135
  end_date = Calendar(label="End date", type="datetime")
136
 
137
+ # --------------------------------------------------------------
138
+ # 결과 영역: 통계 + 테이블
139
+ # --------------------------------------------------------------
140
  with gr.Group(elem_id="results-section"):
141
+ with gr.Group(elem_classes="card"):
142
  num_papers = gr.Textbox(
143
  label="Number of papers",
144
  value=update_num_papers(paper_list.df_raw),
145
  interactive=False
146
  )
 
147
  df = gr.Dataframe(
148
  value=paper_list.df_prettified,
149
  datatype=paper_list.column_datatype,
150
  type="pandas",
151
  interactive=False,
152
+ max_height=800,
153
  elem_id="table",
154
  column_widths=["10%", "10%", "60%", "10%", "5%", "5%"],
155
  wrap=True,
 
157
 
158
  gr.Markdown(FOOT_NOTE, elem_classes="footer")
159
 
160
+ # --------------------------------------------------------------
161
  # 이벤트 연결
162
+ # --------------------------------------------------------------
163
  gr.on(
164
  triggers=[start_date.change, end_date.change, search_title.submit, search_abstract.submit],
165
  fn=search,
 
174
  api_name=False,
175
  )
176
 
 
177
  demo.load(
178
  fn=update_df,
179
  outputs=df,
 
188
  )
189
 
190
  if __name__ == "__main__":
 
191
  demo.queue(api_open=False).launch(show_api=False)