Clarify model API source and simplify probability hints
This commit is contained in:
@@ -1001,87 +1001,36 @@
|
||||
border: 1px solid rgba(251, 113, 133, 0.26);
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
margin-bottom: 8px;
|
||||
padding: 10px;
|
||||
border: 1px solid rgba(148, 163, 184, 0.14);
|
||||
border-radius: 8px;
|
||||
background: rgba(15, 23, 42, 0.34);
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-head) {
|
||||
.root :global(.prob-model-hint) {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px;
|
||||
margin-bottom: 10px;
|
||||
padding: 7px 9px;
|
||||
border: 1px solid rgba(148, 163, 184, 0.14);
|
||||
border-radius: 8px;
|
||||
background: rgba(15, 23, 42, 0.22);
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-head span) {
|
||||
color: var(--text-primary);
|
||||
font-size: 12px;
|
||||
.root :global(.prob-model-hint span) {
|
||||
color: var(--cyan);
|
||||
font-size: 11px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-head em) {
|
||||
.root :global(.prob-model-hint strong) {
|
||||
color: var(--text-secondary);
|
||||
font-size: 11px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.root :global(.prob-model-hint em) {
|
||||
color: var(--text-muted);
|
||||
font-size: 11px;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-grid) {
|
||||
display: grid;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-row) {
|
||||
display: grid;
|
||||
grid-template-columns: 64px minmax(0, 1fr);
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-row > span) {
|
||||
color: var(--text-primary);
|
||||
font-size: 12px;
|
||||
font-weight: 800;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-track) {
|
||||
position: relative;
|
||||
height: 18px;
|
||||
overflow: hidden;
|
||||
border-radius: 6px;
|
||||
background: rgba(148, 163, 184, 0.1);
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-fill) {
|
||||
height: 100%;
|
||||
border-radius: 6px;
|
||||
background: linear-gradient(90deg, rgba(20, 184, 166, 0.62), rgba(34, 211, 238, 0.88));
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote-track strong) {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 8px;
|
||||
transform: translateY(-50%);
|
||||
color: var(--text-primary);
|
||||
font-size: 11px;
|
||||
line-height: 1;
|
||||
text-shadow: 0 1px 2px rgba(2, 6, 23, 0.85);
|
||||
}
|
||||
|
||||
.root :global(.prob-model-vote p) {
|
||||
margin: 0;
|
||||
color: var(--text-muted);
|
||||
font-size: 11px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
/* ── Model Bars ── */
|
||||
.root :global(.model-bars) {
|
||||
display: flex;
|
||||
|
||||
@@ -584,6 +584,13 @@ export function ProbabilityDistribution({
|
||||
() => getRoundedModelVoteDistribution(detail, targetDate),
|
||||
[detail, targetDate],
|
||||
);
|
||||
const modelVoteHint = modelVoteView.rows
|
||||
.slice(0, 2)
|
||||
.map(
|
||||
(row) =>
|
||||
`${row.value}${detail.temp_symbol} ${row.count}/${modelVoteView.total}`,
|
||||
)
|
||||
.join(" · ");
|
||||
const marketTopBuckets = isToday ? getMarketTopBuckets(marketScan) : [];
|
||||
const sortedMarketTopBuckets = useMemo(() => {
|
||||
const sorted = [...marketTopBuckets].sort(
|
||||
@@ -639,44 +646,17 @@ export function ProbabilityDistribution({
|
||||
: `市场概率(该温度桶): ${marketYesText}`}
|
||||
</div>
|
||||
)}
|
||||
{modelVoteView.rows.length > 0 && (
|
||||
<div className="prob-model-vote">
|
||||
<div className="prob-model-vote-head">
|
||||
<span>
|
||||
{locale === "en-US"
|
||||
? "Rounded model-vote baseline"
|
||||
: "模型四舍五入票数基线"}
|
||||
</span>
|
||||
<em>
|
||||
{locale === "en-US"
|
||||
? `${modelVoteView.total} sources after family dedup`
|
||||
: `家族去重后 ${modelVoteView.total} 个来源`}
|
||||
</em>
|
||||
</div>
|
||||
<div className="prob-model-vote-grid">
|
||||
{modelVoteView.rows.slice(0, 4).map((row) => (
|
||||
<div key={row.value} className="prob-model-vote-row">
|
||||
<span>
|
||||
{row.value}
|
||||
{detail.temp_symbol}
|
||||
</span>
|
||||
<div className="prob-model-vote-track">
|
||||
<div
|
||||
className="prob-model-vote-fill"
|
||||
style={{ width: `${Math.max(row.percent * 100, 8)}%` }}
|
||||
/>
|
||||
<strong>
|
||||
{row.count}/{modelVoteView.total}
|
||||
</strong>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<p>
|
||||
{modelVoteHint && (
|
||||
<div className="prob-model-hint">
|
||||
<span>
|
||||
{locale === "en-US" ? "Model vote reference" : "模型投票参考"}
|
||||
</span>
|
||||
<strong>{modelVoteHint}</strong>
|
||||
<em>
|
||||
{locale === "en-US"
|
||||
? "This is a transparent model-count baseline, not the calibrated settlement probability."
|
||||
: "这是透明模型票数基线,不等同于经过实测下限与历史 MAE 校准后的结算概率。"}
|
||||
</p>
|
||||
? "shown for explanation only"
|
||||
: "仅用于解释,不作为结算概率"}
|
||||
</em>
|
||||
</div>
|
||||
)}
|
||||
{useMarketTopBuckets ? (
|
||||
@@ -909,7 +889,7 @@ export function ModelForecast({
|
||||
</span>
|
||||
{metadataSource && (
|
||||
<span>
|
||||
{locale === "en-US" ? "Source" : "来源"} ·{" "}
|
||||
{locale === "en-US" ? "API" : "接口"} ·{" "}
|
||||
<strong>{metadataSource}</strong>
|
||||
</span>
|
||||
)}
|
||||
|
||||
@@ -198,7 +198,7 @@ export const DOCS_PAGES: DocsPage[] = [
|
||||
id: "display",
|
||||
title: "网页上如何展示",
|
||||
blocks: [
|
||||
{ type: "paragraph", text: "网页的“模型区间与分歧”会按全球基准、AIFS 模型、欧洲高分辨率、北美高分辨率分组显示,并展示可用模型数量、模型分歧、来源、模型名称、分辨率和预报时效。没有覆盖的区域模型不会显示。" },
|
||||
{ type: "paragraph", text: "网页的“模型区间与分歧”会按全球基准、AIFS 模型、欧洲高分辨率、北美高分辨率分组显示,并展示可用模型数量、模型分歧、模型机构、接入接口、模型名称、分辨率和预报时效。没有覆盖的区域模型不会显示。" },
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -236,7 +236,7 @@ export const DOCS_PAGES: DocsPage[] = [
|
||||
id: "display",
|
||||
title: "How the site displays this",
|
||||
blocks: [
|
||||
{ type: "paragraph", text: "The Model Range & Spread panel groups the model stack into Global Baseline, AIFS Model, Europe High-resolution, and North America High-resolution. It shows available model count, spread, source, model name, resolution, and forecast horizon. Regional models outside their domain are simply not shown." },
|
||||
{ type: "paragraph", text: "The Model Range & Spread panel groups the model stack into Global Baseline, AIFS Model, Europe High-resolution, and North America High-resolution. It shows available model count, spread, model agency, API, model name, resolution, and forecast horizon. Regional models outside their domain are simply not shown." },
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user