lmms_eval/tasks/iconqa/utils.py (42 lines of code) (raw):

import json import os def options_to_str(options_prompt): option_prompt_str = "" for i, option in enumerate(options_prompt): option_choice = chr(ord("A") + i) option_prompt_str += f"{option_choice}. {option}\n" option_prompt_str = option_prompt_str.rstrip("\n") return option_prompt_str def doc_to_visual(doc): image_list = [] if "query_image" in doc: image_list.append(doc["query_image"].convert("RGB")) for i in range(5): id = f"choice_image_{i}" if id in doc and doc[id] is not None: image_list.append(doc[id].convert("RGB")) assert len(image_list) < 6, "Maximum 5 images allowed for ICON-QA" return image_list def doc_to_text(doc, model_specific_prompt_kwargs): question = doc["question"] ques_type = doc["ques_type"] options_prompt = [] if ques_type == "choose_img": options_prompt.append("The first image.") options_prompt.append("The second image.") options_str = options_to_str(options_prompt) full_prompt = f"{model_specific_prompt_kwargs['pre_prompt']}{model_specific_prompt_kwargs['statement']}{model_specific_prompt_kwargs['options_statement'].format(question=question, options=options_str)}" elif ques_type == "choose_txt": choices = doc["choices"].split(",") for i, choice in enumerate(choices): options_prompt.append(f"{choice}") options_str = options_to_str(options_prompt) full_prompt = f"{model_specific_prompt_kwargs['pre_prompt']}{model_specific_prompt_kwargs['statement']}{model_specific_prompt_kwargs['options_statement'].format(question=question, options=options_str)}" elif ques_type == "fill_in_blank": full_prompt = f"{model_specific_prompt_kwargs['pre_prompt']}{model_specific_prompt_kwargs['statement']}{model_specific_prompt_kwargs['freeform_statement'].format(question=question)}" return full_prompt def test_process_results(doc, results): pred = results[0] questionId = doc["question_id"] answer = doc["answer"] return {"anls": {"questionId": int(questionId), "answer": answer, "pred_answer": pred}}