Persist in-progress chat sessions
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user