10000 update to azure-cognitiveservices-language.* 0.2 · rsliang/botbuilder-python@60adb55 · GitHub
[go: up one dir, main page]

Skip to content

Commit 60adb55

Browse files
committed
update to azure-cognitiveservices-language.* 0.2
* update setup and requirements * add get top intent for recognizer result * add more tests
1 parent d57665a commit 60adb55

20 files changed

+3418
-8
lines changed

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright (c) Microsoft Corporation. All rights reserved.
22
# Licensed under the MIT License.
33

4-
from typing import Dict
4+
from typing import Dict, NamedTuple, Tuple
55

66
from . import IntentScore
77

@@ -136,3 +136,23 @@ def properties(self, value: Dict[str, object]) -> None:
136136
"""
137137

138138
self._properties = value
139+
140+
def get_top_scoring_intent(
141+
self
142+
) -> NamedTuple("TopIntent", intent=str, score=float):
143+
"""Return the top scoring intent and its score.
144+
145+
:return: Intent and score.
146+
:rtype: NamedTuple("TopIntent", intent=str, score=float)
147+
"""
148+
149+
if self.intents is None:
150+
raise TypeError("result.intents can't be None")
151+
152+
top_intent: Tuple[str, float] = ("", 0.0)
153+
for intent_name, intent_score in self.intents.items():
154+
score = intent_score.score
155+
if score > top_intent[1]:
156+
top_intent = (intent_name, score)
157+
158+
return top_intent
Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
msrest>=0.6.6
2-
#botframework-connector>=4.0.0.a6
32
botbuilder-schema>=4.0.0.a6
43
botbuilder-core>=4.0.0.a6
54
requests>=2.18.1
6-
#PyJWT==1.5.3
7-
#cryptography==2.1.4
8-
#aiounittest>=1.1.0
9-
azure-cognitiveservices-language-luis==0.1.0
5+
aiounittest>=1.1.0
6+
azure-cognitiveservices-language-luis==0.2.0

libraries/botbuilder-ai/setup.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66

77
REQUIRES = [
88
"aiounittest>=1.1.0",
9-
"azure-cognitiveservices-language-luis==0.1.0",
9+
"azure-cognitiveservices-language-luis==0.2.0",
1010
"botbuilder-schema>=4.0.0.a6",
11-
#"botframework-connector>=4.0.0.a6",
1211
"botbuilder-core>=4.0.0.a6",
1312
]
1413

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import json
22
import unittest
3+
from os import path
34
from unittest.mock import Mock, patch
45

56
import requests
@@ -128,10 +129,54 @@ def test_single_intent_simply_entity(self):
128129
self.assertEqual(15, result.entities["$instance"]["Name"][0]["endIndex"])
129130
self.assert_score(result.entities["$instance"]["Name"][0]["score"])
130131

132+
def test_null_utterance(self):
133+
utterance: str = None
134+
response_path: str = "SingleIntent_SimplyEntity.json" # The path is irrelevant in this case
135+
136+
result = LuisRecognizerTest._get_recognizer_result(utterance, response_path)
137+
138+
self.assertIsNotNone(result)
139+
self.assertIsNone(result.altered_text)
140+
self.assertEqual(utterance, result.text)
141+
self.assertIsNotNone(result.intents)
142+
self.assertEqual(1, len(result.intents))
143+
self.assertIsNotNone(result.intents[""])
144+
self.assertEqual(result.get_top_scoring_intent(), ("", 1.0))
145+
self.assertIsNotNone(result.entities)
146+
self.assertEqual(0, len(result.entities))
147+
131148
def assert_score(self, score: float):
132149
self.assertTrue(score >= 0)
133150
self.assertTrue(score <= 1)
134151

152+
@classmethod
153+
def _get_recognizer_result(cls, utterance: str, response_file: str):
154+
curr_dir = path.dirname(path.abspath(__file__))
155+
response_path = path.join(curr_dir, "test_data", response_file)
156+
157+
with open(response_path, "r", encoding="utf-8") as f:
158+
response_str = f.read()
159+
response_json = json.loads(response_str)
160+
161+
my_app = LuisApplication(
162+
LuisRecognizerTest._luisAppId,
163+
LuisRecognizerTest._subscriptionKey,
164+
endpoint="",
165+
)
166+
recognizer = LuisRecognizer(my_app, prediction_options=None)
167+
context = LuisRecognizerTest._get_context(utterance)
168+
response = Mock(spec=Response)
169+
response.status_code = 200
170+
response.headers = {}
171+
response.reason = ""
172+
with patch("requests.Session.send", return_value=response):
173+
with patch(
174+
"msrest.serialization.Deserializer._unpack_content",
175+
return_value=response_json,
176+
):
177+
result = recognizer.recognize(context)
178+
return result
179+
135180
@classmethod
136181
def _get_luis_recognizer(
137182
cls, verbose: bool = False, options: LuisPredictionOptions = None

0 commit comments

Comments
 (0)
0