61 if (message !=
null) {
62 if (message.getThinking() !=
null) {
63 thinkingBuffer.append(message.getThinking());
66 responseBuffer.append(message.getContent());
68 if (tokenHandler !=
null) {
69 tokenHandler.accept(ollamaResponseModel);
72 return ollamaResponseModel.isDone();
73 }
catch (JsonProcessingException e) {
74 LOG.error(
"Error parsing the Ollama chat response!", e);
87 HttpClient httpClient = HttpClient.newHttpClient();
89 HttpRequest.Builder requestBuilder =
92 body.getBodyPublisher());
93 HttpRequest
request = requestBuilder.build();
94 if (isVerbose()) LOG.info(
"Asking model: {}", body);
96 httpClient.send(
request, HttpResponse.BodyHandlers.ofInputStream());
98 int statusCode =
response.statusCode();
99 InputStream responseBodyStream =
response.body();
100 StringBuilder responseBuffer =
new StringBuilder();
101 StringBuilder thinkingBuffer =
new StringBuilder();
103 List<OllamaChatToolCalls> wantedToolsForStream =
null;
104 try (BufferedReader reader =
105 new BufferedReader(
new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8))) {
108 while ((line = reader.readLine()) !=
null) {
109 if (statusCode == 404) {
110 LOG.warn(
"Status code: 404 (Not Found)");
113 responseBuffer.append(ollamaResponseModel.getError());
114 }
else if (statusCode == 401) {
115 LOG.warn(
"Status code: 401 (Unauthorized)");
119 responseBuffer.append(ollamaResponseModel.getError());
120 }
else if (statusCode == 400) {
121 LOG.warn(
"Status code: 400 (Bad Request)");
124 responseBuffer.append(ollamaResponseModel.getError());
125 }
else if (statusCode == 500) {
126 LOG.warn(
"Status code: 500 (Internal Server Error)");
129 responseBuffer.append(ollamaResponseModel.getError());
133 if (body.stream && ollamaChatResponseModel.getMessage().getToolCalls() !=
null) {
134 wantedToolsForStream = ollamaChatResponseModel.getMessage().getToolCalls();
136 if (finished && body.stream) {
137 ollamaChatResponseModel.getMessage().setContent(responseBuffer.toString());
138 ollamaChatResponseModel.getMessage().setThinking(thinkingBuffer.toString());
144 if (statusCode != 200) {
145 LOG.error(
"Status code " + statusCode);
148 if (wantedToolsForStream !=
null) {
149 ollamaChatResponseModel.getMessage().setToolCalls(wantedToolsForStream);
153 if (isVerbose()) LOG.info(
"Model response: " + ollamaResult);