UNPKG

create-ai-chat-context-experimental

Version:

Phase 2: TypeScript rewrite - AI Chat Context & Memory System with conversation extraction and AICF format support (powered by aicf-core v2.1.0).

84 lines 3.24 kB
"use strict"; /** * This file is part of create-ai-chat-context-experimental. * Licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). * See LICENSE file for details. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.IntentExtractor = void 0; const index_js_1 = require("../types/index.js"); const index_js_2 = require("../types/index.js"); /** * Extract user intents using priority-based approach * PRIORITY 1: Use conversation summary (full content) * PRIORITY 2: Extract from individual messages (fallback) */ class IntentExtractor { /** * Extract user intents from messages and summary * * @param messages - Array of messages * @param summary - Conversation summary (optional) * @returns Result with UserIntent[] or error */ extract(messages, summary) { try { // PRIORITY 1: Extract from conversation summary if (summary && summary.userQueries) { return (0, index_js_2.Ok)(this.extractFromSummary(summary)); } // PRIORITY 2: Extract from individual messages return (0, index_js_2.Ok)(this.extractFromMessages(messages)); } catch (error) { const message = error instanceof Error ? error.message : 'Unknown error'; return (0, index_js_2.Err)(new index_js_1.ExtractionError(`Failed to extract user intents: ${message}`, error)); } } /** * Extract intents from conversation summary * @param summary - Conversation summary * @returns UserIntent[] */ extractFromSummary(summary) { const intents = []; // Split user queries by [User N] markers const userQueryMatches = summary.userQueries.match(/\[User \d+\] (.+?)(?=\n\n\[User \d+\]|\n\n$|$)/gs); if (userQueryMatches && userQueryMatches.length > 0) { userQueryMatches.forEach((query, index) => { const cleanQuery = query.replace(/\[User \d+\] /, '').trim(); if (cleanQuery.length > 0) { intents.push({ timestamp: new Date().toISOString(), intent: cleanQuery, // ✅ FULL content, not truncated inferredFrom: 'conversation_summary', confidence: 'high', messageIndex: index + 1, }); } }); } return intents; } /** * Extract intents from individual messages * @param messages - Array of messages * @returns UserIntent[] */ extractFromMessages(messages) { const intents = []; const userMessages = messages.filter((m) => m.role === 'user'); userMessages.forEach((msg, index) => { intents.push({ timestamp: msg.timestamp, intent: msg.content, // ✅ FULL content, not truncated inferredFrom: 'individual_message', confidence: 'medium', messageIndex: index + 1, }); }); return intents; } } exports.IntentExtractor = IntentExtractor; //# sourceMappingURL=IntentExtractor.js.map