From 191b68b6687a387c88babe99f2c14d84909f960e Mon Sep 17 00:00:00 2001 From: jhdcruz Date: Mon, 25 Nov 2024 05:42:09 +0800 Subject: [PATCH] feat(analytics): AI analytics summary --- bun.lockb | Bin 470336 -> 474680 bytes next.config.ts | 2 +- package.json | 1 + .../ActivityAnalytics/StatRatings.tsx | 8 +- .../ActivityAnalytics/SummaryText.tsx | 146 ++++++++++++++++++ .../ActivityAnalytics/analytics.actions.ts | 42 +++++ src/trigger/generate-summary.ts | 98 ++++++++++++ src/utils/json-restructure.ts | 18 ++- 8 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 src/app/portal/activities/_components/ActivityAnalytics/SummaryText.tsx create mode 100644 src/app/portal/activities/_components/ActivityAnalytics/analytics.actions.ts create mode 100644 src/trigger/generate-summary.ts diff --git a/bun.lockb b/bun.lockb index 0e46c3cb4b473f003b8ef97876f7629cc1d6656f..4117cfefa89223a53e81a5987549b848cb84e7d8 100755 GIT binary patch delta 79441 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 { shadow="xs" withBorder > - + diff --git a/src/app/portal/activities/_components/ActivityAnalytics/SummaryText.tsx b/src/app/portal/activities/_components/ActivityAnalytics/SummaryText.tsx new file mode 100644 index 00000000..6869508c --- /dev/null +++ b/src/app/portal/activities/_components/ActivityAnalytics/SummaryText.tsx @@ -0,0 +1,146 @@ +import { memo, useEffect, useState } from 'react'; +import { + Button, + Group, + Text, + Tooltip, + Spoiler, + TypographyStylesProvider, +} from '@mantine/core'; +import { notifications } from '@mantine/notifications'; +import { + IconCheck, + IconFileTextAi, + IconFileTextSpark, +} from '@tabler/icons-react'; +import sanitizeHtml from 'sanitize-html'; +import { createBrowserClient } from '@/libs/supabase/client'; +import { triggerSummary } from './analytics.actions'; +import type { RatingsProps } from './StatRatings'; +import utilStyles from '@/styles/Utilties.module.css'; + +function Summary({ + id, + ratings, + partners, + implementers, + beneficiaries, +}: { + id: string; + ratings: RatingsProps; + partners: number; + implementers: number; + beneficiaries: number; +}) { + const [summary, setSummary] = useState(''); + const [loading, setLoading] = useState(false); + + const total = partners + implementers + beneficiaries; + + const handleGenerate = async () => { + setLoading(true); + notifications.show({ + id: 'summary', + loading: true, + title: 'Generating summary', + message: 'Please wait...', + withBorder: true, + autoClose: false, + }); + + await triggerSummary(id, ratings, { + partners, + implementers, + beneficiaries, + total, + }); + + void fetchSummary(id); + + notifications.update({ + id: 'summary', + loading: false, + icon: , + message: 'Summary generated successfully', + withBorder: true, + autoClose: 4000, + }); + + setLoading(false); + }; + + const fetchSummary = async (activity: string) => { + setLoading(true); + const supabase = createBrowserClient(); + + const { data } = await supabase + .from('analytics_metadata') + .select('content, updated_at') + .eq('activity_id', activity) + .eq('type', 'summary') + .limit(1) + .maybeSingle(); + + setSummary(data?.content ?? ''); + setLoading(false); + }; + + useEffect(() => { + void fetchSummary(id); + }, [id]); + + return ( + <> + + + + Evaluation Summary + + + + + + + + + + + + + + {summary ? ( + +
+ + ) : ( +
+ + No generated summary yet. + +
+ )} + + + ); +} + +export const SummaryText = memo(Summary); diff --git a/src/app/portal/activities/_components/ActivityAnalytics/analytics.actions.ts b/src/app/portal/activities/_components/ActivityAnalytics/analytics.actions.ts new file mode 100644 index 00000000..0c3fd147 --- /dev/null +++ b/src/app/portal/activities/_components/ActivityAnalytics/analytics.actions.ts @@ -0,0 +1,42 @@ +'use server'; + +import { tasks } from '@trigger.dev/sdk/v3'; +import type { generateSummary } from '@/trigger/generate-summary'; +import type { RatingsProps } from './StatRatings'; + +export async function triggerSummary( + id: string, + ratings: RatingsProps, + { + partners, + implementers, + beneficiaries, + }: { + partners: number; + implementers: number; + beneficiaries: number; + total: number; + }, +) { + const total = partners + implementers + beneficiaries; + + const generated = await tasks.triggerAndPoll( + 'generate-summary', + { + activityId: id, + ratings, + count: { + partners, + implementers, + beneficiaries, + total, + }, + }, + { + pollIntervalMs: 60000, // 1 minute + metadata: { activity: id }, + }, + ); + + return generated; +} diff --git a/src/trigger/generate-summary.ts b/src/trigger/generate-summary.ts new file mode 100644 index 00000000..e9aacf81 --- /dev/null +++ b/src/trigger/generate-summary.ts @@ -0,0 +1,98 @@ +import { logger, task, envvars } from '@trigger.dev/sdk/v3'; +import OpenAI from 'openai'; +import { createAdminClient } from '@/libs/supabase/admin-client'; +import type { EmotionsResponse } from '@/libs/huggingface/types'; +import type { RatingsProps } from '@/app/portal/activities/_components/ActivityAnalytics/StatRatings'; +import { aggregateEmotions } from '@/utils/json-restructure'; + +/** + * Generate summary text for an activity. + * + * @param activity - activity name. + * @param rating - activity ratings. + */ +export const generateSummary = task({ + id: 'generate-summary', + machine: { + preset: 'medium-1x', + }, + run: async (payload: { + activityId: string; + ratings: RatingsProps; + count: { + partners: number; + implementers: number; + beneficiaries: number; + total: number; + }; + }) => { + const { ratings, count, activityId } = payload; + + await envvars.retrieve('SUPABASE_URL'); + await envvars.retrieve('SUPABASE_SERVICE_KEY'); + const supabase = createAdminClient(); + + const { data: emotionsRes, error } = await supabase + .from('activity_feedback') + .select('type, score_emotions->emotions') + .eq('activity_id', activityId) + .not('score_emotions', 'is', null) + .returns(); + + if (error) { + logger.error('Unable to get evaluation emotions', { error }); + } + + const emotions = aggregateEmotions(emotionsRes!, true, true); + + // ignore summary when no responses + + const ghToken = await envvars.retrieve('GITHUB_PAT'); + const gptEndpoint = 'https://models.inference.ai.azure.com'; + const gptModel = 'gpt-4o-mini'; + + const client = new OpenAI({ baseURL: gptEndpoint, apiKey: ghToken.value }); + + const response = await client.chat.completions.create({ + messages: [ + { + role: 'system', + content: 'You are a professional data analyst and secretary.', + }, + { + role: 'user', + content: + 'Write a single-paragraph consisting of at least 5 sentences summary report of the feedback evaluation results provided below. Add basic html tags to format the text and highlight important parts, no links.', + }, + { + role: 'user', + content: `Here are ratings score from the evaluation: Partners gave a score of ${ratings?.partners?.score ?? 0}% from ${count.partners} partners, ${ratings?.implementers?.score ?? 0}% from ${count.implementers} for implementers, and ${ratings?.beneficiaries?.score ?? 0}% from ${count.beneficiaries} for beneficiaries. Totaling to ${ratings?.total} total score across ${count.implementers + count.partners + count.beneficiaries} responses.`, + }, + { + role: 'user', + content: `The evaluation feedback also shows that the evaluators have ${emotions?.length} distinct emotions, with the top 10 emotions being ${emotions + .slice(0, 9) + .map((emotion) => emotion.label) + .join(', ')}.`, + }, + ], + model: gptModel, + }); + + const summary = response.choices[0].message.content; + + logger.info('Saving generated result', { summary }); + + // save to db + const { error: dbError } = await supabase.from('analytics_metadata').upsert( + { activity_id: activityId, type: 'summary', content: summary }, + { + onConflict: 'activity_id, type', + }, + ); + + if (dbError) { + logger.error('Unable to save generated summary', { dbError }); + } + }, +}); diff --git a/src/utils/json-restructure.ts b/src/utils/json-restructure.ts index 377c7f8c..c4639fcb 100644 --- a/src/utils/json-restructure.ts +++ b/src/utils/json-restructure.ts @@ -49,8 +49,9 @@ export interface CategorizedEmotions { export function aggregateEmotions( data: EmotionsResponse[], showNeutral: boolean = false, + sortDescending: boolean = false, ): CategorizedEmotions[] { - return data.reduce((acc, response) => { + const result = data.reduce((acc, response) => { if (!response.type) { throw new Error( 'Feedback type is missing, please inform ITSO team with the URL.', @@ -92,6 +93,18 @@ export function aggregateEmotions( return acc; }, []); + + if (sortDescending) { + result.sort((a, b) => { + const sumA = + (a.beneficiaries ?? 0) + (a.partners ?? 0) + (a.implementers ?? 0); + const sumB = + (b.beneficiaries ?? 0) + (b.partners ?? 0) + (b.implementers ?? 0); + return sumB - sumA; + }); + } + + return result; } /** @@ -127,8 +140,9 @@ export function aggregateSentiments( export function aggregateCommonEmotions( data: EmotionsResponse[], showNeutral: boolean = false, + sortDescending: boolean = false, ): CategorizedEmotions[] { - const emotions = aggregateEmotions(data, showNeutral); + const emotions = aggregateEmotions(data, showNeutral, sortDescending); return emotions.filter( (emotion) =>