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 3b2a9b25..65831e1b 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 d8e72de7..e3d79120 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 cf3c0ab4..7b19e027 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 f8ebb059..5fbf7e31 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 dcf7b474..2d0d90a7 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 d68624c9..7d113f09 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 bb37a4c9..3763f0a5 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 c62a7acd..a3d23ec7 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 b560d395..13f6a59b 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 68414762..52bc6844 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 2fcda434..578e1c0b 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 15725f04..b2ecb918 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 923cd874..eca4d41b 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 0ab6cbc2..879d8014 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 ae913227..c7bdba0f 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 9ac78ac8..a63a3844 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 82aba42d..c5f1627c 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 d720dd06..cd65d326 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 62f151bf..e22b7966 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 ae64f384..a6164045 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 1d60304e..f4a68f70 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 75a35abb..ce6d5e31 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 aaa98d3a..01bf446a 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 eac177b9..11b7524e 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 a94e4d16..590b59ec 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 b8b05e56..c54d83f7 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 1dc22654..805cec46 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 c6e5e539..c4ea79d9 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 41481701..6ee83926 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 b854b8ee..6d2aa5eb 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 82349dc2..b349ce3f 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 6eb83a24..f95a2dc6 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 6e035662..09a5d677 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 db338894..003538e5 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 534b204f..fc5843e1 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 4ca06727..bf9b970c 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 {