ai-chatbot/app/(chat)/page.tsx
Your Name 9b1de1a9f3
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
新增新版首页模式切换与会员升级配置体系
2026-02-13 19:20:54 +08:00

103 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { cookies } from "next/headers";
import { redirect } from "next/navigation";
import { Suspense } from "react";
import { Chat } from "@/components/chat";
import { DataStreamHandler } from "@/components/data-stream-handler";
import { LovartHome } from "@/components/home/lovart-home";
import { generateUUID } from "@/lib/utils";
import { auth } from "../(auth)/auth";
import {
getDefaultAiModel,
getEnabledAiModelsWithProvider,
getSiteSettings,
getSystemSetting,
} from "@/lib/db/queries";
import { isAiModelAgentAuto } from "@/lib/db/ai-model-flags";
export default function Page() {
return (
<Suspense fallback={<div className="flex h-dvh" />}>
<NewChatPage />
</Suspense>
);
}
async function NewChatPage() {
const id = generateUUID();
const [session, cookieStore, siteSettings, homeVariantSetting, surpriseCategoriesSetting] =
await Promise.all([
auth(),
cookies(),
getSiteSettings(),
getSystemSetting({ key: "home_variant" }).catch(() => undefined),
getSystemSetting({ key: "home_surprise_categories" }).catch(() => undefined),
]);
// 如果用户未登录,重定向到登录页面
if (!session?.user) {
redirect("/login");
}
const homeVariant = homeVariantSetting?.value === "lovart" ? "lovart" : "classic";
const surpriseCategories = Array.isArray(surpriseCategoriesSetting?.value)
? surpriseCategoriesSetting?.value
.map((item: unknown) => String(item || "").trim())
.filter(Boolean)
: ["全部", "惊喜"];
if (homeVariant === "lovart") {
return (
<LovartHome
user={{
id: session.user.id,
email: session.user.email,
name: session.user.name,
}}
siteName={siteSettings.siteName || "AI Chatbot"}
siteLogo={siteSettings.siteLogo || siteSettings.siteLogoDark || ""}
surpriseCategories={surpriseCategories}
/>
);
}
const modelIdFromCookie = cookieStore.get("chat-model");
// 如果没有保存的模型 ID,从数据库获取默认模型
let initialModelId = modelIdFromCookie?.value;
if (!initialModelId) {
// 尝试获取默认模型
const defaultModel = await getDefaultAiModel();
if (defaultModel && !isAiModelAgentAuto(defaultModel)) {
initialModelId = defaultModel.id;
} else {
// 如果没有设置默认模型,获取第一个启用的模型
const enabledModels = await getEnabledAiModelsWithProvider();
const visibleModels = enabledModels.filter(
({ model }) => !isAiModelAgentAuto(model)
);
if (visibleModels.length > 0) {
initialModelId = visibleModels[0].model.id;
}
}
}
return (
<>
<Chat
autoResume={false}
id={id}
initialChatModel={initialModelId || ""}
initialMessages={[]}
initialVisibilityType="private"
isReadonly={false}
key={id}
userType={session?.user?.type}
/>
<DataStreamHandler />
</>
);
}