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 System.out.println(
"Asking model: " +
Utils.
toJSON(body));
100 HttpResponse<InputStream> response =
101 httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
103 int statusCode = response.statusCode();
104 InputStream responseBodyStream = response.body();
105 StringBuilder responseBuffer =
new StringBuilder();
106 StringBuilder thinkingBuffer =
new StringBuilder();
108 List<OllamaChatToolCalls> wantedToolsForStream =
null;
110 try (BufferedReader reader =
112 new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8))) {
114 while ((line = reader.readLine()) !=
null) {
115 if (handleErrorStatus(statusCode, line, responseBuffer)) {
119 parseResponseAndAddToBuffer(line, responseBuffer, thinkingBuffer);
120 ollamaChatResponseModel =
122 if (body.stream && ollamaChatResponseModel.getMessage().getToolCalls() !=
null) {
123 wantedToolsForStream = ollamaChatResponseModel.getMessage().getToolCalls();
125 if (finished && body.stream) {
126 ollamaChatResponseModel.getMessage().setResponse(responseBuffer.toString());
127 ollamaChatResponseModel.getMessage().setThinking(thinkingBuffer.toString());
143 if (statusCode != 200) {
144 LOG.error(
"Status code: {}", statusCode);
145 System.out.println(responseBuffer);
148 if (wantedToolsForStream !=
null && ollamaChatResponseModel !=
null) {
149 ollamaChatResponseModel.getMessage().setToolCalls(wantedToolsForStream);
153 LOG.debug(
"Model response: {}", ollamaResult);