61 String line, StringBuilder responseBuffer, StringBuilder thinkingBuffer) {
72 if (message !=
null) {
73 if (message.getThinking() !=
null) {
74 thinkingBuffer.append(message.getThinking());
76 responseBuffer.append(message.getResponse());
78 if (tokenHandler !=
null) {
79 tokenHandler.accept(ollamaResponseModel);
82 return ollamaResponseModel.isDone();
83 }
catch (JsonProcessingException e) {
84 LOG.error(
"Error parsing the Ollama chat response!", e);
97 long startTime = System.currentTimeMillis();
98 HttpClient httpClient = HttpClient.newHttpClient();
99 URI uri = URI.create(getHost() + endpoint);
100 HttpRequest.Builder requestBuilder =
101 getRequestBuilderDefault(uri).POST(body.getBodyPublisher());
102 HttpRequest request = requestBuilder.build();
103 LOG.debug(
"Asking model: {}", body);
104 HttpResponse<InputStream> response =
105 httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
107 int statusCode = response.statusCode();
108 InputStream responseBodyStream = response.body();
109 StringBuilder responseBuffer =
new StringBuilder();
110 StringBuilder thinkingBuffer =
new StringBuilder();
112 List<OllamaChatToolCalls> wantedToolsForStream =
null;
114 try (BufferedReader reader =
116 new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8))) {
118 while ((line = reader.readLine()) !=
null) {
119 if (handleErrorStatus(statusCode, line, responseBuffer)) {
123 parseResponseAndAddToBuffer(line, responseBuffer, thinkingBuffer);
124 ollamaChatResponseModel =
127 && ollamaChatResponseModel.getMessage() !=
null
128 && ollamaChatResponseModel.getMessage().getToolCalls() !=
null) {
129 wantedToolsForStream = ollamaChatResponseModel.getMessage().getToolCalls();
131 if (finished && body.stream) {
132 ollamaChatResponseModel.getMessage().setResponse(responseBuffer.toString());
133 ollamaChatResponseModel.getMessage().setThinking(thinkingBuffer.toString());
149 if (statusCode != 200) {
150 LOG.error(
"Status code: {}", statusCode);
153 if (wantedToolsForStream !=
null && ollamaChatResponseModel !=
null) {
154 ollamaChatResponseModel.getMessage().setToolCalls(wantedToolsForStream);
158 LOG.debug(
"Model response: {}", ollamaResult);