8000 add test for top intent · rsliang/botbuilder-python@80fe1f0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 80fe1f0

Browse files
committed
add test for top intent
1 parent 396691a commit 80fe1f0

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

libraries/botbuilder-ai/botbuilder/ai/luis/luis_recognizer.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,9 @@ def telemetry_client(self, value: BotTelemetryClient):
115115

116116
self._telemetry_client = value
117117

118+
@staticmethod
118119
def top_intent(
119-
self,
120-
results: RecognizerResult,
121-
default_intent: str = "None",
122-
min_score: float = 0.0,
120+
results: RecognizerResult, default_intent: str = "None", min_score: float = 0.0
123121
) -> str:
124122
"""Returns the name of the top scoring intent from a set of LUIS results.
125123
@@ -140,10 +138,10 @@ def top_intent(
140138
top_intent: str = None
141139
top_score: float = -1.0
142140
if results.intents:
143-
for intent, intent_score in results.intents.items():
144-
score = float(intent_score)
141+
for intent_name, intent_score in results.intents.items():
142+
score = intent_score.score
145143
if score > top_score and score >= min_score:
146-
top_intent = intent
144+
top_intent = intent_name
147145
top_score = score
148146

149147
return top_intent or default_intent

libraries/botbuilder-ai/botbuilder/ai/luis/recognizer_result.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ def __init__(
2323
text: str = None,
2424
altered_text: str = None,
2525
intents: Dict[str, IntentScore] = None,
26-
entities: Dict = None,
26+
entities: Dict[str, object] = None,
2727
):
2828
self._text: str = text
2929
self._altered_text: str = altered_text
3030
self._intents: Dict[str, IntentScore] = intents
31-
self._entities: Dict = entities
31+
self._entities: Dict[str, object] = entities
3232
self._properties: Dict[str, object] = {}
3333

3434
@property

libraries/botbuilder-ai/tests/luis/luis_recognizer_test.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from requests.models import Response
1212

1313
from botbuilder.ai.luis import (
14+
IntentScore,
1415
LuisApplication,
1516
LuisPredictionOptions,
1617
LuisRecognizer,
@@ -32,6 +33,12 @@ class LuisRecognizerTest(unittest.TestCase):
3233
_subscriptionKey: str = "048ec46dc58e495482b0c447cfdbd291"
3334
_endpoint: str = "https://westus.api.cognitive.microsoft.com"
3435

36+
def __init__(self, *args, **kwargs):
37+
super(LuisRecognizerTest, self).__init__(*args, **kwargs)
38+
self._mocked_results: RecognizerResult = RecognizerResult(
39+
intents={"Test": IntentScore(score=0.2), "Greeting": IntentScore(score=0.4)}
40+
)
41+
3542
def test_luis_recognizer_construction(self):
3643
# Arrange
3744
endpoint = "https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/b31aeaf3-3511-495b-a07f-571fc873214b?verbose=true&timezoneOffset=-360&subscription-key=048ec46dc58e495482b0c447cfdbd291&q="
@@ -333,6 +340,33 @@ def test_v1_datetime_resolution(self):
333340
self.assertEqual("T04", result.entities["datetime_time"][0]["time"])
334341
self.assertEqual(1, len(result.entities["$instance"]["datetime_time"]))
335342

343+
def test_top_intent_returns_top_intent(self):
344+
greeting_intent: str = LuisRecognizer.top_intent(self._mocked_results)
345+
self.assertEqual(greeting_intent, "Greeting")
346+
347+
def test_top_intent_returns_default_intent_if_min_score_is_higher(self):
348+
default_intent: str = LuisRecognizer.top_intent(
349+
self._mocked_results, min_score=0.5
350+
)
351+
self.assertEqual(default_intent, "None")
352+
353+
def test_top_intent_returns_default_intent_if_provided(self):
354+
default_intent: str = LuisRecognizer.top_intent(
355+
self._mocked_results, "Test2", 0.5
356+
)
357+
self.assertEqual(default_intent, "Test2")
358+
359+
def test_top_intent_throws_type_error_if_results_is_none(self):
360+
none_results: RecognizerResult = None
361+
with self.assertRaises(TypeError):
362+
LuisRecognizer.top_intent(none_results)
363+
364+
def test_top_intent_returns_top_intent_if_score_equals_min_score(self):
365+
default_intent: str = LuisRecognizer.top_intent(
366+
self._mocked_results, min_score=0.4
367+
)
368+
self.assertEqual(default_intent, "Greeting")
369+
336370
def assert_score(self, score: float) -> None:
337371
self.assertTrue(score >= 0)
338372
self.assertTrue(score <= 1)

0 commit comments

Comments
 (0)
0