MCPcopy
hub / github.com/open-compass/VLMEvalKit / generate

Method generate

vlmeval/api/base.py:216–265  ·  view source on GitHub ↗

The main function to generate the answer. Will call `generate_inner` with the preprocessed input messages. Args: message: raw input messages. Returns: str: The generated answer of the Failed Message if failed to obtain answer.

(self, message, **kwargs1)

Source from the content-addressed store, hash-verified

214 return new_message
215
216 def generate(self, message, **kwargs1):
217 """The main function to generate the answer. Will call `generate_inner` with the preprocessed input messages.
218
219 Args:
220 message: raw input messages.
221
222 Returns:
223 str: The generated answer of the Failed Message if failed to obtain answer.
224 """
225 if self.check_content(message) == 'listdict':
226 message = self.preprocess_message_with_role(message)
227
228 assert self.check_content(message) in ['str', 'dict', 'liststr', 'listdict'], f'Invalid input type: {message}'
229 message = self.preproc_content(message)
230 assert message is not None and self.check_content(message) == 'listdict'
231 for item in message:
232 assert item['type'] in self.allowed_types, f'Invalid input type: {item["type"]}'
233
234 # merge kwargs
235 kwargs = cp.deepcopy(self.default_kwargs)
236 kwargs.update(kwargs1)
237
238 answer = None
239 # a very small random delay [0s - 0.5s]
240 T = rd.random() * 0.5
241 time.sleep(T)
242
243 for i in range(self.retry):
244 try:
245 ret_code, answer, log = self.generate_inner(message, **kwargs)
246 if ret_code == 0 and self.fail_msg not in answer and answer != '':
247 if self.verbose:
248 print(answer)
249 return answer
250 elif self.verbose:
251 if not isinstance(log, str):
252 try:
253 log = log.text
254 except Exception as e:
255 self.logger.warning(f'Failed to parse {log} as an http response: {str(e)}. ')
256 self.logger.info(f'RetCode: {ret_code}\nAnswer: {answer}\nLog: {log}')
257 except Exception as err:
258 if self.verbose:
259 self.logger.error(f'An error occured during try {i}: ')
260 self.logger.error(f'{type(err)}: {err}')
261 # delay before each retry
262 T = rd.random() * self.wait * 2
263 time.sleep(T)
264
265 return self.fail_msg if answer in ['', None] else answer
266
267 def message_to_promptimg(self, message, dataset=None):
268 assert not self.INTERLEAVE

Callers 1

workingMethod · 0.95

Calls 5

check_contentMethod · 0.95
preproc_contentMethod · 0.95
generate_innerMethod · 0.95
updateMethod · 0.45

Tested by

no test coverage detected