zkcpku commited on
Commit
a52a4e5
·
1 Parent(s): 6294cc0

add numpyml-display

Browse files
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: 🏆
4
  colorFrom: indigo
5
  colorTo: purple
6
  sdk: gradio
7
- sdk_version: 4.13.0
8
  app_file: app.py
9
  pinned: false
10
  license: gpl-3.0
 
4
  colorFrom: indigo
5
  colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 3.35.2
8
  app_file: app.py
9
  pinned: false
10
  license: gpl-3.0
app.py ADDED
@@ -0,0 +1,342 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Usage:
3
+ python3 qa_browser.py --share
4
+ """
5
+
6
+ # import argparse
7
+ from collections import defaultdict
8
+ import re
9
+
10
+ import gradio as gr
11
+ import json
12
+
13
+ MAX_py_file_paths_depth = 3
14
+
15
+
16
+
17
+
18
+ py_file_paths = {}
19
+
20
+ comment = {"title2comment": {}, "path2comment": {}}
21
+ model_judgments_normal = {}
22
+ model_judgments_math = {}
23
+
24
+ def load_py_file_paths(data_path):
25
+ global py_file_paths
26
+ py_file_paths = []
27
+ with open(data_path, "r") as f:
28
+ py_file_paths = f.readlines()
29
+ py_file_paths = [json.loads(line) for line in py_file_paths]
30
+ py_file_paths = {line["path"]: line['content'] for line in py_file_paths}
31
+ return py_file_paths
32
+
33
+ def load_comment(data_path):
34
+ global comment
35
+ comment = {"title2comment": {}, "path2comment": {}}
36
+ title2comment = {}
37
+ path2comment = {}
38
+ with open(data_path, "r") as f:
39
+ data_f = f.readlines()
40
+ data_f = [json.loads(line) for line in data_f]
41
+ for line in data_f:
42
+ title2comment[line["title"]] = line
43
+ path2comment[line["class_link"]] = line
44
+ comment["title2comment"] = title2comment
45
+ comment["path2comment"] = path2comment
46
+ return comment
47
+
48
+ def display_question(question_selector,file_path_selector, request: gr.Request):
49
+ if question_selector == None:
50
+ return [gr.Dropdown.update(
51
+ value=file_path_selector
52
+ )] + [""] * 4
53
+
54
+ choice = comment['title2comment'][question_selector]['class_link'].split("#")[0]
55
+ lines = comment['title2comment'][question_selector]['class_link'].split("#")[1].replace("L","")
56
+
57
+ question = comment['title2comment'][question_selector]['comment']
58
+ code_path = choice
59
+ test_path = comment['title2comment'][question_selector]['test_file_path']
60
+
61
+ highlight_lines = [int(line) for line in lines.split("-")]
62
+ class_link = comment['title2comment'][question_selector]['class_link']
63
+ question_mds,code_mds = to_gradio_chat_mds(question, code_path, highlight_lines, class_link, test_path)
64
+ return [gr.Dropdown.update(
65
+ value=choice
66
+ )] + question_mds + code_mds
67
+
68
+ def display_answer(question_selector,file_path_selector, request: gr.Request):
69
+ choice = comment['title2comment'][question_selector]['class_link'].split("#")[0]
70
+ lines = comment['title2comment'][question_selector]['class_link'].split("#")[1].replace("L","")
71
+
72
+ question = comment['title2comment'][question_selector]['comment']
73
+ code_path = choice
74
+ test_path = comment['title2comment'][question_selector]['test_file_path']
75
+
76
+ highlight_lines = [int(line) for line in lines.split("-")]
77
+ class_link = comment['title2comment'][question_selector]['class_link']
78
+ if comment['title2comment'][question_selector]['class_link'].split("#")[0] != file_path_selector:
79
+ highlight_lines = None
80
+ class_link = None
81
+ test_path = None
82
+ code_path = file_path_selector
83
+ question_mds,code_mds = to_gradio_chat_mds(question, code_path, highlight_lines, class_link, test_path)
84
+ return code_mds
85
+
86
+ # def display_answer(
87
+ # file_path_selector, request: gr.Request
88
+ # ):
89
+ # # if comment['title2comment'][question_selector]['class_link'].split("#")[0] == file_path_selector:
90
+ # # choice = question_selector
91
+ # # else:
92
+ # # choice = None
93
+
94
+ # code_path = file_path_selector
95
+ # question = ""
96
+ # highlight_lines = None
97
+
98
+ # question_mds,code_mds = to_gradio_chat_mds(question, code_path, highlight_lines)
99
+
100
+ # return code_mds
101
+
102
+
103
+ newline_pattern1 = re.compile("\n\n(\d+\. )")
104
+ newline_pattern2 = re.compile("\n\n(- )")
105
+
106
+
107
+ def to_gradio_chat_mds(question, code_path, highlight_lines = None, class_link = None, test_path = None):
108
+ mds = [""] * 1 + [""] * 3
109
+ mds[0] = question
110
+ source_code = py_file_paths[code_path]
111
+ if test_path:
112
+ test_code = py_file_paths[test_path]
113
+ else:
114
+ test_code = [""]
115
+ # no highlight, highlight, no highlight
116
+ if not highlight_lines:
117
+ # mds[1] = "".join(source_code)
118
+ mds[1] = "#################################################################\n" + "# Please Check the `Full Code in the File` column\n" + "#################################################################\n"
119
+ # mds[3] = ""
120
+ else:
121
+ highlight_lines[0] -= 1
122
+ mds[1] = "#################################################################\n" + "# From " + class_link + "\n" + f"# From Line {highlight_lines[0]+1} to Line {highlight_lines[1]}\n" + "#################################################################\n"
123
+ mds[1] += "".join(source_code[highlight_lines[0]:highlight_lines[1]])
124
+ mds[2] = "".join(source_code)
125
+ mds[3] = "".join(test_code)
126
+
127
+ return mds[:1], mds[1:]
128
+
129
+
130
+ def build_pairwise_browser_tab():
131
+ file_path_list = list(py_file_paths.keys())
132
+ question_list = list(comment['title2comment'].keys())
133
+ num_py_file_paths = MAX_py_file_paths_depth
134
+
135
+ # Build question selector map
136
+ with gr.Row():
137
+ with gr.Column():
138
+ question_selector = gr.Dropdown(
139
+ choices=question_list,
140
+ label="Question",
141
+ container=False
142
+ )
143
+ # locate_button = gr.Button(
144
+ # text="Locate",
145
+ # label="Locate",
146
+ # type="default"
147
+ # )
148
+ with gr.Column():
149
+ file_path_selector = gr.Dropdown(
150
+ choices=file_path_list,
151
+ label="File Path",
152
+ container=False
153
+ )
154
+
155
+ question_mds = []
156
+ code_mds = []
157
+ with gr.Row():
158
+ with gr.Column():
159
+ question_mds.append(gr.Code(language="markdown"))
160
+ with gr.Column():
161
+ with gr.Tab("Infilling Code"):
162
+ # add code highlight
163
+ code_mds.append(gr.Code(language="python",elem_id="locate_code"))
164
+ with gr.Tab("Full Code in the File"):
165
+ code_mds.append(gr.Code(language="python"))
166
+ with gr.Tab("Test Code"):
167
+ code_mds.append(gr.Code(language="python"))
168
+
169
+ # Callbacks
170
+ question_selector.change(display_question, [question_selector, file_path_selector], [file_path_selector] + question_mds + code_mds)
171
+ file_path_selector.change(display_answer, [question_selector,file_path_selector], code_mds)
172
+
173
+ return (question_selector,)
174
+
175
+
176
+
177
+
178
+ code_highlight_css = """
179
+ #chatbot .hll { background-color: #ffffcc }
180
+ #chatbot .c { color: #408080; font-style: italic }
181
+ #chatbot .err { border: 1px solid #FF0000 }
182
+ #chatbot .k { color: #008000; font-weight: bold }
183
+ #chatbot .o { color: #666666 }
184
+ #chatbot .ch { color: #408080; font-style: italic }
185
+ #chatbot .cm { color: #408080; font-style: italic }
186
+ #chatbot .cp { color: #BC7A00 }
187
+ #chatbot .cpf { color: #408080; font-style: italic }
188
+ #chatbot .c1 { color: #408080; font-style: italic }
189
+ #chatbot .cs { color: #408080; font-style: italic }
190
+ #chatbot .gd { color: #A00000 }
191
+ #chatbot .ge { font-style: italic }
192
+ #chatbot .gr { color: #FF0000 }
193
+ #chatbot .gh { color: #000080; font-weight: bold }
194
+ #chatbot .gi { color: #00A000 }
195
+ #chatbot .go { color: #888888 }
196
+ #chatbot .gp { color: #000080; font-weight: bold }
197
+ #chatbot .gs { font-weight: bold }
198
+ #chatbot .gu { color: #800080; font-weight: bold }
199
+ #chatbot .gt { color: #0044DD }
200
+ #chatbot .kc { color: #008000; font-weight: bold }
201
+ #chatbot .kd { color: #008000; font-weight: bold }
202
+ #chatbot .kn { color: #008000; font-weight: bold }
203
+ #chatbot .kp { color: #008000 }
204
+ #chatbot .kr { color: #008000; font-weight: bold }
205
+ #chatbot .kt { color: #B00040 }
206
+ #chatbot .m { color: #666666 }
207
+ #chatbot .s { color: #BA2121 }
208
+ #chatbot .na { color: #7D9029 }
209
+ #chatbot .nb { color: #008000 }
210
+ #chatbot .nc { color: #0000FF; font-weight: bold }
211
+ #chatbot .no { color: #880000 }
212
+ #chatbot .nd { color: #AA22FF }
213
+ #chatbot .ni { color: #999999; font-weight: bold }
214
+ #chatbot .ne { color: #D2413A; font-weight: bold }
215
+ #chatbot .nf { color: #0000FF }
216
+ #chatbot .nl { color: #A0A000 }
217
+ #chatbot .nn { color: #0000FF; font-weight: bold }
218
+ #chatbot .nt { color: #008000; font-weight: bold }
219
+ #chatbot .nv { color: #19177C }
220
+ #chatbot .ow { color: #AA22FF; font-weight: bold }
221
+ #chatbot .w { color: #bbbbbb }
222
+ #chatbot .mb { color: #666666 }
223
+ #chatbot .mf { color: #666666 }
224
+ #chatbot .mh { color: #666666 }
225
+ #chatbot .mi { color: #666666 }
226
+ #chatbot .mo { color: #666666 }
227
+ #chatbot .sa { color: #BA2121 }
228
+ #chatbot .sb { color: #BA2121 }
229
+ #chatbot .sc { color: #BA2121 }
230
+ #chatbot .dl { color: #BA2121 }
231
+ #chatbot .sd { color: #BA2121; font-style: italic }
232
+ #chatbot .s2 { color: #BA2121 }
233
+ #chatbot .se { color: #BB6622; font-weight: bold }
234
+ #chatbot .sh { color: #BA2121 }
235
+ #chatbot .si { color: #BB6688; font-weight: bold }
236
+ #chatbot .sx { color: #008000 }
237
+ #chatbot .sr { color: #BB6688 }
238
+ #chatbot .s1 { color: #BA2121 }
239
+ #chatbot .ss { color: #19177C }
240
+ #chatbot .bp { color: #008000 }
241
+ #chatbot .fm { color: #0000FF }
242
+ #chatbot .vc { color: #19177C }
243
+ #chatbot .vg { color: #19177C }
244
+ #chatbot .vi { color: #19177C }
245
+ #chatbot .vm { color: #19177C }
246
+ #chatbot .il { color: #666666 }
247
+ """
248
+ # .highlight { background: #f8f8f8; }
249
+
250
+ table_css = """
251
+ table {
252
+ line-height: 0em
253
+ }
254
+ """
255
+ old_block_css = (
256
+ code_highlight_css
257
+ + """
258
+ pre {
259
+ white-space: pre-wrap; /* Since CSS 2.1 */
260
+ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
261
+ white-space: -pre-wrap; /* Opera 4-6 */
262
+ white-space: -o-pre-wrap; /* Opera 7 */
263
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
264
+ }
265
+ #notice_markdown th {
266
+ display: none;
267
+ }
268
+ #notice_markdown td {
269
+ padding-top: 8px;
270
+ padding-bottom: 8px;
271
+ }
272
+ #leaderboard_markdown td {
273
+ padding-top: 8px;
274
+ padding-bottom: 8px;
275
+ }
276
+ """
277
+ )
278
+ block_css = old_block_css + (
279
+ """
280
+ #locate_code {
281
+ background-color: #DEEBF7;
282
+ }
283
+ #user_question {
284
+ background-color: #E2F0D9;
285
+ }
286
+ #reference {
287
+ background-color: #FFF2CC;
288
+ }
289
+ #model_explanation {
290
+ background-color: #FBE5D6;
291
+ }
292
+ """
293
+ )
294
+
295
+
296
+ def load_demo():
297
+ dropdown_update = gr.Dropdown.update(value=list(comment['title2comment'].keys())[0])
298
+ return dropdown_update
299
+
300
+
301
+ def build_demo():
302
+ with gr.Blocks(
303
+ title="Class-level Repo Code Generation Benchmark (numpy-ml)",
304
+ theme=gr.themes.Base(text_size=gr.themes.sizes.text_lg),
305
+ css=block_css,
306
+ ) as demo:
307
+
308
+ (question_selector,) = build_pairwise_browser_tab()
309
+
310
+ demo.load(load_demo, [], [question_selector])
311
+
312
+ thanks_txt = gr.Markdown(
313
+ """
314
+ # Acknowledgement
315
+ This benchmark is based on the [numpy-ml](https://github.com/ddbourgin/numpy-ml) project.
316
+ """
317
+ )
318
+
319
+ return demo
320
+
321
+
322
+ # if __name__ == "__main__":
323
+ # parser = argparse.ArgumentParser()
324
+ # parser.add_argument("--host", type=str, default="0.0.0.0")
325
+ # parser.add_argument("--port", type=int)
326
+ # parser.add_argument("--share", action="store_true")
327
+ # parser.add_argument("--bench-name", type=str, default="mt_bench")
328
+ # args = parser.parse_args()
329
+ # print(args)
330
+
331
+ py_file_paths_path = "numpyml-display/all_py_content.jsonl"
332
+ comment_path = "numpyml-display/final_dataset.jsonl"
333
+
334
+ # Load py_file_paths
335
+ py_file_paths = load_py_file_paths(py_file_paths_path)
336
+
337
+ # Load answers
338
+ comment = load_comment(comment_path)
339
+
340
+ demo = build_demo()
341
+ # demo.queue(concurrency_count=10, status_update_rate=10, api_open=False).launch()
342
+ demo.launch()
numpyml-display/all_py_content.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
numpyml-display/final_dataset.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
raw.md ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ - numpy-ml
2
+ > https://github.com/ddbourgin/numpy-ml/tree/master