Spaces:
Configuration error
Configuration error
| import string | |
| import copy as cp | |
| import os | |
| from ..smp import * | |
| def can_infer_option(answer, choices): | |
| verbose = os.environ.get('VERBOSE', 0) | |
| # Choices is a dictionary | |
| if 'Failed to obtain answer via API' in answer: | |
| return False | |
| reject_to_answer = [ | |
| "Sorry, I can't help with images of people yet.", | |
| "I can't process this file.", | |
| "I'm sorry, but without the image provided", | |
| 'Cannot determine the answer' | |
| ] | |
| for err in reject_to_answer: | |
| if err in answer: | |
| return 'Z' | |
| def count_choice(splits, choices, prefix='', suffix=''): | |
| cnt = 0 | |
| for c in choices: | |
| if prefix + c + suffix in splits: | |
| cnt += 1 | |
| return cnt | |
| answer_mod = cp.copy(answer) | |
| chars = '.()[],:;!*#{}' | |
| for c in chars: | |
| answer_mod = answer_mod.replace(c, ' ') | |
| splits = [x.strip() for x in answer_mod.split()] | |
| count = count_choice(splits, choices) | |
| if count == 1: | |
| for ch in choices: | |
| if 'A' in splits and len(splits) > 3 and verbose: | |
| logger = get_logger('Evaluation') | |
| logger.info(f'A might be a quantifier in the string: {answer}.') | |
| return False | |
| if ch in splits: | |
| return ch | |
| elif count == 0 and count_choice(splits, {'Z', ''}) == 1: | |
| return 'Z' | |
| return False | |
| def can_infer_text(answer, choices): | |
| answer = answer.lower() | |
| assert isinstance(choices, dict) | |
| for k in choices: | |
| assert k in string.ascii_uppercase | |
| choices[k] = str(choices[k]).lower() | |
| cands = [] | |
| for k in choices: | |
| if choices[k] in answer: | |
| cands.append(k) | |
| if len(cands) == 1: | |
| return cands[0] | |
| return False | |
| def can_infer(answer, choices): | |
| answer = str(answer) | |
| copt = can_infer_option(answer, choices) | |
| return copt if copt else can_infer_text(answer, choices) | |