freealise/Code-Generation-with-Language-Specific-LoRa-Models
0
1import os2import json3import numpy as np4import pandas as pd5import seaborn as sns6import streamlit as st7import matplotlib.pyplot as plt8sns.set(rc={'figure.figsize':(11.7,8.27)})9 10 11def init_page():12 st.title('Error Analysis')13 14def get_files_in_dir(dir_path, ext=None):15 """Returns a list of files in a directory, optionally filtered by extension.16 Args:17 dir_path (str): Path to directory.18 ext (str, optional): File extension to filter by. Defaults to None.19 Returns:20 list: List of file paths.21 """22 files = []23 for file in os.listdir(dir_path):24 if ext is None or file.endswith(ext):25 files.append(os.path.join(dir_path, file))26 return files27 28def load_json_file(file_path):29 """Loads a JSON file.30 Args:31 file_path (str): Path to JSON file.32 Returns:33 dict: JSON file contents.34 """35 with open(file_path, 'r') as f:36 return json.load(f)37 38def get_df_from_data(data):39 propmpt = data['prompt']40 language = data['language']41 temperature = data['temperature']42 top_p = data['top_p']43 max_new_tokens = data['max_new_tokens']44 stop_tokens = data['stop_tokens']45 results = data['results']46 program = []47 timestamp = []48 stdout = []49 stderr = []50 exit_code = []51 status = []52 for result in results:53 program.append(result['program'])54 timestamp.append(result['timestamp'])55 stdout.append(result['stdout'])56 stderr.append(result['stderr'])57 exit_code.append(result['exit_code'])58 status.append(result['status'])59 prompt = [propmpt] * len(program)60 language = [language] * len(program)61 temperature = [temperature] * len(program)62 top_p = [top_p] * len(program)63 max_new_tokens = [max_new_tokens] * len(program)64 stop_tokens = [stop_tokens] * len(program)65 66 67 df = pd.DataFrame({68 'prompt': propmpt,69 'language': language,70 'temperature': temperature,71 'top_p': top_p,72 'max_new_tokens': max_new_tokens,73 'stop_tokens': stop_tokens,74 'program': program,75 'timestamp': timestamp,76 'stdout': stdout,77 'stderr': stderr,78 'exit_code': exit_code,79 'status': status80 })81 return df82 83def concat_two_df(df1, df2):84 return pd.concat([df1, df2])85 86def get_df_from_files(files):87 df = pd.DataFrame()88 for file in files:89 data = load_json_file(file)90 df = concat_two_df(df, get_df_from_data(data))91 return df92 93def select_columns(df, columns):94 return df[columns]95 96def get_value_counts(df, column):97 return df[column].value_counts()98 99def get_folders_in_dir(dir_path):100 """Returns a list of folders in a directory.101 Args:102 dir_path (str): Path to directory.103 Returns:104 list: List of folder paths.105 """106 folders = []107 for folder in os.listdir(dir_path):108 if os.path.isdir(os.path.join(dir_path, folder)):109 folders.append(os.path.join(dir_path, folder))110 return folders111 112def find_strings_in_df(df, column, strings):113 """Finds rows in a dataframe that contain a string in a column.114 Args:115 df (pandas.DataFrame): Dataframe.116 column (str): Column to search.117 strings (list): List of strings to search for.118 Returns:119 pandas.DataFrame: Dataframe with rows that contain a string in a column.120 """121 return df[df[column].str.contains('|'.join(strings))]122 123def main():124 init_page()125 parent_dir = './temp'126 all_strings = [127 "error: ';' expected",128 " java.lang.AssertionError",129 " ArrayList<"130 ]131 132 folders = get_folders_in_dir(parent_dir)133 java_folders = [folder for folder in folders if 'java' in folder]134 135 136 137 dirs = st.multiselect('Select a folder', java_folders, default=java_folders)138 strings = st.multiselect('Select a string', all_strings, default=all_strings)139 140 counts_dict = {141 'folder': [],142 'string': [],143 'count': []144 }145 146 with st.spinner('Loading data...'):147 148 for dir in dirs:149 ext = '.results.json'150 files = get_files_in_dir(dir, ext)151 df = get_df_from_files(files)152 for string in strings:153 s = [string]154 string_df = find_strings_in_df(df, 'stderr', s)155 counts_dict['folder'].append(dir)156 counts_dict['string'].append(string)157 counts_dict['count'].append(len(string_df))158 159 counts_df = pd.DataFrame(counts_dict)160 #Create figure with a reasonable size161 fig, ax = plt.subplots(figsize=(8.7,5.27))162 sns.barplot(x='folder', y='count', hue='string', data=counts_df, ax=ax)163 plt.xticks(rotation=45)164 st.pyplot(fig)165 # sns.barplot(x='folder', y='count', hue='string', data=counts_df)166 # plt.xticks(rotation=45)167 # st.pyplot()168 169 170 target_dir = st.selectbox('Select a folder', dirs)171 ext = '.results.json'172 files = get_files_in_dir(target_dir, ext)173 df = get_df_from_files(files)174 target_strings = st.multiselect('Select a string', strings, key='target_strings')175 target_df = find_strings_in_df(df, 'stderr', target_strings)176 target_df = select_columns(target_df, ['program', 'stderr'])177 target_index = st.number_input('Select an index', min_value=0, max_value=len(target_df)-1, value=0, step=1)178 target_df = target_df.iloc[target_index]179 target_program = target_df['program']180 st.code(target_program, language='java')181 st.dataframe(target_df)182 183if __name__ == '__main__':184 main()