1
0
Fork 0
wgz_forecast/run.py

104 lines
3.8 KiB
Python

from flask import request, Flask, jsonify
from pv.pv_inference import load_model, pv_forecast
from carbon.carbon_inference import load_carbon_model,carbon_forecast
from water.water_inference import load_water_model,water_forecast
from load.load_inference import load_load_model,load_forecast
from logzero import logger
import numpy as np
app = Flask(__name__)
pv_model_gbm = load_model('./pv/models/pv_pred.joblib')
carbon_model_gbm = load_carbon_model('./carbon/models/carbon_pred.joblib')
water_model_gbm = load_water_model('./water/models/water_pred.joblib')
load_model_gbm = load_load_model('./load/models/load_pred.joblib')
@app.route('/pv', methods=['POST'])
def run_pv_forecast():
try:
data = request.json
if not data or 'inputs' not in data:
return jsonify({"error": "Invalid data"}), 400
inputs = data.get('inputs')
# 转为1维数组
inputs = np.array(inputs)
if inputs.ndim != 1:
inputs = inputs.flatten()
logger.info(f"pv history inputs: {inputs}")
# 调用预测函数
out = pv_forecast(inputs, pv_model_gbm)
# 将 NumPy 数组转换为列表
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
return jsonify(results), 200
except Exception as e:
logger.error(f"Error in pv_forecast: {e}", exc_info=True)
return jsonify({"error": str(e)}), 500
@app.route('/carbon', methods=['POST'])
def run_carbon_forecast():
try:
data = request.json
if not data or 'inputs' not in data:
return jsonify({"error": "Invalid data"}), 400
inputs = data.get('inputs')
# 转为1维数组
inputs = np.array(inputs)
if inputs.ndim != 1:
inputs = inputs.flatten()
logger.info(f"carbon history inputs: {inputs}")
# 调用预测函数
out = carbon_forecast(inputs, carbon_model_gbm)
# 将 NumPy 数组转换为列表
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
return jsonify(results), 200
except Exception as e:
logger.error(f"Error in carbon_forecast: {e}", exc_info=True)
return jsonify({"error": str(e)}), 500
@app.route('/water', methods=['POST'])
def run_water_forecast():
try:
data = request.json
if not data or 'inputs' not in data:
return jsonify({"error": "Invalid data"}), 400
inputs = data.get('inputs')
# 转为1维数组
inputs = np.array(inputs)
if inputs.ndim != 1:
inputs = inputs.flatten()
logger.info(f"water history inputs: {inputs}")
# 调用预测函数
out = water_forecast(inputs, water_model_gbm)
# 将 NumPy 数组转换为列表
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
return jsonify(results), 200
except Exception as e:
logger.error(f"Error in water_forecast: {e}", exc_info=True)
return jsonify({"error": str(e)}), 500
@app.route('/load', methods=['POST'])
def run_load_forecast():
try:
data = request.json
if not data or 'inputs' not in data:
return jsonify({"error": "Invalid data"}), 400
inputs = data.get('inputs')
# 转为1维数组
inputs = np.array(inputs)
if inputs.ndim != 1:
inputs = inputs.flatten()
logger.info(f"load history inputs: {inputs}")
# 调用预测函数
out = load_forecast(inputs, load_model_gbm)
# 将 NumPy 数组转换为列表
results = {"result": out.tolist()} # 使用 .tolist() 转换为列表
return jsonify(results), 200
except Exception as e:
logger.error(f"Error in load_forecast: {e}", exc_info=True)
return jsonify({"error": str(e)}), 500
if __name__=='__main__':
app.run(host='0.0.0.0', port='2467')