Files
2026-07-13 13:39:21 +08:00

87 lines
2.2 KiB
Python

import argparse
import os
import json
import copy
def parse_option():
parser = argparse.ArgumentParser("")
parser.add_argument('--input_path', type=str, default=None)
parser.add_argument('--output_path', type=str, default=None)
parser.add_argument('--file_name', type=str, default=None)
parser.add_argument('--info_path', type=str, default=None)
opt = parser.parse_args()
return opt
def main(opt):
input_path = opt.input_path
output_path = opt.output_path
file_name = opt.file_name
info_path = opt.info_path
if os.path.exists(info_path):
info = json.load(open(info_path, 'r'))
else:
info = {}
os.makedirs('/'.join(info_path.split('/')[:-1]), exist_ok=True)
info[file_name] = {
"file_name": "train_llamafactory.jsonl",
"ranking": True,
"formatting": "sharegpt",
"columns": {
"messages": "conversations",
"chosen": "chosen",
"rejected": "rejected",
"chosen_score": "chosen_score",
"reject_score": "reject_score"
}
}
with open(info_path, 'w') as f:
json.dump(info, f, indent=4)
data_format = {
"conversations": [
{
"from": "human",
"value": ""
}
],
"chosen": {
"from": "gpt",
"value": ""
},
"rejected": {
"from": "gpt",
"value": ""
},
"chosen_score": 0,
"rejected_score": 0
}
data = []
with open(input_path, 'r') as f:
for line in f:
line = json.loads(line)
tmp_data = copy.deepcopy(data_format)
tmp_data['conversations'][0]['value'] = line['prompt'].replace('\n###Response:\n', '').replace(
'###Instruction:\n', '')
tmp_data['chosen']['value'] = line['chosen']
tmp_data['rejected']['value'] = line['rejected']
tmp_data['chosen_score'] = line['chosen_score']
tmp_data['rejected_score'] = line['rejected_score']
data.append(tmp_data)
with open(output_path, 'w') as f:
json.dump(data, f, indent=4)
if __name__ == "__main__":
opt = parse_option()
main(opt)