log:简化启动时log

This commit is contained in:
SengokuCola
2026-05-06 16:06:21 +08:00
parent 98294b39ad
commit 3bdc2a9f70
20 changed files with 35 additions and 77 deletions

View File

@@ -130,7 +130,7 @@ export function Layout({ children }: LayoutProps) {
key="settings-sidebar"
className="relative z-40 hidden shrink-0 lg:block"
initial={{ width: 0, opacity: 0 }}
animate={{ width: sidebarOpen ? 224 : 64, opacity: 1 }}
animate={{ width: sidebarOpen ? 208 : 64, opacity: 1 }}
exit={{ width: 0, opacity: 0 }}
transition={{
type: 'spring',

View File

@@ -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',
inheritsPageBackground ? 'bg-transparent' : 'bg-card',
// 移动端始终显示完整宽度,桌面端根据 sidebarOpen 切换
'w-56 lg:w-auto',
sidebarOpen ? 'lg:w-56' : 'lg:w-16',
'w-52 lg:w-auto',
sidebarOpen ? 'lg:w-52' : 'lg:w-16',
mobileMenuOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0'
)}
>

View File

@@ -183,7 +183,7 @@
--layout-space-lg: 1.5rem;
--layout-space-xl: 2rem;
--layout-space-2xl: 3rem;
--layout-sidebar-width: 14rem;
--layout-sidebar-width: 13rem;
--layout-header-height: 3.5rem;
--layout-max-content-width: 1280px;

View File

@@ -225,7 +225,7 @@ export const defaultLightTokens: ThemeTokens = {
'space-lg': '1.5rem',
'space-xl': '2rem',
'space-2xl': '3rem',
'sidebar-width': '16rem',
'sidebar-width': '13rem',
'header-height': '3.5rem',
'max-content-width': '1280px',
},
@@ -320,7 +320,7 @@ export const defaultDarkTokens: ThemeTokens = {
'space-lg': '1.5rem',
'space-xl': '2rem',
'space-2xl': '3rem',
'sidebar-width': '16rem',
'sidebar-width': '13rem',
'header-height': '3.5rem',
'max-content-width': '1280px',
},

View File

@@ -113,22 +113,6 @@ export const FeaturesSection = React.memo(function FeaturesSection({
</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">
<h4 className="text-sm font-semibold mb-3"></h4>

View File

@@ -84,7 +84,6 @@ export interface MemoryConfig {
max_agent_iterations: number
agent_timeout_seconds: number
enable_jargon_detection: boolean
global_memory: boolean
chat_history_topic_check_message_threshold: number
chat_history_topic_check_time_hours: number
chat_history_topic_check_min_messages: number

View File

@@ -605,12 +605,12 @@ export function AppearanceTab() {
<div className="flex justify-between">
<Label>{t('settings.appearance.sidebarWidthLabel')}</Label>
<span className="text-sm text-muted-foreground">
{getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '16rem')}
{getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '13rem')}
</span>
</div>
<Slider
defaultValue={[16]}
value={[parseFloat(getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '16'))]}
value={[parseFloat(getTokenValue(themeConfig.tokenOverrides, 'layout', 'sidebar-width', '13'))]}
min={12}
max={24}
step={0.5}

View File

@@ -60,10 +60,10 @@ class EmbeddingAPIAdapter:
self._total_time = 0.0
logger.info(
"EmbeddingAPIAdapter 初始化: "
f"batch_size={self.batch_size}, "
f"max_concurrent={self.max_concurrent}, "
f"configured_dim={self.default_dimension}, "
"Embedding 初始化: "
f"batch={self.batch_size}, "
f"concurrent={self.max_concurrent}, "
f"dim={self.default_dimension}, "
f"model={self.model_name}"
)
@@ -258,10 +258,10 @@ class EmbeddingAPIAdapter:
if cached_dimension is not None:
self._dimension = int(cached_dimension)
self._dimension_detected = True
logger.info(f"嵌入维度命中进程缓存: {self._dimension}")
logger.debug(f"嵌入维度命中进程缓存: {self._dimension}")
return self._dimension
logger.info("正在检测嵌入模型维度...")
logger.info("检测嵌入维度...")
try:
target_dim = self.default_dimension
logger.debug(f"尝试请求指定维度: {target_dim}")
@@ -269,7 +269,7 @@ class EmbeddingAPIAdapter:
if test_embedding and isinstance(test_embedding, list):
detected_dim = len(test_embedding)
if detected_dim == target_dim:
logger.info(f"嵌入维度检测成功 (匹配 configured/requested): {detected_dim}")
logger.info(f"嵌入维度: {detected_dim}")
else:
logger.warning(
f"requested_dimension={target_dim} 但模型返回 detected_dimension={detected_dim},将使用真实输出维度"
@@ -288,7 +288,7 @@ class EmbeddingAPIAdapter:
self._dimension = detected_dim
self._dimension_detected = True
self._GLOBAL_DIMENSION_CACHE[cache_key] = int(detected_dim)
logger.info(f"嵌入维度检测成功 (自然维度): {detected_dim}")
logger.info(f"嵌入维度: {detected_dim} (自然输出)")
return detected_dim
logger.warning(f"嵌入维度检测失败,使用 configured_dimension: {self.default_dimension}")
except Exception as exc:

View File

@@ -249,7 +249,7 @@ class DualPathRetriever:
config=self.config.graph_recall,
)
logger.info(
logger.debug(
f"DualPathRetriever 初始化: "
f"strategy={self.config.retrieval_strategy.value}, "
f"top_k_para={self.config.top_k_paragraphs}, "

View File

@@ -88,7 +88,7 @@ class PersonalizedPageRank:
self._total_iterations = 0
self._convergence_history: List[int] = []
logger.info(
logger.debug(
f"PersonalizedPageRank 初始化: "
f"alpha={self.config.alpha}, "
f"max_iter={self.config.max_iter}"

View File

@@ -122,7 +122,7 @@ class SparseBM25Index:
self._conn = conn
self._loaded = True
self._prepare_tokenizer()
logger.info(
logger.debug(
"SparseBM25Index loaded: "
f"backend=fts5, tokenizer={self.config.tokenizer_mode}, mode={self.config.mode}"
)

View File

@@ -99,7 +99,7 @@ class DynamicThresholdFilter:
self._total_processed = 0
self._threshold_history: List[float] = []
logger.info(
logger.debug(
f"DynamicThresholdFilter 初始化: "
f"method={self.config.method.value}, "
f"min_threshold={self.config.min_threshold}"

View File

@@ -161,7 +161,7 @@ async def initialize_storage_async(plugin: Any) -> None:
try:
detected_dimension = await plugin.embedding_manager._detect_dimension()
logger.info(f"嵌入维度检测成功: {detected_dimension}")
logger.info(f"嵌入维度: {detected_dimension}")
except Exception as e:
logger.warning(f"嵌入维度检测失败: {e},使用默认值")
detected_dimension = plugin.embedding_manager.default_dimension
@@ -194,11 +194,11 @@ async def initialize_storage_async(plugin: Any) -> None:
matrix_format=matrix_format,
data_dir=data_dir / "graph",
)
logger.info("图存储初始化完成")
logger.debug("图存储初始化完成")
plugin.metadata_store = MetadataStore(data_dir=data_dir / "metadata")
plugin.metadata_store.connect()
logger.info("元数据存储初始化完成")
logger.debug("元数据存储初始化完成")
plugin.relation_write_service = RelationWriteService(
metadata_store=plugin.metadata_store,
@@ -233,7 +233,7 @@ async def initialize_storage_async(plugin: Any) -> None:
if plugin.vector_store.has_data():
try:
plugin.vector_store.load()
logger.info(f"向量数据已加载,共 {plugin.vector_store.num_vectors} 个向量")
logger.debug(f"向量数据已加载,共 {plugin.vector_store.num_vectors} 个向量")
except Exception as e:
logger.warning(f"加载向量数据失败: {e}")
@@ -259,7 +259,7 @@ async def initialize_storage_async(plugin: Any) -> None:
if plugin.graph_store.has_data():
try:
plugin.graph_store.load()
logger.info(f"图数据已加载,共 {plugin.graph_store.num_nodes} 个节点")
logger.debug(f"图数据已加载,共 {plugin.graph_store.num_nodes} 个节点")
except Exception as e:
logger.warning(f"加载图数据失败: {e}")

View File

@@ -222,7 +222,7 @@ def build_search_runtime(
)
runtime.threshold_filter = DynamicThresholdFilter(threshold_config)
runtime.error = ""
log.info(f"{prefix_text}[{owner}] 检索运行时初始化完成")
log.info(f"{prefix_text}[{owner}] 检索运行时就绪")
except Exception as e:
runtime.retriever = None
runtime.threshold_filter = None

View File

@@ -119,7 +119,7 @@ class GraphStore:
# V5: 简单的异步锁 (实际上 asyncio 环境下单线程主循环可能不需要,但为了安全保留)
self._lock = asyncio.Lock()
logger.info(f"GraphStore 初始化: format={matrix_format}")
logger.debug(f"图存储初始化: format={matrix_format}")
def _canonicalize(self, node: str) -> str:
"""规范化节点名称 (用于去重和内部索引)"""
@@ -1317,8 +1317,8 @@ class GraphStore:
self._adjacency_dirty = True
logger.info(
f"图存储已加载: {len(self._nodes)} 个节点, "
f"{self._adjacency.nnz if self._adjacency is not None else 0} 条边"
f"图存储已加载: 节点={len(self._nodes)}, "
f"边={self._adjacency.nnz if self._adjacency is not None else 0}"
)
def _expand_adjacency_matrix(self, added_nodes: int) -> None:

View File

@@ -72,7 +72,7 @@ class MetadataStore:
self._is_initialized = False
self._db_path: Optional[Path] = None
logger.info(f"MetadataStore 初始化: db={db_name}")
logger.debug(f"元数据存储初始化: db={db_name}")
def connect(
self,
@@ -114,7 +114,7 @@ class MetadataStore:
self._conn.execute("PRAGMA temp_store=MEMORY")
self._conn.execute("PRAGMA foreign_keys = ON") # 开启外键约束支持级联删除
logger.info(f"连接到数据库: {db_path}")
logger.info(f"数据库已连接: {db_path}")
# 初始化或校验 schema
if not self._is_initialized:

View File

@@ -108,7 +108,7 @@ class VectorStore:
# Thread safety lock
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):
"""初始化空的 Faiss 索引"""
@@ -379,7 +379,7 @@ class VectorStore:
预热状态摘要
"""
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:
with self._lock:
@@ -435,7 +435,7 @@ class VectorStore:
)
return summary
logger.info(
logger.debug(
"metric.vector_index_prewarm_success=1 "
f"metric.vector_index_prewarm_duration_ms={summary['duration_ms']:.2f} "
f"trained={summary['trained']} "

View File

@@ -57,7 +57,7 @@ MODEL_CONFIG_PATH: Path = (CONFIG_DIR / "model_config.toml").resolve().absolute(
LEGACY_ENV_PATH: Path = (PROJECT_ROOT / ".env").resolve().absolute()
A_MEMORIX_LEGACY_CONFIG_PATH: Path = (CONFIG_DIR / "a_memorix.toml").resolve().absolute()
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"
logger = get_logger("config")

View File

@@ -392,11 +392,6 @@ def try_migrate_legacy_bot_config_dict(data: dict[str, Any]) -> MigrationResult:
migrated_any = True
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"))
if keyword_reaction is not None:
if _drop_empty_keyword_rules(keyword_reaction, "keyword_rules"):

View File

@@ -472,26 +472,6 @@ class MemoryConfig(ConfigBase):
__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(
default=True,
json_schema_extra={