def test_get_greatest_confidence(self): statement = 'Hello' options = [ (0.50, 'Hello'), (0.85, 'Hello'), (0.42, 'Hello') ] value = utils.get_greatest_confidence(statement, options) self.assertEqual(value, 0.85)
def generate_response(self, input_statement, additional_response_selection_parameters=None): """ Return a response based on a given input statement. :param input_statement: The input statement to be processed. """ from collections import Counter results = [] result = None max_confidence = -1 for adapter in self.logic_adapters: if adapter.can_process(input_statement): output = adapter.process(input_statement, additional_response_selection_parameters) results.append((output.confidence, output, )) self.logger.info( '{} selected "{}" as a response with a confidence of {}'.format( adapter.class_name, output.text, output.confidence ) ) if output.confidence > max_confidence: result = output max_confidence = output.confidence else: self.logger.info( 'Not processing the statement using {}'.format(adapter.class_name) ) # If multiple adapters agree on the same statement, # then that statement is more likely to be the correct response if len(results) >= 3: statements = tuple( s[1] for s in results ) count = Counter(statements) most_common = count.most_common() if most_common[0][1] > 1: result = most_common[0][0] max_confidence = utils.get_greatest_confidence(result, results) response = Statement( text=result.text, in_response_to=input_statement.text, conversation=input_statement.conversation, persona='bot:' + self.name ) response.confidence = max_confidence return response
def generate_response(self, input_statement): """ Return a response based on a given input statement. :param input_statement: The input statement to be processed. """ from collections import Counter results = [] result = None max_confidence = -1 for adapter in self.get_logic_adapters(): if adapter.can_process(input_statement): output = adapter.process(input_statement) results.append((output.confidence, output, )) self.logger.info( '{} selected "{}" as a response with a confidence of {}'.format( adapter.class_name, output.text, output.confidence ) ) if output.confidence > max_confidence: result = output max_confidence = output.confidence else: self.logger.info( 'Not processing the statement using {}'.format(adapter.class_name) ) # If multiple adapters agree on the same statement, # then that statement is more likely to be the correct response if len(results) >= 3: statements = tuple( s[1] for s in results ) count = Counter(statements) most_common = count.most_common() if most_common[0][1] > 1: result = most_common[0][0] max_confidence = utils.get_greatest_confidence(result, results) result.confidence = max_confidence result.conversation = input_statement.conversation result.persona = 'bot:' + self.name return result