dream

Форк
0
73 строки · 2.5 Кб
1
#!/usr/bin/env python
2

3
import logging
4
import numpy as np
5
import time
6
import requests
7

8
from flask import Flask, request, jsonify
9
from os import getenv
10
import sentry_sdk
11

12

13
sentry_sdk.init(getenv("SENTRY_DSN"))
14

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

18
app = Flask(__name__)
19

20
BADLIST_URL = getenv("BADLIST_ANNOTATOR_URL", "http://badlisted-words:8018/badlisted_words_batch")
21
FILTER_BADLISTED_WORDS = getenv("FILTER_BADLISTED_WORDS", 0)
22

23

24
@app.route("/respond", methods=["POST"])
25
def respond():
26
    st_time = time.time()
27
    dialogs = request.json["dialogs"]
28
    response_candidates = [dialog["utterances"][-1]["hypotheses"] for dialog in dialogs]
29

30
    selected_skill_names = []
31
    selected_responses = []
32
    selected_confidences = []
33

34
    for i, dialog in enumerate(dialogs):
35
        confidences = []
36
        responses = []
37
        skill_names = []
38

39
        for skill_data in response_candidates[i]:
40
            if skill_data["text"] and skill_data["confidence"]:
41
                logger.info(f"Skill {skill_data['skill_name']} returned non-empty hypothesis with non-zero confidence.")
42

43
            if FILTER_BADLISTED_WORDS:
44
                try:
45
                    badlist_result = requests.post(
46
                        BADLIST_URL, json={"sentences": [skill_data["text"]]}, timeout=1.5
47
                    ).json()[0]["batch"][0]
48
                except Exception as exc:
49
                    logger.exception(exc)
50
                    sentry_sdk.capture_exception(exc)
51
                    badlist_result = {"bad_words": False}
52
                if not badlist_result["bad_words"]:
53
                    confidences += [skill_data["confidence"]]
54
                    responses += [skill_data["text"]]
55
                    skill_names += [skill_data["skill_name"]]
56
            else:
57
                confidences += [skill_data["confidence"]]
58
                responses += [skill_data["text"]]
59
                skill_names += [skill_data["skill_name"]]
60

61
        best_id = np.argmax(confidences)
62

63
        selected_skill_names.append(skill_names[best_id])
64
        selected_responses.append(responses[best_id])
65
        selected_confidences.append(confidences[best_id])
66

67
    total_time = time.time() - st_time
68
    logger.info(f"confidence_based_response_selector exec time = {total_time:.3f}s")
69
    return jsonify(list(zip(selected_skill_names, selected_responses, selected_confidences)))
70

71

72
if __name__ == "__main__":
73
    app.run(debug=False, host="0.0.0.0", port=3000)
74

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

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

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

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