From bb1c920e22fd0b68dd1fc964ff4cc6e6df63f26e Mon Sep 17 00:00:00 2001 From: Amith Koujalgi Date: Wed, 3 Jan 2024 16:18:49 +0530 Subject: [PATCH] - updated `askWithImageFiles` and `askWithImageURLs` APIs to use `Options` - updated jacoco version --- docs/src/css/custom.css | 44 +- pom.xml | 547 +++++++++--------- .../ollama4j/core/OllamaAPI.java | 21 +- .../integrationtests/TestRealAPIs.java | 87 +++ .../ollama4j/unittests/TestMockedAPIs.java | 18 +- src/test/resources/dog-on-a-boat.jpg | Bin 0 -> 52925 bytes src/test/resources/test-config.properties | 3 +- 7 files changed, 419 insertions(+), 301 deletions(-) create mode 100644 src/test/resources/dog-on-a-boat.jpg diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 2bc6a4c..f1d6e94 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -6,25 +6,35 @@ /* You can override the default Infima variables here. */ :root { - --ifm-color-primary: #2e8555; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); } /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme='dark'] { - --ifm-color-primary: #25c2a0; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + --ifm-color-primary: #25c2a0; + --ifm-color-primary-dark: #21af90; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); } + +article > header > h1 { + font-size: 2rem !important; +} + +div > h1, +header > h1, +h2 > a { + font-size: 2rem !important; +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index d0e25e7..69dd190 100644 --- a/pom.xml +++ b/pom.xml @@ -1,23 +1,24 @@ - + 4.0.0 io.github.amithkoujalgi ollama4j 1.0.43-SNAPSHOT - Ollama4j - Java library for interacting with Ollama API. - https://github.com/amithkoujalgi/ollama4j + Ollama4j + Java library for interacting with Ollama API. + https://github.com/amithkoujalgi/ollama4j - - 11 - 11 - UTF-8 - 3.0.0-M5 - 3.0.0-M5 - 1.18.30 - + + 11 + 11 + UTF-8 + 3.0.0-M5 + 3.0.0-M5 + 1.18.30 + @@ -28,273 +29,273 @@ - - - MIT License - https://raw.githubusercontent.com/amithkoujalgi/ollama4j/main/LICENSE - - + + + MIT License + https://raw.githubusercontent.com/amithkoujalgi/ollama4j/main/LICENSE + + - - scm:git:git@github.com:amithkoujalgi/ollama4j.git - scm:git:https://github.com/amithkoujalgi/ollama4j.git - https://github.com/amithkoujalgi/ollama4j - v1.0.16 - + + scm:git:git@github.com:amithkoujalgi/ollama4j.git + scm:git:https://github.com/amithkoujalgi/ollama4j.git + https://github.com/amithkoujalgi/ollama4j + v1.0.16 + - - - - org.apache.maven.plugins - maven-source-plugin - 3.3.0 - - - attach-sources - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.5.0 - - - attach-javadocs - - jar - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - ${skipUnitTests} - - **/unittests/*.java - - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - ${maven-failsafe-plugin.version} - - - **/integrationtests/*.java - - - **/unittests/*.java - - ${skipIntegrationTests} - - - - - integration-test - verify - - - - - - org.apache.maven.plugins - maven-release-plugin - 3.0.1 - - - v@{project.version} - - - - - - - - org.projectlombok - lombok - ${lombok.version} - provided - - - com.fasterxml.jackson.core - jackson-databind - 2.15.3 - - - ch.qos.logback - logback-classic - 1.4.12 - test - - - org.slf4j - slf4j-api - 2.0.9 - - - org.junit.jupiter - junit-jupiter-api - 5.10.0 - test - - - org.mockito - mockito-core - 4.1.0 - test - - - - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2 - - - - - - unit-tests - - unit - false - true - - - true - - + - - org.jacoco - jacoco-maven-plugin - 0.8.7 - - - - prepare-agent - - - - report - test - - report - - - - - - - - - integration-tests - - integration - true - false - - - - ci-cd - - unit - true - true - - - - - org.apache.maven.plugins - maven-gpg-plugin - 3.1.0 - - - sign-artifacts - verify - - sign - + + org.apache.maven.plugins + maven-source-plugin + 3.3.0 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.5.0 + + + attach-javadocs + + jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} - - - --pinentry-mode - loopback - + ${skipUnitTests} + + **/unittests/*.java + - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.13 - true - - ossrh - https://s01.oss.sonatype.org/ - true - - + - - org.jacoco - jacoco-maven-plugin - 0.8.7 - - - - prepare-agent - - - - report - test - - report - - - - + + + org.apache.maven.plugins + maven-failsafe-plugin + ${maven-failsafe-plugin.version} + + + **/integrationtests/*.java + + + **/unittests/*.java + + ${skipIntegrationTests} + + + + + integration-test + verify + + + + + + org.apache.maven.plugins + maven-release-plugin + 3.0.1 + + + v@{project.version} + + - - - + + + + + org.projectlombok + lombok + ${lombok.version} + provided + + + com.fasterxml.jackson.core + jackson-databind + 2.15.3 + + + ch.qos.logback + logback-classic + 1.4.12 + test + + + org.slf4j + slf4j-api + 2.0.9 + + + org.junit.jupiter + junit-jupiter-api + 5.10.0 + test + + + org.mockito + mockito-core + 4.1.0 + test + + + + + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2 + + + + + + unit-tests + + unit + false + true + + + true + + + + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + + prepare-agent + + + + report + test + + report + + + + + + + + + integration-tests + + integration + true + false + + + + ci-cd + + unit + true + true + + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.1.0 + + + sign-artifacts + verify + + sign + + + + + --pinentry-mode + loopback + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.13 + true + + ossrh + https://s01.oss.sonatype.org/ + true + + + + + org.jacoco + jacoco-maven-plugin + 0.8.7 + + + + prepare-agent + + + + report + test + + report + + + + + + + + \ No newline at end of file diff --git a/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java b/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java index c61c55f..19cfb26 100644 --- a/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java +++ b/src/main/java/io/github/amithkoujalgi/ollama4j/core/OllamaAPI.java @@ -372,15 +372,20 @@ public class OllamaAPI { * @param model the ollama model to ask the question to * @param prompt the prompt/question text * @param imageFiles the list of image files to use for the question + * @param options the Options object - More + * details on the options * @return OllamaResult that includes response text and time taken for response */ - public OllamaResult askWithImageFiles(String model, String prompt, List imageFiles) + public OllamaResult askWithImageFiles( + String model, String prompt, List imageFiles, Options options) throws OllamaBaseException, IOException, InterruptedException { List images = new ArrayList<>(); for (File imageFile : imageFiles) { images.add(encodeFileToBase64(imageFile)); } OllamaRequestModel ollamaRequestModel = new OllamaRequestModel(model, prompt, images); + ollamaRequestModel.setOptions(options.getOptionsMap()); return askSync(ollamaRequestModel); } @@ -391,15 +396,20 @@ public class OllamaAPI { * @param model the ollama model to ask the question to * @param prompt the prompt/question text * @param imageURLs the list of image URLs to use for the question + * @param options the Options object - More + * details on the options * @return OllamaResult that includes response text and time taken for response */ - public OllamaResult askWithImageURLs(String model, String prompt, List imageURLs) + public OllamaResult askWithImageURLs( + String model, String prompt, List imageURLs, Options options) throws OllamaBaseException, IOException, InterruptedException, URISyntaxException { List images = new ArrayList<>(); for (String imageURL : imageURLs) { images.add(encodeByteArrayToBase64(loadImageBytesFromUrl(imageURL))); } OllamaRequestModel ollamaRequestModel = new OllamaRequestModel(model, prompt, images); + ollamaRequestModel.setOptions(options.getOptionsMap()); return askSync(ollamaRequestModel); } @@ -436,7 +446,7 @@ public class OllamaAPI { HttpRequest.BodyPublishers.ofString( Utils.getObjectMapper().writeValueAsString(ollamaRequestModel))); HttpRequest request = requestBuilder.build(); - logger.debug("Ask model '" + ollamaRequestModel + "' ..."); + if (verbose) logger.info("Asking model: " + ollamaRequestModel); HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream()); int statusCode = response.statusCode(); @@ -471,7 +481,10 @@ public class OllamaAPI { throw new OllamaBaseException(responseBuffer.toString()); } else { long endTime = System.currentTimeMillis(); - return new OllamaResult(responseBuffer.toString().trim(), endTime - startTime, statusCode); + OllamaResult ollamaResult = + new OllamaResult(responseBuffer.toString().trim(), endTime - startTime, statusCode); + if (verbose) logger.info("Model response: " + ollamaResult); + return ollamaResult; } } diff --git a/src/test/java/io/github/amithkoujalgi/ollama4j/integrationtests/TestRealAPIs.java b/src/test/java/io/github/amithkoujalgi/ollama4j/integrationtests/TestRealAPIs.java index 271f980..ed55323 100644 --- a/src/test/java/io/github/amithkoujalgi/ollama4j/integrationtests/TestRealAPIs.java +++ b/src/test/java/io/github/amithkoujalgi/ollama4j/integrationtests/TestRealAPIs.java @@ -4,12 +4,17 @@ import static org.junit.jupiter.api.Assertions.*; import io.github.amithkoujalgi.ollama4j.core.OllamaAPI; import io.github.amithkoujalgi.ollama4j.core.exceptions.OllamaBaseException; +import io.github.amithkoujalgi.ollama4j.core.models.OllamaResult; import io.github.amithkoujalgi.ollama4j.core.types.OllamaModelType; +import io.github.amithkoujalgi.ollama4j.core.utils.OptionsBuilder; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.ConnectException; import java.net.URISyntaxException; import java.net.http.HttpConnectTimeoutException; +import java.util.List; +import java.util.Objects; import java.util.Properties; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Order; @@ -32,10 +37,16 @@ class TestRealAPIs { } } + private File getImageFileFromClasspath(String fileName) { + ClassLoader classLoader = getClass().getClassLoader(); + return new File(Objects.requireNonNull(classLoader.getResource(fileName)).getFile()); + } + @BeforeEach void setUp() { Properties properties = loadProperties(); ollamaAPI = new OllamaAPI(properties.getProperty("ollama.api.url")); + ollamaAPI.setRequestTimeoutSeconds(20); } @Test @@ -83,4 +94,80 @@ class TestRealAPIs { throw new RuntimeException(e); } } + + @Test + @Order(3) + void testAskModelWithDefaultOptions() { + testEndpointReachability(); + try { + OllamaResult result = + ollamaAPI.ask( + OllamaModelType.LLAMA2, + "What is the capital of France? And what's France's connection with Mona Lisa?", + new OptionsBuilder().build()); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } catch (IOException | OllamaBaseException | InterruptedException e) { + throw new RuntimeException(e); + } + } + + @Test + @Order(3) + void testAskModelWithOptions() { + testEndpointReachability(); + try { + OllamaResult result = + ollamaAPI.ask( + OllamaModelType.LLAMA2, + "What is the capital of France? And what's France's connection with Mona Lisa?", + new OptionsBuilder().setTemperature(0.9f).build()); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } catch (IOException | OllamaBaseException | InterruptedException e) { + throw new RuntimeException(e); + } + } + + @Test + @Order(3) + void testAskModelWithOptionsAndImageFiles() { + testEndpointReachability(); + File imageFile = getImageFileFromClasspath("dog-on-a-boat.jpg"); + try { + OllamaResult result = + ollamaAPI.askWithImageFiles( + OllamaModelType.LLAVA, + "What is in this image?", + List.of(imageFile), + new OptionsBuilder().build()); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } catch (IOException | OllamaBaseException | InterruptedException e) { + throw new RuntimeException(e); + } + } + + @Test + @Order(3) + void testAskModelWithOptionsAndImageURLs() { + testEndpointReachability(); + try { + OllamaResult result = + ollamaAPI.askWithImageURLs( + OllamaModelType.LLAVA, + "What is in this image?", + List.of( + "https://t3.ftcdn.net/jpg/02/96/63/80/360_F_296638053_0gUVA4WVBKceGsIr7LNqRWSnkusi07dq.jpg"), + new OptionsBuilder().build()); + assertNotNull(result); + assertNotNull(result.getResponse()); + assertFalse(result.getResponse().isEmpty()); + } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/test/java/io/github/amithkoujalgi/ollama4j/unittests/TestMockedAPIs.java b/src/test/java/io/github/amithkoujalgi/ollama4j/unittests/TestMockedAPIs.java index 49b9eee..0003d09 100644 --- a/src/test/java/io/github/amithkoujalgi/ollama4j/unittests/TestMockedAPIs.java +++ b/src/test/java/io/github/amithkoujalgi/ollama4j/unittests/TestMockedAPIs.java @@ -118,10 +118,13 @@ class TestMockedAPIs { String model = OllamaModelType.LLAMA2; String prompt = "some prompt text"; try { - when(ollamaAPI.askWithImageFiles(model, prompt, Collections.emptyList())) + when(ollamaAPI.askWithImageFiles( + model, prompt, Collections.emptyList(), new OptionsBuilder().build())) .thenReturn(new OllamaResult("", 0, 200)); - ollamaAPI.askWithImageFiles(model, prompt, Collections.emptyList()); - verify(ollamaAPI, times(1)).askWithImageFiles(model, prompt, Collections.emptyList()); + ollamaAPI.askWithImageFiles( + model, prompt, Collections.emptyList(), new OptionsBuilder().build()); + verify(ollamaAPI, times(1)) + .askWithImageFiles(model, prompt, Collections.emptyList(), new OptionsBuilder().build()); } catch (IOException | OllamaBaseException | InterruptedException e) { throw new RuntimeException(e); } @@ -133,10 +136,13 @@ class TestMockedAPIs { String model = OllamaModelType.LLAMA2; String prompt = "some prompt text"; try { - when(ollamaAPI.askWithImageURLs(model, prompt, Collections.emptyList())) + when(ollamaAPI.askWithImageURLs( + model, prompt, Collections.emptyList(), new OptionsBuilder().build())) .thenReturn(new OllamaResult("", 0, 200)); - ollamaAPI.askWithImageURLs(model, prompt, Collections.emptyList()); - verify(ollamaAPI, times(1)).askWithImageURLs(model, prompt, Collections.emptyList()); + ollamaAPI.askWithImageURLs( + model, prompt, Collections.emptyList(), new OptionsBuilder().build()); + verify(ollamaAPI, times(1)) + .askWithImageURLs(model, prompt, Collections.emptyList(), new OptionsBuilder().build()); } catch (IOException | OllamaBaseException | InterruptedException | URISyntaxException e) { throw new RuntimeException(e); } diff --git a/src/test/resources/dog-on-a-boat.jpg b/src/test/resources/dog-on-a-boat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a17143e19b99313fc0fdba556a69fe7f4b4e681 GIT binary patch literal 52925 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 H{>T5>--YB; literal 0 HcmV?d00001 diff --git a/src/test/resources/test-config.properties b/src/test/resources/test-config.properties index 6c2a862..1d5d55e 100644 --- a/src/test/resources/test-config.properties +++ b/src/test/resources/test-config.properties @@ -1 +1,2 @@ -ollama.api.url=http://192.168.29.223:11434 \ No newline at end of file +ollama.api.url=http://192.168.29.223:11434 +ollama.model=llava \ No newline at end of file