52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import type { AiModel, AiProvider } from "@/lib/db/schema";
|
|
import {
|
|
getAiModelFrontendAvailability,
|
|
type ModelFrontendAvailability,
|
|
} from "@/lib/ai/model-frontend-availability";
|
|
import { modelSupportsReferenceImageInput } from "@/lib/ai/reference-image-capability";
|
|
|
|
type StyleProAvailabilityEntry = {
|
|
model: Pick<
|
|
AiModel,
|
|
| "displayName"
|
|
| "modelId"
|
|
| "supportsVision"
|
|
| "capabilities"
|
|
| "defaultParams"
|
|
| "isEnabled"
|
|
| "healthStatus"
|
|
| "healthAutoDisabledAt"
|
|
| "healthObservationStartedAt"
|
|
>;
|
|
provider: Pick<AiProvider, "type">;
|
|
};
|
|
|
|
export function getStyleProModelAvailability(
|
|
entry: StyleProAvailabilityEntry
|
|
): ModelFrontendAvailability {
|
|
if (!modelSupportsReferenceImageInput(entry.model, entry.provider)) {
|
|
return {
|
|
availabilityStatus: "maintenance",
|
|
availabilityLabel: "仅文生图",
|
|
selectable: false,
|
|
disabledReason: "风格化需要参考图,该模型仅支持文生图",
|
|
};
|
|
}
|
|
|
|
const availability = getAiModelFrontendAvailability(entry.model);
|
|
if (availability.availabilityStatus === "testing") {
|
|
return {
|
|
availabilityStatus: "testing",
|
|
availabilityLabel: "暂不可用",
|
|
selectable: false,
|
|
disabledReason: "模型近期生成异常,恢复健康后会自动开放",
|
|
};
|
|
}
|
|
|
|
return availability;
|
|
}
|
|
|
|
export function isStyleProModelRunnable(entry: StyleProAvailabilityEntry) {
|
|
return getStyleProModelAvailability(entry).selectable;
|
|
}
|