fix(agent): keep runtime context within its lifecycle
This commit is contained in:
@@ -15,6 +15,7 @@ from typing import TYPE_CHECKING, Any, Callable, Iterator
|
||||
|
||||
from loguru import logger
|
||||
|
||||
from nanobot.runtime_context import public_history_messages
|
||||
from nanobot.session.manager import Session
|
||||
from nanobot.utils.gitstore import GitStore
|
||||
from nanobot.utils.helpers import (
|
||||
@@ -660,7 +661,10 @@ class MemoryStore:
|
||||
) -> None:
|
||||
"""Fallback: dump raw messages to history.jsonl without LLM summarization."""
|
||||
limit = max_chars if max_chars is not None else _RAW_ARCHIVE_MAX_CHARS
|
||||
formatted = truncate_text(self._format_messages(messages), limit)
|
||||
formatted = truncate_text(
|
||||
self._format_messages(public_history_messages(messages)),
|
||||
limit,
|
||||
)
|
||||
self.append_history(
|
||||
f"[RAW] {len(messages)} messages\n"
|
||||
f"{formatted}",
|
||||
@@ -932,7 +936,9 @@ class Consolidator:
|
||||
"""
|
||||
if not messages:
|
||||
return None
|
||||
messages_to_summarize = summary_messages if summary_messages is not None else messages
|
||||
messages_to_summarize = public_history_messages(
|
||||
summary_messages if summary_messages is not None else messages
|
||||
)
|
||||
try:
|
||||
formatted = MemoryStore._format_messages(messages_to_summarize)
|
||||
formatted = self._truncate_to_token_budget(formatted, runtime=runtime)
|
||||
|
||||
@@ -112,8 +112,8 @@ class SessionClient:
|
||||
session = self._loop.sessions.get_or_create(key)
|
||||
if session.messages:
|
||||
raise ValueError(f"restore target session is not empty: {key}")
|
||||
session.metadata.update(deepcopy(snapshot.metadata))
|
||||
|
||||
prepared: list[tuple[str, Any, dict[str, Any]]] = []
|
||||
for raw in snapshot.messages:
|
||||
if "role" not in raw or "content" not in raw:
|
||||
raise ValueError("restored messages must include role and content")
|
||||
@@ -125,7 +125,11 @@ class SessionClient:
|
||||
for field, value in raw.items()
|
||||
if field not in {"role", "content"}
|
||||
}
|
||||
session.add_message(role, deepcopy(raw["content"]), **extra)
|
||||
prepared.append((role, deepcopy(raw["content"]), extra))
|
||||
|
||||
session.metadata.update(deepcopy(snapshot.metadata))
|
||||
for role, content, extra in prepared:
|
||||
session.add_message(role, content, **extra)
|
||||
|
||||
if save:
|
||||
self._loop.sessions.save(session)
|
||||
|
||||
@@ -746,7 +746,7 @@ class SessionManager:
|
||||
found_target = True
|
||||
break
|
||||
user_index += 1
|
||||
copied.append(deepcopy(message))
|
||||
copied.append(public_history_message(message))
|
||||
if user_index == before_user_index:
|
||||
found_target = True
|
||||
if not found_target:
|
||||
|
||||
Reference in New Issue
Block a user