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_,