diff --git a/apps/simple/listIndex.ts b/apps/simple/listIndex.ts index 5b7a5203b36431a07ce367016d3f144dce13748d..8ada0b32d06e6d91af370163ad1f74652ae73975 100644 --- a/apps/simple/listIndex.ts +++ b/apps/simple/listIndex.ts @@ -1,11 +1,11 @@ import { Document } from "@llamaindex/core/src/Node"; -import { ListIndex } from "@llamaindex/core/src/index/list"; +import { ListIndex, ListRetrieverMode } from "@llamaindex/core/src/index/list"; import essay from "./essay"; async function main() { const document = new Document({ text: essay }); const index = await ListIndex.fromDocuments([document]); - const queryEngine = index.asQueryEngine(); + const queryEngine = index.asQueryEngine(ListRetrieverMode.LLM); const response = await queryEngine.aquery( "What did the author do growing up?" ); diff --git a/packages/core/src/index/list/ListIndex.ts b/packages/core/src/index/list/ListIndex.ts index 56a17e0fe07c4d8348c3e503b89b4b77bddd0f65..1b9026b9db21cf1a4d31b840b474bb1542b6183d 100644 --- a/packages/core/src/index/list/ListIndex.ts +++ b/packages/core/src/index/list/ListIndex.ts @@ -6,7 +6,10 @@ import { storageContextFromDefaults, } from "../../storage/StorageContext"; import { BaseRetriever } from "../../Retriever"; -import { ListIndexRetriever } from "./ListIndexRetriever"; +import { + ListIndexRetriever, + ListIndexLLMRetriever, +} from "./ListIndexRetriever"; import { ServiceContext, serviceContextFromDefaults, @@ -53,7 +56,7 @@ export class ListIndex extends BaseIndex<IndexList> { "Cannot initialize VectorStoreIndex without nodes or indexStruct" ); } - indexStruct = ListIndex._buildIndexFromNodes( + indexStruct = await ListIndex._buildIndexFromNodes( options.nodes, storageContext.docStore ); @@ -98,7 +101,7 @@ export class ListIndex extends BaseIndex<IndexList> { case ListRetrieverMode.DEFAULT: return new ListIndexRetriever(this); case ListRetrieverMode.LLM: - throw new Error(`Support for LLM retriever mode is not implemented`); + return new ListIndexLLMRetriever(this); default: throw new Error(`Unknown retriever mode: ${mode}`); } @@ -107,17 +110,17 @@ export class ListIndex extends BaseIndex<IndexList> { asQueryEngine( mode: ListRetrieverMode = ListRetrieverMode.DEFAULT ): BaseQueryEngine { - return new RetrieverQueryEngine(this.asRetriever()); + return new RetrieverQueryEngine(this.asRetriever(mode)); } - static _buildIndexFromNodes( + static async _buildIndexFromNodes( nodes: BaseNode[], docStore: BaseDocumentStore, indexStruct?: IndexList - ): IndexList { + ): Promise<IndexList> { indexStruct = indexStruct || new IndexList(); - docStore.addDocuments(nodes, true); + await docStore.addDocuments(nodes, true); for (const node of nodes) { indexStruct.addNode(node); } diff --git a/packages/core/src/index/list/utils.ts b/packages/core/src/index/list/utils.ts index b7a1d3f8fddc0af2c587ef1db2c8ff0db01dbfce..ec248514b89be7ad1962d7ae8f98005706833e86 100644 --- a/packages/core/src/index/list/utils.ts +++ b/packages/core/src/index/list/utils.ts @@ -57,9 +57,9 @@ export const defaultParseChoiceSelectAnswerFn: ChoiceSelectParserFunction = ( throw new Error( `Invalid answer number: ${docNum}. Answer number must be between 1 and ${numChoices}` ); - } else { - parseResult[docNum] = answerRelevance; } + } else { + parseResult[docNum] = answerRelevance; } } catch (e) { if (raiseErr) { diff --git a/packages/core/src/storage/docStore/utils.ts b/packages/core/src/storage/docStore/utils.ts index a7329df67e14d10343234e49f6538c324b452641..2734200268b388989d35866149579c89d28096a0 100644 --- a/packages/core/src/storage/docStore/utils.ts +++ b/packages/core/src/storage/docStore/utils.ts @@ -12,7 +12,7 @@ export function docToJson(doc: BaseNode): Record<string, any> { export function jsonToDoc(docDict: Record<string, any>): BaseNode { let docType = docDict[TYPE_KEY]; - let dataDict = docDict[DATA_KEY]; + let dataDict = JSON.parse(docDict[DATA_KEY]); let doc: BaseNode; if (docType === ObjectType.DOCUMENT) { @@ -23,7 +23,6 @@ export function jsonToDoc(docDict: Record<string, any>): BaseNode { hash: dataDict.hash, }); } else if (docType === ObjectType.TEXT) { - console.log({ dataDict }); doc = new TextNode({ text: dataDict.text, id_: dataDict.id_,