From 2791f753e018da7ff691038d1da265bb137c94ba Mon Sep 17 00:00:00 2001
From: Yi Ding <yi.s.ding@gmail.com>
Date: Thu, 29 Jun 2023 07:55:36 -0700
Subject: [PATCH] use Record for object dictionaries

---
 packages/core/src/LLMPredictor.ts                      |  4 ++--
 packages/core/src/LanguageModel.ts                     |  2 +-
 packages/core/src/Node.ts                              |  4 ++--
 packages/core/src/Prompt.ts                            |  2 +-
 packages/core/src/readers/SimpleDirectoryReader.ts     |  6 +++---
 packages/core/src/storage/FileSystem.ts                |  2 +-
 .../core/src/storage/docStore/SimpleDocumentStore.ts   |  2 +-
 packages/core/src/storage/docStore/types.ts            | 10 ++++------
 packages/core/src/storage/kvStore/SimpleKVStore.ts     |  4 +---
 packages/core/src/storage/kvStore/types.ts             |  6 +++---
 .../core/src/storage/vectorStore/SimpleVectorStore.ts  |  4 ++--
 11 files changed, 21 insertions(+), 25 deletions(-)

diff --git a/packages/core/src/LLMPredictor.ts b/packages/core/src/LLMPredictor.ts
index ac54bc1aa..d63e0bbaf 100644
--- a/packages/core/src/LLMPredictor.ts
+++ b/packages/core/src/LLMPredictor.ts
@@ -5,7 +5,7 @@ export interface BaseLLMPredictor {
   getLlmMetadata(): Promise<any>;
   apredict(
     prompt: string | SimplePrompt,
-    input?: { [key: string]: string }
+    input?: Record<string, string>
   ): Promise<string>;
   // stream(prompt: string, options: any): Promise<any>;
 }
