Files
geo/apps/admin-web/src/lib/kol-card-config.ts
T

39 lines
1.3 KiB
TypeScript
Raw Normal View History

import type { KolCardConfig } from "@geo/shared-types";
const DEFAULT_ALLOW_WEB_SEARCH = false;
const DEFAULT_ALLOW_USER_KNOWLEDGE = true;
function asRecord(value: unknown): Record<string, unknown> {
if (!value || typeof value !== "object" || Array.isArray(value)) {
return {};
}
return value as Record<string, unknown>;
}
function booleanFromUnknown(value: unknown): boolean | undefined {
return typeof value === "boolean" ? value : undefined;
}
export function parseKolCardConfig(value: unknown): Required<Pick<KolCardConfig, "allow_web_search" | "allow_user_knowledge">> {
const record = asRecord(value);
return {
allow_web_search: booleanFromUnknown(record.allow_web_search) ?? DEFAULT_ALLOW_WEB_SEARCH,
allow_user_knowledge:
booleanFromUnknown(record.allow_user_knowledge) ?? DEFAULT_ALLOW_USER_KNOWLEDGE,
};
}
export function mergeKolCardConfig(base: unknown, overrides: KolCardConfig): KolCardConfig {
const record = asRecord(base);
const parsed = parseKolCardConfig(record);
return {
...record,
...overrides,
allow_web_search:
booleanFromUnknown(overrides.allow_web_search) ?? parsed.allow_web_search,
allow_user_knowledge:
booleanFromUnknown(overrides.allow_user_knowledge) ?? parsed.allow_user_knowledge,
};
}