import pandas as pd import gradio as gr def set_error(row): if row.error not in [True, False]: if not row.prompt_response: return True return False return row.error def get_tool_winning_rate(tools_df, inc_tools): tools_inc = tools_df[tools_df['tool'].isin(inc_tools)] tools_inc['error'] = tools_inc.apply(set_error, axis=1) tools_non_error = tools_inc[tools_inc['error'] != True] tools_non_error['currentAnswer'].replace('no', 'No', inplace=True) tools_non_error['currentAnswer'].replace('yes', 'Yes', inplace=True) tools_non_error = tools_non_error[tools_non_error['currentAnswer'].isin(['Yes', 'No'])] tools_non_error = tools_non_error[tools_non_error['vote'].isin(['Yes', 'No'])] tools_non_error['win'] = tools_non_error['currentAnswer'] == tools_non_error['vote'] tools_non_error['win'] = tools_non_error['win'].astype(int) tools_non_error.columns = tools_non_error.columns.astype(str) wins = tools_non_error.groupby(['tool', 'request_month_year_week', 'win']).size().unstack().fillna(0) wins['win_perc'] = (wins[1] / (wins[0] + wins[1]))*100 wins.reset_index(inplace=True) wins['total_request'] = wins[0] + wins[1] wins.columns = wins.columns.astype(str) return wins def get_overall_winning_rate(wins_df): overall_wins = wins_df.groupby('request_month_year_week').agg({ "0": 'sum', "1": 'sum', "win_perc": 'mean', "total_request": 'sum' }).rename(columns={"0": 'losses', "1": 'wins'}).reset_index() return overall_wins def plot_winning_trades( wins_df, winning_selector="win_perc" ): return gr.BarPlot( title="Winning Rate", x_title="Date", y_title=winning_selector, show_label=True, interactive=True, show_actions_button=True, tooltip=["request_month_year_week", winning_selector], width=800, value=wins_df, x="request_month_year_week", y=winning_selector ) def plot_winning_plot_by_tool(wins_df, tool): return gr.BarPlot( title="Winning Rate", x_title="Week", y_title="Winning Rate", x="request_month_year_week", y="win_perc", value=wins_df[wins_df['tool'] == tool], width=800, show_label=True, interactive=True, show_actions_button=True, tooltip=["request_month_year_week", "win_perc"] )