Fix/writer memory bug (#326)

* [fix]Fix the bug

* [fix]Fix the bug

* [fix]Correct the direction indication.
This commit is contained in:
乐力齐
2026-02-05 13:50:04 +08:00
committed by GitHub
parent 46ed7e38bf
commit 07e698265e
3 changed files with 48 additions and 20 deletions

View File

@@ -79,7 +79,8 @@ async def add_memory_summary_statement_edges(summaries: List[MemorySummaryNode],
try: try:
edges: List[dict] = [] edges: List[dict] = []
for s in summaries: for s in summaries:
for chunk_id in getattr(s, "chunk_ids", []) or []: chunk_ids = getattr(s, "chunk_ids", []) or []
for chunk_id in chunk_ids:
edges.append({ edges.append({
"summary_id": s.id, "summary_id": s.id,
"chunk_id": chunk_id, "chunk_id": chunk_id,
@@ -91,12 +92,11 @@ async def add_memory_summary_statement_edges(summaries: List[MemorySummaryNode],
if not edges: if not edges:
return [] return []
result = await connector.execute_query( result = await connector.execute_query(
MEMORY_SUMMARY_STATEMENT_EDGE_SAVE, MEMORY_SUMMARY_STATEMENT_EDGE_SAVE,
edges=edges edges=edges
) )
created = [record.get("uuid") for record in result] if result else [] created = [record.get("uuid") for record in result] if result else []
return created return created
except Exception: except Exception as e:
return None return None

View File

@@ -217,8 +217,10 @@ async def add_memory_summary_nodes(summaries: List[MemorySummaryNode], connector
summaries=flattened summaries=flattened
) )
created_ids = [record.get("uuid") for record in result] created_ids = [record.get("uuid") for record in result]
print(f"Successfully saved {len(created_ids)} MemorySummary nodes to Neo4j")
return created_ids return created_ids
except Exception: except Exception as e:
print(f"Failed to save MemorySummary nodes to Neo4j: {e}")
return None return None

View File

@@ -5,42 +5,68 @@ Shared utilities for configuration handling to avoid circular imports.
""" """
from uuid import UUID from uuid import UUID
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
import uuid as uuid_module
def resolve_config_id(config_id: UUID | int|str, db: Session) -> UUID: def resolve_config_id(config_id: UUID | int | str, db: Session) -> UUID:
""" """
解析 config_id如果是整数则通过 config_id_old 查找对应的 UUID 解析 config_id支持 UUID、UUID字符串、整数等多种格式
Args: Args:
config_id: 配置IDUUID 或整数) config_id: 配置IDUUID、UUID字符串 整数)
db: 数据库会话 db: 数据库会话
Returns: Returns:
UUID: 解析后的配置ID UUID: 解析后的配置ID
Raises: Raises:
ValueError: 当找不到对应的配置时 ValueError: 当找不到对应的配置时或格式无效时
""" """
from app.models.memory_config_model import MemoryConfig from app.models.memory_config_model import MemoryConfig
if isinstance(config_id, UUID):
# 1. 如果已经是 UUID 类型,直接返回
if isinstance(config_id, UUID):
return config_id return config_id
if isinstance(config_id, str) and len(config_id)<=6:
memory_config = db.query(MemoryConfig).filter( # 2. 如果是字符串类型
MemoryConfig.config_id_old == int(config_id) if isinstance(config_id, str):
).first() config_id_stripped = config_id.strip()
print(memory_config)
if not memory_config: # 2.1 尝试解析为 UUID标准 UUID 字符串长度为 36
raise ValueError(f"STR 未找到 config_id_old={config_id} 对应的配置") try:
return memory_config.config_id return uuid_module.UUID(config_id_stripped)
except ValueError:
pass
# 2.2 尝试解析为整数(用于查询 config_id_old
try:
old_id = int(config_id_stripped)
if old_id > 0:
memory_config = db.query(MemoryConfig).filter(
MemoryConfig.config_id_old == old_id
).first()
if not memory_config:
raise ValueError(f"未找到 config_id_old={old_id} 对应的配置")
return memory_config.config_id
except ValueError:
pass
# 2.3 无法解析的字符串格式
raise ValueError(f"无效的 config_id 格式: '{config_id}'(必须是 UUID 或正整数)")
# 3. 如果是整数类型,通过 config_id_old 查找
if isinstance(config_id, int): if isinstance(config_id, int):
if config_id <= 0:
raise ValueError(f"config_id 必须是正整数: {config_id}")
memory_config = db.query(MemoryConfig).filter( memory_config = db.query(MemoryConfig).filter(
MemoryConfig.config_id_old == config_id MemoryConfig.config_id_old == config_id
).first() ).first()
if not memory_config: if not memory_config:
raise ValueError(f"INT 未找到 config_id_old={config_id} 对应的配置") raise ValueError(f"未找到 config_id_old={config_id} 对应的配置")
return memory_config.config_id return memory_config.config_id
return config_id # 4. 不支持的类型
raise ValueError(f"不支持的 config_id 类型: {type(config_id).__name__}")