diff --git a/nvidia/txt2kg/assets/frontend/app/rag/page.tsx b/nvidia/txt2kg/assets/frontend/app/rag/page.tsx index 3de4886..5ca16d3 100644 --- a/nvidia/txt2kg/assets/frontend/app/rag/page.tsx +++ b/nvidia/txt2kg/assets/frontend/app/rag/page.tsx @@ -12,6 +12,7 @@ import { ArrowLeft, BarChart2, Search as SearchIcon } from "lucide-react"; export default function RagPage() { const router = useRouter(); const [results, setResults] = useState(null); + const [llmAnswer, setLlmAnswer] = useState(null); const [isLoading, setIsLoading] = useState(false); const [errorMessage, setErrorMessage] = useState(null); const [vectorEnabled, setVectorEnabled] = useState(false); @@ -84,6 +85,14 @@ export default function RagPage() { let resultCount = 0; let relevanceScore = 0; + // Debug logging + console.log('🔍 Query params:', { + usePureRag: params.usePureRag, + useVectorSearch: params.useVectorSearch, + vectorEnabled, + queryMode: params.queryMode + }); + try { // If using pure RAG (Pinecone + LangChain) without graph search if (params.usePureRag) { @@ -136,8 +145,8 @@ export default function RagPage() { } } - // If we have vector embeddings, use enhanced query with metadata - if (vectorEnabled && params.useVectorSearch) { + // If we have vector embeddings AND explicitly selected vector search, use enhanced query with metadata + if (vectorEnabled && params.useVectorSearch && !params.usePureRag) { queryMode = 'vector-search'; try { console.log('Using enhanced RAG with LangChain for query:', query); @@ -184,35 +193,71 @@ export default function RagPage() { } } - // Call the traditional backend API as fallback or if explicitly selected + // Call the LLM-enhanced graph query API + console.log('✅ Using Traditional Graph + LLM approach'); queryMode = 'traditional'; - const response = await fetch(`/api/query`, { + + // Get selected LLM model from localStorage + let llmModel = undefined; + let llmProvider = undefined; + try { + const savedModel = localStorage.getItem("selectedModelForRAG"); + if (savedModel) { + const modelData = JSON.parse(savedModel); + llmModel = modelData.model; + llmProvider = modelData.provider; + console.log(`Using LLM: ${llmModel} (${llmProvider})`); + } + } catch (e) { + console.warn("Could not load selected LLM model, using default"); + } + + const response = await fetch(`/api/graph-query-llm`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query, - kNeighbors: params.kNeighbors, - fanout: params.fanout, - numHops: params.numHops, - topK: params.topK, - queryMode: queryMode, // Explicitly pass the query mode - useTraditional: true // Force use of the direct pattern matching approach + topK: params.topK || 5, + useTraditional: true, + llmModel, + llmProvider }), }); if (!response.ok) { const errorData = await response.json(); - throw new Error(errorData.error || 'Failed to query the RAG backend'); + throw new Error(errorData.error || 'Failed to query with LLM'); } const data = await response.json(); - // Update the results - setResults(data.relevantTriples || []); + // Log the retrieved triples for debugging + console.log('📊 Retrieved Triples:', data.triples); + console.log('🤖 LLM-Generated Answer:', data.answer); + console.log('📈 Triple Count:', data.count); + + // Update the results with the triples (for display) + setResults(data.triples || []); resultCount = data.count || 0; - relevanceScore = data.relevanceScore || 0; + relevanceScore = 0; // No relevance score for traditional search + + // Store the LLM answer for display + console.log('🔍 Checking answer:', { + hasAnswer: !!data.answer, + answerLength: data.answer?.length, + answerPreview: data.answer?.substring(0, 100) + }); + + if (data.answer) { + console.log('💬 Full Answer:', data.answer); + console.log('✅ Setting llmAnswer state'); + setLlmAnswer(data.answer); + } else { + console.log('⚠️ No answer in response, setting null'); + setLlmAnswer(null); + } // Log the query with performance metrics logQuery(query, queryMode, { @@ -279,6 +324,7 @@ export default function RagPage() { const clearResults = () => { setResults(null); + setLlmAnswer(null); setErrorMessage(null); }; @@ -349,6 +395,23 @@ export default function RagPage() { vectorEnabled={vectorEnabled} /> + {/* LLM Answer Section */} + {llmAnswer && ( +
+
+
+ +
+

Answer

+
+
+
+

{llmAnswer}

+
+
+
+ )} + {/* Results Section */} {results && results.length > 0 && (
@@ -356,7 +419,9 @@ export default function RagPage() {
-

Results ({results.length})

+

+ {llmAnswer ? `Supporting Triples (${results.length})` : `Results (${results.length})`} +

{results.map((triple, index) => (