diff --git a/apps/simple/assemblyai.ts b/apps/simple/assemblyai.ts
deleted file mode 100644
index d0333806349002eb500a241701c31b677fd67e87..0000000000000000000000000000000000000000
--- a/apps/simple/assemblyai.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { program } from "commander";
-import { AudioTranscriptReader, CreateTranscriptParameters } from "llamaindex";
-import { stdin as input, stdout as output } from "node:process";
-// readline/promises is still experimental so not in @types/node yet
-// @ts-ignore
-import readline from "node:readline/promises";
-import { VectorStoreIndex } from "../../packages/core/src/indices";
-
-program
-  .option(
-    "-a, --audio-url [string]",
-    "URL or path of the audio file to transcribe",
-  )
-  .option("-i, --transcript-id [string]", "ID of the AssemblyAI transcript")
-  .action(async (options) => {
-    if (!process.env.ASSEMBLYAI_API_KEY) {
-      console.log("No ASSEMBLYAI_API_KEY found in environment variables.");
-      return;
-    }
-
-    const reader = new AudioTranscriptReader();
-    let params: CreateTranscriptParameters | string;
-    console.log(options);
-    if (options.audioUrl) {
-      params = {
-        audio_url: options.audioUrl,
-      };
-    } else if (options.transcriptId) {
-      params = options.transcriptId;
-    } else {
-      console.log(
-        "You must provide either an --audio-url or a --transcript-id",
-      );
-      return;
-    }
-
-    const documents = await reader.loadData(params);
-    console.log(documents);
-
-    // Split text and create embeddings. Store them in a VectorStoreIndex
-    const index = await VectorStoreIndex.fromDocuments(documents);
-
-    // Create query engine
-    const queryEngine = index.asQueryEngine();
-
-    const rl = readline.createInterface({ input, output });
-    while (true) {
-      const query = await rl.question("Ask a question: ");
-
-      if (!query) {
-        break;
-      }
-
-      const response = await queryEngine.query(query);
-
-      console.log(response.toString());
-    }
-  });
-
-program.parse();
diff --git a/examples/assemblyai.ts b/examples/assemblyai.ts
deleted file mode 100644
index d0333806349002eb500a241701c31b677fd67e87..0000000000000000000000000000000000000000
--- a/examples/assemblyai.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { program } from "commander";
-import { AudioTranscriptReader, CreateTranscriptParameters } from "llamaindex";
-import { stdin as input, stdout as output } from "node:process";
-// readline/promises is still experimental so not in @types/node yet
-// @ts-ignore
-import readline from "node:readline/promises";
-import { VectorStoreIndex } from "../../packages/core/src/indices";
-
-program
-  .option(
-    "-a, --audio-url [string]",
-    "URL or path of the audio file to transcribe",
-  )
-  .option("-i, --transcript-id [string]", "ID of the AssemblyAI transcript")
-  .action(async (options) => {
-    if (!process.env.ASSEMBLYAI_API_KEY) {
-      console.log("No ASSEMBLYAI_API_KEY found in environment variables.");
-      return;
-    }
-
-    const reader = new AudioTranscriptReader();
-    let params: CreateTranscriptParameters | string;
-    console.log(options);
-    if (options.audioUrl) {
-      params = {
-        audio_url: options.audioUrl,
-      };
-    } else if (options.transcriptId) {
-      params = options.transcriptId;
-    } else {
-      console.log(
-        "You must provide either an --audio-url or a --transcript-id",
-      );
-      return;
-    }
-
-    const documents = await reader.loadData(params);
-    console.log(documents);
-
-    // Split text and create embeddings. Store them in a VectorStoreIndex
-    const index = await VectorStoreIndex.fromDocuments(documents);
-
-    // Create query engine
-    const queryEngine = index.asQueryEngine();
-
-    const rl = readline.createInterface({ input, output });
-    while (true) {
-      const query = await rl.question("Ask a question: ");
-
-      if (!query) {
-        break;
-      }
-
-      const response = await queryEngine.query(query);
-
-      console.log(response.toString());
-    }
-  });
-
-program.parse();
diff --git a/packages/core/package.json b/packages/core/package.json
index 6ed4251c3490113f7b0faebe15b56b002d693d91..0f3dbc5c9956f68e3573fe15aa7a541585d7c69e 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -6,7 +6,6 @@
     "@anthropic-ai/sdk": "^0.9.1",
     "@notionhq/client": "^2.2.13",
     "@xenova/transformers": "^2.8.0",
