43 lines
1.9 KiB
Python
43 lines
1.9 KiB
Python
"""Automatic persistence stays in SQLite; explicit exports remain available."""
|
|
import json
|
|
from pathlib import Path
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from agent.agent_init import _init_session_state
|
|
from agent.session_persistence import SessionPersistenceMixin
|
|
from hermes_state import SessionDB
|
|
|
|
|
|
@pytest.mark.parametrize("legacy_enabled", [False, True])
|
|
def test_persistence_never_snapshots_but_explicit_save_works(tmp_path, monkeypatch, legacy_enabled):
|
|
monkeypatch.setenv("HERMES_HOME", str(tmp_path))
|
|
(tmp_path / "config.yaml").write_text(
|
|
f"sessions:\n write_json_snapshots: {str(legacy_enabled).lower()}\n", encoding="utf-8")
|
|
db = SessionDB(db_path=tmp_path / "state.db")
|
|
agent = SessionPersistenceMixin()
|
|
agent.max_iterations = 1
|
|
_init_session_state(agent, "snapshot-removal", db, None, None, None, False, 1, 1, 1)
|
|
agent.model = "fixture"
|
|
agent.base_url = "http://127.0.0.1:1/v1"
|
|
agent.platform = "cli"
|
|
agent.tools = []
|
|
agent.verbose_logging = True
|
|
db.create_session(agent.session_id, source="cli", model=agent.model)
|
|
agent._session_db_created = True
|
|
messages = [{"role": "user", "content": "keep this conversation"},
|
|
{"role": "assistant", "content": "durable answer"}]
|
|
try:
|
|
agent._persist_session(messages)
|
|
assert len(db.get_messages_as_conversation(agent.session_id)) == 2
|
|
assert not list(agent.logs_dir.glob("session_*.json"))
|
|
from hermes_cli.cli_session_mixin import CLISessionMixin
|
|
cli = SimpleNamespace(_session_db=db, session_id=agent.session_id)
|
|
output = tmp_path / "explicit.json"
|
|
CLISessionMixin.save_conversation(cli, f"/save json {output}")
|
|
saved = json.loads(output.read_text(encoding="utf-8"))
|
|
assert [m["content"] for m in saved["messages"]] == [m["content"] for m in messages]
|
|
finally:
|
|
db.close()
|