M3a:息壤三级记忆域——归真触发提取管线/白名单明忆/重忆确认/正影版本链/删除墓碑/双通道召回注入,退役旧记忆-抽取-反思-大周天-演化管线(迁移 004,验收 7 用例)
This commit is contained in:
1 parent
2a640a901b
commit
9c98c2f85e
69 files changed
+1193
-6033
No files matched your search
@@ -4,7 +4,7 @@ from sqlalchemy import func, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.character import Character
|
||||
from app.models.memory import Memory
|
||||
from app.models.xirang import Memory
|
||||
|
||||
|
||||
async def get_active_character(session: AsyncSession, owner_scope: str) -> Character | None:
|
||||
@@ -98,7 +98,7 @@ async def count_memories(session: AsyncSession, character_id: str) -> int:
|
||||
await session.execute(
|
||||
select(func.count())
|
||||
.select_from(Memory)
|
||||
.where(Memory.character_id == character_id, Memory.deleted_at.is_(None))
|
||||
.where(Memory.character_id == character_id, Memory.status != "tombstoned")
|
||||
)
|
||||
).scalar_one()
|
||||
return int(total or 0)
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
"""记忆数据访问。"""
|
||||
|
||||
from sqlalchemy import func, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.memory import Memory
|
||||
|
||||
|
||||
async def get_memory(session: AsyncSession, memory_id: str) -> Memory | None:
|
||||
return await session.get(Memory, memory_id)
|
||||
|
||||
|
||||
async def list_memories(
|
||||
session: AsyncSession,
|
||||
character_id: str,
|
||||
*,
|
||||
memory_type: str | None = None,
|
||||
source: str | None = None,
|
||||
page: int,
|
||||
page_size: int,
|
||||
active_only: bool = True,
|
||||
) -> tuple[list[Memory], int]:
|
||||
conditions = [Memory.character_id == character_id]
|
||||
if active_only:
|
||||
conditions.append(Memory.status == "active")
|
||||
conditions.append(Memory.deleted_at.is_(None))
|
||||
if memory_type is not None:
|
||||
conditions.append(Memory.type == memory_type)
|
||||
if source is not None:
|
||||
conditions.append(Memory.source == source)
|
||||
total_result = await session.execute(
|
||||
select(func.count()).select_from(Memory).where(*conditions)
|
||||
)
|
||||
total = int(total_result.scalar_one())
|
||||
result = await session.execute(
|
||||
select(Memory)
|
||||
.where(*conditions)
|
||||
.order_by(Memory.importance.desc(), Memory.updated_at.desc())
|
||||
.offset((page - 1) * page_size)
|
||||
.limit(page_size)
|
||||
)
|
||||
return list(result.scalars().all()), total
|
||||
|
||||
|
||||
async def list_injectable_memories(
|
||||
session: AsyncSession, character_id: str, *, limit: int
|
||||
) -> list[Memory]:
|
||||
result = await session.execute(
|
||||
select(Memory)
|
||||
.where(
|
||||
Memory.character_id == character_id,
|
||||
Memory.status == "active",
|
||||
Memory.deleted_at.is_(None),
|
||||
)
|
||||
.order_by(Memory.importance.desc(), Memory.updated_at.desc())
|
||||
.limit(limit)
|
||||
)
|
||||
return list(result.scalars().all())
|
||||
|
||||
|
||||
async def get_memories_by_ids(
|
||||
session: AsyncSession, memory_ids: list[str]
|
||||
) -> list[Memory]:
|
||||
"""按 ID 列表批量获取记忆(按重要性降序排序,而非 ID 传入顺序)。"""
|
||||
result = await session.execute(
|
||||
select(Memory).where(
|
||||
Memory.id.in_(memory_ids),
|
||||
Memory.status == "active",
|
||||
Memory.deleted_at.is_(None),
|
||||
)
|
||||
.order_by(Memory.importance.desc(), Memory.updated_at.desc())
|
||||
)
|
||||
return list(result.scalars().all())
|
||||
Reference in new issue
Block a user