| | """Generate json file for webpage.""" |
| | import json |
| | import os |
| | import re |
| |
|
| | |
| | models = ['vicuna'] |
| |
|
| |
|
| | def read_jsonl(path: str, key: str=None): |
| | data = [] |
| | with open(os.path.expanduser(path)) as f: |
| | for line in f: |
| | if not line: |
| | continue |
| | data.append(json.loads(line)) |
| | if key is not None: |
| | data.sort(key=lambda x: x[key]) |
| | data = {item[key]: item for item in data} |
| | return data |
| |
|
| |
|
| | def trim_hanging_lines(s: str, n: int) -> str: |
| | s = s.strip() |
| | for _ in range(n): |
| | s = s.split('\n', 1)[1].strip() |
| | return s |
| |
|
| |
|
| | if __name__ == '__main__': |
| | questions = read_jsonl('table/question.jsonl', key='question_id') |
| |
|
| | |
| | |
| | |
| | |
| | vicuna_answers = read_jsonl('table/answer/answer_vicuna-13b.jsonl', key='question_id') |
| | ours_answers = read_jsonl('table/results/llama-13b-hf-alpaca.jsonl', key='question_id') |
| |
|
| | review_vicuna = read_jsonl('table/review/review_vicuna-13b_llama-13b-hf-alpaca.jsonl', key='question_id') |
| | |
| | |
| | |
| | |
| |
|
| | records = [] |
| | for qid in questions.keys(): |
| | r = { |
| | 'id': qid, |
| | 'category': questions[qid]['category'], |
| | 'question': questions[qid]['text'], |
| | 'answers': { |
| | |
| | |
| | |
| | |
| | 'vicuna': vicuna_answers[qid]['text'], |
| | 'ours': ours_answers[qid]['text'], |
| | }, |
| | 'evaluations': { |
| | |
| | |
| | |
| | 'vicuna': review_vicuna[qid]['content'], |
| | |
| | }, |
| | 'scores': { |
| | 'vicuna': review_vicuna[qid]['tuple'], |
| | |
| | |
| | |
| | |
| | }, |
| | } |
| |
|
| | |
| | cleaned_evals = {} |
| | for k, v in r['evaluations'].items(): |
| | v = v.strip() |
| | lines = v.split('\n') |
| | |
| | if re.match(r'\d+[, ]+\d+', lines[0]): |
| | lines = lines[1:] |
| | v = '\n'.join(lines) |
| | cleaned_evals[k] = v.replace('Assistant 1', "**Assistant 1**").replace('Assistant 2', '**Assistant 2**') |
| |
|
| | r['evaluations'] = cleaned_evals |
| | records.append(r) |
| |
|
| | |
| | for r in records: |
| | if r['id'] <= 20: |
| | r['id'] += 60 |
| | else: |
| | r['id'] -= 20 |
| | for r in records: |
| | if r['id'] <= 50: |
| | r['id'] += 10 |
| | elif 50 < r['id'] <= 60: |
| | r['id'] -= 50 |
| | for r in records: |
| | if r['id'] == 7: |
| | r['id'] = 1 |
| | elif r['id'] < 7: |
| | r['id'] += 1 |
| |
|
| | records.sort(key=lambda x: x['id']) |
| |
|
| | |
| | with open('webpage/data.json', 'w') as f: |
| | json.dump({'questions': records, 'models': models}, f, indent=2) |
| |
|