import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; import { dirname } from "node:path"; import type { WebUiPaths } from "../config/paths.ts"; export function readModelsConfig(paths: WebUiPaths): string { if (!existsSync(paths.modelsConfigFile)) return "{\n \"providers\": {}\n}\n"; return readFileSync(paths.modelsConfigFile, "utf8"); } export function writeModelsConfig(paths: WebUiPaths, content: string): void { let parsed: unknown; try { parsed = JSON.parse(content); } catch (err) { const message = err instanceof Error ? err.message : String(err); throw new Error(`models.json 不是有效的 JSON: ${message}`); } if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) { throw new Error("models.json 根节点必须是 JSON 对象"); } const formatted = `${JSON.stringify(parsed, null, 2)}\n`; mkdirSync(dirname(paths.modelsConfigFile), { recursive: true }); writeFileSync(paths.modelsConfigFile, formatted, "utf8"); }