From 6ffb161618e426482c6bc07fb1867cec853a7985 Mon Sep 17 00:00:00 2001
From: Thuc Pham <51660321+thucpn@users.noreply.github.com>
Date: Wed, 3 Apr 2024 14:21:13 +0700
Subject: [PATCH] feat: add ts eslint plugin (#688)

---
 examples/agent/multi_document_agent.ts        |   2 +-
 examples/agent/openai.ts                      |   2 +-
 examples/agent/query_openai_agent.ts          |   2 +-
 examples/agent/react_agent.ts                 |   2 +-
 examples/agent/step_wise_openai.ts            |   2 +-
 examples/agent/step_wise_query_tool.ts        |   2 +-
 examples/agent/step_wise_react.ts             |   2 +-
 examples/agent/stream_openai_agent.ts         |   2 +-
 examples/agent/wikipedia-tool.ts              |   2 +-
 examples/astradb/example.ts                   |   2 +-
 examples/astradb/load.ts                      |   2 +-
 examples/astradb/query.ts                     |   2 +-
 examples/chromadb/preFilters.ts               |   2 +-
 examples/chromadb/test.ts                     |   2 +-
 examples/evaluation/correctness.ts            |   2 +-
 examples/evaluation/faithfulness.ts           |   2 +-
 examples/evaluation/relevancy.ts              |   2 +-
 examples/milvus/load.ts                       |   2 +-
 examples/milvus/query.ts                      |   2 +-
 examples/mongo.ts                             |   2 +-
 examples/mongodb/1_import.ts                  |   2 +-
 examples/mongodb/3_query.ts                   |   2 +-
 examples/multimodal/clip.ts                   |   2 +-
 examples/nodeParser/MarkdownNodeParser.ts     |   2 +-
 examples/pg-vector-store/load-docs.ts         |   6 +-
 examples/pinecone-vector-store/load-docs.ts   |   4 +-
 examples/prompts/promptMixin.ts               |   2 +-
 examples/qdrantdb/preFilters.ts               |   2 +-
 examples/readers/src/docx.ts                  |   2 +-
 examples/readers/src/markdown.ts              |   2 +-
 examples/recipes/cost-analysis.ts             |   2 +-
 examples/routerQueryEngine.ts                 |   2 +-
 examples/split.ts                             |   2 +-
 packages/core/src/indices/keyword/index.ts    |   2 +-
 packages/core/src/indices/summary/index.ts    |   2 +-
 .../core/src/indices/vectorStore/index.ts     |   4 +-
 .../strategies/DuplicatesStrategy.ts          |   2 +-
 .../ingestion/strategies/UpsertsStrategy.ts   |   2 +-
 packages/core/src/objects/base.ts             |   4 +-
 .../src/storage/docStore/KVDocumentStore.ts   |   6 +-
 .../storage/vectorStore/MilvusVectorStore.ts  |   2 +-
 .../src/storage/vectorStore/PGVectorStore.ts  |   2 +-
 .../vectorStore/PineconeVectorStore.ts        |   6 +-
 .../tests/indices/VectorStoreIndex.test.ts    |   4 +-
 .../core/tests/objects/ObjectIndex.test.ts    |   2 +-
 packages/core/tests/utility/mockOpenAI.ts     |   8 +-
 packages/eslint-config-custom/index.js        |  55 +++++-
 packages/eslint-config-custom/package.json    |   3 +-
 .../experimental/examples/jsonQueryEngine.ts  |   2 +-
 packages/experimental/examples/tsconfig.json  |  22 +++
 pnpm-lock.yaml                                | 175 +++++++++++++++++-
 51 files changed, 306 insertions(+), 69 deletions(-)
 create mode 100644 packages/experimental/examples/tsconfig.json

diff --git a/examples/agent/multi_document_agent.ts b/examples/agent/multi_document_agent.ts
index ecdd805b8..0a70ecacb 100644
--- a/examples/agent/multi_document_agent.ts
+++ b/examples/agent/multi_document_agent.ts
@@ -145,4 +145,4 @@ async function main() {
   });
 }
 
-main();
+void main();
diff --git a/examples/agent/openai.ts b/examples/agent/openai.ts
index 58eb11a0a..62b8e35cf 100644
--- a/examples/agent/openai.ts
+++ b/examples/agent/openai.ts
@@ -71,6 +71,6 @@ async function main() {
   console.log(String(response));
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("Done");
 });
diff --git a/examples/agent/query_openai_agent.ts b/examples/agent/query_openai_agent.ts
index f3da8592a..69281f4b5 100644
--- a/examples/agent/query_openai_agent.ts
+++ b/examples/agent/query_openai_agent.ts
@@ -41,6 +41,6 @@ async function main() {
   console.log(String(response));
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("Done");
 });
