ai-chatbot/lib/canvas/local-edit-config.ts

54 lines
1.4 KiB
TypeScript

export const CANVAS_LOCAL_EDIT_CONFIG_KEY = "canvas_local_edit_config";
export type CanvasLocalEditConfig = {
modelId: string;
scaleAdjustModelId: string;
};
export type CanvasLocalEditModelIdentity = {
id: string;
modelId: string;
};
export function defaultCanvasLocalEditConfig(): CanvasLocalEditConfig {
return {
modelId: "",
scaleAdjustModelId: "",
};
}
function normalizeModelRef(value: unknown) {
return String(value || "").trim().slice(0, 128);
}
export function resolveCanvasLocalEditModelRef<
T extends CanvasLocalEditModelIdentity,
>(models: T[], value: unknown): T | null {
const modelRef = normalizeModelRef(value);
if (!modelRef) return null;
// New settings persist the database UUID so identically named runtime
// models from different providers cannot be confused. Keep modelId lookup
// as a compatibility path for settings saved before UUID persistence.
return (
models.find((model) => model.id === modelRef) ||
models.find((model) => model.modelId === modelRef) ||
null
);
}
export function normalizeCanvasLocalEditConfig(
value: unknown
): CanvasLocalEditConfig {
const defaults = defaultCanvasLocalEditConfig();
if (!value || typeof value !== "object" || Array.isArray(value)) {
return defaults;
}
const raw = value as Record<string, unknown>;
return {
modelId: normalizeModelRef(raw.modelId),
scaleAdjustModelId: normalizeModelRef(raw.scaleAdjustModelId),
};
}