From 1cc7b5b7f8a1557920a5ac5808070eb307e3ade0 Mon Sep 17 00:00:00 2001 From: delong3 <236298779+delong3@users.noreply.github.com> Date: Thu, 27 Nov 2025 10:22:49 +1100 Subject: [PATCH] feat(api): usedLlm + formats in request metrics --- apps/api/src/controllers/v1/scrape.ts | 17 +++++++++++++++++ apps/api/src/controllers/v2/scrape.ts | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/apps/api/src/controllers/v1/scrape.ts b/apps/api/src/controllers/v1/scrape.ts index 8baefd989..4bfc7cc17 100644 --- a/apps/api/src/controllers/v1/scrape.ts +++ b/apps/api/src/controllers/v1/scrape.ts @@ -201,6 +201,21 @@ export async function scrapeController( const totalRequestTime = new Date().getTime() - middlewareStartTime; const controllerTime = new Date().getTime() - controllerStartTime; + + let usedLlm = + req.body.formats?.includes("json") || + req.body.formats?.includes("summary") || + req.body.formats?.includes("branding") || + req.body.formats?.includes("extract"); + + if ( + !usedLlm && + req.body.formats?.includes("changeTracking") && + req.body.changeTrackingOptions?.modes?.includes("json") + ) { + usedLlm = true; + } + logger.info("Request metrics", { version: "v1", mode: "scrape", @@ -211,6 +226,8 @@ export async function scrapeController( controllerTime, totalRequestTime, totalWait, + usedLlm, + formats: req.body.formats, }); return res.status(200).json({ diff --git a/apps/api/src/controllers/v2/scrape.ts b/apps/api/src/controllers/v2/scrape.ts index 543e1043d..b009b59f2 100644 --- a/apps/api/src/controllers/v2/scrape.ts +++ b/apps/api/src/controllers/v2/scrape.ts @@ -2,6 +2,7 @@ import { Response } from "express"; import { logger as _logger } from "../../lib/logger"; import { Document, + FormatObject, RequestWithAuth, ScrapeRequest, scrapeRequestSchema, @@ -287,6 +288,22 @@ export async function scrapeController( "scrape.document.error": doc?.metadata?.error, }); + let usedLlm = + !!hasFormatOfType(req.body.formats, "json") || + !!hasFormatOfType(req.body.formats, "summary") || + !!hasFormatOfType(req.body.formats, "branding"); + + if (!usedLlm) { + const ct = hasFormatOfType(req.body.formats, "changeTracking"); + + if (ct && ct.modes?.includes("json")) { + usedLlm = true; + } + } + + const formats: string[] = + req.body.formats?.map((f: FormatObject) => f?.type) ?? []; + logger.info("Request metrics", { version: "v2", scrapeId: jobId, @@ -297,6 +314,8 @@ export async function scrapeController( controllerTime, totalRequestTime, totalWait, + usedLlm, + formats, }); return res.status(200).json({