From 18807c672d1fc46e23e300ce2979eb8d4d7df29c Mon Sep 17 00:00:00 2001 From: jairoguo Date: Wed, 22 Oct 2025 14:42:21 +0800 Subject: [PATCH] feat: Add optional model configuration --- .env.example | 3 +++ Dockerfile | 3 +++ docker-compose.yml | 3 +++ env.d.ts | 3 +++ src/embeddings.js | 19 +++++++++++++++++-- 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 4712016..f15b97f 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,7 @@ _APP_ASSISTANT_OPENAI_API_KEY=YOUR_OPENAI_API_KEY +_APP_ASSISTANT_BASE_URL=https://api.openai.com/v1 +_APP_ASSISTANT_MODEL_NAME=gpt-4o +_APP_ASSISTANT_EMBEDDING_MODEL=text-embedding-ada-002 _BUILD_GIT_URL=https://github.com/appwrite/website.git _BUILD_GIT_BRANCH=main _BUILD_WEBSITE_URL=https://appwrite.io diff --git a/Dockerfile b/Dockerfile index c1eb39b..e1fc8c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -50,6 +50,9 @@ COPY --from=builder /usr/src/app/package.json ./ COPY --from=builder /usr/src/app/src ./src ENV _APP_ASSISTANT_OPENAI_API_KEY='' +ENV _APP_ASSISTANT_BASE_URL='https://api.openai.com/v1' +ENV _APP_ASSISTANT_MODEL_NAME='gpt-4o' +ENV _APP_ASSISTANT_EMBEDDING_MODEL='text-embedding-ada-002' EXPOSE 3003 CMD [ "node", "src/main.js" ] diff --git a/docker-compose.yml b/docker-compose.yml index 5f6ec83..8decf47 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,3 +7,6 @@ services: - ./sources:/usr/src/app/sources environment: - _APP_ASSISTANT_OPENAI_API_KEY + - _APP_ASSISTANT_BASE_URL + - _APP_ASSISTANT_MODEL_NAME + - _APP_ASSISTANT_EMBEDDING_MODEL diff --git a/env.d.ts b/env.d.ts index 88ef09f..f6560cc 100644 --- a/env.d.ts +++ b/env.d.ts @@ -2,6 +2,9 @@ declare global { namespace NodeJS { interface ProcessEnv { _APP_ASSISTANT_OPENAI_API_KEY?: string; + _APP_ASSISTANT_BASE_URL?: string; + _APP_ASSISTANT_MODEL_NAME?: string; + _APP_ASSISTANT_EMBEDDING_MODEL?: string; _BUILD_WEBSITE_URL?: string; _BUILD_WEBSITE_VERSION?: string; _BUILD_GIT_URL?: string; diff --git a/src/embeddings.js b/src/embeddings.js index 4f4ceb4..86cbdbe 100644 --- a/src/embeddings.js +++ b/src/embeddings.js @@ -10,10 +10,22 @@ import { getDocuments } from "./documents.js"; export const initializeDocumentRetriever = async () => { const embeddings = new OpenAIEmbeddings({ openAIApiKey: process.env._APP_ASSISTANT_OPENAI_API_KEY, + configuration: { + baseURL: process.env._APP_ASSISTANT_BASE_URL || "https://api.openai.com/v1", + }, + modelName: process.env._APP_ASSISTANT_EMBEDDING_MODEL || "text-embedding-ada-002", + batchSize: 10, }); const documents = await getDocuments(); - const vectorStore = await HNSWLib.fromDocuments(documents, embeddings); + + if (documents.length === 0) { + throw new Error("No documents found. Make sure to run 'pnpm run fetch-sources' first."); + } + + const vectorStore = await HNSWLib.fromDocuments(documents, embeddings, { + space: "cosine", + }); return vectorStore.asRetriever(5); }; @@ -24,8 +36,11 @@ export const initializeDocumentRetriever = async () => { */ export const getOpenAIChat = async (onToken, systemPrompt) => new OpenAIChat({ - modelName: "gpt-4o", + modelName: process.env._APP_ASSISTANT_MODEL_NAME || "gpt-4o", openAIApiKey: process.env._APP_ASSISTANT_OPENAI_API_KEY, + configuration: { + baseURL: process.env._APP_ASSISTANT_BASE_URL || "https://api.openai.com/v1", + }, temperature: 0, maxTokens: 1000, streaming: true,