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()