diff --git a/.changeset/pink-bulldogs-exist.md b/.changeset/pink-bulldogs-exist.md
new file mode 100644
index 0000000000000000000000000000000000000000..891862ad3710a891dcd2afd30dc595cdb0f655f8
--- /dev/null
+++ b/.changeset/pink-bulldogs-exist.md
@@ -0,0 +1,5 @@
+---
+"llamaindex": patch
+---
+
+build: improve tree-shake & reduce unused package import
diff --git a/.eslintrc.js b/.eslintrc.js
index 52a920c488d84c1a0828f67641936d18b61af7aa..4b4b23a9230c3c296cede78df145598d333b0a65 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -11,5 +11,5 @@ module.exports = {
     "max-params": ["error", 4],
     "prefer-const": "error",
   },
-  ignorePatterns: ["dist/"],
+  ignorePatterns: ["dist/", "lib/"],
 };
diff --git a/packages/core/src/ChatHistory.ts b/packages/core/src/ChatHistory.ts
index 31ff9dd707cc81c4cc519ee4598b5abcfa646733..ff8155d9c873242ffbef4f87397c40a92f78c266 100644
--- a/packages/core/src/ChatHistory.ts
+++ b/packages/core/src/ChatHistory.ts
@@ -1,10 +1,7 @@
 import { OpenAI } from "./llm/LLM.js";