diff --git a/examples/agent/react_agent.ts b/examples/agent/react_agent.ts
index 1df04fffb..bfd8b8221 100644
--- a/examples/agent/react_agent.ts
+++ b/examples/agent/react_agent.ts
@@ -77,6 +77,6 @@ async function main() {
   console.log(String(response));
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("Done");
 });
diff --git a/examples/agent/step_wise_openai.ts b/examples/agent/step_wise_openai.ts
index abbc273c5..853b577fe 100644
--- a/examples/agent/step_wise_openai.ts
+++ b/examples/agent/step_wise_openai.ts
@@ -90,6 +90,6 @@ async function main() {
   }
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("Done");
 });
diff --git a/examples/agent/step_wise_query_tool.ts b/examples/agent/step_wise_query_tool.ts
index d7a17295a..4b8d4db19 100644
--- a/examples/agent/step_wise_query_tool.ts
+++ b/examples/agent/step_wise_query_tool.ts
@@ -59,6 +59,6 @@ async function main() {
   }
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("Done");
 });
diff --git a/examples/agent/step_wise_react.ts b/examples/agent/step_wise_react.ts
index 4230db586..4e9280cea 100644
--- a/examples/agent/step_wise_react.ts
+++ b/examples/agent/step_wise_react.ts
@@ -85,6 +85,6 @@ async function main() {
   }
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("Done");
 });
diff --git a/examples/agent/stream_openai_agent.ts b/examples/agent/stream_openai_agent.ts
index 3693381f3..219037064 100644
--- a/examples/agent/stream_openai_agent.ts
+++ b/examples/agent/stream_openai_agent.ts
@@ -72,6 +72,6 @@ async function main() {
   }
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("\nDone");
 });
diff --git a/examples/agent/wikipedia-tool.ts b/examples/agent/wikipedia-tool.ts
index 3cb961733..1a5e82fc1 100644
--- a/examples/agent/wikipedia-tool.ts
+++ b/examples/agent/wikipedia-tool.ts
@@ -18,6 +18,6 @@ async function main() {
   console.log(response);
 }
 
-main().then(() => {
+void main().then(() => {
   console.log("Done");
 });
diff --git a/examples/astradb/example.ts b/examples/astradb/example.ts
index 67b0170bc..92831d890 100644
--- a/examples/astradb/example.ts
+++ b/examples/astradb/example.ts
@@ -55,4 +55,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/astradb/load.ts b/examples/astradb/load.ts
index d1982505b..bc306e633 100644
--- a/examples/astradb/load.ts
+++ b/examples/astradb/load.ts
@@ -27,4 +27,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/astradb/query.ts b/examples/astradb/query.ts
index 546920a8b..ff8cb98f4 100644
--- a/examples/astradb/query.ts
+++ b/examples/astradb/query.ts
@@ -23,4 +23,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/chromadb/preFilters.ts b/examples/chromadb/preFilters.ts
index df5da1c86..5265e201d 100644
--- a/examples/chromadb/preFilters.ts
+++ b/examples/chromadb/preFilters.ts
@@ -54,4 +54,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/chromadb/test.ts b/examples/chromadb/test.ts
index c901e82b3..f1084566e 100644
--- a/examples/chromadb/test.ts
+++ b/examples/chromadb/test.ts
@@ -37,4 +37,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/evaluation/correctness.ts b/examples/evaluation/correctness.ts
index 4d920a062..f9f9b7cbb 100644
--- a/examples/evaluation/correctness.ts
+++ b/examples/evaluation/correctness.ts
@@ -22,4 +22,4 @@ However, general relativity, published in 1915, extended these ideas to include
   console.log(result);
 }
 
-main();
+void main();
diff --git a/examples/evaluation/faithfulness.ts b/examples/evaluation/faithfulness.ts
index 8456e3f47..f5b48288f 100644
--- a/examples/evaluation/faithfulness.ts
+++ b/examples/evaluation/faithfulness.ts
@@ -36,4 +36,4 @@ async function main() {
   console.log(result);
 }
 
-main();
+void main();
diff --git a/examples/evaluation/relevancy.ts b/examples/evaluation/relevancy.ts
index 2467d66fd..91360783c 100644
--- a/examples/evaluation/relevancy.ts
+++ b/examples/evaluation/relevancy.ts
@@ -37,4 +37,4 @@ async function main() {
   console.log(result);
 }
 
-main();
+void main();
diff --git a/examples/milvus/load.ts b/examples/milvus/load.ts
index cb4bd19ba..38a62080e 100644
--- a/examples/milvus/load.ts
+++ b/examples/milvus/load.ts
@@ -23,4 +23,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/milvus/query.ts b/examples/milvus/query.ts
index 38ad3a7b1..ff33fc69a 100644
--- a/examples/milvus/query.ts
+++ b/examples/milvus/query.ts
@@ -22,4 +22,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/mongo.ts b/examples/mongo.ts
index 6cabbfe35..24f245ea3 100644
--- a/examples/mongo.ts
+++ b/examples/mongo.ts
@@ -61,4 +61,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/mongodb/1_import.ts b/examples/mongodb/1_import.ts
index 73d6a3a87..a24d16c9f 100644
--- a/examples/mongodb/1_import.ts
+++ b/examples/mongodb/1_import.ts
@@ -31,4 +31,4 @@ async function importJsonToMongo() {
 }
 
 // Run the import function
-importJsonToMongo();
+void importJsonToMongo();
diff --git a/examples/mongodb/3_query.ts b/examples/mongodb/3_query.ts
index 9585d90a8..d8158dc49 100644
--- a/examples/mongodb/3_query.ts
+++ b/examples/mongodb/3_query.ts
@@ -27,4 +27,4 @@ async function query() {
   await client.close();
 }
 
-query();
+void query();
diff --git a/examples/multimodal/clip.ts b/examples/multimodal/clip.ts
index 6d02b7ea9..f3eaa984d 100644
--- a/examples/multimodal/clip.ts
+++ b/examples/multimodal/clip.ts
@@ -30,4 +30,4 @@ async function main() {
   console.log(`Similarity between "${text2}" and the image is ${sim2}`);
 }
 
-main();
+void main();
diff --git a/examples/nodeParser/MarkdownNodeParser.ts b/examples/nodeParser/MarkdownNodeParser.ts
index 3ff7b4d99..acb3146e7 100644
--- a/examples/nodeParser/MarkdownNodeParser.ts
+++ b/examples/nodeParser/MarkdownNodeParser.ts
@@ -21,4 +21,4 @@ Sub-header content
   console.log(splits);
 }
 
