feat: complete chat sessions and production startup

This commit is contained in:
2026-09-27 11:38:57 +08:00
parent d755a16d5f
commit 09d730058c
23 changed files with 2458 additions and 152 deletions
+6 -2
View File
@@ -232,10 +232,12 @@ def test_sse_persists_messages_and_tool_failure(session_factory, monkeypatch):
created = client.post("/api/conversations", json={"title": "测试对话"}).json()
with client.stream("POST", f"/api/conversations/{created['id']}/messages", json={"content": "列出课程"}) as response:
body = "".join(response.iter_text())
assert body.count("event: tool") == 9 and "event: message" in body
assert body.count("event: tool") == 18 and "event: message" in body and "event: done" in body
restored = client.get(f"/api/conversations/{created['id']}").json()
assert [m["role"] for m in restored["messages"]] == ["user", "assistant"]
assert len(restored["messages"][1]["tool_calls"]) == 9
assert len({call["id"] for call in restored["messages"][1]["tool_calls"]}) == 9
assert all(call["status"] == "completed" and call["result"] for call in restored["messages"][1]["tool_calls"])
assert restored["runs"][0]["status"] == "completed"
monkeypatch.setattr(chat_api, "client_for_chat", lambda db: (_ for _ in ()).throw(ModelError("不支持工具调用")))
with client.stream("POST", f"/api/conversations/{created['id']}/messages", json={"content": "再试"}) as response:
@@ -273,11 +275,13 @@ def test_failed_tool_calls_count_toward_limit(monkeypatch):
return SimpleNamespace(all=lambda: [])
def commit(self):
pass
def rollback(self):
pass
monkeypatch.setattr(chat_api, "client_for_chat", lambda db: RepeatingClient())
monkeypatch.setattr(chat_api, "get_settings", lambda: SimpleNamespace(chat_max_tool_calls=9))
body = "".join(chat_api._run_agent(FakeSession, 1, 1, "循环调用工具"))
assert body.count("event: tool") == 9
assert body.count("event: tool") == 18
assert "本次消息工具调用超过上限 9 次" in body
assert run.status == "failed"