dream
48 строк · 1.4 Кб
1import logging
2import json
3import os
4import time
5
6import numpy as np
7import sentry_sdk
8from flask import Flask, jsonify, request
9
10
11sentry_sdk.init(os.getenv("SENTRY_DSN"))
12
13logging.basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO)
14logger = logging.getLogger(__name__)
15
16app = Flask(__name__)
17
18
19with open("midas_prediction_counters.json", "r") as f:
20counters = json.load(f)
21
22
23def inference(last_midas_label, return_probas):
24global counters
25# counters['appreciation'] = {'appreciation': 0.09, 'comment': 0.15, 'opinion': 0.39, 'pos_answer': 0.13, ...}
26if return_probas:
27return counters[last_midas_label]
28else:
29# randomly choose with probability
30return np.random.choice(list(counters[last_midas_label].keys()), p=list(counters[last_midas_label].values()))
31# return max(counters[last_midas_label], key=counters[last_midas_label].get)
32
33
34@app.route("/respond", methods=["POST"])
35def respond():
36st_time = time.time()
37last_midas_labels = request.json["last_midas_labels"]
38return_probas = request.json.get("return_probas", 0)
39
40result = [inference(midas_label, return_probas) for midas_label in last_midas_labels]
41
42total_time = time.time() - st_time
43logger.info(f"midas-predictor exec time: {total_time:.3f}s")
44return jsonify(result)
45
46
47if __name__ == "__main__":
48app.run(debug=False, host="0.0.0.0", port=3000)
49