import gradio as gr import pandas as pd import requests import os import shutil import json import pandas as pd import subprocess import plotly.express as px def on_confirm(dataset_radio, num_parts_dropdown, token_counts_radio, line_counts_radio, cyclomatic_complexity_radio, problem_type_radio): num_parts = num_parts_dropdown token_counts_split = token_counts_radio line_counts_split = line_counts_radio cyclomatic_complexity_split = cyclomatic_complexity_radio dataframes = [] # script_path = os.path.abspath(__file__) # # 获取当前脚本所在的目录 # script_dir = os.path.dirname(script_path) # print("当前脚本文件的绝对路径:", script_path) # print("当前脚本文件所在的目录:", script_dir) if token_counts_split=="Equal Frequency Partitioning": token_counts_df = pd.read_csv(f"/home/user/app/dividing_into_different_subsets/{num_parts}/QS/token_counts_QS.csv") dataframes.append(token_counts_df) if line_counts_split=="Equal Frequency Partitioning": line_counts_df = pd.read_csv(f"E:/python-testn/pythonProject3/hh_1/dividing_into_different_subsets/{num_parts}/QS/line_counts_QS.csv") dataframes.append(line_counts_df) if cyclomatic_complexity_split=="Equal Frequency Partitioning": cyclomatic_complexity_df = pd.read_csv(f"E:/python-testn/pythonProject3/hh_1/dividing_into_different_subsets/{num_parts}/QS/CC_QS.csv") dataframes.append(cyclomatic_complexity_df) if len(dataframes) > 0: combined_df = dataframes[0] for df in dataframes[1:]: combined_df = pd.merge(combined_df, df, left_index=True, right_index=True, suffixes=('', '_y')) combined_df = combined_df.loc[:, ~combined_df.columns.str.endswith('_y')] return combined_df else: return pd.DataFrame() def execute_specified_python_files(directory_list, file_list): for directory in directory_list: for py_file in file_list: file_path = os.path.join(directory, py_file) if os.path.isfile(file_path) and py_file.endswith('.py'): print(f"Executing {file_path}...") try: subprocess.run(['python', file_path], check=True) print(f"{file_path} executed successfully.") except subprocess.CalledProcessError as e: print(f"Error executing {file_path}: {e}") else: print(f"File {file_path} does not exist or is not a Python file.") def generate_file(file_obj, user_string, user_number,dataset_choice): tmpdir = 'tmpdir' FilePath = file_obj.name print('上传文件的地址:{}'.format(file_obj.name)) shutil.copy(file_obj.name, tmpdir) FileName = os.path.basename(file_obj.name) print(FilePath) with open(FilePath, 'r', encoding="utf-8") as file_obj: outputPath = os.path.join('F:/Desktop/test', FileName) data = json.load(file_obj) print("data:", data) with open(outputPath, 'w', encoding="utf-8") as w: json.dump(data, w, ensure_ascii=False, indent=4) file_content = json.dumps(data) url = "http://localhost:6222/submit" files = {'file': (FileName, file_content, 'application/json')} payload = { 'user_string': user_string, 'user_number': user_number, 'dataset_choice':dataset_choice } response = requests.post(url, files=files, data=payload) print(response) if response.status_code == 200: output_data = response.json() output_file_path = os.path.join('E:/python-testn/pythonProject3/hh_1/evaluate_result', 'new-model.json') with open(output_file_path, 'w', encoding="utf-8") as f: json.dump(output_data, f, ensure_ascii=False, indent=4) print(f"File saved at: {output_file_path}") # 调用更新数据文件的函数 directory_list = ['/path/to/directory1', '/path/to/directory2'] file_list = ['file1.py', 'file2.py', 'file3.py'] execute_specified_python_files(directory_list, file_list) return {"status": "success", "message": "File received and saved"} else: return {"status": "error", "message": response.text} # 返回服务器响应 return {"status": "success", "message": response.text} def update_radio_options(token_counts, line_counts, cyclomatic_complexity, problem_type): options = [] if token_counts: options.append("Token Counts in Prompt") if line_counts: options.append("Line Counts in Prompt") if cyclomatic_complexity: options.append("Cyclomatic Complexity") if problem_type: options.append("Problem Type") return gr.update(choices=options) def plot_csv(radio,num): if radio=="Line Counts in Prompt": radio_choice="line_counts" file_path = f'E:/python-testn/pythonProject3/hh_1/dividing_into_different_subsets/{num}/QS/{radio_choice}_QS.csv' elif radio=="Token Counts in Prompt": radio_choice="token_counts" file_path = f'E:/python-testn/pythonProject3/hh_1/dividing_into_different_subsets/{num}/QS/{radio_choice}_QS.csv' elif radio=="Cyclomatic Complexity": radio_choice="CC" file_path = f'E:/python-testn/pythonProject3/hh_1/dividing_into_different_subsets/{num}/QS/{radio_choice}_QS.csv' elif radio=="Problem Type": radio_choice="problem_type" file_path = f'E:/python-testn/pythonProject3/hh_1/dividing_into_different_subsets/cata_result.csv' df = pd.read_csv(file_path) df.set_index('Model', inplace=True) df_transposed = df.T fig = px.line(df_transposed, x=df_transposed.index, y=df_transposed.columns, title='Model Evaluation Results', labels={'value': 'Evaluation Score', 'index': 'Evaluation Metric'}, color_discrete_sequence=px.colors.qualitative.Plotly) fig.update_traces(hovertemplate='%{y}') return fig with gr.Blocks() as iface: gr.HTML("""
📊 Demo-Leaderboard 📊
""") with gr.Tabs() as tabs: with gr.TabItem("Evaluation Result"): with gr.Row(): with gr.Column(scale=2): with gr.Row(): with gr.Column(): dataset_radio = gr.Radio(["HumanEval", "MBPP"], label="Select Dataset ") with gr.Row(): custom_css = """ """ with gr.Column(): gr.Markdown( f"{custom_css}
Choose Classification Perspective
") token_counts_checkbox = gr.Checkbox(label="Token Counts in Prompt ") line_counts_checkbox = gr.Checkbox(label="Line Counts in Prompt ") cyclomatic_complexity_checkbox = gr.Checkbox(label="Cyclomatic Complexity ") problem_type_checkbox = gr.Checkbox(label="Problem Type ") with gr.Column(): gr.Markdown("
Choose Subsets
") num_parts_dropdown = gr.Dropdown(choices=[3, 4, 5, 6, 7, 8], label="Number of Subsets") with gr.Row(): with gr.Column(): token_counts_radio = gr.Radio( ["Equal Frequency Partitioning", "Equal Interval Partitioning"], label="Select Dataset", visible=False) with gr.Column(): line_counts_radio = gr.Radio( ["Equal Frequency Partitioning", "Equal Interval Partitioning"], label="Select Dataset", visible=False) with gr.Column(): cyclomatic_complexity_radio = gr.Radio( ["Equal Frequency Partitioning", "Equal Interval Partitioning"], label="Select Dataset", visible=False) token_counts_checkbox.change(fn=lambda x: toggle_radio(x, token_counts_radio), inputs=token_counts_checkbox, outputs=token_counts_radio) line_counts_checkbox.change(fn=lambda x: toggle_radio(x, line_counts_radio), inputs=line_counts_checkbox, outputs=line_counts_radio) cyclomatic_complexity_checkbox.change(fn=lambda x: toggle_radio(x, cyclomatic_complexity_radio), inputs=cyclomatic_complexity_checkbox, outputs=cyclomatic_complexity_radio) with gr.Tabs() as inner_tabs: with gr.TabItem("Leaderboard"): dataframe_output = gr.Dataframe(elem_id="dataframe") css_output = gr.HTML() confirm_button = gr.Button("Confirm ") confirm_button.click(fn=on_confirm, inputs=[dataset_radio, num_parts_dropdown, token_counts_radio, line_counts_radio, cyclomatic_complexity_radio], outputs=dataframe_output) with gr.TabItem("Line chart"): select_radio = gr.Radio(choices=[]) checkboxes = [token_counts_checkbox, line_counts_checkbox, cyclomatic_complexity_checkbox, problem_type_checkbox] for checkbox in checkboxes: checkbox.change(fn=update_radio_options, inputs=checkboxes, outputs=select_radio) select_radio.change(fn=plot_csv, inputs=[select_radio, num_parts_dropdown], outputs=gr.Plot(label="Line Plot ")) with gr.TabItem("Upload"): gr.Markdown("Upload a JSON file") with gr.Row(): with gr.Column(): string_input = gr.Textbox(label="Enter the Model Name") number_input = gr.Number(label="Select the Number of Samples") dataset_choice = gr.Dropdown(label="Select Dataset", choices=["humaneval", "mbpp"]) with gr.Column(): file_input = gr.File(label="Upload Generation Result in JSON file") upload_button = gr.Button("Confirm and Upload") json_output = gr.JSON(label="") upload_button.click(fn=generate_file, inputs=[file_input, string_input, number_input, dataset_choice], outputs=json_output) def toggle_radio(checkbox, radio): return gr.update(visible=checkbox) css = """ #scale1 { border: 1px solid rgba(0, 0, 0, 0.2); padding: 10px; border-radius: 8px; background-color: #f9f9f9; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } } """ gr.HTML(f"") iface.launch()