49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
"""Small talk responses."""
|
||
|
||
from __future__ import annotations
|
||
|
||
import random
|
||
import re
|
||
from typing import Optional
|
||
|
||
|
||
_SMALLTALK_PHRASES = {
|
||
"как дела",
|
||
"как делишки",
|
||
"как поживаешь",
|
||
"как жизнь",
|
||
"как ты",
|
||
"как сам",
|
||
"как себя чувствуешь",
|
||
"как настроение",
|
||
"что нового",
|
||
"как оно",
|
||
"как дела у тебя",
|
||
}
|
||
|
||
_SMALLTALK_RESPONSES = [
|
||
"Все нормально, спасибо. А у тебя?",
|
||
"Хорошо, спасибо. Чем помочь?",
|
||
"Нормально. Что-то нужно?",
|
||
"Все в порядке. Как ты?",
|
||
"Отлично. Слушаю тебя.",
|
||
]
|
||
|
||
|
||
def _normalize_smalltalk_text(text: str) -> str:
|
||
normalized = text.lower().replace("ё", "е")
|
||
normalized = re.sub(r"[^\w\s]+", " ", normalized, flags=re.UNICODE)
|
||
normalized = re.sub(r"\s+", " ", normalized, flags=re.UNICODE).strip()
|
||
return normalized
|
||
|
||
|
||
def get_smalltalk_response(text: str) -> Optional[str]:
|
||
if not text:
|
||
return None
|
||
|
||
normalized = _normalize_smalltalk_text(text)
|
||
if normalized in _SMALLTALK_PHRASES:
|
||
return random.choice(_SMALLTALK_RESPONSES)
|
||
|
||
return None
|