diff --git a/agentscope-core/src/main/java/io/agentscope/core/model/OllamaChatModel.java b/agentscope-core/src/main/java/io/agentscope/core/model/OllamaChatModel.java index 6a5ea2848e..dd8706dcf5 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/model/OllamaChatModel.java +++ b/agentscope-core/src/main/java/io/agentscope/core/model/OllamaChatModel.java @@ -138,11 +138,13 @@ public ChatResponse chat(List messages, GenerateOptions options) { @Override protected Flux doStream( List messages, List tools, GenerateOptions options) { + GenerateOptions effectiveOptions = + options != null ? options : GenerateOptions.builder().build(); return streamWithHttpClient( messages, tools, - options.getToolChoice(), - OllamaOptions.fromGenerateOptions(options), + effectiveOptions.getToolChoice(), + OllamaOptions.fromGenerateOptions(effectiveOptions), true); } diff --git a/agentscope-core/src/test/java/io/agentscope/core/model/OllamaChatModelTest.java b/agentscope-core/src/test/java/io/agentscope/core/model/OllamaChatModelTest.java index 2244564a3b..a434ffed0c 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/model/OllamaChatModelTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/model/OllamaChatModelTest.java @@ -269,6 +269,39 @@ void testStreamChatRequest() { assertEquals("POST", request.getMethod()); } + @Test + @DisplayName("Should handle streaming chat request with null options") + void testStreamChatRequestWithNullOptions() { + String part1 = + "{\"model\":\"" + + TEST_MODEL_NAME + + "\",\"message\":{\"role\":\"assistant\",\"content\":\"Hello\"},\"done\":false}"; + String part2 = + "{\"model\":\"" + + TEST_MODEL_NAME + + "\",\"done\":true,\"total_duration\":100,\"eval_count\":1}"; + + when(httpTransport.stream(any(HttpRequest.class))).thenReturn(Flux.just(part1, part2)); + + Flux flux = + model.stream( + List.of(Msg.builder().role(MsgRole.USER).textContent("Hi").build()), + null, + null); + + List responses = flux.collectList().block(); + + assertNotNull(responses); + assertEquals(2, responses.size()); + ContentBlock content = responses.get(0).getContent().get(0); + assertTrue(content instanceof TextBlock); + assertEquals("Hello", ((TextBlock) content).getText()); + + ArgumentCaptor captor = ArgumentCaptor.forClass(HttpRequest.class); + verify(httpTransport).stream(captor.capture()); + assertEquals("POST", captor.getValue().getMethod()); + } + @Test @DisplayName("Integration Test: Real connection to local Ollama") void testRealConnection() {