59 lines
1.6 KiB
TypeScript
59 lines
1.6 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: 1000,
|
|
availableChatModelIds: [...baseModels, ...extraModels, ...reasoningModels],
|
|
},
|
|
|
|
/*
|
|
* For administrators
|
|
*/
|
|
admin: {
|
|
maxMessagesPerDay: Number.POSITIVE_INFINITY,
|
|
availableChatModelIds: [...baseModels, ...extraModels, ...reasoningModels],
|
|
},
|
|
|
|
/*
|
|
* For agent administrators
|
|
*/
|
|
agent_admin: {
|
|
maxMessagesPerDay: Number.POSITIVE_INFINITY,
|
|
availableChatModelIds: [...baseModels, ...extraModels, ...reasoningModels],
|
|
},
|
|
};
|