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 Callable, Dict
from recognizers_number import recognize_number
from recognizers_text import Culture, ModelResult
from babel.numbers import parse_decimal
from botbuilder.core.turn_context import TurnContext
from botbuilder.schema import ActivityTypes
from .prompt import Prompt, PromptValidatorContext
from .prompt_options import PromptOptions
from .prompt_recognizer_result import PromptRecognizerResult
class NumberPrompt(Prompt):
# TODO: PromptValidator needs to be fixed
# Does not accept answer as intended (times out)
def __init__(
self,
dialog_id: str,
validator: Callable[[PromptValidatorContext], bool] = None,
default_locale: str = None,
):
super(NumberPrompt, 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("NumberPrompt.on_prompt(): turn_context cannot be None.")
if not options:
raise TypeError("NumberPrompt.on_prompt(): options cannot be None.")
if is_retry and options.retry_prompt is not None:
await turn_context.send_activity(options.retry_prompt)
elif 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("NumberPrompt.on_recognize(): turn_context cannot be None.")
result = PromptRecognizerResult()
if turn_context.activity.type == ActivityTypes.message:
utterance = turn_context.activity.text
if not utterance:
return result
culture = self._get_culture(turn_context)
results: [ModelResult] = recognize_number(utterance, culture)
if results:
result.succeeded = True
result.value = parse_decimal(
results[0].resolution["value"], locale=culture.replace("-", "_")
)
return result
def _get_culture(self, turn_context: TurnContext):
culture = (
turn_context.activity.locale
if turn_context.activity.locale
else self.default_locale
)
if not culture:
culture = Culture.English
return culture