mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 14:20:35 +08:00
feat: add maintenance concurrency modes
This commit is contained in:
@@ -1162,6 +1162,24 @@
|
||||
<div class="bme-cap-title">生成后提取</div>
|
||||
<div class="bme-cap-desc">AI 回复生成后自动抽取新记忆并写入图谱。</div>
|
||||
</label>
|
||||
<div
|
||||
class="bme-capability-card bme-capability-card-mode"
|
||||
id="bme-maintenance-mode-card"
|
||||
role="group"
|
||||
aria-label="维护执行模式"
|
||||
title="1 严格串行;2 均衡加速;3 快速后台(最终一致)"
|
||||
>
|
||||
<div class="bme-cap-header">
|
||||
<span class="bme-cap-icon"><i class="fa-solid fa-gauge-high"></i></span>
|
||||
<div class="bme-mode-segmented" id="bme-setting-maintenance-execution-mode">
|
||||
<button type="button" data-mode="strict" aria-label="1 严格串行">1</button>
|
||||
<button type="button" data-mode="balanced" aria-label="2 均衡加速">2</button>
|
||||
<button type="button" data-mode="fast" aria-label="3 快速后台">3</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bme-cap-title">并发模式</div>
|
||||
<div class="bme-cap-desc" id="bme-maintenance-mode-desc">1 严格串行:全部同步执行。</div>
|
||||
</div>
|
||||
<label class="bme-capability-card" for="bme-setting-consolidation-enabled">
|
||||
<div class="bme-cap-header">
|
||||
<span class="bme-cap-icon"><i class="fa-solid fa-code-merge"></i></span>
|
||||
|
||||
65
ui/panel.js
65
ui/panel.js
@@ -59,6 +59,10 @@ import {
|
||||
getVectorIndexStats,
|
||||
} from "../vector/vector-index.js";
|
||||
import { buildAuthorityConsistencyRepairPlan } from "../maintenance/authority-consistency.js";
|
||||
import {
|
||||
getMaintenanceExecutionModeLevel,
|
||||
normalizeMaintenanceExecutionMode,
|
||||
} from "../runtime/concurrency.js";
|
||||
|
||||
let defaultPromptCache = null;
|
||||
|
||||
@@ -4453,6 +4457,53 @@ function _getSelectedGraphNode(graph = _getGraph?.()) {
|
||||
return graph.nodes.find((node) => String(node?.id || "") === nodeId) || null;
|
||||
}
|
||||
|
||||
function _getMaintenanceExecutionModeUiMeta(modeValue = "strict") {
|
||||
const mode = normalizeMaintenanceExecutionMode(modeValue);
|
||||
switch (mode) {
|
||||
case "balanced":
|
||||
return {
|
||||
mode,
|
||||
title: "2 均衡加速",
|
||||
desc: "2 均衡加速:提取主链同步,只读查询限流并发,维护任务逐步后台化。",
|
||||
};
|
||||
case "fast":
|
||||
return {
|
||||
mode,
|
||||
title: "3 快速后台",
|
||||
desc: "3 快速后台:核心写入优先完成,其余维护后台最终一致。",
|
||||
};
|
||||
case "strict":
|
||||
default:
|
||||
return {
|
||||
mode: "strict",
|
||||
title: "1 严格串行",
|
||||
desc: "1 严格串行:全部同步执行,稳定优先。",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function _refreshMaintenanceExecutionModeUi(settings = _getSettings?.() || {}) {
|
||||
const meta = _getMaintenanceExecutionModeUiMeta(
|
||||
settings.maintenanceExecutionMode || "strict",
|
||||
);
|
||||
const segmented = document.getElementById("bme-setting-maintenance-execution-mode");
|
||||
const desc = document.getElementById("bme-maintenance-mode-desc");
|
||||
const card = document.getElementById("bme-maintenance-mode-card");
|
||||
const level = getMaintenanceExecutionModeLevel(meta.mode);
|
||||
if (desc) desc.textContent = meta.desc;
|
||||
if (card) {
|
||||
card.dataset.mode = meta.mode;
|
||||
card.title = `${meta.title};1 严格串行 / 2 均衡加速 / 3 快速后台(最终一致)`;
|
||||
}
|
||||
segmented?.querySelectorAll("button[data-mode]").forEach((button) => {
|
||||
const active =
|
||||
normalizeMaintenanceExecutionMode(button.dataset.mode) === meta.mode;
|
||||
button.classList.toggle("is-active", active);
|
||||
button.setAttribute("aria-pressed", String(active));
|
||||
button.title = active ? `${level} · ${meta.title}` : button.getAttribute("aria-label") || "";
|
||||
});
|
||||
}
|
||||
|
||||
function _getCognitionOwnerCollection(graph) {
|
||||
return typeof listKnowledgeOwners === "function" ? listKnowledgeOwners(graph) : [];
|
||||
}
|
||||
@@ -7344,6 +7395,7 @@ function _refreshConfigTab() {
|
||||
"bme-setting-extract-auto-enabled",
|
||||
settings.extractAutoEnabled ?? true,
|
||||
);
|
||||
_refreshMaintenanceExecutionModeUi(settings);
|
||||
_setCheckboxValue("bme-setting-recall-llm", settings.recallEnableLLM ?? true);
|
||||
_setCheckboxValue(
|
||||
"bme-setting-recall-vector-prefilter-enabled",
|
||||
@@ -7829,6 +7881,19 @@ function _bindConfigControls() {
|
||||
bindCheckbox("bme-setting-extract-auto-enabled", (checked) => {
|
||||
_patchSettings({ extractAutoEnabled: checked });
|
||||
});
|
||||
const maintenanceModeEl = document.getElementById(
|
||||
"bme-setting-maintenance-execution-mode",
|
||||
);
|
||||
if (maintenanceModeEl && maintenanceModeEl.dataset.bmeBound !== "true") {
|
||||
maintenanceModeEl.addEventListener("click", (event) => {
|
||||
const button = event.target?.closest?.("button[data-mode]");
|
||||
if (!button) return;
|
||||
const mode = normalizeMaintenanceExecutionMode(button.dataset.mode);
|
||||
const settings = _patchSettings({ maintenanceExecutionMode: mode });
|
||||
_refreshMaintenanceExecutionModeUi(settings);
|
||||
});
|
||||
maintenanceModeEl.dataset.bmeBound = "true";
|
||||
}
|
||||
bindCheckbox("bme-setting-recall-llm", (checked) => {
|
||||
_patchSettings({ recallEnableLLM: checked });
|
||||
_refreshGuardedConfigStates();
|
||||
|
||||
Reference in New Issue
Block a user