From b216d1b647cf75e31801febf3fd64d5690f7485d Mon Sep 17 00:00:00 2001 From: amithkoujalgi Date: Sun, 31 Aug 2025 16:46:32 +0530 Subject: [PATCH] Refactor imports and add fields to OllamaStructuredResult Reorders and deduplicates import statements across multiple files for consistency and clarity. Adds additional fields to OllamaStructuredResult and ensures OllamaResult is populated with these fields. Updates tests and minor code style improvements throughout the codebase. --- .../java/io/github/ollama4j/OllamaAPI.java | 54 +++++++++++-------- .../models/chat/OllamaChatMessage.java | 12 ++--- .../models/chat/OllamaChatRequest.java | 5 +- .../models/chat/OllamaChatResult.java | 4 +- .../OllamaEmbeddingResponseModel.java | 2 +- .../OllamaEmbeddingsRequestModel.java | 6 ++- .../generate/OllamaGenerateRequest.java | 5 +- .../generate/OllamaGenerateResponseModel.java | 3 +- .../ollama4j/models/request/BasicAuth.java | 4 +- .../CustomModelFileContentsRequest.java | 4 +- .../request/CustomModelFilePathRequest.java | 4 +- .../models/request/CustomModelRequest.java | 8 ++- .../ollama4j/models/request/ModelRequest.java | 4 +- .../models/request/OllamaCommonRequest.java | 4 +- .../models/request/OllamaEndpointCaller.java | 13 +++-- .../request/OllamaGenerateEndpointCaller.java | 4 +- .../models/response/LibraryModel.java | 5 +- .../models/response/LibraryModelTag.java | 2 - .../models/response/ListModelsResponse.java | 4 +- .../ollama4j/models/response/Model.java | 4 +- .../response/OllamaAsyncResultStreamer.java | 2 +- .../models/response/OllamaResult.java | 7 +-- .../response/OllamaStructuredResult.java | 25 +++++---- .../models/response/OllamaVersion.java | 2 - .../BooleanToJsonFormatFlagSerializer.java | 4 +- .../utils/FileToBase64Serializer.java | 8 +-- .../ollama4j/utils/OllamaRequestBody.java | 6 +-- .../io/github/ollama4j/utils/Options.java | 3 +- .../github/ollama4j/utils/OptionsBuilder.java | 1 - .../java/io/github/ollama4j/utils/Utils.java | 6 +-- .../ollama4j/integrationtests/WithAuth.java | 16 +++--- .../ollama4j/unittests/TestMockedAPIs.java | 3 +- .../jackson/AbstractSerializationTest.java | 5 +- .../jackson/TestChatRequestSerialization.java | 19 ++++--- .../TestEmbedRequestSerialization.java | 6 +-- .../TestGenerateRequestSerialization.java | 8 ++- 36 files changed, 136 insertions(+), 136 deletions(-) diff --git a/src/main/java/io/github/ollama4j/OllamaAPI.java b/src/main/java/io/github/ollama4j/OllamaAPI.java index 3b2a9b2..65831e1 100644 --- a/src/main/java/io/github/ollama4j/OllamaAPI.java +++ b/src/main/java/io/github/ollama4j/OllamaAPI.java @@ -52,7 +52,7 @@ import java.util.stream.Collectors; /** * The base Ollama API class. */ -@SuppressWarnings({ "DuplicatedCode", "resource" }) +@SuppressWarnings({"DuplicatedCode", "resource"}) public class OllamaAPI { private static final Logger logger = LoggerFactory.getLogger(OllamaAPI.class); @@ -101,7 +101,7 @@ public class OllamaAPI { * Default is 0 (no retries). */ @Setter - @SuppressWarnings({ "FieldMayBeFinal", "FieldCanBeLocal" }) + @SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal"}) private int numberOfRetriesForModelPull = 0; /** @@ -244,7 +244,7 @@ public class OllamaAPI { * tags, tag count, and the time when model was updated. * * @return A list of {@link LibraryModel} objects representing the models - * available in the Ollama library. + * available in the Ollama library. * @throws OllamaBaseException If the HTTP request fails or the response is not * successful (non-200 status code). * @throws IOException If an I/O error occurs during the HTTP request @@ -312,7 +312,7 @@ public class OllamaAPI { * of the library model * for which the tags need to be fetched. * @return a list of {@link LibraryModelTag} objects containing the extracted - * tags and their associated metadata. + * tags and their associated metadata. * @throws OllamaBaseException if the HTTP response status code indicates an * error (i.e., not 200 OK), * or if there is any other issue during the @@ -389,7 +389,7 @@ public class OllamaAPI { * @param modelName The name of the model to search for in the library. * @param tag The tag name to search for within the specified model. * @return The {@link LibraryModelTag} associated with the specified model and - * tag. + * tag. * @throws OllamaBaseException If there is a problem with the Ollama library * operations. * @throws IOException If an I/O error occurs during the operation. @@ -397,8 +397,8 @@ public class OllamaAPI { * @throws InterruptedException If the operation is interrupted. * @throws NoSuchElementException If the model or the tag is not found. * @deprecated This method relies on the HTML structure of the Ollama website, - * which can change at any time and break this API. It is deprecated - * and may be removed in the future. + * which can change at any time and break this API. It is deprecated + * and may be removed in the future. */ @Deprecated public LibraryModelTag findModelTagFromLibrary(String modelName, String tag) @@ -855,7 +855,7 @@ public class OllamaAPI { * @throws InterruptedException if the operation is interrupted */ public OllamaResult generate(String model, String prompt, boolean raw, Options options, - OllamaStreamHandler responseStreamHandler) throws OllamaBaseException, IOException, InterruptedException { + OllamaStreamHandler responseStreamHandler) throws OllamaBaseException, IOException, InterruptedException { OllamaGenerateRequest ollamaRequestModel = new OllamaGenerateRequest(model, prompt); ollamaRequestModel.setRaw(raw); ollamaRequestModel.setThink(false); @@ -891,7 +891,7 @@ public class OllamaAPI { * @throws InterruptedException if the operation is interrupted */ public OllamaResult generate(String model, String prompt, boolean raw, Options options, - OllamaStreamHandler thinkingStreamHandler, OllamaStreamHandler responseStreamHandler) + OllamaStreamHandler thinkingStreamHandler, OllamaStreamHandler responseStreamHandler) throws OllamaBaseException, IOException, InterruptedException { OllamaGenerateRequest ollamaRequestModel = new OllamaGenerateRequest(model, prompt); ollamaRequestModel.setRaw(raw); @@ -943,7 +943,7 @@ public class OllamaAPI { * @param format A map containing the format specification for the structured * output. * @return An instance of {@link OllamaResult} containing the structured - * response. + * response. * @throws OllamaBaseException if the response indicates an error status. * @throws IOException if an I/O error occurs during the HTTP request. * @throws InterruptedException if the operation is interrupted. @@ -984,6 +984,18 @@ public class OllamaAPI { OllamaStructuredResult.class); OllamaResult ollamaResult = new OllamaResult(structuredResult.getResponse(), structuredResult.getThinking(), structuredResult.getResponseTime(), statusCode); + + ollamaResult.setModel(structuredResult.getModel()); + ollamaResult.setCreatedAt(structuredResult.getCreatedAt()); + ollamaResult.setDone(structuredResult.isDone()); + ollamaResult.setDoneReason(structuredResult.getDoneReason()); + ollamaResult.setContext(structuredResult.getContext()); + ollamaResult.setTotalDuration(structuredResult.getTotalDuration()); + ollamaResult.setLoadDuration(structuredResult.getLoadDuration()); + ollamaResult.setPromptEvalCount(structuredResult.getPromptEvalCount()); + ollamaResult.setPromptEvalDuration(structuredResult.getPromptEvalDuration()); + ollamaResult.setEvalCount(structuredResult.getEvalCount()); + ollamaResult.setEvalDuration(structuredResult.getEvalDuration()); if (verbose) { logger.info("Model response:\n{}", ollamaResult); } @@ -1008,8 +1020,8 @@ public class OllamaAPI { * @param options Additional options or configurations to use when generating * the response. * @return {@link OllamaToolsResult} An OllamaToolsResult object containing the - * response from the AI model and the results of invoking the tools on - * that output. + * response from the AI model and the results of invoking the tools on + * that output. * @throws OllamaBaseException if the response indicates an error status * @throws IOException if an I/O error occurs during the HTTP request * @throws InterruptedException if the operation is interrupted @@ -1094,7 +1106,7 @@ public class OllamaAPI { * @param think if {@code true}, streams "thinking" tokens as well as response * tokens * @return an {@link OllamaAsyncResultStreamer} handle for polling and - * retrieving streamed results + * retrieving streamed results */ public OllamaAsyncResultStreamer generateAsync(String model, String prompt, boolean raw, boolean think) { OllamaGenerateRequest ollamaRequestModel = new OllamaGenerateRequest(model, prompt); @@ -1128,7 +1140,7 @@ public class OllamaAPI { * @throws InterruptedException if the operation is interrupted */ public OllamaResult generateWithImageFiles(String model, String prompt, List imageFiles, Options options, - OllamaStreamHandler streamHandler) throws OllamaBaseException, IOException, InterruptedException { + OllamaStreamHandler streamHandler) throws OllamaBaseException, IOException, InterruptedException { List images = new ArrayList<>(); for (File imageFile : imageFiles) { images.add(encodeFileToBase64(imageFile)); @@ -1175,7 +1187,7 @@ public class OllamaAPI { * @throws URISyntaxException if the URI for the request is malformed */ public OllamaResult generateWithImageURLs(String model, String prompt, List imageURLs, Options options, - OllamaStreamHandler streamHandler) + OllamaStreamHandler streamHandler) throws OllamaBaseException, IOException, InterruptedException, URISyntaxException { List images = new ArrayList<>(); for (String imageURL : imageURLs) { @@ -1217,13 +1229,13 @@ public class OllamaAPI { * @param streamHandler optional callback that will be invoked with each * streamed response; if null, streaming is disabled * @return OllamaResult containing the response text and the time taken for the - * response + * response * @throws OllamaBaseException if the response indicates an error status * @throws IOException if an I/O error occurs during the HTTP request * @throws InterruptedException if the operation is interrupted */ public OllamaResult generateWithImages(String model, String prompt, List images, Options options, - OllamaStreamHandler streamHandler) throws OllamaBaseException, IOException, InterruptedException { + OllamaStreamHandler streamHandler) throws OllamaBaseException, IOException, InterruptedException { List encodedImages = new ArrayList<>(); for (byte[] image : images) { encodedImages.add(encodeByteArrayToBase64(image)); @@ -1257,7 +1269,7 @@ public class OllamaAPI { * @param model the ollama model to ask the question to * @param messages chat history / message stack to send to the model * @return {@link OllamaChatResult} containing the api response and the message - * history including the newly acquired assistant response. + * history including the newly acquired assistant response. * @throws OllamaBaseException any response code than 200 has been returned * @throws IOException in case the responseStream can not be read * @throws InterruptedException in case the server is not reachable or @@ -1323,7 +1335,7 @@ public class OllamaAPI { * @throws ToolInvocationException if the tool invocation fails */ public OllamaChatResult chat(OllamaChatRequest request, OllamaStreamHandler thinkingStreamHandler, - OllamaStreamHandler responseStreamHandler) + OllamaStreamHandler responseStreamHandler) throws OllamaBaseException, IOException, InterruptedException, ToolInvocationException { return chatStreaming(request, new OllamaChatStreamObserver(thinkingStreamHandler, responseStreamHandler)); } @@ -1468,7 +1480,7 @@ public class OllamaAPI { registerAnnotatedTools(provider.getDeclaredConstructor().newInstance()); } } catch (InstantiationException | NoSuchMethodException | IllegalAccessException - | InvocationTargetException e) { + | InvocationTargetException e) { throw new RuntimeException(e); } } @@ -1607,7 +1619,7 @@ public class OllamaAPI { * @throws InterruptedException if the thread is interrupted during the request. */ private OllamaResult generateSyncForOllamaRequestModel(OllamaGenerateRequest ollamaRequestModel, - OllamaStreamHandler thinkingStreamHandler, OllamaStreamHandler responseStreamHandler) + OllamaStreamHandler thinkingStreamHandler, OllamaStreamHandler responseStreamHandler) throws OllamaBaseException, IOException, InterruptedException { OllamaGenerateEndpointCaller requestCaller = new OllamaGenerateEndpointCaller(host, auth, requestTimeoutSeconds, verbose); diff --git a/src/main/java/io/github/ollama4j/models/chat/OllamaChatMessage.java b/src/main/java/io/github/ollama4j/models/chat/OllamaChatMessage.java index d8e72de..e3d7912 100644 --- a/src/main/java/io/github/ollama4j/models/chat/OllamaChatMessage.java +++ b/src/main/java/io/github/ollama4j/models/chat/OllamaChatMessage.java @@ -1,21 +1,15 @@ package io.github.ollama4j.models.chat; -import static io.github.ollama4j.utils.Utils.getObjectMapper; - +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import io.github.ollama4j.utils.FileToBase64Serializer; +import lombok.*; import java.util.List; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; +import static io.github.ollama4j.utils.Utils.getObjectMapper; /** * Defines a single Message to be used inside a chat request against the ollama /api/chat endpoint. diff --git a/src/main/java/io/github/ollama4j/models/chat/OllamaChatRequest.java b/src/main/java/io/github/ollama4j/models/chat/OllamaChatRequest.java index cf3c0ab..7b19e02 100644 --- a/src/main/java/io/github/ollama4j/models/chat/OllamaChatRequest.java +++ b/src/main/java/io/github/ollama4j/models/chat/OllamaChatRequest.java @@ -1,14 +1,13 @@ package io.github.ollama4j.models.chat; -import java.util.List; - import io.github.ollama4j.models.request.OllamaCommonRequest; import io.github.ollama4j.tools.Tools; import io.github.ollama4j.utils.OllamaRequestBody; - import lombok.Getter; import lombok.Setter; +import java.util.List; + /** * Defines a Request to use against the ollama /api/chat endpoint. * diff --git a/src/main/java/io/github/ollama4j/models/chat/OllamaChatResult.java b/src/main/java/io/github/ollama4j/models/chat/OllamaChatResult.java index f8ebb05..5fbf7e3 100644 --- a/src/main/java/io/github/ollama4j/models/chat/OllamaChatResult.java +++ b/src/main/java/io/github/ollama4j/models/chat/OllamaChatResult.java @@ -1,10 +1,10 @@ package io.github.ollama4j.models.chat; -import java.util.List; - import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; +import java.util.List; + import static io.github.ollama4j.utils.Utils.getObjectMapper; /** diff --git a/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingResponseModel.java b/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingResponseModel.java index dcf7b47..2d0d90a 100644 --- a/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingResponseModel.java +++ b/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingResponseModel.java @@ -1,9 +1,9 @@ package io.github.ollama4j.models.embeddings; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; import java.util.List; -import lombok.Data; @SuppressWarnings("unused") @Data diff --git a/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingsRequestModel.java b/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingsRequestModel.java index d68624c..7d113f0 100644 --- a/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingsRequestModel.java +++ b/src/main/java/io/github/ollama4j/models/embeddings/OllamaEmbeddingsRequestModel.java @@ -1,7 +1,5 @@ package io.github.ollama4j.models.embeddings; -import static io.github.ollama4j.utils.Utils.getObjectMapper; -import java.util.Map; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Data; @@ -9,6 +7,10 @@ import lombok.NoArgsConstructor; import lombok.NonNull; import lombok.RequiredArgsConstructor; +import java.util.Map; + +import static io.github.ollama4j.utils.Utils.getObjectMapper; + @Data @RequiredArgsConstructor @NoArgsConstructor diff --git a/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateRequest.java b/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateRequest.java index bb37a4c..3763f0a 100644 --- a/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateRequest.java +++ b/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateRequest.java @@ -3,12 +3,11 @@ package io.github.ollama4j.models.generate; import io.github.ollama4j.models.request.OllamaCommonRequest; import io.github.ollama4j.utils.OllamaRequestBody; - -import java.util.List; - import lombok.Getter; import lombok.Setter; +import java.util.List; + @Getter @Setter public class OllamaGenerateRequest extends OllamaCommonRequest implements OllamaRequestBody{ diff --git a/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateResponseModel.java b/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateResponseModel.java index c62a7ac..a3d23ec 100644 --- a/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateResponseModel.java +++ b/src/main/java/io/github/ollama4j/models/generate/OllamaGenerateResponseModel.java @@ -2,11 +2,10 @@ package io.github.ollama4j.models.generate; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; import java.util.List; -import lombok.Data; - @Data @JsonIgnoreProperties(ignoreUnknown = true) public class OllamaGenerateResponseModel { diff --git a/src/main/java/io/github/ollama4j/models/request/BasicAuth.java b/src/main/java/io/github/ollama4j/models/request/BasicAuth.java index b560d39..13f6a59 100644 --- a/src/main/java/io/github/ollama4j/models/request/BasicAuth.java +++ b/src/main/java/io/github/ollama4j/models/request/BasicAuth.java @@ -1,11 +1,11 @@ package io.github.ollama4j.models.request; -import java.util.Base64; - import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Base64; + @Data @AllArgsConstructor @EqualsAndHashCode(callSuper = false) diff --git a/src/main/java/io/github/ollama4j/models/request/CustomModelFileContentsRequest.java b/src/main/java/io/github/ollama4j/models/request/CustomModelFileContentsRequest.java index 6841476..52bc684 100644 --- a/src/main/java/io/github/ollama4j/models/request/CustomModelFileContentsRequest.java +++ b/src/main/java/io/github/ollama4j/models/request/CustomModelFileContentsRequest.java @@ -1,11 +1,11 @@ package io.github.ollama4j.models.request; -import static io.github.ollama4j.utils.Utils.getObjectMapper; - import com.fasterxml.jackson.core.JsonProcessingException; import lombok.AllArgsConstructor; import lombok.Data; +import static io.github.ollama4j.utils.Utils.getObjectMapper; + @Data @AllArgsConstructor public class CustomModelFileContentsRequest { diff --git a/src/main/java/io/github/ollama4j/models/request/CustomModelFilePathRequest.java b/src/main/java/io/github/ollama4j/models/request/CustomModelFilePathRequest.java index 2fcda43..578e1c0 100644 --- a/src/main/java/io/github/ollama4j/models/request/CustomModelFilePathRequest.java +++ b/src/main/java/io/github/ollama4j/models/request/CustomModelFilePathRequest.java @@ -1,11 +1,11 @@ package io.github.ollama4j.models.request; -import static io.github.ollama4j.utils.Utils.getObjectMapper; - import com.fasterxml.jackson.core.JsonProcessingException; import lombok.AllArgsConstructor; import lombok.Data; +import static io.github.ollama4j.utils.Utils.getObjectMapper; + @Data @AllArgsConstructor public class CustomModelFilePathRequest { diff --git a/src/main/java/io/github/ollama4j/models/request/CustomModelRequest.java b/src/main/java/io/github/ollama4j/models/request/CustomModelRequest.java index 15725f0..b2ecb91 100644 --- a/src/main/java/io/github/ollama4j/models/request/CustomModelRequest.java +++ b/src/main/java/io/github/ollama4j/models/request/CustomModelRequest.java @@ -1,17 +1,15 @@ package io.github.ollama4j.models.request; -import static io.github.ollama4j.utils.Utils.getObjectMapper; - import com.fasterxml.jackson.core.JsonProcessingException; import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.Data; -import lombok.AllArgsConstructor; import lombok.Builder; +import lombok.Data; import java.util.List; import java.util.Map; +import static io.github.ollama4j.utils.Utils.getObjectMapper; + @Data @AllArgsConstructor diff --git a/src/main/java/io/github/ollama4j/models/request/ModelRequest.java b/src/main/java/io/github/ollama4j/models/request/ModelRequest.java index 923cd87..eca4d41 100644 --- a/src/main/java/io/github/ollama4j/models/request/ModelRequest.java +++ b/src/main/java/io/github/ollama4j/models/request/ModelRequest.java @@ -1,11 +1,11 @@ package io.github.ollama4j.models.request; -import static io.github.ollama4j.utils.Utils.getObjectMapper; - import com.fasterxml.jackson.core.JsonProcessingException; import lombok.AllArgsConstructor; import lombok.Data; +import static io.github.ollama4j.utils.Utils.getObjectMapper; + @Data @AllArgsConstructor public class ModelRequest { diff --git a/src/main/java/io/github/ollama4j/models/request/OllamaCommonRequest.java b/src/main/java/io/github/ollama4j/models/request/OllamaCommonRequest.java index 0ab6cbc..879d801 100644 --- a/src/main/java/io/github/ollama4j/models/request/OllamaCommonRequest.java +++ b/src/main/java/io/github/ollama4j/models/request/OllamaCommonRequest.java @@ -1,15 +1,15 @@ package io.github.ollama4j.models.request; -import java.util.Map; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.annotation.JsonSerialize; - import io.github.ollama4j.utils.BooleanToJsonFormatFlagSerializer; import io.github.ollama4j.utils.Utils; import lombok.Data; +import java.util.Map; + @Data @JsonInclude(JsonInclude.Include.NON_NULL) public abstract class OllamaCommonRequest { diff --git a/src/main/java/io/github/ollama4j/models/request/OllamaEndpointCaller.java b/src/main/java/io/github/ollama4j/models/request/OllamaEndpointCaller.java index ae91322..c7bdba0 100644 --- a/src/main/java/io/github/ollama4j/models/request/OllamaEndpointCaller.java +++ b/src/main/java/io/github/ollama4j/models/request/OllamaEndpointCaller.java @@ -1,16 +1,15 @@ package io.github.ollama4j.models.request; +import io.github.ollama4j.OllamaAPI; +import io.github.ollama4j.utils.Constants; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.net.URI; import java.net.http.HttpRequest; import java.time.Duration; -import io.github.ollama4j.utils.Constants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import io.github.ollama4j.OllamaAPI; -import lombok.Getter; - /** * Abstract helperclass to call the ollama api server. */ diff --git a/src/main/java/io/github/ollama4j/models/request/OllamaGenerateEndpointCaller.java b/src/main/java/io/github/ollama4j/models/request/OllamaGenerateEndpointCaller.java index 9ac78ac..a63a384 100644 --- a/src/main/java/io/github/ollama4j/models/request/OllamaGenerateEndpointCaller.java +++ b/src/main/java/io/github/ollama4j/models/request/OllamaGenerateEndpointCaller.java @@ -2,11 +2,11 @@ package io.github.ollama4j.models.request; import com.fasterxml.jackson.core.JsonProcessingException; import io.github.ollama4j.exceptions.OllamaBaseException; -import io.github.ollama4j.models.response.OllamaErrorResponse; -import io.github.ollama4j.models.response.OllamaResult; import io.github.ollama4j.models.generate.OllamaGenerateResponseModel; import io.github.ollama4j.models.generate.OllamaGenerateStreamObserver; import io.github.ollama4j.models.generate.OllamaStreamHandler; +import io.github.ollama4j.models.response.OllamaErrorResponse; +import io.github.ollama4j.models.response.OllamaResult; import io.github.ollama4j.utils.OllamaRequestBody; import io.github.ollama4j.utils.Utils; import org.slf4j.Logger; diff --git a/src/main/java/io/github/ollama4j/models/response/LibraryModel.java b/src/main/java/io/github/ollama4j/models/response/LibraryModel.java index 82aba42..c5f1627 100644 --- a/src/main/java/io/github/ollama4j/models/response/LibraryModel.java +++ b/src/main/java/io/github/ollama4j/models/response/LibraryModel.java @@ -1,9 +1,10 @@ package io.github.ollama4j.models.response; -import java.util.ArrayList; -import java.util.List; import lombok.Data; +import java.util.ArrayList; +import java.util.List; + @Data public class LibraryModel { diff --git a/src/main/java/io/github/ollama4j/models/response/LibraryModelTag.java b/src/main/java/io/github/ollama4j/models/response/LibraryModelTag.java index d720dd0..cd65d32 100644 --- a/src/main/java/io/github/ollama4j/models/response/LibraryModelTag.java +++ b/src/main/java/io/github/ollama4j/models/response/LibraryModelTag.java @@ -2,8 +2,6 @@ package io.github.ollama4j.models.response; import lombok.Data; -import java.util.List; - @Data public class LibraryModelTag { private String name; diff --git a/src/main/java/io/github/ollama4j/models/response/ListModelsResponse.java b/src/main/java/io/github/ollama4j/models/response/ListModelsResponse.java index 62f151b..e22b796 100644 --- a/src/main/java/io/github/ollama4j/models/response/ListModelsResponse.java +++ b/src/main/java/io/github/ollama4j/models/response/ListModelsResponse.java @@ -1,9 +1,9 @@ package io.github.ollama4j.models.response; -import java.util.List; - import lombok.Data; +import java.util.List; + @Data public class ListModelsResponse { private List models; diff --git a/src/main/java/io/github/ollama4j/models/response/Model.java b/src/main/java/io/github/ollama4j/models/response/Model.java index ae64f38..a616404 100644 --- a/src/main/java/io/github/ollama4j/models/response/Model.java +++ b/src/main/java/io/github/ollama4j/models/response/Model.java @@ -1,13 +1,13 @@ package io.github.ollama4j.models.response; -import java.time.OffsetDateTime; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import io.github.ollama4j.utils.Utils; import lombok.Data; +import java.time.OffsetDateTime; + @Data @JsonIgnoreProperties(ignoreUnknown = true) public class Model { diff --git a/src/main/java/io/github/ollama4j/models/response/OllamaAsyncResultStreamer.java b/src/main/java/io/github/ollama4j/models/response/OllamaAsyncResultStreamer.java index 1d60304..f4a68f7 100644 --- a/src/main/java/io/github/ollama4j/models/response/OllamaAsyncResultStreamer.java +++ b/src/main/java/io/github/ollama4j/models/response/OllamaAsyncResultStreamer.java @@ -3,12 +3,12 @@ package io.github.ollama4j.models.response; import io.github.ollama4j.exceptions.OllamaBaseException; import io.github.ollama4j.models.generate.OllamaGenerateRequest; import io.github.ollama4j.models.generate.OllamaGenerateResponseModel; +import io.github.ollama4j.utils.Constants; import io.github.ollama4j.utils.Utils; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import io.github.ollama4j.utils.Constants; import java.io.BufferedReader; import java.io.IOException; diff --git a/src/main/java/io/github/ollama4j/models/response/OllamaResult.java b/src/main/java/io/github/ollama4j/models/response/OllamaResult.java index 75a35ab..ce6d5e3 100644 --- a/src/main/java/io/github/ollama4j/models/response/OllamaResult.java +++ b/src/main/java/io/github/ollama4j/models/response/OllamaResult.java @@ -1,20 +1,17 @@ package io.github.ollama4j.models.response; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; - -import io.github.ollama4j.models.generate.OllamaGenerateResponseModel; import lombok.Data; import lombok.Getter; -import static io.github.ollama4j.utils.Utils.getObjectMapper; - import java.util.HashMap; import java.util.List; import java.util.Map; +import static io.github.ollama4j.utils.Utils.getObjectMapper; + /** * The type Ollama result. */ diff --git a/src/main/java/io/github/ollama4j/models/response/OllamaStructuredResult.java b/src/main/java/io/github/ollama4j/models/response/OllamaStructuredResult.java index aaa98d3..01bf446 100644 --- a/src/main/java/io/github/ollama4j/models/response/OllamaStructuredResult.java +++ b/src/main/java/io/github/ollama4j/models/response/OllamaStructuredResult.java @@ -1,19 +1,18 @@ package io.github.ollama4j.models.response; -import static io.github.ollama4j.utils.Utils.getObjectMapper; - -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; - import lombok.Data; import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.List; +import java.util.Map; + +import static io.github.ollama4j.utils.Utils.getObjectMapper; + @Getter @SuppressWarnings("unused") @Data @@ -22,13 +21,21 @@ import lombok.NoArgsConstructor; public class OllamaStructuredResult { private String response; private String thinking; - private int httpStatusCode; - private long responseTime = 0; - private String model; + private @JsonProperty("created_at") String createdAt; + private boolean done; + private @JsonProperty("done_reason") String doneReason; + private List context; + private @JsonProperty("total_duration") Long totalDuration; + private @JsonProperty("load_duration") Long loadDuration; + private @JsonProperty("prompt_eval_count") Integer promptEvalCount; + private @JsonProperty("prompt_eval_duration") Long promptEvalDuration; + private @JsonProperty("eval_count") Integer evalCount; + private @JsonProperty("eval_duration") Long evalDuration; + public OllamaStructuredResult(String response, long responseTime, int httpStatusCode) { this.response = response; this.responseTime = responseTime; diff --git a/src/main/java/io/github/ollama4j/models/response/OllamaVersion.java b/src/main/java/io/github/ollama4j/models/response/OllamaVersion.java index eac177b..11b7524 100644 --- a/src/main/java/io/github/ollama4j/models/response/OllamaVersion.java +++ b/src/main/java/io/github/ollama4j/models/response/OllamaVersion.java @@ -2,8 +2,6 @@ package io.github.ollama4j.models.response; import lombok.Data; -import java.util.List; - @Data public class OllamaVersion { private String version; diff --git a/src/main/java/io/github/ollama4j/utils/BooleanToJsonFormatFlagSerializer.java b/src/main/java/io/github/ollama4j/utils/BooleanToJsonFormatFlagSerializer.java index a94e4d1..590b59e 100644 --- a/src/main/java/io/github/ollama4j/utils/BooleanToJsonFormatFlagSerializer.java +++ b/src/main/java/io/github/ollama4j/utils/BooleanToJsonFormatFlagSerializer.java @@ -1,11 +1,11 @@ package io.github.ollama4j.utils; -import java.io.IOException; - import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; +import java.io.IOException; + public class BooleanToJsonFormatFlagSerializer extends JsonSerializer{ @Override diff --git a/src/main/java/io/github/ollama4j/utils/FileToBase64Serializer.java b/src/main/java/io/github/ollama4j/utils/FileToBase64Serializer.java index b8b05e5..c54d83f 100644 --- a/src/main/java/io/github/ollama4j/utils/FileToBase64Serializer.java +++ b/src/main/java/io/github/ollama4j/utils/FileToBase64Serializer.java @@ -1,13 +1,13 @@ package io.github.ollama4j.utils; -import java.io.IOException; -import java.util.Base64; -import java.util.Collection; - import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; +import java.io.IOException; +import java.util.Base64; +import java.util.Collection; + public class FileToBase64Serializer extends JsonSerializer> { @Override diff --git a/src/main/java/io/github/ollama4j/utils/OllamaRequestBody.java b/src/main/java/io/github/ollama4j/utils/OllamaRequestBody.java index 1dc2265..805cec4 100644 --- a/src/main/java/io/github/ollama4j/utils/OllamaRequestBody.java +++ b/src/main/java/io/github/ollama4j/utils/OllamaRequestBody.java @@ -1,11 +1,11 @@ package io.github.ollama4j.utils; -import java.net.http.HttpRequest.BodyPublisher; -import java.net.http.HttpRequest.BodyPublishers; - import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.JsonProcessingException; +import java.net.http.HttpRequest.BodyPublisher; +import java.net.http.HttpRequest.BodyPublishers; + /** * Interface to represent a OllamaRequest as HTTP-Request Body via {@link BodyPublishers}. */ diff --git a/src/main/java/io/github/ollama4j/utils/Options.java b/src/main/java/io/github/ollama4j/utils/Options.java index c6e5e53..c4ea79d 100644 --- a/src/main/java/io/github/ollama4j/utils/Options.java +++ b/src/main/java/io/github/ollama4j/utils/Options.java @@ -1,8 +1,9 @@ package io.github.ollama4j.utils; -import java.util.Map; import lombok.Data; +import java.util.Map; + /** Class for options for Ollama model. */ @Data public class Options { diff --git a/src/main/java/io/github/ollama4j/utils/OptionsBuilder.java b/src/main/java/io/github/ollama4j/utils/OptionsBuilder.java index 4148170..6ee8392 100644 --- a/src/main/java/io/github/ollama4j/utils/OptionsBuilder.java +++ b/src/main/java/io/github/ollama4j/utils/OptionsBuilder.java @@ -1,6 +1,5 @@ package io.github.ollama4j.utils; -import java.io.IOException; import java.util.HashMap; /** Builder class for creating options for Ollama model. */ diff --git a/src/main/java/io/github/ollama4j/utils/Utils.java b/src/main/java/io/github/ollama4j/utils/Utils.java index b854b8e..6d2aa5e 100644 --- a/src/main/java/io/github/ollama4j/utils/Utils.java +++ b/src/main/java/io/github/ollama4j/utils/Utils.java @@ -1,5 +1,8 @@ package io.github.ollama4j.utils; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -9,9 +12,6 @@ import java.net.URISyntaxException; import java.net.URL; import java.util.Objects; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - public class Utils { private static ObjectMapper objectMapper; diff --git a/src/test/java/io/github/ollama4j/integrationtests/WithAuth.java b/src/test/java/io/github/ollama4j/integrationtests/WithAuth.java index 82349dc..b349ce3 100644 --- a/src/test/java/io/github/ollama4j/integrationtests/WithAuth.java +++ b/src/test/java/io/github/ollama4j/integrationtests/WithAuth.java @@ -24,7 +24,6 @@ import java.io.FileWriter; import java.io.IOException; import java.net.URISyntaxException; import java.time.Duration; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,9 +41,8 @@ public class WithAuth { private static final String OLLAMA_VERSION = "0.6.1"; private static final String NGINX_VERSION = "nginx:1.23.4-alpine"; private static final String BEARER_AUTH_TOKEN = "secret-token"; - private static final String GENERAL_PURPOSE_MODEL = "gemma3:270m"; - private static final String THINKING_MODEL = "gpt-oss:20b"; +// private static final String THINKING_MODEL = "gpt-oss:20b"; private static OllamaContainer ollama; @@ -52,7 +50,7 @@ public class WithAuth { private static OllamaAPI api; @BeforeAll - public static void setUp() { + static void setUp() { ollama = createOllamaContainer(); ollama.start(); @@ -135,14 +133,14 @@ public class WithAuth { @Test @Order(1) - void testOllamaBehindProxy() throws InterruptedException { + void testOllamaBehindProxy() { api.setBearerAuth(BEARER_AUTH_TOKEN); assertTrue(api.ping(), "Expected OllamaAPI to successfully ping through NGINX with valid auth token."); } @Test @Order(1) - void testWithWrongToken() throws InterruptedException { + void testWithWrongToken() { api.setBearerAuth("wrong-token"); assertFalse(api.ping(), "Expected OllamaAPI ping to fail through NGINX with an invalid auth token."); } @@ -152,8 +150,8 @@ public class WithAuth { void testAskModelWithStructuredOutput() throws OllamaBaseException, IOException, InterruptedException, URISyntaxException { api.setBearerAuth(BEARER_AUTH_TOKEN); - - api.pullModel(THINKING_MODEL); + String model = GENERAL_PURPOSE_MODEL; + api.pullModel(model); String prompt = "The sun is shining brightly and is directly overhead at the zenith, casting my shadow over my foot, so it must be noon."; @@ -170,7 +168,7 @@ public class WithAuth { }); format.put("required", List.of("isNoon")); - OllamaResult result = api.generate(THINKING_MODEL, prompt, format); + OllamaResult result = api.generate(model, prompt, format); assertNotNull(result); assertNotNull(result.getResponse()); diff --git a/src/test/java/io/github/ollama4j/unittests/TestMockedAPIs.java b/src/test/java/io/github/ollama4j/unittests/TestMockedAPIs.java index 6eb83a2..f95a2dc 100644 --- a/src/test/java/io/github/ollama4j/unittests/TestMockedAPIs.java +++ b/src/test/java/io/github/ollama4j/unittests/TestMockedAPIs.java @@ -21,7 +21,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.Mockito.*; class TestMockedAPIs { diff --git a/src/test/java/io/github/ollama4j/unittests/jackson/AbstractSerializationTest.java b/src/test/java/io/github/ollama4j/unittests/jackson/AbstractSerializationTest.java index 6e03566..09a5d67 100644 --- a/src/test/java/io/github/ollama4j/unittests/jackson/AbstractSerializationTest.java +++ b/src/test/java/io/github/ollama4j/unittests/jackson/AbstractSerializationTest.java @@ -1,11 +1,12 @@ package io.github.ollama4j.unittests.jackson; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.github.ollama4j.utils.Utils; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + public abstract class AbstractSerializationTest { protected ObjectMapper mapper = Utils.getObjectMapper(); diff --git a/src/test/java/io/github/ollama4j/unittests/jackson/TestChatRequestSerialization.java b/src/test/java/io/github/ollama4j/unittests/jackson/TestChatRequestSerialization.java index db33889..003538e 100644 --- a/src/test/java/io/github/ollama4j/unittests/jackson/TestChatRequestSerialization.java +++ b/src/test/java/io/github/ollama4j/unittests/jackson/TestChatRequestSerialization.java @@ -1,20 +1,19 @@ package io.github.ollama4j.unittests.jackson; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrowsExactly; +import io.github.ollama4j.models.chat.OllamaChatMessageRole; +import io.github.ollama4j.models.chat.OllamaChatRequest; +import io.github.ollama4j.models.chat.OllamaChatRequestBuilder; +import io.github.ollama4j.utils.OptionsBuilder; +import org.json.JSONObject; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.Collections; import java.util.List; -import io.github.ollama4j.models.chat.OllamaChatRequest; -import org.json.JSONObject; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import io.github.ollama4j.models.chat.OllamaChatMessageRole; -import io.github.ollama4j.models.chat.OllamaChatRequestBuilder; -import io.github.ollama4j.utils.OptionsBuilder; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrowsExactly; public class TestChatRequestSerialization extends AbstractSerializationTest { diff --git a/src/test/java/io/github/ollama4j/unittests/jackson/TestEmbedRequestSerialization.java b/src/test/java/io/github/ollama4j/unittests/jackson/TestEmbedRequestSerialization.java index 534b204..fc5843e 100644 --- a/src/test/java/io/github/ollama4j/unittests/jackson/TestEmbedRequestSerialization.java +++ b/src/test/java/io/github/ollama4j/unittests/jackson/TestEmbedRequestSerialization.java @@ -1,12 +1,12 @@ package io.github.ollama4j.unittests.jackson; -import static org.junit.jupiter.api.Assertions.assertEquals; - import io.github.ollama4j.models.embeddings.OllamaEmbedRequestBuilder; import io.github.ollama4j.models.embeddings.OllamaEmbedRequestModel; +import io.github.ollama4j.utils.OptionsBuilder; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import io.github.ollama4j.utils.OptionsBuilder; + +import static org.junit.jupiter.api.Assertions.assertEquals; public class TestEmbedRequestSerialization extends AbstractSerializationTest { diff --git a/src/test/java/io/github/ollama4j/unittests/jackson/TestGenerateRequestSerialization.java b/src/test/java/io/github/ollama4j/unittests/jackson/TestGenerateRequestSerialization.java index 4ca0672..bf9b970 100644 --- a/src/test/java/io/github/ollama4j/unittests/jackson/TestGenerateRequestSerialization.java +++ b/src/test/java/io/github/ollama4j/unittests/jackson/TestGenerateRequestSerialization.java @@ -1,15 +1,13 @@ package io.github.ollama4j.unittests.jackson; -import static org.junit.jupiter.api.Assertions.assertEquals; - import io.github.ollama4j.models.generate.OllamaGenerateRequest; +import io.github.ollama4j.models.generate.OllamaGenerateRequestBuilder; +import io.github.ollama4j.utils.OptionsBuilder; import org.json.JSONObject; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; - -import io.github.ollama4j.models.generate.OllamaGenerateRequestBuilder; -import io.github.ollama4j.utils.OptionsBuilder; +import static org.junit.jupiter.api.Assertions.assertEquals; public class TestGenerateRequestSerialization extends AbstractSerializationTest {