44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from core.builtin_concepts import BuiltinConcepts
|
|
from core.concept import Concept
|
|
from evaluators.BaseEvaluator import AllReturnValuesEvaluator
|
|
|
|
|
|
class EvalEvaluator(AllReturnValuesEvaluator):
|
|
"""
|
|
Returns the body of all successful concepts
|
|
"""
|
|
|
|
NAME = "Eval"
|
|
|
|
def __init__(self):
|
|
super().__init__(self.NAME, [BuiltinConcepts.AFTER_EVALUATION], 80)
|
|
self.eval_requested = None
|
|
|
|
def matches(self, context, return_values):
|
|
sheerka = context.sheerka
|
|
for ret in return_values:
|
|
if ret.status and sheerka.isinstance(ret.body, BuiltinConcepts.CONCEPT_EVAL_REQUESTED):
|
|
self.eval_requested = ret
|
|
return True
|
|
|
|
return False
|
|
|
|
def eval(self, context, return_values):
|
|
sheerka = context.sheerka
|
|
result = []
|
|
|
|
for ret_val in return_values:
|
|
if ret_val.status and isinstance(ret_val.body, Concept) and ret_val.body.body:
|
|
context.log(self.verbose_log, f"Evaluating {ret_val}", who=self)
|
|
result.append(sheerka.ret(self.name, True, ret_val.body.body, parents=[ret_val, self.eval_requested]))
|
|
|
|
if len(result) > 0:
|
|
return result
|
|
else:
|
|
# suppress the successful BuiltinConcepts.CONCEPT_EVAL_REQUESTED
|
|
return sheerka.ret(
|
|
self.name,
|
|
False,
|
|
sheerka.new(BuiltinConcepts.CONCEPT_EVAL_REQUESTED),
|
|
parents=[self.eval_requested])
|