50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import { isVideoModelDescriptor } from "@/lib/ai/model-classification";
|
|
|
|
export const DETAIL_REPLACEMENT_IMAGE_MODEL_CONFIG_KEY =
|
|
"detail_replacement_image_model_config";
|
|
|
|
export const DEFAULT_DETAIL_REPLACEMENT_IMAGE_MODEL_ID = "gpt-image-2.5";
|
|
|
|
export type DetailReplacementImageModelConfig = {
|
|
modelId: string;
|
|
};
|
|
|
|
export function normalizeDetailReplacementImageModelConfig(
|
|
value: unknown,
|
|
): DetailReplacementImageModelConfig {
|
|
const record =
|
|
value && typeof value === "object" && !Array.isArray(value)
|
|
? (value as Record<string, unknown>)
|
|
: {};
|
|
const modelId = String(record.modelId || "").trim();
|
|
|
|
return {
|
|
modelId: modelId || DEFAULT_DETAIL_REPLACEMENT_IMAGE_MODEL_ID,
|
|
};
|
|
}
|
|
|
|
export function isDetailReplacementImageModel({
|
|
model,
|
|
provider,
|
|
}: {
|
|
model: { modelId: string; supportsImageGen: boolean; isSubModel: boolean; capabilities?: unknown };
|
|
provider?: { type?: string | null } | null;
|
|
}) {
|
|
return model.supportsImageGen && !model.isSubModel && !isVideoModelDescriptor({
|
|
providerType: provider?.type,
|
|
modelId: model.modelId,
|
|
capabilities: model.capabilities,
|
|
supportsImageGen: model.supportsImageGen,
|
|
});
|
|
}
|
|
|
|
export function findConfiguredDetailReplacementImageModel<
|
|
T extends Parameters<typeof isDetailReplacementImageModel>[0] & { model: { id: string } },
|
|
>(models: T[], setting: unknown): T | undefined {
|
|
const { modelId } = normalizeDetailReplacementImageModelConfig(setting);
|
|
return models.find((entry) =>
|
|
(entry.model.id === modelId || entry.model.modelId === modelId) &&
|
|
isDetailReplacementImageModel(entry)
|
|
);
|
|
}
|