import {
Document,
SummaryIndex,
SummaryRetrieverMode,
Settings,
} from "llamaindex";
import { openai } from "@llamaindex/openai";
Settings.llm = openai({
apiKey: process.env.OPENAI_API_KEY,
model: "gpt-4o",
});
async function main() {
// Create sample documents
const documents = [
new Document({
text: "LlamaIndex is a data framework for LLM applications. It provides tools for ingestion, indexing, and querying.",
metadata: { chapter: 1 },
}),
new Document({
text: "Vector stores enable efficient similarity search. They store embeddings and support fast retrieval.",
metadata: { chapter: 2 },
}),
new Document({
text: "RAG combines retrieval with generation. It retrieves relevant context then generates responses.",
metadata: { chapter: 3 },
}),
];
// Build summary index
console.log("Building SummaryIndex...");
const index = await SummaryIndex.fromDocuments(documents);
// Test default retrieval (returns all nodes)
console.log("\n=== Default Retrieval ===");
const defaultRetriever = index.asRetriever({
mode: SummaryRetrieverMode.DEFAULT,
});
const allNodes = await defaultRetriever.retrieve({ query: "test" });
console.log(`Retrieved ${allNodes.length} nodes`);
// Test LLM retrieval (selective)
console.log("\n=== LLM Retrieval ===");
const llmRetriever = index.asRetriever({
mode: SummaryRetrieverMode.LLM,
});
const selectedNodes = await llmRetriever.retrieve({
query: "What is RAG?"
});
console.log(`Retrieved ${selectedNodes.length} relevant nodes`);
selectedNodes.forEach((node, idx) => {
console.log(`${idx + 1}. Score: ${node.score} - ${node.node.getText().substring(0, 50)}...`);
});
// Create summary using chat engine
console.log("\n=== Summary Generation ===");
const chatEngine = index.asChatEngine({
mode: SummaryRetrieverMode.LLM,
});
const summary = await chatEngine.chat({
message: "Provide a brief summary of all the topics covered",
});
console.log(summary.message.content);
// Query engine for Q&A
console.log("\n=== Query Engine ===");
const queryEngine = index.asQueryEngine();
const response = await queryEngine.query({
query: "How does RAG work?",
});
console.log(response.toString());
}
main().catch(console.error);