Files
odoo-ai/agent_service/memory/operational_store.py
2026-04-12 16:51:39 -04:00

36 lines
1.5 KiB
Python

from __future__ import annotations
import logging
from datetime import datetime, timedelta
logger = logging.getLogger(__name__)
class OperationalStore:
def __init__(self, pool):
self._pool = pool
async def store(self, scope, summary, raw_data=None, ttl_days=90, source_directive_id=None):
expires_at = datetime.utcnow() + timedelta(days=ttl_days)
async with self._pool.acquire(timeout=10) as conn:
await conn.execute(
"""INSERT INTO ab_operational_memory
(scope, summary, raw_data, source_directive_id, expires_at)
VALUES ($1, $2, $3, $4, $5)""",
scope, summary, raw_data, source_directive_id, expires_at)
async def get_recent(self, scope, limit=10):
async with self._pool.acquire(timeout=10) as conn:
rows = await conn.fetch(
"""SELECT id, scope, summary, raw_data, created_at
FROM ab_operational_memory
WHERE scope = $1 AND (expires_at IS NULL OR expires_at > NOW())
ORDER BY created_at DESC LIMIT $2""",
scope, limit)
return [dict(r) for r in rows]
async def prune_expired(self):
async with self._pool.acquire(timeout=10) as conn:
result = await conn.execute(
'DELETE FROM ab_operational_memory WHERE expires_at IS NOT NULL AND expires_at < NOW()')
logger.info('OperationalStore.prune_expired: %s', result)