46 String line, StringBuilder responseBuffer, StringBuilder thinkingBuffer) {
50 if (ollamaResponseModel.getResponse() !=
null) {
51 responseBuffer.append(ollamaResponseModel.getResponse());
53 if (ollamaResponseModel.getThinking() !=
null) {
54 thinkingBuffer.append(ollamaResponseModel.getThinking());
56 if (responseStreamObserver !=
null) {
57 responseStreamObserver.
notify(ollamaResponseModel);
59 return ollamaResponseModel.isDone();
60 }
catch (JsonProcessingException e) {
61 LOG.error(
"Error parsing the Ollama chat response!", e);
89 long startTime = System.currentTimeMillis();
90 HttpClient httpClient = HttpClient.newHttpClient();
91 URI uri = URI.create(getHost() + endpoint);
92 HttpRequest.Builder requestBuilder =
93 getRequestBuilderDefault(uri).POST(body.getBodyPublisher());
94 HttpRequest request = requestBuilder.build();
95 LOG.debug(
"Asking model: {}", body);
96 HttpResponse<InputStream> response =
97 httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
99 int statusCode = response.statusCode();
100 InputStream responseBodyStream = response.body();
101 StringBuilder responseBuffer =
new StringBuilder();
102 StringBuilder thinkingBuffer =
new StringBuilder();
104 try (BufferedReader reader =
106 new InputStreamReader(responseBodyStream, StandardCharsets.UTF_8))) {
108 while ((line = reader.readLine()) !=
null) {
109 if (statusCode >= 400) {
110 LOG.warn(
"Error code: {}", statusCode);
113 responseBuffer.append(ollamaResponseModel.getError());
116 parseResponseAndAddToBuffer(line, responseBuffer, thinkingBuffer);
118 ollamaGenerateResponseModel =
127 if (statusCode != 200) {
128 LOG.error(
"Status code: {}", statusCode);
129 LOG.error(
"Response: {}", responseBuffer);
132 long endTime = System.currentTimeMillis();
135 responseBuffer.toString(),
136 thinkingBuffer.toString(),
139 ollamaResult.setModel(ollamaGenerateResponseModel.getModel());
140 ollamaResult.setCreatedAt(ollamaGenerateResponseModel.getCreatedAt());
141 ollamaResult.setDone(ollamaGenerateResponseModel.isDone());
142 ollamaResult.setDoneReason(ollamaGenerateResponseModel.getDoneReason());
143 ollamaResult.setContext(ollamaGenerateResponseModel.getContext());
144 ollamaResult.setTotalDuration(ollamaGenerateResponseModel.getTotalDuration());
145 ollamaResult.setLoadDuration(ollamaGenerateResponseModel.getLoadDuration());
146 ollamaResult.setPromptEvalCount(ollamaGenerateResponseModel.getPromptEvalCount());
147 ollamaResult.setPromptEvalDuration(ollamaGenerateResponseModel.getPromptEvalDuration());
148 ollamaResult.setEvalCount(ollamaGenerateResponseModel.getEvalCount());
149 ollamaResult.setEvalDuration(ollamaGenerateResponseModel.getEvalDuration());
151 LOG.debug(
"Model response: {}", ollamaResult);