-    "assemblyai": "^3.0.1",
     "crypto-js": "^4.2.0",
     "js-tiktoken": "^1.0.8",
     "lodash": "^4.17.21",
@@ -50,12 +49,5 @@
     "test": "jest",
     "build": "tsup src/index.ts --format esm,cjs --dts",
     "dev": "tsup src/index.ts --format esm,cjs --dts --watch"
-  },
-  "exports": {
-    ".": {
-      "require": "./dist/index.js",
-      "import": "./dist/index.mjs",
-      "types": "./dist/index.d.ts"
-    }
   }
 }
\ No newline at end of file
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index c049a0710edd6b362be6784a3579850f3d1957c7..dde8fff26fef4de5c78d7adb567f956952259183 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -19,7 +19,6 @@ export * from "./constants";
 export * from "./embeddings";
 export * from "./indices";
 export * from "./llm/LLM";
-export * from "./readers/AssemblyAI";
 export * from "./readers/CSVReader";
 export * from "./readers/HTMLReader";
 export * from "./readers/MarkdownReader";
diff --git a/packages/core/src/readers/AssemblyAI.ts b/packages/core/src/readers/AssemblyAI.ts
deleted file mode 100644
index 6eea143bb0c529cb47b2aa4c9572417b975bdf6a..0000000000000000000000000000000000000000
--- a/packages/core/src/readers/AssemblyAI.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import {
-  AssemblyAI,
-  BaseServiceParams,
-  CreateTranscriptParameters,
-  SubtitleFormat,
-  TranscriptParagraph,
-  TranscriptSentence,
-} from "assemblyai";
-import { Document } from "../Node";
-import { BaseReader } from "./base";
-
-type AssemblyAIOptions = Partial<BaseServiceParams>;
-
-/**
- * Base class for AssemblyAI Readers.
- */
-abstract class AssemblyAIReader implements BaseReader {
-  protected client: AssemblyAI;
-
-  /**
-   * Creates a new AssemblyAI Reader.
-   * @param assemblyAIOptions The options to configure the AssemblyAI Reader.
-   * Configure the `assemblyAIOptions.apiKey` with your AssemblyAI API key, or configure it as the `ASSEMBLYAI_API_KEY` environment variable.
-   */
-  constructor(assemblyAIOptions?: AssemblyAIOptions) {
-    let options = assemblyAIOptions;
-    if (!options) {
-      options = {};
-    }
-    if (!options.apiKey) {
-      options.apiKey = process.env.ASSEMBLYAI_API_KEY;
-    }
-    if (!options.apiKey) {
-      throw new Error("No AssemblyAI API key provided. Pass an `apiKey` option, or configure the `ASSEMBLYAI_API_KEY` environment variable.");
-    }
-
-    this.client = new AssemblyAI(options as BaseServiceParams);
-  }
-
-  abstract loadData(...args: any[]): Promise<Document[]>;
-
-  protected async getOrCreateTranscript(params: CreateTranscriptParameters | string) {
-    if (typeof params === "string") {
-      return await this.client.transcripts.get(params);
-    }
-    else {
-      return await this.client.transcripts.create(params);
-    }
-  }
-
-  protected async getTranscriptId(params: CreateTranscriptParameters | string) {
-    if (typeof params === "string") {
-      return params;
-    }
-    else {
-      return (await this.client.transcripts.create(params)).id;
-    }
-  }
-}
-
-/**
- * Creates and reads the transcript as a document using AssemblyAI.
- */
-class AudioTranscriptReader extends AssemblyAIReader {
-  /**
-   * Creates or gets a transcript and loads the transcript as a document using AssemblyAI.
-   * @param params The parameters to create or get the transcript.
-   * @returns A promise that resolves to a single document containing the transcript text.
-   */
-  async loadData(params: CreateTranscriptParameters | string): Promise<Document[]> {
-    const transcript = await this.getOrCreateTranscript(params);
-    return [
-      new Document({ text: transcript.text || undefined }),
-    ];
-  }
-}
-
-/**
- * Creates a transcript and returns a document for each paragraph.
- */
-class AudioTranscriptParagraphsReader extends AssemblyAIReader {
-  /**
-   * Creates or gets a transcript, and returns a document for each paragraph.
-   * @param params The parameters to create or get the transcript.
-   * @returns A promise that resolves to an array of documents, each containing a paragraph of the transcript.
-   */
-  async loadData(params: CreateTranscriptParameters | string): Promise<Document[]> {
-    let transcriptId = await this.getTranscriptId(params);
-    const paragraphsResponse = await this.client.transcripts.paragraphs(
-      transcriptId
-    );
-    return paragraphsResponse.paragraphs.map((p: TranscriptParagraph) =>
-      new Document({ text: p.text }),
-    );
-  }
-}
-
-/**
- * Creates a transcript and returns a document for each sentence.
- */
-class AudioTranscriptSentencesReader extends AssemblyAIReader {
-  /**
-   * Creates or gets a transcript, and returns a document for each sentence.
-   * @param params The parameters to create or get the transcript.
-   * @returns A promise that resolves to an array of documents, each containing a sentence of the transcript.
-   */
-  async loadData(params: CreateTranscriptParameters | string): Promise<Document[]> {
-    let transcriptId = await this.getTranscriptId(params);
-    const sentencesResponse = await this.client.transcripts.sentences(
-      transcriptId
-    );
-    return sentencesResponse.sentences.map((p: TranscriptSentence) =>
-      new Document({ text: p.text }),
-    );
-  }
-}
-
-/**
- * Creates a transcript and reads subtitles for the transcript as `srt` or `vtt` format.
- */
-class AudioSubtitlesReader extends AssemblyAIReader {
-  /**
-   * Creates or gets a transcript and reads subtitles for the transcript as `srt` or `vtt` format.
-   * @param params The parameters to create or get the transcript.
-   * @param subtitleFormat The format of the subtitles, either `srt` or `vtt`.
-   * @returns A promise that resolves a document containing the subtitles as the page content.
-   */
-  async loadData(
-    params: CreateTranscriptParameters | string,
-    subtitleFormat: SubtitleFormat = 'srt'
-  ): Promise<Document[]> {
-    let transcriptId = await this.getTranscriptId(params);
-    const subtitles = await this.client.transcripts.subtitles(transcriptId, subtitleFormat);
-    return [new Document({ text: subtitles })];
-  }
-}
-
-export {
-  AudioTranscriptReader,
-  AudioTranscriptParagraphsReader,
-  AudioTranscriptSentencesReader,
-  AudioSubtitlesReader,
-}
-export type {
-  AssemblyAIOptions,
-  CreateTranscriptParameters,
-  SubtitleFormat
-}
diff --git a/packages/create-llama/templates/components/engines/context/generate.mjs b/packages/create-llama/templates/components/engines/context/generate.mjs
index 8420dd5f81eab52574ec51770cf0e09ccb139563..9334f98e47558b5d451e21143b9eacf5b0287955 100644
--- a/packages/create-llama/templates/components/engines/context/generate.mjs
+++ b/packages/create-llama/templates/components/engines/context/generate.mjs
@@ -5,6 +5,8 @@ import {
   VectorStoreIndex,
 } from "llamaindex";
 
