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
JavaScript
;
/**
* 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