From 50ef00c336dbaf9825d5631d60bbf00108be6fac Mon Sep 17 00:00:00 2001 From: jtricerolph Date: Fri, 24 Jul 2026 19:39:26 +0000 Subject: [PATCH] =?UTF-8?q?Fix=20AI=20insight=20output=20truncation=20?= =?UTF-8?q?=E2=80=94=20bump=20token=20cap,=20enforce=20bullet=20brevity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Live-tested on the dev stack: with the more verbose Sonnet model, the old 550-token cap cut the last bullet off mid-sentence. Bumped to 800 and told the model to keep each bullet to 1-2 sentences so it isn't relying on the cap alone to stay in bounds. Co-Authored-By: Claude Sonnet 5 --- backend/jobs/ai_insights.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/jobs/ai_insights.py b/backend/jobs/ai_insights.py index 6b4b8d4..d417a68 100644 --- a/backend/jobs/ai_insights.py +++ b/backend/jobs/ai_insights.py @@ -22,7 +22,7 @@ logger = logging.getLogger(__name__) DEFAULT_MODEL = "claude-haiku-4-5-20251001" DEFAULT_DAILY_TOKEN_BUDGET = 12000 -MAX_OUTPUT_TOKENS = 550 +MAX_OUTPUT_TOKENS = 800 FORECAST_HORIZON_DAYS = 30 RATE_MOVEMENT_THRESHOLD = 3.0 # GBP — minimum delta to surface as a market move @@ -322,7 +322,8 @@ def build_prompt( "Output format: first line must be `HEADLINE: `, " "then a blank line, then 4-6 bullet points covering: occupancy/pace, pricing opportunities, " "notable competitor rate movements (only if the Market Movement section has any), UK bank holidays " - "in the window if they affect pace, and anything unusual requiring attention.\n\n" + "in the window if they affect pace, and anything unusual requiring attention. Keep each bullet to " + "1-2 sentences — do not let any single bullet run long enough to risk truncation.\n\n" "A 'Previous Insight' section may be included below — compare against it explicitly: call out what's " "changed, what's resolved, and what's still an open issue. Don't just repeat it verbatim.\n\n" "Never compare a direct/rack rate to a competitor's Booking.com rate as if they were the same channel — "