in lmms_eval/tasks/mathvista/mathvista_evals.py [0:0]
def extract_answer(self, response, problem, quick_extract=False):
question_type = problem["question_type"]
answer_type = problem["answer_type"]
choices = problem.get("choices", [])
query = problem["query"]
if not response:
return ""
if question_type == "multi_choice" and response in choices:
return response
if answer_type == "integer":
try:
extraction = int(response)
return str(extraction)
except ValueError:
pass
if answer_type == "float":
try:
extraction = str(float(response))
return extraction
except ValueError:
pass
# quick extraction
if quick_extract:
eval_logger.info("Quickly extracting answer...")
# The answer is "text". -> "text"
try:
result = re.search(r'The answer is "(.*)"\.', response)
if result:
extraction = result.group(1)
return extraction
except re.error:
pass
# general extraction
try:
full_prompt = self.create_test_prompt(DEMO_PROMPT, query, response)
extraction = self.get_chat_response(full_prompt, temperature=0, max_tokens=256, n=1)
return extraction
except Exception as e:
eval_logger.error(e)
eval_logger.error(f"Error in extracting answer for problem")
return ""