diff --git a/agent/core/llm.py b/agent/core/llm.py index 92256e5..168e1d7 100644 --- a/agent/core/llm.py +++ b/agent/core/llm.py @@ -204,6 +204,7 @@ def chat( return self._stream_chat(data, timeout=timeout) result = self._request("/api/chat", data, timeout=timeout) + self._validate_response(result, ["done"]) self._validate_message_structure(result) return result diff --git a/tests/test_llm.py b/tests/test_llm.py index 13fddb0..bfaf844 100644 --- a/tests/test_llm.py +++ b/tests/test_llm.py @@ -88,14 +88,22 @@ def test_chat_accepts_tool_call_only_response(self): "message": { "role": "assistant", "tool_calls": [{"function": {"name": "read_file", "arguments": {}}}], - } + }, + "done": True, } with patch.object(client, "_request", return_value=response): self.assertEqual(client.chat([{"role": "user", "content": "hi"}]), response) def test_chat_rejects_non_dict_message(self): client = make_client() - with patch.object(client, "_request", return_value={"message": None}): + with patch.object(client, "_request", return_value={"message": None, "done": True}): + with self.assertRaises(OllamaError): + client.chat([{"role": "user", "content": "hi"}]) + + def test_chat_rejects_response_missing_done(self): + client = make_client() + response = {"message": {"role": "assistant", "content": "hi"}} + with patch.object(client, "_request", return_value=response): with self.assertRaises(OllamaError): client.chat([{"role": "user", "content": "hi"}])