UNPKG

n8n-nodes-query-retriever-rerank

Version:

Advanced n8n community node for intelligent document retrieval with multi-step reasoning, reranking, and comprehensive debugging

95 lines (90 loc) 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DebugManager = void 0; class DebugManager { constructor(strategyType, configuration) { this.startTime = Date.now(); this.debugData = { strategy: strategyType, configuration, timing: {}, documentFlow: {}, queryDetails: {} }; } // Set query details setQueryDetails(details) { this.debugData.queryDetails = { ...this.debugData.queryDetails, ...details }; } // Set document flow metrics setDocumentFlow(flow) { this.debugData.documentFlow = { ...this.debugData.documentFlow, ...flow }; } // Add timing information addTiming(phase, startTime) { this.debugData.timing[phase] = `${Date.now() - startTime}ms`; } // Set reranking data setRerankingData(rerankingData) { this.debugData.reranking = rerankingData; } // Set answer generation data setAnswerGenerationData(answerData) { this.debugData.answerGeneration = answerData; } // Finalize debug data with total time finalize() { this.debugData.timing.total = `${Date.now() - this.startTime}ms`; return this.debugData; } // Get current debug data getDebugData() { return this.debugData; } // Store debug data in memory with optional LLM analysis static async storeInMemory(debugData, model, memory, enableLLMAnalysis, originalQuery) { var _a, _b, _c; if (!memory) return; try { let analysis = null; // Generate LLM analysis only if enabled if (enableLLMAnalysis) { const analysisPrompt = `QUERY RETRIEVER DEBUG ANALYSIS The following debug data is from a document retrieval and reranking execution (strategy: ${debugData.strategy}): Debug Data: ${JSON.stringify(debugData, null, 2)} Please analyze this data and provide insights on: - System performance and timing - Strategy effectiveness - Document retrieval effectiveness - Reranking impact - Areas for optimization Provide a structured analysis that could help optimize future queries.`; const analysisResponse = await model.invoke(analysisPrompt); analysis = typeof analysisResponse === 'string' ? analysisResponse : analysisResponse.content || analysisResponse.text || String(analysisResponse); } // Create debug entry (with or without LLM analysis) const debugEntry = { timestamp: new Date().toISOString(), query: originalQuery, strategy: debugData.strategy, debugData, ...(analysis && { analysis }), summary: { totalTime: (_a = debugData.timing) === null || _a === void 0 ? void 0 : _a.total, documentsRetrieved: (_b = debugData.documentFlow) === null || _b === void 0 ? void 0 : _b.totalRetrieved, finalDocuments: (_c = debugData.documentFlow) === null || _c === void 0 ? void 0 : _c.finalCount, strategy: debugData.strategy } }; // Store in memory using the saveContext method with single key-value pairs await memory.saveContext({ input: `Debug data for query: ${originalQuery}` }, { output: JSON.stringify(debugEntry, null, 2) }); } catch (debugError) { // Silent failure for debug storage } } } exports.DebugManager = DebugManager;