Spaces:
Sleeping
Sleeping
Merge branch 'main' of https://huggingface.co/spaces/dongsheng/docker_test
Browse files- app.py +3 -12
- src/containerized_eval.py +3 -0
- src/eval_go.py +24 -14
app.py
CHANGED
@@ -71,9 +71,7 @@ def evaluate_single_case(input_data):
|
|
71 |
code = input_data.get('prompt') + comp + '\n' + input_data.get('tests')
|
72 |
result = evaluate_code(code, language)
|
73 |
if result["status"] == "OK":
|
74 |
-
return
|
75 |
-
print(f'Code failed to compile: \n{code}')
|
76 |
-
result["compiled_code"] = code
|
77 |
results.append(result)
|
78 |
|
79 |
return results[0]
|
@@ -94,17 +92,10 @@ def evaluate_code(code, language):
|
|
94 |
try:
|
95 |
# 使用containerized_eval中的eval_string_script函数
|
96 |
result = eval_string_script(language, code)
|
97 |
-
|
98 |
-
if result["exit_code"] == 0:
|
99 |
-
return {"status": "OK", "output": result["stdout"]}
|
100 |
-
else:
|
101 |
-
return {
|
102 |
-
"status": "Error",
|
103 |
-
"error": result["stderr"] if result["stderr"] else "Unknown error",
|
104 |
-
"output": result["stdout"]
|
105 |
-
}
|
106 |
|
107 |
except Exception as e:
|
|
|
108 |
return {"status": "Exception", "error": str(e)}
|
109 |
|
110 |
# 创建Gradio接口
|
|
|
71 |
code = input_data.get('prompt') + comp + '\n' + input_data.get('tests')
|
72 |
result = evaluate_code(code, language)
|
73 |
if result["status"] == "OK":
|
74 |
+
return result
|
|
|
|
|
75 |
results.append(result)
|
76 |
|
77 |
return results[0]
|
|
|
92 |
try:
|
93 |
# 使用containerized_eval中的eval_string_script函数
|
94 |
result = eval_string_script(language, code)
|
95 |
+
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
|
97 |
except Exception as e:
|
98 |
+
print(1)
|
99 |
return {"status": "Exception", "error": str(e)}
|
100 |
|
101 |
# 创建Gradio接口
|
src/containerized_eval.py
CHANGED
@@ -24,6 +24,7 @@ from . import eval_clj
|
|
24 |
from . import eval_v
|
25 |
from . import eval_lean
|
26 |
from . import eval_dart
|
|
|
27 |
import tempfile
|
28 |
|
29 |
|
@@ -60,6 +61,8 @@ EVALUATORS = {
|
|
60 |
"coq": (eval_v.eval_script, ".v"),
|
61 |
"lean": (eval_lean.eval_script, ".lean"),
|
62 |
"dart": (eval_dart.eval_script, ".dart"),
|
|
|
|
|
63 |
}
|
64 |
|
65 |
def eval_string_script(language, program):
|
|
|
24 |
from . import eval_v
|
25 |
from . import eval_lean
|
26 |
from . import eval_dart
|
27 |
+
from . import eval_go
|
28 |
import tempfile
|
29 |
|
30 |
|
|
|
61 |
"coq": (eval_v.eval_script, ".v"),
|
62 |
"lean": (eval_lean.eval_script, ".lean"),
|
63 |
"dart": (eval_dart.eval_script, ".dart"),
|
64 |
+
"go": (eval_go.eval_script, ".go"),
|
65 |
+
"go_test.go": (eval_go.eval_script, "_test.go"),
|
66 |
}
|
67 |
|
68 |
def eval_string_script(language, program):
|
src/eval_go.py
CHANGED
@@ -2,6 +2,8 @@ import argparse
|
|
2 |
from sys import exit
|
3 |
import subprocess
|
4 |
from pathlib import Path
|
|
|
|
|
5 |
from .generic_eval import main as gmain
|
6 |
|
7 |
|
@@ -11,22 +13,30 @@ def eval_script(path: Path):
|
|
11 |
stderr = None
|
12 |
exit_code = None
|
13 |
try:
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
except subprocess.TimeoutExpired:
|
31 |
status = "Timeout"
|
32 |
|
|
|
2 |
from sys import exit
|
3 |
import subprocess
|
4 |
from pathlib import Path
|
5 |
+
import os
|
6 |
+
import tempfile
|
7 |
from .generic_eval import main as gmain
|
8 |
|
9 |
|
|
|
13 |
stderr = None
|
14 |
exit_code = None
|
15 |
try:
|
16 |
+
# 创建临时目录用于Go缓存
|
17 |
+
with tempfile.TemporaryDirectory() as temp_dir:
|
18 |
+
# 设置Go环境变量
|
19 |
+
env = os.environ.copy()
|
20 |
+
env["GOCACHE"] = os.path.join(temp_dir, "go-build")
|
21 |
+
env["GOPATH"] = os.path.join(temp_dir, "gopath")
|
22 |
+
|
23 |
+
build = subprocess.run(["go", "test", path],
|
24 |
+
env=env,
|
25 |
+
timeout=30,
|
26 |
+
stdout=subprocess.PIPE,
|
27 |
+
stderr=subprocess.PIPE)
|
28 |
|
29 |
+
stdout = build.stdout.decode("utf-8", errors="ignore")
|
30 |
+
stderr = build.stderr.decode("utf-8", errors="ignore")
|
31 |
+
exit_code = build.returncode
|
32 |
+
# write to stderr just so that we can redirect stdout to a csv
|
33 |
|
34 |
+
if "[setup failed]" in stdout or "[build failed]" in stdout:
|
35 |
+
status = "SyntaxError"
|
36 |
+
elif "FAIL" in stdout:
|
37 |
+
status = "Exception"
|
38 |
+
else:
|
39 |
+
status = "OK"
|
40 |
except subprocess.TimeoutExpired:
|
41 |
status = "Timeout"
|
42 |
|