Skip to content

Commit 0d0894a

Browse files
Improve telemetry gathering for page context
1 parent a5c9696 commit 0d0894a

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

injected/src/features/duck-ai-listener.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,8 @@ export default class DuckAiListener extends ContentFeature {
760760
if (pageDataParsed.content) {
761761
this.pageData = pageDataParsed;
762762

763+
this.promptTelemetry?.sendContextPixelInfo(pageDataParsed, DuckAiPromptTelemetry.CONTEXT_ATTACH_PIXEL_NAME);
764+
763765
// Resolve any pending context promise
764766
if (this.contextPromiseResolve) {
765767
this.contextPromiseResolve(true);
@@ -1148,7 +1150,8 @@ ${truncatedWarning}
11481150
*/
11491151
class DuckAiPromptTelemetry {
11501152
static STORAGE_KEY = 'aiChatPageContextTelemetry';
1151-
static CONTEXT_PIXEL_NAME = 'dc_contextInfo';
1153+
static CONTEXT_ATTACH_PIXEL_NAME = 'dc_contextInfoOnAttach';
1154+
static CONTEXT_SEND_PIXEL_NAME = 'dc_contextInfoOnSubmit';
11521155
static DAILY_PIXEL_NAME = 'dc_pageContextDailyTelemetry';
11531156
static ONE_DAY_MS = 24 * 60 * 60 * 1000; // 24 hours in milliseconds
11541157

@@ -1298,11 +1301,11 @@ class DuckAiPromptTelemetry {
12981301

12991302
const telemetryData = {
13001303
totalPrompts: String(totalPrompts),
1301-
avgRawPromptSize: this.bucketSizeByThousands(avgRawPromptSize),
1304+
avgRawPromptSize: this.bucketSize(avgRawPromptSize),
13021305
...createSizeFields('raw', rawSizeBuckets),
1303-
avgTotalPromptSize: this.bucketSizeByThousands(avgTotalPromptSize),
1306+
avgTotalPromptSize: this.bucketSize(avgTotalPromptSize),
13041307
...createSizeFields('total', totalSizeBuckets),
1305-
avgContextSize: this.bucketSizeByThousands(avgContextSize),
1308+
avgContextSize: this.bucketSize(avgContextSize),
13061309
contextUsageRate: String(Math.round(contextUsageRate * 100)),
13071310
};
13081311

@@ -1337,7 +1340,8 @@ class DuckAiPromptTelemetry {
13371340
if (!globalThis?.DDG?.pixel) {
13381341
return;
13391342
}
1340-
globalThis.DDG.pixel._pixels[DuckAiPromptTelemetry.CONTEXT_PIXEL_NAME] = {};
1343+
globalThis.DDG.pixel._pixels[DuckAiPromptTelemetry.CONTEXT_SEND_PIXEL_NAME] = {};
1344+
globalThis.DDG.pixel._pixels[DuckAiPromptTelemetry.CONTEXT_ATTACH_PIXEL_NAME] = {};
13411345
globalThis.DDG.pixel._pixels[DuckAiPromptTelemetry.DAILY_PIXEL_NAME] = {};
13421346
}
13431347

@@ -1354,30 +1358,30 @@ class DuckAiPromptTelemetry {
13541358
}
13551359

13561360
/**
1357-
* Bucket numbers by thousands for privacy-friendly reporting
1361+
* Bucket numbers by hundreds for privacy-friendly reporting
13581362
* @param {number} number - Number to bucket
1359-
* @returns {string} Bucket lower bound (e.g., '0', '1000', '2000')
1363+
* @returns {string} Bucket lower bound (e.g., '0', '100', '200')
13601364
*/
1361-
bucketSizeByThousands(number) {
1365+
bucketSize(number) {
13621366
if (number <= 0) {
13631367
return '0';
13641368
}
1365-
const bucketIndex = Math.floor(number / 1000);
1366-
return String(bucketIndex * 1000);
1369+
const bucketIndex = Math.floor(number / 100);
1370+
return String(bucketIndex * 100);
13671371
}
13681372

13691373
/**
13701374
* Send context pixel info when context is used
13711375
* @param {Object} contextData - Context data object
13721376
*/
1373-
sendContextPixelInfo(contextData) {
1377+
sendContextPixelInfo(contextData, pixelName) {
13741378
if (!contextData?.content) {
13751379
this.log.warn('sendContextPixelInfo: No content available for pixel tracking');
13761380
return;
13771381
}
13781382

1379-
this.sendPixel(DuckAiPromptTelemetry.CONTEXT_PIXEL_NAME, {
1380-
contextLength: this.bucketSizeByThousands(contextData.content.length),
1383+
this.sendPixel(pixelName, {
1384+
contextLength: contextData.content.length,
13811385
});
13821386
}
13831387

@@ -1406,7 +1410,7 @@ class DuckAiPromptTelemetry {
14061410

14071411
// Send context pixel info if context was used
14081412
if (contextData && contextSize > 0) {
1409-
this.sendContextPixelInfo(contextData);
1413+
this.sendContextPixelInfo(contextData, DuckAiPromptTelemetry.CONTEXT_SEND_PIXEL_NAME);
14101414
}
14111415
// Check if we should fire daily telemetry
14121416
this.checkShouldFireDailyTelemetry();

0 commit comments

Comments
 (0)