lovart3/lib/ai/entitlements.ts
2025-12-17 20:15:18 +08:00

51 lines
1.4 KiB
TypeScript

import type { UserType } from "@/app/(auth)/auth";
import type { ChatModel } from "@/lib/ai/models";
type Entitlements = {
maxMessagesPerDay: number;
availableChatModelIds: ChatModel["id"][];
};
const gatewayEnabled =
Boolean(process.env.AI_GATEWAY_API_KEY) &&
process.env.AI_GATEWAY_API_KEY !== "change-me-ai-gateway-key";
const qwenEnabled = Boolean(process.env.DASHSCOPE_API_KEY);
const gtp5Enabled = Boolean(process.env.GTP5_API_KEY);
const baseModels: ChatModel["id"][] = gatewayEnabled ? (["chat-model"] as ChatModel["id"][]) : [];
const reasoningModels: ChatModel["id"][] = gatewayEnabled
? (["chat-model-reasoning"] as ChatModel["id"][])
: [];
const extraModels: ChatModel["id"][] = [
...(qwenEnabled ? (["qwen3-vl-plus"] as ChatModel["id"][]) : []),
...(gtp5Enabled ? (["gpt-5-nano"] as ChatModel["id"][]) : []),
];
export const entitlementsByUserType: Record<UserType, Entitlements> = {
/*
* For users without an account
*/
guest: {
maxMessagesPerDay: 20,
availableChatModelIds: [...baseModels, ...extraModels, ...reasoningModels],
},
/*
* For users with an account
*/
regular: {
maxMessagesPerDay: 100,
availableChatModelIds: [...baseModels, ...extraModels, ...reasoningModels],
},
/*
* For administrators
*/
admin: {
maxMessagesPerDay: Number.POSITIVE_INFINITY,
availableChatModelIds: [...baseModels, ...extraModels, ...reasoningModels],
},
};