Fixed #100 : SheerkaAdmin: Add builtins() command
Fixed #99 : SheerkaQueryManager: I can manage contains predicate when filtering objects Fixed #97 : ERROR: list indices must be integers or slices, not Concept Fixed #96 : SequenceNodeParser: SequenceNodeParser must correctly handle concept definition Fixed #95 : ResolveAmbiguity must not remove concepts that do not require evaluation Fixed #94 : Concepts with the same key are lost when new ontology Fixed #93 : Introduce BuiltinConcepts.EVAL_GLOBAL_TRUTH_REQUESTED Fixed #92 : ExpressionParser: Implement compile_disjunctions() Fixed #91 : Implement get_concepts_complexity(context, concepts, concept_parts) Fixed #90 : ResolveAmbiguity : where predicate is not used to resolve ambiguity Fixed #89 : ResolveAmbiguityEvaluator: Concepts embedded in ConceptNode are not resolved Fixed #88: SyaNodeParser: Parse multiple parameters when some of the are not recognized Fixed #87: SyaNodeParser : Parse the multiple parameters
This commit is contained in:
@@ -36,21 +36,23 @@ class SheerkaMemory(BaseService):
|
||||
super().__init__(sheerka, order=13)
|
||||
self.short_term_objects = FastCache()
|
||||
self.registration = {}
|
||||
self.enable_memory_registration = True
|
||||
|
||||
def initialize(self):
|
||||
self.sheerka.bind_service_method(self.get_from_short_term_memory, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.get_all_short_term_memory, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.add_to_short_term_memory, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.remove_context, True, as_name="clear_short_term_memory", visible=False)
|
||||
self.sheerka.bind_service_method(self.add_to_memory, True)
|
||||
self.sheerka.bind_service_method(self.add_many_to_short_term_memory, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.get_from_memory, False)
|
||||
self.sheerka.bind_service_method(self.get_last_from_memory, False)
|
||||
self.sheerka.bind_service_method(self.register_object, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.unregister_object, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.commit_registered_objects, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.memory, False)
|
||||
self.sheerka.bind_service_method(self.mem, False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.get_from_short_term_memory, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.get_all_short_term_memory, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.add_to_short_term_memory, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.remove_context, True, as_name="clear_short_term_memory",
|
||||
visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.add_to_memory, True)
|
||||
self.sheerka.bind_service_method(self.NAME, self.add_many_to_short_term_memory, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.get_from_memory, False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.get_last_from_memory, False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.register_object, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.unregister_object, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.commit_registered_objects, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.memory, False)
|
||||
self.sheerka.bind_service_method(self.NAME, self.mem, False)
|
||||
|
||||
cache = ListIfNeededCache().auto_configure(self.OBJECTS_ENTRY)
|
||||
self.sheerka.om.register_cache(self.OBJECTS_ENTRY, cache, persist=True, use_ref=True)
|
||||
@@ -187,7 +189,7 @@ class SheerkaMemory(BaseService):
|
||||
:param concept:
|
||||
:return:
|
||||
"""
|
||||
if self.sheerka.during_initialisation or self.sheerka.during_restore:
|
||||
if not self.enable_memory_registration or self.sheerka.during_initialisation or self.sheerka.during_restore:
|
||||
return
|
||||
self.registration[key] = concept
|
||||
|
||||
@@ -220,39 +222,48 @@ class SheerkaMemory(BaseService):
|
||||
:param name:
|
||||
:return:
|
||||
"""
|
||||
name_to_use = name.name if isinstance(name, Concept) else name
|
||||
self.unregister_object(context, name_to_use)
|
||||
self.enable_memory_registration = False
|
||||
try:
|
||||
name_to_use = name.name if isinstance(name, Concept) else name
|
||||
self.unregister_object(context, name_to_use)
|
||||
|
||||
# first try direct access
|
||||
obj = self.get_last_from_memory(context, name_to_use)
|
||||
if obj is not NotFound:
|
||||
return obj.obj
|
||||
# first try direct access
|
||||
obj = self.get_last_from_memory(context, name_to_use)
|
||||
if obj is not NotFound:
|
||||
return obj.obj
|
||||
|
||||
all_objects = self.sheerka.om.list(SheerkaMemory.OBJECTS_ENTRY) # not always a list of list
|
||||
all_objects_copy = [] # to transform into list of list
|
||||
for obj in all_objects:
|
||||
if isinstance(obj, list):
|
||||
all_objects_copy.append(obj.copy())
|
||||
else:
|
||||
all_objects_copy.append([obj])
|
||||
# only filter if it's a valid predicate
|
||||
from parsers.BaseExpressionParser import VariableNode, NameExprNode
|
||||
parsed_ret_val = self.sheerka.parse_expression(context, name_to_use, auto_compile=False)
|
||||
if parsed_ret_val.status and not isinstance(parsed_ret_val.body.body, (VariableNode, NameExprNode)):
|
||||
|
||||
while len(all_objects_copy) > 0:
|
||||
current_list = []
|
||||
temp = []
|
||||
for obj in all_objects_copy:
|
||||
current_list.append(obj.pop(-1))
|
||||
if len(obj) > 0:
|
||||
temp.append(obj)
|
||||
all_objects = self.sheerka.om.list(SheerkaMemory.OBJECTS_ENTRY) # not always a list of list
|
||||
all_objects_copy = [] # to transform into list of list
|
||||
for obj in all_objects:
|
||||
if isinstance(obj, list):
|
||||
all_objects_copy.append(obj.copy())
|
||||
else:
|
||||
all_objects_copy.append([obj])
|
||||
|
||||
all_objects_copy = temp # list constructed with the last item of each item
|
||||
current_list = sorted(current_list, key=lambda o: o.timestamp, reverse=True)
|
||||
current_objects = [o.obj for o in current_list]
|
||||
while len(all_objects_copy) > 0:
|
||||
current_list = []
|
||||
temp = []
|
||||
for obj in all_objects_copy:
|
||||
current_list.append(obj.pop(-1))
|
||||
if len(obj) > 0:
|
||||
temp.append(obj)
|
||||
|
||||
res = self.sheerka.filter_objects(context, current_objects, name_to_use)
|
||||
if len(res) > 0:
|
||||
return res[0] # only the first, as it should have a better timestamp
|
||||
all_objects_copy = temp # list constructed with the last item of each item
|
||||
current_list = sorted(current_list, key=lambda o: o.timestamp, reverse=True)
|
||||
current_objects = [o.obj for o in current_list]
|
||||
|
||||
return self.sheerka.new(BuiltinConcepts.NOT_FOUND, body={"#name": name_to_use})
|
||||
res = self.sheerka.filter_objects(context, current_objects, name_to_use)
|
||||
if len(res) > 0:
|
||||
return res[0] # only the first, as it should have a better timestamp
|
||||
|
||||
return self.sheerka.new(BuiltinConcepts.NOT_FOUND, body={"#name": name_to_use})
|
||||
finally:
|
||||
self.enable_memory_registration = True
|
||||
|
||||
def mem(self):
|
||||
keys = sorted([k for k in self.sheerka.om.list(SheerkaMemory.OBJECTS_ENTRY)])
|
||||
|
||||
Reference in New Issue
Block a user