deepseek-v4-flash-0731 @ none · api
apinone
- config
- deepseek-v4-flash-0731-eff-none--api--official--dev
- batch
- 2026-07-19--unified
- transport
- deepseek-official-api
- protocol
- api · metered
- served model
- deepseek-v4-flash
- captured
- Jul 18, 2026, 11:54 AM · N=4
variant
live
slot 0 · P-q · sandboxed iframe

delivered in a markdown fence — the model wrapped its HTML in a code fence; extraction stripped it. Recorded here for traceability.
The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.
similarity neighbors
nearest
claude-opus-4-6 @medium · kiro0.70deepseek-v4-flash @high · api0.70deepseek-v4-flash-free · api0.69grok-4.3 @low · api0.68qwen3.6-plus · opencode0.67farthest
claude-opus-4-8 @max · CC0.51claude-fable-5 @max · CC0.52gpt-5.4 @high · codex-oauth0.52north-mini-code-free · api0.52gpt-5.5 @low · codex-oauth0.52within session 2026-07-19--unified
similarity measures convergence within this session — not quality.
Fidelity — does the card show the right data?
- namematch
- conditionmatch
- datematch
- max tempmismatchshown: 17.4
- min tempmismatchshown: 17.2
- hourlymatchcoverage 22/24 · 22 match · 0 mismatch · 2 not shown
- request sidematch0 violation(s)
extractor fidelity-extractor-v1+Berlin-2026-07-15
Source — raw model output, one byte unchanged
download card.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes">
<title>skyline · weather card</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: system-ui, -apple-system, 'Inter', 'Segoe UI', Roboto, sans-serif;
background: linear-gradient(145deg, #0b1020 0%, #1c2333 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 24px;
}
.weather-card {
background: rgba(255, 255, 255, 0.08);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border-radius: 48px;
box-shadow: 0 30px 50px rgba(0, 0, 0, 0.6), inset 0 1px 2px rgba(255, 255, 255, 0.08);
border: 1px solid rgba(255, 255, 255, 0.1);
width: 100%;
max-width: 780px;
padding: 40px 42px;
color: #f0f4fa;
transition: all 0.2s ease;
}
.card-header {
display: flex;
flex-direction: column;
gap: 6px;
margin-bottom: 40px;
}
.location-line {
display: flex;
align-items: center;
gap: 12px;
font-size: 1.9rem;
font-weight: 500;
letter-spacing: -0.02em;
}
.location-name {
background: rgba(255, 255, 255, 0.06);
padding: 8px 20px;
border-radius: 100px;
border: 1px solid rgba(255, 255, 255, 0.1);
backdrop-filter: blur(4px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
color: white;
font-weight: 450;
display: inline-block;
}
.date-badge {
font-size: 1rem;
font-weight: 400;
color: #b9c6dd;
background: rgba(0, 0, 0, 0.2);
padding: 6px 18px;
border-radius: 40px;
width: fit-content;
border: 1px solid rgba(255, 255, 255, 0.1);
letter-spacing: 0.3px;
backdrop-filter: blur(4px);
}
.temp-summary {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 32px;
margin: 32px 0 30px;
flex-wrap: wrap;
}
.temp-block {
display: flex;
align-items: baseline;
background: rgba(0, 0, 0, 0.18);
padding: 10px 24px 10px 22px;
border-radius: 100px;
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow: 0 10px 20px -8px rgba(0,0,0,0.6);
}
.temp-value {
font-size: 3.2rem;
font-weight: 600;
letter-spacing: -0.02em;
margin-right: 6px;
}
.temp-unit {
font-size: 1.5rem;
font-weight: 300;
color: #cbd5e9;
}
.temp-label {
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.08em;
font-weight: 400;
color: #9aaecb;
margin-left: 10px;
}
.condition-badge {
background: rgba(120, 160, 255, 0.1);
border: 1px solid rgba(140, 180, 255, 0.2);
border-radius: 120px;
padding: 10px 26px;
font-size: 1.05rem;
font-weight: 450;
color: #d8e2ff;
display: flex;
align-items: center;
gap: 10px;
backdrop-filter: blur(6px);
}
.condition-icon {
font-size: 1.7rem;
line-height: 1;
filter: drop-shadow(0 4px 6px rgba(0,0,0,0.4));
}
.divider {
height: 1px;
background: linear-gradient(90deg, rgba(255,255,255,0.2), rgba(255,255,255,0.05));
margin: 30px 0 28px;
border-radius: 10px;
}
.hourly-title {
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.12em;
font-weight: 450;
color: #b7c6e0;
margin-bottom: 18px;
display: flex;
align-items: center;
gap: 8px;
}
.hourly-grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 10px 8px;
background: rgba(0, 0, 0, 0.15);
padding: 16px 14px;
border-radius: 28px;
border: 1px solid rgba(255,255,255,0.06);
backdrop-filter: blur(4px);
}
.hour-item {
display: flex;
flex-direction: column;
align-items: center;
background: rgba(255,255,255,0.03);
padding: 8px 0 6px;
border-radius: 18px;
transition: background 0.2s;
}
.hour-item:hover {
background: rgba(255,255,255,0.07);
}
.hour-time {
font-size: 0.68rem;
font-weight: 500;
color: #98abc8;
letter-spacing: 0.04em;
margin-bottom: 5px;
}
.hour-temp {
font-size: 1.06rem;
font-weight: 600;
color: #f0f5ff;
background: rgba(255,255,255,0.03);
padding: 3px 8px;
border-radius: 40px;
border: 1px solid rgba(255,255,255,0.06);
}
.error-message {
background: rgba(255, 80, 80, 0.08);
border: 1px solid rgba(255, 100, 100, 0.2);
padding: 20px 40px;
border-radius: 60px;
color: #ffc9c9;
font-weight: 450;
font-size: 1.1rem;
text-align: center;
backdrop-filter: blur(8px);
letter-spacing: 0.2px;
}
.loading {
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
color: #ccd8f0;
font-weight: 400;
padding: 40px 0;
}
.spinner {
width: 36px;
height: 36px;
border: 3px solid rgba(255,255,255,0.2);
border-top-color: #b0c8ff;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
@media (max-width: 600px) {
.weather-card { padding: 28px 22px; }
.temp-summary { gap: 15px; }
.temp-value { font-size: 2.6rem; }
.hourly-grid { grid-template-columns: repeat(6, 1fr); gap: 12px; }
}
</style>
</head>
<body>
<div class="weather-card" id="weatherCard">
<!-- populated by JS -->
</div>
<script>
(function() {
const card = document.getElementById('weatherCard');
// ---------- helper: read URL params ----------
function getParam(name, fallback) {
const params = new URLSearchParams(window.location.search);
const val = params.get(name);
return val === null || val.trim() === '' ? fallback : val.trim();
}
// ---------- defaults ----------
const now = new Date();
const defaultDate = now.toISOString().slice(0, 10); // UTC today
const lat = getParam('lat', '52.52');
const lon = getParam('lon', '13.405');
const locName = getParam('name', 'Berlin');
const dateStr = getParam('date', defaultDate);
// validate date format (YYYY-MM-DD) – basic check
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
let validDate = dateRegex.test(dateStr) ? dateStr : defaultDate;
// ---------- build API endpoint ----------
// decide forecast vs archive endpoint based on date vs today (UTC)
const todayUTC = new Date();
todayUTC.setUTCHours(0,0,0,0);
const targetUTC = new Date(validDate + 'T00:00:00Z');
let endpoint;
if (targetUTC >= todayUTC) {
// Use forecast (includes today and future)
endpoint = '/api/om/forecast';
} else {
// Use archive for past dates
endpoint = '/api/om/archive';
}
// common query params (both endpoints identically used)
const params = {
latitude: lat,
longitude: lon,
daily: 'temperature_2m_max,temperature_2m_min,weather_code',
hourly: 'temperature_2m',
timezone: 'UTC',
temperature_unit: 'celsius',
start_date: validDate,
end_date: validDate
};
// build query string
const queryString = new URLSearchParams(params).toString();
const url = `${endpoint}?${queryString}`;
// ---------- weather condition mapping (WMO) ----------
function mapWeatherCode(code) {
if (code === 0) return { label: 'Clear', icon: '☀️' };
if (code === 1) return { label: 'Mainly clear', icon: '🌤️' };
if (code === 2) return { label: 'Partly cloudy', icon: '⛅' };
if (code === 3) return { label: 'Overcast', icon: '☁️' };
if (code === 45 || code === 48) return { label: 'Fog', icon: '🌫️' };
if (code >= 51 && code <= 57) return { label: 'Drizzle', icon: '🌦️' };
if (code >= 61 && code <= 67) return { label: 'Rain', icon: '🌧️' };
if (code >= 71 && code <= 77) return { label: 'Snow', icon: '🌨️' };
if (code >= 80 && code <= 82) return { label: 'Showers', icon: '🌧️' };
if (code >= 85 && code <= 86) return { label: 'Snow showers', icon: '❄️' };
if (code >= 95) return { label: 'Thunderstorm', icon: '⛈️' };
return { label: 'Unknown', icon: '🌡️' };
}
// ---------- render UI ----------
function renderError(message) {
card.innerHTML = `
<div class="header" style="margin-bottom: 20px;">
<div class="location-line"><span class="location-name">⚠️ ${locName}</span></div>
<div class="date-badge">${validDate}</div>
</div>
<div class="error-message">${message}</div>
`;
}
function renderWeather(data) {
try {
const daily = data.daily;
const hourly = data.hourly;
if (!daily || !hourly) throw new Error('malformed data');
// daily arrays
const maxT = daily.temperature_2m_max[0];
const minT = daily.temperature_2m_min[0];
const wCode = daily.weather_code[0];
const condition = mapWeatherCode(wCode);
// Hourly for that day (all 24 hours if available, we take first 24)
const hourlyTemps = hourly.temperature_2m;
const times = hourly.time || [];
// Filter only hours that match the date
const hourData = [];
for (let i = 0; i < times.length; i++) {
if (times[i].startsWith(validDate)) {
hourData.push({
time: times[i].slice(11, 16), // HH:MM
temp: Math.round(hourlyTemps[i] * 10) / 10
});
}
if (hourData.length === 24) break; // max 24
}
// if no hourly due to api, fallback to empty
let hourlyHtml = '';
if (hourData.length === 0) {
hourlyHtml = `<div style="color: rgba(255,255,255,0.5); font-size: 0.95rem; padding: 12px;">hourly data not available</div>`;
} else {
// take first 24, but we'll slice if more (unlikely)
const first24 = hourData.slice(0, 24);
hourlyHtml = first24.map(h => `
<div class="hour-item">
<div class="hour-time">${h.time}</div>
<div class="hour-temp">${h.temp.toFixed(1)}°</div>
</div>
`).join('');
}
// format date nicely e.g. "Fri, Aug 11"
const displayDate = new Date(validDate + 'T00:00:00Z');
const dateString = displayDate.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' });
card.innerHTML = `
<div class="card-header">
<div class="location-line">
<span class="location-name">📍 ${locName}</span>
</div>
<div class="date-badge">${dateString} · ${validDate}</div>
</div>
<div class="temp-summary">
<div class="temp-block">
<span class="temp-value">${Math.round(minT)}</span>
<span class="temp-unit">°C</span>
<span class="temp-label">min</span>
</div>
<div class="temp-block">
<span class="temp-value">${Math.round(maxT)}</span>
<span class="temp-unit">°C</span>
<span class="temp-label">max</span>
</div>
<div class="condition-badge">
<span class="condition-icon">${condition.icon}</span>
<span>${condition.label}</span>
</div>
</div>
<div class="divider"></div>
<div class="hourly-title">
<span>HOURLY</span>
<span style="opacity:0.6; font-weight:300;">· 24h</span>
</div>
<div class="hourly-grid">
${hourlyHtml || `<div style="grid-column:1/-1; text-align:center;">no hourly data</div>`}
</div>
`;
} catch (e) {
renderError('We could not parse the weather data.');
}
}
// ---------- fetch data ----------
card.innerHTML = `
<div class="loading">
<div class="spinner"></div>
<div>loading weather ...</div>
</div>
`;
fetch(url, {
method: 'GET',
headers: { 'Accept': 'application/json' },
credentials: 'same-origin'
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return response.json();
})
.then(data => {
// check if we have required fields
if (data && data.daily && data.hourly) {
renderWeather(data);
} else {
renderError('Incomplete weather data received.');
}
})
.catch(err => {
console.error('Fetch error:', err);
renderError('Weather data unavailable — could not load.');
});
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 13,602 | html / css / js | 370 / 5,554 / 7,678 |
|---|---|---|---|
| dom nodes | 9 | dom depth | 3 |
| css rules | 31 | js present | yes |
| brightness | 36.6 | contrast | 19.8 |
| colorfulness | 8.7 | whitespace | 87.0% |
This slot's telemetry
| prompt tokens | 321 | completion tokens | 3,959 |
|---|---|---|---|
| total tokens | 4,280 | wall | 22.8 s |
| cost | — | request id | — |
config.json595 B
{
"N": 4,
"auth": {
"credential_ref": "WCB_DEEPSEEK_KEY",
"method": "api-key"
},
"billing": "metered",
"config_id": "deepseek-v4-flash-0731-eff-none--api--official--dev",
"effort": "none",
"family": "deepseek",
"m": {
"min": 4,
"q": 4
},
"model_id": "deepseek-v4-flash-0731",
"protocol": "api",
"served_model": "deepseek-v4-flash",
"telemetry": {
"completion_tokens": 28958,
"cost_usd": null,
"prompt_tokens": 2536,
"total_tokens": 31494,
"wall_ms": 167550
},
"transport": "deepseek-official-api",
"vendor_sanction_ref": null
}send-log4.7 KB
{
"N": 4,
"batch_id": "2026-07-31--official-deepseek-flash-0731",
"config_id": "deepseek-v4-flash-0731-eff-none--api--official--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-31T06:28:15.413744+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:27:54.452215+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-07-31T06:28:43.953082+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:28:21.176288+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-07-31T06:29:15.724713+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:28:47.168910+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-31T06:29:38.303830+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:29:20.024440+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-07-31T06:29:55.568696+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:29:41.163603+00:00"
}
],
"block_index": 2,
"model_reaching_attempt_index": 0,
"slot_index": 2,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-31T06:30:22.919200+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:29:58.882736+00:00"
}
],
"block_index": 2,
"model_reaching_attempt_index": 0,
"slot_index": 2,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-31T06:30:48.000462+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:30:26.890651+00:00"
}
],
"block_index": 3,
"model_reaching_attempt_index": 0,
"slot_index": 3,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-31T06:31:08.799093+00:00",
"http_status": 200,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-31T06:30:51.356554+00:00"
}
],
"block_index": 3,
"model_reaching_attempt_index": 0,
"slot_index": 3,
"terminal_state": "valid",
"variant": "P-min"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}