Query-decompose-baselines / methods /icl_socratic /socratic_questioning_multimodal /code /lm_eyes.py
| 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() | |