-import { ChatMessage, LLM, MessageType } from "./llm/types.js";
-import {
-  defaultSummaryPrompt,
-  messagesToHistoryStr,
-  SummaryPrompt,
-} from "./Prompt.js";
+import type { ChatMessage, LLM, MessageType } from "./llm/types.js";
+import type { SummaryPrompt } from "./Prompt.js";
+import { defaultSummaryPrompt, messagesToHistoryStr } from "./Prompt.js";
 
 /**
  * A ChatHistory is used to keep the state of back and forth chat messages
diff --git a/packages/core/src/GlobalsHelper.ts b/packages/core/src/GlobalsHelper.ts
index 7df884840b6158ccc1e6555eeb8d0b3280d95978..97d283d91fbae24b91eca71cc763fdffc832a713 100644
--- a/packages/core/src/GlobalsHelper.ts
+++ b/packages/core/src/GlobalsHelper.ts
@@ -1,7 +1,11 @@
 import { encodingForModel } from "js-tiktoken";
 
 import { randomUUID } from "@llamaindex/env";
-import { Event, EventTag, EventType } from "./callbacks/CallbackManager.js";
+import type {
+  Event,
+  EventTag,
+  EventType,
+} from "./callbacks/CallbackManager.js";
 
 export enum Tokenizers {
   CL100K_BASE = "cl100k_base",
@@ -32,7 +36,7 @@ class GlobalsHelper {
     };
   }
 
-  tokenizer(encoding?: string) {
+  tokenizer(encoding?: Tokenizers) {
     if (encoding && encoding !== Tokenizers.CL100K_BASE) {
       throw new Error(`Tokenizer encoding ${encoding} not yet supported`);
     }
@@ -43,7 +47,7 @@ class GlobalsHelper {
     return this.defaultTokenizer!.encode.bind(this.defaultTokenizer);
   }
 
-  tokenizerDecoder(encoding?: string) {
+  tokenizerDecoder(encoding?: Tokenizers) {
     if (encoding && encoding !== Tokenizers.CL100K_BASE) {
       throw new Error(`Tokenizer encoding ${encoding} not yet supported`);
     }
diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts
index b03a6d2c5a48cf3bf2f0294465a749db2bbc4d1e..bb7e43c6967db06b2e41467d22da480167450841 100644
--- a/packages/core/src/Node.ts
+++ b/packages/core/src/Node.ts
@@ -65,7 +65,8 @@ export abstract class BaseNode<T extends Metadata = Metadata> {
 
   abstract getContent(metadataMode: MetadataMode): string;
   abstract getMetadataStr(metadataMode: MetadataMode): string;
-  abstract setContent(value: any): void;
+  // todo: set value as a generic type
+  abstract setContent(value: unknown): void;
 
   get sourceNode(): RelatedNodeInfo<T> | undefined {
     const relationship = this.relationships[NodeRelationship.SOURCE];
diff --git a/packages/core/src/OutputParser.ts b/packages/core/src/OutputParser.ts
index 37f016f5bea2ed3296ef979e34fdb5ae4eaa30e0..488f3357662f6b8e7fbd304432b5b7782233f171 100644
--- a/packages/core/src/OutputParser.ts
+++ b/packages/core/src/OutputParser.ts
@@ -1,5 +1,5 @@
-import { SubQuestion } from "./engines/query/types.js";
-import { BaseOutputParser, StructuredOutput } from "./types.js";
+import type { SubQuestion } from "./engines/query/types.js";
+import type { BaseOutputParser, StructuredOutput } from "./types.js";
 
 /**
  * Error class for output parsing. Due to the nature of LLMs, anytime we use LLM
@@ -44,8 +44,8 @@ export function parseJsonMarkdown(text: string) {
   const left_square = text.indexOf("[");
   const left_brace = text.indexOf("{");
 
-  var left: number;
-  var right: number;
+  let left: number;
+  let right: number;
   if (left_square < left_brace && left_square != -1) {
     left = left_square;
     right = text.lastIndexOf("]");
diff --git a/packages/core/src/Prompt.ts b/packages/core/src/Prompt.ts
index bf967d15c1eb1487cd4d4110e49334c31e30b068..3d0cdffefda96d61ae65d59dcc5201ee9d18a5f9 100644
--- a/packages/core/src/Prompt.ts
+++ b/packages/core/src/Prompt.ts
@@ -1,6 +1,6 @@
-import { SubQuestion } from "./engines/query/types.js";
-import { ChatMessage } from "./llm/types.js";
-import { ToolMetadata } from "./types.js";
+import type { SubQuestion } from "./engines/query/types.js";
+import type { ChatMessage } from "./llm/types.js";
+import type { ToolMetadata } from "./types.js";
 
 /**
  * A SimplePrompt is a function that takes a dictionary of inputs and returns a string.
diff --git a/packages/core/src/PromptHelper.ts b/packages/core/src/PromptHelper.ts
index ff11819d509a1039a243e6d4479b382c8c4c4dd3..289e29835873deaef9b001a714708958ad1b01e0 100644
--- a/packages/core/src/PromptHelper.ts
+++ b/packages/core/src/PromptHelper.ts
@@ -1,5 +1,5 @@
 import { globalsHelper } from "./GlobalsHelper.js";
-import { SimplePrompt } from "./Prompt.js";
+import type { SimplePrompt } from "./Prompt.js";
 import { SentenceSplitter } from "./TextSplitter.js";
 import {
   DEFAULT_CHUNK_OVERLAP_RATIO,
diff --git a/packages/core/src/QuestionGenerator.ts b/packages/core/src/QuestionGenerator.ts
index 1d1053967dfb4a123275b59f3cb56ac9e519ccf6..4b36174e33b179c71e6068413a098c4e7de1fd1d 100644
--- a/packages/core/src/QuestionGenerator.ts
+++ b/packages/core/src/QuestionGenerator.ts
@@ -1,14 +1,18 @@
 import { SubQuestionOutputParser } from "./OutputParser.js";
-import {
-  SubQuestionPrompt,
-  buildToolsText,
-  defaultSubQuestionPrompt,
-} from "./Prompt.js";
-import { BaseQuestionGenerator, SubQuestion } from "./engines/query/types.js";
+import type { SubQuestionPrompt } from "./Prompt.js";
+import { buildToolsText, defaultSubQuestionPrompt } from "./Prompt.js";
+import type {
+  BaseQuestionGenerator,
+  SubQuestion,
+} from "./engines/query/types.js";
 import { OpenAI } from "./llm/LLM.js";
-import { LLM } from "./llm/types.js";
+import type { LLM } from "./llm/types.js";
 import { PromptMixin } from "./prompts/index.js";
-import { BaseOutputParser, StructuredOutput, ToolMetadata } from "./types.js";
+import type {
+  BaseOutputParser,
+  StructuredOutput,
+  ToolMetadata,
+} from "./types.js";
 
 /**
  * LLMQuestionGenerator uses the LLM to generate new questions for the LLM using tools and a user query.
diff --git a/packages/core/src/Response.ts b/packages/core/src/Response.ts
index 3f6b9b633f435a0033e7b3d33b892accbfb38fd9..be910b02146f692819c233ea15c8a373720ca654 100644
--- a/packages/core/src/Response.ts
+++ b/packages/core/src/Response.ts
@@ -1,4 +1,4 @@
-import { BaseNode } from "./Node.js";
+import type { BaseNode } from "./Node.js";
 
 /**
  * Response is the output of a LLM
diff --git a/packages/core/src/Retriever.ts b/packages/core/src/Retriever.ts
index f5ed6c15d5c5166e4fd23875702711c7bb68f6ce..516108477c85480e9b37b170b6a5186fee958a02 100644
--- a/packages/core/src/Retriever.ts
+++ b/packages/core/src/Retriever.ts
@@ -1,6 +1,6 @@
-import { Event } from "./callbacks/CallbackManager.js";
-import { NodeWithScore } from "./Node.js";
-import { ServiceContext } from "./ServiceContext.js";
+import type { Event } from "./callbacks/CallbackManager.js";
+import type { NodeWithScore } from "./Node.js";
+import type { ServiceContext } from "./ServiceContext.js";
 
 /**
  * Retrievers retrieve the nodes that most closely match our query in similarity.
diff --git a/packages/core/src/ServiceContext.ts b/packages/core/src/ServiceContext.ts
index ba72d2f363f730830fb57597affdb8ff814939d4..c31b52de1692a9348f2f970b984747ac5412183f 100644
--- a/packages/core/src/ServiceContext.ts
+++ b/packages/core/src/ServiceContext.ts
@@ -1,10 +1,11 @@
 import { PromptHelper } from "./PromptHelper.js";
 import { CallbackManager } from "./callbacks/CallbackManager.js";
 import { OpenAIEmbedding } from "./embeddings/OpenAIEmbedding.js";
-import { BaseEmbedding } from "./embeddings/types.js";
-import { LLM, OpenAI } from "./llm/index.js";
+import type { BaseEmbedding } from "./embeddings/types.js";
+import type { LLM } from "./llm/index.js";
+import { OpenAI } from "./llm/index.js";
 import { SimpleNodeParser } from "./nodeParsers/SimpleNodeParser.js";
-import { NodeParser } from "./nodeParsers/types.js";
+import type { NodeParser } from "./nodeParsers/types.js";
 
 /**
  * The ServiceContext is a collection of components that are used in different parts of the application.
diff --git a/packages/core/src/agent/openai/base.ts b/packages/core/src/agent/openai/base.ts
index a39a4fee725b65237e15e7230eb47c1845c33bcb..ff29ed31ed867422e20c470c2bd8182539c58771 100644
--- a/packages/core/src/agent/openai/base.ts
+++ b/packages/core/src/agent/openai/base.ts
@@ -1,7 +1,8 @@
-import { CallbackManager } from "../../callbacks/CallbackManager.js";
-import { ChatMessage, OpenAI } from "../../llm/index.js";
-import { ObjectRetriever } from "../../objects/base.js";
-import { BaseTool } from "../../types.js";
+import type { CallbackManager } from "../../callbacks/CallbackManager.js";
+import type { ChatMessage } from "../../llm/index.js";
+import { OpenAI } from "../../llm/index.js";
+import type { ObjectRetriever } from "../../objects/base.js";
+import type { BaseTool } from "../../types.js";
 import { AgentRunner } from "../runner/base.js";
 import { OpenAIAgentWorker } from "./worker.js";
 
diff --git a/packages/core/src/agent/openai/utils.ts b/packages/core/src/agent/openai/utils.ts
index 4dd913f5ba6dcd1f2e1ab3ed6f8022f3fad86f62..5f291f44a60c5d0dc63a68f6c4b6383a06dc8483 100644
--- a/packages/core/src/agent/openai/utils.ts
+++ b/packages/core/src/agent/openai/utils.ts
@@ -1,4 +1,4 @@
-import { ToolMetadata } from "../../types.js";
+import type { ToolMetadata } from "../../types.js";
 
 export type OpenAIFunction = {
   type: "function";
diff --git a/packages/core/src/agent/openai/worker.ts b/packages/core/src/agent/openai/worker.ts
index 401645ae7a218dbba9730f9b6288f7d6f70e3c80..84fd81bfa7fa33046188f4431e4125e54ac778ac 100644
--- a/packages/core/src/agent/openai/worker.ts
+++ b/packages/core/src/agent/openai/worker.ts
@@ -1,25 +1,26 @@
 // Assuming that the necessary interfaces and classes (like BaseTool, OpenAI, ChatMessage, CallbackManager, etc.) are defined elsewhere
 
 import { randomUUID } from "@llamaindex/env";
-import { CallbackManager } from "../../callbacks/CallbackManager.js";
+import type { CallbackManager } from "../../callbacks/CallbackManager.js";
 import {
   AgentChatResponse,
   ChatResponseMode,
 } from "../../engines/chat/types.js";
-import {
+import type {
   ChatMessage,
   ChatResponse,
   ChatResponseChunk,
-  OpenAI,
 } from "../../llm/index.js";
+import { OpenAI } from "../../llm/index.js";
 import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer.js";
-import { ObjectRetriever } from "../../objects/base.js";
-import { ToolOutput } from "../../tools/types.js";
+import type { ObjectRetriever } from "../../objects/base.js";
+import type { ToolOutput } from "../../tools/types.js";
 import { callToolWithErrorHandling } from "../../tools/utils.js";
-import { BaseTool } from "../../types.js";
-import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types.js";
+import type { BaseTool } from "../../types.js";
+import type { AgentWorker, Task } from "../types.js";
+import { TaskStep, TaskStepOutput } from "../types.js";
 import { addUserStepToMemory, getFunctionByName } from "../utils.js";
-import { OpenAIToolCall } from "./types/chat.js";
+import type { OpenAIToolCall } from "./types/chat.js";
 import { toOpenAiTool } from "./utils.js";
 
 const DEFAULT_MAX_FUNCTION_CALLS = 5;
diff --git a/packages/core/src/agent/react/base.ts b/packages/core/src/agent/react/base.ts
index fa97c30110f4f25217eaed5763eac4fce5a28a37..a975bf0c4d694754decfc8151f258b562e501d8f 100644
--- a/packages/core/src/agent/react/base.ts
+++ b/packages/core/src/agent/react/base.ts
@@ -1,7 +1,7 @@
-import { CallbackManager } from "../../callbacks/CallbackManager.js";
-import { ChatMessage, LLM } from "../../llm/index.js";
-import { ObjectRetriever } from "../../objects/base.js";
-import { BaseTool } from "../../types.js";
+import type { CallbackManager } from "../../callbacks/CallbackManager.js";
+import type { ChatMessage, LLM } from "../../llm/index.js";
+import type { ObjectRetriever } from "../../objects/base.js";
+import type { BaseTool } from "../../types.js";
 import { AgentRunner } from "../runner/base.js";
 import { ReActAgentWorker } from "./worker.js";
 
diff --git a/packages/core/src/agent/react/formatter.ts b/packages/core/src/agent/react/formatter.ts
index ce2744390d6a233dc3755d63435b08b0bad9498d..d2ed1e3c376a0b17ad1b8f4f4b83709d11d05163 100644
--- a/packages/core/src/agent/react/formatter.ts
+++ b/packages/core/src/agent/react/formatter.ts
@@ -1,7 +1,8 @@
-import { ChatMessage } from "../../llm/index.js";
-import { BaseTool } from "../../types.js";
+import type { ChatMessage } from "../../llm/index.js";
+import type { BaseTool } from "../../types.js";
 import { getReactChatSystemHeader } from "./prompts.js";
-import { BaseReasoningStep, ObservationReasoningStep } from "./types.js";
+import type { BaseReasoningStep } from "./types.js";
+import { ObservationReasoningStep } from "./types.js";
 
 function getReactToolDescriptions(tools: BaseTool[]): string[] {
   const toolDescs: string[] = [];
diff --git a/packages/core/src/agent/react/outputParser.ts b/packages/core/src/agent/react/outputParser.ts
index d1c1d573f6b5858f1d341179b9b1eb753d3bef00..593cdc18784c0d7f0e559ee20db2994a80cee227 100644
--- a/packages/core/src/agent/react/outputParser.ts
+++ b/packages/core/src/agent/react/outputParser.ts
@@ -1,7 +1,7 @@
+import type { BaseReasoningStep } from "./types.js";
 import {
   ActionReasoningStep,
   BaseOutputParser,
-  BaseReasoningStep,
   ResponseReasoningStep,
 } from "./types.js";
 
diff --git a/packages/core/src/agent/react/types.ts b/packages/core/src/agent/react/types.ts
index 660bc1c7906b909321bae72b465932c2ba752b4b..185ec378d439f9df29381d3430da7b5b4b238d2c 100644
--- a/packages/core/src/agent/react/types.ts
+++ b/packages/core/src/agent/react/types.ts
@@ -1,4 +1,4 @@
-import { ChatMessage } from "../../llm/index.js";
+import type { ChatMessage } from "../../llm/index.js";
 
 export interface BaseReasoningStep {
   getContent(): string;
diff --git a/packages/core/src/agent/react/worker.ts b/packages/core/src/agent/react/worker.ts
index 1af501792fc24788374220f8facfdc1b2c43124a..108bfe1363ba1a07a03b1539c01d2cf480e4e4b9 100644
--- a/packages/core/src/agent/react/worker.ts
+++ b/packages/core/src/agent/react/worker.ts
@@ -1,17 +1,19 @@
 import { randomUUID } from "crypto";
 import { CallbackManager } from "../../callbacks/CallbackManager.js";
 import { AgentChatResponse } from "../../engines/chat/index.js";
-import { ChatResponse, LLM, OpenAI } from "../../llm/index.js";
+import type { ChatResponse, LLM } from "../../llm/index.js";
+import { OpenAI } from "../../llm/index.js";
 import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer.js";
-import { ObjectRetriever } from "../../objects/base.js";
+import type { ObjectRetriever } from "../../objects/base.js";
 import { ToolOutput } from "../../tools/index.js";
-import { BaseTool } from "../../types.js";
-import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types.js";
+import type { BaseTool } from "../../types.js";
+import type { AgentWorker, Task } from "../types.js";
+import { TaskStep, TaskStepOutput } from "../types.js";
 import { ReActChatFormatter } from "./formatter.js";
 import { ReActOutputParser } from "./outputParser.js";
+import type { BaseReasoningStep } from "./types.js";
 import {
   ActionReasoningStep,
-  BaseReasoningStep,
   ObservationReasoningStep,
   ResponseReasoningStep,
 } from "./types.js";
diff --git a/packages/core/src/agent/runner/base.ts b/packages/core/src/agent/runner/base.ts
index 5a0764895c8a43bab78877b19c935f7c6ef6d780..80dfd2f7198217fbfd17487a5424b5e9b0b54d5c 100644
--- a/packages/core/src/agent/runner/base.ts
+++ b/packages/core/src/agent/runner/base.ts
@@ -1,14 +1,15 @@
 import { randomUUID } from "crypto";
 import { CallbackManager } from "../../callbacks/CallbackManager.js";
+import type { ChatEngineAgentParams } from "../../engines/chat/index.js";
 import {
   AgentChatResponse,
-  ChatEngineAgentParams,
   ChatResponseMode,
 } from "../../engines/chat/index.js";
-import { ChatMessage, LLM } from "../../llm/index.js";
+import type { ChatMessage, LLM } from "../../llm/index.js";
 import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer.js";
-import { BaseMemory } from "../../memory/types.js";
-import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types.js";
+import type { BaseMemory } from "../../memory/types.js";
+import type { AgentWorker, TaskStepOutput } from "../types.js";
+import { Task, TaskStep } from "../types.js";
 import { AgentState, BaseAgentRunner, TaskState } from "./types.js";
 
 const validateStepFromArgs = (
diff --git a/packages/core/src/agent/runner/types.ts b/packages/core/src/agent/runner/types.ts
index 3def71e6ab07b1226f59f068846e0ae3b241fb7f..9fc4c5a8b645bff325b34146ac5fef5a083dcca5 100644
--- a/packages/core/src/agent/runner/types.ts
+++ b/packages/core/src/agent/runner/types.ts
@@ -1,5 +1,6 @@
-import { AgentChatResponse } from "../../engines/chat/index.js";
-import { BaseAgent, Task, TaskStep, TaskStepOutput } from "../types.js";
+import type { AgentChatResponse } from "../../engines/chat/index.js";
+import type { Task, TaskStep, TaskStepOutput } from "../types.js";
+import { BaseAgent } from "../types.js";
 
 export class TaskState {
   task!: Task;
diff --git a/packages/core/src/agent/types.ts b/packages/core/src/agent/types.ts
index e82060c2e67b6b1198fbfb7d0980aac4d8270162..f861a84884b27e130f8cd6dc78b4df0faba225bb 100644
--- a/packages/core/src/agent/types.ts
+++ b/packages/core/src/agent/types.ts
@@ -1,8 +1,8 @@
-import {
+import type {
   AgentChatResponse,
   ChatEngineAgentParams,
 } from "../engines/chat/index.js";
-import { QueryEngineParamsNonStreaming } from "../types.js";
+import type { QueryEngineParamsNonStreaming } from "../types.js";
 
 export interface AgentWorker {
   initializeStep(task: Task, kwargs?: any): TaskStep;
diff --git a/packages/core/src/agent/utils.ts b/packages/core/src/agent/utils.ts
index d1953bf47ff696dbe118848b75f73846af893243..858306856ee1b528a3d0a44ceb60230079692709 100644
--- a/packages/core/src/agent/utils.ts
+++ b/packages/core/src/agent/utils.ts
@@ -1,7 +1,7 @@
-import { ChatMessage } from "../llm/index.js";
-import { ChatMemoryBuffer } from "../memory/ChatMemoryBuffer.js";
-import { BaseTool } from "../types.js";
-import { TaskStep } from "./types.js";
+import type { ChatMessage } from "../llm/index.js";
+import type { ChatMemoryBuffer } from "../memory/ChatMemoryBuffer.js";
+import type { BaseTool } from "../types.js";
+import type { TaskStep } from "./types.js";
 
 /**
  * Adds the user's input to the memory.
diff --git a/packages/core/src/callbacks/CallbackManager.ts b/packages/core/src/callbacks/CallbackManager.ts
index 038707bf0d66711de54cbfa9fa27b7e900c3d075..a3334504a946dd4809cbd373dd3da97ba4bb5d00 100644
--- a/packages/core/src/callbacks/CallbackManager.ts
+++ b/packages/core/src/callbacks/CallbackManager.ts
@@ -1,5 +1,5 @@
 import type { Anthropic } from "@anthropic-ai/sdk";
-import { NodeWithScore } from "../Node.js";
+import type { NodeWithScore } from "../Node.js";
 
 /*
   An event is a wrapper that groups related operations.
diff --git a/packages/core/src/cloud/LlamaCloudIndex.ts b/packages/core/src/cloud/LlamaCloudIndex.ts
index ff433c157a67aaf4e89d6ddb5cc5ea6df46f04f5..8eb65dd413bf469a749fa864a0a6f33abcd61b50 100644
--- a/packages/core/src/cloud/LlamaCloudIndex.ts
+++ b/packages/core/src/cloud/LlamaCloudIndex.ts
@@ -1,10 +1,11 @@
-import { BaseRetriever } from "../Retriever.js";
+import type { BaseRetriever } from "../Retriever.js";
 import { RetrieverQueryEngine } from "../engines/query/RetrieverQueryEngine.js";
-import { BaseNodePostprocessor } from "../postprocessors/types.js";
-import { BaseSynthesizer } from "../synthesizers/types.js";
-import { BaseQueryEngine } from "../types.js";
-import { LlamaCloudRetriever, RetrieveParams } from "./LlamaCloudRetriever.js";
-import { CloudConstructorParams } from "./types.js";
+import type { BaseNodePostprocessor } from "../postprocessors/types.js";
+import type { BaseSynthesizer } from "../synthesizers/types.js";
+import type { BaseQueryEngine } from "../types.js";
+import type { RetrieveParams } from "./LlamaCloudRetriever.js";
+import { LlamaCloudRetriever } from "./LlamaCloudRetriever.js";
+import type { CloudConstructorParams } from "./types.js";
 
 export class LlamaCloudIndex {
   params: CloudConstructorParams;
diff --git a/packages/core/src/cloud/LlamaCloudRetriever.ts b/packages/core/src/cloud/LlamaCloudRetriever.ts
index c3e3613f9e0671a4ecf7055c50d749da46a1a1c2..7938a59c06b0b8296b4821c2faee298cb4f6aac2 100644
--- a/packages/core/src/cloud/LlamaCloudRetriever.ts
+++ b/packages/core/src/cloud/LlamaCloudRetriever.ts
@@ -1,17 +1,13 @@
-import { PlatformApi, PlatformApiClient } from "@llamaindex/cloud";
+import type { PlatformApi, PlatformApiClient } from "@llamaindex/cloud";
 import { globalsHelper } from "../GlobalsHelper.js";
-import { NodeWithScore, ObjectType, jsonToNode } from "../Node.js";
-import { BaseRetriever } from "../Retriever.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../ServiceContext.js";
-import { Event } from "../callbacks/CallbackManager.js";
-import {
-  ClientParams,
-  CloudConstructorParams,
-  DEFAULT_PROJECT_NAME,
-} from "./types.js";
+import type { NodeWithScore } from "../Node.js";
+import { ObjectType, jsonToNode } from "../Node.js";
+import type { BaseRetriever } from "../Retriever.js";
+import type { ServiceContext } from "../ServiceContext.js";
+import { serviceContextFromDefaults } from "../ServiceContext.js";
+import type { Event } from "../callbacks/CallbackManager.js";
+import type { ClientParams, CloudConstructorParams } from "./types.js";
+import { DEFAULT_PROJECT_NAME } from "./types.js";
 import { getClient } from "./utils.js";
 
 export type RetrieveParams = Omit<
diff --git a/packages/core/src/cloud/types.ts b/packages/core/src/cloud/types.ts
index 3fc118344130f33ae9ed80b8a60849e60e4fd9b6..a77ec3314adda4cf8b6407d967bc9a73b6b5fd2d 100644
--- a/packages/core/src/cloud/types.ts
+++ b/packages/core/src/cloud/types.ts
@@ -1,4 +1,4 @@
-import { ServiceContext } from "../ServiceContext.js";
+import type { ServiceContext } from "../ServiceContext.js";
 
 export const DEFAULT_PROJECT_NAME = "default";
 export const DEFAULT_BASE_URL = "https://api.cloud.llamaindex.ai";
diff --git a/packages/core/src/cloud/utils.ts b/packages/core/src/cloud/utils.ts
index e6a7a1dc5430b4c36f84d69e26e8996be717f1b9..69a80861f8615497a36e1167fce568eb3a6a4cf0 100644
--- a/packages/core/src/cloud/utils.ts
+++ b/packages/core/src/cloud/utils.ts
@@ -1,5 +1,6 @@
-import { PlatformApiClient } from "@llamaindex/cloud";
-import { ClientParams, DEFAULT_BASE_URL } from "./types.js";
+import type { PlatformApiClient } from "@llamaindex/cloud";
+import type { ClientParams } from "./types.js";
+import { DEFAULT_BASE_URL } from "./types.js";
 
 export async function getClient({
   apiKey,
diff --git a/packages/core/src/embeddings/ClipEmbedding.ts b/packages/core/src/embeddings/ClipEmbedding.ts
index 6658342cf76af8affe1d0bdd36b9fec5e6504b4b..bc9a506bfa188c3316f7483e96ca18c6e8392eee 100644
--- a/packages/core/src/embeddings/ClipEmbedding.ts
+++ b/packages/core/src/embeddings/ClipEmbedding.ts
@@ -1,4 +1,4 @@
-import { ImageType } from "../Node.js";
+import type { ImageType } from "../Node.js";
 import { MultiModalEmbedding } from "./MultiModalEmbedding.js";
 import { readImage } from "./utils.js";
 
diff --git a/packages/core/src/embeddings/MultiModalEmbedding.ts b/packages/core/src/embeddings/MultiModalEmbedding.ts
index df1958f6b15269c58ab84f667a3817e3a2a26602..e2c7c1434198360aac4cad6e294c7d1478351155 100644
--- a/packages/core/src/embeddings/MultiModalEmbedding.ts
+++ b/packages/core/src/embeddings/MultiModalEmbedding.ts
@@ -1,4 +1,4 @@
-import { ImageType } from "../Node.js";
+import type { ImageType } from "../Node.js";
 import { BaseEmbedding } from "./types.js";
 
 /*
diff --git a/packages/core/src/embeddings/OllamaEmbedding.ts b/packages/core/src/embeddings/OllamaEmbedding.ts
index a6c326ef61a9e6b5c9ec870232316a1a221836e4..5ce8f44c6323ba529507cad0dc021e2df93109a2 100644
--- a/packages/core/src/embeddings/OllamaEmbedding.ts
+++ b/packages/core/src/embeddings/OllamaEmbedding.ts
@@ -1,5 +1,5 @@
 import { Ollama } from "../llm/ollama.js";
-import { BaseEmbedding } from "./types.js";
+import type { BaseEmbedding } from "./types.js";
 
 /**
  * OllamaEmbedding is an alias for Ollama that implements the BaseEmbedding interface.
diff --git a/packages/core/src/embeddings/OpenAIEmbedding.ts b/packages/core/src/embeddings/OpenAIEmbedding.ts
index 5402111f9ba15df9112b558a0dec38aa138b168c..e46de7c80f0c525ee957361f14b12a3338191246 100644
--- a/packages/core/src/embeddings/OpenAIEmbedding.ts
+++ b/packages/core/src/embeddings/OpenAIEmbedding.ts
@@ -1,12 +1,13 @@
-import { ClientOptions as OpenAIClientOptions } from "openai";
+import type { ClientOptions as OpenAIClientOptions } from "openai";
+import type { AzureOpenAIConfig } from "../llm/azure.js";
 import {
-  AzureOpenAIConfig,
   getAzureBaseUrl,
   getAzureConfigFromEnv,
   getAzureModel,
   shouldUseAzure,
 } from "../llm/azure.js";
-import { OpenAISession, getOpenAISession } from "../llm/open_ai.js";
+import type { OpenAISession } from "../llm/open_ai.js";
+import { getOpenAISession } from "../llm/open_ai.js";
 import { BaseEmbedding } from "./types.js";
 
 export const ALL_OPENAI_EMBEDDING_MODELS = {
diff --git a/packages/core/src/embeddings/types.ts b/packages/core/src/embeddings/types.ts
index c365dfa1cb958e45b9dad4bb3777b36068026373..9c5892bdb0095f50662744e569c0af2ec3cc0420 100644
--- a/packages/core/src/embeddings/types.ts
+++ b/packages/core/src/embeddings/types.ts
@@ -1,5 +1,6 @@
-import { BaseNode, MetadataMode } from "../Node.js";
-import { TransformComponent } from "../ingestion/types.js";
+import type { BaseNode } from "../Node.js";
+import { MetadataMode } from "../Node.js";
+import type { TransformComponent } from "../ingestion/types.js";
 import { SimilarityType, similarity } from "./utils.js";
 
 const DEFAULT_EMBED_BATCH_SIZE = 10;
diff --git a/packages/core/src/embeddings/utils.ts b/packages/core/src/embeddings/utils.ts
index d69b5c3c160e32a3bc76404f3dbe38e4db72e843..5c42b83c8a7c03e4d0893a75a95be09c9ffdfc69 100644
--- a/packages/core/src/embeddings/utils.ts
+++ b/packages/core/src/embeddings/utils.ts
@@ -1,6 +1,6 @@
 import { defaultFS } from "@llamaindex/env";
 import _ from "lodash";
-import { ImageType } from "../Node.js";
+import type { ImageType } from "../Node.js";
 import { DEFAULT_SIMILARITY_TOP_K } from "../constants.js";
 import { VectorStoreQueryMode } from "../storage/vectorStore/types.js";
 
@@ -171,13 +171,13 @@ export function getTopKMMREmbeddings(
 
   while (results.length < Math.min(similarityTopKCount, embeddingLength)) {
     results.push([score, highScoreId]);
-    embedMap.delete(highScoreId!);
+    embedMap.delete(highScoreId);
     const recentEmbeddingId = highScoreId;
     score = Number.NEGATIVE_INFINITY;
     for (const embedId of Array.from(embedMap.keys())) {
       const overlapWithRecent = similarityFn(
         embeddings[embedMap.get(embedId)!],
-        embeddings[fullEmbedMap.get(recentEmbeddingId!)!],
+        embeddings[fullEmbedMap.get(recentEmbeddingId)!],
       );
       if (
         threshold * embedSimilarity.get(embedId)! -
diff --git a/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts b/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts
index 22524203df891043da253c424f79e3171201e3c5..7baf58d73bf8410fe89bbe25490f48fea088de77 100644
--- a/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts
+++ b/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts
@@ -1,19 +1,18 @@
-import { ChatHistory, getHistory } from "../../ChatHistory.js";
+import type { ChatHistory } from "../../ChatHistory.js";
+import { getHistory } from "../../ChatHistory.js";
+import type { CondenseQuestionPrompt } from "../../Prompt.js";
 import {
-  CondenseQuestionPrompt,
   defaultCondenseQuestionPrompt,
   messagesToHistoryStr,
 } from "../../Prompt.js";
-import { Response } from "../../Response.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../../ServiceContext.js";
-import { ChatMessage, LLM } from "../../llm/index.js";
+import type { Response } from "../../Response.js";
+import type { ServiceContext } from "../../ServiceContext.js";
+import { serviceContextFromDefaults } from "../../ServiceContext.js";
+import type { ChatMessage, LLM } from "../../llm/index.js";
 import { extractText, streamReducer } from "../../llm/utils.js";
 import { PromptMixin } from "../../prompts/index.js";
-import { BaseQueryEngine } from "../../types.js";
-import {
+import type { BaseQueryEngine } from "../../types.js";
+import type {
   ChatEngine,
   ChatEngineParamsNonStreaming,
   ChatEngineParamsStreaming,
diff --git a/packages/core/src/engines/chat/ContextChatEngine.ts b/packages/core/src/engines/chat/ContextChatEngine.ts
index 7d63c74d049f62ca5a09610dc636189e326df0a2..a7889ad494069886376cc0593e7fd574e371279a 100644
--- a/packages/core/src/engines/chat/ContextChatEngine.ts
+++ b/packages/core/src/engines/chat/ContextChatEngine.ts
@@ -1,25 +1,22 @@
 import { randomUUID } from "@llamaindex/env";
-import { ChatHistory, getHistory } from "../../ChatHistory.js";
-import { ContextSystemPrompt } from "../../Prompt.js";
+import type { ChatHistory } from "../../ChatHistory.js";
+import { getHistory } from "../../ChatHistory.js";
+import type { ContextSystemPrompt } from "../../Prompt.js";
 import { Response } from "../../Response.js";
-import { BaseRetriever } from "../../Retriever.js";
-import { Event } from "../../callbacks/CallbackManager.js";
-import {
-  ChatMessage,
-  ChatResponseChunk,
-  LLM,
-  OpenAI,
-} from "../../llm/index.js";
-import { MessageContent } from "../../llm/types.js";
+import type { BaseRetriever } from "../../Retriever.js";
+import type { Event } from "../../callbacks/CallbackManager.js";
+import type { ChatMessage, ChatResponseChunk, LLM } from "../../llm/index.js";
+import { OpenAI } from "../../llm/index.js";
+import type { MessageContent } from "../../llm/types.js";
 import {
   extractText,
   streamConverter,
   streamReducer,
 } from "../../llm/utils.js";
-import { BaseNodePostprocessor } from "../../postprocessors/index.js";
+import type { BaseNodePostprocessor } from "../../postprocessors/index.js";
 import { PromptMixin } from "../../prompts/Mixin.js";
 import { DefaultContextGenerator } from "./DefaultContextGenerator.js";
-import {
+import type {
   ChatEngine,
   ChatEngineParamsNonStreaming,
   ChatEngineParamsStreaming,
diff --git a/packages/core/src/engines/chat/DefaultContextGenerator.ts b/packages/core/src/engines/chat/DefaultContextGenerator.ts
index 4c96c744c14ed7ec53a10b2cb1d427c6d601ccf1..7fbb6ab37530a3291f47e0ec1ec3df45bc9854ec 100644
--- a/packages/core/src/engines/chat/DefaultContextGenerator.ts
+++ b/packages/core/src/engines/chat/DefaultContextGenerator.ts
@@ -1,14 +1,12 @@
 import { randomUUID } from "@llamaindex/env";
-import { NodeWithScore, TextNode } from "../../Node.js";
-import {
-  ContextSystemPrompt,
-  defaultContextSystemPrompt,
-} from "../../Prompt.js";
-import { BaseRetriever } from "../../Retriever.js";
-import { Event } from "../../callbacks/CallbackManager.js";
-import { BaseNodePostprocessor } from "../../postprocessors/index.js";
+import type { NodeWithScore, TextNode } from "../../Node.js";
+import type { ContextSystemPrompt } from "../../Prompt.js";
+import { defaultContextSystemPrompt } from "../../Prompt.js";
+import type { BaseRetriever } from "../../Retriever.js";
+import type { Event } from "../../callbacks/CallbackManager.js";
+import type { BaseNodePostprocessor } from "../../postprocessors/index.js";
 import { PromptMixin } from "../../prompts/index.js";
-import { Context, ContextGenerator } from "./types.js";
+import type { Context, ContextGenerator } from "./types.js";
 
 export class DefaultContextGenerator
   extends PromptMixin
diff --git a/packages/core/src/engines/chat/SimpleChatEngine.ts b/packages/core/src/engines/chat/SimpleChatEngine.ts
index 16617331b22027a682f65f15e76eaf7b8c0c2765..bd1c82f6496074acd076e13b76fbca4bffd9807e 100644
--- a/packages/core/src/engines/chat/SimpleChatEngine.ts
+++ b/packages/core/src/engines/chat/SimpleChatEngine.ts
@@ -1,8 +1,10 @@
-import { ChatHistory, getHistory } from "../../ChatHistory.js";
+import type { ChatHistory } from "../../ChatHistory.js";
+import { getHistory } from "../../ChatHistory.js";
 import { Response } from "../../Response.js";
-import { ChatResponseChunk, LLM, OpenAI } from "../../llm/index.js";
+import type { ChatResponseChunk, LLM } from "../../llm/index.js";
+import { OpenAI } from "../../llm/index.js";
 import { streamConverter, streamReducer } from "../../llm/utils.js";
-import {
+import type {
   ChatEngine,
   ChatEngineParamsNonStreaming,
   ChatEngineParamsStreaming,
diff --git a/packages/core/src/engines/chat/types.ts b/packages/core/src/engines/chat/types.ts
index 80140fb45dd0df0ed61cd09f40aeea6df3a7b58c..3a8478d0c95a804fb1f8d7e490aae51162334f0e 100644
--- a/packages/core/src/engines/chat/types.ts
+++ b/packages/core/src/engines/chat/types.ts
@@ -1,10 +1,10 @@
-import { ChatHistory } from "../../ChatHistory.js";
-import { BaseNode, NodeWithScore } from "../../Node.js";
-import { Response } from "../../Response.js";
-import { Event } from "../../callbacks/CallbackManager.js";
-import { ChatMessage } from "../../llm/index.js";
-import { MessageContent } from "../../llm/types.js";
-import { ToolOutput } from "../../tools/types.js";
+import type { ChatHistory } from "../../ChatHistory.js";
+import type { BaseNode, NodeWithScore } from "../../Node.js";
+import type { Response } from "../../Response.js";
+import type { Event } from "../../callbacks/CallbackManager.js";
+import type { ChatMessage } from "../../llm/index.js";
+import type { MessageContent } from "../../llm/types.js";
+import type { ToolOutput } from "../../tools/types.js";
 
 /**
  * Represents the base parameters for ChatEngine.
diff --git a/packages/core/src/engines/query/RetrieverQueryEngine.ts b/packages/core/src/engines/query/RetrieverQueryEngine.ts
index cc6fa25911bc8346cfe8ab76e31b2f068c0a5f89..a8adbe0adb68fc9b60302c2baa92490ea83ad2a3 100644
--- a/packages/core/src/engines/query/RetrieverQueryEngine.ts
+++ b/packages/core/src/engines/query/RetrieverQueryEngine.ts
@@ -1,16 +1,14 @@
 import { randomUUID } from "@llamaindex/env";
-import { NodeWithScore } from "../../Node.js";
-import { Response } from "../../Response.js";
-import { BaseRetriever } from "../../Retriever.js";
-import { ServiceContext } from "../../ServiceContext.js";
-import { Event } from "../../callbacks/CallbackManager.js";
-import { BaseNodePostprocessor } from "../../postprocessors/index.js";
+import type { NodeWithScore } from "../../Node.js";
+import type { Response } from "../../Response.js";
+import type { BaseRetriever } from "../../Retriever.js";
+import type { ServiceContext } from "../../ServiceContext.js";
+import type { Event } from "../../callbacks/CallbackManager.js";
+import type { BaseNodePostprocessor } from "../../postprocessors/index.js";
 import { PromptMixin } from "../../prompts/Mixin.js";
-import {
-  BaseSynthesizer,
-  ResponseSynthesizer,
-} from "../../synthesizers/index.js";
-import {
+import type { BaseSynthesizer } from "../../synthesizers/index.js";
+import { ResponseSynthesizer } from "../../synthesizers/index.js";
+import type {
   BaseQueryEngine,
   QueryEngineParamsNonStreaming,
   QueryEngineParamsStreaming,
diff --git a/packages/core/src/engines/query/RouterQueryEngine.ts b/packages/core/src/engines/query/RouterQueryEngine.ts
index 7fa54accdf1a7b7ed447a82281a95ba6daa20909..bfe24362b323119f067af1247dafa012e52ce2d2 100644
--- a/packages/core/src/engines/query/RouterQueryEngine.ts
+++ b/packages/core/src/engines/query/RouterQueryEngine.ts
@@ -1,13 +1,12 @@
-import { BaseNode } from "../../Node.js";
+import type { BaseNode } from "../../Node.js";
 import { Response } from "../../Response.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../../ServiceContext.js";
+import type { ServiceContext } from "../../ServiceContext.js";
+import { serviceContextFromDefaults } from "../../ServiceContext.js";
 import { PromptMixin } from "../../prompts/index.js";
-import { BaseSelector, LLMSingleSelector } from "../../selectors/index.js";
+import type { BaseSelector } from "../../selectors/index.js";
+import { LLMSingleSelector } from "../../selectors/index.js";
 import { TreeSummarize } from "../../synthesizers/index.js";
-import {
+import type {
   BaseQueryEngine,
   QueryBundle,
   QueryEngineParamsNonStreaming,
diff --git a/packages/core/src/engines/query/SubQuestionQueryEngine.ts b/packages/core/src/engines/query/SubQuestionQueryEngine.ts
index 6e60a1dbf6159ca278d4f0bef1ff8351ab1df974..5d0333fe2081af4a5cc2aaf694f93934f553433a 100644
--- a/packages/core/src/engines/query/SubQuestionQueryEngine.ts
+++ b/packages/core/src/engines/query/SubQuestionQueryEngine.ts
@@ -1,20 +1,19 @@
 import { randomUUID } from "@llamaindex/env";
-import { NodeWithScore, TextNode } from "../../Node.js";
+import type { NodeWithScore } from "../../Node.js";
+import { TextNode } from "../../Node.js";
 import { LLMQuestionGenerator } from "../../QuestionGenerator.js";
-import { Response } from "../../Response.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../../ServiceContext.js";
-import { Event } from "../../callbacks/CallbackManager.js";
+import type { Response } from "../../Response.js";
+import type { ServiceContext } from "../../ServiceContext.js";
+import { serviceContextFromDefaults } from "../../ServiceContext.js";
+import type { Event } from "../../callbacks/CallbackManager.js";
 import { PromptMixin } from "../../prompts/Mixin.js";
+import type { BaseSynthesizer } from "../../synthesizers/index.js";
 import {
-  BaseSynthesizer,
   CompactAndRefine,
   ResponseSynthesizer,
 } from "../../synthesizers/index.js";
 
-import {
+import type {
   BaseQueryEngine,
   BaseTool,
   QueryEngineParamsNonStreaming,
@@ -22,7 +21,7 @@ import {
   ToolMetadata,
 } from "../../types.js";
 
-import { BaseQuestionGenerator, SubQuestion } from "./types.js";
+import type { BaseQuestionGenerator, SubQuestion } from "./types.js";
 
 /**
  * SubQuestionQueryEngine decomposes a question into subquestions and then
diff --git a/packages/core/src/engines/query/types.ts b/packages/core/src/engines/query/types.ts
index 0db0e32592e04c0f2d3c0b57307dd57af18855a7..88384631689ee3960cd75db1971c655fff4ab10a 100644
--- a/packages/core/src/engines/query/types.ts
+++ b/packages/core/src/engines/query/types.ts
@@ -1,4 +1,4 @@
-import { ToolMetadata } from "../../types.js";
+import type { ToolMetadata } from "../../types.js";
 
 /**
  * QuestionGenerators generate new questions for the LLM using tools and a user query.
diff --git a/packages/core/src/extractors/MetadataExtractors.ts b/packages/core/src/extractors/MetadataExtractors.ts
index b3db824dcab26e1ed0fa7f43fbfd7d1f585b3e31..c6b9c8731c7c148c3549ba457deb2379bd1f92f1 100644
--- a/packages/core/src/extractors/MetadataExtractors.ts
+++ b/packages/core/src/extractors/MetadataExtractors.ts
@@ -1,5 +1,7 @@
-import { BaseNode, MetadataMode, TextNode } from "../Node.js";
-import { LLM, OpenAI } from "../llm/index.js";
+import type { BaseNode } from "../Node.js";
+import { MetadataMode, TextNode } from "../Node.js";
+import type { LLM } from "../llm/index.js";
+import { OpenAI } from "../llm/index.js";
 import {
   defaultKeywordExtractorPromptTemplate,
   defaultQuestionAnswerPromptTemplate,
diff --git a/packages/core/src/extractors/types.ts b/packages/core/src/extractors/types.ts
index 58f3da987561e2e51fd92177d5f72c16b735e9bf..259e574cec6168dce5f8296a886f81daf349fad8 100644
--- a/packages/core/src/extractors/types.ts
+++ b/packages/core/src/extractors/types.ts
@@ -1,5 +1,6 @@
-import { BaseNode, MetadataMode, TextNode } from "../Node.js";
-import { TransformComponent } from "../ingestion/types.js";
+import type { BaseNode } from "../Node.js";
+import { MetadataMode, TextNode } from "../Node.js";
+import type { TransformComponent } from "../ingestion/types.js";
 import { defaultNodeTextTemplate } from "./prompts.js";
 
 /*
diff --git a/packages/core/src/indices/BaseIndex.ts b/packages/core/src/indices/BaseIndex.ts
index cf0083e0628c6cf850b78de9049664c2b909d7d3..028b3bfaaff23583753e4981664e48ce81ab36df 100644
--- a/packages/core/src/indices/BaseIndex.ts
+++ b/packages/core/src/indices/BaseIndex.ts
@@ -1,13 +1,13 @@
-import { BaseNode, Document } from "../Node.js";
-import { BaseRetriever } from "../Retriever.js";
-import { ServiceContext } from "../ServiceContext.js";
+import type { BaseNode, Document } from "../Node.js";
+import type { BaseRetriever } from "../Retriever.js";
+import type { ServiceContext } from "../ServiceContext.js";
 import { runTransformations } from "../ingestion/IngestionPipeline.js";
-import { StorageContext } from "../storage/StorageContext.js";
-import { BaseDocumentStore } from "../storage/docStore/types.js";
-import { BaseIndexStore } from "../storage/indexStore/types.js";
-import { VectorStore } from "../storage/vectorStore/types.js";
-import { BaseSynthesizer } from "../synthesizers/types.js";
-import { BaseQueryEngine } from "../types.js";
+import type { StorageContext } from "../storage/StorageContext.js";
+import type { BaseDocumentStore } from "../storage/docStore/types.js";
+import type { BaseIndexStore } from "../storage/indexStore/types.js";
+import type { VectorStore } from "../storage/vectorStore/types.js";
+import type { BaseSynthesizer } from "../synthesizers/types.js";
+import type { BaseQueryEngine } from "../types.js";
 import { IndexStruct } from "./IndexStruct.js";
 import { IndexStructType } from "./json-to-index-struct.js";
 
diff --git a/packages/core/src/indices/json-to-index-struct.ts b/packages/core/src/indices/json-to-index-struct.ts
index ebe72174e22ee41481978a325f1c1ce909e5a4eb..b62ec851bd8149bf38c47dd099a550098b9735f0 100644
--- a/packages/core/src/indices/json-to-index-struct.ts
+++ b/packages/core/src/indices/json-to-index-struct.ts
@@ -1,4 +1,5 @@
-import { BaseNode, jsonToNode } from "../Node.js";
+import type { BaseNode } from "../Node.js";
+import { jsonToNode } from "../Node.js";
 import { IndexStruct } from "./IndexStruct.js";
 
 export enum IndexStructType {
diff --git a/packages/core/src/indices/keyword/index.ts b/packages/core/src/indices/keyword/index.ts
index 3fee6040abb5deaa4e7348a04ed7f06206f24bcc..56019c0c76b85ed261101929f84dc24126c0b55f 100644
--- a/packages/core/src/indices/keyword/index.ts
+++ b/packages/core/src/indices/keyword/index.ts
@@ -1,25 +1,24 @@
-import { BaseNode, Document, MetadataMode, NodeWithScore } from "../../Node.js";
-import {
+import type { BaseNode, Document, NodeWithScore } from "../../Node.js";
+import { MetadataMode } from "../../Node.js";
+import type {
   KeywordExtractPrompt,
   QueryKeywordExtractPrompt,
+} from "../../Prompt.js";
+import {
   defaultKeywordExtractPrompt,
   defaultQueryKeywordExtractPrompt,
 } from "../../Prompt.js";
-import { BaseRetriever } from "../../Retriever.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../../ServiceContext.js";
+import type { BaseRetriever } from "../../Retriever.js";
+import type { ServiceContext } from "../../ServiceContext.js";
+import { serviceContextFromDefaults } from "../../ServiceContext.js";
 import { RetrieverQueryEngine } from "../../engines/query/index.js";
-import { BaseNodePostprocessor } from "../../postprocessors/index.js";
-import {
-  BaseDocumentStore,
-  StorageContext,
-  storageContextFromDefaults,
-} from "../../storage/index.js";
-import { BaseSynthesizer } from "../../synthesizers/index.js";
-import { BaseQueryEngine } from "../../types.js";
-import { BaseIndex, BaseIndexInit, KeywordTable } from "../BaseIndex.js";
+import type { BaseNodePostprocessor } from "../../postprocessors/index.js";
+import type { BaseDocumentStore, StorageContext } from "../../storage/index.js";
+import { storageContextFromDefaults } from "../../storage/index.js";
+import type { BaseSynthesizer } from "../../synthesizers/index.js";
+import type { BaseQueryEngine } from "../../types.js";
+import type { BaseIndexInit } from "../BaseIndex.js";
+import { BaseIndex, KeywordTable } from "../BaseIndex.js";
 import { IndexStructType } from "../json-to-index-struct.js";
 import {
   extractKeywordsGivenResponse,
diff --git a/packages/core/src/indices/summary/index.ts b/packages/core/src/indices/summary/index.ts
index cafa1a2c6f21622ec9116bd5ded72a3a93f0cd3a..59d10ae4cd1f6815f46c183f56714f6af57ac2e8 100644
--- a/packages/core/src/indices/summary/index.ts
+++ b/packages/core/src/indices/summary/index.ts
@@ -1,32 +1,34 @@
 import _ from "lodash";
 import { globalsHelper } from "../../GlobalsHelper.js";
-import { BaseNode, Document, NodeWithScore } from "../../Node.js";
-import { ChoiceSelectPrompt, defaultChoiceSelectPrompt } from "../../Prompt.js";
-import { BaseRetriever } from "../../Retriever.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../../ServiceContext.js";
-import { Event } from "../../callbacks/CallbackManager.js";
+import type { BaseNode, Document, NodeWithScore } from "../../Node.js";
+import type { ChoiceSelectPrompt } from "../../Prompt.js";
+import { defaultChoiceSelectPrompt } from "../../Prompt.js";
+import type { BaseRetriever } from "../../Retriever.js";
+import type { ServiceContext } from "../../ServiceContext.js";
+import { serviceContextFromDefaults } from "../../ServiceContext.js";
+import type { Event } from "../../callbacks/CallbackManager.js";
 import { RetrieverQueryEngine } from "../../engines/query/index.js";
-import { BaseNodePostprocessor } from "../../postprocessors/index.js";
-import {
+import type { BaseNodePostprocessor } from "../../postprocessors/index.js";
+import type {
   BaseDocumentStore,
   RefDocInfo,
   StorageContext,
-  storageContextFromDefaults,
 } from "../../storage/index.js";
+import { storageContextFromDefaults } from "../../storage/index.js";
+import type { BaseSynthesizer } from "../../synthesizers/index.js";
 import {
-  BaseSynthesizer,
   CompactAndRefine,
   ResponseSynthesizer,
 } from "../../synthesizers/index.js";
-import { BaseQueryEngine } from "../../types.js";
-import { BaseIndex, BaseIndexInit } from "../BaseIndex.js";
+import type { BaseQueryEngine } from "../../types.js";
+import type { BaseIndexInit } from "../BaseIndex.js";
+import { BaseIndex } from "../BaseIndex.js";
 import { IndexList, IndexStructType } from "../json-to-index-struct.js";
-import {
+import type {
   ChoiceSelectParserFunction,
   NodeFormatterFunction,
+} from "./utils.js";
+import {
   defaultFormatNodeBatchFn,
   defaultParseChoiceSelectAnswerFn,
 } from "./utils.js";
diff --git a/packages/core/src/indices/summary/utils.ts b/packages/core/src/indices/summary/utils.ts
index 7805b991fe5e0d044c7b2976751c023ace268393..bb995cc6c45f7ad613f71c472b0d19e5286f6572 100644
--- a/packages/core/src/indices/summary/utils.ts
+++ b/packages/core/src/indices/summary/utils.ts
@@ -1,5 +1,6 @@
 import _ from "lodash";
-import { BaseNode, MetadataMode } from "../../Node.js";
+import type { BaseNode } from "../../Node.js";
+import { MetadataMode } from "../../Node.js";
 
 export type NodeFormatterFunction = (summaryNodes: BaseNode[]) => string;
 export const defaultFormatNodeBatchFn: NodeFormatterFunction = (
diff --git a/packages/core/src/indices/vectorStore/index.ts b/packages/core/src/indices/vectorStore/index.ts
index fd199c5f38b9c1a83359566fcbb8000bbc0203ee..199b07d91a7edcf94c59eb9886c228cb0931a108 100644
--- a/packages/core/src/indices/vectorStore/index.ts
+++ b/packages/core/src/indices/vectorStore/index.ts
@@ -1,42 +1,45 @@
 import { globalsHelper } from "../../GlobalsHelper.js";
-import {
+import type {
   BaseNode,
   Document,
-  ImageNode,
   Metadata,
-  MetadataMode,
   NodeWithScore,
+} from "../../Node.js";
+import {
+  ImageNode,
+  MetadataMode,
   ObjectType,
   splitNodesByType,
 } from "../../Node.js";
-import { BaseRetriever } from "../../Retriever.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../../ServiceContext.js";
-import { Event } from "../../callbacks/CallbackManager.js";
+import type { BaseRetriever } from "../../Retriever.js";
+import type { ServiceContext } from "../../ServiceContext.js";
+import { serviceContextFromDefaults } from "../../ServiceContext.js";
+import type { Event } from "../../callbacks/CallbackManager.js";
 import { DEFAULT_SIMILARITY_TOP_K } from "../../constants.js";
-import {
+import type {
   BaseEmbedding,
-  ClipEmbedding,
   MultiModalEmbedding,
 } from "../../embeddings/index.js";
+import { ClipEmbedding } from "../../embeddings/index.js";
 import { RetrieverQueryEngine } from "../../engines/query/RetrieverQueryEngine.js";
 import { runTransformations } from "../../ingestion/index.js";
-import { BaseNodePostprocessor } from "../../postprocessors/types.js";
-import {
+import type { BaseNodePostprocessor } from "../../postprocessors/types.js";
+import type {
   BaseIndexStore,
   MetadataFilters,
   StorageContext,
   VectorStore,
   VectorStoreQuery,
-  VectorStoreQueryMode,
   VectorStoreQueryResult,
+} from "../../storage/index.js";
+import {
+  VectorStoreQueryMode,
   storageContextFromDefaults,
 } from "../../storage/index.js";
-import { BaseSynthesizer } from "../../synthesizers/types.js";
-import { BaseQueryEngine } from "../../types.js";
-import { BaseIndex, BaseIndexInit } from "../BaseIndex.js";
+import type { BaseSynthesizer } from "../../synthesizers/types.js";
+import type { BaseQueryEngine } from "../../types.js";
+import type { BaseIndexInit } from "../BaseIndex.js";
+import { BaseIndex } from "../BaseIndex.js";
 import { IndexDict, IndexStructType } from "../json-to-index-struct.js";
 
 interface IndexStructOptions {
@@ -189,15 +192,12 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
   ) {
     // Check if the index already has nodes with the same hash
     const newNodes = nodes.filter((node) =>
-      Object.entries(this.indexStruct!.nodesDict).reduce(
-        (acc, [key, value]) => {
-          if (value.hash === node.hash) {
-            acc = false;
-          }
-          return acc;
-        },
-        true,
-      ),
+      Object.entries(this.indexStruct.nodesDict).reduce((acc, [key, value]) => {
+        if (value.hash === node.hash) {
+          acc = false;
+        }
+        return acc;
+      }, true),
     );
 
     await this.insertNodes(newNodes, options);
diff --git a/packages/core/src/ingestion/IngestionCache.ts b/packages/core/src/ingestion/IngestionCache.ts
index e60d4bdff8954f1ff248d5e4ddf94c6447cad260..115ba39029b5a4868244597b6c3bb73e8b8a508d 100644
--- a/packages/core/src/ingestion/IngestionCache.ts
+++ b/packages/core/src/ingestion/IngestionCache.ts
@@ -1,9 +1,10 @@
 import { createSHA256 } from "@llamaindex/env";
-import { BaseNode, MetadataMode } from "../Node.js";
+import type { BaseNode } from "../Node.js";
+import { MetadataMode } from "../Node.js";
 import { docToJson, jsonToDoc } from "../storage/docStore/utils.js";
 import { SimpleKVStore } from "../storage/kvStore/SimpleKVStore.js";
-import { BaseKVStore } from "../storage/kvStore/types.js";
-import { TransformComponent } from "./types.js";
+import type { BaseKVStore } from "../storage/kvStore/types.js";
+import type { TransformComponent } from "./types.js";
 
 const transformToJSON = (obj: TransformComponent) => {
   const seen: any[] = [];
diff --git a/packages/core/src/ingestion/IngestionPipeline.ts b/packages/core/src/ingestion/IngestionPipeline.ts
index 4f846cdb3e6e9da5a7fb2e8937152fa9bc43865a..eceeef63bab814c6bc5b5bb3fdcdea36218a38f5 100644
--- a/packages/core/src/ingestion/IngestionPipeline.ts
+++ b/packages/core/src/ingestion/IngestionPipeline.ts
@@ -1,13 +1,13 @@
-import { BaseNode, Document } from "../Node.js";
-import { BaseReader } from "../readers/type.js";
-import { BaseDocumentStore } from "../storage/docStore/types.js";
-import { VectorStore } from "../storage/vectorStore/types.js";
+import type { BaseNode, Document } from "../Node.js";
+import type { BaseReader } from "../readers/type.js";
+import type { BaseDocumentStore } from "../storage/docStore/types.js";
+import type { VectorStore } from "../storage/vectorStore/types.js";
 import { IngestionCache, getTransformationHash } from "./IngestionCache.js";
 import {
   DocStoreStrategy,
   createDocStoreStrategy,
 } from "./strategies/index.js";
-import { TransformComponent } from "./types.js";
+import type { TransformComponent } from "./types.js";
 
 type IngestionRunArgs = {
   documents?: Document[];
diff --git a/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts b/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts
index 301d7f371fce45da68163bbe3554ef93001a0e30..096b27c19ac18827e32bc415fe602d5d4025163d 100644
--- a/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts
+++ b/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts
@@ -1,6 +1,6 @@
-import { BaseNode } from "../../Node.js";
-import { BaseDocumentStore } from "../../storage/docStore/types.js";
-import { TransformComponent } from "../types.js";
+import type { BaseNode } from "../../Node.js";
+import type { BaseDocumentStore } from "../../storage/docStore/types.js";
+import type { TransformComponent } from "../types.js";
 
 /**
  * Handle doc store duplicates by checking all hashes.
diff --git a/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts b/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts
index d17b32e1407bc91cfff48c9a40304c9d3b941baf..2b615a35e6c6e2ad31c6198a5f7b5b85bfc6ef9a 100644
--- a/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts
+++ b/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts
@@ -1,5 +1,5 @@
-import { BaseNode } from "../../Node.js";
-import { BaseDocumentStore, VectorStore } from "../../storage/index.js";
+import type { BaseNode } from "../../Node.js";
+import type { BaseDocumentStore, VectorStore } from "../../storage/index.js";
 import { classify } from "./classify.js";
 
 /**
diff --git a/packages/core/src/ingestion/strategies/UpsertsStrategy.ts b/packages/core/src/ingestion/strategies/UpsertsStrategy.ts
index a89ee63b94f28b618dfa20b4a15a4454606f964b..1a4eeca7fe274124f0496ca41f7505e54e096ac7 100644
--- a/packages/core/src/ingestion/strategies/UpsertsStrategy.ts
+++ b/packages/core/src/ingestion/strategies/UpsertsStrategy.ts
@@ -1,7 +1,7 @@
-import { BaseNode } from "../../Node.js";
-import { BaseDocumentStore } from "../../storage/docStore/types.js";
-import { VectorStore } from "../../storage/vectorStore/types.js";
-import { TransformComponent } from "../types.js";
+import type { BaseNode } from "../../Node.js";
+import type { BaseDocumentStore } from "../../storage/docStore/types.js";
+import type { VectorStore } from "../../storage/vectorStore/types.js";
+import type { TransformComponent } from "../types.js";
 import { classify } from "./classify.js";
 
 /**
diff --git a/packages/core/src/ingestion/strategies/classify.ts b/packages/core/src/ingestion/strategies/classify.ts
index 7ed5d260eda4b01b15a2b36b835f1d35c734a9ef..13fa24a041ff9114e68dd54e48fc26ea41f4b2f7 100644
--- a/packages/core/src/ingestion/strategies/classify.ts
+++ b/packages/core/src/ingestion/strategies/classify.ts
@@ -1,5 +1,5 @@
-import { BaseNode } from "../../Node.js";
-import { BaseDocumentStore } from "../../storage/docStore/types.js";
+import type { BaseNode } from "../../Node.js";
+import type { BaseDocumentStore } from "../../storage/docStore/types.js";
 
 export async function classify(docStore: BaseDocumentStore, nodes: BaseNode[]) {
   const existingDocIds = Object.values(await docStore.getAllDocumentHashes());
diff --git a/packages/core/src/ingestion/strategies/index.ts b/packages/core/src/ingestion/strategies/index.ts
index 3c2f01a5a27621ab152c422c474df517cc2883f0..0248169fd70273f26183a6f4608e274af3e856b5 100644
--- a/packages/core/src/ingestion/strategies/index.ts
+++ b/packages/core/src/ingestion/strategies/index.ts
@@ -1,6 +1,6 @@
-import { BaseDocumentStore } from "../../storage/docStore/types.js";
-import { VectorStore } from "../../storage/vectorStore/types.js";
-import { TransformComponent } from "../types.js";
+import type { BaseDocumentStore } from "../../storage/docStore/types.js";
+import type { VectorStore } from "../../storage/vectorStore/types.js";
+import type { TransformComponent } from "../types.js";
 import { DuplicatesStrategy } from "./DuplicatesStrategy.js";
 import { UpsertsStrategy } from "./UpsertsStrategy.js";
 
diff --git a/packages/core/src/ingestion/types.ts b/packages/core/src/ingestion/types.ts
index 6c6f40f5c9f5d954f46346d1474ee07b5280c64e..138e111b11623e18b6f77f2716180a9fefd9d84e 100644
--- a/packages/core/src/ingestion/types.ts
+++ b/packages/core/src/ingestion/types.ts
@@ -1,4 +1,4 @@
-import { BaseNode } from "../Node.js";
+import type { BaseNode } from "../Node.js";
 
 export interface TransformComponent {
   transform(nodes: BaseNode[], options?: any): Promise<BaseNode[]>;
diff --git a/packages/core/src/llm/LLM.ts b/packages/core/src/llm/LLM.ts
index 0b3f06a9904bbf25c2296b2f0b488f12e7801b50..317fcc1a34be4dc77b2d0a5b4354825d5ac88809 100644
--- a/packages/core/src/llm/LLM.ts
+++ b/packages/core/src/llm/LLM.ts
@@ -1,5 +1,6 @@
-import OpenAILLM, { ClientOptions as OpenAIClientOptions } from "openai";
-import {
+import type OpenAILLM from "openai";
+import type { ClientOptions as OpenAIClientOptions } from "openai";
+import type {
   AnthropicStreamToken,
   CallbackManager,
   Event,
@@ -8,27 +9,29 @@ import {
   StreamCallbackResponse,
 } from "../callbacks/CallbackManager.js";
 
-import { ChatCompletionMessageParam } from "openai/resources/index.js";
-import { LLMOptions } from "portkey-ai";
+import type { ChatCompletionMessageParam } from "openai/resources/index.js";
+import type { LLMOptions } from "portkey-ai";
 import { Tokenizers, globalsHelper } from "../GlobalsHelper.js";
+import type { AnthropicSession } from "./anthropic.js";
 import {
   ANTHROPIC_AI_PROMPT,
   ANTHROPIC_HUMAN_PROMPT,
-  AnthropicSession,
   getAnthropicSession,
 } from "./anthropic.js";
+import type { AzureOpenAIConfig } from "./azure.js";
 import {
-  AzureOpenAIConfig,
   getAzureBaseUrl,
   getAzureConfigFromEnv,
   getAzureModel,
   shouldUseAzure,
 } from "./azure.js";
 import { BaseLLM } from "./base.js";
-import { OpenAISession, getOpenAISession } from "./open_ai.js";
-import { PortkeySession, getPortkeySession } from "./portkey.js";
+import type { OpenAISession } from "./open_ai.js";
+import { getOpenAISession } from "./open_ai.js";
+import type { PortkeySession } from "./portkey.js";
+import { getPortkeySession } from "./portkey.js";
 import { ReplicateSession } from "./replicate_ai.js";
-import {
+import type {
   ChatMessage,
   ChatResponse,
   ChatResponseChunk,
@@ -313,7 +316,7 @@ export class OpenAI extends BaseLLM {
 
     // TODO: add callback to streamConverter and use streamConverter here
     //Indices
-    var idx_counter: number = 0;
+    let idx_counter: number = 0;
     for await (const part of chunk_stream) {
       if (!part.choices.length) continue;
 
@@ -732,7 +735,7 @@ export class Anthropic extends BaseLLM {
         stream: true,
       });
 
-    var idx_counter: number = 0;
+    let idx_counter: number = 0;
     for await (const part of stream) {
       //TODO: LLM Stream Callback, pending re-work.
 
@@ -821,7 +824,7 @@ export class Portkey extends BaseLLM {
         };
 
     //Indices
-    var idx_counter: number = 0;
+    let idx_counter: number = 0;
     for await (const part of chunkStream) {
       //Increment
       part.choices[0].index = idx_counter;
diff --git a/packages/core/src/llm/anthropic.ts b/packages/core/src/llm/anthropic.ts
index 1a3dd0b48914ae7081f0392cdf10f7f748601bf6..a8dd6c1145f192563df7d4a146f4d2f0ab22f1fa 100644
--- a/packages/core/src/llm/anthropic.ts
+++ b/packages/core/src/llm/anthropic.ts
@@ -1,8 +1,5 @@
-import Anthropic, {
-  AI_PROMPT,
-  ClientOptions,
-  HUMAN_PROMPT,
-} from "@anthropic-ai/sdk";
+import type { ClientOptions } from "@anthropic-ai/sdk";
+import Anthropic, { AI_PROMPT, HUMAN_PROMPT } from "@anthropic-ai/sdk";
 import _ from "lodash";
 
 export class AnthropicSession {
diff --git a/packages/core/src/llm/base.ts b/packages/core/src/llm/base.ts
index 088b6ae822af8de850eb45f650c5ebe7ba860850..36b62b6c77deb2a9e92acf420fe66ea158e4b76a 100644
--- a/packages/core/src/llm/base.ts
+++ b/packages/core/src/llm/base.ts
@@ -1,4 +1,4 @@
-import {
+import type {
   ChatMessage,
   ChatResponse,
   ChatResponseChunk,
diff --git a/packages/core/src/llm/mistral.ts b/packages/core/src/llm/mistral.ts
index c4aa37368d2f2b2f77506740c6f0b9a82f74661d..47478ca5bf6e016da6849f8d8e1dd82d8d3affc1 100644
--- a/packages/core/src/llm/mistral.ts
+++ b/packages/core/src/llm/mistral.ts
@@ -1,11 +1,11 @@
-import {
+import type {
   CallbackManager,
   Event,
   EventType,
   StreamCallbackResponse,
 } from "../callbacks/CallbackManager.js";
 import { BaseLLM } from "./base.js";
-import {
+import type {
   ChatMessage,
   ChatResponse,
   ChatResponseChunk,
@@ -141,7 +141,7 @@ export class MistralAI extends BaseLLM {
         };
 
     //Indices
-    var idx_counter: number = 0;
+    let idx_counter: number = 0;
     for await (const part of chunkStream) {
       if (!part.choices.length) continue;
 
diff --git a/packages/core/src/llm/ollama.ts b/packages/core/src/llm/ollama.ts
index 070320932281cf2b7ce2c85d58b8c4f2ab8a35f3..4ddcdf91105a20c4e7982594815fa6e0c7e81bc2 100644
--- a/packages/core/src/llm/ollama.ts
+++ b/packages/core/src/llm/ollama.ts
@@ -1,7 +1,7 @@
 import { ok } from "@llamaindex/env";
-import { CallbackManager, Event } from "../callbacks/CallbackManager.js";
+import type { CallbackManager, Event } from "../callbacks/CallbackManager.js";
 import { BaseEmbedding } from "../embeddings/types.js";
-import {
+import type {
   ChatMessage,
   ChatResponse,
   ChatResponseChunk,
diff --git a/packages/core/src/llm/open_ai.ts b/packages/core/src/llm/open_ai.ts
index e36f05f3af6c6125f174f6938bba224888e457d5..9deaffbdea1a75d533eb5def4dafc490bf16c9ba 100644
--- a/packages/core/src/llm/open_ai.ts
+++ b/packages/core/src/llm/open_ai.ts
@@ -1,5 +1,6 @@
 import _ from "lodash";
-import OpenAI, { ClientOptions } from "openai";
+import type { ClientOptions } from "openai";
+import OpenAI from "openai";
 
 export class AzureOpenAI extends OpenAI {
   protected override authHeaders() {
diff --git a/packages/core/src/llm/portkey.ts b/packages/core/src/llm/portkey.ts
index 11eb401b358aead314a183fa7417f347c33c67b4..9d47e979efb5c9e66e196015249c96b7b2aa852f 100644
--- a/packages/core/src/llm/portkey.ts
+++ b/packages/core/src/llm/portkey.ts
@@ -1,5 +1,6 @@
 import _ from "lodash";
-import { LLMOptions, Portkey } from "portkey-ai";
+import type { LLMOptions } from "portkey-ai";
+import { Portkey } from "portkey-ai";
 
 export const readEnv = (
   env: string,
diff --git a/packages/core/src/llm/types.ts b/packages/core/src/llm/types.ts
index f5bfa56694171dd3c2830f40d8806a5062062fda..ffcc7713f94df4a237409c0b808e714253b9d4c0 100644
--- a/packages/core/src/llm/types.ts
+++ b/packages/core/src/llm/types.ts
@@ -1,5 +1,5 @@
-import { Tokenizers } from "../GlobalsHelper.js";
-import { Event } from "../callbacks/CallbackManager.js";
+import type { Tokenizers } from "../GlobalsHelper.js";
+import type { Event } from "../callbacks/CallbackManager.js";
 
 /**
  * Unified language model interface
diff --git a/packages/core/src/llm/utils.ts b/packages/core/src/llm/utils.ts
index b6c9869902e93ea5bb04580c2d4111a779e4ffb0..6e559c59ca7c170b8520066c4cd0151c97a61b37 100644
--- a/packages/core/src/llm/utils.ts
+++ b/packages/core/src/llm/utils.ts
@@ -1,4 +1,4 @@
-import { MessageContent, MessageContentDetail } from "./types.js";
+import type { MessageContent } from "./types.js";
 
 export async function* streamConverter<S, D>(
   stream: AsyncIterable<S>,
@@ -35,7 +35,7 @@ export function extractText(message: MessageContent): string {
   if (Array.isArray(message)) {
     // message is of type MessageContentDetail[] - retrieve just the text parts and concatenate them
     // so we can pass them to the context generator
-    return (message as MessageContentDetail[])
+    return message
       .filter((c) => c.type === "text")
       .map((c) => c.text)
       .join("\n\n");
diff --git a/packages/core/src/memory/ChatMemoryBuffer.ts b/packages/core/src/memory/ChatMemoryBuffer.ts
index 32cae371e1956e476cc66ee751f28d002cbca53e..43c216116b629b68170b440dad63c308303ea888 100644
--- a/packages/core/src/memory/ChatMemoryBuffer.ts
+++ b/packages/core/src/memory/ChatMemoryBuffer.ts
@@ -1,7 +1,7 @@
-import { ChatMessage } from "../llm/index.js";
+import type { ChatMessage } from "../llm/index.js";
 import { SimpleChatStore } from "../storage/chatStore/SimpleChatStore.js";
-import { BaseChatStore } from "../storage/chatStore/types.js";
-import { BaseMemory } from "./types.js";
+import type { BaseChatStore } from "../storage/chatStore/types.js";
+import type { BaseMemory } from "./types.js";
 
 type ChatMemoryBufferParams = {
   tokenLimit?: number;
diff --git a/packages/core/src/memory/types.ts b/packages/core/src/memory/types.ts
index 93d38496deafdea2b626af8dade0c1cf9d376c75..c000e734d453892292b4b13176882f6a54e6695a 100644
--- a/packages/core/src/memory/types.ts
+++ b/packages/core/src/memory/types.ts
@@ -1,4 +1,4 @@
-import { ChatMessage } from "../llm/index.js";
+import type { ChatMessage } from "../llm/index.js";
 
 export interface BaseMemory {
   /*
diff --git a/packages/core/src/nodeParsers/MarkdownNodeParser.ts b/packages/core/src/nodeParsers/MarkdownNodeParser.ts
index a6fbb2f772f3bcddf77fb0b54e0a7bd991001c25..2c769c982209181f8ec84f514dc683ac992e6c39 100644
--- a/packages/core/src/nodeParsers/MarkdownNodeParser.ts
+++ b/packages/core/src/nodeParsers/MarkdownNodeParser.ts
@@ -1,5 +1,6 @@
-import { BaseNode, Metadata, MetadataMode, TextNode } from "../Node.js";
-import { NodeParser } from "./types.js";
+import type { BaseNode, Metadata } from "../Node.js";
+import { MetadataMode, TextNode } from "../Node.js";
+import type { NodeParser } from "./types.js";
 
 export class MarkdownNodeParser implements NodeParser {
   includeMetadata: boolean;
diff --git a/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts b/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts
index ac7009a1983148535985009142ebb5f2d9c5886a..1a6ef820f62b010625e47dc3234714675c34b301 100644
--- a/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts
+++ b/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts
@@ -1,6 +1,6 @@
-import { BaseNode } from "../Node.js";
+import type { BaseNode } from "../Node.js";
 import { SentenceSplitter } from "../TextSplitter.js";
-import { NodeParser } from "./types.js";
+import type { NodeParser } from "./types.js";
 import { getNodesFromDocument } from "./utils.js";
 
 export const DEFAULT_WINDOW_SIZE = 3;
diff --git a/packages/core/src/nodeParsers/SimpleNodeParser.ts b/packages/core/src/nodeParsers/SimpleNodeParser.ts
index 8418c4e87a75ab9bee4fd884c8b80b166dec7b16..4fd7240e51cb28e749c9afb5d4e30f5f6fbe9659 100644
--- a/packages/core/src/nodeParsers/SimpleNodeParser.ts
+++ b/packages/core/src/nodeParsers/SimpleNodeParser.ts
@@ -1,7 +1,7 @@
-import { BaseNode } from "../Node.js";
+import type { BaseNode } from "../Node.js";
 import { SentenceSplitter } from "../TextSplitter.js";
 import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE } from "../constants.js";
-import { NodeParser } from "./types.js";
+import type { NodeParser } from "./types.js";
 import { getNodesFromDocument } from "./utils.js";
 
 /**
diff --git a/packages/core/src/nodeParsers/types.ts b/packages/core/src/nodeParsers/types.ts
index ef894f563c5877bf8158dd248de9473bbb48622d..7673c3379ccbcad0ad8cbdfa9c1b0f537cc57249 100644
--- a/packages/core/src/nodeParsers/types.ts
+++ b/packages/core/src/nodeParsers/types.ts
@@ -1,5 +1,5 @@
-import { BaseNode } from "../Node.js";
-import { TransformComponent } from "../ingestion/types.js";
+import type { BaseNode } from "../Node.js";
+import type { TransformComponent } from "../ingestion/types.js";
 
 /**
  * A NodeParser generates Nodes from Documents
diff --git a/packages/core/src/nodeParsers/utils.ts b/packages/core/src/nodeParsers/utils.ts
index 235401ea412b2a5db84fb6632291057726f6df39..5f0bcf6cab54dfbb12eaa9054496f863e84494e9 100644
--- a/packages/core/src/nodeParsers/utils.ts
+++ b/packages/core/src/nodeParsers/utils.ts
@@ -1,6 +1,6 @@
 import _ from "lodash";
+import type { BaseNode } from "../Node.js";
 import {
-  BaseNode,
   Document,
   ImageDocument,
   NodeRelationship,
diff --git a/packages/core/src/objects/base.ts b/packages/core/src/objects/base.ts
index 44088ca624a77cd44ad0f474ef09edd564d1f262..f03d858431a3fef51b6db9c7dc745c62b4f9f124 100644
--- a/packages/core/src/objects/base.ts
+++ b/packages/core/src/objects/base.ts
@@ -1,7 +1,8 @@
-import { BaseNode, Metadata, TextNode } from "../Node.js";
-import { BaseRetriever } from "../Retriever.js";
-import { VectorStoreIndex } from "../indices/index.js";
-import { BaseTool } from "../types.js";
+import type { BaseNode, Metadata } from "../Node.js";
+import { TextNode } from "../Node.js";
+import type { BaseRetriever } from "../Retriever.js";
+import type { VectorStoreIndex } from "../indices/index.js";
+import type { BaseTool } from "../types.js";
 
 // Assuming that necessary interfaces and classes (like OT, TextNode, BaseNode, etc.) are defined elsewhere
 // Import statements (e.g., for TextNode, BaseNode) should be added based on your project's structure
diff --git a/packages/core/src/outputParsers/selectors.ts b/packages/core/src/outputParsers/selectors.ts
index 2d89882ae103103d1e2f49da891aae71364d881c..491f2e617d5c0ffb11623bd26e8c24ed47499d79 100644
--- a/packages/core/src/outputParsers/selectors.ts
+++ b/packages/core/src/outputParsers/selectors.ts
@@ -1,5 +1,5 @@
 import { parseJsonMarkdown } from "../OutputParser.js";
-import { BaseOutputParser, StructuredOutput } from "../types.js";
+import type { BaseOutputParser, StructuredOutput } from "../types.js";
 
 export type Answer = {
   choice: number;
diff --git a/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts b/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts
index 13440807514533ceb6f858aaa71c42f5884d2c15..f569043f3ba1ac23bce31feb6f9fcfc1481debbb 100644
--- a/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts
+++ b/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts
@@ -1,5 +1,6 @@
-import { MetadataMode, NodeWithScore } from "../Node.js";
-import { BaseNodePostprocessor } from "./types.js";
+import type { NodeWithScore } from "../Node.js";
+import { MetadataMode } from "../Node.js";
+import type { BaseNodePostprocessor } from "./types.js";
 
 export class MetadataReplacementPostProcessor implements BaseNodePostprocessor {
   targetMetadataKey: string;
diff --git a/packages/core/src/postprocessors/SimilarityPostprocessor.ts b/packages/core/src/postprocessors/SimilarityPostprocessor.ts
index 60db9501e2b819161ecf3a553621e9551ebc86fc..69d5aef6f11a44cce7f2500b069a95a1b111de14 100644
--- a/packages/core/src/postprocessors/SimilarityPostprocessor.ts
+++ b/packages/core/src/postprocessors/SimilarityPostprocessor.ts
@@ -1,5 +1,5 @@
-import { NodeWithScore } from "../Node.js";
-import { BaseNodePostprocessor } from "./types.js";
+import type { NodeWithScore } from "../Node.js";
+import type { BaseNodePostprocessor } from "./types.js";
 
 export class SimilarityPostprocessor implements BaseNodePostprocessor {
   similarityCutoff?: number;
diff --git a/packages/core/src/postprocessors/rerankers/CohereRerank.ts b/packages/core/src/postprocessors/rerankers/CohereRerank.ts
index b10579e160ca800d76c688c2ce215ba06cd70a74..5cd04e19a1988e709a67661103d39eac16c6204a 100644
--- a/packages/core/src/postprocessors/rerankers/CohereRerank.ts
+++ b/packages/core/src/postprocessors/rerankers/CohereRerank.ts
@@ -1,7 +1,8 @@
 import { CohereClient } from "cohere-ai";
 
-import { MetadataMode, NodeWithScore } from "../../Node.js";
-import { BaseNodePostprocessor } from "../types.js";
+import type { NodeWithScore } from "../../Node.js";
+import { MetadataMode } from "../../Node.js";
+import type { BaseNodePostprocessor } from "../types.js";
 
 type CohereRerankOptions = {
   topN?: number;
diff --git a/packages/core/src/postprocessors/types.ts b/packages/core/src/postprocessors/types.ts
index 7a0c0617b259c1296d0f61c57974ad4f04c7ba7a..a45ccabf75293548927137b4522d3208a77967e6 100644
--- a/packages/core/src/postprocessors/types.ts
+++ b/packages/core/src/postprocessors/types.ts
@@ -1,4 +1,4 @@
-import { NodeWithScore } from "../Node.js";
+import type { NodeWithScore } from "../Node.js";
 
 export interface BaseNodePostprocessor {
   /**
diff --git a/packages/core/src/readers/AssemblyAIReader.ts b/packages/core/src/readers/AssemblyAIReader.ts
index 8418d82df4570c7d38eee8dbe6b2d871b1e097af..b038ce2201df5d43256fe23fd9575b33bdae6661 100644
--- a/packages/core/src/readers/AssemblyAIReader.ts
+++ b/packages/core/src/readers/AssemblyAIReader.ts
@@ -1,13 +1,13 @@
-import {
-  AssemblyAI,
+import type {
   BaseServiceParams,
   SubtitleFormat,
   TranscribeParams,
   TranscriptParagraph,
   TranscriptSentence,
 } from "assemblyai";
+import { AssemblyAI } from "assemblyai";
 import { Document } from "../Node.js";
-import { BaseReader } from "./type.js";
+import type { BaseReader } from "./type.js";
 
 type AssemblyAIOptions = Partial<BaseServiceParams>;
 
diff --git a/packages/core/src/readers/CSVReader.ts b/packages/core/src/readers/CSVReader.ts
index 949de974fe3f3d89597e5788bfe08318728b4d46..17d321a832c847bc0e050850fc7c58f497a7312b 100644
--- a/packages/core/src/readers/CSVReader.ts
+++ b/packages/core/src/readers/CSVReader.ts
@@ -1,8 +1,9 @@
 import { defaultFS } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
-import Papa, { ParseConfig } from "papaparse";
+import type { GenericFileSystem } from "@llamaindex/env/type";
+import type { ParseConfig } from "papaparse";
+import Papa from "papaparse";
 import { Document } from "../Node.js";
-import { FileReader } from "./type.js";
+import type { FileReader } from "./type.js";
 
 /**
  * papaparse-based csv parser
diff --git a/packages/core/src/readers/DocxReader.ts b/packages/core/src/readers/DocxReader.ts
index 0af3e33e6d1abe55ad11bb2b9cdfebecf12cafd4..896c49be138297b4925dbbc3d1ad3f4d3b8d5422 100644
--- a/packages/core/src/readers/DocxReader.ts
+++ b/packages/core/src/readers/DocxReader.ts
@@ -1,8 +1,8 @@
 import { defaultFS } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import mammoth from "mammoth";
 import { Document } from "../Node.js";
-import { FileReader } from "./type.js";
+import type { FileReader } from "./type.js";
 
 export class DocxReader implements FileReader {
   /** DocxParser */
