Spaces:
Build error
Build error
File size: 4,392 Bytes
0827183 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from typing import Dict
from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
from azure.cognitiveservices.language.luis.runtime.models import LuisResult
from msrest.authentication import CognitiveServicesCredentials
from botbuilder.core import (
TurnContext,
RecognizerResult,
)
from .luis_recognizer_internal import LuisRecognizerInternal
from .luis_recognizer_options_v2 import LuisRecognizerOptionsV2
from .luis_application import LuisApplication
from .luis_util import LuisUtil
from .activity_util import ActivityUtil
class LuisRecognizerV2(LuisRecognizerInternal):
# The value type for a LUIS trace activity.
luis_trace_type: str = "https://www.luis.ai/schemas/trace"
# The context label for a LUIS trace activity.
luis_trace_label: str = "Luis Trace"
def __init__(
self,
luis_application: LuisApplication,
luis_recognizer_options_v2: LuisRecognizerOptionsV2 = None,
):
super().__init__(luis_application)
credentials = CognitiveServicesCredentials(luis_application.endpoint_key)
self._runtime = LUISRuntimeClient(luis_application.endpoint, credentials)
self._runtime.config.add_user_agent(LuisUtil.get_user_agent())
self._runtime.config.connection.timeout = (
luis_recognizer_options_v2.timeout // 1000
)
self.luis_recognizer_options_v2 = (
luis_recognizer_options_v2 or LuisRecognizerOptionsV2()
)
self._application = luis_application
async def recognizer_internal(self, turn_context: TurnContext):
utterance: str = (
turn_context.activity.text if turn_context.activity is not None else None
)
luis_result: LuisResult = self._runtime.prediction.resolve(
self._application.application_id,
utterance,
timezone_offset=self.luis_recognizer_options_v2.timezone_offset,
verbose=self.luis_recognizer_options_v2.include_all_intents,
staging=self.luis_recognizer_options_v2.staging,
spell_check=self.luis_recognizer_options_v2.spell_check,
bing_spell_check_subscription_key=self.luis_recognizer_options_v2.bing_spell_check_subscription_key,
log=(
self.luis_recognizer_options_v2.log
if self.luis_recognizer_options_v2.log is not None
else True
),
)
recognizer_result: RecognizerResult = RecognizerResult(
text=utterance,
altered_text=luis_result.altered_query,
intents=LuisUtil.get_intents(luis_result),
entities=LuisUtil.extract_entities_and_metadata(
luis_result.entities,
luis_result.composite_entities,
(
self.luis_recognizer_options_v2.include_instance_data
if self.luis_recognizer_options_v2.include_instance_data is not None
else True
),
),
)
LuisUtil.add_properties(luis_result, recognizer_result)
if self.luis_recognizer_options_v2.include_api_results:
recognizer_result.properties["luisResult"] = luis_result
await self._emit_trace_info(
turn_context,
luis_result,
recognizer_result,
self.luis_recognizer_options_v2,
)
return recognizer_result
async def _emit_trace_info(
self,
turn_context: TurnContext,
luis_result: LuisResult,
recognizer_result: RecognizerResult,
options: LuisRecognizerOptionsV2,
) -> None:
trace_info: Dict[str, object] = {
"recognizerResult": LuisUtil.recognizer_result_as_dict(recognizer_result),
"luisModel": {"ModelID": self._application.application_id},
"luisOptions": {"Staging": options.staging},
"luisResult": LuisUtil.luis_result_as_dict(luis_result),
}
trace_activity = ActivityUtil.create_trace(
turn_context.activity,
"LuisRecognizer",
trace_info,
LuisRecognizerV2.luis_trace_type,
LuisRecognizerV2.luis_trace_label,
)
await turn_context.send_activity(trace_activity)
|