diff --git a/.changeset/four-tools-buy.md b/.changeset/four-tools-buy.md
new file mode 100644
index 0000000000000000000000000000000000000000..ce132ccb094e0973e6fdbc77f0aecbb4b1620216
--- /dev/null
+++ b/.changeset/four-tools-buy.md
@@ -0,0 +1,5 @@
+---
+"create-llama": patch
+---
+
+Use poetry run generate to generate embeddings for FastAPI
diff --git a/README.md b/README.md
index 81a8eb88975f0606f50cba525e02fc4bad3fe7de..e9228b3baef77d4a7a78819c587c4fb97d65c58d 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ Then re-start your app. Remember you'll need to re-run `generate` if you add new
 If you're using the Python backend, you can trigger indexing of your data by calling:
 
 ```bash
-poetry run python app/engine/generate.py
+poetry run generate
 ```
 
 ## Want a front-end?
diff --git a/helpers/index.ts b/helpers/index.ts
index 8b2fead76059271d43300336c05b77eb58dccacb..8c990facbbfa2dadcc71846375092136897b143e 100644
--- a/helpers/index.ts
+++ b/helpers/index.ts
@@ -33,7 +33,7 @@ async function generateContextData(
   if (packageManager) {
     const runGenerate = `${cyan(
       framework === "fastapi"
-        ? "poetry run python app/engine/generate.py"
+        ? "poetry run generate"
         : `${packageManager} run generate`,
     )}`;
     const openAiKeyConfigured = openAiKey || process.env["OPENAI_API_KEY"];
@@ -46,7 +46,7 @@ async function generateContextData(
       if (framework === "fastapi") {
         if (isHavingPoetryLockFile()) {
           console.log(`Running ${runGenerate} to generate the context data.`);
-          const result = tryPoetryRun("python app/engine/generate.py");
+          const result = tryPoetryRun("poetry run generate");
           if (!result) {
             console.log(`Failed to run ${runGenerate}.`);
             process.exit(1);
diff --git a/helpers/typescript.ts b/helpers/typescript.ts
index db159a3f2d4131d2b406a5fa89942303991dd85c..e9553371524d1b7391749964ef7b6001a4404733 100644
--- a/helpers/typescript.ts
+++ b/helpers/typescript.ts
@@ -200,7 +200,7 @@ async function updatePackageJson({
   packageJson.name = appName;
   packageJson.version = "0.1.0";
 
-  if (dataSources.length > 0 && relativeEngineDestPath) {
+  if (relativeEngineDestPath) {
     // TODO: move script to {root}/scripts for all frameworks
     // add generate script if using context engine
     packageJson.scripts = {
diff --git a/templates/components/engines/python/chat/__init__.py b/templates/components/engines/python/chat/__init__.py
index da1c3cdd3603821143ce8f786229b5e9377f4c51..cec9725632a1b2199ed729a1aa950bf770e3bbad 100644
--- a/templates/components/engines/python/chat/__init__.py
+++ b/templates/components/engines/python/chat/__init__.py
@@ -9,7 +9,7 @@ def get_chat_engine():
     index = get_index()
     if index is None:
         raise Exception(
-            "StorageContext is empty - call 'python app/engine/generate.py' to generate the storage first"
+            "StorageContext is empty - call 'poetry run generate' to generate the storage first"
         )
 
     return index.as_chat_engine(
diff --git a/templates/components/vectordbs/python/astra/generate.py b/templates/components/vectordbs/python/astra/generate.py
index 50f11d68b07b3726010c2c2fe62517d5e609fdf1..4d2a54af9685ae16f54d61ad5316c162ad6239bd 100644
--- a/templates/components/vectordbs/python/astra/generate.py
+++ b/templates/components/vectordbs/python/astra/generate.py
@@ -15,6 +15,7 @@ logger = logging.getLogger()
 
 
 def generate_datasource():
+    init_settings()
     logger.info("Creating new index")
     documents = get_documents()
     store = AstraDBVectorStore(
@@ -33,5 +34,4 @@ def generate_datasource():
 
 
 if __name__ == "__main__":
-    init_settings()
     generate_datasource()
diff --git a/templates/components/vectordbs/python/milvus/generate.py b/templates/components/vectordbs/python/milvus/generate.py
index 9e674a7dbe4af2450c4d268b7553d494bc6597be..b5bfc9f910819a0468bb6a29ce11b7ee6aa10d02 100644
--- a/templates/components/vectordbs/python/milvus/generate.py
+++ b/templates/components/vectordbs/python/milvus/generate.py
@@ -15,6 +15,7 @@ logger = logging.getLogger()
 
 
 def generate_datasource():
+    init_settings()
     logger.info("Creating new index")
     # load the documents and create the index
     documents = get_documents()
@@ -35,5 +36,4 @@ def generate_datasource():
 
 
 if __name__ == "__main__":
-    init_settings()
     generate_datasource()
diff --git a/templates/components/vectordbs/python/mongo/generate.py b/templates/components/vectordbs/python/mongo/generate.py
index ddc32c5adc2802e5a8348239bfe36c460c5546fe..abe844c03b7e210e1991fca2056d1bd44d4797a0 100644
--- a/templates/components/vectordbs/python/mongo/generate.py
+++ b/templates/components/vectordbs/python/mongo/generate.py
@@ -15,6 +15,7 @@ logger = logging.getLogger()
 
 
 def generate_datasource():
+    init_settings()
     logger.info("Creating new index")
     # load the documents and create the index
     documents = get_documents()
@@ -39,5 +40,4 @@ See https://github.com/run-llama/mongodb-demo/tree/main?tab=readme-ov-file#creat
 
 
 if __name__ == "__main__":
-    init_settings()
     generate_datasource()
diff --git a/templates/components/vectordbs/python/none/generate.py b/templates/components/vectordbs/python/none/generate.py
index 78fe57be3bf6ab7ed0c9e02780385acd1481cca6..e38d89cb81035ff1a3c3cf627add6e569c589b9f 100644
--- a/templates/components/vectordbs/python/none/generate.py
+++ b/templates/components/vectordbs/python/none/generate.py
@@ -16,6 +16,7 @@ logger = logging.getLogger()
 
 
 def generate_datasource():
+    init_settings()
     logger.info("Creating new index")
     # load the documents and create the index
     documents = get_documents()
@@ -28,5 +29,4 @@ def generate_datasource():
 
 
 if __name__ == "__main__":
-    init_settings()
     generate_datasource()
diff --git a/templates/components/vectordbs/python/pg/generate.py b/templates/components/vectordbs/python/pg/generate.py
index 5cc9324498b3fd205279ae3438f961ebac0317da..79fa3bd7345fb1bda984947a4449403e1becd23d 100644
--- a/templates/components/vectordbs/python/pg/generate.py
+++ b/templates/components/vectordbs/python/pg/generate.py
@@ -15,6 +15,7 @@ logger = logging.getLogger()
 
 
 def generate_datasource():
+    init_settings()
     logger.info("Creating new index")
     # load the documents and create the index
     documents = get_documents()
@@ -31,5 +32,4 @@ def generate_datasource():
 
 
 if __name__ == "__main__":
-    init_settings()
     generate_datasource()
diff --git a/templates/components/vectordbs/python/pinecone/generate.py b/templates/components/vectordbs/python/pinecone/generate.py
index c7ad55ea83f53f16afe932c23a25c15cff75ce15..5f233ba235f40917b9b1dbc3b7c581802ec2f793 100644
--- a/templates/components/vectordbs/python/pinecone/generate.py
+++ b/templates/components/vectordbs/python/pinecone/generate.py
@@ -15,6 +15,7 @@ logger = logging.getLogger()
 
 
 def generate_datasource():
+    init_settings()
     logger.info("Creating new index")
     # load the documents and create the index
     documents = get_documents()
@@ -35,5 +36,4 @@ def generate_datasource():
 
 
 if __name__ == "__main__":
-    init_settings()
     generate_datasource()
diff --git a/templates/types/streaming/fastapi/README-template.md b/templates/types/streaming/fastapi/README-template.md
index 2ea07212556b48fd1ea27a5dfdd0a130f434b09b..6af9712b4a01c7a8a46f748ad70615adeace5ddb 100644
--- a/templates/types/streaming/fastapi/README-template.md
+++ b/templates/types/streaming/fastapi/README-template.md
@@ -24,7 +24,7 @@ If you are using any tools or data sources, you can update their config files in
 Second, generate the embeddings of the documents in the `./data` directory (if this folder exists - otherwise, skip this step):
 
 ```
-python app/engine/generate.py
+poetry run generate
 ```
 
 Third, run the development server:
@@ -84,7 +84,7 @@ docker run \
   -v $(pwd)/data:/app/data \ # Use your local folder to read the data
   -v $(pwd)/storage:/app/storage \ # Use your file system to store the vector database
   <your_backend_image_name> \
-  python app/engine/generate.py
+  poetry run generate
 ```
 
 3. Start the API:
diff --git a/templates/types/streaming/fastapi/pyproject.toml b/templates/types/streaming/fastapi/pyproject.toml
index 5dae9d818b5afd85cab75d35379ae2a56dd72cea..8c087f734ea6ddd49644c4e3f77b0f9ee2c18de5 100644
--- a/templates/types/streaming/fastapi/pyproject.toml
+++ b/templates/types/streaming/fastapi/pyproject.toml
@@ -5,6 +5,9 @@ description = ""
 authors = ["Marcus Schiesser <mail@marcusschiesser.de>"]
 readme = "README.md"
 
+[tool.poetry.scripts]
+generate = "app.engine.generate:generate_datasource"
+
 [tool.poetry.dependencies]
 python = "^3.11,<3.12"
 fastapi = "^0.109.1"