diff --git a/packages/core/src/readers/HTMLReader.ts b/packages/core/src/readers/HTMLReader.ts
index ce53287f3340b9ebcf24c990409c47f353e7d6ef..17f765cf47f6778c2d4606271e3632dcd016a243 100644
--- a/packages/core/src/readers/HTMLReader.ts
+++ b/packages/core/src/readers/HTMLReader.ts
@@ -1,7 +1,7 @@
 import { defaultFS } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import { Document } from "../Node.js";
-import { FileReader } from "./type.js";
+import type { FileReader } from "./type.js";
 
 /**
  * Extract the significant text from an arbitrary HTML document.
diff --git a/packages/core/src/readers/ImageReader.ts b/packages/core/src/readers/ImageReader.ts
index ea653697d6f9f95a82c6c567fcbeb3c7aee4bb9e..f3ea968099e1c446ae061b65c8fe312f157aa424 100644
--- a/packages/core/src/readers/ImageReader.ts
+++ b/packages/core/src/readers/ImageReader.ts
@@ -1,7 +1,8 @@
 import { defaultFS } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
-import { Document, ImageDocument } from "../Node.js";
-import { FileReader } from "./type.js";
+import type { GenericFileSystem } from "@llamaindex/env/type";
+import type { Document } from "../Node.js";
+import { ImageDocument } from "../Node.js";
+import type { FileReader } from "./type.js";
 
 /**
  * Reads the content of an image file into a Document object (which stores the image file as a Blob).
diff --git a/packages/core/src/readers/LlamaParseReader.ts b/packages/core/src/readers/LlamaParseReader.ts
index 3f671e710f34c169a24f8a224a0268c178678f46..39aeca7efa0d86365853c346ba8065f9d6fc97a6 100644
--- a/packages/core/src/readers/LlamaParseReader.ts
+++ b/packages/core/src/readers/LlamaParseReader.ts
@@ -1,7 +1,7 @@
 import { defaultFS } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import { Document } from "../Node.js";
-import { FileReader } from "./type.js";
+import type { FileReader } from "./type.js";
 
 type ResultType = "text" | "markdown";
 
diff --git a/packages/core/src/readers/MarkdownReader.ts b/packages/core/src/readers/MarkdownReader.ts
index 7b0ffdbaf49609b0b2479fd8bc818b66add223ef..333d20dd5b03208b63bacdd85c5a09e155626eba 100644
--- a/packages/core/src/readers/MarkdownReader.ts
+++ b/packages/core/src/readers/MarkdownReader.ts
@@ -1,7 +1,7 @@
 import { defaultFS } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import { Document } from "../Node.js";
-import { FileReader } from "./type.js";
+import type { FileReader } from "./type.js";
 
 type MarkdownTuple = [string | null, string];
 
diff --git a/packages/core/src/readers/NotionReader.ts b/packages/core/src/readers/NotionReader.ts
index 7422e42b1181d0d11e9b352cdab9293cbf4bbe69..bbac5d08f0125ee465f18ef4685c2a66acea68b3 100644
--- a/packages/core/src/readers/NotionReader.ts
+++ b/packages/core/src/readers/NotionReader.ts
@@ -1,7 +1,8 @@
-import { Client } from "@notionhq/client";
-import { crawler, Crawler, Pages, pageToString } from "notion-md-crawler";
+import type { Client } from "@notionhq/client";
+import type { Crawler, Pages } from "notion-md-crawler";
+import { crawler, pageToString } from "notion-md-crawler";
 import { Document } from "../Node.js";
-import { BaseReader } from "./type.js";
+import type { BaseReader } from "./type.js";
 
 type OptionalSerializers = Parameters<Crawler>[number]["serializers"];
 
diff --git a/packages/core/src/readers/PDFReader.ts b/packages/core/src/readers/PDFReader.ts
index 0df5ebf7e620df611eb0797d0ce0849965beb021..990dc0010ed6736bc6432c22e2854bb229ce085d 100644
--- a/packages/core/src/readers/PDFReader.ts
+++ b/packages/core/src/readers/PDFReader.ts
@@ -1,7 +1,7 @@
 import { createSHA256, defaultFS } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import { Document } from "../Node.js";
-import { BaseReader } from "./type.js";
+import type { BaseReader } from "./type.js";
 
 /**
  * Read the text of a PDF
diff --git a/packages/core/src/readers/SimpleDirectoryReader.ts b/packages/core/src/readers/SimpleDirectoryReader.ts
index 6518c211a230b09e2fe4ef4f6eff5b91073cd2d6..d3e91415d3e99271097e32569e04e7c71b99fd0a 100644
--- a/packages/core/src/readers/SimpleDirectoryReader.ts
+++ b/packages/core/src/readers/SimpleDirectoryReader.ts
@@ -1,5 +1,5 @@
 import { defaultFS, path } from "@llamaindex/env";
-import { CompleteFileSystem } from "@llamaindex/env/type";
+import type { CompleteFileSystem } from "@llamaindex/env/type";
 import { Document } from "../Node.js";
 import { walk } from "../storage/FileSystem.js";
 import { PapaCSVReader } from "./CSVReader.js";
@@ -8,7 +8,7 @@ import { HTMLReader } from "./HTMLReader.js";
 import { ImageReader } from "./ImageReader.js";
 import { MarkdownReader } from "./MarkdownReader.js";
 import { PDFReader } from "./PDFReader.js";
-import { BaseReader } from "./type.js";
+import type { BaseReader } from "./type.js";
 
 type ReaderCallback = (
   category: "file" | "directory",
diff --git a/packages/core/src/readers/SimpleMongoReader.ts b/packages/core/src/readers/SimpleMongoReader.ts
index f015868ac49406e67fa9e5301836c437dfd9a0e0..b8c122ee4f523567b318546a1662e26b05ab3e77 100644
--- a/packages/core/src/readers/SimpleMongoReader.ts
+++ b/packages/core/src/readers/SimpleMongoReader.ts
@@ -1,6 +1,7 @@
-import { MongoClient } from "mongodb";
-import { Document, Metadata } from "../Node.js";
-import { BaseReader } from "./type.js";
+import type { MongoClient } from "mongodb";
+import type { Metadata } from "../Node.js";
+import { Document } from "../Node.js";
+import type { BaseReader } from "./type.js";
 
 /**
  * Read in from MongoDB
diff --git a/packages/core/src/readers/type.ts b/packages/core/src/readers/type.ts
index 14ac3b2f4489d315b7cb1bc40e99077109bcfe01..428f79d64f101bf7a298baa3ed587ae15766020d 100644
--- a/packages/core/src/readers/type.ts
+++ b/packages/core/src/readers/type.ts
@@ -1,5 +1,5 @@
-import { CompleteFileSystem } from "@llamaindex/env/type";
-import { Document } from "../Node.js";
+import type { CompleteFileSystem } from "@llamaindex/env/type";
+import type { Document } from "../Node.js";
 
 /**
  * A reader takes imports data into Document objects.
diff --git a/packages/core/src/selectors/base.ts b/packages/core/src/selectors/base.ts
index f6992533e86a3b702ef39d3a3bad74dd310947e0..a5ef61b41fcd0b1dc3855ee54bd768cf96190db0 100644
--- a/packages/core/src/selectors/base.ts
+++ b/packages/core/src/selectors/base.ts
@@ -1,5 +1,5 @@
 import { PromptMixin } from "../prompts/Mixin.js";
-import { QueryBundle, ToolMetadataOnlyDescription } from "../types.js";
+import type { QueryBundle, ToolMetadataOnlyDescription } from "../types.js";
 
 export interface SingleSelection {
   index: number;
diff --git a/packages/core/src/selectors/llmSelectors.ts b/packages/core/src/selectors/llmSelectors.ts
index bdc689941e5ce9c5581b36ecf689123ca8ae7fb7..654740fb0d763032683d30c46f781480f42f8d9a 100644
--- a/packages/core/src/selectors/llmSelectors.ts
+++ b/packages/core/src/selectors/llmSelectors.ts
@@ -1,15 +1,16 @@
-import { LLM } from "../llm/index.js";
-import { Answer, SelectionOutputParser } from "../outputParsers/selectors.js";
-import {
+import type { LLM } from "../llm/index.js";
+import type { Answer } from "../outputParsers/selectors.js";
+import { SelectionOutputParser } from "../outputParsers/selectors.js";
+import type {
   BaseOutputParser,
   QueryBundle,
   StructuredOutput,
   ToolMetadataOnlyDescription,
 } from "../types.js";
-import { BaseSelector, SelectorResult } from "./base.js";
+import type { SelectorResult } from "./base.js";
+import { BaseSelector } from "./base.js";
+import type { MultiSelectPrompt, SingleSelectPrompt } from "./prompts.js";
 import {
-  MultiSelectPrompt,
-  SingleSelectPrompt,
   defaultMultiSelectPrompt,
   defaultSingleSelectPrompt,
 } from "./prompts.js";
diff --git a/packages/core/src/selectors/utils.ts b/packages/core/src/selectors/utils.ts
index 2b6f8bde9f163f37c63979b86c3c277ff814556f..084ec02674fc8fd4f4c9275e6f87c0836568b8fa 100644
--- a/packages/core/src/selectors/utils.ts
+++ b/packages/core/src/selectors/utils.ts
@@ -1,5 +1,5 @@
-import { ServiceContext } from "../ServiceContext.js";
-import { BaseSelector } from "./base.js";
+import type { ServiceContext } from "../ServiceContext.js";
+import type { BaseSelector } from "./base.js";
 import { LLMMultiSelector, LLMSingleSelector } from "./llmSelectors.js";
 
 export const getSelectorFromContext = (
diff --git a/packages/core/src/storage/FileSystem.ts b/packages/core/src/storage/FileSystem.ts
index cdafd3147b13b52e643ab1f7a9ccce09a5d505cc..746dee4727bc962976fd60d6753a129efd211786 100644
--- a/packages/core/src/storage/FileSystem.ts
+++ b/packages/core/src/storage/FileSystem.ts
@@ -1,4 +1,7 @@
-import { GenericFileSystem, WalkableFileSystem } from "@llamaindex/env/type";
+import type {
+  GenericFileSystem,
+  WalkableFileSystem,
+} from "@llamaindex/env/type";
 // FS utility functions
 
 /**
diff --git a/packages/core/src/storage/StorageContext.ts b/packages/core/src/storage/StorageContext.ts
index f178d3e3bc603005fbdd0b4f1fde70beb51f0a55..26d5f813919405d1b1783dd86e2ea1e83b5c24e9 100644
--- a/packages/core/src/storage/StorageContext.ts
+++ b/packages/core/src/storage/StorageContext.ts
@@ -1,15 +1,15 @@
 import { defaultFS, path } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import {
   DEFAULT_IMAGE_VECTOR_NAMESPACE,
   DEFAULT_NAMESPACE,
 } from "./constants.js";
 import { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
-import { BaseDocumentStore } from "./docStore/types.js";
+import type { BaseDocumentStore } from "./docStore/types.js";
 import { SimpleIndexStore } from "./indexStore/SimpleIndexStore.js";
-import { BaseIndexStore } from "./indexStore/types.js";
+import type { BaseIndexStore } from "./indexStore/types.js";
 import { SimpleVectorStore } from "./vectorStore/SimpleVectorStore.js";
-import { VectorStore } from "./vectorStore/types.js";
+import type { VectorStore } from "./vectorStore/types.js";
 
 export interface StorageContext {
   docStore: BaseDocumentStore;
diff --git a/packages/core/src/storage/chatStore/SimpleChatStore.ts b/packages/core/src/storage/chatStore/SimpleChatStore.ts
index 22e06b4c6bcb2a72bfe980a2dd8768ce8c7e4021..43567abaf28b3b927d4c34a4408b49337129e9a4 100644
--- a/packages/core/src/storage/chatStore/SimpleChatStore.ts
+++ b/packages/core/src/storage/chatStore/SimpleChatStore.ts
@@ -1,5 +1,5 @@
-import { ChatMessage } from "../../llm/index.js";
-import { BaseChatStore } from "./types.js";
+import type { ChatMessage } from "../../llm/index.js";
+import type { BaseChatStore } from "./types.js";
 
 /**
  * Simple chat store.
diff --git a/packages/core/src/storage/chatStore/types.ts b/packages/core/src/storage/chatStore/types.ts
index 87c7f892c5bebc0e85b1fcdc26572ce3efda07a7..6607ebac8c674fe229cc1610cd3c4d8db8bb2974 100644
--- a/packages/core/src/storage/chatStore/types.ts
+++ b/packages/core/src/storage/chatStore/types.ts
@@ -1,4 +1,4 @@
-import { ChatMessage } from "../../llm/index.js";
+import type { ChatMessage } from "../../llm/index.js";
 
 export interface BaseChatStore {
   setMessages(key: string, messages: ChatMessage[]): void;
diff --git a/packages/core/src/storage/docStore/KVDocumentStore.ts b/packages/core/src/storage/docStore/KVDocumentStore.ts
index e2d56bd4acb3d63aad7b82448016e446451ce638..a14c1c5cda348162e4c996ba7142a0815cddb46f 100644
--- a/packages/core/src/storage/docStore/KVDocumentStore.ts
+++ b/packages/core/src/storage/docStore/KVDocumentStore.ts
@@ -1,8 +1,10 @@
 import _, * as lodash from "lodash";
-import { BaseNode, ObjectType } from "../../Node.js";
+import type { BaseNode } from "../../Node.js";
+import { ObjectType } from "../../Node.js";
 import { DEFAULT_NAMESPACE } from "../constants.js";
-import { BaseKVStore } from "../kvStore/types.js";
-import { BaseDocumentStore, RefDocInfo } from "./types.js";
+import type { BaseKVStore } from "../kvStore/types.js";
+import type { RefDocInfo } from "./types.js";
+import { BaseDocumentStore } from "./types.js";
 import { docToJson, jsonToDoc } from "./utils.js";
 
 type DocMetaData = { docHash: string; refDocId?: string };
@@ -34,7 +36,7 @@ export class KVDocumentStore extends BaseDocumentStore {
     docs: BaseNode[],
     allowUpdate: boolean = true,
   ): Promise<void> {
-    for (var idx = 0; idx < docs.length; idx++) {
+    for (let idx = 0; idx < docs.length; idx++) {
       const doc = docs[idx];
       if (doc.id_ === null) {
         throw new Error("doc_id not set");
diff --git a/packages/core/src/storage/docStore/SimpleDocumentStore.ts b/packages/core/src/storage/docStore/SimpleDocumentStore.ts
index ccce62a80a73e0eb5ed54f7e3e398f3498f40f2f..c1d300e73887ea63f17934643262dcf052ed0424 100644
--- a/packages/core/src/storage/docStore/SimpleDocumentStore.ts
+++ b/packages/core/src/storage/docStore/SimpleDocumentStore.ts
@@ -1,5 +1,5 @@
 import { defaultFS, path } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import _ from "lodash";
 import {
   DEFAULT_DOC_STORE_PERSIST_FILENAME,
diff --git a/packages/core/src/storage/docStore/types.ts b/packages/core/src/storage/docStore/types.ts
index 228999bd04a4cc985ddcdd49e354e18d7d4ac2cd..f6205b6394f2ccdf340c604d4bdd95d4a601392d 100644
--- a/packages/core/src/storage/docStore/types.ts
+++ b/packages/core/src/storage/docStore/types.ts
@@ -1,4 +1,4 @@
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import { BaseNode } from "../../Node.js";
 import {
   DEFAULT_DOC_STORE_PERSIST_FILENAME,
diff --git a/packages/core/src/storage/docStore/utils.ts b/packages/core/src/storage/docStore/utils.ts
index f84c1a8bed761b3178f4eae4557d8bb73baf72cf..6eccaaebfa6e1c6aac6c81e5c5d97217a211f53b 100644
--- a/packages/core/src/storage/docStore/utils.ts
+++ b/packages/core/src/storage/docStore/utils.ts
@@ -1,4 +1,5 @@
-import { BaseNode, Document, ObjectType, TextNode } from "../../Node.js";
+import type { BaseNode } from "../../Node.js";
+import { Document, ObjectType, TextNode } from "../../Node.js";
 
 const TYPE_KEY = "__type__";
 const DATA_KEY = "__data__";
diff --git a/packages/core/src/storage/indexStore/KVIndexStore.ts b/packages/core/src/storage/indexStore/KVIndexStore.ts
index 3d15ce9d15e02be71725a870cad987bb21fe9941..87ce07fa267975354910e9006f98e69c01ba9a84 100644
--- a/packages/core/src/storage/indexStore/KVIndexStore.ts
+++ b/packages/core/src/storage/indexStore/KVIndexStore.ts
@@ -1,8 +1,8 @@
 import _ from "lodash";
-import { IndexStruct } from "../../indices/IndexStruct.js";
+import type { IndexStruct } from "../../indices/IndexStruct.js";
 import { jsonToIndexStruct } from "../../indices/json-to-index-struct.js";
 import { DEFAULT_NAMESPACE } from "../constants.js";
-import { BaseKVStore } from "../kvStore/types.js";
+import type { BaseKVStore } from "../kvStore/types.js";
 import { BaseIndexStore } from "./types.js";
 
 export class KVIndexStore extends BaseIndexStore {
diff --git a/packages/core/src/storage/indexStore/SimpleIndexStore.ts b/packages/core/src/storage/indexStore/SimpleIndexStore.ts
index e312634048520d93612a14f6dc39964d7bf9299f..ce79c6ed3494315121ec5027f70e4ad27903066c 100644
--- a/packages/core/src/storage/indexStore/SimpleIndexStore.ts
+++ b/packages/core/src/storage/indexStore/SimpleIndexStore.ts
@@ -1,11 +1,12 @@
 import { defaultFS, path } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import {
   DEFAULT_INDEX_STORE_PERSIST_FILENAME,
   DEFAULT_PERSIST_DIR,
 } from "../constants.js";
-import { DataType, SimpleKVStore } from "../kvStore/SimpleKVStore.js";
-import { BaseInMemoryKVStore } from "../kvStore/types.js";
+import type { DataType } from "../kvStore/SimpleKVStore.js";
+import { SimpleKVStore } from "../kvStore/SimpleKVStore.js";
+import type { BaseInMemoryKVStore } from "../kvStore/types.js";
 import { KVIndexStore } from "./KVIndexStore.js";
 
 export class SimpleIndexStore extends KVIndexStore {
diff --git a/packages/core/src/storage/indexStore/types.ts b/packages/core/src/storage/indexStore/types.ts
index 378166f8e925ccada562fe8a0434e133743e7885..a844c0000712ba6c2b7ebd5871853845dd776fbf 100644
--- a/packages/core/src/storage/indexStore/types.ts
+++ b/packages/core/src/storage/indexStore/types.ts
@@ -1,5 +1,5 @@
-import { GenericFileSystem } from "@llamaindex/env/type";
-import { IndexStruct } from "../../indices/IndexStruct.js";
+import type { GenericFileSystem } from "@llamaindex/env/type";
+import type { IndexStruct } from "../../indices/IndexStruct.js";
 import {
   DEFAULT_INDEX_STORE_PERSIST_FILENAME,
   DEFAULT_PERSIST_DIR,
diff --git a/packages/core/src/storage/kvStore/SimpleKVStore.ts b/packages/core/src/storage/kvStore/SimpleKVStore.ts
index fe7c2211c6fd8a58dad4d9c758e280bf25898ef7..e6be2a98d0877b85c75ce4e2c6d9f4e50550d818 100644
--- a/packages/core/src/storage/kvStore/SimpleKVStore.ts
+++ b/packages/core/src/storage/kvStore/SimpleKVStore.ts
@@ -1,5 +1,5 @@
 import { defaultFS, path } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import _ from "lodash";
 import { exists } from "../FileSystem.js";
 import { DEFAULT_COLLECTION } from "../constants.js";
diff --git a/packages/core/src/storage/kvStore/types.ts b/packages/core/src/storage/kvStore/types.ts
index 6005c023a089402261bb30689db738b2df018a64..0bd5a3d5ba4648963980d89d26d2bb0b3bed538b 100644
--- a/packages/core/src/storage/kvStore/types.ts
+++ b/packages/core/src/storage/kvStore/types.ts
@@ -1,4 +1,4 @@
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 const defaultCollection = "data";
 
 type StoredValue = Record<string, any> | null;
diff --git a/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts b/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts
index 72ab14fd7df218603f4e95f7f7811fbcbeebcd49..17c0170c38d5cab57897ea7fce5ef8732546c659 100644
--- a/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts
@@ -1,7 +1,8 @@
 import { AstraDB } from "@datastax/astra-db-ts";
-import { Collection } from "@datastax/astra-db-ts/dist/collections";
-import { BaseNode, MetadataMode } from "../../Node.js";
-import {
+import type { Collection } from "@datastax/astra-db-ts/dist/collections";
+import type { BaseNode } from "../../Node.js";
+import { MetadataMode } from "../../Node.js";
+import type {
   VectorStore,
   VectorStoreQuery,
   VectorStoreQueryResult,
diff --git a/packages/core/src/storage/vectorStore/ChromaVectorStore.ts b/packages/core/src/storage/vectorStore/ChromaVectorStore.ts
index f5ace2dab16dff9c91ed6c4a9b002ae0b94888a2..ae5ac429440f838e888ea27d2b1925d3e5482203 100644
--- a/packages/core/src/storage/vectorStore/ChromaVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/ChromaVectorStore.ts
@@ -1,20 +1,20 @@
-import {
+import type {
   AddParams,
-  ChromaClient,
   ChromaClientParams,
   Collection,
-  IncludeEnum,
   QueryResponse,
   Where,
   WhereDocument,
 } from "chromadb";
-import { BaseNode, MetadataMode } from "../../Node.js";
-import {
+import { ChromaClient, IncludeEnum } from "chromadb";
+import type { BaseNode } from "../../Node.js";
+import { MetadataMode } from "../../Node.js";
+import type {
   VectorStore,
   VectorStoreQuery,
-  VectorStoreQueryMode,
   VectorStoreQueryResult,
 } from "./types.js";
+import { VectorStoreQueryMode } from "./types.js";
 import { metadataDictToNode, nodeToMetadata } from "./utils.js";
 
 type ChromaDeleteOptions = {
diff --git a/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts b/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts
index 919b32052f6760383708dd3f1e76e3f5f95cd5c2..491d5fd10b1604923dd7dbe2aea2373404a7d33b 100644
--- a/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts
@@ -1,6 +1,8 @@
-import { BulkWriteOptions, Collection, MongoClient } from "mongodb";
-import { BaseNode, MetadataMode } from "../../Node.js";
-import {
+import type { BulkWriteOptions, Collection } from "mongodb";
+import { MongoClient } from "mongodb";
+import type { BaseNode } from "../../Node.js";
+import { MetadataMode } from "../../Node.js";
+import type {
   MetadataFilters,
   VectorStore,
   VectorStoreQuery,
diff --git a/packages/core/src/storage/vectorStore/PGVectorStore.ts b/packages/core/src/storage/vectorStore/PGVectorStore.ts
index 7b20916d9b6949a97d30d2dcaaba813aab018a49..08f71f5f86782a1c4591bee01f1bdded32ccaa92 100644
--- a/packages/core/src/storage/vectorStore/PGVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/PGVectorStore.ts
@@ -1,14 +1,15 @@
 import pg from "pg";
 import pgvector from "pgvector/pg";
 
-import {
+import type {
   VectorStore,
   VectorStoreQuery,
   VectorStoreQueryResult,
 } from "./types.js";
 
-import { GenericFileSystem } from "@llamaindex/env/type";
-import { BaseNode, Document, Metadata, MetadataMode } from "../../Node.js";
+import type { GenericFileSystem } from "@llamaindex/env/type";
+import type { BaseNode, Metadata } from "../../Node.js";
+import { Document, MetadataMode } from "../../Node.js";
 
 export const PGVECTOR_SCHEMA = "public";
 export const PGVECTOR_TABLE = "llamaindex_embedding";
@@ -147,7 +148,7 @@ export class PGVectorStore implements VectorStore {
     const sql: string = `DELETE FROM ${this.schemaName}.${this.tableName}
                          WHERE collection = $1`;
 
-    const db = (await this.getDb()) as pg.Client;
+    const db = await this.getDb();
     const ret = await db.query(sql, [this.collection]);
 
     return ret;
@@ -192,7 +193,7 @@ export class PGVectorStore implements VectorStore {
                            (id, external_id, collection, document, metadata, embeddings)
                          VALUES ($1, $2, $3, $4, $5, $6)`;
 
-    const db = (await this.getDb()) as pg.Client;
+    const db = await this.getDb();
     const data = this.getDataToInsert(embeddingResults);
 
     const ret: string[] = [];
@@ -227,7 +228,7 @@ export class PGVectorStore implements VectorStore {
     const sql: string = `DELETE FROM ${this.schemaName}.${this.tableName}
                          WHERE id = $1 ${collectionCriteria}`;
 
-    const db = (await this.getDb()) as pg.Client;
+    const db = await this.getDb();
     const params = this.collection.length
       ? [refDocId, this.collection]
       : [refDocId];
@@ -276,7 +277,7 @@ export class PGVectorStore implements VectorStore {
       LIMIT ${max}
     `;
 
-    const db = (await this.getDb()) as pg.Client;
+    const db = await this.getDb();
     const results = await db.query(sql, params);
 
     const nodes = results.rows.map((row) => {
diff --git a/packages/core/src/storage/vectorStore/PineconeVectorStore.ts b/packages/core/src/storage/vectorStore/PineconeVectorStore.ts
index 8d3dec3ba17cf01280dfa5f65183476c76d8509f..9c965bfae14e0f84cc5e05e441fc0b7160cf9ea2 100644
--- a/packages/core/src/storage/vectorStore/PineconeVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/PineconeVectorStore.ts
@@ -1,4 +1,4 @@
-import {
+import type {
   ExactMatchFilter,
   MetadataFilters,
   VectorStore,
@@ -6,14 +6,14 @@ import {
   VectorStoreQueryResult,
 } from "./types.js";
 
-import { GenericFileSystem } from "@llamaindex/env/type";
-import {
+import type { GenericFileSystem } from "@llamaindex/env/type";
+import type {
   FetchResponse,
   Index,
-  Pinecone,
   ScoredPineconeRecord,
 } from "@pinecone-database/pinecone";
-import { BaseNode, Metadata } from "../../Node.js";
+import { Pinecone } from "@pinecone-database/pinecone";
+import type { BaseNode, Metadata } from "../../Node.js";
 import { metadataDictToNode, nodeToMetadata } from "./utils.js";
 
 type PineconeParams = {
diff --git a/packages/core/src/storage/vectorStore/QdrantVectorStore.ts b/packages/core/src/storage/vectorStore/QdrantVectorStore.ts
index 0d656d15fb6bac68e63346c5686f9b5e19166b26..44b1ed7f27a6be1bcf6686c0c33e494085968b6b 100644
--- a/packages/core/src/storage/vectorStore/QdrantVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/QdrantVectorStore.ts
@@ -1,5 +1,5 @@
-import { BaseNode } from "../../Node.js";
-import {
+import type { BaseNode } from "../../Node.js";
+import type {
   VectorStore,
   VectorStoreQuery,
   VectorStoreQueryResult,
diff --git a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
index 85b286c32e34f664d1a650a3d427673765ca8c96..e0478918d57e859d96948ff10d5fb3b9af9351a7 100644
--- a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
+++ b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts
@@ -1,7 +1,7 @@
 import { defaultFS, path } from "@llamaindex/env";
-import { GenericFileSystem } from "@llamaindex/env/type";
+import type { GenericFileSystem } from "@llamaindex/env/type";
 import _ from "lodash";
-import { BaseNode } from "../../Node.js";
+import type { BaseNode } from "../../Node.js";
 import {
   getTopKEmbeddings,
   getTopKEmbeddingsLearner,
@@ -9,12 +9,12 @@ import {
 } from "../../embeddings/utils.js";
 import { exists } from "../FileSystem.js";
 import { DEFAULT_PERSIST_DIR } from "../constants.js";
-import {
+import type {
   VectorStore,
   VectorStoreQuery,
-  VectorStoreQueryMode,
   VectorStoreQueryResult,
 } from "./types.js";
+import { VectorStoreQueryMode } from "./types.js";
 
 const LEARNER_MODES = new Set<VectorStoreQueryMode>([
   VectorStoreQueryMode.SVM,
diff --git a/packages/core/src/storage/vectorStore/types.ts b/packages/core/src/storage/vectorStore/types.ts
index d3451143bf09a1c6dcfa6d15a1464fcd61c08bdb..c14ec60778b97c5441e4ce3b213d44fe2719423e 100644
--- a/packages/core/src/storage/vectorStore/types.ts
+++ b/packages/core/src/storage/vectorStore/types.ts
@@ -1,4 +1,4 @@
-import { BaseNode } from "../../Node.js";
+import type { BaseNode } from "../../Node.js";
 
 export interface VectorStoreQueryResult {
   nodes?: BaseNode[];
diff --git a/packages/core/src/storage/vectorStore/utils.ts b/packages/core/src/storage/vectorStore/utils.ts
index 34af36316238c89e2020a0137b209075c21aad24..3556d58bf648746ef7b0535167f29b3a549f9df7 100644
--- a/packages/core/src/storage/vectorStore/utils.ts
+++ b/packages/core/src/storage/vectorStore/utils.ts
@@ -1,4 +1,5 @@
-import { BaseNode, jsonToNode, Metadata, ObjectType } from "../../Node.js";
+import type { BaseNode, Metadata } from "../../Node.js";
+import { ObjectType, jsonToNode } from "../../Node.js";
 
 const DEFAULT_TEXT_KEY = "text";
 
diff --git a/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts b/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts
index 59166895817ed3c9e338795d02a0407cbfae80af..a6454c134cdb0043ff36e247348b24c00941b29a 100644
--- a/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts
+++ b/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts
@@ -1,14 +1,14 @@
-import { ImageNode, MetadataMode, splitNodesByType } from "../Node.js";
+import type { ImageNode } from "../Node.js";
+import { MetadataMode, splitNodesByType } from "../Node.js";
 import { Response } from "../Response.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../ServiceContext.js";
+import type { ServiceContext } from "../ServiceContext.js";
+import { serviceContextFromDefaults } from "../ServiceContext.js";
 import { imageToDataUrl } from "../embeddings/index.js";
-import { MessageContentDetail } from "../llm/types.js";
+import type { MessageContentDetail } from "../llm/types.js";
 import { PromptMixin } from "../prompts/Mixin.js";
-import { TextQaPrompt, defaultTextQaPrompt } from "./../Prompt.js";
-import {
+import type { TextQaPrompt } from "./../Prompt.js";
+import { defaultTextQaPrompt } from "./../Prompt.js";
+import type {
   BaseSynthesizer,
   SynthesizeParamsNonStreaming,
   SynthesizeParamsStreaming,
diff --git a/packages/core/src/synthesizers/ResponseSynthesizer.ts b/packages/core/src/synthesizers/ResponseSynthesizer.ts
index f2a8daf9c7c1dd2cff8498d53413f98f50932eb1..6f5663295e81ce52892fcb905014b00d31822f74 100644
--- a/packages/core/src/synthesizers/ResponseSynthesizer.ts
+++ b/packages/core/src/synthesizers/ResponseSynthesizer.ts
@@ -1,13 +1,12 @@
 import { MetadataMode } from "../Node.js";
 import { Response } from "../Response.js";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "../ServiceContext.js";
+import type { ServiceContext } from "../ServiceContext.js";
+import { serviceContextFromDefaults } from "../ServiceContext.js";
 import { streamConverter } from "../llm/utils.js";
 import { PromptMixin } from "../prompts/Mixin.js";
-import { ResponseBuilderPrompts, getResponseBuilder } from "./builders.js";
-import {
+import type { ResponseBuilderPrompts } from "./builders.js";
+import { getResponseBuilder } from "./builders.js";
+import type {
   BaseSynthesizer,
   ResponseBuilder,
   SynthesizeParamsNonStreaming,
diff --git a/packages/core/src/synthesizers/builders.ts b/packages/core/src/synthesizers/builders.ts
index 0c232b9624fc7636dfe1e6df4a9decbe43fe4bad..49e1105ad39bbf0eeac85465c6df25223f2c675f 100644
--- a/packages/core/src/synthesizers/builders.ts
+++ b/packages/core/src/synthesizers/builders.ts
@@ -1,19 +1,22 @@
-import { Event } from "../callbacks/CallbackManager.js";
-import { LLM } from "../llm/index.js";
+import type { Event } from "../callbacks/CallbackManager.js";
+import type { LLM } from "../llm/index.js";
 import { streamConverter } from "../llm/utils.js";
-import {
-  defaultRefinePrompt,
-  defaultTextQaPrompt,
-  defaultTreeSummarizePrompt,
+import type {
   RefinePrompt,
   SimplePrompt,
   TextQaPrompt,
   TreeSummarizePrompt,
 } from "../Prompt.js";
-import { getBiggestPrompt, PromptHelper } from "../PromptHelper.js";
-import { PromptMixin } from "../prompts/Mixin.js";
-import { ServiceContext } from "../ServiceContext.js";
 import {
+  defaultRefinePrompt,
+  defaultTextQaPrompt,
+  defaultTreeSummarizePrompt,
+} from "../Prompt.js";
+import type { PromptHelper } from "../PromptHelper.js";
+import { getBiggestPrompt } from "../PromptHelper.js";
+import { PromptMixin } from "../prompts/Mixin.js";
+import type { ServiceContext } from "../ServiceContext.js";
+import type {
   ResponseBuilder,
   ResponseBuilderParamsNonStreaming,
   ResponseBuilderParamsStreaming,
diff --git a/packages/core/src/synthesizers/types.ts b/packages/core/src/synthesizers/types.ts
index 333a3bdc4c796c3f2869c8636eecfc9a35a8fc96..8b8a469729a93b885f340002f0012d90f38a9497 100644
--- a/packages/core/src/synthesizers/types.ts
+++ b/packages/core/src/synthesizers/types.ts
@@ -1,7 +1,7 @@
-import { Event } from "../callbacks/CallbackManager.js";
-import { NodeWithScore } from "../Node.js";
-import { PromptMixin } from "../prompts/Mixin.js";
-import { Response } from "../Response.js";
+import type { Event } from "../callbacks/CallbackManager.js";
+import type { NodeWithScore } from "../Node.js";
+import type { PromptMixin } from "../prompts/Mixin.js";
+import type { Response } from "../Response.js";
 
 export interface SynthesizeParamsBase {
   query: string;
diff --git a/packages/core/src/tools/QueryEngineTool.ts b/packages/core/src/tools/QueryEngineTool.ts
index fa3505f6cd3ebaaa962b8e4e3d7ba51f0153c7ae..60fa03755880a6d47fdc8829924b41b5f6e8933c 100644
--- a/packages/core/src/tools/QueryEngineTool.ts
+++ b/packages/core/src/tools/QueryEngineTool.ts
@@ -1,4 +1,4 @@
-import { BaseQueryEngine, BaseTool, ToolMetadata } from "../types.js";
+import type { BaseQueryEngine, BaseTool, ToolMetadata } from "../types.js";
 
 export type QueryEngineToolParams = {
   queryEngine: BaseQueryEngine;
diff --git a/packages/core/src/tools/functionTool.ts b/packages/core/src/tools/functionTool.ts
index af3f50ca3919cb9ce299af4823cca475338b73b8..d59b07589ec8bf8d20491250ae7b6159b4cb00cc 100644
--- a/packages/core/src/tools/functionTool.ts
+++ b/packages/core/src/tools/functionTool.ts
@@ -1,4 +1,4 @@
-import { BaseTool, ToolMetadata } from "../types.js";
+import type { BaseTool, ToolMetadata } from "../types.js";
 
 type Metadata = {
   name: string;
diff --git a/packages/core/src/tools/utils.ts b/packages/core/src/tools/utils.ts
index 65bc25ab0eed5f664e51e4f7b47842253c96b4a4..aaba6b01ac3a7963227be599b7b8f7a4cce8035d 100644
--- a/packages/core/src/tools/utils.ts
+++ b/packages/core/src/tools/utils.ts
@@ -1,4 +1,4 @@
-import { BaseTool } from "../types.js";
+import type { BaseTool } from "../types.js";
 import { ToolOutput } from "./types.js";
 
 /**
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index d3d454524928ee6db09ce1ee88b263948197b1a4..827e51420a9ecf5a19273c681a445557e4371d2e 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -1,8 +1,8 @@
 /**
  * Top level types to avoid circular dependencies
  */
