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)
| 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 |
no test coverage detected