AI UPDATE
This commit is contained in:
@@ -1,6 +1,22 @@
|
||||
from datetime import date, timedelta
|
||||
from __future__ import annotations
|
||||
|
||||
from dashboard_data.card_utils import average, safe_number
|
||||
from datetime import date
|
||||
|
||||
from plant.gdd import predict_harvest_from_forecasts
|
||||
|
||||
|
||||
def _harvest_language(prediction: dict, plant_name: str, ai_bundle: dict | None = None) -> str:
|
||||
ai_bundle = ai_bundle or {}
|
||||
ai_payload = ai_bundle.get("harvestPredictionCard", {}) if isinstance(ai_bundle, dict) else {}
|
||||
description = ai_payload.get("description")
|
||||
if isinstance(description, str) and description.strip():
|
||||
return description.strip()
|
||||
|
||||
return (
|
||||
f"برای {plant_name}، رشد تجمعی بر اساس مدل GDD محاسبه شده است. "
|
||||
f"تا امروز {prediction['current_cumulative_gdd']} واحد-روز رشد ثبت شده و "
|
||||
f"برای رسیدن به بلوغ حدود {prediction['remaining_gdd']} واحد-روز دیگر نیاز است."
|
||||
)
|
||||
|
||||
|
||||
def build_harvest_prediction_card(sensor_id: str, context: dict | None = None, ai_bundle: dict | None = None) -> dict:
|
||||
@@ -8,19 +24,19 @@ def build_harvest_prediction_card(sensor_id: str, context: dict | None = None, a
|
||||
forecasts = context.get("forecasts", [])
|
||||
plants = context.get("plants", [])
|
||||
|
||||
avg_temp = average([forecast.temperature_mean for forecast in forecasts], default=24)
|
||||
moisture_factor = safe_number(getattr(context.get("sensor"), "soil_moisture", None), 50)
|
||||
days_until = max(10, int(90 - avg_temp - (moisture_factor / 5)))
|
||||
target_date = date.today() + timedelta(days=days_until)
|
||||
window_start = target_date - timedelta(days=3)
|
||||
window_end = target_date + timedelta(days=3)
|
||||
plant_name = plants[0].name if plants else "محصول"
|
||||
plant = plants[0] if plants else None
|
||||
plant_name = plant.name if plant else "محصول"
|
||||
prediction = predict_harvest_from_forecasts(forecasts=forecasts, plant=plant).__dict__
|
||||
target_date = date.fromisoformat(prediction["predicted_harvest_date"])
|
||||
window_start = date.fromisoformat(prediction["predicted_harvest_window"]["start"])
|
||||
window_end = date.fromisoformat(prediction["predicted_harvest_window"]["end"])
|
||||
|
||||
return {
|
||||
"date": str(target_date),
|
||||
"date": prediction["predicted_harvest_date"],
|
||||
"dateFormatted": f"{target_date.day} {target_date.strftime('%B')} {target_date.year}",
|
||||
"daysUntil": days_until,
|
||||
"description": f"بر اساس دمای فعلی، رطوبت خاک و اطلاعات {plant_name}. بازه بهینه برداشت محاسبه شده است.",
|
||||
"optimalWindowStart": str(window_start),
|
||||
"optimalWindowEnd": str(window_end),
|
||||
"daysUntil": prediction["estimated_days_to_harvest"],
|
||||
"description": _harvest_language(prediction, plant_name=plant_name, ai_bundle=ai_bundle),
|
||||
"optimalWindowStart": window_start.isoformat(),
|
||||
"optimalWindowEnd": window_end.isoformat(),
|
||||
"gddDetails": prediction,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user