Newer
Older
navi-1 / navi / memory / _summary.py
@Eugene Sukhodolskiy Eugene Sukhodolskiy on 29 Apr 974 bytes Split memory/store.py into focused mixins
"""Conversation summary persistence — single-row table."""

from datetime import datetime, timezone


class SummaryMixin:
    """Summary storage operations.

    Expected on the composite class:
        _get_pool() -> asyncpg.Pool
    """

    async def get_summary(self) -> str | None:
        pool = await self._get_pool()
        async with pool.acquire() as conn:
            return await conn.fetchval("SELECT content FROM memory_summary WHERE id=1")

    async def set_summary(self, content: str) -> None:
        now = datetime.now(timezone.utc)
        pool = await self._get_pool()
        async with pool.acquire() as conn:
            await conn.execute(
                """INSERT INTO memory_summary (id, content, generated_at) VALUES (1, $1, $2)
                   ON CONFLICT(id) DO UPDATE SET
                       content      = EXCLUDED.content,
                       generated_at = EXCLUDED.generated_at""",
                content, now,
            )