-main();
+void main();
diff --git a/examples/pg-vector-store/load-docs.ts b/examples/pg-vector-store/load-docs.ts
index 829bb39b8..32e140041 100755
--- a/examples/pg-vector-store/load-docs.ts
+++ b/examples/pg-vector-store/load-docs.ts
@@ -32,7 +32,7 @@ async function main(args: any) {
   console.log(`Found ${count} files`);
 
   console.log(`Importing contents from ${count} files in ${sourceDir}`);
-  var fileName = "";
+  const fileName = "";
   try {
     // Passing callback fn to the ctor here
     // will enable looging to console.
@@ -42,7 +42,7 @@ async function main(args: any) {
 
     const pgvs = new PGVectorStore();
     pgvs.setCollection(sourceDir);
-    pgvs.clearCollection();
+    await pgvs.clearCollection();
 
     const ctx = await storageContextFromDefaults({ vectorStore: pgvs });
 
@@ -65,4 +65,4 @@ async function main(args: any) {
   process.exit(0);
 }
 
-main(process.argv).catch((err) => console.error(err));
+void main(process.argv).catch((err) => console.error(err));
diff --git a/examples/pinecone-vector-store/load-docs.ts b/examples/pinecone-vector-store/load-docs.ts
index 12a50f546..d5d485021 100755
--- a/examples/pinecone-vector-store/load-docs.ts
+++ b/examples/pinecone-vector-store/load-docs.ts
@@ -32,7 +32,7 @@ async function main(args: any) {
   console.log(`Found ${count} files`);
 
   console.log(`Importing contents from ${count} files in ${sourceDir}`);
-  var fileName = "";
+  const fileName = "";
   try {
     // Passing callback fn to the ctor here
     // will enable looging to console.
@@ -63,4 +63,4 @@ async function main(args: any) {
   process.exit(0);
 }
 
-main(process.argv).catch((err) => console.error(err));
+void main(process.argv).catch((err) => console.error(err));
diff --git a/examples/prompts/promptMixin.ts b/examples/prompts/promptMixin.ts
index bd60fd375..7200d526e 100644
--- a/examples/prompts/promptMixin.ts
+++ b/examples/prompts/promptMixin.ts
@@ -45,4 +45,4 @@ async function main() {
   await queryEngine.query({ query });
 }
 
-main();
+void main();
diff --git a/examples/qdrantdb/preFilters.ts b/examples/qdrantdb/preFilters.ts
index 0cc105a52..35a04e04a 100644
--- a/examples/qdrantdb/preFilters.ts
+++ b/examples/qdrantdb/preFilters.ts
@@ -79,4 +79,4 @@ async function main() {
   }
 }
 
-main();
+void main();
diff --git a/examples/readers/src/docx.ts b/examples/readers/src/docx.ts
index fee35b099..2e1a1a16c 100644
--- a/examples/readers/src/docx.ts
+++ b/examples/readers/src/docx.ts
@@ -20,4 +20,4 @@ async function main() {
   console.log(`Test query > ${SAMPLE_QUERY}:\n`, response.toString());
 }
 
-main();
+void main();
diff --git a/examples/readers/src/markdown.ts b/examples/readers/src/markdown.ts
index e9fb52e46..4037f745e 100644
--- a/examples/readers/src/markdown.ts
+++ b/examples/readers/src/markdown.ts
@@ -20,4 +20,4 @@ async function main() {
   console.log(`Test query > ${SAMPLE_QUERY}:\n`, response.toString());
 }
 
-main();
+void main();
diff --git a/examples/recipes/cost-analysis.ts b/examples/recipes/cost-analysis.ts
index c27a8c6c8..1070118b0 100644
--- a/examples/recipes/cost-analysis.ts
+++ b/examples/recipes/cost-analysis.ts
@@ -31,7 +31,7 @@ Settings.callbackManager.on("llm-end", (event) => {
 
 const question = "Hello, how are you?";
 console.log("Question:", question);
-llm
+void llm
   .chat({
     stream: true,
     messages: [
diff --git a/examples/routerQueryEngine.ts b/examples/routerQueryEngine.ts
index d28f9e30d..5bd169008 100644
--- a/examples/routerQueryEngine.ts
+++ b/examples/routerQueryEngine.ts
@@ -65,4 +65,4 @@ async function main() {
   });
 }
 
-main().then(() => console.log("Done"));
+void main().then(() => console.log("Done"));
diff --git a/examples/split.ts b/examples/split.ts
index ca077f826..ce070c5f3 100644
--- a/examples/split.ts
+++ b/examples/split.ts
@@ -13,4 +13,4 @@ async function main() {
   console.log(chunks);
 }
 
-main();
+void main();
diff --git a/packages/core/src/indices/keyword/index.ts b/packages/core/src/indices/keyword/index.ts
index 3fedcef49..2f0441e0c 100644
--- a/packages/core/src/indices/keyword/index.ts
+++ b/packages/core/src/indices/keyword/index.ts
@@ -278,7 +278,7 @@ export class KeywordTableIndex extends BaseIndex<KeywordTable> {
     serviceContext = serviceContext ?? serviceContextFromDefaults({});
     const docStore = storageContext.docStore;
 
-    docStore.addDocuments(documents, true);
+    await docStore.addDocuments(documents, true);
     for (const doc of documents) {
       docStore.setDocumentHash(doc.id_, doc.hash);
     }
diff --git a/packages/core/src/indices/summary/index.ts b/packages/core/src/indices/summary/index.ts
index 140347963..54f381738 100644
--- a/packages/core/src/indices/summary/index.ts
+++ b/packages/core/src/indices/summary/index.ts
@@ -135,7 +135,7 @@ export class SummaryIndex extends BaseIndex<IndexList> {
     serviceContext = serviceContext;
     const docStore = storageContext.docStore;
 
-    docStore.addDocuments(documents, true);
+    await docStore.addDocuments(documents, true);
     for (const doc of documents) {
       docStore.setDocumentHash(doc.id_, doc.hash);
     }
diff --git a/packages/core/src/indices/vectorStore/index.ts b/packages/core/src/indices/vectorStore/index.ts
index 06f5c20c9..5619f7cb8 100644
--- a/packages/core/src/indices/vectorStore/index.ts
+++ b/packages/core/src/indices/vectorStore/index.ts
@@ -364,7 +364,7 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
     vectorStore: VectorStore,
     refDocId: string,
   ): Promise<void> {
-    vectorStore.delete(refDocId);
+    await vectorStore.delete(refDocId);
 
     if (!vectorStore.storesText) {
       const refDocInfo = await this.docStore.getRefDocInfo(refDocId);
@@ -372,7 +372,7 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
       if (refDocInfo) {
         for (const nodeId of refDocInfo.nodeIds) {
           this.indexStruct.delete(nodeId);
-          vectorStore.delete(nodeId);
+          await vectorStore.delete(nodeId);
         }
       }
       await this.indexStore.addIndexStruct(this.indexStruct);
diff --git a/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts b/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts
index 096b27c19..3aee977bc 100644
--- a/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts
+++ b/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts
@@ -25,7 +25,7 @@ export class DuplicatesStrategy implements TransformComponent {
       }
     }
 
-    this.docStore.addDocuments(nodesToRun, true);
+    await this.docStore.addDocuments(nodesToRun, true);
 
     return nodesToRun;
   }
diff --git a/packages/core/src/ingestion/strategies/UpsertsStrategy.ts b/packages/core/src/ingestion/strategies/UpsertsStrategy.ts
index 1a4eeca7f..b562b1e42 100644
--- a/packages/core/src/ingestion/strategies/UpsertsStrategy.ts
+++ b/packages/core/src/ingestion/strategies/UpsertsStrategy.ts
@@ -26,7 +26,7 @@ export class UpsertsStrategy implements TransformComponent {
       }
     }
     // add non-duplicate docs
-    this.docStore.addDocuments(dedupedNodes, true);
+    await this.docStore.addDocuments(dedupedNodes, true);
     return dedupedNodes;
   }
 }
diff --git a/packages/core/src/objects/base.ts b/packages/core/src/objects/base.ts
index 2934de25f..b7bd96399 100644
--- a/packages/core/src/objects/base.ts
+++ b/packages/core/src/objects/base.ts
@@ -170,10 +170,10 @@ export class ObjectIndex {
     return new ObjectIndex(index, objectMapping);
   }
 
-  insertObject(obj: any): void {
+  async insertObject(obj: any): Promise<void> {
     this._objectNodeMapping.addObj(obj);
     const node = this._objectNodeMapping.toNode(obj);
-    this._index.insertNodes([node]);
+    await this._index.insertNodes([node]);
   }
 
   get tools(): Record<string, BaseTool> {
diff --git a/packages/core/src/storage/docStore/KVDocumentStore.ts b/packages/core/src/storage/docStore/KVDocumentStore.ts
index c18d233c1..ac644faba 100644
--- a/packages/core/src/storage/docStore/KVDocumentStore.ts
+++ b/packages/core/src/storage/docStore/KVDocumentStore.ts
@@ -70,7 +70,7 @@ export class KVDocumentStore extends BaseDocumentStore {
         metadata.refDocId = doc.sourceNode.nodeId!;
       }
 
-      this.kvstore.put(nodeKey, metadata, this.metadataCollection);
+      await this.kvstore.put(nodeKey, metadata, this.metadataCollection);
     }
   }
 
@@ -126,9 +126,9 @@ export class KVDocumentStore extends BaseDocumentStore {
       !_.pull(refDocInfo.nodeIds, docId);
 
       if (refDocInfo.nodeIds.length > 0) {
-        this.kvstore.put(refDocId, refDocInfo, this.refDocCollection);
+        await this.kvstore.put(refDocId, refDocInfo, this.refDocCollection);
       }
-      this.kvstore.delete(refDocId, this.metadataCollection);
+      await this.kvstore.delete(refDocId, this.metadataCollection);
     }
   }
 
diff --git a/packages/core/src/storage/vectorStore/MilvusVectorStore.ts b/packages/core/src/storage/vectorStore/MilvusVectorStore.ts
index 0f06d7b73..0a5f3f107 100644
--- a/packages/core/src/storage/vectorStore/MilvusVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/MilvusVectorStore.ts
@@ -167,7 +167,7 @@ export class MilvusVectorStore implements VectorStore {
     refDocId: string,
     deleteOptions?: Omit<DeleteReq, "ids">,
   ): Promise<void> {
-    this.ensureCollection();
+    await this.ensureCollection();
 
     await this.milvusClient.delete({
       ids: [refDocId],
diff --git a/packages/core/src/storage/vectorStore/PGVectorStore.ts b/packages/core/src/storage/vectorStore/PGVectorStore.ts
index 74faa5055..bc5954245 100644
--- a/packages/core/src/storage/vectorStore/PGVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/PGVectorStore.ts
@@ -94,7 +94,7 @@ export class PGVectorStore implements VectorStore {
         await db.connect();
 
         // Check vector extension
-        db.query("CREATE EXTENSION IF NOT EXISTS vector");
+        await db.query("CREATE EXTENSION IF NOT EXISTS vector");
         await registerType(db);
 
         // Check schema, table(s), index(es)
diff --git a/packages/core/src/storage/vectorStore/PineconeVectorStore.ts b/packages/core/src/storage/vectorStore/PineconeVectorStore.ts
index 515995469..e537ca234 100644
--- a/packages/core/src/storage/vectorStore/PineconeVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/PineconeVectorStore.ts
@@ -142,11 +142,11 @@ export class PineconeVectorStore implements VectorStore {
    */
   async query(
     query: VectorStoreQuery,
-    options?: any,
+    _options?: any,
   ): Promise<VectorStoreQueryResult> {
     const filter = this.toPineconeFilter(query.filters);
 
-    var options: any = {
+    const defaultOptions: any = {
       vector: query.queryEmbedding,
       topK: query.similarityTopK,
       includeValues: true,
@@ -155,7 +155,7 @@ export class PineconeVectorStore implements VectorStore {
     };
 
     const idx = await this.index();
-    const results = await idx.query(options);
+    const results = await idx.query(defaultOptions);
 
     const idList = results.matches.map((row) => row.id);
     const records: FetchResponse<any> = await idx.fetch(idList);
diff --git a/packages/core/tests/indices/VectorStoreIndex.test.ts b/packages/core/tests/indices/VectorStoreIndex.test.ts
index 2d05195d4..50365b59e 100644
--- a/packages/core/tests/indices/VectorStoreIndex.test.ts
+++ b/packages/core/tests/indices/VectorStoreIndex.test.ts
@@ -63,9 +63,7 @@ describe.sequential("VectorStoreIndex", () => {
     expect(entries[0]).toBe(entries[1]);
   });
 
-  afterAll(async () => {
-    // TODO: VectorStoreIndex.fromDocuments running twice is causing a cleanup issue
-    await new Promise((resolve) => setTimeout(resolve, 100));
+  afterAll(() => {
     rmSync(testDir, { recursive: true });
   });
 });
diff --git a/packages/core/tests/objects/ObjectIndex.test.ts b/packages/core/tests/objects/ObjectIndex.test.ts
index 356657919..cd74ac261 100644
--- a/packages/core/tests/objects/ObjectIndex.test.ts
+++ b/packages/core/tests/objects/ObjectIndex.test.ts
@@ -109,7 +109,7 @@ describe("ObjectIndex", () => {
 
     expect(Object.keys(tools).length).toBe(1);
 
-    objectRetriever.insertObject(tool2);
+    await objectRetriever.insertObject(tool2);
 
     tools = objectRetriever.tools;
 
diff --git a/packages/core/tests/utility/mockOpenAI.ts b/packages/core/tests/utility/mockOpenAI.ts
index 8fac02b5b..97fd1e418 100644
--- a/packages/core/tests/utility/mockOpenAI.ts
+++ b/packages/core/tests/utility/mockOpenAI.ts
@@ -20,7 +20,7 @@ export function mockLlmGeneration({
         const chunks = text.split("-");
         for (let i = 0; i < chunks.length; i++) {
           const chunk = chunks[i];
-          callbackManager?.onLLMStream({
+          await callbackManager?.onLLMStream({
             index: i,
             token: {
               id: "id",
@@ -39,7 +39,7 @@ export function mockLlmGeneration({
             },
           });
         }
-        callbackManager?.onLLMStream({
+        await callbackManager?.onLLMStream({
           index: chunks.length,
           isDone: true,
         });
@@ -121,7 +121,7 @@ export function mocStructuredkLlmGeneration({
         const chunks = text.split("-");
         for (let i = 0; i < chunks.length; i++) {
           const chunk = chunks[i];
-          callbackManager?.onLLMStream({
+          await callbackManager?.onLLMStream({
             index: i,
             token: {
               id: "id",
@@ -140,7 +140,7 @@ export function mocStructuredkLlmGeneration({
             },
           });
         }
-        callbackManager?.onLLMStream({
+        await callbackManager?.onLLMStream({
           index: chunks.length,
           isDone: true,
         });
diff --git a/packages/eslint-config-custom/index.js b/packages/eslint-config-custom/index.js
index 41427af2b..cb717fde3 100644
--- a/packages/eslint-config-custom/index.js
+++ b/packages/eslint-config-custom/index.js
@@ -1,7 +1,58 @@
 module.exports = {
-  extends: ["next", "turbo", "prettier"],
+  extends: [
+    "next",
+    "turbo",
+    "prettier",
+    "plugin:@typescript-eslint/recommended-type-checked-only",
+  ],
   rules: {
     "@next/next/no-html-link-for-pages": "off",
+    "@typescript-eslint/no-floating-promises": [
+      "error",
+      {
+        ignoreIIFE: true,
+      },
+    ],
+    "@typescript-eslint/await-thenable": "off",
+    "@typescript-eslint/ban-ts-comment": "off",
+    "@typescript-eslint/ban-types": "off",
+    "no-array-constructor": "off",
+    "@typescript-eslint/no-array-constructor": "off",
+    "@typescript-eslint/no-base-to-string": "off",
+    "@typescript-eslint/no-duplicate-enum-values": "off",
+    "@typescript-eslint/no-duplicate-type-constituents": "off",
+    "@typescript-eslint/no-explicit-any": "off",
+    "@typescript-eslint/no-extra-non-null-assertion": "off",
+    "@typescript-eslint/no-for-in-array": "off",
+    "no-implied-eval": "off",
+    "@typescript-eslint/no-implied-eval": "off",
+    "no-loss-of-precision": "off",
+    "@typescript-eslint/no-loss-of-precision": "off",
+    "@typescript-eslint/no-misused-new": "off",
+    "@typescript-eslint/no-misused-promises": "off",
+    "@typescript-eslint/no-namespace": "off",
+    "@typescript-eslint/no-non-null-asserted-optional-chain": "off",
+    "@typescript-eslint/no-redundant-type-constituents": "off",
+    "@typescript-eslint/no-this-alias": "off",
+    "@typescript-eslint/no-unnecessary-type-assertion": "off",
+    "@typescript-eslint/no-unnecessary-type-constraint": "off",
+    "@typescript-eslint/no-unsafe-argument": "off",
+    "@typescript-eslint/no-unsafe-assignment": "off",
+    "@typescript-eslint/no-unsafe-call": "off",
+    "@typescript-eslint/no-unsafe-declaration-merging": "off",
+    "@typescript-eslint/no-unsafe-enum-comparison": "off",
+    "@typescript-eslint/no-unsafe-member-access": "off",
+    "@typescript-eslint/no-unsafe-return": "off",
+    "no-unused-vars": "off",
+    "@typescript-eslint/no-unused-vars": "off",
+    "@typescript-eslint/no-var-requires": "off",
+    "@typescript-eslint/prefer-as-const": "off",
+    "require-await": "off",
+    "@typescript-eslint/require-await": "off",
+    "@typescript-eslint/restrict-plus-operands": "off",
+    "@typescript-eslint/restrict-template-expressions": "off",
+    "@typescript-eslint/triple-slash-reference": "off",
+    "@typescript-eslint/unbound-method": "off",
   },
   // NOTE I think because we've temporarily removed all of the NextJS stuff
   // from the turborepo not having next in the devDeps causes an error on only
@@ -13,6 +64,8 @@ module.exports = {
     babelOptions: {
       presets: [require.resolve("next/babel")],
     },
+    project: true,
+    __tsconfigRootDir: __dirname,
   },
   settings: {
     react: {
diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json
index 055b7262d..ce4cbd829 100644
--- a/packages/eslint-config-custom/package.json
+++ b/packages/eslint-config-custom/package.json
@@ -8,7 +8,8 @@
     "eslint-config-next": "^13.5.6",
     "eslint-config-prettier": "^8.10.0",
     "eslint-config-turbo": "^1.11.3",
-    "eslint-plugin-react": "7.28.0"
+    "eslint-plugin-react": "7.28.0",
+    "@typescript-eslint/eslint-plugin": "^7.5.0"
   },
   "publishConfig": {
     "access": "public"
diff --git a/packages/experimental/examples/jsonQueryEngine.ts b/packages/experimental/examples/jsonQueryEngine.ts
index 2757e60f6..44dc9cf08 100644
--- a/packages/experimental/examples/jsonQueryEngine.ts
+++ b/packages/experimental/examples/jsonQueryEngine.ts
@@ -111,4 +111,4 @@ async function main() {
   console.log({ rawResponse });
 }
 
-main();
+void main();
diff --git a/packages/experimental/examples/tsconfig.json b/packages/experimental/examples/tsconfig.json
new file mode 100644
index 000000000..722089b2e
--- /dev/null
+++ b/packages/experimental/examples/tsconfig.json
@@ -0,0 +1,22 @@
+{
+  "compilerOptions": {
+    "target": "es2017",
+    "module": "esnext",
+    "moduleResolution": "bundler",
+    "esModuleInterop": true,
+    "forceConsistentCasingInFileNames": true,
+    "strict": true,
+    "skipLibCheck": true,
+    "outDir": "./lib",
+    "tsBuildInfoFile": "./lib/.tsbuildinfo",
+    "incremental": true,
+    "composite": true
+  },
+  "ts-node": {
+    "files": true,
+    "compilerOptions": {
+      "module": "commonjs"
+    }
+  },
+  "include": ["./**/*.ts"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1dbf088e6..8d1774216 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -489,6 +489,9 @@ importers:
 
   packages/eslint-config-custom:
     dependencies:
+      '@typescript-eslint/eslint-plugin':
+        specifier: ^7.5.0
+        version: 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.3)
       eslint-config-next:
         specifier: ^13.5.6
         version: 13.5.6(eslint@8.57.0)(typescript@5.4.3)
@@ -4701,7 +4704,6 @@ packages:
 
   /@types/semver@7.5.6:
     resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
-    dev: true
 
   /@types/send@0.17.4:
     resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
@@ -4759,6 +4761,35 @@ packages:
     dependencies:
       '@types/yargs-parser': 21.0.3
 
+  /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.3):
+    resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      '@typescript-eslint/parser': ^7.0.0
+      eslint: ^8.56.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@eslint-community/regexpp': 4.10.0
+      '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.3)
+      '@typescript-eslint/scope-manager': 7.5.0
+      '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.3)
+      '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.3)
+      '@typescript-eslint/visitor-keys': 7.5.0
+      debug: 4.3.4
+      eslint: 8.57.0
+      graphemer: 1.4.0
+      ignore: 5.3.1
+      natural-compare: 1.4.0
+      semver: 7.6.0
+      ts-api-utils: 1.0.3(typescript@5.4.3)
+      typescript: 5.4.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.3):
     resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
@@ -4780,6 +4811,27 @@ packages:
       - supports-color
     dev: false
 
+  /@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.3):
+    resolution: {integrity: sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      eslint: ^8.56.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/scope-manager': 7.5.0
+      '@typescript-eslint/types': 7.5.0
+      '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3)
+      '@typescript-eslint/visitor-keys': 7.5.0
+      debug: 4.3.4
+      eslint: 8.57.0
+      typescript: 5.4.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@typescript-eslint/scope-manager@6.19.1:
     resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==}
     engines: {node: ^16.0.0 || >=18.0.0}
@@ -4788,6 +4840,34 @@ packages:
       '@typescript-eslint/visitor-keys': 6.19.1
     dev: false
 
+  /@typescript-eslint/scope-manager@7.5.0:
+    resolution: {integrity: sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    dependencies:
+      '@typescript-eslint/types': 7.5.0
+      '@typescript-eslint/visitor-keys': 7.5.0
+    dev: false
+
+  /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.3):
+    resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      eslint: ^8.56.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3)
+      '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.3)
+      debug: 4.3.4
+      eslint: 8.57.0
+      ts-api-utils: 1.0.3(typescript@5.4.3)
+      typescript: 5.4.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
   /@typescript-eslint/types@4.33.0:
     resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==}
     engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
@@ -4803,6 +4883,11 @@ packages:
     engines: {node: ^16.0.0 || >=18.0.0}
     dev: false
 
+  /@typescript-eslint/types@7.5.0:
+    resolution: {integrity: sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    dev: false
+
   /@typescript-eslint/typescript-estree@4.33.0(typescript@3.9.10):
     resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==}
     engines: {node: ^10.12.0 || >=12.0.0}
@@ -4867,6 +4952,47 @@ packages:
       - supports-color
     dev: false
 
+  /@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.3):
+    resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/types': 7.5.0
+      '@typescript-eslint/visitor-keys': 7.5.0
+      debug: 4.3.4
+      globby: 11.1.0
+      is-glob: 4.0.3
+      minimatch: 9.0.3
+      semver: 7.6.0
+      ts-api-utils: 1.0.3(typescript@5.4.3)
+      typescript: 5.4.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
+  /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.3):
+    resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    peerDependencies:
+      eslint: ^8.56.0
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+      '@types/json-schema': 7.0.15
+      '@types/semver': 7.5.6
+      '@typescript-eslint/scope-manager': 7.5.0
+      '@typescript-eslint/types': 7.5.0
+      '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3)
+      eslint: 8.57.0
+      semver: 7.6.0
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: false
+
   /@typescript-eslint/visitor-keys@4.33.0:
     resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==}
     engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1}
@@ -4891,6 +5017,14 @@ packages:
       eslint-visitor-keys: 3.4.3
     dev: false
 
+  /@typescript-eslint/visitor-keys@7.5.0:
+    resolution: {integrity: sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==}
+    engines: {node: ^18.18.0 || >=20.0.0}
+    dependencies:
+      '@typescript-eslint/types': 7.5.0
+      eslint-visitor-keys: 3.4.3
+    dev: false
+
   /@ungap/structured-clone@1.2.0:
     resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
 
@@ -7464,7 +7598,7 @@ packages:
       eslint: 8.57.0
       eslint-import-resolver-node: 0.3.9
       eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
-      eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+      eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)
       eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
       eslint-plugin-react: 7.33.2(eslint@8.57.0)
       eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0)
@@ -7513,7 +7647,7 @@ packages:
       enhanced-resolve: 5.15.0
       eslint: 8.57.0
       eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
-      eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+      eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)
       fast-glob: 3.3.2
       get-tsconfig: 4.7.2
       is-core-module: 2.13.1
@@ -7555,7 +7689,36 @@ packages:
       - supports-color
     dev: false
 
-  /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
+  /eslint-module-utils@2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
+    resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@typescript-eslint/parser': '*'
+      eslint: '*'
+      eslint-import-resolver-node: '*'
+      eslint-import-resolver-typescript: '*'
+      eslint-import-resolver-webpack: '*'
+    peerDependenciesMeta:
+      '@typescript-eslint/parser':
+        optional: true
+      eslint:
+        optional: true
+      eslint-import-resolver-node:
+        optional: true
+      eslint-import-resolver-typescript:
+        optional: true
+      eslint-import-resolver-webpack:
+        optional: true
+    dependencies:
+      '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.3)
+      debug: 3.2.7
+      eslint: 8.57.0
+      eslint-import-resolver-node: 0.3.9
+    transitivePeerDependencies:
+      - supports-color
+    dev: false
+
+  /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.5.0)(eslint@8.57.0):
     resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -7565,7 +7728,7 @@ packages:
       '@typescript-eslint/parser':
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(typescript@5.4.3)
+      '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.3)
       array-includes: 3.1.7
       array.prototype.findlastindex: 1.2.3
       array.prototype.flat: 1.3.2
@@ -7574,7 +7737,7 @@ packages:
       doctrine: 2.1.0
       eslint: 8.57.0
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+      eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.5.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
       hasown: 2.0.0
       is-core-module: 2.13.1
       is-glob: 4.0.3
-- 
GitLab