diff --git a/.env.example b/.env.example index 9a017b3ac..b9684af09 100644 --- a/.env.example +++ b/.env.example @@ -74,6 +74,9 @@ MASTODON_CLIENT_SECRET="" # Misc Settings OPENAI_API_KEY="" +OPENAI_BASE_URL="" +SMART_LLM="" +FAST_LLM="" NEXT_PUBLIC_DISCORD_SUPPORT="" NEXT_PUBLIC_POLOTNO="" # NOT_SECURED=false diff --git a/apps/backend/src/api/routes/copilot.controller.ts b/apps/backend/src/api/routes/copilot.controller.ts index 581343fbb..7f2984fb9 100644 --- a/apps/backend/src/api/routes/copilot.controller.ts +++ b/apps/backend/src/api/routes/copilot.controller.ts @@ -29,8 +29,8 @@ export class CopilotController { // @ts-ignore req?.body?.variables?.data?.metadata?.requestType === 'TextareaCompletion' - ? 'gpt-4o-mini' - : 'gpt-4.1', + ? process.env.FAST_LLM || 'gpt-4o-mini' + : process.env.SMART_LLM || 'gpt-4.1', }), }); diff --git a/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.ts b/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.ts index 1a60b7399..bf6f1e4c6 100644 --- a/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.ts +++ b/libraries/nestjs-libraries/src/agent/agent.graph.insert.service.ts @@ -10,8 +10,9 @@ import { PostsService } from '@gitroom/nestjs-libraries/database/prisma/posts/po const model = new ChatOpenAI({ apiKey: process.env.OPENAI_API_KEY || 'sk-proj-', - model: 'gpt-4o-2024-08-06', + model: process.env.SMART_LLM || 'gpt-4o-2024-08-06', temperature: 0, + ...(process.env.OPENAI_BASE_URL && { openAIApiKey: process.env.OPENAI_API_KEY, configuration: { baseURL: process.env.OPENAI_BASE_URL } }), }); interface WorkflowChannelsState { diff --git a/libraries/nestjs-libraries/src/openai/openai.service.ts b/libraries/nestjs-libraries/src/openai/openai.service.ts index 709ce0eac..976a558f5 100644 --- a/libraries/nestjs-libraries/src/openai/openai.service.ts +++ b/libraries/nestjs-libraries/src/openai/openai.service.ts @@ -6,6 +6,7 @@ import { z } from 'zod'; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY || 'sk-proj-', + baseURL: process.env.OPENAI_BASE_URL, }); const PicturePrompt = z.object({ @@ -18,6 +19,14 @@ const VoicePrompt = z.object({ @Injectable() export class OpenaiService { + private getSmartModel(): string { + return process.env.SMART_LLM || 'gpt-4.1'; + } + + private getFastModel(): string { + return process.env.FAST_LLM || 'gpt-4o-mini'; + } + async generateImage(prompt: string, isUrl: boolean, isVertical = false) { const generate = ( await openai.images.generate({ @@ -35,7 +44,7 @@ export class OpenaiService { return ( ( await openai.beta.chat.completions.parse({ - model: 'gpt-4.1', + model: this.getSmartModel(), messages: [ { role: 'system', @@ -56,7 +65,7 @@ export class OpenaiService { return ( ( await openai.beta.chat.completions.parse({ - model: 'gpt-4.1', + model: this.getSmartModel(), messages: [ { role: 'system', @@ -90,7 +99,7 @@ export class OpenaiService { ], n: 5, temperature: 1, - model: 'gpt-4.1', + model: this.getFastModel(), }), openai.chat.completions.create({ messages: [ @@ -106,7 +115,7 @@ export class OpenaiService { ], n: 5, temperature: 1, - model: 'gpt-4.1', + model: this.getFastModel(), }), ]) ).flatMap((p) => p.choices); @@ -144,7 +153,7 @@ export class OpenaiService { content, }, ], - model: 'gpt-4.1', + model: this.getFastModel(), }); const { content: articleContent } = websiteContent.choices[0].message; @@ -164,7 +173,7 @@ export class OpenaiService { const posts = ( await openai.beta.chat.completions.parse({ - model: 'gpt-4.1', + model: this.getSmartModel(), messages: [ { role: 'system', @@ -197,7 +206,7 @@ export class OpenaiService { return ( ( await openai.beta.chat.completions.parse({ - model: 'gpt-4.1', + model: this.getSmartModel(), messages: [ { role: 'system', @@ -231,7 +240,7 @@ export class OpenaiService { return ( ( await openai.beta.chat.completions.parse({ - model: 'gpt-4.1', + model: this.getSmartModel(), messages: [ { role: 'system',