Esempio n. 1
0
 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
Esempio n. 2
0
 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)
Esempio n. 3
0
    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.")
Esempio n. 4
0
 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
Esempio n. 5
0
    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'
Esempio n. 6
0
    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'
Esempio n. 7
0
 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()