cohit's picture
Upload folder using huggingface_hub
0827183 verified
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from typing import Dict
from recognizers_date_time import recognize_datetime
from botbuilder.core.turn_context import TurnContext
from botbuilder.schema import ActivityTypes
from .datetime_resolution import DateTimeResolution
from .prompt import Prompt
from .prompt_options import PromptOptions
from .prompt_recognizer_result import PromptRecognizerResult
class DateTimePrompt(Prompt):
def __init__(
self, dialog_id: str, validator: object = None, default_locale: str = None
):
super(DateTimePrompt, self).__init__(dialog_id, validator)
self.default_locale = default_locale
async def on_prompt(
self,
turn_context: TurnContext,
state: Dict[str, object],
options: PromptOptions,
is_retry: bool,
):
if not turn_context:
raise TypeError("DateTimePrompt.on_prompt(): turn_context cannot be None.")
if not options:
raise TypeError("DateTimePrompt.on_prompt(): options cannot be None.")
if is_retry and options.retry_prompt is not None:
await turn_context.send_activity(options.retry_prompt)
else:
if options.prompt is not None:
await turn_context.send_activity(options.prompt)
async def on_recognize(
self,
turn_context: TurnContext,
state: Dict[str, object],
options: PromptOptions,
) -> PromptRecognizerResult:
if not turn_context:
raise TypeError(
"DateTimePrompt.on_recognize(): turn_context cannot be None."
)
result = PromptRecognizerResult()
if turn_context.activity.type == ActivityTypes.message:
# Recognize utterance
utterance = turn_context.activity.text
if not utterance:
return result
# TODO: English constant needs to be ported.
culture = (
turn_context.activity.locale
if turn_context.activity.locale is not None
else "English"
)
results = recognize_datetime(utterance, culture)
if results:
result.succeeded = True
result.value = []
values = results[0].resolution["values"]
for value in values:
result.value.append(self.read_resolution(value))
return result
def read_resolution(self, resolution: Dict[str, str]) -> DateTimeResolution:
result = DateTimeResolution()
if "timex" in resolution:
result.timex = resolution["timex"]
if "value" in resolution:
result.value = resolution["value"]
if "start" in resolution:
result.start = resolution["start"]
if "end" in resolution:
result.end = resolution["end"]
return result