dream

Форк
0
120 строк · 4.2 Кб
1
#!/usr/bin/env python
2

3
import logging
4
import time
5
import re
6
import random
7
import json
8
import collections
9

10
from flask import Flask, request, jsonify
11
from os import getenv
12
import sentry_sdk
13

14

15
sentry_sdk.init(getenv("SENTRY_DSN"))
16

17
logging.basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO)
18
logger = logging.getLogger(__name__)
19

20
app = Flask(__name__)
21

22
fun_facts = json.load(open("./content/fun_facts.json"))
23
forty_niner_fun_facts = json.load(open("./content/49_fun_facts.json"))
24
chiefs_fun_facts = json.load(open("./content/chiefs_fun_facts.json"))
25

26

27
@app.route("/respond", methods=["POST"])
28
def respond():
29
    st_time = time.time()
30
    last_utter_batch = request.json["sentences"]
31
    responses = []
32

33
    for last_utter in last_utter_batch:
34
        response_text, confidence = dialog_segment_handler(last_utter)
35
        logger.info(f"Last_utter: {last_utter}")
36
        logger.info(f"Response_text: {response_text}")
37

38
        responses.append((response_text, confidence))
39

40
    total_time = time.time() - st_time
41
    logger.info(f"super bowl skill exec time: {total_time:.3f}s")
42
    return jsonify(responses)
43

44

45
ANY_PATTERN = r"(['a-zA-z ]+)?"
46

47

48
def add_ANY_PATTERN(ordered_key_regs):
49
    regs = ANY_PATTERN.join(ordered_key_regs)
50
    return regs
51

52

53
def merge_regs(regs):
54
    return "|".join([f"({reg})" for reg in regs])
55

56

57
def compile_regs(dictionary):
58
    for key in dictionary.keys():
59
        dictionary[key] = re.compile(dictionary[key])
60
    return dictionary
61

62

63
dialog_segment_regs = collections.OrderedDict()
64
#  ordered by priority
65
# dialog_segment_regs["who_wins"] = add_ANY_PATTERN([r"(who|which)", r"(win|make|won)", "super", r"bowls?(\s|$)"])
66
# dialog_segment_regs["who_goes"] = add_ANY_PATTERN(
67
#     [r"(who)", r"(going|gonna|play|will be in)", r"^(win|make)", "super", r"bowls?(\s|$)"]
68
# )
69
# dialog_segment_regs["what_time"] = add_ANY_PATTERN([r"(what)", r"(time)", "super", r"bowls?(\s|$)"])
70
dialog_segment_regs["fun_facts"] = add_ANY_PATTERN([r"(fact|anything|something)", r"about", "super", r"bowls?(\s|$)"])
71
dialog_segment_regs["talk_about"] = add_ANY_PATTERN([r"(talk|chat|say|speak|tell)", r"about", "super", r"bowls?(\s|$)"])
72
dialog_segment_regs["forty_niner"] = merge_regs(
73
    [
74
        add_ANY_PATTERN([r"forty niner", "super", r"bowls?(\s|$)"]),
75
        add_ANY_PATTERN([r"super", r"bowls?\s", "forty niner"]),
76
    ]
77
)
78
dialog_segment_regs["chiefs"] = merge_regs(
79
    [add_ANY_PATTERN([r"chief", "super", r"bowls?(\s|$)"]), add_ANY_PATTERN([r"super", r"bowls?\s", "chief"])]
80
)
81
dialog_segment_regs["what_about"] = add_ANY_PATTERN([r"what about (the )?super bowls?(\s|$)"])
82
dialog_segment_regs["super_bowl"] = add_ANY_PATTERN([r"(the )?super bowls?(\s|$)"])
83

84
faq_candidetes = {
85
    # "who_wins": ["The wait for the Kansas City Chiefs -- and for their head coach -- is finally over."
86
    #              "A half century after winning their first Super Bowl, the Chiefs are champions once more,"
87
    #              "winning Super Bowl LIV in epic fashion at Hard Rock Stadium."],
88
    # "who_goes": ["The Kansas City Chiefs and San Francisco 49ers are set to face off in Super Bowl 2020."],
89
    # "what_time": [
90
    #     "The Super Bowl in 2020, the game that will crown an NFL champion for the 2019 season, is scheduled"
91
    #     " to take place Sunday, February 2 at Hard Rock Stadium in Miami Gardens, Florida."
92
    #     " The 49ers will play the Chiefs."
93
    # ],
94
    "fun_facts": fun_facts,
95
    "talk_about": fun_facts,
96
    "forty_niner": forty_niner_fun_facts,
97
    "chiefs": chiefs_fun_facts,
98
    "what_about": fun_facts,
99
    "super_bowl": fun_facts,
100
}
101
dialog_segment_regs = compile_regs(dialog_segment_regs)
102

103

104
def dialog_segment_handler(last_utter):
105
    response = ""
106
    confidence = 0.0
107
    curr_user_uttr = last_utter.lower()
108

109
    active_segments = [
110
        segment_name for segment_name, segment_reg in dialog_segment_regs.items() if segment_reg.search(curr_user_uttr)
111
    ]
112
    logger.info(f"active_segments: {active_segments}")
113
    if active_segments:
114
        response = random.choice(faq_candidetes[active_segments[0]])
115
        confidence = 1.0 if len(active_segments) > 1 else 0.8
116
    return response, confidence
117

118

119
if __name__ == "__main__":
120
    app.run(debug=False, host="0.0.0.0", port=3000)
121

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.