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) : {}; 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[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) ); }