Files
PolyWeather/frontend/lib/model-utils.ts
T
2569718930@qq.com a684586cb4 统一 DEB 数据源为单一计算路径
getModelView 优先使用根级 detail.deb.prediction 保证与 AI 证据面板一致,
_build_city_detail_payload 补上缺失的 deb 和 multi_model_daily 字段,
_analyze_summary 补上 LGBM 增强步骤使其与 _analyze 产出相同的 DEB 值。

Constraint: 三个入口 (panel/full/summary) 的 DEB 必须经过同一套 calculate_dynamic_weights + LGBM 重算流程
Tested: ruff + tsc 全过
2026-05-06 18:24:15 +08:00

53 lines
1.6 KiB
TypeScript

import type { CityDetail } from "@/lib/dashboard-types";
export function getProbabilityView(detail: CityDetail, targetDate?: string | null) {
const date = targetDate || detail.local_date;
if (date === detail.local_date) {
return {
calibrationMode: detail.probabilities?.calibration_mode ?? null,
calibrationVersion: detail.probabilities?.calibration_version ?? null,
engine: detail.probabilities?.engine ?? null,
mu: detail.probabilities?.mu ?? null,
probabilities: detail.probabilities?.distribution || [],
probabilitiesAll:
detail.probabilities?.distribution_all ||
detail.probabilities?.distribution ||
[],
shadowProbabilities: detail.probabilities?.shadow_distribution || [],
shadowProbabilitiesAll:
detail.probabilities?.shadow_distribution_all ||
detail.probabilities?.shadow_distribution ||
[],
};
}
const daily = detail.multi_model_daily?.[date];
return {
calibrationMode: null,
calibrationVersion: null,
engine: null,
mu: daily?.deb?.prediction ?? null,
probabilities: daily?.probabilities || [],
probabilitiesAll: daily?.probabilities_all || daily?.probabilities || [],
shadowProbabilities: [],
shadowProbabilitiesAll: [],
};
}
export function getModelView(detail: CityDetail, targetDate?: string | null) {
const date = targetDate || detail.local_date;
const daily = detail.multi_model_daily?.[date];
const deb = detail.deb?.prediction ?? daily?.deb?.prediction ?? null;
if (daily) {
return {
deb,
models: daily.models || {},
};
}
return {
deb,
models: detail.multi_model || {},
};
}