朱东升 commited on
Commit
df91d37
·
2 Parent(s): 52fc799 e18e210

Merge branch 'main' of https://huggingface.co/spaces/dongsheng/docker_test

Browse files
Files changed (3) hide show
  1. app.py +3 -12
  2. src/containerized_eval.py +3 -0
  3. 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 {"status": "pass", "compiled_code": code}
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
- build = subprocess.run(["go", "test", path],
15
- timeout=30,
16
- stdout=subprocess.PIPE,
17
- stderr=subprocess.PIPE)
 
 
 
 
 
 
 
 
18
 
19
- stdout = build.stdout.decode("utf-8", errors="ignore")
20
- stderr = build.stderr.decode("utf-8", errors="ignore")
21
- exit_code = build.returncode
22
- # write to stderr just so that we can redirect stdout to a csv
23
 
24
- if "[setup failed]" in stdout or "[build failed]" in stdout:
25
- status = "SyntaxError"
26
- elif "FAIL" in stdout:
27
- status = "Exception"
28
- else:
29
- status = "OK"
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