mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
Wind (NOAA GFS and ECMWF IFS: animated particles, colour field, a reading at map centre), observed weather (NOAA MRMS radar, GOES and NESDIS infrared clouds, lightning density) on one shared history timeline, NHC and CPHC cyclone advisories with tracks and cones, and a WEATHER panel in the right rail. On 3D Tiles the observed products render as raised shells with a sharper window around the view. Co-authored-by: Gustavo Beneduzi <[email protected]> Co-authored-by: Daniel Slay <[email protected]> Co-authored-by: Rehaan Delmotra <[email protected]> Co-authored-by: Cursor Agent <[email protected]>
180 lines
6.4 KiB
JavaScript
180 lines
6.4 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { readFileSync } from 'node:fs';
|
|
import {
|
|
HUD_SUMMARY_INSTRUCTIONS,
|
|
HUD_SUMMARY_UNCONFIGURED_CODE,
|
|
hudSummaryLayerContext,
|
|
hudTelemetryProvenanceTag,
|
|
isHudSummaryUnconfigured,
|
|
keylessHudSummaryResponse,
|
|
} from './hudSummaryResponse.js';
|
|
import { openAiRealtimeProxy } from '../vite.config.js';
|
|
|
|
const UNCONFIGURED_PAYLOAD = {
|
|
configured: false,
|
|
code: HUD_SUMMARY_UNCONFIGURED_CODE,
|
|
error: null,
|
|
summary: null,
|
|
};
|
|
|
|
function installOpenAiRoutes() {
|
|
const routes = new Map();
|
|
openAiRealtimeProxy().configureServer({
|
|
middlewares: {
|
|
use(path, handler) {
|
|
routes.set(path, handler);
|
|
},
|
|
},
|
|
});
|
|
return routes;
|
|
}
|
|
|
|
function invokeRoute(handler, { method = 'GET', url = '/', remoteAddress = '127.0.0.1' } = {}) {
|
|
return new Promise((resolve, reject) => {
|
|
const headers = new Map();
|
|
const req = {
|
|
method,
|
|
url,
|
|
headers: {},
|
|
socket: { remoteAddress },
|
|
};
|
|
const res = {
|
|
statusCode: 200,
|
|
setHeader(name, value) {
|
|
headers.set(String(name).toLowerCase(), String(value));
|
|
},
|
|
end(body = '') {
|
|
resolve({
|
|
statusCode: this.statusCode,
|
|
headers: Object.fromEntries(headers),
|
|
body: body ? JSON.parse(String(body)) : null,
|
|
});
|
|
},
|
|
};
|
|
Promise.resolve(handler(req, res)).catch(reject);
|
|
});
|
|
}
|
|
|
|
test('builds an HTTP-success capability response only for a blank key', () => {
|
|
assert.deepEqual(keylessHudSummaryResponse(undefined), {
|
|
statusCode: 200,
|
|
payload: UNCONFIGURED_PAYLOAD,
|
|
});
|
|
assert.deepEqual(keylessHudSummaryResponse(' '), {
|
|
statusCode: 200,
|
|
payload: UNCONFIGURED_PAYLOAD,
|
|
});
|
|
assert.equal(keylessHudSummaryResponse('configured-key'), null);
|
|
});
|
|
|
|
test('recognizes only the exact deliberate no-key fallback response', () => {
|
|
assert.equal(isHudSummaryUnconfigured(200, UNCONFIGURED_PAYLOAD), true);
|
|
assert.equal(isHudSummaryUnconfigured(503, UNCONFIGURED_PAYLOAD), false);
|
|
assert.equal(isHudSummaryUnconfigured(200, {
|
|
...UNCONFIGURED_PAYLOAD,
|
|
error: 'provider failed',
|
|
}), false);
|
|
assert.equal(isHudSummaryUnconfigured(200, {
|
|
...UNCONFIGURED_PAYLOAD,
|
|
summary: 'Unexpected provider output',
|
|
}), false);
|
|
assert.equal(isHudSummaryUnconfigured(200, {
|
|
...UNCONFIGURED_PAYLOAD,
|
|
configured: true,
|
|
}), false);
|
|
assert.equal(isHudSummaryUnconfigured(200, {
|
|
...UNCONFIGURED_PAYLOAD,
|
|
unexpected: true,
|
|
}), false);
|
|
assert.equal(isHudSummaryUnconfigured(200, {
|
|
code: HUD_SUMMARY_UNCONFIGURED_CODE,
|
|
}), false);
|
|
});
|
|
|
|
test('does not hide real provider and HTTP failures', () => {
|
|
assert.equal(isHudSummaryUnconfigured(502, {
|
|
code: HUD_SUMMARY_UNCONFIGURED_CODE,
|
|
}), false);
|
|
assert.equal(isHudSummaryUnconfigured(503, UNCONFIGURED_PAYLOAD), false);
|
|
assert.equal(isHudSummaryUnconfigured(200, { error: 'provider failed' }), false);
|
|
});
|
|
|
|
test('the installed keyless HUD route stays successful after the voice quota is exhausted', async () => {
|
|
const previousKey = process.env.OPENAI_API_KEY;
|
|
const previousLimit = process.env.GEV_RATELIMIT_OPENAI_PER_MIN;
|
|
process.env.OPENAI_API_KEY = '';
|
|
process.env.GEV_RATELIMIT_OPENAI_PER_MIN = '1';
|
|
try {
|
|
const routes = installOpenAiRoutes();
|
|
const token = routes.get('/api/realtime/token');
|
|
const hud = routes.get('/api/openai/hud-summary');
|
|
assert.equal(typeof token, 'function');
|
|
assert.equal(typeof hud, 'function');
|
|
|
|
const firstToken = await invokeRoute(token);
|
|
const secondToken = await invokeRoute(token);
|
|
assert.equal(firstToken.statusCode, 503);
|
|
assert.deepEqual(firstToken.body, { error: 'OPENAI_API_KEY is not set' });
|
|
assert.equal(secondToken.statusCode, 429);
|
|
|
|
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
const response = await invokeRoute(hud, { method: 'POST' });
|
|
assert.equal(response.statusCode, 200);
|
|
assert.equal(response.headers['content-type'], 'application/json; charset=utf-8');
|
|
assert.equal(response.headers['cache-control'], 'no-store');
|
|
assert.deepEqual(response.body, UNCONFIGURED_PAYLOAD);
|
|
}
|
|
} finally {
|
|
if (previousKey === undefined) delete process.env.OPENAI_API_KEY;
|
|
else process.env.OPENAI_API_KEY = previousKey;
|
|
if (previousLimit === undefined) delete process.env.GEV_RATELIMIT_OPENAI_PER_MIN;
|
|
else process.env.GEV_RATELIMIT_OPENAI_PER_MIN = previousLimit;
|
|
}
|
|
});
|
|
|
|
test('HUD summary context and telemetry tag carry chip-identical feed-state', () => {
|
|
const now = 1_000_000;
|
|
const layers = [
|
|
{
|
|
id: 'flights',
|
|
name: 'Live Flights',
|
|
enabled: true,
|
|
stats: { stale: true, count: 12, lastUpdate: now - 240_000, source: 'OpenSky Network' },
|
|
},
|
|
{
|
|
id: 'earthquakes',
|
|
name: 'Earthquakes',
|
|
enabled: false,
|
|
stats: { count: 3, lastUpdate: now },
|
|
},
|
|
];
|
|
const context = hudSummaryLayerContext(layers, { now });
|
|
assert.deepEqual(context.enabledLayerLabels, ['Live Flights']);
|
|
assert.equal(context.enabledLayers[0].feedState, 'stale');
|
|
assert.equal(context.feedProvenance.overall, 'stale');
|
|
assert.equal(hudTelemetryProvenanceTag(layers, { now }), 'STALE LIVE FLIGHTS');
|
|
assert.equal(hudTelemetryProvenanceTag([{
|
|
id: 'flights', name: 'Live Flights', enabled: true, stats: { count: 4, lastUpdate: now },
|
|
}], { now }), null);
|
|
});
|
|
|
|
test('HUD summary instructions require non-nominal feedState in the five words', () => {
|
|
assert.match(HUD_SUMMARY_INSTRUCTIONS, /five words MUST include that feedState token/);
|
|
assert.match(HUD_SUMMARY_INSTRUCTIONS, /STALE, DEGRADED, FALLBACK, LOADING, or UNAVAILABLE/);
|
|
assert.match(HUD_SUMMARY_INSTRUCTIONS, /feedProvenance/);
|
|
});
|
|
|
|
test('the HUD proxy uses the shared provenance instructions', () => {
|
|
const local = readFileSync(new URL('../server/providers/openai/hud-summary.js', import.meta.url), 'utf8');
|
|
assert.match(local, /HUD_SUMMARY_INSTRUCTIONS/);
|
|
assert.doesNotMatch(local, /enabled-layer text labels/);
|
|
});
|
|
|
|
test('AI summaries missing a non-nominal provenance token fall back deterministically', async () => {
|
|
const { hudSummaryMatchesProvenance } = await import('./hudSummaryResponse.js');
|
|
assert.equal(hudSummaryMatchesProvenance('Austin flights operating normally today', { overall: 'stale' }), false);
|
|
assert.equal(hudSummaryMatchesProvenance('Austin stale flights over downtown', { overall: 'stale' }), true);
|
|
assert.equal(hudSummaryMatchesProvenance('Austin flights operating normally today', { overall: 'nominal' }), true);
|
|
});
|