+import * as dotenv from "dotenv";
+
 import {
   CHUNK_OVERLAP,
   CHUNK_SIZE,
@@ -12,6 +14,9 @@ import {
   STORAGE_DIR,
 } from "./constants.mjs";
 
+// Load environment variables from local .env file
+dotenv.config();
+
 async function getRuntime(func) {
   const start = Date.now();
   await func();
diff --git a/packages/create-llama/templates/index.ts b/packages/create-llama/templates/index.ts
index a9f0998eb2315ee1e2166904e548d14db7fb5b00..2c1f8737706d9f58afb7a269d15c743f2f8f2bc3 100644
--- a/packages/create-llama/templates/index.ts
+++ b/packages/create-llama/templates/index.ts
@@ -14,26 +14,14 @@ import {
   TemplateFramework,
 } from "./types";
 
-const envFileNameMap: Record<TemplateFramework, string> = {
-  nextjs: ".env.local",
-  express: ".env",
-  fastapi: ".env",
-};
-
-const createEnvLocalFile = async (
-  root: string,
-  framework: TemplateFramework,
-  openAIKey?: string,
-) => {
+const createEnvLocalFile = async (root: string, openAIKey?: string) => {
   if (openAIKey) {
-    const envFileName = envFileNameMap[framework];
-    if (!envFileName) return;
+    const envFileName = ".env";
     await fs.writeFile(
       path.join(root, envFileName),
       `OPENAI_API_KEY=${openAIKey}\n`,
     );
     console.log(`Created '${envFileName}' file containing OPENAI_API_KEY`);
-    process.env["OPENAI_API_KEY"] = openAIKey;
   }
 };
 
@@ -42,7 +30,16 @@ const copyTestData = async (
   framework: TemplateFramework,
   packageManager?: PackageManager,
   engine?: TemplateEngine,
+  openAIKey?: string,
 ) => {
+  if (framework === "nextjs") {
+    // XXX: This is a hack to make the build for nextjs work with pdf-parse
+    // pdf-parse needs './test/data/05-versions-space.pdf' to exist - can be removed when pdf-parse is removed
+    const srcFile = path.join(__dirname, "components", "data", "101.pdf");
+    const destPath = path.join(root, "test", "data");
+    await fs.mkdir(destPath, { recursive: true });
+    await fs.copyFile(srcFile, path.join(destPath, "05-versions-space.pdf"));
+  }
   if (engine === "context" || framework === "fastapi") {
     const srcPath = path.join(__dirname, "components", "data");
     const destPath = path.join(root, "data");
@@ -54,7 +51,7 @@ const copyTestData = async (
   }
 
   if (packageManager && engine === "context") {
-    if (process.env["OPENAI_API_KEY"]) {
+    if (openAIKey || process.env["OPENAI_API_KEY"]) {
       console.log(
         `\nRunning ${cyan(
           `${packageManager} run generate`,
@@ -226,6 +223,7 @@ const installTSTemplate = async ({
       "tailwind-merge": "^2",
       "@radix-ui/react-slot": "^1",
       "class-variance-authority": "^0.7",
+      clsx: "^1.2.1",
       "lucide-react": "^0.291",
       remark: "^14.0.3",
       "remark-code-import": "^1.2.0",
@@ -313,7 +311,7 @@ export const installTemplate = async (
     // This is a backend, so we need to copy the test data and create the env file.
 
     // Copy the environment file to the target directory.
-    await createEnvLocalFile(props.root, props.framework, props.openAIKey);
+    await createEnvLocalFile(props.root, props.openAIKey);
 
     // Copy test pdf file
     await copyTestData(
@@ -321,6 +319,7 @@ export const installTemplate = async (
       props.framework,
       props.packageManager,
       props.engine,
+      props.openAIKey,
     );
   }
 };
diff --git a/packages/create-llama/templates/types/simple/nextjs/next.config.app.js b/packages/create-llama/templates/types/simple/nextjs/next.config.app.js
index 74655207e206e9efa7215e79ea163e8ae2052361..0ff94969142b0c759dfa75ace8ee4300e8860620 100644
--- a/packages/create-llama/templates/types/simple/nextjs/next.config.app.js
+++ b/packages/create-llama/templates/types/simple/nextjs/next.config.app.js
@@ -1,5 +1,15 @@
 /** @type {import('next').NextConfig} */
 const nextConfig = {
+  webpack: (config) => {
+    // See https://webpack.js.org/configuration/resolve/#resolvealias
+    config.resolve.alias = {
+      ...config.resolve.alias,
+      sharp$: false,
+      "onnxruntime-node$": false,
+      mongodb$: false,
+    };
+    return config;
+  },
   experimental: {
     serverComponentsExternalPackages: ["llamaindex"],
     outputFileTracingIncludes: {
diff --git a/packages/create-llama/templates/types/simple/nextjs/next.config.static.js b/packages/create-llama/templates/types/simple/nextjs/next.config.static.js
index 166b3e67d75ddc6d594b1c3d0960cc51f54b13b9..c5e9ab41f7395aba6fddbfd39ef9c7c776ae9f79 100644
--- a/packages/create-llama/templates/types/simple/nextjs/next.config.static.js
+++ b/packages/create-llama/templates/types/simple/nextjs/next.config.static.js
@@ -2,6 +2,16 @@
 const nextConfig = {
   output: "export",
   images: { unoptimized: true },
+  webpack: (config) => {
+    // See https://webpack.js.org/configuration/resolve/#resolvealias
+    config.resolve.alias = {
+      ...config.resolve.alias,
+      sharp$: false,
+      "onnxruntime-node$": false,
+      mongodb$: false,
+    };
+    return config;
+  },
   experimental: {
     serverComponentsExternalPackages: ["llamaindex"],
     outputFileTracingIncludes: {
diff --git a/packages/create-llama/templates/types/simple/nextjs/package.json b/packages/create-llama/templates/types/simple/nextjs/package.json
index 990b41c832c69b81883c88b2d078c55bef15b42c..5faf066d60bb3256f245b9f1536c9cf58e2fe2f4 100644
--- a/packages/create-llama/templates/types/simple/nextjs/package.json
+++ b/packages/create-llama/templates/types/simple/nextjs/package.json
@@ -9,6 +9,7 @@
   },
   "dependencies": {
     "llamaindex": "0.0.31",
+    "dotenv": "^16.3.1",
     "nanoid": "^5",
     "next": "^13",
     "react": "^18",
@@ -18,11 +19,11 @@
     "@types/node": "^20",
     "@types/react": "^18",
     "@types/react-dom": "^18",
-    "autoprefixer": "^10",
+    "autoprefixer": "^10.1",
     "eslint": "^8",
     "eslint-config-next": "^13",
     "postcss": "^8",
-    "tailwindcss": "^3",
+    "tailwindcss": "^3.3",
     "typescript": "^5"
   }
 }
\ No newline at end of file
diff --git a/packages/create-llama/templates/types/simple/nextjs/tsconfig.json b/packages/create-llama/templates/types/simple/nextjs/tsconfig.json
index c7146963787144d4861e149d8d233049b7daefc7..e779aa667e9e83943147b44d06fa930e9175a2b7 100644
--- a/packages/create-llama/templates/types/simple/nextjs/tsconfig.json
+++ b/packages/create-llama/templates/types/simple/nextjs/tsconfig.json
@@ -1,7 +1,11 @@
 {
   "compilerOptions": {
     "target": "es5",
-    "lib": ["dom", "dom.iterable", "esnext"],
+    "lib": [
+      "dom",
+      "dom.iterable",
+      "esnext"
+    ],
     "allowJs": true,
     "skipLibCheck": true,
     "strict": true,
@@ -19,9 +23,19 @@
       }
     ],
     "paths": {
-      "@/*": ["./*"]
-    }
+      "@/*": [
+        "./*"
+      ]
+    },
+    "forceConsistentCasingInFileNames": true,
   },
-  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
-  "exclude": ["node_modules"]
-}
+  "include": [
+    "next-env.d.ts",
+    "**/*.ts",
+    "**/*.tsx",
+    ".next/types/**/*.ts"
+  ],
+  "exclude": [
+    "node_modules"
+  ]
+}
\ No newline at end of file
diff --git a/packages/create-llama/templates/types/streaming/express/README-template.md b/packages/create-llama/templates/types/streaming/express/README-template.md
index 7ea94ab755535aefd4d5edc9f20a5908d7fedead..0e9d796106725e9d9ebaa653fa5471e807ee1760 100644
--- a/packages/create-llama/templates/types/streaming/express/README-template.md
+++ b/packages/create-llama/templates/types/streaming/express/README-template.md
@@ -18,7 +18,7 @@ Then call the express API endpoint `/api/chat` to see the result:
 
 ```
 curl --location 'localhost:8000/api/chat' \
---header 'Content-Type: application/json' \
+--header 'Content-Type: text/plain' \
 --data '{ "messages": [{ "role": "user", "content": "Hello" }] }'
 ```
 
diff --git a/packages/create-llama/templates/types/streaming/express/package.json b/packages/create-llama/templates/types/streaming/express/package.json
index 72f127b407a8c7ce675bf4d634a42f57af78bb4c..6af064a8b6915055d556271119335ee341cec65f 100644
--- a/packages/create-llama/templates/types/streaming/express/package.json
+++ b/packages/create-llama/templates/types/streaming/express/package.json
@@ -9,7 +9,7 @@
     "dev": "concurrently \"tsup index.ts --format esm --dts --watch\" \"nodemon -q dist/index.js\""
   },
   "dependencies": {
-    "ai": "^2",
+    "ai": "^2.2.5",
     "cors": "^2.8.5",
     "dotenv": "^16.3.1",
     "express": "^4",
@@ -25,4 +25,4 @@
     "tsup": "^7",
     "typescript": "^5"
   }
-}
+}
\ No newline at end of file
diff --git a/packages/create-llama/templates/types/streaming/nextjs/next.config.app.js b/packages/create-llama/templates/types/streaming/nextjs/next.config.app.js
index 74655207e206e9efa7215e79ea163e8ae2052361..0ff94969142b0c759dfa75ace8ee4300e8860620 100644
--- a/packages/create-llama/templates/types/streaming/nextjs/next.config.app.js
+++ b/packages/create-llama/templates/types/streaming/nextjs/next.config.app.js
@@ -1,5 +1,15 @@
 /** @type {import('next').NextConfig} */
 const nextConfig = {
+  webpack: (config) => {
+    // See https://webpack.js.org/configuration/resolve/#resolvealias
+    config.resolve.alias = {
+      ...config.resolve.alias,
+      sharp$: false,
+      "onnxruntime-node$": false,
+      mongodb$: false,
+    };
+    return config;
+  },
   experimental: {
     serverComponentsExternalPackages: ["llamaindex"],
     outputFileTracingIncludes: {
diff --git a/packages/create-llama/templates/types/streaming/nextjs/next.config.static.js b/packages/create-llama/templates/types/streaming/nextjs/next.config.static.js
index 166b3e67d75ddc6d594b1c3d0960cc51f54b13b9..c5e9ab41f7395aba6fddbfd39ef9c7c776ae9f79 100644
--- a/packages/create-llama/templates/types/streaming/nextjs/next.config.static.js
+++ b/packages/create-llama/templates/types/streaming/nextjs/next.config.static.js
@@ -2,6 +2,16 @@
 const nextConfig = {
   output: "export",
   images: { unoptimized: true },
+  webpack: (config) => {
+    // See https://webpack.js.org/configuration/resolve/#resolvealias
+    config.resolve.alias = {
+      ...config.resolve.alias,
+      sharp$: false,
+      "onnxruntime-node$": false,
+      mongodb$: false,
+    };
+    return config;
+  },
   experimental: {
     serverComponentsExternalPackages: ["llamaindex"],
     outputFileTracingIncludes: {
diff --git a/packages/create-llama/templates/types/streaming/nextjs/package.json b/packages/create-llama/templates/types/streaming/nextjs/package.json
index e9f23201d893320cfdfcbd3fbac9ad48ebbb8d7c..fc5e483e074b76b101f6089ee7850a57530ea3f4 100644
--- a/packages/create-llama/templates/types/streaming/nextjs/package.json
+++ b/packages/create-llama/templates/types/streaming/nextjs/package.json
@@ -8,8 +8,9 @@
     "lint": "next lint"
   },
   "dependencies": {
-    "ai": "^2",
+    "ai": "^2.2.5",
     "llamaindex": "0.0.31",
+    "dotenv": "^16.3.1",
     "next": "^13",
     "react": "^18",
     "react-dom": "^18"
@@ -18,11 +19,11 @@
     "@types/node": "^20",
     "@types/react": "^18",
     "@types/react-dom": "^18",
-    "autoprefixer": "^10",
+    "autoprefixer": "^10.1",
     "eslint": "^8",
     "eslint-config-next": "^13",
     "postcss": "^8",
-    "tailwindcss": "^3",
+    "tailwindcss": "^3.3",
     "typescript": "^5"
   }
 }
\ No newline at end of file
diff --git a/packages/create-llama/templates/types/streaming/nextjs/tsconfig.json b/packages/create-llama/templates/types/streaming/nextjs/tsconfig.json
index c7146963787144d4861e149d8d233049b7daefc7..e779aa667e9e83943147b44d06fa930e9175a2b7 100644
--- a/packages/create-llama/templates/types/streaming/nextjs/tsconfig.json
+++ b/packages/create-llama/templates/types/streaming/nextjs/tsconfig.json
@@ -1,7 +1,11 @@
 {
   "compilerOptions": {
     "target": "es5",
-    "lib": ["dom", "dom.iterable", "esnext"],
+    "lib": [
+      "dom",
+      "dom.iterable",
+      "esnext"
+    ],
     "allowJs": true,
     "skipLibCheck": true,
     "strict": true,
@@ -19,9 +23,19 @@
       }
     ],
     "paths": {
-      "@/*": ["./*"]
-    }
+      "@/*": [
+        "./*"
+      ]
+    },
+    "forceConsistentCasingInFileNames": true,
   },
-  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
-  "exclude": ["node_modules"]
-}
+  "include": [
+    "next-env.d.ts",
+    "**/*.ts",
+    "**/*.tsx",
+    ".next/types/**/*.ts"
+  ],
+  "exclude": [
+    "node_modules"
+  ]
+}
\ No newline at end of file
diff --git a/packages/eslint-config-custom/index.js b/packages/eslint-config-custom/index.js
index 8417c5e6d90aef30254fec90a19fbb1d347ed4f1..142321257509d7748ce9de170d9cae31406ba968 100644
--- a/packages/eslint-config-custom/index.js
+++ b/packages/eslint-config-custom/index.js
@@ -9,7 +9,6 @@ module.exports = {
           "OPENAI_API_KEY",
           "REPLICATE_API_TOKEN",
           "ANTHROPIC_API_KEY",
-          "ASSEMBLYAI_API_KEY",
 
           "AZURE_OPENAI_KEY",
           "AZURE_OPENAI_ENDPOINT",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7b8fa48c4e4b4ce819d245eb0e2a17ebdb617073..3bdf8e4f5a3459f6fcaba09136e0b4074f5d215d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -156,9 +156,6 @@ importers:
       '@xenova/transformers':
         specifier: ^2.8.0
         version: 2.8.0
-      assemblyai:
-        specifier: ^3.0.1
-        version: 3.1.1
       crypto-js:
         specifier: ^4.2.0
         version: 4.2.0
@@ -5203,15 +5200,6 @@ packages:
       safer-buffer: 2.1.2
     dev: true
 
-  /assemblyai@3.1.1:
-    resolution: {integrity: sha512-rEhLnIZU7TupOkdzN9WjxhVU5bxMVofkNslzTArsuilaqOusPUmh6I7SGcJCGwKKE8qEweBaoY4DZ03cxv4KoA==}
-    dependencies:
-      ws: 8.14.2
-    transitivePeerDependencies:
-      - bufferutil
-      - utf-8-validate
-    dev: false
-
   /assert@2.1.0:
     resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==}
     dependencies: