From 2027171cb917869b70c02a2786cc3e8d92586466 Mon Sep 17 00:00:00 2001 From: Michael Wechner Date: Tue, 26 Dec 2023 18:43:47 +0100 Subject: [PATCH 1/3] version updated --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c0fe60..1187962 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ In your Maven project, add this dependency: io.github.amithkoujalgi ollama4j - 1.0.20 + 1.0.29 ``` From 9d336e257ca9b18a87ea3c41aeca96bf9e093d1c Mon Sep 17 00:00:00 2001 From: Michael Wechner Date: Tue, 26 Dec 2023 20:49:54 +0100 Subject: [PATCH 2/3] basic auth implemented for generate request --- .../ollama4j/core/OllamaAPI.java | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java b/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java index 11906b3..ff01aa8 100644 --- a/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java +++ b/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java @@ -37,6 +37,8 @@ public class OllamaAPI { private final String host; private long requestTimeoutSeconds = 3; private boolean verbose = true; + private String username; + private String password; /** * Instantiates the Ollama API. @@ -64,6 +66,14 @@ public class OllamaAPI { this.verbose = verbose; } + /** + * + */ + public void setBasicAuth(String username, String password) { + this.username = username; + this.password = password; + } + /** * API to check the reachability of Ollama server. * @@ -426,14 +436,18 @@ public class OllamaAPI { long startTime = System.currentTimeMillis(); HttpClient httpClient = HttpClient.newHttpClient(); URI uri = URI.create(this.host + "/api/generate"); - HttpRequest request = + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri) .POST( HttpRequest.BodyPublishers.ofString( Utils.getObjectMapper().writeValueAsString(ollamaRequestModel))) .header("Content-Type", "application/json") - .timeout(Duration.ofSeconds(requestTimeoutSeconds)) - .build(); + .timeout(Duration.ofSeconds(requestTimeoutSeconds)); + if (basicAuthCredentialsSet()) { + requestBuilder.header("Authorization", getBasicAuthHeaderValue()); + } + HttpRequest request = requestBuilder.build(); + logger.debug("Ask model '" + ollamaRequestModel + "' ..."); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream()); int statusCode = response.statusCode(); @@ -444,10 +458,16 @@ public class OllamaAPI { String line; while ((line = reader.readLine()) != null) { if (statusCode == 404) { + logger.warn("Status code: 404 (Not Found)"); OllamaErrorResponseModel ollamaResponseModel = Utils.getObjectMapper().readValue(line, OllamaErrorResponseModel.class); responseBuffer.append(ollamaResponseModel.getError()); - } else { + } else if (statusCode == 401) { + logger.warn("Status code: 401 (Unauthorized)"); + OllamaErrorResponseModel ollamaResponseModel = + Utils.getObjectMapper().readValue("{\"error\":\"Unauthorized\"}", OllamaErrorResponseModel.class); + responseBuffer.append(ollamaResponseModel.getError()); + }else { OllamaResponseModel ollamaResponseModel = Utils.getObjectMapper().readValue(line, OllamaResponseModel.class); if (!ollamaResponseModel.isDone()) { @@ -457,10 +477,30 @@ public class OllamaAPI { } } if (statusCode != 200) { + logger.error("Status code " + statusCode + " instead 200"); throw new OllamaBaseException(responseBuffer.toString()); } else { long endTime = System.currentTimeMillis(); return new OllamaResult(responseBuffer.toString().trim(), endTime - startTime, statusCode); } } + + /** + * @return basic authentication header value (encoded credentials) + */ + private String getBasicAuthHeaderValue() { + String credentialsToEncode = username + ":" + password; + return "Basic " + Base64.getEncoder().encodeToString(credentialsToEncode.getBytes()); + } + + /** + * @return true when Basic Auth credentials set + */ + private boolean basicAuthCredentialsSet() { + if (username != null && password != null) { + return true; + } else { + return false; + } + } } From 7481c2ba0e64f007bec43803a8dac666b66aba25 Mon Sep 17 00:00:00 2001 From: Michael Wechner Date: Wed, 27 Dec 2023 08:42:45 +0100 Subject: [PATCH 3/3] method introduced to get request builder default settings --- .../ollama4j/core/OllamaAPI.java | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java b/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java index ff01aa8..1bf4b9c 100644 --- a/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java +++ b/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java @@ -316,17 +316,13 @@ public class OllamaAPI { */ public List generateEmbeddings(String model, String prompt) throws IOException, InterruptedException, OllamaBaseException { - String url = this.host + "/api/embeddings"; + URI uri = URI.create(this.host + "/api/embeddings"); String jsonData = new ModelEmbeddingsRequest(model, prompt).toString(); HttpClient httpClient = HttpClient.newHttpClient(); - HttpRequest request = - HttpRequest.newBuilder() - .uri(URI.create(url)) + HttpRequest.Builder requestBuilder = getRequestBuilderDefault(uri) .header("Accept", "application/json") - .header("Content-type", "application/json") - .timeout(Duration.ofSeconds(requestTimeoutSeconds)) - .POST(HttpRequest.BodyPublishers.ofString(jsonData)) - .build(); + .POST(HttpRequest.BodyPublishers.ofString(jsonData)); + HttpRequest request = requestBuilder.build(); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); int statusCode = response.statusCode(); String responseBody = response.body(); @@ -436,16 +432,10 @@ public class OllamaAPI { long startTime = System.currentTimeMillis(); HttpClient httpClient = HttpClient.newHttpClient(); URI uri = URI.create(this.host + "/api/generate"); - HttpRequest.Builder requestBuilder = - HttpRequest.newBuilder(uri) + HttpRequest.Builder requestBuilder = getRequestBuilderDefault(uri) .POST( HttpRequest.BodyPublishers.ofString( - Utils.getObjectMapper().writeValueAsString(ollamaRequestModel))) - .header("Content-Type", "application/json") - .timeout(Duration.ofSeconds(requestTimeoutSeconds)); - if (basicAuthCredentialsSet()) { - requestBuilder.header("Authorization", getBasicAuthHeaderValue()); - } + Utils.getObjectMapper().writeValueAsString(ollamaRequestModel))); HttpRequest request = requestBuilder.build(); logger.debug("Ask model '" + ollamaRequestModel + "' ..."); HttpResponse response = @@ -485,6 +475,20 @@ public class OllamaAPI { } } + /** + * + */ + private HttpRequest.Builder getRequestBuilderDefault(URI uri) { + HttpRequest.Builder requestBuilder = + HttpRequest.newBuilder(uri) + .header("Content-Type", "application/json") + .timeout(Duration.ofSeconds(requestTimeoutSeconds)); + if (basicAuthCredentialsSet()) { + requestBuilder.header("Authorization", getBasicAuthHeaderValue()); + } + return requestBuilder; + } + /** * @return basic authentication header value (encoded credentials) */