gpt-5.4-mini @ low · cursor
cursorlow
- config
- gpt-5.4-mini-eff-low--cli--cursor--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- gpt-5.4-mini-low
- 采集于
- 2026年7月18日 11:54 · N=2
variant
live
slot 0 · P-q · sandboxed iframe

截图是 similarity 通道测量时的原始像素。运行 live 会在 sandboxed iframe 中重新执行原始输出;渲染结果取决于你的浏览器和字体,不保证与测量像素一致。
similarity 邻居本 session 没有 similarity 数据 —— 这个 batch 没有计算 pairs。
Fidelity —— 卡片展示的数据对不对?
- namematch
- conditionmatch
- datematch
- max tempambiguousinsufficient-distinct-temperature-nodes
- min tempambiguousinsufficient-distinct-temperature-nodes
- hourlyambiguouscoverage · 0 命中 · 0 不符 · 24 未展示
- request sidematch0 处违规
extractor fidelity-extractor-v1+Berlin-2026-07-15
源码 —— 原始模型输出,一字节未改
下载 card.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Weather Card</title>
<style>
:root {
--bg0: #06111f;
--bg1: #0b1f39;
--bg2: #14345d;
--card: rgba(10, 18, 33, 0.64);
--card-border: rgba(255, 255, 255, 0.14);
--text: #eff5ff;
--muted: rgba(239, 245, 255, 0.72);
--faint: rgba(239, 245, 255, 0.48);
--accent: #7dd3fc;
--accent2: #b8a6ff;
--good: #8bf0c1;
--warn: #ffd166;
--shadow: 0 30px 80px rgba(0, 0, 0, 0.45);
--radius: 28px;
}
* { box-sizing: border-box; }
html, body { width: 100%; height: 100%; }
body {
margin: 0;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
color: var(--text);
overflow: hidden;
background:
radial-gradient(1200px 900px at 15% 15%, rgba(125, 211, 252, 0.24), transparent 45%),
radial-gradient(900px 700px at 85% 18%, rgba(184, 166, 255, 0.22), transparent 42%),
radial-gradient(1100px 700px at 50% 100%, rgba(67, 97, 238, 0.16), transparent 48%),
linear-gradient(160deg, var(--bg0), var(--bg1) 54%, var(--bg2));
}
.scene {
position: relative;
width: 1280px;
height: 800px;
margin: 0 auto;
display: grid;
place-items: center;
padding: 40px;
}
.glow {
position: absolute;
inset: auto;
border-radius: 999px;
filter: blur(30px);
opacity: 0.95;
pointer-events: none;
}
.glow.g1 {
width: 360px;
height: 360px;
left: 110px;
top: 86px;
background: radial-gradient(circle at 30% 30%, rgba(125, 211, 252, 0.55), rgba(125, 211, 252, 0.05) 70%, transparent 72%);
}
.glow.g2 {
width: 430px;
height: 430px;
right: 86px;
bottom: 54px;
background: radial-gradient(circle at 40% 35%, rgba(184, 166, 255, 0.38), rgba(184, 166, 255, 0.06) 68%, transparent 72%);
}
.card {
position: relative;
width: 1080px;
height: 620px;
border-radius: var(--radius);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.02)),
rgba(10, 18, 33, 0.64);
border: 1px solid var(--card-border);
box-shadow: var(--shadow);
backdrop-filter: blur(18px);
overflow: hidden;
display: grid;
grid-template-rows: auto 1fr auto;
padding: 34px 36px 30px;
}
.card::before {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(700px 340px at 20% 15%, rgba(125, 211, 252, 0.12), transparent 62%),
radial-gradient(640px 320px at 92% 10%, rgba(184, 166, 255, 0.11), transparent 56%);
pointer-events: none;
}
.topbar {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
z-index: 1;
}
.brand {
display: flex;
align-items: center;
gap: 14px;
min-width: 0;
}
.badge {
width: 48px;
height: 48px;
border-radius: 16px;
display: grid;
place-items: center;
background:
linear-gradient(160deg, rgba(125, 211, 252, 0.28), rgba(184, 166, 255, 0.18));
border: 1px solid rgba(255, 255, 255, 0.16);
box-shadow: inset 0 1px 0 rgba(255,255,255,0.18);
flex: none;
}
.badge svg { width: 26px; height: 26px; opacity: 0.96; }
.eyebrow {
font-size: 12px;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--faint);
margin-bottom: 6px;
}
.titlewrap { min-width: 0; }
.location {
font-size: 34px;
line-height: 1.05;
font-weight: 720;
letter-spacing: -0.03em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin: 0;
}
.date {
color: var(--muted);
font-size: 16px;
margin-top: 6px;
letter-spacing: 0.01em;
}
.status {
font-size: 13px;
color: var(--muted);
padding: 12px 16px;
border-radius: 999px;
border: 1px solid rgba(255,255,255,0.12);
background: rgba(255,255,255,0.04);
white-space: nowrap;
}
.main {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: 1.02fr 1.18fr;
gap: 28px;
align-items: stretch;
margin-top: 24px;
}
.summary {
border-radius: 24px;
background: linear-gradient(180deg, rgba(255,255,255,0.08), rgba(255,255,255,0.035));
border: 1px solid rgba(255,255,255,0.12);
padding: 28px;
display: flex;
flex-direction: column;
justify-content: space-between;
min-height: 0;
}
.tempBlock {
display: flex;
align-items: flex-end;
gap: 18px;
flex-wrap: wrap;
}
.bigTemp {
font-size: 96px;
line-height: 0.92;
letter-spacing: -0.08em;
font-weight: 760;
}
.tempMeta {
padding-bottom: 10px;
display: grid;
gap: 8px;
}
.condition {
font-size: 26px;
line-height: 1.1;
font-weight: 640;
letter-spacing: -0.02em;
}
.sub {
color: var(--muted);
font-size: 15px;
line-height: 1.5;
max-width: 28ch;
}
.stats {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 14px;
margin-top: 22px;
}
.stat {
padding: 16px 18px;
border-radius: 18px;
background: rgba(6, 10, 18, 0.24);
border: 1px solid rgba(255,255,255,0.1);
}
.stat .label {
font-size: 12px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--faint);
margin-bottom: 8px;
}
.stat .value {
font-size: 22px;
font-weight: 700;
letter-spacing: -0.03em;
}
.panel {
border-radius: 24px;
background: linear-gradient(180deg, rgba(255,255,255,0.07), rgba(255,255,255,0.03));
border: 1px solid rgba(255,255,255,0.12);
padding: 24px;
display: grid;
grid-template-rows: auto 1fr;
min-height: 0;
}
.panelHead {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 16px;
margin-bottom: 18px;
}
.panelTitle {
font-size: 18px;
font-weight: 680;
letter-spacing: -0.02em;
}
.panelHint {
color: var(--faint);
font-size: 13px;
}
.hours {
display: grid;
grid-template-columns: repeat(8, minmax(0, 1fr));
gap: 12px;
align-content: start;
overflow: hidden;
}
.hour {
border-radius: 18px;
padding: 14px 10px 12px;
background:
linear-gradient(180deg, rgba(255,255,255,0.07), rgba(255,255,255,0.03));
border: 1px solid rgba(255,255,255,0.1);
text-align: center;
min-height: 118px;
display: grid;
grid-template-rows: auto auto 1fr auto;
gap: 8px;
}
.hourTime {
font-size: 13px;
color: var(--faint);
letter-spacing: 0.03em;
}
.hourTemp {
font-size: 26px;
font-weight: 720;
letter-spacing: -0.04em;
margin-top: 2px;
}
.hourBarWrap {
display: grid;
align-items: end;
min-height: 44px;
padding: 2px 8px 0;
}
.hourBar {
width: 100%;
border-radius: 999px;
height: 10px;
background: rgba(255,255,255,0.08);
position: relative;
overflow: hidden;
}
.hourBar > span {
position: absolute;
inset: 0;
border-radius: inherit;
background: linear-gradient(90deg, #7dd3fc, #b8a6ff);
transform-origin: left center;
}
.hourLabel {
font-size: 12px;
color: var(--muted);
}
.footer {
position: relative;
z-index: 1;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 18px;
color: var(--faint);
font-size: 13px;
gap: 16px;
}
.footer .left, .footer .right {
display: flex;
gap: 14px;
align-items: center;
flex-wrap: wrap;
}
.pill {
padding: 9px 12px;
border-radius: 999px;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.1);
color: var(--muted);
}
.errorState {
position: relative;
z-index: 1;
display: none;
place-items: center;
height: 100%;
text-align: center;
padding: 24px;
}
.errorState .box {
max-width: 620px;
padding: 30px 28px;
border-radius: 24px;
background: rgba(8, 15, 28, 0.58);
border: 1px solid rgba(255,255,255,0.14);
box-shadow: var(--shadow);
}
.errorState h1 {
margin: 0 0 10px;
font-size: 30px;
letter-spacing: -0.03em;
}
.errorState p {
margin: 0;
color: var(--muted);
font-size: 16px;
line-height: 1.6;
}
.loading .main,
.loading .footer {
filter: blur(3px);
opacity: 0.55;
pointer-events: none;
user-select: none;
}
.skeleton {
background: linear-gradient(90deg, rgba(255,255,255,0.06), rgba(255,255,255,0.12), rgba(255,255,255,0.06));
background-size: 240% 100%;
animation: shimmer 1.4s infinite linear;
border-radius: 12px;
}
@keyframes shimmer {
0% { background-position: 200% 0; }
100% { background-position: -20% 0; }
}
</style>
</head>
<body>
<div class="scene" id="scene">
<div class="glow g1"></div>
<div class="glow g2"></div>
<section class="card" id="card" aria-live="polite">
<div class="topbar">
<div class="brand">
<div class="badge" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.5 16.5h10a3.5 3.5 0 0 0 .7-6.93A5.25 5.25 0 0 0 8.36 7.5 4 4 0 0 0 7.5 16.5Z" stroke="white" stroke-opacity=".9" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M9.4 4.5v2.1M14.6 4.5v2.1M4.7 9.3l1.5 1.5M18.3 9.3l-1.5 1.5" stroke="white" stroke-opacity=".9" stroke-width="1.5" stroke-linecap="round"/>
</svg>
</div>
<div class="titlewrap">
<div class="eyebrow">Weather card</div>
<h1 class="location" id="location">Berlin</h1>
<div class="date" id="dateText">Today</div>
</div>
</div>
<div class="status" id="status">Loading weather data…</div>
</div>
<div class="main">
<div class="summary">
<div>
<div class="tempBlock">
<div class="bigTemp skeleton" id="maxTemp" style="width: 160px; height: 88px;"></div>
<div class="tempMeta">
<div class="condition skeleton" id="condition" style="width: 230px; height: 28px;"></div>
<div class="sub" id="summaryText">
Fetching daily and hourly temperatures for the selected date.
</div>
</div>
</div>
<div class="stats">
<div class="stat">
<div class="label">Maximum</div>
<div class="value" id="maxStat">-- °C</div>
</div>
<div class="stat">
<div class="label">Minimum</div>
<div class="value" id="minStat">-- °C</div>
</div>
</div>
</div>
<div class="pill" id="metaPill">UTC timezone · daily + hourly data</div>
</div>
<div class="panel">
<div class="panelHead">
<div class="panelTitle">Hourly temperatures</div>
<div class="panelHint" id="hourRange">Selected date in UTC</div>
</div>
<div class="hours" id="hours"></div>
</div>
</div>
<div class="footer">
<div class="left">
<span class="pill" id="coords">52.52, 13.405</span>
<span class="pill">Open-Meteo compatible API</span>
</div>
<div class="right">
<span class="pill" id="sourceHint">Forecast or archive endpoint chosen automatically</span>
</div>
</div>
<div class="errorState" id="errorState">
<div class="box">
<h1>Weather data could not be loaded</h1>
<p id="errorText">Please try again later.</p>
</div>
</div>
</section>
</div>
<script>
(function () {
const qs = new URLSearchParams(location.search);
const lat = qs.get('lat') || '52.52';
const lon = qs.get('lon') || '13.405';
const name = qs.get('name') || 'Berlin';
const dateParam = qs.get('date') || new Date().toISOString().slice(0, 10);
const els = {
card: document.getElementById('card'),
location: document.getElementById('location'),
dateText: document.getElementById('dateText'),
status: document.getElementById('status'),
maxTemp: document.getElementById('maxTemp'),
condition: document.getElementById('condition'),
summaryText: document.getElementById('summaryText'),
maxStat: document.getElementById('maxStat'),
minStat: document.getElementById('minStat'),
hours: document.getElementById('hours'),
errorState: document.getElementById('errorState'),
errorText: document.getElementById('errorText'),
coords: document.getElementById('coords'),
hourRange: document.getElementById('hourRange'),
sourceHint: document.getElementById('sourceHint'),
metaPill: document.getElementById('metaPill')
};
els.location.textContent = name;
els.coords.textContent = `${lat}, ${lon}`;
els.dateText.textContent = formatDate(dateParam);
els.hourRange.textContent = `${formatDate(dateParam)} · hourly UTC`;
const requestedDate = new Date(dateParam + 'T00:00:00Z');
const todayUTC = new Date();
const todayISO = todayUTC.toISOString().slice(0, 10);
const endpoint = dateParam < todayISO ? '/api/om/archive' : '/api/om/forecast';
els.sourceHint.textContent = endpoint.includes('archive') ? 'Archive data endpoint' : 'Forecast data endpoint';
const params = new URLSearchParams({
latitude: lat,
longitude: lon,
daily: 'temperature_2m_max,temperature_2m_min,weather_code',
hourly: 'temperature_2m',
timezone: 'UTC',
temperature_unit: 'celsius',
start_date: dateParam,
end_date: dateParam
});
const weatherCodeMap = {
0: ['Clear sky', 'clear'],
1: ['Mainly clear', 'partly'],
2: ['Partly cloudy', 'partly'],
3: ['Overcast', 'cloudy'],
45: ['Fog', 'fog'],
48: ['Depositing rime fog', 'fog'],
51: ['Light drizzle', 'rain'],
53: ['Moderate drizzle', 'rain'],
55: ['Dense drizzle', 'rain'],
56: ['Light freezing drizzle', 'rain'],
57: ['Dense freezing drizzle', 'rain'],
61: ['Slight rain', 'rain'],
63: ['Moderate rain', 'rain'],
65: ['Heavy rain', 'rain'],
66: ['Light freezing rain', 'rain'],
67: ['Heavy freezing rain', 'rain'],
71: ['Slight snow fall', 'snow'],
73: ['Moderate snow fall', 'snow'],
75: ['Heavy snow fall', 'snow'],
77: ['Snow grains', 'snow'],
80: ['Slight rain showers', 'rain'],
81: ['Moderate rain showers', 'rain'],
82: ['Violent rain showers', 'rain'],
85: ['Slight snow showers', 'snow'],
86: ['Heavy snow showers', 'snow'],
95: ['Thunderstorm', 'storm'],
96: ['Thunderstorm with slight hail', 'storm'],
99: ['Thunderstorm with heavy hail', 'storm']
};
function formatDate(iso) {
const d = new Date(iso + 'T00:00:00Z');
return new Intl.DateTimeFormat('en-US', {
timeZone: 'UTC',
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
}).format(d);
}
function fmtHour(iso) {
const d = new Date(iso);
return new Intl.DateTimeFormat('en-US', {
timeZone: 'UTC',
hour: 'numeric',
hour12: true
}).format(d).replace(/\s/g, '');
}
function weatherLabel(code) {
return weatherCodeMap[code]?.[0] || 'Unknown conditions';
}
function weatherTint(code) {
return weatherCodeMap[code]?.[1] || 'clear';
}
function setError(message) {
els.card.classList.remove('loading');
els.errorText.textContent = message;
els.errorState.style.display = 'grid';
els.status.textContent = 'Unavailable';
}
function iconFor(code) {
const kind = weatherTint(code);
if (kind === 'storm') return '⛈';
if (kind === 'snow') return '❄';
if (kind === 'rain') return '🌧';
if (kind === 'fog') return '🌫';
if (kind === 'cloudy') return '☁';
if (kind === 'partly') return '⛅';
return '☀';
}
function renderHours(times, temps) {
els.hours.innerHTML = '';
if (!times || !temps || !times.length) {
const empty = document.createElement('div');
empty.className = 'hour';
empty.style.gridColumn = '1 / -1';
empty.innerHTML = '<div class="hourTime">No hourly data</div><div class="hourTemp">--</div><div class="hourBarWrap"><div class="hourBar"><span style="transform:scaleX(0.08)"></span></div></div><div class="hourLabel">Unavailable</div>';
els.hours.appendChild(empty);
return;
}
const min = Math.min(...temps.filter(v => Number.isFinite(v)));
const max = Math.max(...temps.filter(v => Number.isFinite(v)));
const span = Math.max(1, max - min);
times.forEach((t, i) => {
const temp = temps[i];
const pct = Number.isFinite(temp) ? ((temp - min) / span) : 0;
const bar = Math.max(0.08, pct);
const cell = document.createElement('div');
cell.className = 'hour';
cell.innerHTML = `
<div class="hourTime">${fmtHour(t)}</div>
<div class="hourTemp">${Number.isFinite(temp) ? `${Math.round(temp)}°` : '--'}</div>
<div class="hourBarWrap">
<div class="hourBar"><span style="transform:scaleX(${bar.toFixed(3)})"></span></div>
</div>
<div class="hourLabel">${Number.isFinite(temp) ? `${temp.toFixed(1)} °C` : 'No data'}</div>
`;
els.hours.appendChild(cell);
});
}
async function load() {
try {
const res = await fetch(`${endpoint}?${params.toString()}`, { credentials: 'same-origin' });
if (!res.ok) throw new Error(`Request failed with status ${res.status}`);
const data = await res.json();
const daily = data && data.daily;
const hourly = data && data.hourly;
const dailyTime = daily?.time?.[0];
const max = daily?.temperature_2m_max?.[0];
const min = daily?.temperature_2m_min?.[0];
const code = daily?.weather_code?.[0];
if (!dailyTime || !Number.isFinite(max) || !Number.isFinite(min)) {
throw new Error('Missing daily weather data');
}
const hourlyTimes = [];
const hourlyTemps = [];
if (hourly?.time && hourly?.temperature_2m) {
for (let i = 0; i < hourly.time.length; i++) {
if (hourly.time[i] && hourly.time[i].slice(0, 10) === dateParam) {
hourlyTimes.push(hourly.time[i]);
hourlyTemps.push(hourly.temperature_2m[i]);
}
}
}
els.card.classList.remove('loading');
els.status.textContent = 'Loaded';
els.maxTemp.textContent = `${Math.round(max)}°`;
els.maxTemp.classList.remove('skeleton');
els.condition.classList.remove('skeleton');
els.condition.textContent = `${iconFor(code)} ${weatherLabel(code)}`;
els.summaryText.textContent = `The day’s weather in UTC, based on the selected coordinates, with hourly temperatures shown below.`;
els.maxStat.textContent = `${max.toFixed(1)} °C`;
els.minStat.textContent = `${min.toFixed(1)} °C`;
els.metaPill.textContent = `Daily weather code ${code} · ${endpoint.includes('archive') ? 'archived' : 'forecast'} response`;
renderHours(hourlyTimes, hourlyTemps);
} catch (err) {
setError('The requested weather data could not be loaded from the local API.');
els.card.classList.remove('loading');
els.maxTemp.textContent = '--';
els.maxTemp.classList.remove('skeleton');
els.condition.textContent = 'Unavailable';
els.condition.classList.remove('skeleton');
els.maxStat.textContent = '-- °C';
els.minStat.textContent = '-- °C';
els.hours.innerHTML = '';
}
}
load();
})();
</script>
</body>
</html>L1 —— 廉价的确定性描述量
| bytes 总计 | 21,400 | html / css / js | 3,228 / 9,495 / 8,677 |
|---|---|---|---|
| dom 节点 | 54 | dom 深度 | 10 |
| css 规则 | 54 | 含 js | 是 |
| brightness | 51.9 | contrast | 24.9 |
| colorfulness | 20.7 | 留白 | 52.1% |
该 slot 的 telemetry
| prompt tokens | 16,072 | completion tokens | 6,299 |
|---|---|---|---|
| total tokens | 22,371 | wall | 44.3 s |
| cost | — | request id | — |
config.json568 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.4-mini-eff-low--cli--cursor--dev",
"effort": "low",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.4-mini",
"protocol": "cli",
"served_model": "gpt-5.4-mini-low",
"telemetry": {
"completion_tokens": 20107,
"cost_usd": null,
"prompt_tokens": 50448,
"total_tokens": 70555,
"wall_ms": 149396
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-smoke",
"config_id": "gpt-5.4-mini-eff-low--cli--cursor--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T16:49:36.384542+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T16:48:52.105376+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T16:50:07.728325+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T16:49:41.893264+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T16:50:42.827408+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T16:50:10.909581+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-12T16:51:33.896274+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-12T16:50:46.527953+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-q"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}