From 2f78973fd3ff6393d15f3d7d91e5f9b69623caa5 Mon Sep 17 00:00:00 2001 From: KartikGS Date: Fri, 9 Aug 2024 23:09:45 +0530 Subject: [PATCH 1/2] feat(manage models): add model to mongodb --- src/hooks.server.ts | 4 ++++ src/lib/server/database.ts | 6 ++++++ src/lib/server/models.ts | 22 +++++++++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/hooks.server.ts b/src/hooks.server.ts index d8bc3d984b7..117e128641f 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -16,6 +16,7 @@ import { initExitHandler } from "$lib/server/exitHandler"; import { ObjectId } from "mongodb"; import { refreshAssistantsCounts } from "$lib/jobs/refresh-assistants-counts"; import { refreshConversationStats } from "$lib/jobs/refresh-conversation-stats"; +import { populateModelConfig } from "$lib/server/models"; // TODO: move this code on a started server hook, instead of using a "building" flag if (!building) { @@ -26,6 +27,9 @@ if (!building) { if (env.ENABLE_ASSISTANTS) { refreshAssistantsCounts(); } + + await populateModelConfig(); + refreshConversationStats(); // Init metrics server diff --git a/src/lib/server/database.ts b/src/lib/server/database.ts index 5e5824dcc3a..2dd7e2c2342 100644 --- a/src/lib/server/database.ts +++ b/src/lib/server/database.ts @@ -13,6 +13,7 @@ import type { ConversationStats } from "$lib/types/ConversationStats"; import type { MigrationResult } from "$lib/types/MigrationResult"; import type { Semaphore } from "$lib/types/Semaphore"; import type { AssistantStats } from "$lib/types/AssistantStats"; +import type { ModelConfig } from "./models"; import { logger } from "$lib/server/logger"; import { building } from "$app/environment"; import { onExit } from "./exitHandler"; @@ -83,6 +84,7 @@ export class Database { const bucket = new GridFSBucket(db, { bucketName: "files" }); const migrationResults = db.collection("migrationResults"); const semaphores = db.collection("semaphores"); + const modelConfig = db.collection("modelConfig"); return { conversations, @@ -99,6 +101,7 @@ export class Database { bucket, migrationResults, semaphores, + modelConfig, }; } @@ -120,6 +123,7 @@ export class Database { sessions, messageEvents, semaphores, + modelConfig, } = this.getCollections(); conversations @@ -209,6 +213,8 @@ export class Database { semaphores .createIndex({ createdAt: 1 }, { expireAfterSeconds: 60 }) .catch((e) => logger.error(e)); + + modelConfig.createIndex({ name: 1 }, { unique: true }).catch((e) => logger.error(e)); } } diff --git a/src/lib/server/models.ts b/src/lib/server/models.ts index 4bcf5aa030e..6906c7e3586 100644 --- a/src/lib/server/models.ts +++ b/src/lib/server/models.ts @@ -13,6 +13,7 @@ import JSON5 from "json5"; import { getTokenizer } from "$lib/utils/getTokenizer"; import { logger } from "$lib/server/logger"; import { ToolResultStatus } from "$lib/types/Tool"; +import { collections } from "./database"; type Optional = Pick, K> & Omit; @@ -67,7 +68,26 @@ const modelConfig = z.object({ embeddingModel: validateEmbeddingModelByName(embeddingModels).optional(), }); -const modelsRaw = z.array(modelConfig).parse(JSON5.parse(env.MODELS)); +export type ModelConfig = z.infer; + +const databaseModelsRaw = z.array(modelConfig).parse(JSON5.parse(env.MODELS)); + +export async function populateModelConfig() { + await collections.modelConfig.deleteMany({}); + await collections.modelConfig.insertMany(databaseModelsRaw); +} + +async function getModels(): Promise { + try { + const databaseModel = await collections.modelConfig.find().toArray(); + return z.array(modelConfig).parse(databaseModel); + } catch (error) { + console.error("Error fetching models from database, using default models:", error); + return z.array(modelConfig).parse(JSON5.parse(env.MODELS)); + } +} + +const modelsRaw = await getModels(); async function getChatPromptRender( m: z.infer From 838f58b775a438431abeafa6c7ea82e82ee02ed9 Mon Sep 17 00:00:00 2001 From: KartikGS Date: Fri, 9 Aug 2024 23:14:55 +0530 Subject: [PATCH 2/2] feat(manage models): formatting --- src/lib/components/ExpandNavigation.svelte | 2 +- src/lib/components/MobileNav.svelte | 2 +- src/lib/components/NavConversationItem.svelte | 2 +- src/lib/components/NavMenu.svelte | 6 +++--- src/lib/components/Pagination.svelte | 2 +- .../chat/AssistantIntroduction.svelte | 6 +++--- .../components/chat/ChatIntroduction.svelte | 2 +- src/lib/components/chat/ChatMessage.svelte | 20 +++++++++---------- src/lib/components/chat/ChatWindow.svelte | 8 ++++---- src/routes/+layout.svelte | 6 +++--- src/routes/assistants/+page.svelte | 8 ++++---- src/routes/settings/(nav)/+page.svelte | 2 +- 12 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/lib/components/ExpandNavigation.svelte b/src/lib/components/ExpandNavigation.svelte index dc2d5ed1e17..cda0207c576 100644 --- a/src/lib/components/ExpandNavigation.svelte +++ b/src/lib/components/ExpandNavigation.svelte @@ -5,7 +5,7 @@ diff --git a/src/lib/components/Pagination.svelte b/src/lib/components/Pagination.svelte index 7e86734130d..d3b0333dab4 100644 --- a/src/lib/components/Pagination.svelte +++ b/src/lib/components/Pagination.svelte @@ -57,7 +57,7 @@ {#if numTotalPages > 1}