diff --git a/templates/components/engines/typescript/agent/chat.ts b/templates/components/engines/typescript/agent/chat.ts index 51a61ba0613830f1a6744ef5a96ac244833b328c..9c82dbabc74526a6a7232a58cf56ebcd2feee902 100644 --- a/templates/components/engines/typescript/agent/chat.ts +++ b/templates/components/engines/typescript/agent/chat.ts @@ -1,8 +1,8 @@ import { BaseTool, - OpenAI, OpenAIAgent, QueryEngineTool, + Settings, ToolFactory, } from "llamaindex"; import fs from "node:fs/promises"; @@ -10,12 +10,12 @@ import path from "node:path"; import { getDataSource } from "./index"; import { STORAGE_CACHE_DIR } from "./shared"; -export async function createChatEngine(llm: OpenAI) { +export async function createChatEngine() { let tools: BaseTool[] = []; // Add a query engine tool if we have a data source // Delete this code if you don't have a data source - const index = await getDataSource(llm); + const index = await getDataSource(); if (index) { tools.push( new QueryEngineTool({ @@ -38,7 +38,7 @@ export async function createChatEngine(llm: OpenAI) { return new OpenAIAgent({ tools, - llm, + llm: Settings.llm, verbose: true, }); } diff --git a/templates/components/engines/typescript/chat/chat.ts b/templates/components/engines/typescript/chat/chat.ts index 2feea01be85f29a5a670f2392431d0997fede43f..62cc77df080546cab14c4bbc7ec48ab892b3a89f 100644 --- a/templates/components/engines/typescript/chat/chat.ts +++ b/templates/components/engines/typescript/chat/chat.ts @@ -1,8 +1,8 @@ -import { ContextChatEngine, LLM } from "llamaindex"; +import { ContextChatEngine, Settings } from "llamaindex"; import { getDataSource } from "./index"; -export async function createChatEngine(llm: LLM) { - const index = await getDataSource(llm); +export async function createChatEngine() { + const index = await getDataSource(); if (!index) { throw new Error( `StorageContext is empty - call 'npm run generate' to generate the storage first`, @@ -12,7 +12,7 @@ export async function createChatEngine(llm: LLM) { retriever.similarityTopK = 3; return new ContextChatEngine({ - chatModel: llm, + chatModel: Settings.llm, retriever, }); } diff --git a/templates/components/vectordbs/typescript/astra/generate.ts b/templates/components/vectordbs/typescript/astra/generate.ts index ca13f51e7bd8ef33da34025e499be3b21f95f680..c29e390ca83ea06fcec18682ed402358f98724e0 100644 --- a/templates/components/vectordbs/typescript/astra/generate.ts +++ b/templates/components/vectordbs/typescript/astra/generate.ts @@ -6,6 +6,7 @@ import { storageContextFromDefaults, } from "llamaindex"; import { getDocuments } from "./loader"; +import { initSettings } from "./settings"; import { checkRequiredEnvVars } from "./shared"; dotenv.config(); @@ -33,6 +34,7 @@ async function loadAndIndex() { (async () => { checkRequiredEnvVars(); + initSettings(); await loadAndIndex(); console.log("Finished generating storage."); })(); diff --git a/templates/components/vectordbs/typescript/astra/index.ts b/templates/components/vectordbs/typescript/astra/index.ts index d1ac6c11d69baefcab54087eee45b67006474bdc..c659bc92598b0d2bc2bd6a752ded20c035ceeeeb 100644 --- a/templates/components/vectordbs/typescript/astra/index.ts +++ b/templates/components/vectordbs/typescript/astra/index.ts @@ -1,20 +1,10 @@ /* eslint-disable turbo/no-undeclared-env-vars */ -import { - AstraDBVectorStore, - LLM, - VectorStoreIndex, - serviceContextFromDefaults, -} from "llamaindex"; -import { CHUNK_OVERLAP, CHUNK_SIZE, checkRequiredEnvVars } from "./shared"; +import { AstraDBVectorStore, VectorStoreIndex } from "llamaindex"; +import { checkRequiredEnvVars } from "./shared"; -export async function getDataSource(llm: LLM) { +export async function getDataSource() { checkRequiredEnvVars(); - const serviceContext = serviceContextFromDefaults({ - llm, - chunkSize: CHUNK_SIZE, - chunkOverlap: CHUNK_OVERLAP, - }); const store = new AstraDBVectorStore(); await store.connect(process.env.ASTRA_DB_COLLECTION!); - return await VectorStoreIndex.fromVectorStore(store, serviceContext); + return await VectorStoreIndex.fromVectorStore(store); } diff --git a/templates/components/vectordbs/typescript/astra/shared.ts b/templates/components/vectordbs/typescript/astra/shared.ts index fb240187a3a0b58c89e79b0e3eb15f474093cf30..d923d1b2befdd5842333111e9898eb365f552457 100644 --- a/templates/components/vectordbs/typescript/astra/shared.ts +++ b/templates/components/vectordbs/typescript/astra/shared.ts @@ -1,6 +1,3 @@ -export const CHUNK_SIZE = 512; -export const CHUNK_OVERLAP = 20; - const REQUIRED_ENV_VARS = [ "ASTRA_DB_APPLICATION_TOKEN", "ASTRA_DB_ENDPOINT", diff --git a/templates/components/vectordbs/typescript/milvus/generate.ts b/templates/components/vectordbs/typescript/milvus/generate.ts index bb2a33cfcccc2d6ad758b84603937fdfb9adefb5..709d35467305a064ce5bd9cca099b218f07394c5 100644 --- a/templates/components/vectordbs/typescript/milvus/generate.ts +++ b/templates/components/vectordbs/typescript/milvus/generate.ts @@ -6,6 +6,7 @@ import { storageContextFromDefaults, } from "llamaindex"; import { getDocuments } from "./loader"; +import { initSettings } from "./settings"; import { checkRequiredEnvVars, getMilvusClient } from "./shared"; dotenv.config(); @@ -32,6 +33,7 @@ async function loadAndIndex() { (async () => { checkRequiredEnvVars(); + initSettings(); await loadAndIndex(); console.log("Finished generating storage."); })(); diff --git a/templates/components/vectordbs/typescript/milvus/index.ts b/templates/components/vectordbs/typescript/milvus/index.ts index 05652b3065877771c5b08e42a49dbbda203ba238..c10bad6d1707aad6ed63df7a254848ddc7b42200 100644 --- a/templates/components/vectordbs/typescript/milvus/index.ts +++ b/templates/components/vectordbs/typescript/milvus/index.ts @@ -1,25 +1,10 @@ -import { - LLM, - MilvusVectorStore, - serviceContextFromDefaults, - VectorStoreIndex, -} from "llamaindex"; -import { - checkRequiredEnvVars, - CHUNK_OVERLAP, - CHUNK_SIZE, - getMilvusClient, -} from "./shared"; +import { MilvusVectorStore, VectorStoreIndex } from "llamaindex"; +import { checkRequiredEnvVars, getMilvusClient } from "./shared"; -export async function getDataSource(llm: LLM) { +export async function getDataSource() { checkRequiredEnvVars(); - const serviceContext = serviceContextFromDefaults({ - llm, - chunkSize: CHUNK_SIZE, - chunkOverlap: CHUNK_OVERLAP, - }); const milvusClient = getMilvusClient(); const store = new MilvusVectorStore({ milvusClient }); - return await VectorStoreIndex.fromVectorStore(store, serviceContext); + return await VectorStoreIndex.fromVectorStore(store); } diff --git a/templates/components/vectordbs/typescript/milvus/shared.ts b/templates/components/vectordbs/typescript/milvus/shared.ts index 5cdb356b157e4c019594c497559f29e8cae8ebf3..5f4139aa32e95066df8e9a60bab1c1999e83aff5 100644 --- a/templates/components/vectordbs/typescript/milvus/shared.ts +++ b/templates/components/vectordbs/typescript/milvus/shared.ts @@ -1,8 +1,5 @@ import { MilvusClient } from "@zilliz/milvus2-sdk-node"; -export const CHUNK_SIZE = 512; -export const CHUNK_OVERLAP = 20; - const REQUIRED_ENV_VARS = [ "MILVUS_ADDRESS", "MILVUS_USERNAME", diff --git a/templates/components/vectordbs/typescript/mongo/generate.ts b/templates/components/vectordbs/typescript/mongo/generate.ts index abfd0a6e90c7553997def49054de698e2e60b34f..da7aed57cdd9844bdbcdf41b63682effbfa5802d 100644 --- a/templates/components/vectordbs/typescript/mongo/generate.ts +++ b/templates/components/vectordbs/typescript/mongo/generate.ts @@ -7,6 +7,7 @@ import { } from "llamaindex"; import { MongoClient } from "mongodb"; import { getDocuments } from "./loader"; +import { initSettings } from "./settings"; import { checkRequiredEnvVars } from "./shared"; dotenv.config(); @@ -42,6 +43,7 @@ async function loadAndIndex() { (async () => { checkRequiredEnvVars(); + initSettings(); await loadAndIndex(); console.log("Finished generating storage."); })(); diff --git a/templates/components/vectordbs/typescript/mongo/index.ts b/templates/components/vectordbs/typescript/mongo/index.ts index ea2a3962879321a2e8fa8820f374d100825d748a..77dc7b4ddc22765a6d6f976dc37b92669a21b917 100644 --- a/templates/components/vectordbs/typescript/mongo/index.ts +++ b/templates/components/vectordbs/typescript/mongo/index.ts @@ -1,21 +1,11 @@ /* eslint-disable turbo/no-undeclared-env-vars */ -import { - LLM, - MongoDBAtlasVectorSearch, - serviceContextFromDefaults, - VectorStoreIndex, -} from "llamaindex"; +import { MongoDBAtlasVectorSearch, VectorStoreIndex } from "llamaindex"; import { MongoClient } from "mongodb"; -import { checkRequiredEnvVars, CHUNK_OVERLAP, CHUNK_SIZE } from "./shared"; +import { checkRequiredEnvVars } from "./shared"; -export async function getDataSource(llm: LLM) { +export async function getDataSource() { checkRequiredEnvVars(); const client = new MongoClient(process.env.MONGO_URI!); - const serviceContext = serviceContextFromDefaults({ - llm, - chunkSize: CHUNK_SIZE, - chunkOverlap: CHUNK_OVERLAP, - }); const store = new MongoDBAtlasVectorSearch({ mongodbClient: client, dbName: process.env.MONGODB_DATABASE!, @@ -23,5 +13,5 @@ export async function getDataSource(llm: LLM) { indexName: process.env.MONGODB_VECTOR_INDEX, }); - return await VectorStoreIndex.fromVectorStore(store, serviceContext); + return await VectorStoreIndex.fromVectorStore(store); } diff --git a/templates/components/vectordbs/typescript/mongo/shared.ts b/templates/components/vectordbs/typescript/mongo/shared.ts index ab46718271fc8e73963740d4b79f58deafda22cb..d6532a566ccc7618f545878084329ef5d8f29518 100644 --- a/templates/components/vectordbs/typescript/mongo/shared.ts +++ b/templates/components/vectordbs/typescript/mongo/shared.ts @@ -1,6 +1,3 @@ -export const CHUNK_SIZE = 512; -export const CHUNK_OVERLAP = 20; - const REQUIRED_ENV_VARS = [ "MONGO_URI", "MONGODB_DATABASE", diff --git a/templates/components/vectordbs/typescript/none/generate.ts b/templates/components/vectordbs/typescript/none/generate.ts index 2773fbeff639b4bc8b50c1c6a5333b34862efb53..732ba21129c8aab1dc7de78df2e03df54092a791 100644 --- a/templates/components/vectordbs/typescript/none/generate.ts +++ b/templates/components/vectordbs/typescript/none/generate.ts @@ -1,14 +1,10 @@ -import { - ServiceContext, - serviceContextFromDefaults, - storageContextFromDefaults, - VectorStoreIndex, -} from "llamaindex"; +import { VectorStoreIndex, storageContextFromDefaults } from "llamaindex"; import * as dotenv from "dotenv"; import { getDocuments } from "./loader"; -import { CHUNK_OVERLAP, CHUNK_SIZE, STORAGE_CACHE_DIR } from "./shared"; +import { initSettings } from "./settings"; +import { STORAGE_CACHE_DIR } from "./shared"; // Load environment variables from local .env file dotenv.config(); @@ -20,7 +16,7 @@ async function getRuntime(func: any) { return end - start; } -async function generateDatasource(serviceContext: ServiceContext) { +async function generateDatasource() { console.log(`Generating storage context...`); // Split documents, create embeddings and store them in the storage context const ms = await getRuntime(async () => { @@ -30,18 +26,13 @@ async function generateDatasource(serviceContext: ServiceContext) { const documents = await getDocuments(); await VectorStoreIndex.fromDocuments(documents, { storageContext, - serviceContext, }); }); console.log(`Storage context successfully generated in ${ms / 1000}s.`); } (async () => { - const serviceContext = serviceContextFromDefaults({ - chunkSize: CHUNK_SIZE, - chunkOverlap: CHUNK_OVERLAP, - }); - - await generateDatasource(serviceContext); + initSettings(); + await generateDatasource(); console.log("Finished generating storage."); })(); diff --git a/templates/components/vectordbs/typescript/none/index.ts b/templates/components/vectordbs/typescript/none/index.ts index 474d7e95a3476d2deffd864d52b50b71b62c9bad..919ba3a615b454dbcc9230f00dcff57e69fd33ec 100644 --- a/templates/components/vectordbs/typescript/none/index.ts +++ b/templates/components/vectordbs/typescript/none/index.ts @@ -1,18 +1,11 @@ import { - LLM, - serviceContextFromDefaults, SimpleDocumentStore, storageContextFromDefaults, VectorStoreIndex, } from "llamaindex"; -import { CHUNK_OVERLAP, CHUNK_SIZE, STORAGE_CACHE_DIR } from "./shared"; +import { STORAGE_CACHE_DIR } from "./shared"; -export async function getDataSource(llm: LLM) { - const serviceContext = serviceContextFromDefaults({ - llm, - chunkSize: CHUNK_SIZE, - chunkOverlap: CHUNK_OVERLAP, - }); +export async function getDataSource() { const storageContext = await storageContextFromDefaults({ persistDir: `${STORAGE_CACHE_DIR}`, }); @@ -25,6 +18,5 @@ export async function getDataSource(llm: LLM) { } return await VectorStoreIndex.init({ storageContext, - serviceContext, }); } diff --git a/templates/components/vectordbs/typescript/none/shared.ts b/templates/components/vectordbs/typescript/none/shared.ts index 42a8664afed8aa72f0fa1e159f856eacdc193bf5..e7736e5b3f830112d7619a5fba199ac9479ea92d 100644 --- a/templates/components/vectordbs/typescript/none/shared.ts +++ b/templates/components/vectordbs/typescript/none/shared.ts @@ -1,3 +1 @@ export const STORAGE_CACHE_DIR = "./cache"; -export const CHUNK_SIZE = 512; -export const CHUNK_OVERLAP = 20; diff --git a/templates/components/vectordbs/typescript/pg/generate.ts b/templates/components/vectordbs/typescript/pg/generate.ts index b41e4c20fe9b4f71c6ed17b3aed9ae29a0f28d55..f5664b6f070d69658d4391ddbe0f3422c903c71b 100644 --- a/templates/components/vectordbs/typescript/pg/generate.ts +++ b/templates/components/vectordbs/typescript/pg/generate.ts @@ -6,6 +6,7 @@ import { storageContextFromDefaults, } from "llamaindex"; import { getDocuments } from "./loader"; +import { initSettings } from "./settings"; import { PGVECTOR_COLLECTION, PGVECTOR_SCHEMA, @@ -37,6 +38,7 @@ async function loadAndIndex() { (async () => { checkRequiredEnvVars(); + initSettings(); await loadAndIndex(); console.log("Finished generating storage."); process.exit(0); diff --git a/templates/components/vectordbs/typescript/pg/index.ts b/templates/components/vectordbs/typescript/pg/index.ts index 8c504e71ced6dd68de6f53a7e8ec54ca566123ec..0b572d74dd98ce7c180cdc78e5334efd767e2a5a 100644 --- a/templates/components/vectordbs/typescript/pg/index.ts +++ b/templates/components/vectordbs/typescript/pg/index.ts @@ -1,29 +1,17 @@ /* eslint-disable turbo/no-undeclared-env-vars */ +import { PGVectorStore, VectorStoreIndex } from "llamaindex"; import { - LLM, - PGVectorStore, - VectorStoreIndex, - serviceContextFromDefaults, -} from "llamaindex"; -import { - CHUNK_OVERLAP, - CHUNK_SIZE, PGVECTOR_SCHEMA, PGVECTOR_TABLE, checkRequiredEnvVars, } from "./shared"; -export async function getDataSource(llm: LLM) { +export async function getDataSource() { checkRequiredEnvVars(); const pgvs = new PGVectorStore({ connectionString: process.env.PG_CONNECTION_STRING, schemaName: PGVECTOR_SCHEMA, tableName: PGVECTOR_TABLE, }); - const serviceContext = serviceContextFromDefaults({ - llm, - chunkSize: CHUNK_SIZE, - chunkOverlap: CHUNK_OVERLAP, - }); - return await VectorStoreIndex.fromVectorStore(pgvs, serviceContext); + return await VectorStoreIndex.fromVectorStore(pgvs); } diff --git a/templates/components/vectordbs/typescript/pg/shared.ts b/templates/components/vectordbs/typescript/pg/shared.ts index ba7479340b796bcedcb4b661cb6eb97159767450..88774df1226c715fc539ca93110c9009d7dfda44 100644 --- a/templates/components/vectordbs/typescript/pg/shared.ts +++ b/templates/components/vectordbs/typescript/pg/shared.ts @@ -1,6 +1,4 @@ export const PGVECTOR_COLLECTION = "data"; -export const CHUNK_SIZE = 512; -export const CHUNK_OVERLAP = 20; export const PGVECTOR_SCHEMA = "public"; export const PGVECTOR_TABLE = "llamaindex_embedding"; diff --git a/templates/components/vectordbs/typescript/pinecone/generate.ts b/templates/components/vectordbs/typescript/pinecone/generate.ts index d879c6b10073320b57266cab735138b166431cbe..c275bc5856b54d0d57a4a9e78e1dd43bc05e0fc6 100644 --- a/templates/components/vectordbs/typescript/pinecone/generate.ts +++ b/templates/components/vectordbs/typescript/pinecone/generate.ts @@ -6,6 +6,7 @@ import { storageContextFromDefaults, } from "llamaindex"; import { getDocuments } from "./loader"; +import { initSettings } from "./settings"; import { checkRequiredEnvVars } from "./shared"; dotenv.config(); @@ -28,6 +29,7 @@ async function loadAndIndex() { (async () => { checkRequiredEnvVars(); + initSettings(); await loadAndIndex(); console.log("Finished generating storage."); })(); diff --git a/templates/components/vectordbs/typescript/pinecone/index.ts b/templates/components/vectordbs/typescript/pinecone/index.ts index 8fa949e7c79336beb057e6290183c0a404242bf4..226713d99330c22127158356c11cb36b3dac0d82 100644 --- a/templates/components/vectordbs/typescript/pinecone/index.ts +++ b/templates/components/vectordbs/typescript/pinecone/index.ts @@ -1,19 +1,9 @@ /* eslint-disable turbo/no-undeclared-env-vars */ -import { - LLM, - PineconeVectorStore, - VectorStoreIndex, - serviceContextFromDefaults, -} from "llamaindex"; -import { CHUNK_OVERLAP, CHUNK_SIZE, checkRequiredEnvVars } from "./shared"; +import { PineconeVectorStore, VectorStoreIndex } from "llamaindex"; +import { checkRequiredEnvVars } from "./shared"; -export async function getDataSource(llm: LLM) { +export async function getDataSource() { checkRequiredEnvVars(); - const serviceContext = serviceContextFromDefaults({ - llm, - chunkSize: CHUNK_SIZE, - chunkOverlap: CHUNK_OVERLAP, - }); const store = new PineconeVectorStore(); - return await VectorStoreIndex.fromVectorStore(store, serviceContext); + return await VectorStoreIndex.fromVectorStore(store); } diff --git a/templates/components/vectordbs/typescript/pinecone/shared.ts b/templates/components/vectordbs/typescript/pinecone/shared.ts index ae2fd6b1ffafb6df3adf6d25f53c65fc0a790464..c4e9911d74baf43d17861e4295f836c3b04be21f 100644 --- a/templates/components/vectordbs/typescript/pinecone/shared.ts +++ b/templates/components/vectordbs/typescript/pinecone/shared.ts @@ -1,6 +1,3 @@ -export const CHUNK_SIZE = 512; -export const CHUNK_OVERLAP = 20; - const REQUIRED_ENV_VARS = ["PINECONE_ENVIRONMENT", "PINECONE_API_KEY"]; export function checkRequiredEnvVars() { diff --git a/templates/types/streaming/express/src/controllers/chat-request.controller.ts b/templates/types/streaming/express/src/controllers/chat-request.controller.ts index b81b5999744dd70361ddb606de35126f56841d29..056edc5d615e452301980be9e08f5b08a57c8d08 100644 --- a/templates/types/streaming/express/src/controllers/chat-request.controller.ts +++ b/templates/types/streaming/express/src/controllers/chat-request.controller.ts @@ -1,5 +1,5 @@ import { Request, Response } from "express"; -import { ChatMessage, MessageContent, OpenAI } from "llamaindex"; +import { ChatMessage, MessageContent } from "llamaindex"; import { createChatEngine } from "./engine/chat"; const convertMessageContent = ( @@ -32,10 +32,6 @@ export const chatRequest = async (req: Request, res: Response) => { }); } - const llm = new OpenAI({ - model: process.env.MODEL || "gpt-3.5-turbo", - }); - // Convert message content from Vercel/AI format to LlamaIndex/OpenAI format // Note: The non-streaming template does not need the Vercel/AI format, we're still using it for consistency with the streaming template const userMessageContent = convertMessageContent( @@ -43,7 +39,7 @@ export const chatRequest = async (req: Request, res: Response) => { data?.imageUrl, ); - const chatEngine = await createChatEngine(llm); + const chatEngine = await createChatEngine(); // Calling LlamaIndex's ChatEngine to get a response const response = await chatEngine.chat({ diff --git a/templates/types/streaming/express/src/controllers/chat.controller.ts b/templates/types/streaming/express/src/controllers/chat.controller.ts index 1d9cd56a79b3b9ce4ea89f82b6030aeaf8a84625..7bdf98da61a69b1550d05fa363f174df22050e5e 100644 --- a/templates/types/streaming/express/src/controllers/chat.controller.ts +++ b/templates/types/streaming/express/src/controllers/chat.controller.ts @@ -1,6 +1,6 @@ import { streamToResponse } from "ai"; import { Request, Response } from "express"; -import { ChatMessage, MessageContent, OpenAI } from "llamaindex"; +import { ChatMessage, MessageContent } from "llamaindex"; import { createChatEngine } from "./engine/chat"; import { LlamaIndexStream } from "./llamaindex-stream"; @@ -34,11 +34,7 @@ export const chat = async (req: Request, res: Response) => { }); } - const llm = new OpenAI({ - model: (process.env.MODEL as any) || "gpt-3.5-turbo", - }); - - const chatEngine = await createChatEngine(llm); + const chatEngine = await createChatEngine(); // Convert message content from Vercel/AI format to LlamaIndex/OpenAI format const userMessageContent = convertMessageContent( diff --git a/templates/types/streaming/express/src/controllers/engine/chat.ts b/templates/types/streaming/express/src/controllers/engine/chat.ts index abb02e90cd2ce91096791bf10c4665afcbe11d38..a42ac41cc86814fc712724caaec2c3152ac04fd4 100644 --- a/templates/types/streaming/express/src/controllers/engine/chat.ts +++ b/templates/types/streaming/express/src/controllers/engine/chat.ts @@ -1,7 +1,7 @@ -import { LLM, SimpleChatEngine } from "llamaindex"; +import { Settings, SimpleChatEngine } from "llamaindex"; -export async function createChatEngine(llm: LLM) { +export async function createChatEngine() { return new SimpleChatEngine({ - llm, + llm: Settings.llm, }); } diff --git a/templates/types/streaming/express/src/controllers/engine/settings.ts b/templates/types/streaming/express/src/controllers/engine/settings.ts new file mode 100644 index 0000000000000000000000000000000000000000..25c077a5d81b4e427a70579339df3cb805dbe217 --- /dev/null +++ b/templates/types/streaming/express/src/controllers/engine/settings.ts @@ -0,0 +1,13 @@ +import { OpenAI, Settings } from "llamaindex"; + +const CHUNK_SIZE = 512; +const CHUNK_OVERLAP = 20; + +export const initSettings = async () => { + Settings.llm = new OpenAI({ + model: process.env.MODEL ?? "gpt-3.5-turbo", + maxTokens: 512, + }); + Settings.chunkSize = CHUNK_SIZE; + Settings.chunkOverlap = CHUNK_OVERLAP; +}; diff --git a/templates/types/streaming/express/src/routes/chat.route.ts b/templates/types/streaming/express/src/routes/chat.route.ts index 0fc0d4c958ea83876c9c53226e79be42c4a4e01e..34a3e005ff34a3fc9afa87c49d2a40fee8db3db1 100644 --- a/templates/types/streaming/express/src/routes/chat.route.ts +++ b/templates/types/streaming/express/src/routes/chat.route.ts @@ -1,9 +1,11 @@ import express, { Router } from "express"; import { chatRequest } from "../controllers/chat-request.controller"; import { chat } from "../controllers/chat.controller"; +import { initSettings } from "../controllers/engine/settings"; const llmRouter: Router = express.Router(); +initSettings(); llmRouter.route("/").post(chat); llmRouter.route("/request").post(chatRequest); diff --git a/templates/types/streaming/nextjs/app/api/chat/engine/chat.ts b/templates/types/streaming/nextjs/app/api/chat/engine/chat.ts index abb02e90cd2ce91096791bf10c4665afcbe11d38..a42ac41cc86814fc712724caaec2c3152ac04fd4 100644 --- a/templates/types/streaming/nextjs/app/api/chat/engine/chat.ts +++ b/templates/types/streaming/nextjs/app/api/chat/engine/chat.ts @@ -1,7 +1,7 @@ -import { LLM, SimpleChatEngine } from "llamaindex"; +import { Settings, SimpleChatEngine } from "llamaindex"; -export async function createChatEngine(llm: LLM) { +export async function createChatEngine() { return new SimpleChatEngine({ - llm, + llm: Settings.llm, }); } diff --git a/templates/types/streaming/nextjs/app/api/chat/engine/settings.ts b/templates/types/streaming/nextjs/app/api/chat/engine/settings.ts new file mode 100644 index 0000000000000000000000000000000000000000..25c077a5d81b4e427a70579339df3cb805dbe217 --- /dev/null +++ b/templates/types/streaming/nextjs/app/api/chat/engine/settings.ts @@ -0,0 +1,13 @@ +import { OpenAI, Settings } from "llamaindex"; + +const CHUNK_SIZE = 512; +const CHUNK_OVERLAP = 20; + +export const initSettings = async () => { + Settings.llm = new OpenAI({ + model: process.env.MODEL ?? "gpt-3.5-turbo", + maxTokens: 512, + }); + Settings.chunkSize = CHUNK_SIZE; + Settings.chunkOverlap = CHUNK_OVERLAP; +}; diff --git a/templates/types/streaming/nextjs/app/api/chat/route.ts b/templates/types/streaming/nextjs/app/api/chat/route.ts index 484262f2c3f97cad8754a90ee02f2a071e5cf0c4..92e2f3b4947cd729ed44c7dadd2687cc844c9d33 100644 --- a/templates/types/streaming/nextjs/app/api/chat/route.ts +++ b/templates/types/streaming/nextjs/app/api/chat/route.ts @@ -1,11 +1,13 @@ import { initObservability } from "@/app/observability"; import { StreamingTextResponse } from "ai"; -import { ChatMessage, MessageContent, OpenAI } from "llamaindex"; +import { ChatMessage, MessageContent } from "llamaindex"; import { NextRequest, NextResponse } from "next/server"; import { createChatEngine } from "./engine/chat"; +import { initSettings } from "./engine/settings"; import { LlamaIndexStream } from "./llamaindex-stream"; initObservability(); +initSettings(); export const runtime = "nodejs"; export const dynamic = "force-dynamic"; @@ -44,12 +46,7 @@ export async function POST(request: NextRequest) { ); } - const llm = new OpenAI({ - model: (process.env.MODEL as any) ?? "gpt-3.5-turbo", - maxTokens: 512, - }); - - const chatEngine = await createChatEngine(llm); + const chatEngine = await createChatEngine(); // Convert message content from Vercel/AI format to LlamaIndex/OpenAI format const userMessageContent = convertMessageContent(