@@ -16,19 +16,28 @@ import { submitFeedback } from "../../actions";
1616import { isServiceError } from "@/lib/utils" ;
1717import { useDomain } from "@/hooks/useDomain" ;
1818import useCaptureEvent from "@/hooks/useCaptureEvent" ;
19+ import { LangfuseWeb } from "langfuse" ;
20+ import { env } from "@/env.mjs" ;
1921
2022interface AnswerCardProps {
2123 answerText : string ;
2224 messageId : string ;
2325 chatId : string ;
2426 feedback ?: 'like' | 'dislike' | undefined ;
27+ traceId ?: string ;
2528}
2629
30+ const langfuseWeb = new LangfuseWeb ( {
31+ publicKey : env . NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY ,
32+ baseUrl : env . NEXT_PUBLIC_LANGFUSE_BASE_URL ,
33+ } ) ;
34+
2735export const AnswerCard = forwardRef < HTMLDivElement , AnswerCardProps > ( ( {
2836 answerText,
2937 messageId,
3038 chatId,
3139 feedback : _feedback ,
40+ traceId,
3241} , forwardedRef ) => {
3342 const markdownRendererRef = useRef < HTMLDivElement > ( null ) ;
3443 const { tocItems, activeId } = useExtractTOCItems ( { target : markdownRendererRef . current } ) ;
@@ -55,13 +64,13 @@ export const AnswerCard = forwardRef<HTMLDivElement, AnswerCardProps>(({
5564
5665 const onFeedback = useCallback ( async ( feedbackType : 'like' | 'dislike' ) => {
5766 setIsSubmittingFeedback ( true ) ;
58-
67+
5968 const response = await submitFeedback ( {
6069 chatId,
6170 messageId,
6271 feedbackType
6372 } , domain ) ;
64-
73+
6574 if ( isServiceError ( response ) ) {
6675 toast ( {
6776 description : `❌ Failed to submit feedback: ${ response . message } ` ,
@@ -77,8 +86,14 @@ export const AnswerCard = forwardRef<HTMLDivElement, AnswerCardProps>(({
7786 chatId,
7887 messageId,
7988 } ) ;
89+
90+ langfuseWeb . score ( {
91+ traceId : traceId ,
92+ name : 'user_feedback' ,
93+ value : feedbackType === 'like' ? 1 : 0 ,
94+ } )
8095 }
81-
96+
8297 setIsSubmittingFeedback ( false ) ;
8398 } , [ chatId , messageId , domain , toast , captureEvent ] ) ;
8499
0 commit comments