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 {