From 4e83ce95cd98a2a75ea33fb781d72b85c2944254 Mon Sep 17 00:00:00 2001 From: jackyu66git Date: Wed, 20 May 2026 12:45:25 +0800 Subject: [PATCH] Switch LLM provider to DeepSeek v4 Pro - Create shared openai client (src/lib/openai.ts) pointing to api.deepseek.com - Replace all gpt-4o-mini model references with deepseek-v4-pro - Refactor 3 API routes to use shared client instead of inline OpenAI() calls - Add OPENAI_BASE_URL env var for endpoint configuration Co-Authored-By: Claude Opus 4.6 --- src/app/api/cron/weekly-summaries/route.ts | 4 +--- src/app/api/session/complete/route.ts | 3 +-- src/app/api/task/generate/route.ts | 4 +--- src/lib/engines/reflection-analyzer.ts | 2 +- src/lib/engines/summary-generator.ts | 2 +- src/lib/engines/task-selector.ts | 2 +- src/lib/openai.ts | 8 ++++++++ src/lib/safety.ts | 2 +- 8 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 src/lib/openai.ts diff --git a/src/app/api/cron/weekly-summaries/route.ts b/src/app/api/cron/weekly-summaries/route.ts index e109632..b06d74a 100644 --- a/src/app/api/cron/weekly-summaries/route.ts +++ b/src/app/api/cron/weekly-summaries/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from "next/server"; -import OpenAI from "openai"; +import { openai } from "@/lib/openai"; import { generateAllWeeklySummaries } from "@/lib/engines/summary-generator"; export async function POST(req: Request) { @@ -18,8 +18,6 @@ export async function POST(req: Request) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } - const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); - try { const results = await generateAllWeeklySummaries(openai); const succeeded = results.filter((r) => r.success).length; diff --git a/src/app/api/session/complete/route.ts b/src/app/api/session/complete/route.ts index 687aeed..5eba14a 100644 --- a/src/app/api/session/complete/route.ts +++ b/src/app/api/session/complete/route.ts @@ -1,6 +1,6 @@ import { auth } from "@clerk/nextjs/server"; import { NextResponse } from "next/server"; -import OpenAI from "openai"; +import { openai } from "@/lib/openai"; import { prisma } from "@/lib/prisma"; import { processReflection } from "@/lib/engines/reflection-analyzer"; import { computeStateUpdate } from "@/lib/engines/progress-tracker"; @@ -49,7 +49,6 @@ export async function POST(req: Request) { ); } - const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); // Process reflection through LLM #2 const reflection = await processReflection( diff --git a/src/app/api/task/generate/route.ts b/src/app/api/task/generate/route.ts index 1e1b6d8..6c90fb0 100644 --- a/src/app/api/task/generate/route.ts +++ b/src/app/api/task/generate/route.ts @@ -1,14 +1,12 @@ import { auth } from "@clerk/nextjs/server"; import { NextResponse } from "next/server"; -import OpenAI from "openai"; +import { openai } from "@/lib/openai"; import { generateDailyTask } from "@/lib/engines/task-selector"; export async function POST() { const { userId } = await auth(); if (!userId) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); - try { const result = await generateDailyTask(userId, openai); diff --git a/src/lib/engines/reflection-analyzer.ts b/src/lib/engines/reflection-analyzer.ts index 24459f2..1cbdefc 100644 --- a/src/lib/engines/reflection-analyzer.ts +++ b/src/lib/engines/reflection-analyzer.ts @@ -98,7 +98,7 @@ export async function analyzeReflection( try { const response = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model: "deepseek-v4-pro", messages: [ { role: "system", content: REFLECTION_PROMPT }, { diff --git a/src/lib/engines/summary-generator.ts b/src/lib/engines/summary-generator.ts index ab573f3..d10c6e9 100644 --- a/src/lib/engines/summary-generator.ts +++ b/src/lib/engines/summary-generator.ts @@ -106,7 +106,7 @@ export async function generateWeeklySummary( try { const response = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model: "deepseek-v4-pro", messages: [ { role: "system", content: SUMMARY_PROMPT }, { diff --git a/src/lib/engines/task-selector.ts b/src/lib/engines/task-selector.ts index 55a5daa..a59d6dc 100644 --- a/src/lib/engines/task-selector.ts +++ b/src/lib/engines/task-selector.ts @@ -123,7 +123,7 @@ export async function generateTask( try { const response = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model: "deepseek-v4-pro", messages: [ { role: "system", content: TASK_PROMPT }, { diff --git a/src/lib/openai.ts b/src/lib/openai.ts new file mode 100644 index 0000000..5c07df3 --- /dev/null +++ b/src/lib/openai.ts @@ -0,0 +1,8 @@ +import OpenAI from "openai"; + +const baseURL = process.env.OPENAI_BASE_URL || "https://api.deepseek.com"; + +export const openai = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, + baseURL, +}); diff --git a/src/lib/safety.ts b/src/lib/safety.ts index 3d2aa6a..5b97255 100644 --- a/src/lib/safety.ts +++ b/src/lib/safety.ts @@ -43,7 +43,7 @@ export async function llmSafetyCheck( ): Promise { try { const response = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model: "deepseek-v4-pro", messages: [ { role: "system", content: SELF_REVIEW_PROMPT }, { role: "user", content: text },