Persist in-progress chat sessions

This commit is contained in:
武阳
2026-05-07 15:50:30 +08:00
parent d84b6c568c
commit 7a8152fba8
2 changed files with 119 additions and 4 deletions
+48
View File
@@ -17,6 +17,7 @@ from pathlib import Path
from fastapi.testclient import TestClient
from backend.api.server import AgentState, create_app
from src.agent_types import AgentRunResult
from src.session_store import StoredAgentSession, load_agent_session, save_agent_session
@@ -161,6 +162,53 @@ class GuiServerTests(unittest.TestCase):
payload = response.json()
self.assertIsNone(payload['session_id'])
def test_chat_persists_in_progress_session_before_agent_finishes(self) -> None:
with tempfile.TemporaryDirectory() as d:
root = Path(d)
client, state = _build_client(root)
agent = state.agent_for('alice')
def fake_run(
prompt: str,
session_id: str | None = None,
*,
runtime_context: str | None = None,
event_sink: object | None = None,
) -> AgentRunResult:
stored = load_agent_session(
'pending-1',
directory=root / 'accounts' / 'alice' / 'sessions',
)
self.assertEqual(stored.session_id, 'pending-1')
self.assertEqual(stored.budget_state.get('status'), 'running')
self.assertEqual(stored.messages[-1]['role'], 'user')
self.assertEqual(stored.messages[-1]['content'], 'hello')
return AgentRunResult(
final_output='done',
turns=1,
tool_calls=0,
transcript=stored.messages
+ ({'role': 'assistant', 'content': 'done'},),
session_id=session_id,
)
original_run = agent.run
agent.run = fake_run # type: ignore[method-assign]
try:
response = client.post(
'/api/chat',
json={
'prompt': 'hello',
'account_id': 'alice',
'session_id': ' pending-1 ',
},
)
finally:
agent.run = original_run # type: ignore[method-assign]
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()['session_id'], 'pending-1')
def test_chat_uses_account_scoped_model_config(self) -> None:
with tempfile.TemporaryDirectory() as d:
client, _ = _build_client(Path(d))