61 responseBuffer.append(message.getContent());
62 if (tokenHandler !=
null) {
63 tokenHandler.accept(ollamaResponseModel);
66 return ollamaResponseModel.isDone();
67 }
catch (JsonProcessingException e) {
68 LOG.error(
"Error parsing the Ollama chat response!", e);
81 HttpClient httpClient = HttpClient.newHttpClient();
83 HttpRequest.Builder requestBuilder =
86 body.getBodyPublisher());
87 HttpRequest
request = requestBuilder.build();
88 if (isVerbose()) LOG.info(
"Asking model: " + body);
90 httpClient.send(
request, HttpResponse.BodyHandlers.ofInputStream());
92 int statusCode =
response.statusCode();
93 InputStream responseBodyStream =
response.body();
94 StringBuilder responseBuffer =
new StringBuilder();
96 List<OllamaChatToolCalls> wantedToolsForStream =
null;
97 try (BufferedReader reader =
98 new BufferedReader(
new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8))) {
101 while ((line = reader.readLine()) !=
null) {
102 if (statusCode == 404) {
103 LOG.warn(
"Status code: 404 (Not Found)");
106 responseBuffer.append(ollamaResponseModel.getError());
107 }
else if (statusCode == 401) {
108 LOG.warn(
"Status code: 401 (Unauthorized)");
112 responseBuffer.append(ollamaResponseModel.getError());
113 }
else if (statusCode == 400) {
114 LOG.warn(
"Status code: 400 (Bad Request)");
117 responseBuffer.append(ollamaResponseModel.getError());
121 if(body.stream && ollamaChatResponseModel.getMessage().getToolCalls() !=
null){
122 wantedToolsForStream = ollamaChatResponseModel.getMessage().getToolCalls();
124 if (finished && body.stream) {
125 ollamaChatResponseModel.getMessage().setContent(responseBuffer.toString());
131 if (statusCode != 200) {
132 LOG.error(
"Status code " + statusCode);
135 if(wantedToolsForStream !=
null) {
136 ollamaChatResponseModel.getMessage().setToolCalls(wantedToolsForStream);
140 if (isVerbose()) LOG.info(
"Model response: " + ollamaResult);