| import platform |
| import pickle |
| import os |
|
|
| |
| |
| |
| import sentiment_deploy |
|
|
| from flask import Flask, jsonify, request |
| from flask_cors import CORS |
|
|
| |
| GROUP_ID = 'modelling-giants' |
| MODEL_FILE = 'route_c_bertweet_large_fp16.model' |
| MODEL_VERSION = 'v1.1-large-retrained' |
|
|
|
|
| def batch_predict(model, items): |
| |
| texts = [item['text'] for item in items] |
| X = model['vectorizer'].transform(texts) |
| labels = model['classifier'].predict(X) |
| return [ |
| {"id": item['id'], "label": int(label)} |
| for item, label in zip(items, labels) |
| ] |
|
|
|
|
| |
| |
| |
|
|
| app = Flask(__name__) |
| CORS(app) |
|
|
| with open(MODEL_FILE, 'rb') as file: |
| model = pickle.load(file) |
|
|
| meta_data = { |
| "groupID": GROUP_ID, |
| "modelFile": MODEL_FILE, |
| "modelVersion": MODEL_VERSION, |
| "pythonVersion": platform.python_version() |
| } |
|
|
|
|
| @app.route("/", methods=['GET', 'POST']) |
| def main(): |
| if request.method == 'POST': |
| items = request.json['items'] |
| return jsonify({"items": batch_predict(model, items)}) |
| else: |
| return jsonify({"meta": meta_data}) |
|
|
|
|
| if __name__ == "__main__": |
| port = int(os.environ.get("PORT", 8000)) |
| app.run(host="0.0.0.0", port=port, debug=True) |
|
|