mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
- Voice layer manifest (src/voice/layerManifest.js) generates the layer enums, aliases and analyst field hints; a test fails when a catalog layer has no entry. - analyst_query validates fields, operators, units, values and scopes, counts up to 250,000 loaded records per layer, reports complete/partial/unanswered, tells LAYER_OFF / NOT_READY / FEED_UNAVAILABLE apart from zero, refuses mismatched follow-ups and never lets a superseded query replace follow-up memory. Seven more layers expose analyst records. - Tool results carry a code-built say line and a display card; the voice card in the mic control shows captions, plan steps and the result (src/voice/resultDisplay.js is the one adapter). Slow tools narrate their current step out of band; holding Space while the assistant talks cuts it off. Turn spans go to the debug log; caption transcription is metered; the log omits what was said unless GEV_VOICE_LOG_CONTENT=1. - Point and ask: the Space-down pointer snapshot resolves "this", "that one" and "around here" through 'pointer' targets, and "the second one" through referent:n from the last numbered list. - Prompt states each policy once (instructions + tools 48.5k -> 46.7k chars). - Voice benchmark harness (scripts/qa-voice-bench.mjs, scripts/voice-bench/) shares its phrase table and grading with scripts/qa-voice-routing.mjs.
37 lines
1.5 KiB
JavaScript
37 lines
1.5 KiB
JavaScript
/**
|
|
* Capture the exact Realtime session config production mints.
|
|
*
|
|
* Rather than re-typing the session fields, this drives the production token
|
|
* handler (`server/providers/openai/realtime.js`) with a fake upstream fetch
|
|
* and returns the body it would have POSTed to OpenAI. Instructions, tools,
|
|
* tool_choice, reasoning, and truncation therefore cannot drift from what a
|
|
* real GEV mic session receives.
|
|
*/
|
|
import { createRealtimeTokenHandler } from '../../server/providers/openai/realtime.js';
|
|
import { realtimeInstructions } from '../../server/providers/openai/instructions.js';
|
|
import { GEV_REALTIME_TOOLS } from '../../server/providers/openai/tools.js';
|
|
|
|
export { realtimeInstructions, GEV_REALTIME_TOOLS };
|
|
|
|
/** Return production's `{ session: {...} }` client-secret body for `model`. */
|
|
export async function captureProductionSession(model) {
|
|
let captured = null;
|
|
const handler = createRealtimeTokenHandler({
|
|
resolveApiKey: () => 'bench-placeholder',
|
|
models: { standard: model, mini: model },
|
|
fetchImpl: async (_url, init) => {
|
|
captured = JSON.parse(init.body);
|
|
return new Response('{}', { status: 200, headers: { 'content-type': 'application/json' } });
|
|
},
|
|
});
|
|
const res = {
|
|
statusCode: 0,
|
|
headers: {},
|
|
setHeader(k, v) { this.headers[k] = v; },
|
|
end() {},
|
|
};
|
|
await handler({ method: 'POST', url: '/api/realtime/token', headers: {}, socket: {} }, res);
|
|
if (!captured?.session) throw new Error('production token handler did not produce a session config');
|
|
return captured.session;
|
|
}
|