Skip to content

Commit ca919b7

Browse files
authored
feat(headless): started sending response linked event for CRGA with EP (#6211)
1 parent c5d11ea commit ca919b7

8 files changed

+94
-2
lines changed

packages/headless/src/api/knowledge/stream-answer-api.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import {
77
updateCitations,
88
updateMessage,
99
} from '../../features/generated-answer/generated-answer-actions.js';
10-
import {logGeneratedAnswerStreamEnd} from '../../features/generated-answer/generated-answer-analytics-actions.js';
10+
import {
11+
logGeneratedAnswerResponseLinked,
12+
logGeneratedAnswerStreamEnd,
13+
} from '../../features/generated-answer/generated-answer-analytics-actions.js';
1114
import type {AnswerApiQueryParams} from '../../features/generated-answer/generated-answer-request.js';
1215
import {fetchEventSource} from '../../utils/fetch-event-source/fetch.js';
1316
import type {EventSourceMessage} from '../../utils/fetch-event-source/parse.js';
@@ -129,6 +132,7 @@ export const updateCacheWithEvent = (
129132
dispatch(
130133
logGeneratedAnswerStreamEnd(parsedPayload.answerGenerated ?? false)
131134
);
135+
dispatch(logGeneratedAnswerResponseLinked());
132136
break;
133137
}
134138
};

