import { memo } from 'react' import { Trash2 } from 'lucide-react' const GENERIC_TITLES = new Set(['new', 'chat', 'conversation', 'session', 'untitled']) const FILLER_WORDS = new Set([ 'a', 'an', 'and', 'are', 'for', 'from', 'have', 'how', 'i', 'in', 'is', 'me', 'my', 'of', 'on', 'or', 'please', 'the', 'to', 'we', 'with', 'you', 'your', ]) function tokenize(text) { return String(text || '') .replace(/(You|Assistant):/gi, ' ') .replace(/[^a-z0-9\s]/gi, ' ') .split(/\s+/) .filter(Boolean) } function toTitleCase(word) { return word.charAt(0).toUpperCase() + word.slice(1) } function buildOverview(session) { const sources = [session.title, session.last_message_preview] const originalWords = tokenize(sources.join(' ')) const preferredWords = originalWords.filter((word) => { const lower = word.toLowerCase() return !GENERIC_TITLES.has(lower) && !FILLER_WORDS.has(lower) }) const chosenWords = (preferredWords.length ? preferredWords : originalWords).slice(0, 3) if (!chosenWords.length) return 'New Conversation' return chosenWords.map((word) => toTitleCase(word.toLowerCase())).join(' ') } function SessionItem({ session, active, onSelect, onDelete }) { const overview = buildOverview(session) return (
) } export default memo(SessionItem)