Veblen34's picture
Upload folder using huggingface_hub
cd6775d verified
Raw
History Blame Contribute Delete
3.42 kB
import os
import json
import torch
import pdb
import time
from thought_tree import ThoughtTree
from thought_node import ThoughtNode
from prompt_map import PromptMap
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--data', type=str)
parser.add_argument('--dataset', type=str)
parser.add_argument('--gpu_id', type=int, default=0)
parser.add_argument('--max_depth', type=int)
parser.add_argument('--max_turn_num', type=int)
parser.add_argument('--question_num', type=int)
parser.add_argument('--llm', type=str, default='gpt')
parser.add_argument('--api', type=str, default="")
args = parser.parse_args()
'''Environment Parameter Setup'''
api = args.api # jingyuan
gpu_id = args.gpu_id
os.environ['CUDA_VISIBLE_DEVICES']= str(gpu_id)# set cuda device
'''Framework Hyperparameters'''
# ['vqa','okvqa','aokvqa', 'scienceqa', 'hatefulmeme']
dataset = args.dataset
max_depth = args.max_depth
max_turn_num = args.max_turn_num
num_deeper_question = args.question_num
'''load data'''
def get_save_name(dataset,num_deeper_question,max_depth,max_turn_num):
name = dataset
name += '_question' + str(num_deeper_question)
name += '_depth' + str(max_depth)
name += '_turn' + str(max_turn_num)
name += '_' + args.llm
return name
f = open(args.data, 'r')
lines = f.readlines()
f.close()
savedir_name = get_save_name(dataset,num_deeper_question,max_depth,max_turn_num)
print('save_dir_name: ', savedir_name)
if not os.path.exists('../result/' + savedir_name):
os.mkdir('../result/' + savedir_name)
if not os.path.exists('../result/' + savedir_name + '/inference_log'):
os.mkdir('../result/' + savedir_name + '/inference_log')
save_dir = '../result/'+ savedir_name
'''initial tree'''
# init prompts
prompt_map_obj = PromptMap()
prompt_map = prompt_map_obj.get_map(dataset)
# init tree
tree = ThoughtTree(gpu_id, api, prompt_map, num_deeper_question,args.llm)
# pdb.set_trace()
'''run'''
summary = {}
print('Save_dir_name: ', savedir_name)
for idx, i in enumerate(lines):
data = json.loads(i)
question_id = data['unique_id'].split('_')[-1]
question = data['question']
choices = ''
target = data['target_txt']
if 'choice' in data:
choices = ' Choices: ' + str(data['choice'])
if 'target_id' in data:
target = data['target_id']
question = question + choices
object_regions = None
if 'object_regions' in data:
object_regions = data['object_regions']
img_path = data['image_path']
# pdb.set_trace()
while True:
try:
answer, num_children = tree.run_root_node(save_dir, question_id, question, img_path, max_depth, max_turn_num, object_regions=object_regions)
break
# catch error and print it
except Exception as e:
print('Error: ',e,'; Restarting... At time: ' + str(time.time()))
time.sleep(10)
# pdb.set_trace()
context = tree.root_node.get_context()
hints = tree.root_node.hint
data['context'] = context
data['hint'] = hints
data['answer'] = answer
data['num_nodes'] = num_children
summary[question_id] = data
with open(save_dir + '/result_summary.json', 'w') as f:
json.dump(summary, f, indent=4)
# print progress
print('Progress: %d/%d, %d%%' % (idx+1, len(lines), (idx+1)/len(lines)*100), end='\r')
# break
# pdb.set_trace()