From 8527875f0a27dc9618e81141b9658f07890646c5 Mon Sep 17 00:00:00 2001
From: Marcus Schiesser <mail@marcusschiesser.de>
Date: Fri, 27 Oct 2023 17:00:55 +0700
Subject: [PATCH] added support for generating streaming template

---
 packages/create-llama/create-app.ts      |  4 ++--
 packages/create-llama/index.ts           | 29 ++++++++++++++++++++++++
 packages/create-llama/templates/types.ts |  2 +-
 3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/packages/create-llama/create-app.ts b/packages/create-llama/create-app.ts
index 901723640..29e2d837f 100644
--- a/packages/create-llama/create-app.ts
+++ b/packages/create-llama/create-app.ts
@@ -12,18 +12,18 @@ import type { TemplateFramework, TemplateType } from "./templates";
 import { installTemplate } from "./templates";
 
 export async function createApp({
+  template,
   framework,
   appPath,
   packageManager,
   eslint,
 }: {
+  template: TemplateType;
   framework: TemplateFramework;
   appPath: string;
   packageManager: PackageManager;
   eslint: boolean;
 }): Promise<void> {
-  const template: TemplateType = "simple";
-
   const root = path.resolve(appPath);
 
   if (!(await isWriteable(path.dirname(root)))) {
diff --git a/packages/create-llama/index.ts b/packages/create-llama/index.ts
index 21eda3b7a..ad53b6d43 100644
--- a/packages/create-llama/index.ts
+++ b/packages/create-llama/index.ts
@@ -177,12 +177,40 @@ async function run(): Promise<void> {
   >;
 
   const defaults: typeof preferences = {
+    template: "simple",
     framework: "nextjs",
     eslint: true,
   };
   const getPrefOrDefault = (field: string) =>
     preferences[field] ?? defaults[field];
 
+  if (!program.template) {
+    if (ciInfo.isCI) {
+      program.template = getPrefOrDefault("template");
+    } else {
+      const { template } = await prompts(
+        {
+          type: "select",
+          name: "template",
+          message: "Which template would you like to use?",
+          choices: [
+            { title: "Simple chat without streaming", value: "simple" },
+            { title: "Simple chat with streaming", value: "streaming" },
+          ],
+          initial: 0,
+        },
+        {
+          onCancel: () => {
+            console.error("Exiting.");
+            process.exit(1);
+          },
+        },
+      );
+      program.template = template;
+      preferences.template = template;
+    }
+  }
+
   if (!program.framework) {
     if (ciInfo.isCI) {
       program.framework = getPrefOrDefault("framework");
@@ -233,6 +261,7 @@ async function run(): Promise<void> {
   }
 
   await createApp({
+    template: program.template,
     framework: program.framework,
     appPath: resolvedProjectPath,
     packageManager,
diff --git a/packages/create-llama/templates/types.ts b/packages/create-llama/templates/types.ts
index 087731013..284785689 100644
--- a/packages/create-llama/templates/types.ts
+++ b/packages/create-llama/templates/types.ts
@@ -1,6 +1,6 @@
 import { PackageManager } from "../helpers/get-pkg-manager";
 
-export type TemplateType = "simple";
+export type TemplateType = "simple" | "streaming";
 export type TemplateFramework = "nextjs" | "express";
 
 export interface InstallTemplateArgs {
-- 
GitLab