ai-chatbot/lib/ai/model-frontend-availability.ts
Your Name d72ca0b344
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
fix: polish style pro model visibility and billing
2026-05-20 14:26:24 +08:00

56 lines
1.3 KiB
TypeScript

import type { AiModel } from "@/lib/db/schema";
export type ModelFrontendAvailabilityStatus =
| "available"
| "maintenance"
| "testing";
export type ModelFrontendAvailability = {
availabilityStatus: ModelFrontendAvailabilityStatus;
availabilityLabel: string | null;
selectable: boolean;
disabledReason: string | null;
};
type AvailabilityModel = Pick<
AiModel,
| "isEnabled"
| "healthStatus"
| "healthAutoDisabledAt"
| "healthObservationStartedAt"
>;
export function getAiModelFrontendAvailability(
model: AvailabilityModel
): ModelFrontendAvailability {
const healthStatus = model.healthStatus || "healthy";
if (
healthStatus === "auto_disabled" ||
(model.isEnabled === false && Boolean(model.healthAutoDisabledAt))
) {
return {
availabilityStatus: "maintenance",
availabilityLabel: "维护中",
selectable: false,
disabledReason: "模型维护中,请稍后再试",
};
}
if (healthStatus === "degraded" && model.healthObservationStartedAt) {
return {
availabilityStatus: "testing",
availabilityLabel: "测试中",
selectable: true,
disabledReason: null,
};
}
return {
availabilityStatus: "available",
availabilityLabel: null,
selectable: true,
disabledReason: null,
};
}