packages/headless/src/features/generated-answer/__snapshots__/generated-answer-analytics-actions.test.ts.snap

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,16 @@ exports[`generated answer analytics actions > when analyticsMode is \`next\` > s
6868
]
6969
`;
7070

71+
exports[`generated answer analytics actions > when analyticsMode is \`next\` > should log #logGeneratedAnswerResponseLinked with the response id and answer id 1`] = `
72+
[
73+
"Rga.ResponseLinked",
74+
{
75+
"answerId": "94b77748-2479-4e4b-a4e8-010fa62b04a0",
76+
"responseId": "456",
77+
},
78+
]
79+
`;
80+
7181
exports[`generated answer analytics actions > when analyticsMode is \`next\` > should log #logGeneratedAnswerShowAnswers with the right payload 1`] = `
7282
[
7383
"Rga.AnswerAction",

packages/headless/src/features/generated-answer/__snapshots__/generated-answer-insight-analytics-actions.test.ts.snap

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,16 @@ exports[`generated answer insight analytics actions > when analyticsMode is \`ne
6868
]
6969
`;
7070

71+
exports[`generated answer insight analytics actions > when analyticsMode is \`next\` > should log #logGeneratedAnswerResponseLinked with the response id and answer id 1`] = `
72+
[
73+
"Rga.ResponseLinked",
74+
{
75+
"answerId": "123",
76+
"responseId": "456",
77+
},
78+
]
79+
`;
80+
7181
exports[`generated answer insight analytics actions > when analyticsMode is \`next\` > should log #logGeneratedAnswerShowAnswers with the right payload 1`] = `
7282
[
7383
"Rga.AnswerAction",

packages/headless/src/features/generated-answer/generated-answer-actions.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ import {
3232
requiredNonEmptyString,
3333
validatePayload,
3434
} from '../../utils/validate-payload.js';
35-
import {logGeneratedAnswerStreamEnd} from './generated-answer-analytics-actions.js';
35+
import {
36+
logGeneratedAnswerResponseLinked,
37+
logGeneratedAnswerStreamEnd,
38+
} from './generated-answer-analytics-actions.js';
3639
import {
3740
buildStreamingRequest,
3841
constructAnswerAPIQueryParams,
@@ -264,6 +267,7 @@ export const streamAnswer = createAsyncThunk<
264267
dispatch(setIsStreaming(false));
265268
dispatch(setIsAnswerGenerated(isAnswerGenerated));
266269
dispatch(logGeneratedAnswerStreamEnd(isAnswerGenerated));
270+
dispatch(logGeneratedAnswerResponseLinked());
267271
break;
268272
}
269273
default:

packages/headless/src/features/generated-answer/generated-answer-analytics-actions.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
logGeneratedAnswerExpand,
1818
logGeneratedAnswerFeedback,
1919
logGeneratedAnswerHideAnswers,
20+
logGeneratedAnswerResponseLinked,
2021
logGeneratedAnswerShowAnswers,
2122
logGeneratedAnswerStreamEnd,
2223
logHoverCitation,
@@ -558,5 +559,16 @@ describe('generated answer analytics actions', () => {
558559
expect(emit.mock.calls[0]).toMatchSnapshot();
559560
});
560561
});
562+
563+
it('should log #logGeneratedAnswerResponseLinked with the response id and answer id', async () => {
564+
await logGeneratedAnswerResponseLinked()()(
565+
engine.dispatch,
566+
() => engine.state,
567+
{} as ThunkExtraArguments
568+
);
569+
570+
expect(emit).toHaveBeenCalledTimes(1);
571+
expect(emit.mock.calls[0]).toMatchSnapshot();
572+
});
561573
});
562574
});

packages/headless/src/features/generated-answer/generated-answer-analytics-actions.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,26 @@ export const logGeneratedAnswerStreamEnd = (
248248
},
249249
});
250250

251+
export const logGeneratedAnswerResponseLinked = (): CustomAction =>
252+
makeAnalyticsAction({
253+
prefix: 'analytics/generatedAnswer/responseLinked',
254+
__legacy__getBuilder: () => {
255+
return null;
256+
},
257+
analyticsType: 'Rga.ResponseLinked',
258+
analyticsPayloadBuilder: (state): Rga.ResponseLinked | undefined => {
259+
const generativeQuestionAnsweringId =
260+
generativeQuestionAnsweringIdSelector(state);
261+
return {
262+
answerId: generativeQuestionAnsweringId ?? '',
263+
responseId:
264+
state.search?.searchResponseId ||
265+
state.search?.response.searchUid ||
266+
'',
267+
};
268+
},
269+
});
270+
251271
export const logGeneratedAnswerShowAnswers = (): CustomAction =>
252272
makeAnalyticsAction({
253273
prefix: 'analytics/generatedAnswer/show',

packages/headless/src/features/generated-answer/generated-answer-insight-analytics-actions.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
logGeneratedAnswerExpand,
1717
logGeneratedAnswerFeedback,
1818
logGeneratedAnswerHideAnswers,
19+
logGeneratedAnswerResponseLinked,
1920
logGeneratedAnswerShowAnswers,
2021
logGeneratedAnswerStreamEnd,
2122
logHoverCitation,
@@ -549,5 +550,16 @@ describe('generated answer insight analytics actions', () => {
549550
expect(emit.mock.calls[0]).toMatchSnapshot();
550551
});
551552
});
553+
554+
it('should log #logGeneratedAnswerResponseLinked with the response id and answer id', async () => {
555+
await logGeneratedAnswerResponseLinked()()(
556+
engine.dispatch,
557+
() => engine.state,
558+
{} as ThunkExtraArguments
559+
);
560+
561+
expect(emit).toHaveBeenCalledTimes(1);
562+
expect(emit.mock.calls[0]).toMatchSnapshot();
563+
});
552564
});
553565
});

packages/headless/src/features/generated-answer/generated-answer-insight-analytics-actions.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,26 @@ export const logGeneratedAnswerStreamEnd = (
253253
},
254254
});
255255

256+
export const logGeneratedAnswerResponseLinked = (): InsightAction =>
257+
makeInsightAnalyticsActionFactory(SearchPageEvents.generatedAnswerStreamEnd)({
258+
prefix: 'analytics/generatedAnswer/streamEnd',
259+
__legacy__getBuilder: () => {
260+
return null;
261+
},
262+
analyticsType: 'Rga.ResponseLinked',
263+
analyticsPayloadBuilder: (state): Rga.ResponseLinked | undefined => {
264+
const generativeQuestionAnsweringId =
265+
generativeQuestionAnsweringIdSelector(state);
266+
return {
267+
answerId: generativeQuestionAnsweringId ?? '',
268+
responseId:
269+
state.search?.searchResponseId ||
270+
state.search?.response.searchUid ||
271+
'',
272+
};
273+
},
274+
});
275+
256276
export const logGeneratedAnswerShowAnswers = (): InsightAction =>
257277
makeInsightAnalyticsActionFactory(
258278
SearchPageEvents.generatedAnswerShowAnswers

0 commit comments

Comments
 (0)