docker_test / app.py
dongsheng's picture
Upload app.py
08681f4 verified
raw
history blame
2.92 kB
import gradio as gr
import json
import importlib
import os
from pathlib import Path
def evaluate(input_data):
"""评估代码的主函数
Args:
input_data: 可以是字符串(文件路径)或字典(包含代码信息)
Returns:
dict: 包含评估结果的字典
"""
try:
# 如果输入是文件路径
if isinstance(input_data, str):
with open(input_data, 'r') as f:
code = f.read()
# 从文件扩展名确定语言
language = Path(input_data).suffix[1:]
result = evaluate_code(code, language)
return result
# 如果输入是字典
elif isinstance(input_data, dict):
language = input_data.get('language')
completions = input_data.get('completions', [])
if not completions:
return {"status": "Exception", "error": "No code provided"}
# 评估所有完成的代码
results = []
for code in completions:
result = evaluate_code(code, language)
results.append(result)
# 如果任一代码执行成功,则返回成功
if any(r["status"] == "OK" for r in results):
return {"status": "pass"}
else:
return results[0] # 返回第一个失败结果
else:
return {"status": "Exception", "error": "Invalid input format"}
except Exception as e:
return {"status": "Exception", "error": str(e)}
def evaluate_code(code, language):
"""评估特定语言的代码
Args:
code (str): 要评估的代码
language (str): 编程语言
Returns:
dict: 包含评估结果的字典
"""
try:
# 动态导入对应语言的评估模块
module_name = f"src.eval_{language.lower()}"
module = importlib.import_module(module_name)
# 创建临时文件存储代码
temp_dir = Path("temp")
temp_dir.mkdir(exist_ok=True)
temp_file = temp_dir / f"temp.{language}"
with open(temp_file, "w") as f:
f.write(code)
# 调用对应语言的评估函数
result = module.eval_script(temp_file)
# 清理临时文件
if temp_file.exists():
temp_file.unlink()
return result
except ImportError:
return {"status": "Exception", "error": f"Language {language} not supported"}
except Exception as e:
return {"status": "Exception", "error": str(e)}
# 创建Gradio接口
demo = gr.Interface(
fn=evaluate,
inputs=gr.JSON(),
outputs=gr.JSON(),
title="代码评估服务",
description="支持多种编程语言的代码评估服务"
)
if __name__ == "__main__":
demo.launch()