handling case of nothing to re-baseline

This commit is contained in:
Khalim Conn-Kowlessar 2026-03-27 17:23:38 +00:00
parent d287df1b82
commit 21348e7641

View file

@ -718,58 +718,60 @@ async def model_engine(body: PlanTriggerRequest):
scoring_data = p.base_difference_record.df.copy()
rebaselining_scoring_data.append(scoring_data)
rebaselining_scoring_data = pd.concat(rebaselining_scoring_data)
rebaselining_scoring_data = (
pd.concat(rebaselining_scoring_data) if len(rebaselining_scoring_data) else pd.DataFrame([])
)
predictions_by_model_and_uprn = {}
if not rebaselining_scoring_data.empty:
logger.info(f"{rebaselining_scoring_data.shape[0]} properties require re-baselineing")
# Trigger re-scoring
rebaselining_scoring_data["is_post_sap10_starting"] = True
# Trigger re-scoring
rebaselining_scoring_data["is_post_sap10_starting"] = True
rebaselining_response = model_api.predict_all(
df=rebaselining_scoring_data,
bucket=get_settings().DATA_BUCKET,
model_prefixes=model_api.BASELINE_MODEL_PREFIXES,
extract_ids=False,
extract_uprn=True
)
rebaselining_response = model_api.predict_all(
df=rebaselining_scoring_data,
bucket=get_settings().DATA_BUCKET,
model_prefixes=model_api.BASELINE_MODEL_PREFIXES,
extract_ids=False,
extract_uprn=True
)
# Update EPC records with new model predictions
input_properties_by_uprn = {int(p.uprn): p for p in input_properties if p.uprn is not None}
# Update EPC records with new model predictions
input_properties_by_uprn = {int(p.uprn): p for p in input_properties if p.uprn is not None}
# Pre-index predictions for each model by UPRN
model_names = [
"retrofit_sap_baseline_predictions",
"retrofit_carbon_baseline_predictions",
"retrofit_heat_baseline_predictions",
]
predictions_by_model_and_uprn = {}
for model in model_names:
df = rebaselining_response[model]
predictions_by_model_and_uprn[model] = dict(zip(df["uprn"].astype(int), df["predictions"]))
# Pre-index predictions for each model by UPRN
model_names = [
"retrofit_sap_baseline_predictions",
"retrofit_carbon_baseline_predictions",
"retrofit_heat_baseline_predictions",
]
for model in model_names:
df = rebaselining_response[model]
predictions_by_model_and_uprn[model] = dict(zip(df["uprn"].astype(int), df["predictions"]))
for uprn_int in rebaselining_scoring_data["uprn"].unique().astype(int):
try:
property_instance = input_properties_by_uprn[uprn_int]
if property_instance is None:
logger.warning(f"No property found for UPRN {uprn_int} during rebaselining update.")
continue
# Gather predictions for this UPRN
for uprn_int in rebaselining_scoring_data["uprn"].unique().astype(int):
try:
new_sap = predictions_by_model_and_uprn["retrofit_sap_baseline_predictions"][uprn_int]
new_carbon = predictions_by_model_and_uprn["retrofit_carbon_baseline_predictions"][uprn_int]
new_heat_demand = predictions_by_model_and_uprn["retrofit_heat_baseline_predictions"][uprn_int]
except KeyError as e:
logger.warning(f"Missing prediction for UPRN {uprn_int}: {e}")
continue
# Update EPC record
property_instance.epc_record.insert_new_performance_values(
new_sap=new_sap,
new_epc=sap_to_epc(new_sap),
new_carbon=new_carbon,
new_heat_demand=new_heat_demand,
)
except Exception as e:
logger.error(f"Error updating EPC record for UPRN {uprn_int}: {e}")
property_instance = input_properties_by_uprn[uprn_int]
if property_instance is None:
logger.warning(f"No property found for UPRN {uprn_int} during rebaselining update.")
continue
# Gather predictions for this UPRN
try:
new_sap = predictions_by_model_and_uprn["retrofit_sap_baseline_predictions"][uprn_int]
new_carbon = predictions_by_model_and_uprn["retrofit_carbon_baseline_predictions"][uprn_int]
new_heat_demand = predictions_by_model_and_uprn["retrofit_heat_baseline_predictions"][uprn_int]
except KeyError as e:
logger.warning(f"Missing prediction for UPRN {uprn_int}: {e}")
continue
# Update EPC record
property_instance.epc_record.insert_new_performance_values(
new_sap=new_sap,
new_epc=sap_to_epc(new_sap),
new_carbon=new_carbon,
new_heat_demand=new_heat_demand,
)
except Exception as e:
logger.error(f"Error updating EPC record for UPRN {uprn_int}: {e}")
kwh_client = KwhData(bucket=get_settings().DATA_BUCKET, read_consumption_data=True)