@@ -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 */
11491151class 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