@@ -31,7 +31,7 @@ export class ChatGPTLLMPredictor implements BaseLLMPredictor {
 
   async apredict(
     prompt: string | SimplePrompt,
-    input?: { [key: string]: string }
+    input?: Record<string, string>
   ): Promise<string> {
     if (typeof prompt === "string") {
       const result = await this.languageModel.agenerate([
diff --git a/packages/core/src/LanguageModel.ts b/packages/core/src/LanguageModel.ts
index 8862e2fd9..c626ece8c 100644
--- a/packages/core/src/LanguageModel.ts
+++ b/packages/core/src/LanguageModel.ts
@@ -17,7 +17,7 @@ interface BaseMessage {
 
 interface Generation {
   text: string;
-  generationInfo?: { [key: string]: any };
+  generationInfo?: Record<string, any>;
 }
 
 export interface LLMResult {
diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts
index 2c50d0d8a..19a4cc152 100644
--- a/packages/core/src/Node.ts
+++ b/packages/core/src/Node.ts
@@ -25,7 +25,7 @@ export enum MetadataMode {
 export interface RelatedNodeInfo {
   nodeId: string;
   nodeType?: ObjectType;
-  metadata: { [key: string]: any };
+  metadata: Record<string, any>;
   hash?: string;
 }
 
@@ -39,7 +39,7 @@ export abstract class BaseNode {
   embedding?: number[];
 
   // Metadata fields
-  metadata: { [key: string]: any } = {};
+  metadata: Record<string, any> = {};
   excludedEmbedMetadataKeys: string[] = [];
   excludedLlmMetadataKeys: string[] = [];
   relationships: Partial<Record<NodeRelationship, RelatedNodeType>> = {};
diff --git a/packages/core/src/Prompt.ts b/packages/core/src/Prompt.ts
index 8d1db56cf..baa2f3f0a 100644
--- a/packages/core/src/Prompt.ts
+++ b/packages/core/src/Prompt.ts
@@ -3,7 +3,7 @@
  * NOTE this is a different interface compared to LlamaIndex Python
  * NOTE 2: we default to empty string to make it easy to calculate prompt sizes
  */
-export type SimplePrompt = (input: { [key: string]: string }) => string;
+export type SimplePrompt = (input: Record<string, string>) => string;
 
 /*
 DEFAULT_TEXT_QA_PROMPT_TMPL = (
diff --git a/packages/core/src/readers/SimpleDirectoryReader.ts b/packages/core/src/readers/SimpleDirectoryReader.ts
index d4b850489..a3cd309ed 100644
--- a/packages/core/src/readers/SimpleDirectoryReader.ts
+++ b/packages/core/src/readers/SimpleDirectoryReader.ts
@@ -1,5 +1,5 @@
 import _ from "lodash";
-import { Document } from "../Document";
+import { Document } from "../Node";
 import { BaseReader } from "./base";
 import { CompleteFileSystem, walk } from "../storage/FileSystem";
 import { DEFAULT_FS } from "../storage/constants";
@@ -15,7 +15,7 @@ export class TextFileReader implements BaseReader {
   }
 }
 
-const FILE_EXT_TO_READER: { [key: string]: BaseReader } = {
+const FILE_EXT_TO_READER: Record<string, BaseReader> = {
   txt: new TextFileReader(),
   pdf: new PDFReader(),
 };
@@ -24,7 +24,7 @@ export type SimpleDirectoryReaderLoadDataProps = {
   directoryPath: string;
   fs?: CompleteFileSystem;
   defaultReader?: BaseReader | null;
-  fileExtToReader?: { [key: string]: BaseReader };
+  fileExtToReader?: Record<string, BaseReader>;
 };
 
 export default class SimpleDirectoryReader implements BaseReader {
diff --git a/packages/core/src/storage/FileSystem.ts b/packages/core/src/storage/FileSystem.ts
index fbf8e2e2f..ce3d63218 100644
--- a/packages/core/src/storage/FileSystem.ts
+++ b/packages/core/src/storage/FileSystem.ts
@@ -22,7 +22,7 @@ export interface WalkableFileSystem {
  * A filesystem implementation that stores files in memory.
  */
 export class InMemoryFileSystem implements GenericFileSystem {
-  private files: { [filepath: string]: any } = {};
+  private files: Record<string, any> = {};
 
   async writeFile(path: string, content: string, options?: any): Promise<void> {
     this.files[path] = _.cloneDeep(content);
diff --git a/packages/core/src/storage/docStore/SimpleDocumentStore.ts b/packages/core/src/storage/docStore/SimpleDocumentStore.ts
index 1f8fa7168..f2554a3ee 100644
--- a/packages/core/src/storage/docStore/SimpleDocumentStore.ts
+++ b/packages/core/src/storage/docStore/SimpleDocumentStore.ts
@@ -11,7 +11,7 @@ import {
   DEFAULT_FS,
 } from "../constants";
 
-type SaveDict = { [key: string]: any };
+type SaveDict = Record<string, any>;
 
 export class SimpleDocumentStore extends KVDocumentStore {
   private kvStore: SimpleKVStore;
diff --git a/packages/core/src/storage/docStore/types.ts b/packages/core/src/storage/docStore/types.ts
index 5f32f9b67..e744fe060 100644
--- a/packages/core/src/storage/docStore/types.ts
+++ b/packages/core/src/storage/docStore/types.ts
@@ -9,7 +9,7 @@ const defaultPersistPath = `${DEFAULT_PERSIST_DIR}/${DEFAULT_DOC_STORE_PERSIST_F
 
 export interface RefDocInfo {
   docIds: string[];
-  extraInfo: { [key: string]: any };
+  extraInfo: Record<string, any>;
 }
 
 export abstract class BaseDocumentStore {
@@ -41,9 +41,7 @@ export abstract class BaseDocumentStore {
   abstract getDocumentHash(docId: string): Promise<string | undefined>;
 
   // Ref Docs
-  abstract getAllRefDocInfo(): Promise<
-    { [key: string]: RefDocInfo } | undefined
-  >;
+  abstract getAllRefDocInfo(): Promise<Record<string, RefDocInfo> | undefined>;
 
   abstract getRefDocInfo(refDocId: string): Promise<RefDocInfo | undefined>;
 
@@ -66,8 +64,8 @@ export abstract class BaseDocumentStore {
 
   async getNodeDict(nodeIdDict: {
     [index: number]: string;
-  }): Promise<{ [index: number]: BaseNode }> {
-    let result: { [index: number]: BaseNode } = {};
+  }): Promise<Record<number, BaseNode>> {
+    let result: Record<number, BaseNode> = {};
     for (let index in nodeIdDict) {
       result[index] = await this.getNode(nodeIdDict[index]);
     }
diff --git a/packages/core/src/storage/kvStore/SimpleKVStore.ts b/packages/core/src/storage/kvStore/SimpleKVStore.ts
index 196d7631a..bc4928325 100644
--- a/packages/core/src/storage/kvStore/SimpleKVStore.ts
+++ b/packages/core/src/storage/kvStore/SimpleKVStore.ts
@@ -4,9 +4,7 @@ import { DEFAULT_COLLECTION, DEFAULT_FS } from "../constants";
 import * as _ from "lodash";
 import { BaseKVStore } from "./types";
 
-export interface DataType {
-  [key: string]: { [key: string]: any };
-}
+export type DataType = Record<string, Record<string, any>>;
 
 export class SimpleKVStore extends BaseKVStore {
   private data: DataType;
diff --git a/packages/core/src/storage/kvStore/types.ts b/packages/core/src/storage/kvStore/types.ts
index b6c3785fd..0d842bcbd 100644
--- a/packages/core/src/storage/kvStore/types.ts
+++ b/packages/core/src/storage/kvStore/types.ts
@@ -1,16 +1,16 @@
 import { GenericFileSystem } from "../FileSystem";
 const defaultCollection = "data";
 
-type StoredValue = { [key: string]: any } | null;
+type StoredValue = Record<string, any> | null;
 
 export abstract class BaseKVStore {
   abstract put(
     key: string,
-    val: { [key: string]: any },
+    val: Record<string, any>,
     collection?: string
   ): Promise<void>;
   abstract get(key: string, collection?: string): Promise<StoredValue>;
-  abstract getAll(collection?: string): Promise<{ [key: string]: StoredValue }>;
+  abstract getAll(collection?: string): Promise<Record<string, StoredValue>>;
   abstract delete(key: string, collection?: string): Promise<boolean>;
 }
 
diff --git a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
index 489b13022..6ae58d8a9 100644
--- a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
@@ -23,8 +23,8 @@ const LEARNER_MODES = new Set<VectorStoreQueryMode>([
 const MMR_MODE = VectorStoreQueryMode.MMR;
 
 class SimpleVectorStoreData {
-  embeddingDict: { [key: string]: number[] } = {};
-  textIdToRefDocId: { [key: string]: string } = {};
+  embeddingDict: Record<string, number> = {};
+  textIdToRefDocId: Record<string, string> = {};
 }
 
 export class SimpleVectorStore implements VectorStore {
-- 
GitLab