From 395eba4548c1b7a7004f528760dff16c16909ab2 Mon Sep 17 00:00:00 2001 From: Sameh Khamis Date: Thu, 5 Nov 2026 15:38:32 -0800 Subject: [PATCH] Fit the tilt wording under the Realtime prompt ceiling With main merged, the Overpass prompt measured 55,549 against the 55,500 ceiling. The pitchDeg and direction descriptions now read 'Absolute; -89 top-down.' and 'Needed for pan/rotate/tilt steps', bringing it to 55,497. The schema pin and the measured-size note follow. --- server/providers/openai/toolDescriptions.js | 5 ++--- src/radioMarkup.test.mjs | 6 +++--- src/voice/actionSchemas.test.mjs | 2 +- src/voice/pointAndAsk.test.mjs | 7 ++++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/server/providers/openai/toolDescriptions.js b/server/providers/openai/toolDescriptions.js index 1deff2335..f4000ddad 100644 --- a/server/providers/openai/toolDescriptions.js +++ b/server/providers/openai/toolDescriptions.js @@ -523,7 +523,7 @@ export const ACTION_DESCRIPTIONS = { properties: { direction: { description: - 'Required for pan/rotate and a tilt nudge; orbit/rotate_globe default right.', + 'Needed for pan/rotate/tilt steps; orbit/rotate_globe default right.', $position: 2, }, mode: { @@ -532,8 +532,7 @@ export const ACTION_DESCRIPTIONS = { $position: 2, }, pitchDeg: { - description: - 'Absolute; steps use direction. -45 oblique (default), -89 top-down.', + description: 'Absolute; -89 top-down.', $position: 1, }, }, diff --git a/src/radioMarkup.test.mjs b/src/radioMarkup.test.mjs index 6e72d6318..3c59d989d 100644 --- a/src/radioMarkup.test.mjs +++ b/src/radioMarkup.test.mjs @@ -232,14 +232,14 @@ test('no unchanged Realtime tool definition drifts silently', () => { camera.description, 'Direct the camera like a drone operator: orbit the current view target, pan, tilt, or rotate — one bounded nudge (mode=once) or continuous motion until stopped (mode=continuous). Continuous motion also stops on any manual camera input or when a navigation tool runs. Say the RESULTING state when confirming ("Orbiting slowly"). Globe rotation (rotate_globe) spins Earth right continuously by default; explicit direction, mode and speed take precedence. It checks fit and may refuse.', ); - // Tilt to an angle adds pitchDeg and says a tilt nudge needs a + // Tilt to an angle adds an absolute pitchDeg and says tilt steps need a // direction; check them, then restore the legacy fields for the pin. assert.equal( camera.parameters.properties.direction.description, - 'Required for pan/rotate and a tilt nudge; orbit/rotate_globe default right.', + 'Needed for pan/rotate/tilt steps; orbit/rotate_globe default right.', ); assert.equal(camera.parameters.properties.pitchDeg.type, 'number'); - assert.match(camera.parameters.properties.pitchDeg.description, /-45 oblique/); + assert.match(camera.parameters.properties.pitchDeg.description, /^Absolute;/); delete camera.parameters.properties.pitchDeg; assert.equal(camera.parameters.properties.mode.description, 'once = bounded eased nudge; continuous = until stop/manual input. rotate_globe defaults continuous; other motions default once.'); camera.parameters.properties.mode.description = 'once = bounded eased nudge (default); continuous = until stop/manual input.'; diff --git a/src/voice/actionSchemas.test.mjs b/src/voice/actionSchemas.test.mjs index 13f593204..fa9d40bec 100644 --- a/src/voice/actionSchemas.test.mjs +++ b/src/voice/actionSchemas.test.mjs @@ -58,7 +58,7 @@ test('the complete Realtime tool payload pins the manifest-generated layer relea // control_cockpit states the own-layer entry rule (Contacts not required). // move_camera tilt takes an optional pitchDeg angle, described as // absolute, with steps sent as a direction. - '8698aee3cf691351f5c5a68e115a5913ec0f048067ecdf34b252a31afeeec737', + '17e54c1a04054edf48f2eddcf88c60ac66ec7c885fb48596b778bfee0be8a544', ); }); diff --git a/src/voice/pointAndAsk.test.mjs b/src/voice/pointAndAsk.test.mjs index 1f1993a07..c413477b8 100644 --- a/src/voice/pointAndAsk.test.mjs +++ b/src/voice/pointAndAsk.test.mjs @@ -350,9 +350,10 @@ test('deixis prompt lint: one short rule, and every sentinel it names exists in // the analyst area scopes) raised the ceiling to 55,500; tightening the // AREAS rule and the area tool descriptions left it at 55,103 as measured // below (every tool, osm_query included); main's Sea Marks and Ski Pistes - // layers bring it to 55,210, and the tilt pitchDeg argument to 55,335. - // integrationContract's Overpass prompt is the tightest, at 55,495 (5 - // under). A new tool or rule has to fit under this ceiling. + // layers bring it to 55,210, and the tilt pitchDeg argument with main's + // cockpit entry rule to 55,337. integrationContract's Overpass prompt is + // the tightest, at 55,497 (3 under). A new tool or rule has to fit under + // this ceiling. const size = instructions.length + JSON.stringify(GEV_REALTIME_TOOLS).length; assert.ok(size <= 55_500, `prompt size ${size}`); });