mirror of
https://github.com/OpenBMB/MiniCPM-V.git
synced 2026-02-05 18:29:18 +08:00
Modify eval_mm for MiniCPM-o 2.6
This commit is contained in:
@@ -3,7 +3,7 @@ import random as rd
|
||||
from abc import abstractmethod
|
||||
import os.path as osp
|
||||
import copy as cp
|
||||
from ..smp import get_logger, parse_file, concat_images_vlmeval
|
||||
from ..smp import get_logger, parse_file, concat_images_vlmeval, LMUDataRoot, md5, decode_base64_to_image_file
|
||||
|
||||
|
||||
class BaseAPI:
|
||||
@@ -143,7 +143,9 @@ class BaseAPI:
|
||||
while len(inputs):
|
||||
try:
|
||||
return self.generate_inner(inputs, **kwargs)
|
||||
except:
|
||||
except Exception as e:
|
||||
if self.verbose:
|
||||
self.logger.info(f'{type(e)}: {e}')
|
||||
inputs = inputs[1:]
|
||||
while len(inputs) and inputs[0]['role'] != 'user':
|
||||
inputs = inputs[1:]
|
||||
@@ -179,19 +181,38 @@ class BaseAPI:
|
||||
if not isinstance(log, str):
|
||||
try:
|
||||
log = log.text
|
||||
except:
|
||||
self.logger.warning(f'Failed to parse {log} as an http response. ')
|
||||
except Exception as e:
|
||||
self.logger.warning(f'Failed to parse {log} as an http response: {str(e)}. ')
|
||||
self.logger.info(f'RetCode: {ret_code}\nAnswer: {answer}\nLog: {log}')
|
||||
except Exception as err:
|
||||
if self.verbose:
|
||||
self.logger.error(f'An error occured during try {i}:')
|
||||
self.logger.error(err)
|
||||
self.logger.error(f'An error occured during try {i}: ')
|
||||
self.logger.error(f'{type(err)}: {err}')
|
||||
# delay before each retry
|
||||
T = rd.random() * self.wait * 2
|
||||
time.sleep(T)
|
||||
|
||||
return self.fail_msg if answer in ['', None] else answer
|
||||
|
||||
def preprocess_message_with_role(self, message):
|
||||
system_prompt = ''
|
||||
new_message = []
|
||||
|
||||
for data in message:
|
||||
assert isinstance(data, dict)
|
||||
role = data.pop('role', 'user')
|
||||
if role == 'system':
|
||||
system_prompt += data['value'] + '\n'
|
||||
else:
|
||||
new_message.append(data)
|
||||
|
||||
if system_prompt != '':
|
||||
if self.system_prompt is None:
|
||||
self.system_prompt = system_prompt
|
||||
else:
|
||||
self.system_prompt += '\n' + system_prompt
|
||||
return new_message
|
||||
|
||||
def generate(self, message, **kwargs1):
|
||||
"""The main function to generate the answer. Will call `generate_inner` with the preprocessed input messages.
|
||||
|
||||
@@ -201,6 +222,9 @@ class BaseAPI:
|
||||
Returns:
|
||||
str: The generated answer of the Failed Message if failed to obtain answer.
|
||||
"""
|
||||
if self.check_content(message) == 'listdict':
|
||||
message = self.preprocess_message_with_role(message)
|
||||
|
||||
assert self.check_content(message) in ['str', 'dict', 'liststr', 'listdict'], f'Invalid input type: {message}'
|
||||
message = self.preproc_content(message)
|
||||
assert message is not None and self.check_content(message) == 'listdict'
|
||||
@@ -227,13 +251,13 @@ class BaseAPI:
|
||||
if not isinstance(log, str):
|
||||
try:
|
||||
log = log.text
|
||||
except:
|
||||
self.logger.warning(f'Failed to parse {log} as an http response. ')
|
||||
except Exception as e:
|
||||
self.logger.warning(f'Failed to parse {log} as an http response: {str(e)}. ')
|
||||
self.logger.info(f'RetCode: {ret_code}\nAnswer: {answer}\nLog: {log}')
|
||||
except Exception as err:
|
||||
if self.verbose:
|
||||
self.logger.error(f'An error occured during try {i}:')
|
||||
self.logger.error(err)
|
||||
self.logger.error(f'An error occured during try {i}: ')
|
||||
self.logger.error(f'{type(err)}: {err}')
|
||||
# delay before each retry
|
||||
T = rd.random() * self.wait * 2
|
||||
time.sleep(T)
|
||||
|
||||
Reference in New Issue
Block a user