log:简化启动时log
This commit is contained in:
@@ -130,7 +130,7 @@ export function Layout({ children }: LayoutProps) {
|
|||||||
key="settings-sidebar"
|
key="settings-sidebar"
|
||||||
className="relative z-40 hidden shrink-0 lg:block"
|
className="relative z-40 hidden shrink-0 lg:block"
|
||||||
initial={{ width: 0, opacity: 0 }}
|
initial={{ width: 0, opacity: 0 }}
|
||||||
animate={{ width: sidebarOpen ? 224 : 64, opacity: 1 }}
|
animate={{ width: sidebarOpen ? 208 : 64, opacity: 1 }}
|
||||||
exit={{ width: 0, opacity: 0 }}
|
exit={{ width: 0, opacity: 0 }}
|
||||||
transition={{
|
transition={{
|
||||||
type: 'spring',
|
type: 'spring',
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ export function Sidebar({
|
|||||||
'fixed inset-y-0 left-0 z-50 isolate flex flex-col border-r transition-all duration-300 lg:relative lg:z-0 lg:h-full',
|
'fixed inset-y-0 left-0 z-50 isolate flex flex-col border-r transition-all duration-300 lg:relative lg:z-0 lg:h-full',
|
||||||
inheritsPageBackground ? 'bg-transparent' : 'bg-card',
|
inheritsPageBackground ? 'bg-transparent' : 'bg-card',
|
||||||
// 移动端始终显示完整宽度,桌面端根据 sidebarOpen 切换
|
// 移动端始终显示完整宽度,桌面端根据 sidebarOpen 切换
|
||||||
'w-56 lg:w-auto',
|
'w-52 lg:w-auto',
|
||||||
sidebarOpen ? 'lg:w-56' : 'lg:w-16',
|
sidebarOpen ? 'lg:w-52' : 'lg:w-16',
|
||||||
mobileMenuOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0'
|
mobileMenuOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0'
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -183,7 +183,7 @@
|
|||||||
--layout-space-lg: 1.5rem;
|
--layout-space-lg: 1.5rem;
|
||||||
--layout-space-xl: 2rem;
|
--layout-space-xl: 2rem;
|
||||||
--layout-space-2xl: 3rem;
|
--layout-space-2xl: 3rem;
|
||||||
--layout-sidebar-width: 14rem;
|
--layout-sidebar-width: 13rem;
|
||||||
--layout-header-height: 3.5rem;
|
--layout-header-height: 3.5rem;
|
||||||
--layout-max-content-width: 1280px;
|
--layout-max-content-width: 1280px;
|
||||||
|
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ export const defaultLightTokens: ThemeTokens = {
|
|||||||
'space-lg': '1.5rem',
|
'space-lg': '1.5rem',
|
||||||
'space-xl': '2rem',
|
'space-xl': '2rem',
|
||||||
'space-2xl': '3rem',
|
'space-2xl': '3rem',
|
||||||
'sidebar-width': '16rem',
|
'sidebar-width': '13rem',
|
||||||
'header-height': '3.5rem',
|
'header-height': '3.5rem',
|
||||||
'max-content-width': '1280px',
|
'max-content-width': '1280px',
|
||||||
},
|
},
|
||||||
@@ -320,7 +320,7 @@ export const defaultDarkTokens: ThemeTokens = {
|
|||||||
'space-lg': '1.5rem',
|
'space-lg': '1.5rem',
|
||||||
'space-xl': '2rem',
|
'space-xl': '2rem',
|
||||||
'space-2xl': '3rem',
|
'space-2xl': '3rem',
|
||||||
'sidebar-width': '16rem',
|
'sidebar-width': '13rem',
|
||||||
'header-height': '3.5rem',
|
'header-height': '3.5rem',
|
||||||
'max-content-width': '1280px',
|
'max-content-width': '1280px',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -113,22 +113,6 @@ export const FeaturesSection = React.memo(function FeaturesSection({
|
|||||||
记忆检索过程中是否启用黑话识别
|
记忆检索过程中是否启用黑话识别
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div className="flex items-center space-x-2">
|
|
||||||
<Switch
|
|
||||||
id="global_memory"
|
|
||||||
checked={memoryConfig.global_memory ?? false}
|
|
||||||
onCheckedChange={(checked) =>
|
|
||||||
onMemoryChange({ ...memoryConfig, global_memory: checked })
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
<Label htmlFor="global_memory" className="cursor-pointer">
|
|
||||||
全局记忆查询
|
|
||||||
</Label>
|
|
||||||
</div>
|
|
||||||
<p className="text-xs text-muted-foreground -mt-2">
|
|
||||||
允许记忆检索在所有聊天记录中进行全局查询(忽略当前聊天流)
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{/* 聊天历史总结配置 */}
|
{/* 聊天历史总结配置 */}
|
||||||
<div className="border-t pt-4 mt-4">
|
<div className="border-t pt-4 mt-4">
|
||||||
<h4 className="text-sm font-semibold mb-3">聊天历史总结配置</h4>
|
<h4 className="text-sm font-semibold mb-3">聊天历史总结配置</h4>
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ export interface MemoryConfig {
|
|||||||
max_agent_iterations: number
|
max_agent_iterations: number
|
||||||
agent_timeout_seconds: number
|
agent_timeout_seconds: number
|
||||||
enable_jargon_detection: boolean
|
enable_jargon_detection: boolean
|
||||||
global_memory: boolean
|
|
||||||
chat_history_topic_check_message_threshold: number
|
chat_history_topic_check_message_threshold: number
|
||||||
chat_history_topic_check_time_hours: number
|
chat_history_topic_check_time_hours: number
|
||||||
chat_history_topic_check_min_messages: number
|
chat_history_topic_check_min_messages: number
|
||||||
|
|||||||
@@ -605,12 +605,12 @@ export function AppearanceTab() {
|
|||||||
<div className="flex justify-between">
|
<div className="flex justify-between">
|
||||||
<Label>{t('settings.appearance.sidebarWidthLabel')}</Label>
|
<Label>{t('settings.appearance.sidebarWidthLabel')}</Label>
|
||||||
<span className="text-sm text-muted-foreground">
|
<span className="text-sm text-muted-foreground">
|
||||||
{getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '16rem')}
|
{getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '13rem')}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<Slider
|
<Slider
|
||||||
defaultValue={[16]}
|
defaultValue={[16]}
|
||||||
value={[parseFloat(getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '16'))]}
|
value={[parseFloat(getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '13'))]}
|
||||||
min={12}
|
min={12}
|
||||||
max={24}
|
max={24}
|
||||||
step={0.5}
|
step={0.5}
|
||||||
|
|||||||
@@ -60,10 +60,10 @@ class EmbeddingAPIAdapter:
|
|||||||
self._total_time = 0.0
|
self._total_time = 0.0
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"EmbeddingAPIAdapter 初始化: "
|
"Embedding 初始化: "
|
||||||
f"batch_size={self.batch_size}, "
|
f"batch={self.batch_size}, "
|
||||||
f"max_concurrent={self.max_concurrent}, "
|
f"concurrent={self.max_concurrent}, "
|
||||||
f"configured_dim={self.default_dimension}, "
|
f"dim={self.default_dimension}, "
|
||||||
f"model={self.model_name}"
|
f"model={self.model_name}"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -258,10 +258,10 @@ class EmbeddingAPIAdapter:
|
|||||||
if cached_dimension is not None:
|
if cached_dimension is not None:
|
||||||
self._dimension = int(cached_dimension)
|
self._dimension = int(cached_dimension)
|
||||||
self._dimension_detected = True
|
self._dimension_detected = True
|
||||||
logger.info(f"嵌入维度命中进程缓存: {self._dimension}")
|
logger.debug(f"嵌入维度命中进程缓存: {self._dimension}")
|
||||||
return self._dimension
|
return self._dimension
|
||||||
|
|
||||||
logger.info("正在检测嵌入模型维度...")
|
logger.info("检测嵌入维度...")
|
||||||
try:
|
try:
|
||||||
target_dim = self.default_dimension
|
target_dim = self.default_dimension
|
||||||
logger.debug(f"尝试请求指定维度: {target_dim}")
|
logger.debug(f"尝试请求指定维度: {target_dim}")
|
||||||
@@ -269,7 +269,7 @@ class EmbeddingAPIAdapter:
|
|||||||
if test_embedding and isinstance(test_embedding, list):
|
if test_embedding and isinstance(test_embedding, list):
|
||||||
detected_dim = len(test_embedding)
|
detected_dim = len(test_embedding)
|
||||||
if detected_dim == target_dim:
|
if detected_dim == target_dim:
|
||||||
logger.info(f"嵌入维度检测成功 (匹配 configured/requested): {detected_dim}")
|
logger.info(f"嵌入维度: {detected_dim}")
|
||||||
else:
|
else:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"requested_dimension={target_dim} 但模型返回 detected_dimension={detected_dim},将使用真实输出维度"
|
f"requested_dimension={target_dim} 但模型返回 detected_dimension={detected_dim},将使用真实输出维度"
|
||||||
@@ -288,7 +288,7 @@ class EmbeddingAPIAdapter:
|
|||||||
self._dimension = detected_dim
|
self._dimension = detected_dim
|
||||||
self._dimension_detected = True
|
self._dimension_detected = True
|
||||||
self._GLOBAL_DIMENSION_CACHE[cache_key] = int(detected_dim)
|
self._GLOBAL_DIMENSION_CACHE[cache_key] = int(detected_dim)
|
||||||
logger.info(f"嵌入维度检测成功 (自然维度): {detected_dim}")
|
logger.info(f"嵌入维度: {detected_dim} (自然输出)")
|
||||||
return detected_dim
|
return detected_dim
|
||||||
logger.warning(f"嵌入维度检测失败,使用 configured_dimension: {self.default_dimension}")
|
logger.warning(f"嵌入维度检测失败,使用 configured_dimension: {self.default_dimension}")
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ class DualPathRetriever:
|
|||||||
config=self.config.graph_recall,
|
config=self.config.graph_recall,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.info(
|
logger.debug(
|
||||||
f"DualPathRetriever 初始化: "
|
f"DualPathRetriever 初始化: "
|
||||||
f"strategy={self.config.retrieval_strategy.value}, "
|
f"strategy={self.config.retrieval_strategy.value}, "
|
||||||
f"top_k_para={self.config.top_k_paragraphs}, "
|
f"top_k_para={self.config.top_k_paragraphs}, "
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class PersonalizedPageRank:
|
|||||||
self._total_iterations = 0
|
self._total_iterations = 0
|
||||||
self._convergence_history: List[int] = []
|
self._convergence_history: List[int] = []
|
||||||
|
|
||||||
logger.info(
|
logger.debug(
|
||||||
f"PersonalizedPageRank 初始化: "
|
f"PersonalizedPageRank 初始化: "
|
||||||
f"alpha={self.config.alpha}, "
|
f"alpha={self.config.alpha}, "
|
||||||
f"max_iter={self.config.max_iter}"
|
f"max_iter={self.config.max_iter}"
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ class SparseBM25Index:
|
|||||||
self._conn = conn
|
self._conn = conn
|
||||||
self._loaded = True
|
self._loaded = True
|
||||||
self._prepare_tokenizer()
|
self._prepare_tokenizer()
|
||||||
logger.info(
|
logger.debug(
|
||||||
"SparseBM25Index loaded: "
|
"SparseBM25Index loaded: "
|
||||||
f"backend=fts5, tokenizer={self.config.tokenizer_mode}, mode={self.config.mode}"
|
f"backend=fts5, tokenizer={self.config.tokenizer_mode}, mode={self.config.mode}"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ class DynamicThresholdFilter:
|
|||||||
self._total_processed = 0
|
self._total_processed = 0
|
||||||
self._threshold_history: List[float] = []
|
self._threshold_history: List[float] = []
|
||||||
|
|
||||||
logger.info(
|
logger.debug(
|
||||||
f"DynamicThresholdFilter 初始化: "
|
f"DynamicThresholdFilter 初始化: "
|
||||||
f"method={self.config.method.value}, "
|
f"method={self.config.method.value}, "
|
||||||
f"min_threshold={self.config.min_threshold}"
|
f"min_threshold={self.config.min_threshold}"
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ async def initialize_storage_async(plugin: Any) -> None:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
detected_dimension = await plugin.embedding_manager._detect_dimension()
|
detected_dimension = await plugin.embedding_manager._detect_dimension()
|
||||||
logger.info(f"嵌入维度检测成功: {detected_dimension}")
|
logger.info(f"嵌入维度: {detected_dimension}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"嵌入维度检测失败: {e},使用默认值")
|
logger.warning(f"嵌入维度检测失败: {e},使用默认值")
|
||||||
detected_dimension = plugin.embedding_manager.default_dimension
|
detected_dimension = plugin.embedding_manager.default_dimension
|
||||||
@@ -194,11 +194,11 @@ async def initialize_storage_async(plugin: Any) -> None:
|
|||||||
matrix_format=matrix_format,
|
matrix_format=matrix_format,
|
||||||
data_dir=data_dir / "graph",
|
data_dir=data_dir / "graph",
|
||||||
)
|
)
|
||||||
logger.info("图存储初始化完成")
|
logger.debug("图存储初始化完成")
|
||||||
|
|
||||||
plugin.metadata_store = MetadataStore(data_dir=data_dir / "metadata")
|
plugin.metadata_store = MetadataStore(data_dir=data_dir / "metadata")
|
||||||
plugin.metadata_store.connect()
|
plugin.metadata_store.connect()
|
||||||
logger.info("元数据存储初始化完成")
|
logger.debug("元数据存储初始化完成")
|
||||||
|
|
||||||
plugin.relation_write_service = RelationWriteService(
|
plugin.relation_write_service = RelationWriteService(
|
||||||
metadata_store=plugin.metadata_store,
|
metadata_store=plugin.metadata_store,
|
||||||
@@ -233,7 +233,7 @@ async def initialize_storage_async(plugin: Any) -> None:
|
|||||||
if plugin.vector_store.has_data():
|
if plugin.vector_store.has_data():
|
||||||
try:
|
try:
|
||||||
plugin.vector_store.load()
|
plugin.vector_store.load()
|
||||||
logger.info(f"向量数据已加载,共 {plugin.vector_store.num_vectors} 个向量")
|
logger.debug(f"向量数据已加载,共 {plugin.vector_store.num_vectors} 个向量")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"加载向量数据失败: {e}")
|
logger.warning(f"加载向量数据失败: {e}")
|
||||||
|
|
||||||
@@ -259,7 +259,7 @@ async def initialize_storage_async(plugin: Any) -> None:
|
|||||||
if plugin.graph_store.has_data():
|
if plugin.graph_store.has_data():
|
||||||
try:
|
try:
|
||||||
plugin.graph_store.load()
|
plugin.graph_store.load()
|
||||||
logger.info(f"图数据已加载,共 {plugin.graph_store.num_nodes} 个节点")
|
logger.debug(f"图数据已加载,共 {plugin.graph_store.num_nodes} 个节点")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"加载图数据失败: {e}")
|
logger.warning(f"加载图数据失败: {e}")
|
||||||
|
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ def build_search_runtime(
|
|||||||
)
|
)
|
||||||
runtime.threshold_filter = DynamicThresholdFilter(threshold_config)
|
runtime.threshold_filter = DynamicThresholdFilter(threshold_config)
|
||||||
runtime.error = ""
|
runtime.error = ""
|
||||||
log.info(f"{prefix_text}[{owner}] 检索运行时初始化完成")
|
log.info(f"{prefix_text}[{owner}] 检索运行时就绪")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
runtime.retriever = None
|
runtime.retriever = None
|
||||||
runtime.threshold_filter = None
|
runtime.threshold_filter = None
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ class GraphStore:
|
|||||||
# V5: 简单的异步锁 (实际上 asyncio 环境下单线程主循环可能不需要,但为了安全保留)
|
# V5: 简单的异步锁 (实际上 asyncio 环境下单线程主循环可能不需要,但为了安全保留)
|
||||||
self._lock = asyncio.Lock()
|
self._lock = asyncio.Lock()
|
||||||
|
|
||||||
logger.info(f"GraphStore 初始化: format={matrix_format}")
|
logger.debug(f"图存储初始化: format={matrix_format}")
|
||||||
|
|
||||||
def _canonicalize(self, node: str) -> str:
|
def _canonicalize(self, node: str) -> str:
|
||||||
"""规范化节点名称 (用于去重和内部索引)"""
|
"""规范化节点名称 (用于去重和内部索引)"""
|
||||||
@@ -1317,8 +1317,8 @@ class GraphStore:
|
|||||||
|
|
||||||
self._adjacency_dirty = True
|
self._adjacency_dirty = True
|
||||||
logger.info(
|
logger.info(
|
||||||
f"图存储已加载: {len(self._nodes)} 个节点, "
|
f"图存储已加载: 节点={len(self._nodes)}, "
|
||||||
f"{self._adjacency.nnz if self._adjacency is not None else 0} 条边"
|
f"边={self._adjacency.nnz if self._adjacency is not None else 0}"
|
||||||
)
|
)
|
||||||
|
|
||||||
def _expand_adjacency_matrix(self, added_nodes: int) -> None:
|
def _expand_adjacency_matrix(self, added_nodes: int) -> None:
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class MetadataStore:
|
|||||||
self._is_initialized = False
|
self._is_initialized = False
|
||||||
self._db_path: Optional[Path] = None
|
self._db_path: Optional[Path] = None
|
||||||
|
|
||||||
logger.info(f"MetadataStore 初始化: db={db_name}")
|
logger.debug(f"元数据存储初始化: db={db_name}")
|
||||||
|
|
||||||
def connect(
|
def connect(
|
||||||
self,
|
self,
|
||||||
@@ -114,7 +114,7 @@ class MetadataStore:
|
|||||||
self._conn.execute("PRAGMA temp_store=MEMORY")
|
self._conn.execute("PRAGMA temp_store=MEMORY")
|
||||||
self._conn.execute("PRAGMA foreign_keys = ON") # 开启外键约束支持级联删除
|
self._conn.execute("PRAGMA foreign_keys = ON") # 开启外键约束支持级联删除
|
||||||
|
|
||||||
logger.info(f"连接到数据库: {db_path}")
|
logger.info(f"数据库已连接: {db_path}")
|
||||||
|
|
||||||
# 初始化或校验 schema
|
# 初始化或校验 schema
|
||||||
if not self._is_initialized:
|
if not self._is_initialized:
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ class VectorStore:
|
|||||||
# Thread safety lock
|
# Thread safety lock
|
||||||
self._lock = threading.RLock()
|
self._lock = threading.RLock()
|
||||||
|
|
||||||
logger.info(f"VectorStore Init: dim={dimension}, SQ8 Mode, Append-Only Storage")
|
logger.info(f"向量存储初始化: dim={dimension}, mode=SQ8")
|
||||||
|
|
||||||
def _init_index(self):
|
def _init_index(self):
|
||||||
"""初始化空的 Faiss 索引"""
|
"""初始化空的 Faiss 索引"""
|
||||||
@@ -379,7 +379,7 @@ class VectorStore:
|
|||||||
预热状态摘要
|
预热状态摘要
|
||||||
"""
|
"""
|
||||||
started = time.perf_counter()
|
started = time.perf_counter()
|
||||||
logger.info(f"metric.vector_index_prewarm_started=1 force_train={bool(force_train)}")
|
logger.debug(f"metric.vector_index_prewarm_started=1 force_train={bool(force_train)}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with self._lock:
|
with self._lock:
|
||||||
@@ -435,7 +435,7 @@ class VectorStore:
|
|||||||
)
|
)
|
||||||
return summary
|
return summary
|
||||||
|
|
||||||
logger.info(
|
logger.debug(
|
||||||
"metric.vector_index_prewarm_success=1 "
|
"metric.vector_index_prewarm_success=1 "
|
||||||
f"metric.vector_index_prewarm_duration_ms={summary['duration_ms']:.2f} "
|
f"metric.vector_index_prewarm_duration_ms={summary['duration_ms']:.2f} "
|
||||||
f"trained={summary['trained']} "
|
f"trained={summary['trained']} "
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ MODEL_CONFIG_PATH: Path = (CONFIG_DIR / "model_config.toml").resolve().absolute(
|
|||||||
LEGACY_ENV_PATH: Path = (PROJECT_ROOT / ".env").resolve().absolute()
|
LEGACY_ENV_PATH: Path = (PROJECT_ROOT / ".env").resolve().absolute()
|
||||||
A_MEMORIX_LEGACY_CONFIG_PATH: Path = (CONFIG_DIR / "a_memorix.toml").resolve().absolute()
|
A_MEMORIX_LEGACY_CONFIG_PATH: Path = (CONFIG_DIR / "a_memorix.toml").resolve().absolute()
|
||||||
MMC_VERSION: str = "1.0.0-pre.11"
|
MMC_VERSION: str = "1.0.0-pre.11"
|
||||||
CONFIG_VERSION: str = "8.10.7"
|
CONFIG_VERSION: str = "8.10.8"
|
||||||
MODEL_CONFIG_VERSION: str = "1.15.3"
|
MODEL_CONFIG_VERSION: str = "1.15.3"
|
||||||
|
|
||||||
logger = get_logger("config")
|
logger = get_logger("config")
|
||||||
|
|||||||
@@ -392,11 +392,6 @@ def try_migrate_legacy_bot_config_dict(data: dict[str, Any]) -> MigrationResult:
|
|||||||
migrated_any = True
|
migrated_any = True
|
||||||
reasons.append("visual.visual_style_removed")
|
reasons.append("visual.visual_style_removed")
|
||||||
|
|
||||||
memory = _as_dict(data.get("memory"))
|
|
||||||
if memory is not None and _migrate_target_item_list(memory, "global_memory_blacklist"):
|
|
||||||
migrated_any = True
|
|
||||||
reasons.append("memory.global_memory_blacklist")
|
|
||||||
|
|
||||||
keyword_reaction = _as_dict(data.get("keyword_reaction"))
|
keyword_reaction = _as_dict(data.get("keyword_reaction"))
|
||||||
if keyword_reaction is not None:
|
if keyword_reaction is not None:
|
||||||
if _drop_empty_keyword_rules(keyword_reaction, "keyword_rules"):
|
if _drop_empty_keyword_rules(keyword_reaction, "keyword_rules"):
|
||||||
|
|||||||
@@ -472,26 +472,6 @@ class MemoryConfig(ConfigBase):
|
|||||||
|
|
||||||
__ui_parent__ = "a_memorix"
|
__ui_parent__ = "a_memorix"
|
||||||
|
|
||||||
|
|
||||||
global_memory: bool = Field(
|
|
||||||
default=False,
|
|
||||||
json_schema_extra={
|
|
||||||
"x-widget": "switch",
|
|
||||||
"x-icon": "globe",
|
|
||||||
},
|
|
||||||
)
|
|
||||||
"""是否允许记忆检索在聊天记录中进行全局查询(忽略当前chat_id,仅对 search_chat_history 等工具生效)"""
|
|
||||||
|
|
||||||
global_memory_blacklist: list[TargetItem] = Field(
|
|
||||||
default_factory=lambda: [],
|
|
||||||
json_schema_extra={
|
|
||||||
"x-widget": "custom",
|
|
||||||
"x-icon": "shield-off",
|
|
||||||
},
|
|
||||||
)
|
|
||||||
"""_wrap_全局记忆黑名单,当启用全局记忆时,不将特定聊天流纳入检索"""
|
|
||||||
|
|
||||||
|
|
||||||
enable_memory_query_tool: bool = Field(
|
enable_memory_query_tool: bool = Field(
|
||||||
default=True,
|
default=True,
|
||||||
json_schema_extra={
|
json_schema_extra={
|
||||||
|
|||||||
Reference in New Issue
Block a user