from core.builtin_concepts_ids import BuiltinConcepts, BuiltinOutConcepts from evaluators.BaseEvaluator import AllReturnValuesEvaluator from parsers.BaseParser import BaseParser class MultipleOutEvaluator(AllReturnValuesEvaluator): """ Used to filter the responses when too many success but these success are different output to print """ NAME = "MultipleOut" def __init__(self): super().__init__(self.NAME, [BuiltinConcepts.AFTER_EVALUATION], 61) self.success = [] def reset(self): super().reset() self.success.clear() def matches(self, context, return_values): to_process = False for ret in return_values: if ret.status and ret.who.startswith(BaseParser.PREFIX): return False elif ret.status and context.sheerka.isinstance(ret.body, BuiltinConcepts.REDUCE_REQUESTED): to_process = True self.eaten.append(ret) elif ret.status and ret.who.startswith(self.PREFIX): if context.sheerka.isin(ret.body, BuiltinOutConcepts): self.success.append(ret) self.eaten.append(ret) else: return False elif not ret.status: self.eaten.append(ret) return to_process and len(self.success) > 1 def eval(self, context, return_values): to_multi = context.sheerka.new(BuiltinConcepts.TO_MULTI, body=[r.body for r in self.success]) return context.sheerka.ret(self.name, True, to_multi, parents=self.eaten)