-import { Event } from "./callbacks/CallbackManager.js";
-import { Response } from "./Response.js";
+import type { Event } from "./callbacks/CallbackManager.js";
+import type { Response } from "./Response.js";
 
 /**
  * Parameters for sending a query.
diff --git a/packages/core/tests/CallbackManager.test.ts b/packages/core/tests/CallbackManager.test.ts
index ea4729741884eef5203a8777e8ef5f21f6621022..2935537886e46762a4684ba4453f0a871ab44d35 100644
--- a/packages/core/tests/CallbackManager.test.ts
+++ b/packages/core/tests/CallbackManager.test.ts
@@ -9,15 +9,13 @@ import {
 } from "vitest";
 
 import { Document } from "llamaindex/Node";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "llamaindex/ServiceContext";
-import {
-  CallbackManager,
+import type { ServiceContext } from "llamaindex/ServiceContext";
+import { serviceContextFromDefaults } from "llamaindex/ServiceContext";
+import type {
   RetrievalCallbackResponse,
   StreamCallbackResponse,
 } from "llamaindex/callbacks/CallbackManager";
+import { CallbackManager } from "llamaindex/callbacks/CallbackManager";
 import { OpenAIEmbedding } from "llamaindex/embeddings/index";
 import { SummaryIndex } from "llamaindex/indices/summary/index";
 import { VectorStoreIndex } from "llamaindex/indices/vectorStore/index";
diff --git a/packages/core/tests/MetadataExtractors.test.ts b/packages/core/tests/MetadataExtractors.test.ts
index af848c0682e5d50daa1345bba042d85da35ac02a..edab6b0d907086eca039ba4d6d15c6a61594c955 100644
--- a/packages/core/tests/MetadataExtractors.test.ts
+++ b/packages/core/tests/MetadataExtractors.test.ts
@@ -1,13 +1,11 @@
 import { Document } from "llamaindex/Node";
-import {
-  ServiceContext,
-  serviceContextFromDefaults,
-} from "llamaindex/ServiceContext";
-import {
-  CallbackManager,
+import type { ServiceContext } from "llamaindex/ServiceContext";
+import { serviceContextFromDefaults } from "llamaindex/ServiceContext";
+import type {
   RetrievalCallbackResponse,
   StreamCallbackResponse,
 } from "llamaindex/callbacks/CallbackManager";
+import { CallbackManager } from "llamaindex/callbacks/CallbackManager";
 import { OpenAIEmbedding } from "llamaindex/embeddings/index";
 import {
   KeywordExtractor,
diff --git a/packages/core/tests/ingestion/IngestionCache.test.ts b/packages/core/tests/ingestion/IngestionCache.test.ts
index 278ef53cf70e687002eae7c5dde891427f6bf38f..a8406d07b4000954042d751da74ed34e4c208589 100644
--- a/packages/core/tests/ingestion/IngestionCache.test.ts
+++ b/packages/core/tests/ingestion/IngestionCache.test.ts
@@ -1,9 +1,10 @@
-import { BaseNode, TextNode } from "llamaindex/Node";
+import type { BaseNode } from "llamaindex/Node";
+import { TextNode } from "llamaindex/Node";
 import {
   IngestionCache,
   getTransformationHash,
 } from "llamaindex/ingestion/IngestionCache";
-import { TransformComponent } from "llamaindex/ingestion/index";
+import type { TransformComponent } from "llamaindex/ingestion/index";
 import { SimpleNodeParser } from "llamaindex/nodeParsers/index";
 import { beforeAll, describe, expect, test } from "vitest";
 
diff --git a/packages/core/tests/mocks/TestableQdrantVectorStore.ts b/packages/core/tests/mocks/TestableQdrantVectorStore.ts
index 306d0484641ccb83325d161f950d47936563a540..dff820705cd14b388eb96126fd3aecb1546fe850 100644
--- a/packages/core/tests/mocks/TestableQdrantVectorStore.ts
+++ b/packages/core/tests/mocks/TestableQdrantVectorStore.ts
@@ -1,4 +1,4 @@
-import { BaseNode } from "llamaindex/Node";
+import type { BaseNode } from "llamaindex/Node";
 import { QdrantVectorStore } from "llamaindex/storage/index";
 
 export class TestableQdrantVectorStore extends QdrantVectorStore {
diff --git a/packages/core/tests/objects/ObjectIndex.test.ts b/packages/core/tests/objects/ObjectIndex.test.ts
index 10a46e771b56d19b41960fd923b85cc659ddb1cf..b65e767650c4fd545ae00fb460fdfcc2c788c927 100644
--- a/packages/core/tests/objects/ObjectIndex.test.ts
+++ b/packages/core/tests/objects/ObjectIndex.test.ts
@@ -1,9 +1,9 @@
+import type { ServiceContext } from "llamaindex";
 import {
   FunctionTool,
   ObjectIndex,
   OpenAI,
   OpenAIEmbedding,
-  ServiceContext,
   SimpleToolNodeMapping,
   VectorStoreIndex,
   serviceContextFromDefaults,
diff --git a/packages/core/tests/postprocessors/MetadataReplacementPostProcessor.test.ts b/packages/core/tests/postprocessors/MetadataReplacementPostProcessor.test.ts
index 360b242c6feb757fda8e555ef476d798d8abe0c0..7412f8d23585fd7bf285f92e04f638b59282b7a7 100644
--- a/packages/core/tests/postprocessors/MetadataReplacementPostProcessor.test.ts
+++ b/packages/core/tests/postprocessors/MetadataReplacementPostProcessor.test.ts
@@ -1,4 +1,5 @@
-import { MetadataMode, NodeWithScore, TextNode } from "llamaindex/Node";
+import type { NodeWithScore } from "llamaindex/Node";
+import { MetadataMode, TextNode } from "llamaindex/Node";
 import { MetadataReplacementPostProcessor } from "llamaindex/postprocessors/index";
 import { beforeEach, describe, expect, test } from "vitest";
 
diff --git a/packages/core/tests/utility/mockOpenAI.ts b/packages/core/tests/utility/mockOpenAI.ts
index b2d684686c4db1eb48cc8d89105cc82707c1ea12..b0dbcb03f427daf07a9fd2aac70e4ccbbdefc9e6 100644
--- a/packages/core/tests/utility/mockOpenAI.ts
+++ b/packages/core/tests/utility/mockOpenAI.ts
@@ -1,8 +1,8 @@
 import { globalsHelper } from "llamaindex/GlobalsHelper";
-import { CallbackManager } from "llamaindex/callbacks/CallbackManager";
-import { OpenAIEmbedding } from "llamaindex/embeddings/index";
-import { OpenAI } from "llamaindex/llm/LLM";
-import { LLMChatParamsBase } from "llamaindex/llm/types";
+import type { CallbackManager } from "llamaindex/callbacks/CallbackManager";
+import type { OpenAIEmbedding } from "llamaindex/embeddings/index";
+import type { OpenAI } from "llamaindex/llm/LLM";
+import type { LLMChatParamsBase } from "llamaindex/llm/types";
 import { vi } from "vitest";
 
 export const DEFAULT_LLM_TEXT_OUTPUT = "MOCK_TOKEN_1-MOCK_TOKEN_2";
diff --git a/packages/core/tests/vectorStores/QdrantVectorStore.test.ts b/packages/core/tests/vectorStores/QdrantVectorStore.test.ts
index 67cda1b46d1d6b775526b43fad076a8bd035dad8..a3f242c389e288b0c571a707f24c4edef5b4e685 100644
--- a/packages/core/tests/vectorStores/QdrantVectorStore.test.ts
+++ b/packages/core/tests/vectorStores/QdrantVectorStore.test.ts
@@ -1,5 +1,7 @@
-import { BaseNode, TextNode } from "llamaindex/Node";
-import { Mocked, beforeEach, describe, expect, it, vi } from "vitest";
+import type { BaseNode } from "llamaindex/Node";
+import { TextNode } from "llamaindex/Node";
+import type { Mocked } from "vitest";
+import { beforeEach, describe, expect, it, vi } from "vitest";
 
 import { QdrantClient } from "@qdrant/js-client-rest";
 import { VectorStoreQueryMode } from "llamaindex/storage/index";
diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json
index 535cfc3a83c8e883b8d117b454ecd03639d960f7..6367996de5315571c3264ede6a205299ea897ede 100644
--- a/packages/core/tsconfig.json
+++ b/packages/core/tsconfig.json
@@ -1,16 +1,13 @@
 {
+  "extends": "../../tsconfig.json",
   "compilerOptions": {
     "rootDir": "./src",
     "outDir": "./dist/type",
-    "declaration": true,
-    "esModuleInterop": true,
-    "forceConsistentCasingInFileNames": true,
+    "emitDeclarationOnly": true,
     "module": "node16",
     "moduleResolution": "node16",
     "skipLibCheck": true,
-    "strict": true,
-    "lib": ["ESNext", "dom"],
-    "target": "ESNext"
+    "strict": true
   },
   "include": ["./src"],
   "exclude": ["node_modules"]
diff --git a/packages/env/src/index.polyfill.ts b/packages/env/src/index.polyfill.ts
index db252082031d278acb2173396b5cd2604193a50c..89b5b6421b5ce3a41c7f13507e3e9d904c224ad0 100644
--- a/packages/env/src/index.polyfill.ts
+++ b/packages/env/src/index.polyfill.ts
@@ -1,6 +1,6 @@
 import { Sha256 } from "@aws-crypto/sha256-js";
 import pathe from "pathe";
-import { CompleteFileSystem, InMemoryFileSystem } from "./type.js";
+import { InMemoryFileSystem, type CompleteFileSystem } from "./type.js";
 
 export { pathe as path };
 
diff --git a/packages/env/tsconfig.json b/packages/env/tsconfig.json
index 419912df410d8c10eb89f4f88c80ffc0fc75640a..373c7407927a283432281706523305aece49ca0b 100644
--- a/packages/env/tsconfig.json
+++ b/packages/env/tsconfig.json
@@ -1,17 +1,12 @@
 {
+  "extends": "../../tsconfig.json",
   "compilerOptions": {
     "rootDir": "./src",
     "outDir": "./dist/type",
-    "declaration": true,
-    "esModuleInterop": true,
-    "forceConsistentCasingInFileNames": true,
+    "emitDeclarationOnly": true,
     "module": "node16",
     "moduleResolution": "node16",
-    "skipLibCheck": true,
-    "strict": true,
-    "lib": ["ESNext", "dom"],
-    "types": ["node"],
-    "target": "ESNext"
+    "types": ["node"]
   },
   "include": ["./src"],
   "exclude": ["node_modules"]
diff --git a/tsconfig.json b/tsconfig.json
index a4123d728d76f0dfa862aecd55a88c324c53cadb..561b01dd2dd236bbb0e53cbc503ccf99fa6a213f 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -3,6 +3,7 @@
     "target": "es2016",
     "module": "esnext",
     "moduleResolution": "bundler",
+    "verbatimModuleSyntax": true,
     "esModuleInterop": true,
     "forceConsistentCasingInFileNames": true,
     "strict": true,