58 String line, StringBuilder responseBuffer, StringBuilder thinkingBuffer) {
67 if (message !=
null) {
68 if (message.getThinking() !=
null) {
69 thinkingBuffer.append(message.getThinking());
71 responseBuffer.append(message.getResponse());
73 if (tokenHandler !=
null) {
74 tokenHandler.accept(ollamaResponseModel);
77 return ollamaResponseModel.isDone();
78 }
catch (JsonProcessingException e) {
79 LOG.error(
"Error parsing the Ollama chat response!", e);
92 long startTime = System.currentTimeMillis();
93 HttpClient httpClient = HttpClient.newHttpClient();
94 URI uri = URI.create(getHost() + endpoint);
95 HttpRequest.Builder requestBuilder =
96 getRequestBuilderDefault(uri).POST(body.getBodyPublisher());
97 HttpRequest request = requestBuilder.build();
98 LOG.debug(
"Asking model: {}", body);
99 HttpResponse<InputStream> response =
100 httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
102 int statusCode = response.statusCode();
103 InputStream responseBodyStream = response.body();
104 StringBuilder responseBuffer =
new StringBuilder();
105 StringBuilder thinkingBuffer =
new StringBuilder();
107 List<OllamaChatToolCalls> wantedToolsForStream =
null;
109 try (BufferedReader reader =
111 new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8))) {
113 while ((line = reader.readLine()) !=
null) {
114 if (handleErrorStatus(statusCode, line, responseBuffer)) {
118 parseResponseAndAddToBuffer(line, responseBuffer, thinkingBuffer);
119 ollamaChatResponseModel =
121 if (body.stream && ollamaChatResponseModel.getMessage().getToolCalls() !=
null) {
122 wantedToolsForStream = ollamaChatResponseModel.getMessage().getToolCalls();
124 if (finished && body.stream) {
125 ollamaChatResponseModel.getMessage().setResponse(responseBuffer.toString());
126 ollamaChatResponseModel.getMessage().setThinking(thinkingBuffer.toString());
142 if (statusCode != 200) {
143 LOG.error(
"Status code: {}", statusCode);
146 if (wantedToolsForStream !=
null && ollamaChatResponseModel !=
null) {
147 ollamaChatResponseModel.getMessage().setToolCalls(wantedToolsForStream);
151 LOG.debug(
"Model response: {}", ollamaResult);