aboutsummaryrefslogtreecommitdiff
path: root/agent
diff options
context:
space:
mode:
authorGuillermo Serrahima <dev@vylion.com>2026-07-01 12:45:58 +0200
committerGuillermo Serrahima <dev@vylion.com>2026-07-01 12:45:58 +0200
commit4a1ae054a822b880296696510fb4c5f87c323ba0 (patch)
tree6330a3277cf7534777bedf43da14180b4341c577 /agent
parent68edcbef464fdc5998db7f1eaeb382d816b513c8 (diff)
downloadsenia-4a1ae054a822b880296696510fb4c5f87c323ba0.tar.xz
senia-4a1ae054a822b880296696510fb4c5f87c323ba0.zip
Added compaction
Diffstat (limited to 'agent')
-rw-r--r--agent/orchestrator/context.py23
1 files changed, 20 insertions, 3 deletions
diff --git a/agent/orchestrator/context.py b/agent/orchestrator/context.py
index e9c1975..d19d8f3 100644
--- a/agent/orchestrator/context.py
+++ b/agent/orchestrator/context.py
@@ -11,6 +11,8 @@ from pathlib import Path
SENIA_DB = Path("/etc/senia/data/senia.db")
+RECENT_FILE = Path("/etc/senia/data/memory/recent.md")
+ROLLING_WINDOW_DAYS = 11
def _today_diary_entries() -> list[str]:
@@ -31,6 +33,13 @@ def _today_diary_entries() -> list[str]:
conn.close()
+def _recent_summary() -> str:
+ if not RECENT_FILE.exists():
+ return ""
+ summary = RECENT_FILE.read_text().strip()
+ return f"## Recent context (last {ROLLING_WINDOW_DAYS} days)\n{summary}"
+
+
def build_turn_context(user: str | None = None) -> str:
diary_entries = _today_diary_entries()
diary = (
@@ -38,10 +47,18 @@ def build_turn_context(user: str | None = None) -> str:
if diary_entries
else "(no entries yet today)"
)
+ recent = _recent_summary()
now = datetime.now(timezone.utc).astimezone().isoformat(timespec="seconds")
- time_section = f"## Current time\n{now}\n\n"
- user_section = f"## User\n{user}\n\n" if user else ""
+ time_section = f"## Current time\n{now}"
+ user_section = f"## Speaking with\n{user}" if user else ""
+ recent_section = _recent_summary()
diary_section = f"## Today's diary so far\n{diary}"
+ parts = [
+ time_section,
+ user_section,
+ recent_section,
+ diary_section,
+ ]
- return f"{time_section}{user_section}{diary_section}"
+ return "\n\n".join(p for p in parts if p)