From 587960aebebd45cf78df2cd23676baa529726d40 Mon Sep 17 00:00:00 2001
From: Marcus Schiesser <mail@marcusschiesser.de>
Date: Thu, 23 Nov 2023 15:55:47 +0700
Subject: [PATCH] fix: use dotenv for npm run generate, use `.env` for NextJS,
 fix package versions for pnpm

---
 .../components/engines/context/generate.mjs   |  5 +++++
 packages/create-llama/templates/index.ts      | 22 +++++--------------
 .../types/simple/nextjs/package.json          |  5 +++--
 .../types/streaming/express/package.json      |  4 ++--
 .../types/streaming/nextjs/package.json       |  7 +++---
 5 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/packages/create-llama/templates/components/engines/context/generate.mjs b/packages/create-llama/templates/components/engines/context/generate.mjs
index 8420dd5f8..9334f98e4 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 a9f0998eb..2cc8307d2 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,6 +30,7 @@ const copyTestData = async (
   framework: TemplateFramework,
   packageManager?: PackageManager,
   engine?: TemplateEngine,
+  openAIKey?: string,
 ) => {
   if (engine === "context" || framework === "fastapi") {
     const srcPath = path.join(__dirname, "components", "data");
@@ -54,7 +43,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`,
@@ -313,7 +302,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 +310,7 @@ export const installTemplate = async (
       props.framework,
       props.packageManager,
       props.engine,
+      props.openAIKey,
     );
   }
 };
diff --git a/packages/create-llama/templates/types/simple/nextjs/package.json b/packages/create-llama/templates/types/simple/nextjs/package.json
index 990b41c83..5faf066d6 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/streaming/express/package.json b/packages/create-llama/templates/types/streaming/express/package.json
index 72f127b40..6af064a8b 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/package.json b/packages/create-llama/templates/types/streaming/nextjs/package.json
index e9f23201d..fc5e483e0 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
-- 
GitLab