|
import argparse |
|
import code |
|
import datetime |
|
import json |
|
import os |
|
from pytz import timezone |
|
import time |
|
|
|
import pandas as pd |
|
from tqdm import tqdm |
|
|
|
|
|
def get_log_files(max_num_files=None): |
|
dates = [] |
|
for month in [4, 5]: |
|
for day in range(1, 32): |
|
dates.append(f"2023-{month:02d}-{day:02d}") |
|
|
|
num_servers = 14 |
|
filenames = [] |
|
for d in dates: |
|
for i in range(num_servers): |
|
name = os.path.expanduser(f"~/fastchat_logs/server{i}/{d}-conv.json") |
|
if os.path.exists(name): |
|
filenames.append(name) |
|
max_num_files = max_num_files or len(filenames) |
|
filenames = filenames[-max_num_files:] |
|
return filenames |
|
|
|
|
|
def pretty_print_conversation(messages): |
|
for role, msg in messages: |
|
print(f"[[{role}]]: {msg}") |
|
|
|
|
|
def inspect_convs(log_files): |
|
data = [] |
|
for filename in tqdm(log_files, desc="read files"): |
|
for retry in range(5): |
|
try: |
|
lines = open(filename).readlines() |
|
break |
|
except FileNotFoundError: |
|
time.sleep(2) |
|
|
|
for l in lines: |
|
row = json.loads(l) |
|
|
|
if "states" not in row: |
|
continue |
|
if row["type"] not in ["leftvote", "rightvote", "bothbad_vote"]: |
|
continue |
|
|
|
model_names = row["states"][0]["model_name"], row["states"][1]["model_name"] |
|
if row["type"] == "leftvote": |
|
winner, loser = model_names[0], model_names[1] |
|
winner_conv, loser_conv = row["states"][0], row["states"][1] |
|
elif row["type"] == "rightvote": |
|
loser, winner = model_names[0], model_names[1] |
|
loser_conv, winner_conv = row["states"][0], row["states"][1] |
|
|
|
if loser == "bard" and winner == "vicuna-13b": |
|
print("=" * 20) |
|
print(f"Winner: {winner}") |
|
pretty_print_conversation(winner_conv["messages"]) |
|
print(f"Loser: {loser}") |
|
pretty_print_conversation(loser_conv["messages"]) |
|
print("=" * 20) |
|
input() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
parser = argparse.ArgumentParser() |
|
parser.add_argument("--max-num-files", type=int) |
|
args = parser.parse_args() |
|
|
|
log_files = get_log_files(args.max_num_files) |
|
inspect_convs(log_files) |
|
|