def testInjectRetrieveContext(self): manager = ContextManager() entity = {'key': 'Grapes of Wrath', 'data': 'Book', 'confidence': 1.0} manager.inject_context(entity) context = manager.get_context() assert len(context) == 1 assert context[0].get('confidence') == 0.5
def query(self, query, connector): nquery = self.normalize(query) if not self.context_managers.get(connector): self.context_managers[connector] = ContextManager() if not self.last_request.get(connector): self.last_request[connector] = datetime.datetime.now() last_rq_delta = datetime.datetime.now() - self.last_request[connector] if last_rq_delta.seconds > 300: # resetting context, if last conversation was more than 15 minutes # ago self.context_managers[connector].frame_stack = [] message = "Прости, что то пошло не так" for intent in self.engine.determine_intent( nquery, include_tags=True, context_manager=self.context_managers[connector]): # after enabling context management, it can become more important if intent and intent.get('confidence') > 0: if self.get_app(intent["intent_type"]).context_sensitive: for tag in intent["__tags__"]: context_entity = tag.get('entities')[0] if self.get_app(intent["intent_type"]).context_blacklist\ and context_entity['data'][0][1]\ in self.get_app(intent["intent_type"]).context_blacklist: continue self.context_managers[connector].inject_context( context_entity) message = self.get_app(intent["intent_type"]).handle(intent) self.last_request[connector] = datetime.datetime.now() # Some code for self-analyze self.get_app("analysis").add_entry( connector, intent["intent_type"], query, len(self.context_managers[connector].frame_stack)) self.get_app(connector).answer(message)
def testContextAndOneOf(self): # test to cover https://github.com/MycroftAI/adapt/issues/86 engine = IntentDeterminationEngine() context_manager = ContextManager() # define vocabulary weather_keyword = ["weather"] for wk in weather_keyword: engine.register_entity(wk, "WeatherKeyword") # structure intent weather_intent = IntentBuilder("WeatherIntent") \ .require("WeatherKeyword") \ .one_of("Location", "LocationContext").build() engine.register_intent_parser(weather_intent) word = 'lizard' context = 'LocationContext' entity = {} entity['data'] = [(word, context)] entity['match'] = word entity['key'] = word context_manager.inject_context(entity) intents = list( engine.determine_intent('weather', context_manager=context_manager)) self.assertEqual(1, len(intents), "Incorrect number of intents") result = intents[0] self.assertEqual("lizard", result.get("LocationContext"), "Context not matched") self.assertEqual(0.75, result.get('confidence'), "Context confidence not properly applied.")
def testInjectRetrieveContextMaxFrames(self): manager = ContextManager() entity = {'key': 'The hitchhikers guide to the galaxy', 'data': 'Book', 'confidence': 1.0} manager.inject_context(entity) context = manager.get_context(max_frames=2) assert len(context) == 1 assert context[0].get('confidence') == 0.5
def testNewContextWithMetadataSameFrame(self): manager = ContextManager() entity1 = {'key': 'Grapes of Wrath', 'data': 'Book', 'confidence': 1.0} manager.inject_context(entity1, {'domain': 'media'}) context = manager.get_context() assert len(context) == 1 assert context[0].get('confidence') == 0.5 entity2 = {'key': 'Wrath of Khan', 'data': 'Film', 'confidence': 1.0} manager.inject_context(entity2, {'domain': 'media'}) assert len(manager.frame_stack) == 1 context = manager.get_context() assert len(context) == 2 assert context[0].get('confidence') == 0.5 assert context[0].get('data') == 'Book' assert context[1].get('confidence') == 0.5 assert context[1].get('data') == 'Film'
def testNewContextNoMetadataResultsInNewFrame(self): manager = ContextManager() entity1 = {'key': 'Grapes of Wrath', 'data': 'Book', 'confidence': 1.0} manager.inject_context(entity1) context = manager.get_context() assert len(context) == 1 assert context[0].get('confidence') == 0.5 entity2 = {'key': 'Wrath of Khan', 'data': 'Film', 'confidence': 1.0} manager.inject_context(entity2) assert len(manager.frame_stack) == 2 context = manager.get_context() assert len(context) == 2 assert context[0].get('confidence') == 0.5 assert context[0].get('data') == 'Film' assert context[1].get('confidence') == 1.0 / 3.0 assert context[1].get('data') == 'Book'
def setUp(self): self.context_manager = ContextManager() self.engine = IntentDeterminationEngine()
def restart_context_manager(self): logger.debug("Context for user {} restarted after {} seconds".format(self.username, session_timeout)) self.context_manager = ContextManager()
def __init__(self, username): self.username = username self.context_manager = ContextManager() self.context_timer = threading.Timer(session_timeout, self.restart_context_manager) self.context_timer.start()