hysts HF staff commited on
Commit
58113ed
1 Parent(s): 9d6a983
Files changed (3) hide show
  1. app.py +1 -29
  2. demo_list.py +63 -16
  3. style.css +24 -0
app.py CHANGED
@@ -7,35 +7,8 @@ import pandas as pd
7
 
8
  from demo_list import DemoList
9
 
10
- TITLE = "# List of hysts' Spaces"
11
-
12
  demo_list = DemoList()
13
 
14
- COLUMN_NAMES = [
15
- 'title',
16
- 'arxiv',
17
- 'likes',
18
- 'tags',
19
- 'last_modified',
20
- 'created',
21
- 'sdk',
22
- 'sdk_version',
23
- 'status',
24
- 'hardware',
25
- ]
26
- COLUMN_DATATYPES = [
27
- 'markdown',
28
- 'markdown',
29
- 'markdown',
30
- 'number',
31
- 'str',
32
- 'str',
33
- 'str',
34
- 'str',
35
- 'str',
36
- 'str',
37
- 'str',
38
- ]
39
  DEFAULT_COLUMNS = [
40
  'title',
41
  'arxiv',
@@ -52,9 +25,8 @@ def update_df() -> pd.DataFrame:
52
 
53
 
54
  with gr.Blocks(css='style.css') as demo:
55
- gr.Markdown(TITLE)
56
  df = gr.Dataframe(value=demo_list.df,
57
- datatype=COLUMN_DATATYPES,
58
  type='pandas')
59
  refresh_button = gr.Button('Refresh')
60
  refresh_button.click(fn=update_df, outputs=df)
 
7
 
8
  from demo_list import DemoList
9
 
 
 
10
  demo_list = DemoList()
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  DEFAULT_COLUMNS = [
13
  'title',
14
  'arxiv',
 
25
 
26
 
27
  with gr.Blocks(css='style.css') as demo:
 
28
  df = gr.Dataframe(value=demo_list.df,
29
+ datatype=demo_list.column_datatype,
30
  type='pandas')
31
  refresh_button = gr.Button('Refresh')
32
  refresh_button.click(fn=update_df, outputs=df)
demo_list.py CHANGED
@@ -1,5 +1,6 @@
1
  import copy
2
  import datetime
 
3
  import os
4
  import pathlib
5
 
@@ -14,6 +15,21 @@ HF_TOKEN = os.getenv('HF_TOKEN')
14
 
15
 
16
  class DemoList:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  def __init__(self):
18
  self.api = HfApi(token=HF_TOKEN)
19
  self.data = self.load_data()
@@ -32,7 +48,7 @@ class DemoList:
32
  card = space_info.cardData
33
  info = data[url]
34
  info['title'] = card['title']
35
- info['sdk'] = card['sdk']
36
  info['sdk_version'] = card.get('sdk_version', '')
37
  info['likes'] = space_info.likes
38
  last_modified = datetime.datetime.strptime(
@@ -41,8 +57,11 @@ class DemoList:
41
  created = datetime.datetime.strptime(info['created'],
42
  '%Y-%m-%d-%H-%M-%S')
43
  info['created'] = created.strftime('%Y/%m/%d %H:%M:%S')
44
- info['status'] = space_info.runtime['stage']
45
- info['hardware'] = space_info.runtime['hardware']['current']
 
 
 
46
  return data
47
 
48
  @staticmethod
@@ -67,6 +86,46 @@ class DemoList:
67
  tags = sorted(self.data[url].get('tags', []))
68
  return ', '.join(tags)
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  def to_df(self) -> pd.DataFrame:
71
  data = copy.deepcopy(self.data)
72
  for url in list(data):
@@ -75,17 +134,5 @@ class DemoList:
75
  info['arxiv'] = self.get_arxiv_link(url)
76
  info['github'] = self.get_github_link(url)
77
  info['tags'] = self.get_tag_list(url)
78
- df = pd.DataFrame(data).T.loc[:, [
79
- 'title',
80
- 'arxiv',
81
- 'github',
82
- 'likes',
83
- 'tags',
84
- 'last_modified',
85
- 'created',
86
- 'sdk',
87
- 'sdk_version',
88
- 'status',
89
- 'hardware',
90
- ]]
91
  return df
 
1
  import copy
2
  import datetime
3
+ import operator
4
  import os
5
  import pathlib
6
 
 
15
 
16
 
17
  class DemoList:
18
+ COLUMN_INFO = [
19
+ ['status', 'markdown'],
20
+ ['title', 'markdown'],
21
+ ['arxiv', 'markdown'],
22
+ ['github', 'markdown'],
23
+ ['likes', 'number'],
24
+ ['tags', 'str'],
25
+ ['last_modified', 'str'],
26
+ ['created', 'str'],
27
+ ['sdk', 'markdown'],
28
+ ['sdk_version', 'str'],
29
+ ['hardware', 'markdown'],
30
+ ['suggested_hardware', 'str'],
31
+ ]
32
+
33
  def __init__(self):
34
  self.api = HfApi(token=HF_TOKEN)
35
  self.data = self.load_data()
 
48
  card = space_info.cardData
49
  info = data[url]
50
  info['title'] = card['title']
51
+ info['sdk'] = self.colorize_sdk(card['sdk'])
52
  info['sdk_version'] = card.get('sdk_version', '')
53
  info['likes'] = space_info.likes
54
  last_modified = datetime.datetime.strptime(
 
57
  created = datetime.datetime.strptime(info['created'],
58
  '%Y-%m-%d-%H-%M-%S')
59
  info['created'] = created.strftime('%Y/%m/%d %H:%M:%S')
60
+ info['status'] = self.colorize_status(space_info.runtime['stage'])
61
+ info['suggested_hardware'] = card.get('suggested_hardware', '')
62
+ info['hardware'] = self.colorize_hardware(
63
+ space_info.runtime['hardware']['current'],
64
+ info['suggested_hardware'])
65
  return data
66
 
67
  @staticmethod
 
86
  tags = sorted(self.data[url].get('tags', []))
87
  return ', '.join(tags)
88
 
89
+ @property
90
+ def column_names(self):
91
+ return list(map(operator.itemgetter(0), self.COLUMN_INFO))
92
+
93
+ @property
94
+ def column_datatype(self):
95
+ return list(map(operator.itemgetter(1), self.COLUMN_INFO))
96
+
97
+ def colorize_status(self, status: str) -> str:
98
+ if status == 'RUNNING':
99
+ color = 'green'
100
+ elif status in ['STOPPED', 'PAUSED']:
101
+ color = 'yellow'
102
+ elif status in ['RUNTIME_ERROR', 'BUILD_ERROR']:
103
+ color = 'red'
104
+ else:
105
+ color = ''
106
+ return f'<div class="{color}">{status}</div>'
107
+
108
+ def colorize_sdk(self, sdk: str) -> str:
109
+ if sdk == 'gradio':
110
+ color = 'orange'
111
+ elif sdk == 'docker':
112
+ color = 'cyan'
113
+ else:
114
+ color = ''
115
+ return f'<div class="{color}">{sdk}</div>'
116
+
117
+ def colorize_hardware(self, hardware: str | None,
118
+ suggested_hardware: str) -> str:
119
+ if hardware is None:
120
+ return ''
121
+ if 't4' in hardware or 'a10g' in hardware or 'a100' in hardware:
122
+ color = 'red'
123
+ elif suggested_hardware and 'cpu' not in suggested_hardware:
124
+ color = 'blue'
125
+ else:
126
+ return hardware
127
+ return f'<div class="{color}">{hardware}</div>'
128
+
129
  def to_df(self) -> pd.DataFrame:
130
  data = copy.deepcopy(self.data)
131
  for url in list(data):
 
134
  info['arxiv'] = self.get_arxiv_link(url)
135
  info['github'] = self.get_github_link(url)
136
  info['tags'] = self.get_tag_list(url)
137
+ df = pd.DataFrame(data).T.loc[:, self.column_names]
 
 
 
 
 
 
 
 
 
 
 
 
138
  return df
style.css CHANGED
@@ -17,3 +17,27 @@ body a:hover {
17
  body a:hover {
18
  text-decoration: underline;
19
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  body a:hover {
18
  text-decoration: underline;
19
  }
20
+
21
+ div.green {
22
+ color: green;
23
+ }
24
+
25
+ div.yellow {
26
+ color: yellow;
27
+ }
28
+
29
+ div.red {
30
+ color: red;
31
+ }
32
+
33
+ div.blue {
34
+ color: blue;
35
+ }
36
+
37
+ div.orange {
38
+ color: orange;
39
+ }
40
+
41
+ div.cyan {
42
+ color: cyan;
43
+ }