Files
LittleWhiteBox/modules/story-summary/data/config.js

140 lines
4.3 KiB
JavaScript
Raw Normal View History

2026-01-26 01:16:35 +08:00
import { extension_settings } from "../../../../../../extensions.js";
import { EXT_ID } from "../../../core/constants.js";
import { xbLog } from "../../../core/debug-core.js";
import { CommonSettingStorage } from "../../../core/server-storage.js";
const MODULE_ID = "summaryConfig";
const SUMMARY_CONFIG_KEY = "storySummaryPanelConfig";
const DEFAULT_FILTER_RULES = [
{ start: "<think>", end: "</think>" },
{ start: "<thinking>", end: "</thinking>" },
{ start: "```", end: "```" },
];
2026-01-26 01:16:35 +08:00
export function getSettings() {
const ext = (extension_settings[EXT_ID] ||= {});
2026-01-26 01:16:35 +08:00
ext.storySummary ||= { enabled: true };
return ext;
}
export function getSummaryPanelConfig() {
const defaults = {
api: { provider: "st", url: "", key: "", model: "", modelCache: [] },
2026-01-26 01:16:35 +08:00
gen: { temperature: null, top_p: null, top_k: null, presence_penalty: null, frequency_penalty: null },
trigger: {
enabled: false,
interval: 20,
timing: "before_user",
role: "system",
2026-01-26 01:16:35 +08:00
useStream: true,
maxPerRun: 100,
wrapperHead: "",
wrapperTail: "",
2026-01-26 01:16:35 +08:00
forceInsertAtEnd: false,
},
textFilterRules: [...DEFAULT_FILTER_RULES],
2026-01-29 17:02:51 +08:00
vector: null,
2026-01-26 01:16:35 +08:00
};
2026-02-06 11:22:02 +08:00
2026-01-26 01:16:35 +08:00
try {
const raw = localStorage.getItem("summary_panel_config");
2026-01-26 01:16:35 +08:00
if (!raw) return defaults;
const parsed = JSON.parse(raw);
const textFilterRules = Array.isArray(parsed.textFilterRules)
? parsed.textFilterRules
: (Array.isArray(parsed.vector?.textFilterRules)
? parsed.vector.textFilterRules
: defaults.textFilterRules);
2026-01-26 01:16:35 +08:00
const result = {
api: { ...defaults.api, ...(parsed.api || {}) },
gen: { ...defaults.gen, ...(parsed.gen || {}) },
trigger: { ...defaults.trigger, ...(parsed.trigger || {}) },
textFilterRules,
vector: parsed.vector || null,
2026-01-26 01:16:35 +08:00
};
if (result.trigger.timing === "manual") result.trigger.enabled = false;
2026-01-26 01:16:35 +08:00
if (result.trigger.useStream === undefined) result.trigger.useStream = true;
return result;
} catch {
return defaults;
}
}
export function saveSummaryPanelConfig(config) {
try {
localStorage.setItem("summary_panel_config", JSON.stringify(config));
2026-01-26 01:16:35 +08:00
CommonSettingStorage.set(SUMMARY_CONFIG_KEY, config);
} catch (e) {
xbLog.error(MODULE_ID, "保存面板配置失败", e);
2026-01-26 01:16:35 +08:00
}
}
export function getVectorConfig() {
try {
const raw = localStorage.getItem("summary_panel_config");
2026-01-26 01:16:35 +08:00
if (!raw) return null;
2026-01-26 01:16:35 +08:00
const parsed = JSON.parse(raw);
2026-01-29 17:02:51 +08:00
const cfg = parsed.vector || null;
if (!cfg) return null;
2026-02-06 11:22:02 +08:00
// Keep vector side normalized to online + siliconflow.
cfg.engine = "online";
cfg.online = cfg.online || {};
cfg.online.provider = "siliconflow";
cfg.online.model = "BAAI/bge-m3";
2026-02-06 11:22:02 +08:00
2026-01-29 17:02:51 +08:00
return cfg;
2026-01-26 01:16:35 +08:00
} catch {
return null;
}
}
2026-01-29 17:02:51 +08:00
export function getTextFilterRules() {
const cfg = getSummaryPanelConfig();
return Array.isArray(cfg?.textFilterRules)
? cfg.textFilterRules
: DEFAULT_FILTER_RULES;
2026-01-29 17:02:51 +08:00
}
2026-01-26 01:16:35 +08:00
export function saveVectorConfig(vectorCfg) {
try {
const raw = localStorage.getItem("summary_panel_config") || "{}";
2026-01-26 01:16:35 +08:00
const parsed = JSON.parse(raw);
2026-02-06 11:22:02 +08:00
parsed.vector = {
enabled: !!vectorCfg?.enabled,
engine: "online",
2026-02-06 11:22:02 +08:00
online: {
provider: "siliconflow",
key: vectorCfg?.online?.key || "",
model: "BAAI/bge-m3",
2026-02-06 11:22:02 +08:00
},
};
localStorage.setItem("summary_panel_config", JSON.stringify(parsed));
2026-01-26 01:16:35 +08:00
CommonSettingStorage.set(SUMMARY_CONFIG_KEY, parsed);
} catch (e) {
xbLog.error(MODULE_ID, "保存向量配置失败", e);
2026-01-26 01:16:35 +08:00
}
}
export async function loadConfigFromServer() {
try {
const savedConfig = await CommonSettingStorage.get(SUMMARY_CONFIG_KEY, null);
if (savedConfig) {
localStorage.setItem("summary_panel_config", JSON.stringify(savedConfig));
xbLog.info(MODULE_ID, "已从服务端加载面板配置");
2026-01-26 01:16:35 +08:00
return savedConfig;
}
} catch (e) {
xbLog.warn(MODULE_ID, "加载面板配置失败", e);
2026-01-26 01:16:35 +08:00
}
return null;
}